Changelog#
Unreleased#
7.27.1 - 2024-05-29#
No significant changes.
7.27.0 - 2024-05-20#
Improve get route astar #2752
add mimcap #2751
fix disk with wrap_angle=0 #2745
fix spiral_inner_io add_grating_couplers #2742
Clean schematic #2748
test other pdks #2746
update ruff #2743
adds cross-section kwarg #2741
auto_rename_ports for C #2739
get_route_sbend allow mismatch #2737
Improve port types #2732
Update kfactory[git,ipy] requirement from <0.13,>=0.9.1 to >=0.9.1,<0.14 #2735
Fixed issue #2740 where cross-section kwarg was ignored for generic pdk grating coupler array. #2741
7.26.1 - 2024-05-09#
derived component has ports #2731
7.26.0 - 2024-05-09#
7.25.2 - 2024-05-05#
7.25.1 - 2024-04-30#
7.25.0 - 2024-04-25#
Dependency Updates#
7.24.0 - 2024-04-22#
add component_with_function #2683
add via_yoffset to via_chain #2678
import_gds unique names appends uuid #2696
Fix cell annotation #2692
fix docs #2681
fix cross_section for ring_single_bend_coupler #2668
Pdk improvements #2694
Improve component with function #2687
Update type annotations in Component #2686
remove fill_rectangle from docs #2685
better import gds and ports #2680
improve updk #2679
add via_yoffset to via_chain #2678
Fix type annotation for mirror_x #2670
Bump sphinx from 7.2.6 to 7.3.7 #2693
Update kweb requirement from <1.3,>=1.1.9 to >=1.1.9,<2.1 #2675
Update trimesh requirement from <4.3,>=4 to >=4,<4.4 #2674
Update pydantic requirement from <2.7,>=2 to >=2,<2.8 #2676
7.23.0 - 2024-04-10#
add flag to remap layers #2662
fix text justify #2666
Fix cell decorator #2665
Bugfix: make
Component.remap_layers
actually return a copy #2658allow custom import gds #2661
release-drafter workflow #2659
Obey stacklevel in
warnings.warn
for loguru output #2656
Full Changelog: https://github.com/gdsfactory/gdsfactory/compare/v7.22.3…v7.23.0
7.22.3 - 2024-04-04#
fix array ports #2655
fix dc assymm #2644
[pre-commit.ci] pre-commit autoupdate #2652
get_bundle_sbend for vertical ports #2649
use partial instead of gf.partial #2646
snap ports to grid #2654
Move auto-widen settings to args for get_route_from_steps #2653
bugfix: assert_on_grid failing for large values #2650
fix to the output of the from_updk function #2645
7.22.2 - 2024-03-24#
7.22.1 - 2024-03-23#
7.22.0 - 2024-03-23#
add get_cross_section_name from pdk #2638
Add schematic #2622
more processes #2634
Use bend xsize rather than radius for bend size #2633
clean polygon vertices after converting to numpy array #2629
fix ring_pn #2631
Treat array as a cell_with_child and copy child info #2625
Update trimesh requirement from <4.2,>=4 to >=4,<4.3 #2630
7.21.0 - 2024-03-11#
inject gf.Component return annotation when using gf.cell #2620
7.20.0 - 2024-03-10#
7.19.0 - 2024-03-07#
7.18.0 - 2024-03-06#
7.17.0 - 2024-03-05#
7.16.0 - 2024-03-03#
7.15.2 - 2024-03-03#
7.15.1 - 2024-03-02#
Improve docs #2574
7.15.0 - 2024-03-01#
7.14.0 - 2024-02-27#
7.13.0 - 2024-02-24#
7.12.0 - 2024-02-20#
New
add more post_process #2546
add to_kfactory method #2536
Add possibility of adding label when adding fiber array #2535
add docs and development packages to docker container #2533
add post_process to bezier #2532
add post process to more pcells #2524
Bug Fixes
fix typos #2547
fixes to kfactory interface as well as show_ports with None orientation #2544
fix extrude #2529
fix seal_ring spacing #2528
fix gdsfactory full #2525
Maintenance
fix typos #2547
[pre-commit.ci] pre-commit autoupdate #2545
add more post_proces #2546
fixes to kfactory interface as well as show_ports with None orientation #2544
better annotations #2542
Possibility of specifying offset in add_fiber_array #2543
Add possibility of adding label when adding fiber array #2535
add docs and development packages to docker container #2533
add post_process to bezier #2532
post_process #2531
more post_process #2530
fix extrude #2529
fix gdsfactory full #2525
[pre-commit.ci] pre-commit autoupdate #2523
Documentation
7.11.2 - 2024-02-10#
publish docker container in github registry
7.11.0 - 2024-02-10#
7.10.8 - 2024-02-08#
7.10.7 - 2024-02-06#
Update kfactory latest #2512
add_fiber_array_electrical control pad assignment #2499
[pre-commit.ci] pre-commit autoupdate #2510
improve Component.simplify to keep layers and name #2507
add Component.simplify #2505
Dependency Updates:
Update pydantic requirement from <2.6,>=2 to >=2,<2.7 #2508
7.10.6 - 2024-02-02#
fix add_ports_from_markers_center #2503
Add possibility of different edge couplers in ec_array #2502
Add option to toggle KLayout’s ruler when plotting #2500
Add seal ring segmented #2493
better warnings traceability #2486
export metadata as json #2487
Adding possibility of different bends in 2x2 cutback #2485
fixes some of the samples #2484
[pre-commit.ci] pre-commit autoupdate #2482
allow disabling automatic showing of figure in quickplotter #2483
Component reduce #2480
fix docker tag #2479
Better doping layers #2477
Bump styfle/cancel-workflow-action from 0.12.0 to 0.12.1 #2495
Bump codecov/codecov-action from 3 to 4 #2496
Bump actions/cache from 3 to 4 #2494
Bump actions/upload-artifact from 3 to 4 #2426
7.10.5 - 2024-01-18#
add get_netlist merge_info flag #2476
7.10.4 - 2024-01-16#
Avoid pack deprecation warning #2475
[pre-commit.ci] pre-commit autoupdate #2474
fixing error message #2473
Add additional & optional font to existing text_rectangular(…) API #2471
Add additional reasonable default lumerical mappings #2469
fix with_sbend option in get_route_from_steps #2468
Serialize output for variable width/offsets in Section and CrossSection #2466
Add contains method to Info #2459
add gf.functions.add_marker_layer_container #2458
Fix release drafter to properly use gdsfactory project labels #2457
7.10.3 - 2024-01-09#
7.10.2 - 2024-01-07#
7.10.1 - 2024-01-04#
7.10.0 - 2024-01-02#
7.9.4 - 2024-01-01#
Bump actions/setup-python from 4 to 5 #2424
Bump actions/stale from 8 to 9 #2425
Bump actions/upload-pages-artifact from 2 to 3 #2428
Bump actions/deploy-pages from 2 to 4 #2427
Improve component settings serialization #2421
update install instructions #2419
make main cross section name parametrizable #2417
expose mirror_straight in spiral_external_io #2416
2414 underplotoverplot dataprep #2415
[pre-commit.ci] pre-commit autoupdate #2413
fix get_route_from_steps cross_section #2412
convert notebooks from python to jupyter #2411
run stale workflow once a month instead of daily #2410
use cross_section factories instead of copy #2409
better error messages for modifying CrossSections #2408
7.9.3 - 2023-12-22#
fix cicd docker flow #2407
Raise warning on empty add marker layer instead of failing #2406
More robust add ports #2404
Fix 1nm gaps in manhattan routes due to snapping issues #2403
allow pack components with same name #2401
fix cutback_loss #2399
fix taper from csv #2398
Update kweb requirement from <1.2,>=1.1.9 to >=1.1.9,<1.3 #2396
[pre-commit.ci] pre-commit autoupdate #2397
simpler cicd #2395
Validate anchors #2391
Fix access to references in component_sequence #2394
improve cicd #2392
fix direction parameter bend_straight_bend #2390
improve via_stack to support slots and deprecate via_stack_slot #2388
Custom transition #2387
use functions instead of strings for routing #2385
fix issues in flat netlist export #2386
No straight factory to metal heater meander #2382
7.9.2 - 2023-12-11#
Remove warnings #2380
Support straight, bend & taper factories in heater meander #2378
fix cell decorator #2379
Select layers to extract in
add_marker_layer
#2375make via_stack layers optional #2374
better error message for pack #2373
Improve routing #2372
[pre-commit.ci] pre-commit autoupdate #2371
Update kfactory[git,ipy] requirement from <0.10,>=0.9.1 to >=0.9.1,<0.11 #2370
7.9.1 - 2023-12-09#
Pass cross_section kwargs through coupler_straight #2369
Support
**kwargs
inPath.extrude
#2367Improve type annotations for gf.cell #2368
Actually support ComponentSpec in
add_marker_layer
#2365Fixes show_subports not showing top-level Component ports #2363
clean up generic pdk cells and docs #2362
Exclude layers #2358
More flexible support for different connectors in
get_bundle_all_angle
#2360avoid zero length polygons #2356
raise error on mutation #2354
improve non manhattan router docs #2353
better default settings and docs #2352
better straight_heater_meander #2351
add spiral_meander #2350
add round_corners_east_west and round_corners_north_south to rectangle #2349
7.9.0 - 2023-12-02#
improve readme #2348
use ruff instead of black #2347
add angle to edge_coupler_array #2346
preparing for minor release #2345
improve docstrings #2344
Support adding partialed cross_sections in taper cross section again #2343
fix add_tapers_cross_section #2342
Add info length taper cross section #2341
fix add_pads #2340
add radius_min #2339
Fix difftest bugs #2337
add functions for writing test_manifest #2336
Use shutil.copytree to install KLayout tech on Windows #2332
add_port can set the port info #2333
Allow labels on different layers when
label_layer=None
inadd_labels
#2331Add pins in
taper_cross_section
#2330[pre-commit.ci] pre-commit autoupdate #2322
Improve docstrings for
add_pins
#2325Update pydantic requirement from <2.5,>=2 to >=2,<2.6 #2321
7.8.18 - 2023-11-19#
7.8.17 - 2023-11-15#
remove_zero_length_tapers_and_pins #2312
fix plot #2310
[pre-commit.ci] pre-commit autoupdate #2308
access ports by index #2307
fix spiral inner io with kwargs in grating couplers #2306
add info label to cell_settings #2305
simpler_add_grating_couplers #2304
remove unused kwargs #2303
faster extract #2302
simpler #2300
Fix
inspect.signature
bug for partials with partialed decorators #2299Support giving straight spec in
get_route_from_steps
#2298Update
gf install
command for KLayout integration #2295
7.8.16 - 2023-11-08#
Bump kweb from 1.1.9 to 1.1.10 #2277
Components can extrude transitions #2293
Fix mutability issues #2291
fix zero length polygons #2290
Add labels along with add_marker_layer and write pin to port layer on None #2286
simpler container #2287
default_show_to_gds #2283
[pre-commit.ci] pre-commit autoupdate #2278
remove show ports side effects #2282
fix remove_from_cache #2280
fix rectangle_with_slits #2279
add edX course training link #2276
7.8.15 - 2023-11-05#
Fix typing for
get_cross_sections
and add tests #2246fix extrude_transition #2243
Write cells can take list #2241
deep copy child #2240
fix add_electrical_pads_top_dc #2239
add json formatted labels #2237
add best practices #2236
Allow different ComponentSpecs in edge coupler array #2235
Allow none cross sections #2234
Add flake8-debugger checks to ruff #2233
fix cross_section for paths #2231
add validate #2221
filter warnings #2229
pick good length_x for mzi length_x=None #2228
add get_child_name for cell that contain other cells #2224
fix get_layer #2223
update pre-commit #2222
Cell improved #2219
Rename layers #2217
allow to access cross_section by names #2214
7.8.14 - 2023-10-30#
7.8.13 - 2023-10-30#
7.8.12 - 2023-10-28#
add json formatted labels #2237
add best practices #2236
Allow different ComponentSpecs in edge coupler array #2235
Allow none cross sections #2234
Add flake8-debugger checks to ruff #2233
fix cross_section for paths #2231
add validate #2221
filter warnings #2229
pick good length_x for mzi length_x=None #2228
add get_child_name for cell that contain other cells #2224
fix get_layer #2223
update pre-commit #2222
Cell improved #2219
Rename layers #2217
allow to access cross_section by names #2214
7.8.11 - 2023-10-24#
remove get_capacitance_path #2213
add keep_ports flag to union #2212
Serialize width #2211
consistent cutback_bend #2210
Small fix to routing logic #2208
fixing gf watch for watching directories #2207
port_orientation can be tuple in ring heaters #2206
add cell_settings as a separate column for manifest #2205
7.8.10 - 2023-10-20#
Add straight function to ring dut #2203
add optional function add_bbox to bend_euler and bend_circular #2202
Cleaner rings #2201
allow align to be multi-layer #2200
Add bbox #2198
Fix file watcher #2195
Less general error catching in LayerViews #2190
make optional packages optional #2187
make klayout optional #2185
fix area #2183
7.8.9 - 2023-10-14#
7.8.8 - 2023-10-13#
Fix cs and transitions #2158
add via_stack_heater_m2 #2178
Fix lvs demo #2175
warn_connect_with_width_layer_or_type_missmatch #2176
more representative implants generic_process #2177
remove enforce_port_ordering arg from get_bundle_from_waypoint params #2174
fixes difftest to use XOR instead of NOT #2172
Fix docs #2170
Faster remap layers #2168
Import gds names have longer limit #2167
7.8.7 - 2023-10-08#
7.8.6 - 2023-10-04#
7.8.5 - 2023-10-03#
bbox does not extend beyond ports in bends #2154
7.8.4 - 2023-10-02#
7.8.3 - 2023-10-01#
• improve change template #2144 gdsfactory/gdsfactory# • cross_section_fixes #2143 gdsfactory/gdsfactory#
7.8.2 - 2023-09-30#
fixed pn cross_section functions #2141
Fix pn cross sections (#2142)
use tbump and towncrier (#2140)
better rib_with_trenches (#2133)
better ascii art (#2139)
extrude transition (#2138)
Add dbr kwargs (#2136)
fix docs for non-manhattan router (#2135)
Improve cdsem (#2132) @joamatab
7.8.1#
fix
route_info
PR
7.8.0#
fixes name issue gdsfactory/gdsfactory#2089
adds
CONF.enforce_ports_on_grid
flag that allows you to create offgrid ports fixes gdsfactory/gdsfactory#2118simplify CrossSection so that it’s serializable.
simplify Transition, it does not inherit from CrossSection
create separate
gf.path.extrude_transition
remove A-star router from docs as it’s an experimental feature, not ready for use
remove **kwargs from many components
add warnings for off-grid-ports and non-manhattan ports (0, 90, 180, 270)
add
CrossSection.validate_radius
pin pydantic min version <2.4
7.7.1#
make snap to grid backwards compatible with <= 7.6.1
7.7.0#
fix
spiral_heater
raise error when using a single layer
assert ports on grid at the cell layer, and bounding box points on grid
snap to grid acctepts
grid_factor
7.6.1#
serialize
dict_keys
7.6.0#
improve labels and documentation for test protocol
fix
layer_stack
mutability by redefiningLayerStack.model_copy()
add
spiral_inner_io_fiber_array
andadd_grating_couplers_fiber_array
to components
7.5.0#
fix layerstack.filtered
Change default
Component.get_ports()
depth to 0handle complex numbers in serialization
protect against no kweb installed
Fix pydantic serializer warnings
7.4.6#
add layermap model PR
7.4.4#
update docs
fix cli, remove uvicorn optional dependency from cli
7.4.3#
add schema version for YAML files PR
add
gf.components.cutback_loss
improve
gf.components.die
andgf.components.wafer
7.4.1#
fix route with sbends
7.4.0#
port to pydantic2
fix windows paths
7.3.4#
import
add_tapers
add name counter with
$1
7.3.3#
clean path characters
add bundle topology validation to
get_bundle
7.3.2#
warn on bad bundles PR
7.3.1#
minor fixes
7.3.0#
make
flatten_offgrid_references=False
in GdsWriteSettings.add component flatten invalid refs.
7.2.1#
add
from_image
to import GDS from image.add
gf.components.rectangles
7.2.0#
fix justify text rectangular
switch from click to typer for CLI. Requires reinstall gdsfactory.
add process info to layerstack
7.1.4#
7.1.2#
7.1.1#
updk improve PR
7.1.0#
7.0.1#
7.0.0#
move plugins and simulation to gplugins repo PR
add path length analyzer PR
only works for python>=3.10
Migration guidelines:
Modernize types Optional[float] -> float | None
find . -name "*.py" -exec sed -ri 's/Optional\[(.*)\]/\1 | None/g' {} \;
Replace gdsfactory[.]simulation. with gplugins.
grep -rl 'gdsfactory.simulation.' /path/to/your/files | xargs sed -i 's/gdsfactory.simulation./gplugins./g'
6.116.0#
Warning: You need python>=3.10 to get the latest version of gdsfactory.
6.115.0#
add mmi for nxm PR
6.114.1#
6.114.0#
6.113.0#
6.112.0#
6.111.0#
6.109.0#
6.108.1#
add module info to cell decorator PR
6.108.0#
6.107.4#
6.107.3#
6.107.2#
fix extrude serialization PR
6.107.1#
6.107.0#
6.106.0#
add
fraction_te
to tidy3d mode solver.
6.105.0#
6.103.3#
add python3.7 bare bones tests PR
6.103.1#
fix jupyter widget PR
6.103.0#
6.102.4#
fix loopback snapping PR
6.102.3#
fix heater meander issues PR
6.102.1#
improve script to extract ports PR
6.102.0#
6.101.1#
fix kfactory dependency PR
6.101.0#
fix git diff gds PR
6.100.0#
add
get_polygon_bbox
andget_polygon_enclosure
that return a shapely polygon PR
6.99.0#
6.98.2#
6.98.1#
6.98.0#
add verification functions to check for component overlap PR
6.97.1#
6.97.0#
6.96.0#
flatten invalid refs
6.95.0#
add pins and
flatten_offgrid_references
PR
6.95.0#
6.94.0#
6.93.0#
6.92.0#
show labels in klayout PR
6.91.0#
replace with database s3 bucket PR
6.89.7#
6.89.4#
fix
grating_coupler_loss
structures PR
6.89.1#
improve manhattanization PR
6.89.0#
6.88.1#
remove triangle dependency for M1 compatibility PR
6.88.0#
6.86.0#
add optional parameter cladding simplify PR
6.85.0#
add section inset PR
6.84.0#
better_cutback component PR
6.83.0#
6.82.0 PR#
fix tiling stitching issues
6.81.1 PR#
improve mode converter
6.81.0 PR#
bring back multithreaded simulations with batch. Thanks to verbose flag is possible now.
update tidy3d to latest version
6.80.0 PR#
add function that returns labels with
GratingName-ComponentName-PortName
make it default for
gf.routing.add_fiber_single
andgf.routing.add_fiber_array
for disabling automated measurement labels you can define
layer_label=None
6.79.0#
6.77.0#
6.76.0#
6.75.0#
6.74.0#
6.73.2#
extend kwargs #1507 to all
cross_section
functions PR
6.73.0#
6.72.9#
better
via_stack_with_offset
PR
6.72.8#
gf.components.array has optional size
6.72.7#
Mirroring drop waveguide for asymmetric waveguides in section based ring PR
6.72.6#
fix mzi with new routing defaults PR
better error messages when vias do not fit in
via_stacks
6.72.5#
better routing defaults PR
6.72.4#
6.72.1#
fixes to
gf.components.ring_section_based
PR
6.72.0#
6.71.0#
6.70.0#
6.69.0#
6.68.0#
add gf.geometry.fillet and gf.geometry.boolean_polygons PR
6.67.0#
add modulator example PR
6.66.0#
add
Component.offset
PR
6.65.3#
make sure via stack fits at least one via PR
add
Component.get_layer_names
make rich-click and optional dependency
6.65.0#
6.64.2#
6.64.1#
add setter for
Port.x
andPort.y
metals have default gap = 10
gf.routing.get_bundle(separation=None)
defaults tocross_section.gap
andcross_section.width
nicer CLI with rich-click
remove CLI from docs
6.64.0#
6.63.0#
add
bend_euler_s.info['length']
add
mzi(mirror_bot=False)
so you can mirror the bottom arm.
6.61.0#
6.60.1#
Fixing connections on spiral_heater_fixed_length and removing duplicate remove_layers PR
6.60.0#
make klayout an optional dependency
fix cutback_2x2 PR
6.59.1#
6.58.0#
6.57.2#
6.57.1#
add ports to
ring_section_based
removed required layers from pdk
6.57.0#
6.56.0#
fix polygons at gdstk level before shapely meshing preprocessing PR
add spiral for given length to
gf.components.spiral_racetrack_fixed_length
PRDon’t warn on show PR
adding a method in LayerStack to filter conveniently PR
add
check_min_radius
to bend_s and renamenb_points
tonpoints
for consistency PR
6.55.0#
6.54.0#
add gap parameter to via
6.53.0#
better error messages for
delay_snake
6.52.0#
install rich, jupytext and klayout, by default with
pip install gdsfactory
logger.level = ‘WARNING’ by default
gf –version prints version of all packages
add
gf.config.print_version()
andgf.config.print_version_pdks()
6.51.0#
6.50.0#
6.49.0#
install uses copy instead of symlink if symlink fails
add gf.cross_section.rib_with_trenches
use python instead of jupyter notebooks to build docs
logger does not automatically print the version of the tool
gf –version prints all plugin versions
6.48.0#
6.47.1#
6.47.0#
6.45.0#
6.44.0#
6.43.0#
if no active PDK logger outputs warning, and activates generic PDK. In the future we won’t activate the generic pdk by default.
dither_pattern and hatch_pattern can be None
Replace _ACTIVE_PDK with
gf.get_active_pdk()
as underscored variables are not supposed to be read or modified directly.Add coupler_straight_asymmetric PR
6.42.0#
don’t expose generic LAYER_VIEWS PR
6.41.0#
6.40.0#
fix devsim plugin
run meshing notebooks
add variability analysis PR
6.38.0#
update tidy3d from 1.8.3 to 1.8.4
Add database simulation example notebook PR
Add jinja based YAML circuits PR
-
add
Pdk.bend_points_distance
parameter for bendsadd database to docs
make sure euler and arc have always enough points, as suggested by Orion in gdsfactory/gdsfactory#1090
6.37.0#
better port names for grating couplers, include
opt_te_wavelength_fiberAngle
remove grating coupler markers
remove
Component.unlock()
in some functions that add labels. Cached components should never be modified.add_fiber_single
andadd_fiber_array
don’t add labels by default
6.36.0#
6.35.1#
use constants in pdk
default max points to 4e3
6.35.0#
6.34.0#
6.33.0#
6.32.0#
6.31.0#
6.30.2#
Fix wafer layer in 3D meshing PR
6.30.1#
fix extract layers PR
6.30.0#
6.29.0#
add plot_klayout, plot_holoviews, plot_matplotlib. plot defaults to plot_klayout PR
6.28.0#
6.27.0#
add options for 3D meshing PR
-
remove add_bbox_siepic
move tests from module to repo
update tidy3d to 1.8.3
document plugins in README.md gdsfactory/gdsfactory#1205
6.26.0#
use klayout as the default jupyter notebook viewer PR
6.25.2#
fix mesh with 3D holes PR
6.25.0#
add flat netlist to
Component.get_netlist_flat()
PR
6.24.0#
add devcontainer similar to as in this package
pdk.get_cross_section
can accept CrossSection kwargs if cross-section already created PR
6.23.0#
6.22.2#
6.22.0#
fix mode hashing for tidy3d mode solver. Add
plot_power=True
flag that can also plot field if False.change gdslib branch to main
install gdslib in $HOME/.gdsfactory
remove empty cells from notebooks
move gdslib to home and use tidy3d instead of MPB for SAX tutorial PR
6.21.0#
Fix lumerical FDTD notebooks
add gf.config.rich_output
layer stack can be addressed as a dict
6.20.0#
update femwell from 0.0.3 to 0.0.4
update tidy3d from 1.8.1 to 1.8.2
6.19.4#
6.19.2#
expose plot options in meep solver
6.19.1#
install tidy3d at the end in make plugins so it installs shapely 1.8.4
add LayerStack and LayerLevel to gf.typings
silent logger by default
6.19.0#
simplify technology into a separate module PR PR PR. You need to rename:
LAYER_COLORS -> LAYER_VIEWS
layer_colors -> layer_views
gf.layers.load_lyp -> gf.technology.LayerViews.from_lyp
GENERIC -> GENERIC_PDK
gdsfactory.tech -> gdsfactory.technology
gdsfactory.geometry.get_xsection_script import get_xsection_script -> gdsfactory.generic_tech.get_klayout_pyxs import get_klayout_pyxs
get_xsection_script -> get_klayout_pyxs
move klayout to gdsfactory/generic_tech/klayout, you will need to run
gf tool install
to linkklive
add Implant simulation PR
The fill_rectangle function wants either a list or layers for fill_inverter or a list of bools. Before the code did not properly accept a list of layers. PR
6.18.4#
fix path_smooth with near-collinear points PR
6.18.3#
fix transition also tapers cladding_layers and cladding offsets PR
6.18.2#
add port can infer width from cross_section PR
6.18.1#
transition also tapers cladding_layers and cladding offsets PR
6.18.0#
6.17.0#
basic conformal 3D meshing
6.16.3#
update tidy3d from 1.8.0 to 1.8.1
fix write_sparameters_meep_mpi, after default
read_metadata=False
in import_gds
6.16.2#
default read_metadata=False in import_gds
fix write_labels_klayout to be consistent with write_labels_gdstk (return angle as well)
6.16.1#
remove straight Pcell parameter from many components that do not need it PR
6.16.0#
6.15.3#
6.15.2#
add mirroring option to pn xs PR
6.15.1#
6.15.0#
6.14.1#
fix bend_s width issue
6.14.0#
6.13.0#
6.12.0#
6.11.0#
add option to register materials_index into a PDK.
tidy3d and meep can use the same material_index from the registered materials.
6.10.0#
If sidewall, can specific at which height gds layer width equals structural width PR
fix for shapely 2.0 PR
improve klayout tech for 0.28 PR
add Option to have the mesh elements defined by material instead of layer PR
add layer_grating to some of the gratings in case the grating needs to be defined with different layers. By default = None so it does not change existing gratings PR
6.9.0#
6.8.0#
6.7.0#
Read raw cells PR
6.6.0#
add greek cross component: Process control monitor to test implant sheet resistivity and linewidth variations. PR
add waveguide termination component. Terminate dangling waveguides with heavily doped narrow taper to protect modulator, detectors, and other active electronics from stray light. PR
rename master branch to main
6.5.0#
6.4.0#
improve meshing capabilities, add installer and docs
6.3.5#
add default 0 rotation to schematic and separation=5um for routes PR
Generic mesh refinement, refactoring PR
move python macros to python, (macros is for ruby), add klive path to print PR
fix position of rotated “no orientation” ports PR
Fix grating_coupler_elliptical_arbitrary component with how the ellipses are drawn. In the previous implementation, a constant neff is assumed for each grating unit cell, which is then used to determine the ellipticity of the teeth. However, for an apodized grating coupler, neff changes depending on the unit cell geometry (e.g. on duty cycle), so an apodized grating coupler would be drawn incorrectly. In addition, neff is not needed as an input, because it can be calculated from the period, wavelength, cladding index, and coupling angle, which are already inputs to the component. PR
6.3.4#
replace lxml with the built-in xml modules to support python 3.11
6.3.3#
fix rotations in schematic
gf tool install installs klayout as a salt package
include material and name into 2.D view script
6.3.0#
Schematic-Driven Layout flow PR
from future import annotations from functools import partial to all files and makes the docs cleaner by rendering the type aliases rather than the expanded type PR
Add routes to gdsfactory klayout macro PR
fix missing conversion from rad (gdstk) to deg PR
better error message when failing to import missing gdscell PR
mzi lattice mmi PR
prepare release PR
keep python3.7 compatibility, by removing
:=
Walrus operatormove schematic driven flow notebook from samples to docs
add test coverage for write_labels_gdstk
6.2.6#
import_gds can import any cell (not only top_level cells) PR
6.2.5#
6.2.4#
6.2.3#
fix add ports from paths and polygons
add tests
6.2.2#
fix import_gds works with arrays
ComponentReference allows vectors v1 and v2
6.2.1#
difftest prompts you whether you want to do the xor diff
6.2.0#
6.1.1#
6.1.0#
Native read and write oasis support
6.0.7#
fix ComponentReference.get_polygons broken when by_spec is layer and as_array is True
fix Component.movex
better names for transformed
6.0.6#
6.0.5#
remove pytest from
requirements.txt
as it’s already onrequirements_dev.txt
Ensure consistent u and z bounds when meshing a uz cross-section PR
6.0.4#
expose uz_mesh functions PR
6.0.3#
fixes ComponentReference.translate() PR
Keep reference names on copy, and allow setting on init PR
Ensures that reference names are retained when copying a component
Fixes an issue when a ComponentReference’s name is set before it has an owner
Adds name as a parameter to ComponentReference’s constructor, so it can be set on initialization
Fixes serialization of numpy arrays such that they are retained as numeric types (this was also the old, gdsfactory 5.x behaviour). Increases the default maximum # of digits retained when serializing arrays from 3 to 8 (this could cause side effects if not enough digits are retained, and 8 should still be plenty to ensure consistency across machines… 1e-8 is the default atol threshold in np.isclose()). PR
Devsim plugin with GMSH plugin backend PR
6.0.2#
add trim PR
6.0.1#
6.0.0#
port gdsfactory from gdspy to gdstk: faster booleans, loading and writing GDS files.
remove Inheritance of Component, ComponentReference, Polygon, Label from gdspy
use gdstk.Label and gdstk.Polygon directly (no inheritance)
Label.origin instead of Label.position
ComponentReference, has rows and columns to represent removed
CellArray
add loss model for modesolver PR
fixes PR
remove deprecated aliases
fix to_3d
fix quickplo
Fix gmeep get_simulation center issue PR
get_polygons PR
replace deprecated reflect by mirror PR
remove aliases PR
5.56.0#
rename add_fidutials to add_fiducials (it was misspelled before) PR
5.55.0#
5.54.0#
Add shortcut during installation PR
5.53.0#
get_material from meep can also use tidy3d database PR
5.51.0#
add devsim installation to installer
5.50.0#
5.49.0#
fix devsim PR
5.47.2#
make package install work on Windows PR
5.47.1#
improve simulation.plot.plot_sparameter kwargs PR
replace with_sparameter_labels with with_simpler_input_keys
5.47.0#
5.46.0#
5.45.1#
add spiral heater phase shifter PR
5.45.0#
add devsim and mkl to
pip install gdsfactory[full]
tidy3d modesolver sweep width computes also fraction_te PR
5.44.0#
remove TECH, use gf.get_constant instead
Add optional decay cutoff argument to write_sparameters_meep issue
5.43.2#
add
gf.cross_section.metal_routing
and usemetal_routing
string instead of function for metal routing functions PRComponent.remove_layers returns flat copy when hierarchical=True
5.43.1#
upgrade tidy3d-beta from 1.7.0 to 1.7.1
straight_heater_meander accepts straight_widths
5.43.0#
add devsim from pypi PR
dbr_tapered rewrite PR
Recursively netlist transformed (flattened) references PR enables recursive netlisting of references which have been transformed and flattened via the flatten_offgrid_references decorator, such that they can be properly simulated, i.e. with sax.
Don’t re-apply PDK decorator in get_component PR
5.42.0#
fix gf tool install when file already exists PR
5.41.1#
remove Port.uid PR
add gf.components.array(add_ports=True)
5.41.0#
gf watch
watches python files as well aspic.yml
PR
5.40.0#
KLayout technology module improvements:
Added CustomPatterns class, which contains lists of CustomDitherPatterns and CustomLineStyles
Added yaml import/export for CustomPatterns and LayerDisplayProperties
LayerView group members are stored in a list rather than a dict
Added mebes reader options to KLayoutTechnology export since they aren’t created by the KLayout API
Fixed some formatting issues when writing .lyt files
2.5D section of .lyt now uses zmin, zmax as it should, rather than zmin, thickness as it did
5.39.0#
upgrade tidy3d to 1.7.0
5.38.0#
add inverse design capabilities with Meep PR
5.37.2#
remove
__init__
from klayoutmove klayout.get_xsection_script to geometry.get_xsection_script
improve klayout technology PR
Allow users to set layer_pattern regex
Remove LayerStack from KLayoutTechnology and take as argument for export_technology_files instead.
5.37.1#
fix is_on_grid PR
5.37.0#
remove Component.version and Component.changelog, change tutorial to recommend keeping Pcell changelog in the docstring. PR
5.36.0#
5.35.0#
Mesh2D renames boundaries PR
5.34.0#
bump sax from 0.8.2 to 0.8.4
add fixes for snapping to the grid, add parabolic_transition PR
5.33.0#
FEM mesher. Given component, line defined by (x_init, y_init), (x_final, y_final), and LayerStack, generate simple mesh of component cross-section. Mesh returned separately labels non-touching elements on different layers (for use in different solvers). Can provide dict with different resolution for different layers PR
add Coherent receiver (single and dual pol) Coherent transmitter (single and dual pol) PR
5.32.0#
5.31.0#
5.30.0#
5.29.0#
add sweep_neff, sweep_width, sweep_group_index gtidy3d.modes and ring model
Absorption from DEVSIM PR
DEVSIM PIN waveguides now return imaginary neff
Changes to tidy3D mode solver to allow running in a different interpreter for compatibility
Added support for None orientation ports for get_bundle_from_steps. PR
bend_euler returns wire_corner if radius = None
upgrade to tidy3d-beta 1.6.3
5.28.1#
upgrade to tidy3d-beta 1.6.2
add functions to write a complete technology package for KLayout using the KLayoutTechnology class PR
remove unnamed layers
5.28.0#
Add avoid_layers, distance, and cost addition for turns for routing.get_route_astar PR
cross_sections
metal1
,metal2
,metal3
haveradius = None
routing.get_bundle uses
wire_corner
ifcross_section.radius=None
routing.get_route_astar uses
wire_corner
ifcross_section.radius=None
5.27.1#
fix devsim TCAD units and examples.
5.27.0#
add A* router PR
5.26.3#
5.26.2#
devsim TCAD improvements
remove wurlitzer
change devsim example classes CamelCase by snake_case
5.26.0#
add grating_coupler_elliptical uniform PR
generate KLayout technology files (.lyp) from the gdsfactory LayerColors, add structures that let you write (almost) all of the properties that .lyp files can take, including groups of layer properties. PR
via_stack has
port_type=placement
for intermediate ports and compass has defaultport_type=placement
PRget_netlist ignores ports with port_type=’placement’ PR
move gdsfactory.copy to Component.copy PR
clean install.py PR
Fix a bug where calling make_symlink on an already-existing install would raise an error
Generalizes installing things to KLayout, and provides a new method for installing custom PDKs/technology to KLayout
5.25.1#
Component.plot() takes kwargs to configure the settings for matplotlib
5.25.0#
5.24.1#
fix lazy parallelism with new sparameter port naming conventions PR
5.24.0#
write sparameters works with arbitrary port naming convention and different input modes.
o1@0,o2@0
for meep and tidy3d. whereo1
is in the input port@0
is the first mode, ando2@0
refers too2
port mode0
add
csv_to_npz
function ingf.simulation.convert_sparameters.py
to convert old sims into new ones.
5.23.1#
sort cells by name before writing gds to get a binary equivalent.
5.23.0#
5.22.3#
component_sequence has the same named scheme it used to have before adding named_references
add flip option to component_sequence
5.22.2#
5.22.0#
more robust geometric_hash PR rounds to 0.1nm by default
Component.get_netlist()
returns a Dict instead of OmegaConf.DictConfig (faster)remove
Component.get_netlist_dict()
in favor ofComponent.get_netlist()
5.21.1#
reduce unnecessary usage of deepcopy
5.21.0#
Thanks to the counter
Component.add_array
has the same naming convention asComponent.add_ref
PRremove picwriter dependency and lazy load scipy functions from init
5.20.0#
add file storage class that can use local file cache and cloud buckets PR
-
make reference naming more reliable, by replacing the alias and aliases attributes with
named_references
property called name, which is guaranteed to always stay in sync with Component.references. Because name and owner are both changed to properties, we also guard against strange cases where either are changed midway through creating a component.add deprecation warning for alias/aliases
add gf.read.import_gdspy
add_ref adds default alias with incremental names using a counter.
5.19.1#
Rewrote model_from_gdsfactory to GDSFactorySimphonyWrapper. Similar to Simphony’s SiPANN wrapper PR
gf.routing.get_route()
haswith_sbend
that allows failing routes to route using Sbend.
5.19.0#
5.18.5#
add layer_via and layer_metal to cross_section.pn. None by default.
fix yaml rotation issue
add components.cutback_2x2
add components.cutback_splitter
make
pip install gdsfactory[tidy3d]
available instead ofpip install gdsfactory[full]
upgrade notebooks to
sax==0.8.0
and pinsax==0.8.0
inpip install gdsfactory[full]
5.18.4#
fix AttributeError (component.info is sometimes None) PR
adding ports and copying child info in transformed cell wrapper PR
5.18.3#
5.18.1#
add kwargs to bezier and change coupler_adiabatic from picwriter to adiabatic coupler
5.18.0#
include
rule_not_inside
,rule_min_width_or_space
klayout DRC checks in gf.geometry.write_drcfix install instructions for SAX in docs
5.17.1#
copy_child_info updates component info
mirror also propagates info
add grating coupler info in add_fiber_single, add_fiber_array
5.17.0#
simplify write_sparameters code PR
clean code PR
remove unused Coord2
move gds folder into tests/gds
move schemas folder into tests/schemas
move models to simulation/photonic_circuit_models
simpler bend_s and bezier. User cross_section instead extrude_path PR
simplify code structure PR
rename dft folder to labels
move write_labels from mask folder to
labels
delete mask folder
fix docstrings and apply pydocstyle pre-commit hook PRs
replace assert_on_2nm_grid to snap to 2nm grid PR
Add tcad cross-section simulation DEVSIM plugin PR
fully parametrized ridge PIN waveguide cross-section
basic DC simulation and visualization
example notebook, with DEVSIM installation instructions
5.16.0#
rename
gdsfactory/flatten_offgrid_references.py
togdsfactory/decorators.py
add test to flatten_offgrid_references and include documentation in the PDK docs
pdk.activate clears cache
5.15.3#
-
fix offgrid ports connect
Component.copy() and Component.flatten() don’t assign fixed names to the output Component which could create name collisions. It is safer to keep the new cell’s default name (with UID) to prevent this. The thought is that even a copied or flattened cell should be eventually placed inside a cell function with @cell decorator, which will remove the anonymous and unpredictable names (for those of us who care). And for those who don’t care as much, at least they won’t get dangerous side effects!
PR changes get_netlist to only mate matching port types, and also to allow excluding specified port types from being netlisted (which is useful i.e. for non-logical placement ports)
solve add_labels.get_labels mutability issue by returning list of labels
5.15.2#
5.15.1#
expose import_oas to gf.read and Improve docs API
klive shows gdsfactory version
write_cells does not use partials
5.15.0#
read and write OASIS files using klayout API.
5.14.5#
5.14.5#
pack and grid expose components ports.
add gdsfactory/samples/24_doe_2.py samples with unique labeling.
5.14.0#
Port has optional width that can get it from the cross_section
Port does not inherit from phidl.Port. In python there should be only one obvious way to do things.
Deprecate Port.midpoint. Use Port.center instead.
Deprecate Port.position. Use Port.center instead.
Deprecate Port.angle. Use Port.orientation instead.
5.13.0#
add gdsfactory.simulation.simphony.model_from_csv
5.12.28#
fix min_density and min_area Klayout write_drc
5.12.27#
add min area and min_density rules to klayout write drc deck
upgrade phidl to 1.6.2
lazy load matplotlib and pandas
update tidy3d-beta from 1.4.2 to 1.5.0.
mode_solver has
precision: single or double.
filter_pol: te, tm or None.
5.12.22#
add xoffset1 and xoffset2 to straight_heater_doped_rib
add taper_sc_nc to docs and tests
add gdsfactory.simulation.add_simulation_markers, as well as example in the meep FDTD docs
5.12.21#
rename radius to min_bend_radius in spiral_double and spiral_archimedian
add gdsfactory/klayout/get_xsection_script.py to get cross_section script for klayout plugin
add pack and grid to documentation API
5.12.20#
rename double_spiral to spiral_double
fix spiral_double.
start_angle = 0
end_angle = 180
rename inner_radius to radius in spiral_double and spiral_archimedian
5.12.19#
lazy load matplotlib. Related to issue
make port.orientation None marker to be a cross.
add settings label can ignore settings
better message for symlinks in
gf tool install
fix write_cells code. Add a test.
better mutability error message fix issue
add YouTube Video link to docs
5.12.16#
add klayout python cross_section scripts
improve klayout drc decks. Add deep, tiled and default modes.
add klayout drc and simulation docs API
5.12.14#
fix simphony MZI model for montecarlo simulations PR
add simphony montecarlo variability examples
5.12.13#
5.12.12#
add
gdsfactory.simulation.gtidy3d.modes.WaveguideCoupler
5.12.11#
add
gdsfactory.simulation.gtidy3d.modes.group_index
add
gdsfactory.simulation.gtidy3d.modes.sweep_width
add
gdsfactory.simulation.gtidy3d.modes.plot_sweep_width
5.12.7#
get_sparameters_meep_mpi runs the mpirun command asynchronously. Direct stdout and stderr to a log file and console. PR
It can’t replace the current Popen call, as it doesn’t handle the case of wait_to_finish=False, so it won’t work with the get_sparameters_meep_batch code as-is.
5.12.6#
rename get_effective_index to get_effective_indices and add 2.5D FDTD demo
5.12.5#
better docstrings with autodoc_typehints = “description”
improve meep plugin.
remove port_field_monitor_name parameter (no longer needed) thanks to meep 1.23 introduced to use the energy in the whole simulation to determine when to terminate, which is a better termination condition than the energy at the ports. PR. Requires meep 1.23 or newer.
update termination condition for grating_coupler simulations.
rename effective permitivity to get_effective index. Change units from meters to um, and permitivities to refractive_index to be consistent with gdsfactory units in um.
add
gf.generate_doe
PRadd add_center_section to CrossSection and cross_section for slot cross_section PR fixes
5.12.4#
5.12.2#
extract generating component list for doe into a separate function for use in pack_doe and elsewhere fixes issue
meep 1.23 introduced to use the energy in the whole simulation to determine when to terminate, which is a better termination condition than the energy at the ports. PR. Requires meep 1.23 or newer.
5.12.1#
layer_stack has a 2.5D information.
fix xsection_planarized script
add 2.5 info to generic.
5.12.0#
remove
gf.simulation.gtidy3d.modes.find_modes
, add cache and filepath to Waveguideremove many default parameters from
Waveguide
replace from pickle to np.savez_compressed()
replace
from tqdm import tqdm
tofrom tqdm.auto import tqdm
add Optional refractive_index to LayerLevel
add Transition to docs API
add archimedean spiral PR
add Google pydocstyle to docs/contribution.md
5.11.4#
5.11.3#
move dependencies from
pip install gdsfactory[full]
topip install gdsfactory
watchdog
qrcode
increase test coverage
remove
icyaml
webapp
5.11.2#
better docs
simpler gf module namespace. unexpose some functions from module
port
klive
plot, quickplot, quickplot2, set_quickplot_options
dft
add shear angle to Port.str
5.11.1#
add pytest and pytest-regressions to requirements
5.11.0#
add Pdk.warn_offgrid_ports
move optional dependencies to
pip install gdsfactory[full]
move sipann dependency to
pip install gdsfactory[sipann]
parametric layer_stack
5.10.17#
5.10.16#
rename triangle to triangles, to avoid conflict names with triangle module PR
fix interconnect plugin notebook PR
add
Pdk.grid_size = 0.001
(1nm by default)raise warning when extruding paths with off-grid points
raise warning when connecting components with non-manhattan (0, 90, 180, 270) orientation
5.10.15#
Update and document Interconnect plugin PR
5.10.14#
simpler serialization.py
difftest response is Yes by default when there is a GDSdiff error
5.10.13#
5.10.12#
speed up module gf/init.py thanks to scalene python profiler
5.10.8#
fix documentation (add
pip install jaxlib jax
) tomake plugins
fix some mypy issues
5.10.7#
-
move mypy and pytest config to pyproject.toml
rename extension_factory to extension
5.10.6#
raise ValueError if no polygons to render in 3D.
add pad ports to functions that route to electrical pads, so new Component can still access the pad ports.
gf.routing.add_electrical_pads_shortest
gf.routing.add_electrical_pads_top
gf.routing.add_electrical_pads_top_dc
add
gf.add_labels.add_labels_to_ports
add
gf.add_labels.add_labels_to_ports_electrical
add
gf.add_labels.add_labels_to_ports_optical
add
gf.add_labels.add_labels_to_ports_vertical_dc
for pads
fix colors in Component.plot()
add
Component.plotqt()
add add_port_markers and read_labels_yaml to gf.read.labels
5.10.5#
quickplotter picks a random color if layer not defined in pdk.get_layer_color(). Before it was raising a ValueError.
5.10.4#
Use tidy3d.webapi.Batch instead of pool executor PR
update to latest tidy3d==1.4.1
5.10.3#
replace ‘bend_euler’ string with function in mzi
5.10.2#
fix tidy3d port orientation ‘+’ or ‘-’
5.10.1#
works with latest simphony and Sipann
5.10.0#
rename LayerSet to LayerColors, as it is a more intuitive name. We only use this for defining 3D and 2D plot colors.
add Pdk attributes
layer_stack: Optional[LayerStack] = None
layer_colors: Optional[LayerColors] = None
sparameters_path: PathType
add Component.to_3d()
add gf.pdk.get_layer_stack() for 3D rendering and simulation plugins
gf.simulation.lumerical.write_sparameters_lumerical
gf.simulation.gmeep.write_sparameters_meep
gf.simulation.tidy3d.write_sparameters
modify Component.plot() to use colors from gf.pdk.get_layer_colors()
5.9.0#
add doe_settings and doe_names to pack_doe and pack_doe_grid
add with_hash setting to
gf.cell
that hashes parameters. By defaultwith_hash=False
, which gives meaningful name to component.update to tidy3d 1.4.0, add erosion, dilation and sidewall_angle_deg PR
5.8.11#
validate pdk layers after activate the pdk
pdk layers, cells and cross_sections are an empty dict by default
fix spiral
5.8.10#
add
SHOW_PORTS = (1, 12)
layer.document needed layers for the pdk.
Layer |
Purpose |
---|---|
PORT |
optical port pins. For connectivity checks. |
PORTE |
electrical port pins. For connectivity checks. |
DEVREC |
device recognition layer. For connectivity checks. |
SHOW_PORTS |
add port pin markers when |
LABEL_INSTANCE |
for adding instance labels on |
LABEL |
for adding labels to grating couplers for automatic testing. |
TE |
for TE polarization fiber marker. |
TM |
for TM polarization fiber marker. |
5.8.9#
5.8.8#
assert ports on grid works with None orientation ports.
5.8.7#
bring back python3.8 compatibility
5.8.6#
remove gf.set_active_pdk(), as we should only be using pdk.activate(), so there is only one way to activate a PDK.
change default ComponentFactory from ‘mmi2x2’ string to straight componentFactory.
5.8.5#
bring back layer validator to ensure DEVREC, PORTE and PORT are defined in the pdk
5.8.4#
remove default layers dict for pdk.
validate layers to ensure you define layers for connectivity checks (DEVREC, PORT, PORTE). Fix comment. Add default layers if they don’t exist PR
extend ports do not absorb extension references.
fix filewatcher. Make sure it shows only components that exist.
Prevent mutation of double-cached cells PR
5.8.3#
Allow user to specify steps or waypoints in the call to get_bundle
Add path length matching keyword arguments to functions called by get_bundle
5.8.2#
5.8.1#
add layers as a default empty dict for Pdk
improve documentation
mzi uses straight function instead of ‘straight’ string
5.8.0#
works with siepic verification PR
cross_section has optional add_pins and add_bbox, which can be used for verification.
add
cladding_layers
andcladding_offset
.cladding_layers follow path shape, while bbox_layers are rectangular.
add 2nm siepic pins and siepic DeviceRecognition layer in cladding_layers, to allow SiEPIC verification scripts.
add
with_two_ports
to taper. False for edge couplers and terminators.fix ring_double_heater open in the heater top waveguide.
Make pdk from existing pdk PR
add events module and events relating to Pdk modifications PR
add default_decorator attribute to Pdk. adding pdk argument to pdk-related events
add LayerSpec as Union[int, Tuple[int,int], str, None]pr
add layers dict to Pdk(layers=dict(LAYER)), and
pdk.get_layer
5.7.1#
5.7.0#
tidy3d mode solver accepts core_material and clad_material floats.
add file cache to tidy3d to
gt.modes.find_modes
fix get_bundle issue
clean cross-sections PR
fix N/S routing in route_ports_to_side PR
Add basic multilayer electrical routing to most routing functions PR
Use via_corner instead of wire_corner for bend function
Use MultiCrossSectionAngleSpec instead of CrossSectionSpec to define multiple cross sections
Avoids refactoring as much as possible so it doesn’t interfere with current single-layer routing
5.6.12#
improve types and docs
5.6.11#
add python3.6 deprecation notice in the docs issue
add edge_coupler, edge_coupler_array and edge_coupler_array_with_loopback
add python3.10 tests
5.6.10#
add_fiber_single and add_fiber_array tries to add port with
vertical
prefix to the new component. It not adds the regular first port. This Keeps backwards compatibility with grating couplers that have no defined vertical ports.rename spiral_inner_io functions
5.6.9#
add_port_from_marker function only allows for ports to be created parallel to the long side of the pin marker. PR
5.6.7#
fix some pydocstyle errors
write_gds creates a new file per save
improve filewatcher for YAML files
add python_requires = >= 3.7 in setup.cfg
5.6.6#
gf yaml watch
uses the same logging.loggergf.functions.rotate
can recenter component PR
5.6.5#
5.6.4#
add_fiber_array adds vertical ports to grating couplers
add_fiber_single adds vertical ports to grating couplers. Before it was adding only loopback ports.
import gds fixes PR
5.6.3#
fix get_labels rotation
5.6.2#
add
gdsfactory.simulation.tidy3d.modes.sweep_bend_radius
5.6.1#
import
load_lyp
5.6.0#
add
gf.dft
design for testing, test protocols example in the mask section documentation.fix sparameters_meep_mpi PR
5.5.9#
MaterialSpec for lumerical simulation to address feature request
5.5.8#
support ports with None orientation
5.5.7#
fix json schema
5.5.6#
expose
gf.add_pins
module instead ofadd_pins
function. So you can use any of the functions inside the module.improve tutorial
5.5.5#
add
gdsdir
to write_cells CLI commandrewrite write_cells, before it was writing some empty cells.
add
debug=False
to add_ports_from_markers_center and remove logger output
5.5.4#
update tidy3d from
1.1.1
to1.3.2
5.5.3#
add
read_metadata
flag togf.read.import_gds
move dashboard to experimental
requirements_exp
file, that can be install withpip install gdsfactory[exp]
5.5.2#
add
gtidy3d
mode solver
5.5.1#
5.5.0#
gf.read.import_gds()
is now a cell (no more lru cache). LRU cache was not working properly with partial functions.add
flatten=False
to cell and decoratorremove flatten argument
import_gds
Component.to_dict() also exports component name
revert show changes as it was causing some files not to reload in klayout.
5.4.3#
bring back python3.7 compatibility
5.4.2#
add
Pdk.containers
andPdk.register_containers
5.4.1#
5.4.0#
add
gf yaml watch
folder watcher using watchdog, looking forpic.yml
filesadd
PDK.register_cells_yaml
5.3.8#
update netlist driven flow tutorial with ipywidgets, so you can live update the YAML and see it in matplotlib and Klayout PR
PR fixes problem with showing new layers, not in the previous layer props
Fixes gf.show() when gdsdir is passed as a kwarg (for cases when the user wants to retain the output gds file at a specific directory)
Changes the default behavior to use a context manager to clean up the temp directory after it is created
Adds tests for the two different invocation types
5.3.7#
add ipywidgets for
read_from_yaml
netlist driven flow tutorial.
5.3.6#
update gf.read.from_dphox to the latest version
5.3.5#
if no optical ports found with add_fiber_array or add_fiber_array it will raise ValueError inspired by issue
5.3.4#
fix tests
5.3.3#
clean code
add https://sonarcloud.io code checker
add https://sourcery.ai code checker
drop support for python3.7 so we can use named expressions only supported in python >= 3.8
5.3.0#
fix some fstrings issues
fix lumerical notebook typo
enable Component.plot() with ports with orientation = None
add gf.routing.get_route_from_steps_electrical
rename ComponentFactory to ComponentSpec and ComponentOrFactory to ComponentSpec PR
replace callable(component) with gf.get_component(component)
replace some call_if_func(component) with gf.get_component(component)
5.2.9#
route ports with orientation = None
5.2.8#
add more type annotations. To reduce the number of mypy errors.
5.2.7#
5.2.6#
remove tempfile and tmpdir after Component.show() sends GDS to klayout. To avoid filling /tmp/ with GDS files
5.2.5#
add fail_on_duplicates=False to add_ports_from_labels
5.2.4#
allow ports to have None orientation. The idea is that DC ports don’t care about orientation. This still requires some work.
adapt route_sharp from phidl to gf.routing.route_sharp for electrical routes
cross_section function width and offset parameters are consistent with CrossSection class
5.2.3#
add electrical routes to routing_strategy
5.2.2#
add
get_name_from_label
toadd_ports_from_labels
add optional
layer_label
toadd_ports_from_labels
remove
.
in clean_name, before it was renaming.
top
5.2.1#
-
rename cladding_offsets as bbox_offsets
copy_child_info propagates polarization and wavelength info
make sure 0 or None is 0 in
xmin
orxmax
keys from component_from_yaml
5.2.0#
rename
contact
tovia_stack
5.1.2#
Component.remove_layers
also removes layers from pathsadd
bbox_layers
andbbox_offsets
totaper
5.1.1#
add
gf yaml webapp -d
orgf yaml webapp --debug
for debug mode
5.1.0#
improve shear angle algorithm to work with waveguides at any angle PR
add examples in notebooks
add tests
add shear_angle attribute to Port
Update test_shear_face_path.py
remove default port width, layer and center
5.0.7#
define layermap as pydantic BaseModel
Sometimes it is desirable to have a waveguide with a shear face (i.e. the port face is not orthogonal to the propagation direction, but slightly slanted). PR adds the capability to extrude basic waveguides with shear faces.
5.0.6#
fix set active PDK on component_from_yaml
5.0.5#
implements
get_active_pdk()
andset_active_pdk()
functions to avoid side-effects of using ACTIVE_PDK global variable in different scopes. RenamesACTIVE_PDK
to_ACTIVE_PDK
to make it private, and instead promotesget_active_pdk()
fixes instances where cross_section was specified and/or used as a factory rather than CrossSectionSpec
fixes cases where cross_section was directly called as a function rather than invoking get_cross_section(cross_section) pattern
Section.layer type needs to be the Union of Layer and Tuple[Layer,Layer] as long as we use the current implementation of Transition
when getting instances in read_yaml(), uses the dictionary ComponentSpec format to get each component rather than using component name and
**settings
the old method causes an error for container-style components which have an argument named componentfor CrossSection class, makes info non-optional and by default instantiates empty dictionary. also replaces default values for mutable types with factories creating empty mutable types
for cross_section() function, removes unused args
5.0.4#
fix cross_section from get_route_from_steps
replace CrossSectionFactory to CrossSectionSpec
replace ComponentFactory to ComponentSpec
5.0.3#
fix mmi1x2 and 2x2 definition to use waveguide cross_sections
5.0.2#
get_cells and get_component_factories work with module and list of modules
add
gf.get_cells
andgf.get_cross_section_factories
get_component and get_cross_section accepts also omegaconf.DictConfig
add pack_doe and pack_doe_grid to containers
add gf.get_cell, and enable partials
5.0.1#
fix bends bbox
5.0.0#
refactor cross_section. I recommend reviewing the Layout Tutorial -> Paths and CrossSections
include routing parameters (width, layer)
rename ports to port_names
make it immutable and remove add method
raise Error when creating a foreign key
rename
ports
toport_names
refactor Section
make it immutable
raise Error when creating a foreign key
add gf.Pdk
add gf.get_component(component_spec) returns a Component from the active PDK using the registered Cells
add gf.get_cross_section(cross_section_spec) returns a CrossSection from the active PDK using the registered CrossSectionFactory
add Pdk.register_cells()
add Pdk.register_cross_sections()
add gf.ACTIVE_PDK
delete klayout autoplacer code. Use gf.read.from_yaml instead.
delete YAML placer code. Use gf.read.from_yaml instead.
4.7.3#
add
has_routing_info
to CrossSection to ensure it has routing informationrename cross_section_factory to cross_sections
rename component_factory to cells
add ComponentSpec, CrossSectionSpec, gf.get_component, gf.get_cross_section, gf.Pdk
4.7.2#
add vscode plugin to docs
get_bundle accepts also cross_section as well as cross_section_factory
rename gethash to text_lines
simplify component_factory definition
simplify cross_section_factory definition
4.7.1#
gf yaml build
can read from stdin
4.7.0#
convert LayerStack from dict to BaseModel, which accepts a single layers: Dict[str, LayerLevel]
add gf.get_factories to get_component_factories and get_module_factories
add
gf yaml build filepath
where filepath is a YAML path that you want to show in klayoutupdate to phidl 1.6.1
4.6.3#
pack_doe and pack_doe_grid have a function argument
fix netlist.json schema for instances to have pack kwarg
add
gf yaml watch
CLI command to watch a YAML file
4.6.2#
add Component.get_netlist
document gdsfactory to sax
4.6.1#
add xmin, xmax, ymin, ymax to JSON schema
remove placer schema, as it’s being deprecated in favor of JSON YAML schema
4.6.0#
add
pack_doe
andpack_doe_grid
as part of YAML component definition.add deprecation warning on gf.placer and gf.autoplacer.
add
get_module_factories
to get all Component factories from a module.add gf.read.from_yaml placer support for xmin, xmax, ymin, ymax
simpler documentation (remove API, gf, YAML mask)
remove mask klayout YAML placer documentation, as it’s being deprecated
4.5.4#
enable schema validation in
ic yaml ide
validate schema and fail with unknown keys
4.5.3#
icyaml does not validate schema
routes = None by default in NetlistModel
4.5.2#
4.5.1#
replace asserts by raise ValueError in read.from_yaml
4.5.0#
gf yaml ide
brings up dashboard to build YAML based circuits.gf.read.from_yaml has
cache=False
by default.revert get_netlist to version 4.0.17, add option
full_settings=False
back.fix notebook examples for extruding cross_sections with variable width or offset. Increased default
npoints = 2
tonpoints = 40
4.4.15#
fix add_pins_siepic order PR
4.4.14#
add cross_section settings to cutback_bend PR
4.4.13#
4.4.7#
add dx_start and dy_start to route ports to side PR when using route_ports_to_side to route up and to the left/right, the minimum distance of the bottom route could not be less than the separation between routes. This adds options to override this behavior and use the larger of dx_start/dy_start and the radius instead.
add suffix option to select ports PR
Interconnect improvements PR
fix gdsfactory meep interface, it works now with different layer stacks PR
4.4.6#
fix klive macro to maintain position and do not reload layers. Make sure you run
gf tool install
to update your macro after you update to the latest gdsfactory version.
4.4.5#
remove absorb from coupler ring and coupler90
4.4.4#
snap_to_grid straight waveguide length to reduce 1nm DRC snapping errors
4.4.3#
document mask metadata merging
4.4.2#
Component.absorb keeps paths from absorbed reference
add port_name to ring_single_dut
4.4.0#
change siepic pin_length from 100nm to 10nm
absorb maintains labels
rename add_pins to decorator in cross_section function and class
add add_pins_siepic_optical and add_pins_siepic_electrical
add PORTE: Layer = (1, 11)
remove add_pins_to_references and add_pins_container
4.3.10#
add package data in setup.py
remove bend_radius from mzit
4.3.8#
move load_lyp_generic to try Except
4.3.7#
add_pin_path now works with siepic
add add_pins_siepic in gf.add_pins
gf.path.extrude can also add pins
unpin
requirements.txt
issue
4.3.6#
add_pin_path fixes
4.3.5#
rename add_pin_square to add_pin_rectangle
add_pin_path to gf.add_pins
4.3.4#
tidy3d improvements:
get_simulation and write_sparameters accepts componentOrFactory
grating_coupler simulations can also be dispersive
4.3.3#
tidy3d improvements:
add dispersive flag in tidy3d get_simulation
write_sparameters_batch can accept list of kwargs
write_sparameters accepts with_all_monitors: if True, includes field monitors which increase results file size.
add test_write_sparameters
run tidy3d tests on every push as part of test_plugins CI/CD
4.3.1#
gf.components.grating_coupler_circular improvements:
rename teeth_list by a simpler widths and gaps separate arguments
delete grating_coupler_circular_arbitrary as it’s now unnecessary
add bias_gap
gf.components.grating_coupler_elliptical improvements:
add bias_gap
extend_ports works with cross_sections that do not have layer
pip install gdsfactory
also installs most of the pluginspip install gdsfactory[full]
only adds SIPANN (which depends on ternsorflow, which is a heavy dependency)
4.3.0#
tidy3d improvements:
update to version 1.1.1
change port angle type annotation from int to float
4.2.17#
tidy3d improvements:
change tidy3d grating_coupler angle positive to be positive for the most normal case (grating coupler waveguide facing west)
tidy3d plot simulations in 2D only shows one plot
add cross_section to grating_coupler waveguide ports
4.2.16#
grating_coupler_circular does not auto_rename_ports
simulation.tidy3d.write_sparameters_batch accepts kwargs for general simulations settings
add simulation.tidy3d.utils print_tasks
increase grating_coupler simulation wavelengths from 1.2 to 1.8um
4.2.15#
add sklearn notebook on fitting dispersive coupler model
add sklearn to requirements_full
4.2.14#
add with_all_monitors=False by default to avoid storing all fields when running gtidy3d.write_sparameters_grating_coupler
4.2.13#
fix
is_3d=False
case 2D sims for tidy3d write_sparameters_grating
4.2.13#
gmeep simulation improvements:
ymargin=3 by default
add write_sparameters_meep_1x1 for reciprocal devices (port_symmetries1x1)
add write_sparameters_meep_1x1_bend90 for 90degree bend simulations
fix
is_3d=False
case to run simulations in 2D with tidy3d
4.2.12#
update tidy3d client to latest version 1.0.2
add
is_3d
to run simulations in 2D
4.2.11#
tidy3d simulation plugin improvements
add tidy3d.get_simulation_grating_coupler
4.2.10#
tidy3d simulation plugin improvements
add run_time_ps to tidy3d plugin, increase by 10x previous default run_time_ps
if a task was deleted it raises WebError exception, catch that in get results
4.2.9#
thread each tidy3d.write_sparameters simulation, so they run in parallel
add tidy3d.write_sparameters_batch to run multiple sparameters simulations in parallel
4.2.8#
fix tidy3d materials. Si3N4 uses Luke2015 by default
4.2.7#
fix meep grating_coupler (draw teeth instead of etch)
add triangle2 and triangle4 to components
tidy3d.plot_simulation_xy accepts wavelength to plot permitivity
tidy3d.get_simulation accepts wavelength_min, wavelength_max, wavelength_steps
tidy3d.get_simulation accepts wavelength_min, wavelength_max, wavelength_steps
tidy3d.get_sparameters returns Sparameters dataframe wavelength_min, wavelength_max, wavelength_steps
rename meep.write_sparameters wl_min to wavelength_start, wl_max to wavelength_stop and wl_steps to wavelength_points
add port_source_offset to tidy3d.get_simulation as a workaround for tidy3d issue
4.2.6#
rename gen_loopback() function to add_loopback in gdsfactory.add_loopback
4.2.5#
add gf.simulation.gmeep.write_sparameters_grating
4.2.4#
tidy3d plugin improvements
4.2.3#
better notebook doc
update tidy3d plugin to latest version 1.0.1
4.2.2#
add gf.components.delay_snake_sbend
rename gf.simulation.sax.from_csv to read
rename gf.simulation.sax.models.coupler to coupler_single_wavelength
add more models to sax: grating_coupler, coupler (dispersive)
4.2.1#
center gdsfactory.simulation.modes at z=0
rename dirpath to cache for gdsfactory.simulation.modes
change sidewall_angle from radians to degrees
4.2.0#
add gdsfactory.simulation.simphony circuit simulation plugin
fix gdsfactory.modes.overlap test
4.1.5#
add gdsfactory.simulation.sax circuit simulation plugin
4.1.4#
improve gdsfactory/samples tutorial
make klive python2 compatible
4.1.3#
fix netlist tests
4.1.2#
fix netlist export
4.1.0#
difftest copy run_file to ref_file if prompt = Y (before it was just deleting it)
Component.info is just now a regular dict (no more DictConfig)
move Component.info.{changed, full, default} to Component.settings
Component.metadata is a DictConfig property
serialize with numpy arrays with orjson
add Component.metadata and Component.metadata_child
reduce total test time from 50 to 25 seconds thanks to faster serialization
4.0.18#
improve gdsfactory.simulation.modes
replace dataclass with pydantic.BaseModel
add pickle based file cache to speed up mode calculation
find_modes_waveguide and find_modes_coupler do not need to pass mode_solver
add single_waveguide kwarg to find_modes_waveguide and find_modes_coupler
4.0.17#
pass layer_stack to read_sparameters_lumerical, so that it reads the same file as write_sparameters_lumerical
4.0.14#
add delete_fsp_files kwarg to write_sparameters_lumerical
4.0.13#
rename write_sparameters_meep_mpi_pool to write_sparameters_meep_batch
redirect write_sparameters_meep_mpi stderr and stdout to logger
if stderr write_sparameters_meep_mpi does not wait for the results
add gf.simulation.modes.find_modes_coupler
4.0.12#
improve tidy3d plugin
add xmargin_left, xmargin_right, ymargin_bot, ymargin_top
plot_simulation_xy and plot_simulation_yz
fix materials
add tests
4.0.8#
4.0.7#
add progress bar to write_sparameters_lumerical_components
4.0.4#
modify the write_gds() function to fix the checking of duplicate cell names (recursively), and it also gives an option to choose how to handle duplicate cell names on write. It changes the default behavior to warn and overwrite duplicates, rather than throw an error. PR
remove clear_cache in
show()
. Intermediate clearing of cache can cause errors in final gds export, by leaving two versions of the same cell lingering within subcells created before/after cache clearing.remove clear_cache in some of the tests
4.0.3#
add
safe_cell_names
flag to gf.read.import_gds, append hash to imported cell names to avoid duplicated cell names.
4.0.2#
move triangle into requirements_dev.txt. Now that there is wheels for python3.9 and 3.10 you can manage the dependency with pip.
4.0.1#
4.0.0#
Consider only changed component args and kwargs when calculating hash for component name
meep plugin write_sparameters_meep_mpi deletes old file when overwrite=True
ensure write_sparameters_meep
**kwargs
have valid simulation settingsfix component lattice mutability
Component.auto_rename_ports() raises MutabilityError if component is locked
add
Component.is_unlocked()
that raises MutabilityErrorrename component_lattice
components
tosymbol_to_component
raise error when trying to add two ports with the same name in
gf.add_ports.add_ports_from_markers_center
. Before it was just ignoring ports if it already had a port with the same name, so it was hard to debug.difftest adds failed test to logger.error, to clearly see test_errors and to log test error traces
clean_value calls clean_value_json, so we only need to maintain one function to serialize both settings and name
3.12.9#
fix tests
3.12.8#
rename
padding_north
,padding_west
,padding_east
,padding_south
->ymargin_top
,xmargin_left
,xmargin_right
,ymargin_bot
for consistency of the meep plugin with the Lumerical plugin.add
write_sparameters_meep_lr
with left and right ports andwrite_sparameters_meep_mpi_lt
with left and top portsadd xmargin and ymargin to write_sparameters_meep
3.12.7#
add Optional nslab to gm.modes.get_mode_solver_rib
add
padding_north
,padding_west
,padding_east
,padding_south
add tqdm progress bar to meep sims
3.12.6#
make trimesh an optional dependency by moving imports inside function
3.12.3#
fix docker container gdsfactory:latest
leverage meep plot flag to avoid initializing the structure
recommend to install triangle with mamba, and the rest of the dependencies with pip
3.12.1#
rename gdsfactory.components.array to gdsfactory.components.array_component
create
.gitpod.yml
3.12.0#
Consider only passed component args and kwargs when calculating hash for component name
replace
_clean_value
byclean_value_json
delete
tech.Library
as it’s not being used. You can just use a dict of functions instead
3.11.5#
move rectpack import inside pack function
create
pip install[dev]
just for developers, and reduce the dependencies forpip install[full]
recommend installing gdspy and meep with mamba (faster than conda)
rename w1 as width1 and w2 as width2 in find_neff_vs_width
3.11.4#
Remove numpy.typing from snap.py to be compatible with minimum version of numpy
3.11.3#
rename
res
toresolution
in simulation.modes to be consistent with simulation.gmeep
3.11.2#
add plugins to notebooks and coverage
3.11.0#
get_sparameters_path filepath based on component_name + simulation_settings hash
move gdsfactory.simulation.write_sparameters_lumerical to gdsfactory.simulation.lumerical.write_sparameters_lumerical
Sparameters are all lowercase (both for meep and lumerical plugins)
3.10.12#
write_sparameters_lumerical allows passing material refractive index or any material in Lumerical’s material database
3.10.11#
improve docs
3.10.10#
3.10.9#
add tests for
write_sparameters_meep_mpi
andwrite_sparameters_meep_mpi_pool
ingdsfactory.simulation.gmeep
modulewrite_sparameters_meep_mpi
haswait_to_finish
flag
3.10.8#
improve meep simulation interface documentation and functions
expose new
write_sparameters_meep_mpi
andwrite_sparameters_meep_mpi_pool
ingdsfactory.simulation.gmeep
moduleget_sparameters_path
can also accept a layer_stack
3.10.7#
fix crossing hard coded layers. Add cross_section setting to ports so that they can be extended.
extend_ports creates cross_section with port_width and layer, if port has no cross_section and extend_ports does not have a specific cross_section
3.10.6#
add mzi_pads_center to components
3.10.5#
fix add_ports_from_markers_center port location for square ports, depending on inside parameter
3.10.4#
use matplotlib for default plotter instead of holoviews
add_ports default prefix is ‘o’ for optical and ‘e’ for electrical ports
3.10.3#
3.10.2#
write_cells in gf.write_cells uses gdspy interface directly
gf.import_gds has an optional gdsdir argument
remove unused max_name_length parameter in gf.import_gds
bring back matplotlib as the default plotter backend. Holoviews does not work well with some
sphinx.autodoc
docsadd_fiber_array prints warning if grating coupler port is not facing west
3.10.1#
You can set up the default plotter from the gdsfactory config
gf.CONF.plotter = 'matplotlib'
-
dispersive flag to meep simulations
fixed bug where adding a layer would throw an error if “visible” or “transparent” were undefined in the .lyp file
remove p_start (starting period) from grating_coupler_elliptical
3.10.0#
add Component.ploth() to plot with holoviews (inspired by dphox)
Component.plot(plotter=’holoviews’) accepts plotter argument for plotting backend (matplotlib, qt or holoviews)
use holoviews as the default plotting backend
remove clear_cache from Component.plot() and Component.show(), it’s easier to just do
gf.clear_cache()
remove
Component.plotqt
as the qt plotter is now available withComponent.plot(plotter='qt')
gf.geometry.boolean works with tuples of components or references as well as single component or Reference. Overcome phidl bug, where tuples are not trated as lists.
Before plotting make sure we recompute the bounding box
YAML mask definition allows using
settings
for global variablesgrating_coupler_rectangular first teeth starts next to the taper
3.9.28#
seal_ring accepts bbox instead of component
die_bbox_frame accepts bbox
die_bbox: rename text_position to text_anchor
die_bbox: text_anchor accepts Literal instead of string
3.9.27#
3.9.26#
add some extra kwargs (with_taper1, with_taper2) to straight_heater_doped_rib
add slab offset kwargs to cross_section.rib_heater_doped_contact
3.9.25#
gf.components.contact_slot
accepts optional layer_offsetsx and layer_offsetsyextend_ports cross_section is optional, and overrides port cross_section
3.9.23#
validate cross_section
update requirements
add acks in README
3.9.22#
add
gf.read.from_dphox
update requirements.txt
3.9.21#
thanks to @thomasdorch PR you can now use Meep’s material database in your mode and FDTD simulations
3.9.20#
add
loopback_xspacing
togf.routing.add_fiber_single
3.9.19#
add
Component.get_setting()
which looks inside info, settings.full and child_infoadd
gf.function.add_settings_label
decorator
3.9.18#
rename get_sparametersNxN to write_sparameters_meep, to be consistent with write_sparameters_lumerical function name
3.9.17#
meep interface stores simulation metadata
3.9.16#
meep interface improvements
add run=True flag, if run=False, plots simulation
docker includes mpi version of meep
3.9.15#
meep interface improvements
add test Sparameters file dataframe
lumerical interface improvements (consistent with meep)
wavelengths in um
Sparameters starts with lowercase
3.9.14#
fix seal_ring snap_to_grid to 2nm
add Component.version and Component.changelog
Component.to_dict() exports version
add ring_single_heater and ring_double_heater to components
add port_inclusion to pad and compass
3.9.13#
fix seal_ring snap_to_grid to 2nm
3.9.12#
fix text_rectangular_multi_layer layers
3.9.11#
add label_prefix to test and measurement labels
3.9.10#
add
gf.mask.merge_yaml
to merge yaml metadatarename
pcm_optical
tocdsem_all
add
cdsem_coupler
Component.copy hash cache=True flag that adds new copies to CACHE (similarly to import_gds) to avoid duplicated cells
3.9.9#
pack_row in klayout_yaml_placer also accepts rotation
placer uses Literal (‘N’, ‘S’, ‘E’, ‘W’) from gf.typings
rename label_layer as layer_label for consistency
3.9.8#
better DRC messages
write_drc allows you to define the shortcut
fix resistance_sheet offset
add comments to build does flow
3.9.7#
build docker container
recommend building triangle with conda forge instead of pip for conda based distributions
add
pip install gdsfactory[pip]
as a pip-based alternative ofpip install gdsfactory[full]
3.9.6#
Component.show() writes component in a different tempfile every time. This avoids the
reload
question prompt from klayout.update klive to 0.0.7 to keep the same layers active between sessions
3.9.5#
imported cell names get incremented (starting on index = 1) with a
$
(based on Klayout naming convention)add test for flatten = True
raise ValueError if the passed name is already on any CACHE (CACHE_IMPORTED or CACHE)
avoid duplicate cells decorating import_gds with functools.lru_cache
show accepts
**kwargs
for write_gdssimplify decorator in @cell (does not change name)
3.9.4#
imported cell names get incremented (starting on index = 0) as we find them also in the CACHE. This avoids duplicated cell names.
3.9.3#
better error messages using f”{component!r}” to get
'component_name'
import*gds avoids duplicated cells by checking CACHE_IMPORTED and adding and underscore
*
suffix in case there are some name conflicts.add
Component.lock()
andComponent.unlock()
allows you to modify component after adding it into CACHEadd
gf.geometry.check_duplicated_cells
to check duplicated cells. Thanks to Klayoutfix
mzi_with_arms
, before it haddelta_length
in both arms
3.9.2#
increase
gf.routing.get_route_electrical
default min_straight_length from 10nm to 2umrename text_rectangular to text_rectangular_multi_layer
rename manhattan_text to text_rectangular
3.9.1#
gf.import_gds updates info based on
kwargs
. In case you want to specify (wavelength, test_protocol…)store gf.import_gds name
3.9.0#
move add_ports_from_markers functions from
gf.import_gds
togf.add_ports
move write_cells functions from
gf.import_gds
togf.write_cells
move
gf.import_gds
togf.read.import_gds
. keepgf.import_gds
as a link togf.read.import_gds
combine gf.read.from_gds with gf.import_gds
add logger.info for write_gds, write_gds_with_metadata, gf.read.import_gds, klive.show()
3.8.15#
gf.read.from_gds passes kwargs to gf.import_gds
rename grating_coupler_loss to grating_coupler_loss_fiber_array4 gf.components
add grating_coupler_loss_fiber_single to components
3.8.14#
klayout is an optional dependency
3.8.13#
copy adds
_copy
suffix to minimize chances of having duplicated cell names
3.8.12#
add gf.functions.add_texts to add labels to a list of components or componentFactories
3.8.11#
gf.assert.version supports semantic versioning
3.8.10#
get_netlist works even with cells that have have no settings.full or info.changed (not properly decorated with cell decorator)
3.8.9#
pack and grid accepts tuples of text labels (text_offsets, text_anchors), in case we want multiple text labels per component
add
gf.functions.add_text
to create a new component with a text labeladd rotate90, rotate90n and rotate180 to functions
3.8.8#
rename pack parameters (offset->text_offset, anchor->text_anchor, prefix->text_prefix)
pack and grid can mirror references
3.8.7#
rotate accepts component or factory
add plot_imbalance1x2 and plot_loss1x2 for component.simulation.plot
rename bend_circular c.info.radius_min = float(radius) to c.info.radius = float(radius)
3.8.6#
add gf.grid_with_text
3.8.5#
fix rectangle_with_slits
rename mzi2x2 as mzi2x2_2x2, so it’s clearly different from mzi1x2_2x2
3.8.4#
straight_heater_doped has with_top_contact and with_bot_contact settings to remove some contacts
rib_heater_doped and rib_heater_doped_contact has with_bot_heater and with_top_heater settings
3.8.3#
replace in contact_yspacing by heater_gap in straight_heater_doped
3.8.2#
add kwarg
auto_rename_ports=True
toadd_ports_from_markers_center
mzi length_x is optional and defaults to straight_x_bot/top defaults
change mzi_phase_shifter straight_x = None, to match phase shifter footprint
replace gf.components.mzi_phase_shifter_90_90 with gf.components.mzi_phase_shifter_top_heater_metal
3.8.1#
add
gf.components.mzi
as a more robust implementation for the MZIrename
gf.components.mzi
togf.components.mzi_arms
expose
toolz.compose
asgf.compose
add
gf.components.mzi1x2
,mzi1x2_2x2
,mzi_coupler
3.8.0#
add
gf.components.copy_layers
to duplicate a component in multiple layers.better error message for
gf.pack
when it fails to pack some Component.rename gf.simulation.gmpb as gf.simulation.modes
rename gf.simulation.gtidy3d as gf.simulation.tidy3d
gf.simulation.modes.find_neff_vs_width can store neffs in CSV file when passing
filepath
gf.components.rectangle_with_slits
has nowlayer_slit
parameter
3.7.8#
cell accepts
autoname
(True by default)import_gds defaults calls cell with
autoname=False
3.7.7#
write_gds
prints warning when writing GDS files with Unnamed cells. Unnamed cells don’t get deterministic names. warning includes the number of unnamed cellscells with
decorator=function
that return a new cell do not leave Unnamed cells nowpack includes a name_prefix to avoid unnamed cells
add
taper_cross_section
into a container so we can use a decorator over it without triggering InmutabilityError
3.7.6#
to dict accepts component and function prefixes of the structures that we want to ignore when saving the settings dict
write_gds
prints warning when writing GDS files with Unnamed cells. Unnamed cells don’t get deterministic names.
3.7.5#
add
add_tapers_cross_section
to taper component cross_sectionsletter
v
in text_rectangular_multi_layer is now DRC free
3.7.4#
add pad_gsg_short and pad_gsg_open to components
export function parameters in settings exports as dict {‘function’: straight, ‘width’: 3}
works also for partial and composed functions
add
get_child_name
for Component, so that when you runcopy_child_info
the name prefix also propagatesonly add layers_cladding for waveguide lengths > 0. Otherwise it creates non-orientable boundaries
3.7.3#
add
**kwargs
tocutback_bend
pack type annotation is more general with
List[ComponentOrFactory]
instead ofList[Component]
, it also builds any Components if you pass the factory instead of the component.add
straight_length
parameter and more sensitive default values (2*radius) tocutback_component
add
gf.components.taper_parabolic
mzi_lattice
adds all electrical ports from any of the mzi stagesrename
mzi_factory
tomzi
in mzi_lattice to be consistent with other component kwargsreplace taper_factory with taper to be consistent with other component kwargs
coupler snaps length to grid, instead of asserting length is on_grid
add layers_cladding to rib so bezier_slabs render correctly for rib couplers
3.7.2#
add_fiber_array and add_fiber_single can also get a component that has no child_info
3.7.1#
keep python3.7 compatibility for
gf.functions.cache
decorator by usingcache = lru_cache(maxsize=None)
instead ofcache = lru_cache
add_fiber_array
accepts ComponentOrFactory, convenient for testing the function without building a component
3.7.0#
fix clean_name
generators and iterables are properly hashed now
toolz.compose functions hash both the functions and first function
casting foats to ints when possible, so straight(length=5) and straight(length=5.0) return the same component
set Component._cached = True when adding Component into cache, and raises MutabilityError when adding any element to it.
Component.flatten() returns a copy of the component, that includes the flattened component. New name adds
_flat
suffix to original nameadd bias to grating_coupler_lumerical
try to cast float to int when exporting info
remove
ComponentSweep
as it was trivial to define as a list comprehensionremove
add_text
as it is prone to creating mutability errorspack can now add text labels if passed a text ComponentFactory
3.6.8#
add_fiber_single
allows to have multiple gratingsconverted add_fiber_single, component_sequence and add_fiber_array from
cell_without_validator
tocell
Component pydantic validator accepts cell names below 100 characters (before it was forcing 32)
3.6.7#
rename doe, write_does and load_does to
sweep
moduleread_sweep
,write_sweep
…Route and Routes are pydantic.BaseModel instead of dataclasses
composed functions get a unique name. You can compose functions with
toolz.compose
add
gf.add_text
for adding text labels to a list of Componentsadd
gf.typings.ComponentSweep
increase MAX_NAME_LENGTH to 100 characters when validating a component
add typing_extensions to requirements to keep 3.7 compatibility. Changed
from typing import Literal
(requires python>=3.8) tofrom typing_extensions import Literal
add type checking error messages for Component and ComponentReference
add type checking pydantic validator for Label
replace
phidl.device_layout.Label
withgf.Label
Route has an Optional list of Label, in case route fails, or in case you want to add connectivity labels
3.6.6#
add slab arguments (slab_layer, slab_xmin) to grating couplers
remove align to bottom left in gdsdiff
gdsdiff after asking question, re-rises GeometryDifferencesError
3.6.5#
fix gdsfactory/samples
better docstrings documents
keyword Args
as well asArgs
refactor:
pads_shorted accepts pad as parameter
rename
n_devices
to columns in splitter_chainrename
dbr2
todbr_tapered
simpler pn cross_section definition
3.6.3#
args in partial functions was being ignore when creating the name. Only kwargs and func.name were being considered
3.6.2#
update rectpack dependency from 0.2.1 to 0.2.2
3.6.1#
spiral_external_io_fiber_single has a cross_section_ports setting
seal_ring snaps to grid
Component.bbox and ComponentReference.bbox properties snap to 1nm grid
add
gf.components.bend_straight_bend
3.6.0#
snap_to_grid_nm waypoints in round_corners to avoid 1nm gaps in some routes
add
gf.components.text_rectangular_multi_layer
add
gf.components.rectangle_with_slits
3.5.12#
add tolerance to netlist extraction. Snap to any nm grid for detecting connectivity (defaults to 1nm).
3.5.10#
enable having more than 2 ports per cross_section. Include test for that.
3.5.9#
better docstrings
component_sequence also accepts component factories
3.5.9#
gf.simulation.get_sparameters_path takes kwargs with simulation_settings
cross have port_type argument
splitter_tree exposes bend_s info
change simulation_settings default values
port_margin = 0.5 -> 1.5
port_extension = 2.0 -> 5.0
xmargin = 0.5 -> 3.0
ymargin = 2.0 -> 3.0
remove pml_width as it was redundant with xmargin and ymargin
route with auto_taper was missing a mirror
3.5.8#
gf.components.extend_ports uses port.cross_section to extend the port
3.5.6#
add
cell
decorator to gf.components.text
3.5.5#
expose spacing parameter in
gf.routing.get_bundle_from_steps
3.5.3#
make trimesh, and tidy3d optional dependencies that you can install with
pip install gdsfactory[full]
3.5.1#
add
gf.routing.get_bundle_from_steps
3.5.0#
rename
end_straight
toend_straight_length
rename
start_straight
tostart_straight_length
3.4.9#
add pad_pitch to
resistance_sheet
enable multimode waveguide in straight_heater_meander
add
grating_coupler_elliptical_arbitrary
add
grating_coupler_elliptical_lumerical
using lumerical parametrizationrename
grating_coupler_elliptical2
tograting_coupler_circular
. renamelayer_core
tolayer
,layer_ridge
tolayer_slab
for a more consistent parametrization of other grating couplers.add Component.add_padding
3.4.8#
pad has vertical_dc port
3.4.6#
add
gf.functions.move_port_to_zero
gf.routing.add_fiber_single
has new parameterzero_port
that can move a port to (0, 0)add fixme/routing
enable
gf.read.from_yaml
to read ports that are defined without referencing any reference
3.4.5#
decorate
gf.path.extrude
with cell, to avoid duplicated cell namesenforce contact_startLayer_endLayer naming convention
gf.grid accepts rotation for reference
add pydantic validator class methods to Path and CrossSection
CrossSection has a
to_dict()
rename Component
to_dict
toto_dict()
: is now a method instead of a propertyrename Component
pprint
topprint()
: is now a method instead of a propertyrename Component
pprint_ports
topprint_ports()
: is now a method instead of a propertyComponent.mirror() returns a container
3.4.4#
decorators that return new component also work in cell
3.4.3#
enable
Component.move()
which returns a new Component that contains a moved reference of the original componentadd
Port._copy()
that is the same asPort.copy
to keep backwards compatibility with phidl componentsadapt some phidl.geometry boolean operations into
gdsfactory.geometry
move some functions (boolean, compute_area, offset, check_width … ) into
gdsfactory.geometry
add
gdsfactory.geometry.boolean
for klayout based boolean operationsadd pydantic validator for
ComponentReference
max_name_length is a cell decorator argument used when importing gds cells
add
geometry.boolean_klayout
3.4.2#
import_gds
also shares the cell cacheremove
name_long
fromcell
decoratorremove
autoname
fromcell
decorator argsComponent.show()
shows a component copy instead of a containerremove
Component.get_parent_name()
and replace it withComponent.child_info.name
gf.path.extrude adds cross_section.info and path.info to component info
3.4.0#
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 workingadd 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
tocontact
3.3.9#
move
gf.component_from_yaml
togf.read.from_yaml
unpin triangle version in requirements.txt
cell
components accept info settings dict, for the components
3.3.8#
add
auto_widen
example in tutorials/routingadd
plugins
examples in tutorials/pluginsComponent.rotate() returns a new Component with a rotated reference of itself
increase simulation_time in lumerical
simulation_settings
from 1ps to 10ps, so max simulation region increased 10xwrite_sparameters_lumerical returns session if run=False. Nice to debug sims.
make consistent names in gf.read:
gf.read.from_phidl
gf.read.from_picwriter
gf.read.from_gds
3.3.5#
route_manhattan
ensures correct route connectivityreplace
bend_factory
bybend
to be more consistent with componentsreplace
bend90_factory
bybend90
to be more consistent with componentsreplace
straight_factory
bystraight
to be more consistent with componentsreplace
get_route_electrical_shortest_path
byroute_quad
gf.components.array raises error if columns > 1 and xspacing = 0
gf.components.array raises error if rows > 1 and yspacing = 0
simplify
gf.components.rectangle
definition, by default it gets 4 portscontainers use Component.copy_settings_from(old_Component), and they keep their parent settings in
parent
, as well asparent_name
Component.get_parent_name()
returns the original parent name for hierarchical components and for non-hierarchical it just returns the component name
3.3.4#
containers use
gf.functions.copy_settings
instead of trying to detectcomponent=
from kwargsPort._copy()
is nowPort.copy()
bend_euler
p=0.5
as default based on this paperrectangle has 4 ports by default (similar to compass), it just includes the
centered
parametergf.grid accept component factories as well as components and is a cell
3.3.3#
fix cutback_component bend
add
gf.routing.route_quad
3.3.2#
add
gdsfactory.to_3d.to_stl
3.3.1#
adjust z position for lumerical simulation region as well as port locations
Component.show()
andComponent.plot()
do not clear_cache by default (clear_cache=False
)
3.3.0#
write_sparameters in lumerical writes simulation_settings in YAML
replace port_width with port_margin in simulation_settings
rename
Component.get_porst_east_west_spacing
asComponent.get_ports_ysize()
add
Component.get_ports_ysize()
fix
mzi
with_splitter
enable
vars
variables in component_from_yamlgdsdiff accepts test_name, and uses the path of the test_file for storing GDS files
add functools cache decorator for gdsfactory.import_gds and gdsfactory.read.gds
rename cache with lru_cache(maxsize=None) to keep compatibility with python3.7 and 3.8
update to phidl==1.6.0 and gdspy==1.6.9 in requirements.txt
new gf.path.extrude adapted from phidl
3.2.9#
rename
component_from
toread
remove
gf.bias
remove
gf.filecache
add
get_layer_to_sidewall_angle
in layer_stackrename
gf.lys
togf.layers.LAYER_COLORS
to be consistent
3.2.8#
array with via has consistent names
3.2.7#
write_sparameters exports the layer_stack together with the simulation_settings
write simulation_settings with omegaconf instead of YAML. Layer tuples were not exporting correctly.
layer_stack inherits from dict
simulation files use get_name_short to keep the name of the suffix within 32 characters + 32 characters for the name. This keeps filepath with less than 64 characters
3.2.6#
add_ports_from_labels accepts layer parameter for the port
3.2.5#
add add_ports_from_labels function
3.2.4#
transition raises ValueError if has no common layers between both cross_sections
grating coupler wavelength in um to be consistent with all units in gdsfactory
rename thickness_nm to thickness and zmin_nm to zmin in layer_stack to be consistent with gdsfactory units in um
rename Ppp to PPP, Npp to NPP to be consistent with nomenclature
simulation_settings in um to be consistent with all units in gdsfactory being in um
3.2.3#
fix gf.to_trimesh
add
Floats
,Float2
andFloat3
to typesadd kwargs for component example documentation from signature
3.2.2#
add
gf.to_trimesh
to render components in 3Dreplace dx, dy by size in bend_s, and spacing by dx, dy in splitter_tree
3.2.1#
simplify contact_with_offset_m1_m2
contact_with_offset_m1_m2 use array of references
add
gf.components.taper_cross_section
to taper two cross_sections
3.2.0#
Ensures that an impossible route raises RouteWarning and draws error route with markers and labels on each waypoint
3.1.10#
fix add fiber single for some cases
create
strip_auto_widen
cross_section with automatic widening of the waveguideadd
add_grating_couplers_with_loopback_fiber_single
3.1.9#
pad_array and array use array of references, accept columns and rows as args
3.1.8#
contact uses array of references
3.1.7#
transition ports have different cross_sections
get_bundle separation is now defined from center to center waveguide
contact has 4 ports, consistent with pads
pad takes size argument instead of (width, height), which is consistent with other rectangular structures
add filecache to store in files
3.1.6#
add
Component.write_netlist_dot
to write netlist graph in dot formatadd handling of separation keyword argument to get_bundle_from_waypoints (thanks to Troy @tvt173)
3.1.5#
raise ValueError when moving or rotating component. This avoids modifying the state (position, rotation) of any Component after created and stored in the cell cache.
add cross_section property to ports
gdsfactory/routing/fanout.py
passes cross_section settings from port into bend_sfix manhattan text, avoid creating duplicated cells
fix cdsem_all
3.1.4#
remove limitation from get_bundle_from_waypoints is that it requires to have all the ports lined up.
3.1.3#
because in 3.1.1 cells can accept
*args
containers now are detected when they haveComponent.component
rename
component.settings['component']
tocomponent.settings['contains']
grating couplers have port with
vertical_te
orvertical_tm
prefixcontainer keep the same syntax
add_fiber_array
allows passinggc_port_labels
add_fiber_array
andadd_fiber_single
propagate any non-optical ports to the containerfix ports transitions and raise error when saving gdsfile with duplicated cell names
3.1.2#
add
make doc
to update components documentationadd
routing.get_route_electrical
with sensitive defaults for routing electrical routesbend=wire_corner
components.pad_array_2d
namese{row}_{col}
components.pad_array
namese{col}
3.1.1#
cells accept
*args
@cell
autonaming includes the complete keyword arguments keys (not only the first letter of each argument)fix straight_pin and straight_heater_doped length when they have tapers
waveguide template defaults to euler=True for picwriter components (spiral)
add
Component.get_ports_xsize()
add
toolz
library to requirements
3.1.0#
move components python files to the same folder
add components.write_factory function to generate dict
added filecmp for testing components width difftest, only does XOR if files are different. This speeds the check for larger files.
3.0.3#
change port naming convention from WNES to o1, o2, o3 for optical, and e1, e2, e3, e4 for electrical
add Component.auto_rename_ports()
add
ports_layer
property to Component and ComponentReference to get a mapComponent.show()
show_ports
andshow_subports
show a container (do not modify original component)add port_types to cross_section
rename straight_horizontal_top to straight_x_top
3.0.2#
add straight_rib, straight_heater_metal and straight_heater_doped
xs2 = partial(cross_section)
does not require definingxs2.__name__
replace gf.extend[.] with gf.components.extension.
Component.show() uses
add_pins_triangle
as default to show port orientationadd gf.containers.bend_port
get_netlist considers x,y,width to extract port connectivity
3.0.1#
pass cross_section functions to component factories instead of registering waveguides in TECH.waveguide
snap_to_grid is now a cross_section property
replace Waveguide with gdsfactory.cross_section functions
add pydantic.validate_arguments to cross_section
functools.partial have unique names
partial functions include settings for JSON and name
include xor flag when doing a gdsdiff
delete StrOrDict, you can use functools.partial instead to customize functions
include –xor flag to
gf gds diff --xor
CLI to run a detailed XOR between 2 GDS files
3.0.0#
rename
pp
togdsfactory
recommend
import gdsfactory as gf
rename
pf
CLI togf
2.7.8#
rename post_init to decorator
add pp.layer.load_lyp_generic
load_lyp, alpha=1 if visible = ‘false’
LayerStack is now List[LayerLevel] and has no color information
2.7.7#
remove taper_factory from pp.routing.add_fiber_array and pp.routing.add_fiber_single
pp.Component.add_ports(port_list, prefix) to avoid adding duplicated port names
add pp.components.litho_ruler
@cell has
post_init
function. Perfect for adding pinsupdate
samples/pdk/fabc.py
with partialLibrary can register partial functions
contact_with_offset_m1_m2
is now define with via functions instead of StrOrDict, skip it from testsadd
pp.components.die_box
2.7.6#
add Component.to_dict()
add pp.config.set_plot_options for configuring matplotlib
add pp.Component.add_ports(port_list)
enable in pp.name the option of passing a partial function
create partial notebook (for functional programming) demonstrating hierarchical components with customized subcomponent functions
revert mzi and mzi_lattice to 2.5.3 (functional programming version)
delete mzi_arm, mzi2x2 and mzi1x2
add mzi_phase_shifter
add wire_sbend
pp.add_tapers back to functional programming
2.7.5#
fix preview_layerset
extension_factory default extension layer depends on the port
add extend_ports_list to pp.extend
add simulation_settings to pp.write
2.7.4#
get_bundle_corner passing waveguide (consistent with other routes)
fix pp.components.wire_corner
2.7.3#
pp.grid allows accessing references from Component.aliases
pp.routing.add_fiber_single and pp.routing.add_fiber_array accept get_input_label_text_loopback, get_input_label_text params
2.7.2#
fix print_config asdict(TECH)
cell decorator validates arguments by default using pydantic, cell_without_validator does not
add pydantic.validate method to Port
2.7.1#
add pp.components.die
fix spiral_external_io
add_fiber_array also labels loopbacks
rename with_align_ports as loopback
2.7.0#
round_corners raises RouteWarning if not enough space to fit a bend
2.6.10#
contact has port with port_type=dc
2.6.9#
rename tlm to contact and tlm_with_offset to contact_with_offset_m1_m2
2.6.8#
add pp.c.tlm_with_offset
mzi adds any non-optical ports from straight_x_bot and straight_x_top
ignore layer_to_inclusion: Optional[Dict[Layer, float]] from get_settings
2.6.7#
pp.sp.write has a logger
via has optional pitch_x and pitch_y
2.6.6#
add pp.extend to pp
fix pp.extend.extend_port, propagates all settings
pp.gds.read_ports_from_markers accepts a center (xc and yc) for guessing port orientation
import_gds only accessible from pp.gds.import_gds
merge assert_grating_coupler_properties and version in pp.asserts.
created pp.component_from module
rename pp.import_phidl_component and pp.picwriter_to_component pp.component_from.phidl and pp.component_from.picwriter
rename pp.load_component to pp.component_from.gds
rename pp.netlist_to_component to pp.component_from.netlist. added a DeprecationWarning
move set_plot_options to pp.klive.set_plot_options, stop overriding phidl’s set_plot_options in
pp.__init__
move pp.merge_cells into pp.component_from.gdspaths and pp.component_from.gdsdir
waveguide accepts dict(component=’fabc_nitride_cband’)
add pp.remove and pp.read
remove pp.gds
2.6.5#
add pp.routing.get_route_from_steps as a more convenient version of pp.routing.get_route_from_waypoints
2.6.4#
pp.components.mzi accepts straight_x_bot and straight_x_bot parameters
pad array has axis=’x’ argument
expose utils, sort_ports and fanout in pp.routing
2.6.3#
add min_length Waveguide setting, for manhattan routes and get_bundle
remove grating_coupler.xmin = 0 inside the route_fiber function
2.6.2#
add pp.c.delay_snake2 and pp.c.delay_snake3
rename FACTORY as LIBRARY. Now we have LIBRARY.factory as the Dict[str, Callable] with all the library functions.
LIBRARY.get_component adds component._initialized=True attribute only once
2.6.0#
cell decorator propagates settings for Component, only if isinstance(kwargs[‘component’], Component)
get_route_from_waypoints adds port1 and port2 waypoints automatically
get_route_from_waypoints accepts waveguide and waveguide_settings
add_port warns you when trying to add ports with off-grid port points
fix add_fiber: not passing factory to get_bundle
Factory(name=) has required argument name
Factory has
__str__
and__repr__
add_port(width=) width automatically snaps width to 1nm grid
add DeprecationWarning to get_routes
update pipfile
remove conda environment.yml as it was out of date
add automatic release of any tag that starts with v
2.5.7#
Component.show(show_ports=True) adds port names and pins by default (before show_ports=False)
splitter_tree, also propagates extra coupler ports
add_ports_from_markers has an optional
port_layer
for the new created port.component_settings = OmegaConf.to_container(component_settings, resolve=True)
pp.c.pad_array consistent parameters with pp.c.array (pitch_x)
2.5.6#
better error messages for off-grid ports, add suggestions for fixes
Component.validator
assert len(name) <= MAX_NAME_LENGTH
, beforeassert len(name) < MAX_NAME_LENGTH
2.5.5#
update to omegaconf=2.1.0
add loguru logger
added pydantic validator to Component
pp.add_tapers.add_tapers can accept taper port names
add_tapers, add_fiber_array, add_fiber_single accepts taper with StrOrDict
components accept waveguide StrOrDict
some names were having 33 characters, fixed max characters name
2.5.4#
add
pf gds
CLI commands formerge_gds_from_directory
,layermap_to_dataclass
,write_cells
component_from_yaml has a get_bundle_from_waypoints factory
add heater with single metal
fix routing with cross-sections with defined Sections
add TECH.rename_ports
add pp.containers.
mzi accepts a factory and can accept StrOrDict for for leaf components
Factory(post_init=function). Useful for adding pins when using Factory.get_component()
2.5.3#
enable fixed timestamp in saved cells, which allows having the same hash for files that do not change
2.5.2#
fixed pp.import_phidl_component and added test
2.5.1#
compatible with latest version of phidl (1.5.2)
renamed routing functions
reduced routing functions functions in pp.routing
better error messages for waveguide settings (print available keyword args)
fixed cell decorator to raise Error if any non keyword args defined
pin more requirements in requirements.txt
added pur (pip update requirements) in a separate workflow to test gdsfactory with bleeding edge dependencies
2.5.0#
add pp.routing.sort_ports
add pp.routing.get_route_sbend for a single route
add pp.routing.get_route_sbend_bundle for a bundle of Sbend routes
rename start_ports, end_ports with ports1 and ports2
straight_with_heater fixed connector
straight_with_heater accepts port_orientation_input and port_orientation_output
TECH defined in config.yml
refactor pp.path.component to pp.path.extrude
write to GDS again even if component already has a component.path
define all TECH in tech.py dataclasses and delete Tech, and Pdk
add pp.routing.fanout
add Factory dataclass
fix pp.routing.routing _gradual_bend
add TestClass for Component
fix get_bundle for indirect routing
get_netlist returns cleaned names for components (-3.2 -> m3p2)
add pp.assert_version
fix naming for components with long funcnames (already over 24 chars + 8 chars for name hash) to keep name shorter than 32 chars
add pydantic validate_arguments decorator. @pp.cell_with_validator
from pydantic import validate_arguments
@validate_arguments
2.4.9#
rename pp.plot file to pp.set_plot_options to avoid issues with pp.plot function
2.4.8#
remove
pins
kwargs from ring and mzisimpler coupler straight
renamed
_get
toget
in LayerStackimport_gds raise FileNotFoundError
import_gds sends gdspy str(gdspath)
remove pp.plotgds, as you can just do component.plot()
add pp.set_plot_options() to be consistent with latest 1.5.0 phidl release
2.4.7#
better README
get_settings exports int if possible (3.0 -> 3)
add cross_section pin for doped waveguides
Raise error for making transition with unnamed sections
store component settings in YAML as part of tech.component_settings
add add_padding_to_size function
simplify add_pins function. Replace port_type_to_layer with simple layer and port_type kwargs
add Pdk.add_pins()
replace pp.write_gds(component, gdspath) with component.write_gds(gdspath)
replace pp.write_component(component, gdspath) with component.write_gds_with_metadata(gdspath)
rename pp.components.waveguide to pp.components.straight
rename auto_taper_to_wide_waveguides auto_widen
rename wg_heater_connected to straight_with_heater
2.4.6#
more consistent names on component factories
add simulation_settings to Tech
sparameters_path: pathlib.Path = CONFIG[“sp”]
simulation_settings: SimulationSettings = simulation_settings
layer_stack: LayerStack = LAYER_STACK
add Pdk.write_sparameters()
2.4.5#
better docstrings
simplify code for pp.path.smooth
replace
pp.c.waveguide()
bypp.components.waveguide()
.pp.c.waveguide()
still works.replace
pp.qp()
bypp.plot()
to be consistent withc = Component()
andc.plot()
added
get_component_from_yaml
Pdk class
2.4.4#
add vertical_te and vertical_tm ports to grating couplers
remove klive warning when not klayout is not open (if klayout is not installed or running it will just fail silently)
replace cladding for bend_circular and bend_euler with square cladding
added
component.show(show_ports=True)
added
component.show(show_subports=True)
added
pf merge-cells
added
auto_taper_to_wide_waveguides
option to add_fiber_arrayadd_padding
returns the same component,add_padding
returns a container with component insideremove container decorator, containers are just regular cells now with @cell decorator
add
add_pin_square_double
and make it the default
2.4.3#
consistent port naming path.component extrusion
2.4.2#
better docs
2.4.0#
euler bends as default (with_arc_floorplan=True)
define bends and straighs by path and cross_section
tech file dataclass in pp.config
added pp.pdk with tests
include notebooks in docs with nbsphinx
regression test for labels
fixed CACHE key value by using the actual cellname
2.3.4#
gdsdiff does not do booleans by default
pin pre-commit versions
2.3.3#
added pp.components.path to easily extrude CrossSections
added more pp.types (ComponentFactory, RouteFactory) as Callable[…, Component]
Load a LayerColors object from a Klayout lyp file
clean lyp from generic tech
bend_euler accepts similar parameters as bend_circular (layers_cladding, cladding_offset)
renamed bend_euler90 as bend_euler
components adapted from picwriter take more similar values (layer_cladding, layer)
pp.difftest can step over each GDS file with a geometric difference and decide what to do interactively
adapted pp.path and pp.cross_section from phidl
2.3.2#
fixed some mypy errors
added dx to coupler
bezier has now number of points as a parameter
improved docs
allow to set min and max area of port markers to read
2.3.1#
refactor
connect_strip to get_route
connect_bundle to get_bundle
connect_strip_way_points to get_route_from_waypoints
make diff shows all difference from the difftest run
snap length to 1nm in route waveguide references
remove any waveguide reference on the routes which have a 1nm-snapped length equal to zero
2.3.0#
move tests to tests/ folder
rename from
from pp.testing import difftest
tofrom pp.difftest import difftest
remove pp.container containerize
better type annontations
replace some
c.show(show_ports=True)
by a simplerc.show()
2.2.9#
better settings export
fixed docs
2.2.8#
flat routes with no more zz_conn cells
added from pp.import_gds import add_ports_from_markers_square
2.2.7#
using mirror (port) in pp.component_from_yaml
remove old, untested code to deal with libraries. Libraries should use factory
add pp.get_name_to_function_dict to build factories as dict(func_name=func)
component_from_yaml can also use (north, east, west, ne, nw …) for placement
added regression tests for component_from_yaml
2.2.6#
added badges from github in README (codecoverage, docs … )
pp.import_gds can import and move cells with labels (thanks to Adam McCaughan)
add margin and min_pin_area_um2 to read_ports_from_markers
replace grating_coupler decorator with a simpler pp.assert_grating_coupler_properties() function
rename _containers to container_names and _components to component_names
simplify tests for components, containers and circuits
2.2.5#
added common types in pp.types
added simulation settings in name of sparameters
store Sparameters in .csv as well as in Lumerical interconnect format .dat
reduce some type errors when running mypy
fix error in u_bundle_direct_routes for a single route (thanks to tvt173)
When a component has both a placement and a connection are defined and transform over a component, we raise an error.
add Component().plot() in matplotlib and Component.show() in Klayout
clear_cache when running plot() or show(). Useful for Jupyter notebooks
add logo
2.2.4#
get_netlist() returns a dict. Removed recursive option as it is not consistent with the new netlist extractor in pp/get_netlist.py. Added name to netlist.
fixed get_netlist() placements (using origin of the reference instead of x, y which refer to the center). Now we can go back and forth from component -> netlist -> component
If there is a label at the same XY as the reference it gets the name from that label, the issue was that we need to add the labels after defining connections in component_from_yaml
ListConfig iterates as a list in \clean_value_json
test component.get_netlist() -> YAML-> pp.component_from_yaml(YAML) = component (both for settings_changed and full_settings)
add pp.testing with difftest(component) function for boolean GDS testing.
improved placer documentation and comments in pp/samples/mask/does.yml
2.2.3#
store config.yml in mask build directory (reproduce environment when building masks)
add tests for add_fiber_single and add_fiber_array labels
snap name to 1nm grid, try to name it without decimals when possible (L1p00 -> L1)
more sensitive defaults parameter names for MZI (coupler -> splitter)
sim settings outputs in YAML file
fix sparameters sorting of ports when in pp.sp.read_sparameters
pp.get_netlist() returns top level ports for a component
output parameters that change in component (c.polarization=’te’) in settings[‘info’]
fixed bug in get_settings to clean tuple settings export
2.2.2#
rename coupler ports inside mzi function
2.2.1#
pp.plot hides DEVREC layer
test netlist of
_circuits
sort the keys when loading YAML file for test_netlists
better docstrings
add function_name to container
remove duplicated keys for container
pp.clear_cache() in pytest fixture in
pp/conftest.py
fixed pp.clear_cache() by using a global variable.
added lytest tests, which test GDS boolean diffs using klayout
fixed
pf diff
to show (diffs, common, only_old, only_new, old, new) using same layers in different cells. Thanks to Troy Tamas.removed
pins
argument from cell decorator as it changes the geometry of a cell with the same name (it was problematic).new recurse_instances function. No need to track connections in a global netlist dict. We can extract netlist connections from devices sharing ports.
component_from_yaml adds label with. instance name. Thanks to Troy Tamas.
write a pp.add_pins_to_references that adds pins and labels to references.
make sure @cell decorator checks that it returns a Component
remove other types of units conversions from
better type hints
export hierarchical and flat netlists
rename 0.5 as 500n (it makes more sense as default units are in um) and submicron features are named in nm
remove other renames
if 1e12 > value > 1e9:
value = f"{int(value/1e9)}G"
elif 1e9 > value > 1e6:
value = f"{int(value/1e6)}M"
elif 1e6 > value > 1e3:
value = f"{int(value/1e3)}K"
if 1 > value > 1e-3:
value = f"{int(value*1e3)}n"
elif 1e-6 < value < 1e-3:
value = f"{int(value*1e6)}p"
elif 1e-9 < value < 1e-6:
value = f"{int(value*1e9)}f"
elif 1e-12 < value < 1e-9:
value = f"{int(value*1e12)}a"
else:
value = f"{value:.2f}"
2.2.0#
component_from_yaml updates:
placements:
port: you can define an anchor port
dx: delta x
dy: delta x
mirror: boolean or float (x axis for the mirror)
x: number or can also be a port from another instance
routes:
you can define a route range (left,E:0:3 : right,W:0:3)
connect bundle is now the default way to connect groups of ports in component_from_yaml
coupler: can change the vertical distance (dy) between outputs
replace @pp.autoname with @pp.cell as a decorator with cells options (autoname, pins …)
2.1.4#
fixed installer for windows using copy instead of symlink
2.1.3#
pf install
installs klive, generate_tech and gitdiffpf diff
makes boolean difference between 2 GDS files
2.1.2#
write conda environment.yml so you can
make conda
to install the conda environmentsetup.py installs klive, generate_tech and gitdiff
2.1.0#
test lengths for routes
pytest are passing now for windows
Fixed the spiral circular error by snapping length to 1nm (windows only)
Testing now for windows and linux in the CICD
Made the multiprocessing calls pickeable by removing the logger function (that wasn’t doing much anyway)
extend_ports: maintains un-extended ports
2.0.2#
fixing sorting of ports in bundle routing: Thanks to Troy Tamas
added
factory: optical
andsettings:
in component_from_yaml routeswrite more container metadata for component inside the container (function_name, module ….)
more checks for the grating coupler decorator (W0 port with 180 degrees orientation)
CI/CD tests run also on pull requests
added pp.clear_cache() and call it when we run
c.show()
use pp.clear_cache() when testing component port positions
2.0.0#
added grating coupler decorator to assert polarization and wavelength
component_from_yaml function allows route filter input
routes_factory: in pp.routing (optical, electrical)
routes: in component_from_yaml allows route_factory
no more routes and route_bundles: now it’s all called routes, and you need to specify the routing factory function name [optical, electrical …]
renamed component_type2factory to component_factory
explained factory operation in notebooks/02_components.ipynb
mzi.py DL is now the actual delta_length
1.4.4#
improved notebooks (thanks to phidl tutorial)
added C and L components from phidl
print(component) returns more info (similar to phidl)
support new way of defining waveguides with pp.Path, pp.CrossSection and pp.path (thanks to phidl)
1.4.3#
clean metadata dict recursively
1.4.2#
renamed add_io_optical to add_fiber_array
added taper factory and length to add_fiber_single
fixed JSON metadata for Components with function kwargs
fixed reference positions in component_from_yaml
added bundle_routes option in component_from_yaml
1.4.0#
Works now for python>=3.6, before only worked for python3.7 due to type annotations
nicer netlist representations (adding location to each node in the graph)
YAML loader accepts strings (no more io.StringIO)
better docs
add_tapers only tapers optical ports in the new containered component
add_ports from polygon markers
add_io_optical maintains other ports
added single fiber routing capabilities (pp.routing.add_fiber_single)
added Component.copy()
added basic electrical routing capabilities
pp.routing.add_electrical_pads
pp.routing.add_electrical_pads_top
pp.routing.add_electrical_pads_shortest
1.3.2#
improve sparameters tutorial
fixed some issues when using
x = x or x_default
not valid forx=0
added tests for splitter_tree and splitter_chain
1.3.1#
get_netlist by default return a simpler netlist that captures only settings different from default. Full netlist component properties available with
full_settings=True
.limited pytest scope to netlist build tests to avoid weird side effects that move ports locations from test_component_ports
sphinx==1.3.2 in requirements.txt
1.3.0#
Component.get_netlist()
returns its netlistComponent.plot_netlist()
renders netlist graphcomponent_from_yaml
accepts netlistrouting jupyter notebooks
manhattan text can have cladding
1.2.1#
replaced hiyapyco with omegaconf (better YAML parser that can handle number with exponents 1e9)
separated conf (important to be saved) from CONFIG that contains useful paths
1.2.0#
added link for ubc PDK to README
added a jupyter notebook tutorial for references and array of references
added dbr and cavity components
rotate is now a container
adapted pp.pack from phidl as an easier way to pack masks
Autoname also has now a build in cache to avoid having two different cells with the same name
added type annotations
1.1.9#
write and read Sparameters
pp.extend_ports is now a container
any component decorated with @pp.cell can accept
pins=True
flag, and a functionpins_function
.Pins arguments will be ignored from the Component
name
andsettings
better json serializer for settings
added units to names (m,K,G …)
1.1.8#
leaf components (waveguide, bend, mmi …) have now pins, for circuit simulation
1.1.7#
flake8 is passing now
added flake8 to pre-commit hook
simpler JSON file for mask metadata mask.tp.json
added container decorator, can inherit ports, settings, test and data analysis protocols and still have a different name to avoid name collisions
samples run as part of the test suite, moved samples into pp
cell sorts kwarg keys by alphabetical order
added cell tests
cell accepts max_name_length and ignore_from_name kwargs
pp.generate_does raises error if component does not exist in factory
replaces name_W20_L30 by name_hash for cell names > 32
zz_conn cleaner name using
from pp.cell import clean_name
no slashes in the nameadd_io is a container
write labels settings in the middle of the component by default, you can always turn it off by adding
config.yml
in your projectadded pytest-regression for component setting and ports
with_settings_label: False
1.1.6#
mask JSON works with cached GDS files for the klayout placer
added layers to CONFIG[‘layers’]
write_labels gets layer from
CONFIG['layers']['LABEL']
add_padding works over the same component –> this was not a good idea, reverted in 1.1.7 to avoid name collisions
import_gds can snap points to a design grid
1.1.5#
added pre-commit hook for code consistency
waveguide and bend allow a list of cladding layers
all layers are defined as tuples using pp.LAYER.WG, pp.LAYER.WGCLAD
1.1.4#
bug fixes
new coupler with less snapping errors
adding Klayout generic DRC rule deck
1.1.1#
first public release
1.0.2#
test components using gdshash
new CLI commands for
pf
pf library lock
pf library pull
1.0.1#
autoplacer and yaml placer
mask_merge functions (merge metadata, test protocols)
added mask samples
all the mask can be build now from a config.yml in the current directory using
pf mask write
1.0.0#
first release