- gf.component_from_yaml accepts info settings
- make sure that zero length paths can be extruded without producing degenerated boundaries. They just have ports instead of trying to extrude zero length paths.
- snap.assert_on_2nm_grid for gap in mmi1x2, mmi2x2, coupler, coupler_ring
- gf.Component.rotate() calls gf.rotate so that it uses the Component CACHE
- add `tests/test_rotate.py` to ensure cache is working
- add cache to component_from_yaml
- add `tests/test_component_from_yaml_uid.py`
- ensure consistent name in YAML by hashing the dict in case no name is provided
- `component.settings` contains input settings (full, changed, default)
- `component.info` contains derived settings (including module_name, parent settings, ...)
- `component.to_dict` returns a dict with all information (info, settings, ports)
- rename `via_stack` to `contact`