├── tests ├── __init__.py ├── data │ ├── mzi_s_params.npy │ └── spice │ │ ├── MZI4 │ │ ├── MZI4_main.spi │ │ ├── MZI4.lsf │ │ └── MZI4.spi │ │ ├── EBeam_sequoiap_A_v2 │ │ ├── EBeam_sequoiap_A_v2_main.spi │ │ ├── EBeam_sequoiap_A_v2.lsf │ │ └── EBeam_sequoiap_A_v2.spi │ │ └── top │ │ ├── top_main.spi │ │ ├── top.lsf │ │ └── top.spi ├── conftest.py ├── plugins │ └── test_lumerical.py ├── libraries │ ├── ideal │ │ └── test_ideal_models.py │ └── siepic │ │ └── test_siepic_models.py └── test_utils.py ├── MANIFEST.in ├── docs ├── simphony_logo.png ├── _static │ └── images │ │ ├── mzi.png │ │ ├── ring.png │ │ ├── coupler.png │ │ ├── filters.png │ │ ├── halfring.png │ │ ├── plot_mzi.png │ │ ├── ebeam_y_1550.png │ │ ├── layout_aware.png │ │ ├── plot_mzi_mc2.png │ │ ├── ebeam_bdc_te1550.png │ │ ├── ebeam_gc_te1550.png │ │ ├── mzi_layout_aware.png │ │ ├── sipann_half_ring.png │ │ ├── sipann_racetrack.png │ │ ├── sipann_waveguide.png │ │ ├── sipann_half_racetrack.png │ │ ├── ebeam_terminator_te1550.png │ │ ├── ebeam_wg_integral_1550.png │ │ ├── sipann_dc_crossover1550.png │ │ ├── sipann_standard_coupler.png │ │ ├── sipann_straight_coupler.png │ │ └── mzi_outline_ports_marked.png ├── _templates │ └── autosummary │ │ ├── minimal_module.rst │ │ ├── member.rst │ │ ├── method.rst │ │ ├── attribute.rst │ │ ├── base.rst │ │ ├── class.rst │ │ └── module.rst ├── libs │ ├── ideal.rst │ ├── siepic.rst │ └── sipann.rst ├── reference.rst ├── _toc.yml ├── references.bib ├── dev │ ├── documenting.md │ ├── contributing.md │ └── developing.md ├── index.md ├── tutorials │ ├── monte_carlo.ipynb │ └── layout_aware.rst └── _config.yml ├── simphony ├── libraries │ ├── siepic │ │ └── source_data │ │ │ ├── wg_integral_source │ │ │ ├── WaveGuideTETMStrip,w=1120,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1700,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=2200,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=2900,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=2900,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=3000,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=3000,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=3100,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=440,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=460,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=460,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=480,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=520,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=520,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=520,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=560,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=560,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=580,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=600,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=640,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=640,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=840,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1000,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1000,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1000,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1040,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1040,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1040,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1080,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1080,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1080,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1120,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1120,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1160,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1160,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1160,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1200,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1200,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1200,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1240,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1240,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1240,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1280,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1280,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1280,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1320,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1320,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1320,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1360,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1360,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1360,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1400,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1400,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1400,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1500,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1500,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1500,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1600,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1600,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1600,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1700,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1700,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1800,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1800,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1800,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=1900,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=1900,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=1900,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=2000,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=2000,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=2000,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=2100,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=2100,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=2100,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=2200,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=2200,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=2300,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=2300,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=2300,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=2400,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=2400,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=2400,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=2500,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=2500,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=2500,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=2600,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=2600,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=2600,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=2700,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=2700,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=2700,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=2800,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=2800,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=2800,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=2900,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=3000,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=3100,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=3100,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=3200,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=3200,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=3200,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=3300,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=3300,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=3300,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=3400,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=3400,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=3400,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=3500,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=3500,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=3500,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=400,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=400,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=400,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=420,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=420,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=420,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=440,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=440,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=460,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=480,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=480,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=500,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=500,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=500,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=540,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=540,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=540,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=560,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=580,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=580,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=600,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=600,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=640,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=680,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=680,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=680,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=720,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=720,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=720,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=760,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=760,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=760,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=800,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=800,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=800,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=840,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=840,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=880,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=880,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=880,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=920,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=920,h=220.txt │ │ │ ├── WaveGuideTETMStrip,w=920,h=230.txt │ │ │ ├── WaveGuideTETMStrip,w=960,h=210.txt │ │ │ ├── WaveGuideTETMStrip,w=960,h=220.txt │ │ │ └── WaveGuideTETMStrip,w=960,h=230.txt │ │ │ ├── ebeam_y_1550.gds │ │ │ ├── ebeam_dc_halfring_straight │ │ │ ├── te_ebeam_dc_halfring_straight_gap=50nm_radius=3um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml │ │ │ ├── te_ebeam_dc_halfring_straight_gap=50nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml │ │ │ ├── te_ebeam_dc_halfring_straight_gap=60nm_radius=3um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml │ │ │ ├── te_ebeam_dc_halfring_straight_gap=60nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml │ │ │ ├── te_ebeam_dc_halfring_straight_gap=100nm_radius=3um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml │ │ │ ├── te_ebeam_dc_halfring_straight_gap=100nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml │ │ │ ├── te_ebeam_dc_halfring_straight_gap=80nm_radius=3um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml │ │ │ ├── tm_ebeam_dc_halfring_straight_gap=300nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml │ │ │ ├── te_ebeam_dc_halfring_straight_gap=100nm_radius=10um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml │ │ │ ├── te_ebeam_dc_halfring_straight_gap=150nm_radius=10um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml │ │ │ └── tm_ebeam_dc_halfring_straight.xml │ │ │ ├── PCell_parameters.xml │ │ │ ├── bdc_TE_source │ │ │ └── bdc_lookup_table.xml │ │ │ ├── gc_source │ │ │ ├── GC_TE_lookup_table.xml │ │ │ └── GC_TM_lookup_table.xml │ │ │ ├── y_branch_source │ │ │ └── y_lookup_table.xml │ │ │ ├── ebeam_disconnected_te1550 │ │ │ └── nanotaper_w1=500,w2=500,L=0.1_TE.sparam │ │ │ ├── ebeam_disconnected_tm1550 │ │ │ └── nanotaper_w1=500,w2=500,L=0.1_TM.sparam │ │ │ ├── ebeam_terminator_te1550 │ │ │ └── nanotaper_w1=500,w2=60,L=10_TE.sparam │ │ │ ├── ebeam_terminator_tm1550 │ │ │ └── nanotaper_w1=500,w2=60,L=10_TM.sparam │ │ │ ├── ebeam_dc_te1550 │ │ │ └── dc_map.xml │ │ │ └── CDC │ │ │ └── write_sparams.lsf │ ├── __init__.py │ └── ideal.py ├── plugins │ └── __init__.py ├── exceptions.py ├── simulation.py └── __init__.py ├── examples ├── siepic │ ├── MZI4 │ │ ├── MZI4_main.spi │ │ ├── MZI4.lsf │ │ └── MZI4.spi │ └── siepic.py └── subnetwork_growth.py ├── .bumpversion.cfg ├── tox.ini ├── .readthedocs.yml ├── .github └── workflows │ ├── build-and-test.yml │ └── release.yml ├── LICENSE ├── scripts ├── create_changelog_entry.py ├── release.py └── get_changelog_entry.py ├── .pre-commit-config.yaml ├── .gitignore ├── Makefile ├── pyproject.toml └── README.md /tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE.txt CHANGELOG.txt 2 | graft simphony/ 3 | global-exclude *.py[cod] -------------------------------------------------------------------------------- /docs/simphony_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/simphony_logo.png -------------------------------------------------------------------------------- /docs/_static/images/mzi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/mzi.png -------------------------------------------------------------------------------- /tests/data/mzi_s_params.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/tests/data/mzi_s_params.npy -------------------------------------------------------------------------------- /docs/_static/images/ring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/ring.png -------------------------------------------------------------------------------- /docs/_static/images/coupler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/coupler.png -------------------------------------------------------------------------------- /docs/_static/images/filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/filters.png -------------------------------------------------------------------------------- /docs/_static/images/halfring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/halfring.png -------------------------------------------------------------------------------- /docs/_static/images/plot_mzi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/plot_mzi.png -------------------------------------------------------------------------------- /docs/_static/images/ebeam_y_1550.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/ebeam_y_1550.png -------------------------------------------------------------------------------- /docs/_static/images/layout_aware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/layout_aware.png -------------------------------------------------------------------------------- /docs/_static/images/plot_mzi_mc2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/plot_mzi_mc2.png -------------------------------------------------------------------------------- /docs/_static/images/ebeam_bdc_te1550.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/ebeam_bdc_te1550.png -------------------------------------------------------------------------------- /docs/_static/images/ebeam_gc_te1550.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/ebeam_gc_te1550.png -------------------------------------------------------------------------------- /docs/_static/images/mzi_layout_aware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/mzi_layout_aware.png -------------------------------------------------------------------------------- /docs/_static/images/sipann_half_ring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/sipann_half_ring.png -------------------------------------------------------------------------------- /docs/_static/images/sipann_racetrack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/sipann_racetrack.png -------------------------------------------------------------------------------- /docs/_static/images/sipann_waveguide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/sipann_waveguide.png -------------------------------------------------------------------------------- /docs/_static/images/sipann_half_racetrack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/sipann_half_racetrack.png -------------------------------------------------------------------------------- /docs/_static/images/ebeam_terminator_te1550.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/ebeam_terminator_te1550.png -------------------------------------------------------------------------------- /docs/_static/images/ebeam_wg_integral_1550.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/ebeam_wg_integral_1550.png -------------------------------------------------------------------------------- /docs/_static/images/sipann_dc_crossover1550.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/sipann_dc_crossover1550.png -------------------------------------------------------------------------------- /docs/_static/images/sipann_standard_coupler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/sipann_standard_coupler.png -------------------------------------------------------------------------------- /docs/_static/images/sipann_straight_coupler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/sipann_straight_coupler.png -------------------------------------------------------------------------------- /docs/_static/images/mzi_outline_ports_marked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/docs/_static/images/mzi_outline_ports_marked.png -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1120,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.7305 1.89128 3.79611 3.7806 -0.00111665 -0.0137738 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1700,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.81174 2.0162 3.75047 4.00941 -0.0013009 -0.010716 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2200,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79141 1.94999 3.71927 3.77313 -0.001489 -0.0124546 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2900,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.80055 1.9604 3.7076 3.76399 -0.00154678 -0.0123398 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2900,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.83508 2.04189 3.72095 3.9848 -0.0014469 -0.0104541 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3000,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.80137 1.96137 3.70655 3.76298 -0.001552 -0.0123317 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3000,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.8359 2.04284 3.71992 3.9836 -0.00145203 -0.0104497 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3100,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.83662 2.04369 3.719 3.98254 -0.00145683 -0.0104462 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=440,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.36762 1.796 4.31614 3.89103 0.000477296 -0.0191852 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=460,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.33498 1.6824 4.25031 3.27778 2.29401e-05 -0.0206452 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=460,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.41019 1.81382 4.27455 3.94458 0.000560338 -0.018365 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=480,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.37296 1.69545 4.21394 3.33504 0.00011774 -0.0204058 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=520,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.43667 1.71952 4.14754 3.43132 0.00012758 -0.0198148 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=520,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.47492 1.78729 4.15857 3.76974 0.00031173 -0.0187572 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=520,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.51046 1.8607 4.16623 4.06094 0.000462146 -0.0161562 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=560,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.48764 1.74136 4.09049 3.5078 2.93805e-05 -0.0191411 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=560,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.56057 1.88732 4.10811 4.1118 0.000301937 -0.0149167 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=580,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.58214 1.8995 4.08263 4.13168 0.000216935 -0.0143641 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=600,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.60125 1.91067 4.05992 4.1482 0.000136268 -0.0138692 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=640,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.60033 1.85262 4.01232 3.923 -0.000119501 -0.0159489 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=640,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.63476 1.93103 4.0197 4.1733 -2.11543e-05 -0.0129998 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=840,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.66716 1.84217 3.87521 3.7375 -0.000754036 -0.015413 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1000,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.70981 1.8742 3.82207 3.7704 -0.000995296 -0.0143029 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1000,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.74538 1.95454 3.83366 4.02396 -0.000899492 -0.0121272 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1000,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.77835 2.03688 3.84272 4.21846 -0.000815096 -0.0094307 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1040,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.71743 1.88029 3.81255 3.77478 -0.00103953 -0.0141086 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1040,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.75291 1.96086 3.82427 4.02529 -0.000943831 -0.0119425 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1040,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.78581 2.04332 3.83345 4.21701 -0.000859364 -0.00927717 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1080,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.72431 1.88606 3.80388 3.77824 -0.0010798 -0.0139297 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1080,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.75971 1.96681 3.81572 4.02591 -0.000984075 -0.0117755 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1080,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79254 2.04935 3.82502 4.21511 -0.000899449 -0.00914104 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1120,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.76583 1.97218 3.80806 4.02578 -0.00102087 -0.011633 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1120,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79859 2.05478 3.81747 4.21281 -0.000936071 -0.00902716 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1160,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.73608 1.89608 3.78915 3.78241 -0.00114889 -0.0136345 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1160,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.77136 1.97712 3.80119 4.02535 -0.00105298 -0.0115072 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1160,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.80406 2.05976 3.8107 4.21045 -0.000967977 -0.0089281 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1200,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.74105 1.90042 3.78292 3.78383 -0.00117949 -0.0135118 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1200,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.77626 1.98156 3.79505 4.02481 -0.0010835 -0.0113969 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1200,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.80892 2.06425 3.80464 4.20823 -0.000998333 -0.0088413 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1240,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.74557 1.90446 3.77723 3.78482 -0.0012069 -0.0134016 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1240,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.78074 1.98569 3.78945 4.02403 -0.00111079 -0.0112991 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1240,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.81334 2.06841 3.79912 4.20594 -0.00102543 -0.00876559 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1280,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.74968 1.90824 3.77204 3.78548 -0.00123169 -0.0133011 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1280,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.7848 1.98955 3.78434 4.02305 -0.00113542 -0.0112112 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1280,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.81736 2.07229 3.79409 4.20358 -0.00104986 -0.00869863 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1320,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.75341 1.91168 3.76733 3.78571 -0.00125445 -0.0132137 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1320,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.78849 1.99305 3.7797 4.02185 -0.00115804 -0.0111358 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1320,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.82101 2.0758 3.78951 4.20119 -0.00107229 -0.00864229 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1360,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.75684 1.91488 3.76301 3.78574 -0.00127497 -0.0131341 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1360,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79187 1.99631 3.77544 4.02058 -0.00117839 -0.0110678 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1360,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.82436 2.07906 3.78532 4.19886 -0.00109243 -0.00859175 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1400,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.75999 1.91787 3.75903 3.78562 -0.0012946 -0.0130627 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1400,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79499 1.99933 3.77152 4.01928 -0.00119787 -0.0110075 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1400,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.82745 2.08209 3.78146 4.19659 -0.00111174 -0.00854774 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1500,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.76678 1.92439 3.75049 3.78481 -0.00133638 -0.0129141 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1500,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.80171 2.00594 3.76312 4.01598 -0.00123929 -0.0108838 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1500,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.83409 2.08868 3.77319 4.19129 -0.00115273 -0.00845921 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1600,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.77233 1.92993 3.74345 3.78346 -0.00137022 -0.0127968 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1600,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.80719 2.01152 3.7562 4.01265 -0.00127279 -0.0107885 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1600,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.83952 2.09424 3.76637 4.18639 -0.00118584 -0.008393 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1700,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.77693 1.93459 3.73764 3.78178 -0.00139867 -0.0127054 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1700,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.84402 2.0989 3.76074 4.18192 -0.00121359 -0.00834447 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1800,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.78082 1.93861 3.73272 3.77999 -0.00142255 -0.0126323 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1800,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.81559 2.02023 3.74564 4.00634 -0.0013245 -0.0106594 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1800,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.84782 2.10289 3.75599 4.17787 -0.00123687 -0.00830816 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1900,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.78409 1.94206 3.72857 3.77821 -0.00144299 -0.0125735 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1900,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.81882 2.02368 3.74156 4.00351 -0.00134468 -0.0106148 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=1900,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.85103 2.10631 3.75197 4.17425 -0.00125677 -0.00828033 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2000,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.78691 1.94508 3.72499 3.77642 -0.0014614 -0.0125258 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2000,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.82161 2.02669 3.73804 4.00085 -0.00136286 -0.0105794 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2000,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.85378 2.10929 3.74851 4.17095 -0.00127472 -0.00825931 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2100,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.78931 1.94768 3.72193 3.77473 -0.00147581 -0.0124872 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2100,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.82397 2.02929 3.73503 3.99846 -0.00137705 -0.0105513 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2100,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.85612 2.11185 3.74555 4.16803 -0.00128869 -0.00824323 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2200,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.82605 2.03159 3.73241 3.99625 -0.00139005 -0.0105281 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2200,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.85817 2.11412 3.74298 4.16538 -0.0013015 -0.0082304 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2300,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79323 1.95201 3.71694 3.77154 -0.00150091 -0.0124287 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2300,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.82786 2.03359 3.73013 3.99417 -0.00140179 -0.0105104 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2300,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.85996 2.11609 3.74073 4.16294 -0.00131306 -0.00822155 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2400,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79483 1.95382 3.71489 3.77007 -0.00150999 -0.0124073 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2400,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.82944 2.03538 3.72812 3.99226 -0.00141069 -0.0104962 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2400,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.86153 2.11786 3.73875 4.16074 -0.00132178 -0.00821524 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2500,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79626 1.95542 3.71309 3.76871 -0.00151938 -0.0123886 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2500,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.83085 2.03697 3.72634 3.99053 -0.00141995 -0.0104838 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2500,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.86292 2.11942 3.73701 4.15875 -0.00133092 -0.00820945 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2600,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79752 1.95688 3.71147 3.76739 -0.00152742 -0.0123729 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2600,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.83209 2.03841 3.72475 3.9889 -0.00142786 -0.0104737 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2600,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.86415 2.12083 3.73544 4.15691 -0.00133869 -0.00820533 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2700,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79864 1.95817 3.71004 3.76618 -0.0015344 -0.0123603 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2700,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.8332 2.03969 3.72335 3.98742 -0.00143473 -0.0104662 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2700,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.86525 2.12208 3.73406 4.15524 -0.00134545 -0.00820303 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2800,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.79965 1.95935 3.70875 3.76508 -0.00154113 -0.0123487 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2800,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.8342 2.04085 3.72208 3.98608 -0.00144135 -0.0104591 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2800,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.86624 2.12323 3.73282 4.15373 -0.00135196 -0.00820051 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=2900,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.86711 2.12424 3.73171 4.15232 -0.00135741 -0.00819954 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3000,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.86792 2.12517 3.7307 4.15101 -0.00136245 -0.00819877 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3100,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.8021 1.96223 3.70561 3.76207 -0.00155688 -0.0123251 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3100,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.86864 2.12601 3.72979 4.14985 -0.00136717 -0.00819852 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3200,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.80278 1.96303 3.70475 3.76121 -0.00156087 -0.0123192 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3200,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.83729 2.04448 3.71816 3.98154 -0.00146074 -0.0104432 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3200,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.86929 2.12678 3.72896 4.14876 -0.00137101 -0.00819841 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3300,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.80338 1.96376 3.70397 3.76041 -0.00156482 -0.0123139 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3300,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.83789 2.0452 3.71739 3.98062 -0.00146462 -0.0104405 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3300,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.86989 2.12748 3.72821 4.14776 -0.00137481 -0.00819825 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3400,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.80394 1.96444 3.70325 3.75965 -0.00156857 -0.0123096 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3400,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.83844 2.04586 3.71668 3.97975 -0.0014683 -0.0104386 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3400,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.87043 2.12813 3.72751 4.14682 -0.00137844 -0.00819862 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3500,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.80445 1.96505 3.7026 3.75894 -0.00157181 -0.0123059 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3500,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.83895 2.04647 3.71604 3.97894 -0.00147148 -0.0104371 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=3500,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.87093 2.12872 3.72688 4.14596 -0.00138157 -0.00819929 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=400,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.18832 1.63971 4.35645 3.06327 -0.00127226 -0.0208583 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=400,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.2277 1.69482 4.38196 3.41763 -0.000672136 -0.0218142 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=400,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.26455 1.75714 4.40059 3.75487 -0.000178352 -0.0208338 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=420,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.24309 1.65441 4.32451 3.14184 -0.000582849 -0.020899 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=420,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.28241 1.71222 4.3447 3.49688 -0.000118882 -0.0214166 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=420,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.31913 1.77702 4.35914 3.82789 0.000259898 -0.0200188 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=440,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.29195 1.66872 4.28781 3.21357 -0.000186238 -0.0208197 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=440,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.33112 1.72898 4.30444 3.56741 0.000179776 -0.0209356 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=460,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.37393 1.74487 4.26461 3.62896 0.000319573 -0.0204039 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=480,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.41168 1.75988 4.22668 3.68252 0.000364681 -0.0198523 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=480,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.44769 1.83051 4.23551 3.98989 0.000565239 -0.0175817 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=500,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.40705 1.70801 4.17917 3.38669 0.000143768 -0.0201158 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=500,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.44553 1.77422 4.19088 3.72971 0.000354275 -0.0192881 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=500,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.48129 1.84635 4.19899 4.02873 0.000525639 -0.0168311 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=540,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.46358 1.73075 4.11775 3.47189 8.44386e-05 -0.0194802 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=540,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.50161 1.79993 4.12834 3.80518 0.000248733 -0.0182222 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=540,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.53693 1.87447 4.13575 4.08855 0.000383528 -0.0155093 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=560,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.52546 1.81179 4.10082 3.83588 0.000178762 -0.0177136 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=580,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.50961 1.75152 4.06521 3.54009 -3.51916e-05 -0.018796 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=580,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.54723 1.82309 4.07539 3.86289 0.000102664 -0.0172237 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=600,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.52908 1.76094 4.04256 3.56828 -0.000100439 -0.0184652 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=600,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.56652 1.83351 4.05267 3.88598 2.86749e-05 -0.0167729 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=640,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.56322 1.77837 4.00221 3.61509 -0.000236333 -0.0178222 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=680,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.59139 1.79414 3.96819 3.6521 -0.000362406 -0.0172206 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=680,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.62821 1.86973 3.97844 3.95075 -0.000253072 -0.0152242 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=680,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.66236 1.94908 3.98601 4.19053 -0.000160182 -0.0122688 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=720,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.61509 1.80821 3.9392 3.68183 -0.000479717 -0.0166858 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=720,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.65167 1.88491 3.94961 3.97229 -0.00037539 -0.0146035 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=720,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.68559 1.96503 3.9574 4.20307 -0.000286058 -0.0116592 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=760,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.63522 1.8207 3.91466 3.70475 -0.000581106 -0.0162112 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=760,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.6716 1.89828 3.92526 3.98792 -0.000479947 -0.0140762 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=760,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.70532 1.97899 3.93326 4.21105 -0.000392765 -0.0111584 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=800,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.65227 1.83202 3.89352 3.72295 -0.000672296 -0.0157857 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=800,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.68846 1.91031 3.90431 3.99956 -0.000573197 -0.0136188 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=800,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.72201 1.99147 3.91253 4.21602 -0.000487318 -0.0107356 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=840,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.70319 1.92106 3.88618 4.00836 -0.000656347 -0.0132282 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=840,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.7366 2.00259 3.89459 4.21911 -0.000571308 -0.0103818 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=880,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.67993 1.85141 3.85924 3.74884 -0.000824278 -0.0150797 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=880,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.71582 1.93077 3.87039 4.01453 -0.000727425 -0.0128886 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=880,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.7491 2.01257 3.87898 4.22031 -0.000642791 -0.0100815 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=920,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.69124 1.85973 3.84526 3.75788 -0.000887754 -0.0147898 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=920,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.72701 1.93948 3.85656 4.01905 -0.000791478 -0.0125991 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=920,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.76018 2.02151 3.86533 4.22054 -0.000707087 -0.00983006 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=960,h=210.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.70103 1.8673 3.83298 3.76508 -0.000944656 -0.0145316 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=960,h=220.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.73669 1.94738 3.84444 4.02222 -0.000848696 -0.0123459 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/wg_integral_source/WaveGuideTETMStrip,w=960,h=230.txt: -------------------------------------------------------------------------------- 1 | 1.55e-06 2.76975 2.02958 3.85336 4.21996 -0.000764351 -0.0096135 2 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_y_1550.gds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BYUCamachoLab/simphony/HEAD/simphony/libraries/siepic/source_data/ebeam_y_1550.gds -------------------------------------------------------------------------------- /docs/_templates/autosummary/minimal_module.rst: -------------------------------------------------------------------------------- 1 | {{ fullname | escape | underline}} 2 | 3 | .. automodule:: {{ fullname }} 4 | 5 | {% block docstring %} 6 | {% endblock %} 7 | 8 | -------------------------------------------------------------------------------- /docs/libs/ideal.rst: -------------------------------------------------------------------------------- 1 | .. _api.simphony.libraries.ideal: 2 | 3 | ===== 4 | ideal 5 | ===== 6 | 7 | .. automodule:: simphony.libraries.ideal 8 | :members: 9 | :undoc-members: 10 | :show-inheritance: 11 | :noindex: 12 | -------------------------------------------------------------------------------- /docs/libs/siepic.rst: -------------------------------------------------------------------------------- 1 | .. _api.simphony.libraries.siepic: 2 | 3 | ====== 4 | siepic 5 | ====== 6 | 7 | .. automodule:: simphony.libraries.siepic 8 | :members: 9 | :undoc-members: 10 | :show-inheritance: 11 | :noindex: 12 | -------------------------------------------------------------------------------- /docs/libs/sipann.rst: -------------------------------------------------------------------------------- 1 | .. _api.simphony.libraries.sipann: 2 | 3 | ====== 4 | sipann 5 | ====== 6 | 7 | .. automodule:: simphony.libraries.sipann 8 | :members: 9 | :undoc-members: 10 | :show-inheritance: 11 | :noindex: 12 | -------------------------------------------------------------------------------- /simphony/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright © Simphony Project Contributors 2 | # Licensed under the terms of the MIT License 3 | # (see simphony/__init__.py for details) 4 | """Plugins for interoperability with other software and file formats.""" 5 | -------------------------------------------------------------------------------- /simphony/libraries/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright © Simphony Project Contributors 2 | # Licensed under the terms of the MIT License 3 | # (see simphony/__init__.py for details) 4 | """Prebuild models from various sources that are compatible with SAX.""" 5 | -------------------------------------------------------------------------------- /docs/reference.rst: -------------------------------------------------------------------------------- 1 | .. _api_reference: 2 | 3 | simphony 4 | ======== 5 | 6 | .. automodule:: simphony 7 | 8 | .. rubric:: Modules 9 | 10 | .. autosummary:: 11 | :toctree: api 12 | :recursive: 13 | 14 | simphony.classical 15 | simphony.exceptions 16 | simphony.libraries 17 | simphony.plugins 18 | simphony.quantum 19 | simphony.simulation 20 | simphony.utils 21 | -------------------------------------------------------------------------------- /tests/conftest.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | import pytest 4 | import numpy as np 5 | 6 | 7 | @pytest.fixture 8 | def data_dir(): 9 | return Path(__file__).parent / "data" 10 | 11 | 12 | @pytest.fixture 13 | def std_wl_um(): 14 | return np.linspace(1.5, 1.6, 1000) 15 | 16 | 17 | @pytest.fixture 18 | def std_wl(): 19 | return np.linspace(1.5, 1.6, 1000) * 1e-6 20 | -------------------------------------------------------------------------------- /simphony/exceptions.py: -------------------------------------------------------------------------------- 1 | """Simphony exceptions.""" 2 | 3 | 4 | class SimphonyError(Exception): 5 | """Base error for all simphony errors.""" 6 | 7 | 8 | class ModelValidationError(SimphonyError): 9 | """Error raised when a component model is improperly defined.""" 10 | 11 | 12 | class ShapeMismatchError(SimphonyError): 13 | """Error raised when the shape of an array is incorrect.""" 14 | -------------------------------------------------------------------------------- /docs/_templates/autosummary/member.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | {{ name | escape | underline}} 4 | 5 | .. currentmodule:: {{ module }} 6 | 7 | member 8 | 9 | .. auto{{ objtype }}:: {{ fullname | replace("numpy.", "numpy::") }} 10 | 11 | {# In the fullname (e.g. `numpy.ma.MaskedArray.methodname`), the module name 12 | is ambiguous. Using a `::` separator (e.g. `numpy::ma.MaskedArray.methodname`) 13 | specifies `numpy` as the module name. #} -------------------------------------------------------------------------------- /docs/_templates/autosummary/method.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | {{ name | escape | underline}} 4 | 5 | .. currentmodule:: {{ module }} 6 | 7 | method 8 | 9 | .. auto{{ objtype }}:: {{ fullname | replace("numpy.", "numpy::") }} 10 | 11 | {# In the fullname (e.g. `numpy.ma.MaskedArray.methodname`), the module name 12 | is ambiguous. Using a `::` separator (e.g. `numpy::ma.MaskedArray.methodname`) 13 | specifies `numpy` as the module name. #} -------------------------------------------------------------------------------- /docs/_templates/autosummary/attribute.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | {{ name | escape | underline}} 4 | 5 | .. currentmodule:: {{ module }} 6 | 7 | attribute 8 | 9 | .. auto{{ objtype }}:: {{ fullname | replace("numpy.", "numpy::") }} 10 | 11 | {# In the fullname (e.g. `numpy.ma.MaskedArray.methodname`), the module name 12 | is ambiguous. Using a `::` separator (e.g. `numpy::ma.MaskedArray.methodname`) 13 | specifies `numpy` as the module name. #} -------------------------------------------------------------------------------- /docs/_templates/autosummary/base.rst: -------------------------------------------------------------------------------- 1 | {% if objtype == 'property' %} 2 | :orphan: 3 | {% endif %} 4 | 5 | {{ name | escape | underline}} 6 | 7 | .. currentmodule:: {{ module }} 8 | 9 | {% if objtype == 'property' %} 10 | property 11 | {% endif %} 12 | 13 | .. auto{{ objtype }}:: {{ fullname | replace("numpy.", "numpy::") }} 14 | 15 | {# In the fullname (e.g. `numpy.ma.MaskedArray.methodname`), the module name 16 | is ambiguous. Using a `::` separator (e.g. `numpy::ma.MaskedArray.methodname`) 17 | specifies `numpy` as the module name. #} -------------------------------------------------------------------------------- /examples/siepic/MZI4/MZI4_main.spi: -------------------------------------------------------------------------------- 1 | * Spice output from KLayout SiEPIC-Tools v0.3.56, 2020-02-12 14:05:51. 2 | 3 | * Optical Network Analyzer: 4 | .ona input_unit=wavelength input_parameter=start_and_stop 5 | + minimum_loss=80 6 | + analysis_type=scattering_data 7 | + multithreading=user_defined number_of_threads=1 8 | + orthogonal_identifier=1 9 | + start=1500.000e-9 10 | + stop=1600.000e-9 11 | + number_of_points=2000 12 | + input(1)=MZI4,ebeam_gc_te1550_detector2 13 | + output=MZI4,ebeam_gc_te1550_laser1 14 | .INCLUDE "./MZI4.spi" 15 | 16 | -------------------------------------------------------------------------------- /tests/data/spice/MZI4/MZI4_main.spi: -------------------------------------------------------------------------------- 1 | * Spice output from KLayout SiEPIC-Tools v0.3.56, 2020-02-12 14:05:51. 2 | 3 | * Optical Network Analyzer: 4 | .ona input_unit=wavelength input_parameter=start_and_stop 5 | + minimum_loss=80 6 | + analysis_type=scattering_data 7 | + multithreading=user_defined number_of_threads=1 8 | + orthogonal_identifier=1 9 | + start=1500.000e-9 10 | + stop=1600.000e-9 11 | + number_of_points=2000 12 | + input(1)=MZI4,ebeam_gc_te1550_detector2 13 | + output=MZI4,ebeam_gc_te1550_laser1 14 | .INCLUDE "./MZI4.spi" 15 | 16 | -------------------------------------------------------------------------------- /.bumpversion.cfg: -------------------------------------------------------------------------------- 1 | [bumpversion] 2 | current_version = 0.7.3 3 | commit = False 4 | tag = False 5 | parse = (?P\d+)\.(?P\d+)\.(?P\d+)((?P[a-z]+)(?P\d+))? 6 | serialize = 7 | {major}.{minor}.{patch}{release}{build} 8 | {major}.{minor}.{patch} 9 | 10 | [bumpversion:part:release] 11 | optional_value = prod 12 | first_value = rc 13 | values = 14 | rc 15 | prod 16 | 17 | [bumpversion:part:build] 18 | 19 | [bumpversion:file:simphony/__init__.py] 20 | 21 | [bumpversion:file:./README.md] 22 | 23 | [bumpversion:file:./pyproject.toml] 24 | -------------------------------------------------------------------------------- /tests/data/spice/EBeam_sequoiap_A_v2/EBeam_sequoiap_A_v2_main.spi: -------------------------------------------------------------------------------- 1 | * Spice output from KLayout SiEPIC-Tools v0.3.62, 2020-04-27 15:49:00. 2 | 3 | * Optical Network Analyzer: 4 | .ona input_unit=wavelength input_parameter=start_and_stop 5 | + minimum_loss=80 6 | + analysis_type=scattering_data 7 | + multithreading=user_defined number_of_threads=1 8 | + orthogonal_identifier=1 9 | + start=1500.000e-9 10 | + stop=1600.000e-9 11 | + number_of_points=3000 12 | + input(1)=EBeam_sequoiap_A_v2,ebeam_gc_te1550$1_detector1 13 | + output=EBeam_sequoiap_A_v2,ebeam_gc_te1550$1_laser 14 | .INCLUDE "./EBeam_sequoiap_A_v2.spi" 15 | 16 | -------------------------------------------------------------------------------- /tests/data/spice/top/top_main.spi: -------------------------------------------------------------------------------- 1 | * Spice output from KLayout SiEPIC-Tools v0.3.62, 2020-04-27 09:58:31. 2 | 3 | * Optical Network Analyzer: 4 | .ona input_unit=wavelength input_parameter=start_and_stop 5 | + minimum_loss=80 6 | + analysis_type=scattering_data 7 | + multithreading=user_defined number_of_threads=1 8 | + orthogonal_identifier=1 9 | + start=1500.000e-9 10 | + stop=1600.000e-9 11 | + number_of_points=2000 12 | + input(1)=top,ebeam_gc_te1550_detector2 13 | + input(2)=top,ebeam_gc_te1550_detector3 14 | + input(3)=top,ebeam_gc_te1550_detector4 15 | + output=top,ebeam_gc_te1550_laser1 16 | .INCLUDE "./top.spi" 17 | 18 | -------------------------------------------------------------------------------- /docs/_toc.yml: -------------------------------------------------------------------------------- 1 | # Table of contents 2 | # Learn more at https://jupyterbook.org/customize/toc.html 3 | 4 | format: jb-book 5 | root: index 6 | parts: 7 | - caption: Tutorials 8 | chapters: 9 | - file: tutorials/intro 10 | - file: tutorials/mzi 11 | - file: tutorials/filters 12 | - file: tutorials/recursive 13 | - file: tutorials/quantum 14 | # - file: tutorials/monte_carlo 15 | # - file: tutorials/layout_aware 16 | - caption: Libraries 17 | chapters: 18 | - file: libs/ideal 19 | - file: libs/siepic 20 | - file: libs/sipann 21 | - caption: API Reference 22 | chapters: 23 | - file: reference 24 | - caption: Development 25 | chapters: 26 | - file: dev/contributing 27 | - file: dev/developing 28 | - file: dev/documenting 29 | -------------------------------------------------------------------------------- /examples/siepic/MZI4/MZI4.lsf: -------------------------------------------------------------------------------- 1 | switchtolayout; 2 | deleteall; 3 | importnetlist('/tmp/tmpplrx_2sz/MZI4_main.spi'); 4 | addproperty("::Root Element::MZI4", "MC_uniformity_thickness", "wafer", "Matrix"); 5 | addproperty("::Root Element::MZI4", "MC_uniformity_width", "wafer", "Matrix"); 6 | addproperty("::Root Element::MZI4", "MC_grid", "wafer", "Number"); 7 | addproperty("::Root Element::MZI4", "MC_resolution_x", "wafer", "Number"); 8 | addproperty("::Root Element::MZI4", "MC_resolution_y", "wafer", "Number"); 9 | addproperty("::Root Element::MZI4", "MC_non_uniform", "wafer", "Number"); 10 | select("::Root Element::MZI4"); 11 | set("run setup script",2); 12 | save('/tmp/tmpplrx_2sz/MZI4.icp'); 13 | run; 14 | t1 = getresult("ONA_1", "input 1/mode 1/gain"); 15 | visualize(t1); 16 | -------------------------------------------------------------------------------- /tests/data/spice/MZI4/MZI4.lsf: -------------------------------------------------------------------------------- 1 | switchtolayout; 2 | deleteall; 3 | importnetlist('/tmp/tmpplrx_2sz/MZI4_main.spi'); 4 | addproperty("::Root Element::MZI4", "MC_uniformity_thickness", "wafer", "Matrix"); 5 | addproperty("::Root Element::MZI4", "MC_uniformity_width", "wafer", "Matrix"); 6 | addproperty("::Root Element::MZI4", "MC_grid", "wafer", "Number"); 7 | addproperty("::Root Element::MZI4", "MC_resolution_x", "wafer", "Number"); 8 | addproperty("::Root Element::MZI4", "MC_resolution_y", "wafer", "Number"); 9 | addproperty("::Root Element::MZI4", "MC_non_uniform", "wafer", "Number"); 10 | select("::Root Element::MZI4"); 11 | set("run setup script",2); 12 | save('/tmp/tmpplrx_2sz/MZI4.icp'); 13 | run; 14 | t1 = getresult("ONA_1", "input 1/mode 1/gain"); 15 | visualize(t1); 16 | -------------------------------------------------------------------------------- /tests/plugins/test_lumerical.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | import pytest 4 | 5 | from simphony.plugins.lumerical import load_sparams 6 | 7 | 8 | @pytest.fixture 9 | def sparam_file_dir(data_dir) -> Path: 10 | return data_dir / "lum_sparam_files" 11 | 12 | 13 | def test_load_sparams1(sparam_file_dir): 14 | print((sparam_file_dir / "Ybranch_Thickness =220 width=500.sparam").exists()) 15 | header, data = load_sparams( 16 | sparam_file_dir / "Ybranch_Thickness =220 width=500.sparam" 17 | ) 18 | 19 | 20 | def test_load_sparams2(sparam_file_dir): 21 | header, data = load_sparams( 22 | sparam_file_dir 23 | / "te_ebeam_dc_halfring_straight_gap=170nm_radius=10um_width=480nm_thickness=230nm_CoupleLength=0um.dat" 24 | ) 25 | -------------------------------------------------------------------------------- /docs/references.bib: -------------------------------------------------------------------------------- 1 | @article{brask2021gaussian, 2 | title={Gaussian states and operations--a quick reference}, 3 | author={Brask, Jonatan Bohr}, 4 | journal={arXiv preprint arXiv:2102.05748}, 5 | year={2021} 6 | } 7 | 8 | @book{gerry_knight_2004, 9 | place={Cambridge}, 10 | title={Introductory Quantum Optics}, 11 | DOI={10.1017/CBO9780511791239}, 12 | publisher={Cambridge University Press}, 13 | author={Gerry, Christopher and Knight, Peter}, 14 | year={2004} 15 | } 16 | 17 | @book{griffiths_introduction_2018, 18 | address = {Cambridge ; New York, NY}, 19 | edition = {Third edition}, 20 | title = {Introduction to quantum mechanics}, 21 | isbn = {978-1-107-18963-8}, 22 | publisher = {Cambridge University Press}, 23 | author = {Griffiths, David J. and Schroeter, Darrell F.}, 24 | year = {2018}, 25 | } -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py3.9, py3.10, py3.11, py3.12 3 | 4 | [testenv] 5 | deps = 6 | numpy 7 | pytest 8 | scipy 9 | 10 | [testenv:py3.11] 11 | 12 | [flake8] 13 | max-line-length = 88 14 | max-complexity = 18 15 | select = B,C,E,F,W,T4,B9 16 | ignore = E203, E266, E501, W503, F403, F401, W605 17 | 18 | exclude = 19 | # No need to traverse our git directory 20 | .git, 21 | # There's no value in checking cache directories 22 | __pycache__, 23 | # The conf file is mostly autogenerated, ignore it 24 | docs/source/conf.py, 25 | # The old directory contains Flake8 2.0 26 | old, 27 | # This contains our built documentation 28 | build, 29 | # This contains builds of flake8 that we don't want to check 30 | dist, 31 | env, 32 | .ipynb_checkpoints, 33 | .tox, 34 | extra, 35 | deprecated -------------------------------------------------------------------------------- /tests/data/spice/top/top.lsf: -------------------------------------------------------------------------------- 1 | switchtolayout; 2 | deleteall; 3 | importnetlist('/tmp/tmpz6njr_pt/top_main.spi'); 4 | addproperty("::Root Element::top", "MC_uniformity_thickness", "wafer", "Matrix"); 5 | addproperty("::Root Element::top", "MC_uniformity_width", "wafer", "Matrix"); 6 | addproperty("::Root Element::top", "MC_grid", "wafer", "Number"); 7 | addproperty("::Root Element::top", "MC_resolution_x", "wafer", "Number"); 8 | addproperty("::Root Element::top", "MC_resolution_y", "wafer", "Number"); 9 | addproperty("::Root Element::top", "MC_non_uniform", "wafer", "Number"); 10 | select("::Root Element::top"); 11 | set("run setup script",2); 12 | save('/tmp/tmpz6njr_pt/top.icp'); 13 | run; 14 | t1 = getresult("ONA_1", "input 1/mode 1/gain"); 15 | t2 = getresult("ONA_1", "input 2/mode 1/gain"); 16 | t3 = getresult("ONA_1", "input 3/mode 1/gain"); 17 | visualize(t1, t2, t3); 18 | -------------------------------------------------------------------------------- /tests/data/spice/EBeam_sequoiap_A_v2/EBeam_sequoiap_A_v2.lsf: -------------------------------------------------------------------------------- 1 | switchtolayout; 2 | deleteall; 3 | importnetlist('/tmp/tmpdpn0am81/EBeam_sequoiap_A_v2_main.spi'); 4 | addproperty("::Root Element::EBeam_sequoiap_A_v2", "MC_uniformity_thickness", "wafer", "Matrix"); 5 | addproperty("::Root Element::EBeam_sequoiap_A_v2", "MC_uniformity_width", "wafer", "Matrix"); 6 | addproperty("::Root Element::EBeam_sequoiap_A_v2", "MC_grid", "wafer", "Number"); 7 | addproperty("::Root Element::EBeam_sequoiap_A_v2", "MC_resolution_x", "wafer", "Number"); 8 | addproperty("::Root Element::EBeam_sequoiap_A_v2", "MC_resolution_y", "wafer", "Number"); 9 | addproperty("::Root Element::EBeam_sequoiap_A_v2", "MC_non_uniform", "wafer", "Number"); 10 | select("::Root Element::EBeam_sequoiap_A_v2"); 11 | set("run setup script",2); 12 | save('/tmp/tmpdpn0am81/EBeam_sequoiap_A_v2.icp'); 13 | run; 14 | t1 = getresult("ONA_1", "input 1/mode 1/gain"); 15 | visualize(t1); 16 | -------------------------------------------------------------------------------- /.readthedocs.yml: -------------------------------------------------------------------------------- 1 | # .readthedocs.yml 2 | # Read the Docs configuration file 3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 4 | 5 | # Required 6 | version: 2 7 | 8 | build: 9 | os: ubuntu-22.04 10 | tools: 11 | python: "3.11" 12 | jobs: 13 | pre_build: 14 | # Generate the Sphinx configuration for this Jupyter Book so it builds. 15 | - "jupyter-book config sphinx docs" 16 | 17 | # Optionally set the version of Python and requirements required to build your docs 18 | python: 19 | install: 20 | - method: pip 21 | path: . 22 | extra_requirements: 23 | - doc 24 | 25 | # Optionally build your docs in additional formats such as PDF 26 | # formats: 27 | # - pdf 28 | # - htmlzip 29 | # - epub 30 | 31 | # Build documentation in the docs/ directory with Sphinx 32 | sphinx: 33 | configuration: docs/conf.py 34 | builder: html 35 | # fail_on_warning: true 36 | -------------------------------------------------------------------------------- /simphony/simulation.py: -------------------------------------------------------------------------------- 1 | """Simulation module.""" 2 | 3 | import jax.numpy as jnp 4 | from jax.typing import ArrayLike 5 | from sax.saxtypes import Model 6 | 7 | 8 | class SimDevice: 9 | """Base class for all source or measure devices.""" 10 | 11 | # TODO: Add bandwidth option to classical 12 | def __init__(self, ports: list) -> None: 13 | self.ports = ports 14 | 15 | 16 | class Simulation: 17 | """Base class for simphony simulations. 18 | 19 | Parameters 20 | ---------- 21 | ckt : Model 22 | A callable SAX model. 23 | wl : ArrayLike 24 | The wavelengths at which to simulate the circuit. 25 | """ 26 | 27 | def __init__(self, ckt: Model, wl: ArrayLike) -> None: 28 | self.ckt = ckt 29 | self.wl = jnp.asarray(wl).reshape(-1) 30 | 31 | def run(self): 32 | """Run the simulation.""" 33 | raise NotImplementedError 34 | 35 | 36 | class SimulationResult: 37 | """Base class for simphony simulation results.""" 38 | -------------------------------------------------------------------------------- /docs/_templates/autosummary/class.rst: -------------------------------------------------------------------------------- 1 | {{ name | escape | underline}} 2 | 3 | .. currentmodule:: {{ module }} 4 | 5 | .. autoclass:: {{ objname }} 6 | 7 | {% block methods %} 8 | {% if methods %} 9 | .. HACK -- the point here is that we don't want this to appear in the output, but the autosummary should still generate the pages. 10 | .. autosummary:: 11 | :toctree: 12 | {% for item in all_methods %} 13 | {%- if not item.startswith('_') or item in ['__call__'] %} 14 | {{ name }}.{{ item }} 15 | {%- endif -%} 16 | {%- endfor %} 17 | {% endif %} 18 | {% endblock %} 19 | 20 | {% block attributes %} 21 | {% if attributes %} 22 | .. HACK -- the point here is that we don't want this to appear in the output, but the autosummary should still generate the pages. 23 | .. autosummary:: 24 | :toctree: 25 | {% for item in all_attributes %} 26 | {%- if not item.startswith('_') %} 27 | {{ name }}.{{ item }} 28 | {%- endif -%} 29 | {%- endfor %} 30 | {% endif %} 31 | {% endblock %} -------------------------------------------------------------------------------- /.github/workflows/build-and-test.yml: -------------------------------------------------------------------------------- 1 | # This workflow will install Python dependencies, run tests and lint with a variety of Python versions 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions 3 | 4 | name: build and test 5 | 6 | on: 7 | pull_request: 8 | branches: 9 | - master 10 | push: 11 | branches: 12 | - master 13 | 14 | jobs: 15 | build: 16 | runs-on: ${{ matrix.os }} 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Set up Python 20 | uses: actions/setup-python@v4 21 | with: 22 | python-version: ${{ matrix.python-version }} 23 | - name: Install dependencies 24 | run: | 25 | python -m pip install --upgrade pip wheel 26 | pip install ".[dev]" 27 | - name: Lint with flake8 28 | run: | 29 | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics 30 | flake8 . --count --ignore=E501,E741,W503,W605 --max-complexity=12 --statistics 31 | - name: Run Tox 32 | run: tox -e py 33 | strategy: 34 | matrix: 35 | os: [ubuntu-latest, windows-latest, macos-latest] 36 | python-version: ['3.9', '3.10', '3.11', '3.12'] 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019-2020 Simphony Project Contributors and others (see AUTHORS.txt) 4 | 5 | The resources, libraries, and some source files under other terms (see NOTICE.txt). 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. -------------------------------------------------------------------------------- /examples/siepic/siepic.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Copyright © Simphony Project Contributors 3 | # Licensed under the terms of the MIT License 4 | # (see simphony/__init__.py for details) 5 | # 6 | # This file is deprecated and will not run with the latest version of simphony. 7 | # It is retained for legacy purposes only. 8 | 9 | import os 10 | 11 | import matplotlib.pyplot as plt 12 | 13 | from simphony.formatters import CircuitSiEPICFormatter 14 | from simphony.layout import Circuit 15 | 16 | # The siepic plugin only needs the path to the main spice file. 17 | filename = os.path.join(os.path.dirname(__file__), "MZI4", "MZI4_main.spi") 18 | 19 | # Loading the main file includes any other files linked to it internally. 20 | circuit = Circuit.from_file(filename, formatter=CircuitSiEPICFormatter()) 21 | 22 | # We can see the connections of the circuit by printing it. 23 | print(circuit) 24 | 25 | # We can see what the external pins of the circuit are. 26 | print([pin.name for pin in circuit.pins]) 27 | 28 | # The SPI file defines an analyzer (SweepSimulator) that we can access to run 29 | # the simulation. 30 | simulator = circuit[-1] 31 | wl, t = simulator.simulate() 32 | plt.plot(wl, t) 33 | plt.title("MZI") 34 | plt.xlabel("Wavelength (m)") 35 | plt.ylabel("Transmission") 36 | plt.tight_layout() 37 | plt.show() 38 | -------------------------------------------------------------------------------- /scripts/create_changelog_entry.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """This script will create a changelog entry for the specified version. Usually 4 | called by the makefile when creating a new version. 5 | 6 | Usage: 7 | python scripts/create_changelog_entry.py VERSION 8 | 9 | Example: 10 | python scripts/create_changelog_entry.py 0.7.0 11 | """ 12 | 13 | import sys 14 | from pathlib import Path 15 | 16 | from packaging.version import parse 17 | 18 | # Get first command line argument 19 | version = parse(sys.argv[1]) 20 | 21 | template = f"""--- 22 | 23 | ## [{str(version)}](https://github.com/BYUCamachoLab/simphony/tree/v{str(version)}) - YYYY-MM-DD 24 | 25 | ### Added 26 | - N/A 27 | 28 | ### Changed 29 | - N/A 30 | 31 | ### Deprecated 32 | - N/A 33 | 34 | ### Removed 35 | - N/A 36 | 37 | ### Fixed 38 | - N/A 39 | 40 | --- 41 | """ 42 | 43 | CHANGELOG = Path(__file__).parent.parent / "CHANGELOG.md" 44 | with CHANGELOG.open() as f: 45 | text = f.read() 46 | 47 | # Split changelog by horizontal rule 48 | entries = text.split("\n---\n") 49 | entries = [entry.strip() for entry in entries] 50 | 51 | # Insert the template at the top of the changelog 52 | with open("temp.md", "w", encoding="utf8") as f: 53 | f.write(f"{entries[0]}\n\n") 54 | f.write(f"{template}\n") 55 | f.write("\n\n---\n\n".join(entries[1:])) 56 | f.write("\n") 57 | 58 | print( 59 | f"Created entry for version {str(version)}. Don't forget to update the date in the changelog entry!" 60 | ) 61 | -------------------------------------------------------------------------------- /tests/libraries/ideal/test_ideal_models.py: -------------------------------------------------------------------------------- 1 | from simphony.libraries.ideal import coupler, waveguide 2 | 3 | 4 | class TestCoupler: 5 | def test_instantiable(self): 6 | coupler() 7 | coupler(coupling=0.5) 8 | coupler(coupling=0.5, loss=0.1) 9 | coupler(coupling=0.5, loss=0.1, phi=0.1) 10 | 11 | # def test_s_params(self, std_wl_um): 12 | # c = coupler(coupling=0.5, loss=0.1) 13 | # s = c.s_params(std_wl_um) 14 | # c = coupler(coupling=0.5, loss=(0.1, 0.1, 0.1, 0.1)) 15 | # s = c.s_params(std_wl_um) 16 | # c = coupler(coupling=0.5, loss=0.1, phi=0.1) 17 | # s = c.s_params(std_wl_um) 18 | 19 | 20 | class Testwaveguide: 21 | def test_instantiable(self): 22 | waveguide(length=100) 23 | waveguide(length=100, loss=0.1) 24 | waveguide(length=100, neff=2.3) 25 | waveguide(length=100, ng=3.4) 26 | waveguide(length=100, neff=2.3, ng=3.4) 27 | waveguide(length=100, neff=2.3, ng=3.4, loss=0.1) 28 | waveguide(length=100, wl0=1.35, neff=2.3, ng=3.4, loss=0.1) 29 | 30 | # def test_s_params(self, std_wl_um): 31 | # w = waveguide(length=100) 32 | # s = w.s_params(std_wl_um) 33 | # w = waveguide(length=100, loss=0.1) 34 | # s = w.s_params(std_wl_um) 35 | # w = waveguide(length=100, neff=2.3) 36 | # s = w.s_params(std_wl_um) 37 | # w = waveguide(length=100, ng=3.4) 38 | # s = w.s_params(std_wl_um) 39 | # w = waveguide(length=100, wl0=1.35) 40 | # s = w.s_params(std_wl_um) 41 | -------------------------------------------------------------------------------- /docs/dev/documenting.md: -------------------------------------------------------------------------------- 1 | (documenting)= 2 | # Documenting 3 | 4 | This is a guide on how to build the documentation web pages (like the ones you are reading right now) from the source 5 | available on the Simphony repository. This is useful when writing new documentation, so that you can see how your 6 | documentation pages will look. 7 | 8 | The docs pages are written mostly in Markdown. Read the [syntax guide on 9 | MyST](https://myst-parser.readthedocs.io/en/latest/) for more. The API documentation is auto-generated from python 10 | docstrings found inline with Simphony code, using the [numpydoc](https://numpydoc.readthedocs.io/en/latest/format.html) 11 | format. 12 | 13 | Since the docs require the Simphony code to build, you will first need to set up a Simphony development environment, as 14 | described in the "Setting Up the Environment" section of [](developing.md). 15 | 16 | We use Jupyter Book and Sphinx for generating documentation pages. By following the previously mentioned steps to set up 17 | your Simphony environment, these packages are already installed. 18 | 19 | Once Sphinx is installed, you can use the Makefile to build the docs: 20 | 21 | ```bash 22 | make doc 23 | ``` 24 | 25 | This will build the documentation pages at ``docs/build/html``. Open up any of the HTML pages in that folder to view the 26 | documentation on your local machine, or use the Makefile target: 27 | 28 | ```bash 29 | make serve 30 | ``` 31 | 32 | 35 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/pre-commit/pre-commit-hooks 3 | rev: v2.5.0 4 | hooks: 5 | - id: check-yaml 6 | - id: check-json 7 | - id: check-merge-conflict 8 | - id: mixed-line-ending 9 | - id: end-of-file-fixer 10 | types: [python] 11 | - id: trailing-whitespace 12 | types: [python] 13 | 14 | - repo: https://github.com/PyCQA/isort 15 | rev: 5.12.0 16 | hooks: 17 | - id: isort 18 | name: isort (python) 19 | files: simphony/.* 20 | 21 | - repo: https://github.com/PyCQA/autoflake 22 | rev: v2.2.1 23 | hooks: 24 | - id: autoflake 25 | args: [--remove-all-unused-imports, --in-place] 26 | 27 | - repo: https://github.com/psf/black 28 | rev: 23.3.0 29 | hooks: 30 | - id: black 31 | 32 | # - repo: https://github.com/PyCQA/flake8 33 | # rev: 6.0.0 34 | # hooks: 35 | # - id: flake8 36 | 37 | # - repo: https://github.com/pre-commit/mirrors-mypy 38 | # rev: v1.3.0 39 | # hooks: 40 | # - id: mypy 41 | # exclude: ^(docs/) 42 | 43 | - repo: https://github.com/adamchainz/blacken-docs 44 | rev: 1.13.0 45 | hooks: 46 | - id: blacken-docs 47 | additional_dependencies: 48 | - black==23.3.0 49 | 50 | - repo: https://github.com/PyCQA/docformatter 51 | rev: v1.6.5 52 | hooks: 53 | - id: docformatter 54 | args: [--in-place] 55 | 56 | # - repo: https://github.com/kynan/nbstripout 57 | # rev: 0.6.1 58 | # hooks: 59 | # - id: nbstripout 60 | # files: ".ipynb" 61 | -------------------------------------------------------------------------------- /docs/_templates/autosummary/module.rst: -------------------------------------------------------------------------------- 1 | {# This file is almost the same as the default, but adds :toctree: to the autosummary directives. 2 | The original can be found at `sphinx/ext/autosummary/templates/autosummary/module.rst`. #} 3 | 4 | {{ name | escape | underline}} 5 | 6 | .. automodule:: {{ fullname }} 7 | 8 | {% block attributes %} 9 | {% if attributes %} 10 | .. rubric:: Module Attributes 11 | 12 | .. autosummary:: 13 | :toctree: 14 | {% for item in attributes %} 15 | {{ item }} 16 | {%- endfor %} 17 | {% endif %} 18 | {% endblock %} 19 | 20 | {% block functions %} 21 | {% if functions %} 22 | .. rubric:: Functions 23 | 24 | .. autosummary:: 25 | :toctree: 26 | {% for item in functions %} 27 | {{ item }} 28 | {%- endfor %} 29 | {% endif %} 30 | {% endblock %} 31 | 32 | {% block classes %} 33 | {% if classes %} 34 | .. rubric:: Classes 35 | 36 | .. autosummary:: 37 | :toctree: 38 | {% for item in classes %} 39 | {{ item }} 40 | {%- endfor %} 41 | {% endif %} 42 | {% endblock %} 43 | 44 | {% block exceptions %} 45 | {% if exceptions %} 46 | .. rubric:: {{ _('Exceptions') }} 47 | 48 | .. autosummary:: 49 | {% for item in exceptions %} 50 | {{ item }} 51 | {%- endfor %} 52 | {% endif %} 53 | {% endblock %} 54 | 55 | {% block modules %} 56 | {% if modules %} 57 | .. rubric:: Modules 58 | 59 | .. autosummary:: 60 | :toctree: 61 | :recursive: 62 | {% for item in modules %} 63 | {{ item }} 64 | {%- endfor %} 65 | {% endif %} 66 | {% endblock %} -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: release 2 | 3 | on: 4 | push: 5 | # Sequence of patterns matched against refs/tags 6 | tags: 7 | - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 8 | 9 | jobs: 10 | build: 11 | name: Create Release 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout code 15 | uses: actions/checkout@v2 16 | - name: Set up Python 17 | uses: actions/setup-python@v2 18 | with: 19 | python-version: '3.x' 20 | - name: Install dependencies 21 | run: | 22 | python -m pip install --upgrade pip wheel 23 | pip install .[dev] 24 | - name: Build 25 | run: | 26 | python -m build 27 | - name: Get version number 28 | id: get_version 29 | run: echo "VERSION=$(python3 -c "import simphony; print(simphony.__version__)")" >> $GITHUB_ENV 30 | - name: Load Release text 31 | run: | 32 | { 33 | echo 'BODY<> "$GITHUB_ENV" 37 | - name: Publish to PyPI 38 | uses: pypa/gh-action-pypi-publish@v1.13.0 39 | with: 40 | user: __token__ 41 | password: ${{ secrets.PYPI_PASSWORD }} 42 | - name: Create Release 43 | id: create_release 44 | uses: actions/create-release@v1 45 | env: 46 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token 47 | with: 48 | tag_name: ${{ github.ref }} 49 | release_name: Simphony ${{ env.VERSION }} 50 | body: ${{ env.BODY }} 51 | draft: false 52 | prerelease: false 53 | -------------------------------------------------------------------------------- /tests/data/spice/EBeam_sequoiap_A_v2/EBeam_sequoiap_A_v2.spi: -------------------------------------------------------------------------------- 1 | * Spice output from KLayout SiEPIC-Tools v0.3.62, 2020-04-27 15:49:00. 2 | 3 | .subckt EBeam_sequoiap_A_v2 ebeam_gc_te1550$1_laser ebeam_gc_te1550$1_detector1 4 | .param MC_uniformity_width=0 5 | .param MC_uniformity_thickness=0 6 | .param MC_resolution_x=100 7 | .param MC_resolution_y=100 8 | .param MC_grid=10e-6 9 | .param MC_non_uniform=99 10 | ebeam_y_1550_67 N$80 N$81 N$82 ebeam_y_1550 library="Design kits/ebeam" lay_x=100.77000000000001E-6 lay_y=138.24E-6 sch_x=8.339586207E0 sch_y=11.440551724E0 11 | ebeam_gc_te1550_68 ebeam_gc_te1550$1_laser N$80 ebeam_gc_te1550 library="Design kits/ebeam" lay_x=76.87E-6 lay_y=138.24E-6 sch_x=6.361655172E0 sch_y=11.440551724E0 12 | ebeam_gc_te1550_69 ebeam_gc_te1550$1_detector1 N$83 ebeam_gc_te1550 library="Design kits/ebeam" lay_x=76.87E-6 lay_y=11.240000000000002E-6 sch_x=6.361655172E0 sch_y=930.206897E-3 13 | ebeam_y_1550_70 N$83 N$85 N$84 ebeam_y_1550 library="Design kits/ebeam" lay_x=100.77000000000001E-6 lay_y=11.240000000000002E-6 sch_x=8.339586207E0 sch_y=930.206897E-3 14 | ebeam_wg_integral_1550_72 N$81 N$84 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=189.995u wg_width=0.500u points="[[108.17,140.99],[138.469,140.99],[138.469,8.49],[108.17,8.49]]" radius=5.0 lay_x=123.69400000000002E-6 lay_y=74.74000000000001E-6 sch_x=10.236744828E0 sch_y=6.18537931E0 15 | ebeam_wg_integral_1550_83 N$82 N$85 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=149.995u wg_width=0.500u points="[[104.92,389.16],[120.719,389.16],[120.719,267.66],[104.92,267.66]]" radius=5.0 lay_x=116.444E-6 lay_y=74.74000000000001E-6 sch_x=9.636744828E0 sch_y=6.18537931E0 16 | .ends EBeam_sequoiap_A_v2 17 | 18 | EBeam_sequoiap_A_v2 ebeam_gc_te1550$1_laser ebeam_gc_te1550$1_detector1 EBeam_sequoiap_A_v2 sch_x=-1 sch_y=-1 19 | 20 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/te_ebeam_dc_halfring_straight_gap=50nm_radius=3um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | te_ebeam_dc_halfring_straight_gap=70nm_radius=3um_width=480nm_thickness=210nm_CoupleLength=0um.dat 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5.2e-07 16 | 17 | 18 | te_ebeam_dc_halfring_straight_gap=30nm_radius=3um_width=520nm_thickness=210nm_CoupleLength=0um.dat 19 | 20 | 21 | 22 | 23 | 2.3e-07 24 | 4.8e-07 25 | 26 | 27 | te_ebeam_dc_halfring_straight_gap=70nm_radius=3um_width=480nm_thickness=230nm_CoupleLength=0um.dat 28 | 29 | 30 | 31 | 32 | 2.3e-07 33 | 5.2e-07 34 | 35 | 36 | te_ebeam_dc_halfring_straight_gap=30nm_radius=3um_width=520nm_thickness=230nm_CoupleLength=0um.dat 37 | 38 | 39 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/te_ebeam_dc_halfring_straight_gap=50nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | te_ebeam_dc_halfring_straight_gap=70nm_radius=5um_width=480nm_thickness=210nm_CoupleLength=0um.dat 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5.2e-07 16 | 17 | 18 | te_ebeam_dc_halfring_straight_gap=30nm_radius=5um_width=520nm_thickness=210nm_CoupleLength=0um.dat 19 | 20 | 21 | 22 | 23 | 2.3e-07 24 | 4.8e-07 25 | 26 | 27 | te_ebeam_dc_halfring_straight_gap=70nm_radius=5um_width=480nm_thickness=230nm_CoupleLength=0um.dat 28 | 29 | 30 | 31 | 32 | 2.3e-07 33 | 5.2e-07 34 | 35 | 36 | te_ebeam_dc_halfring_straight_gap=30nm_radius=5um_width=520nm_thickness=230nm_CoupleLength=0um.dat 37 | 38 | 39 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/te_ebeam_dc_halfring_straight_gap=60nm_radius=3um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | te_ebeam_dc_halfring_straight_gap=80nm_radius=3um_width=480nm_thickness=210nm_CoupleLength=0um.dat 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5.2e-07 16 | 17 | 18 | te_ebeam_dc_halfring_straight_gap=40nm_radius=3um_width=520nm_thickness=210nm_CoupleLength=0um.dat 19 | 20 | 21 | 22 | 23 | 2.3e-07 24 | 4.8e-07 25 | 26 | 27 | te_ebeam_dc_halfring_straight_gap=80nm_radius=3um_width=480nm_thickness=230nm_CoupleLength=0um.dat 28 | 29 | 30 | 31 | 32 | 2.3e-07 33 | 5.2e-07 34 | 35 | 36 | te_ebeam_dc_halfring_straight_gap=40nm_radius=3um_width=520nm_thickness=230nm_CoupleLength=0um.dat 37 | 38 | 39 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/te_ebeam_dc_halfring_straight_gap=60nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | te_ebeam_dc_halfring_straight_gap=80nm_radius=5um_width=480nm_thickness=210nm_CoupleLength=0um.dat 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5.2e-07 16 | 17 | 18 | te_ebeam_dc_halfring_straight_gap=40nm_radius=5um_width=520nm_thickness=210nm_CoupleLength=0um.dat 19 | 20 | 21 | 22 | 23 | 2.3e-07 24 | 4.8e-07 25 | 26 | 27 | te_ebeam_dc_halfring_straight_gap=80nm_radius=5um_width=480nm_thickness=230nm_CoupleLength=0um.dat 28 | 29 | 30 | 31 | 32 | 2.3e-07 33 | 5.2e-07 34 | 35 | 36 | te_ebeam_dc_halfring_straight_gap=40nm_radius=5um_width=520nm_thickness=230nm_CoupleLength=0um.dat 37 | 38 | 39 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/te_ebeam_dc_halfring_straight_gap=100nm_radius=3um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | te_ebeam_dc_halfring_straight_gap=120nm_radius=3um_width=480nm_thickness=210nm_CoupleLength=0um.dat 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5.2e-07 16 | 17 | 18 | te_ebeam_dc_halfring_straight_gap=80nm_radius=3um_width=520nm_thickness=210nm_CoupleLength=0um.dat 19 | 20 | 21 | 22 | 23 | 2.3e-07 24 | 4.8e-07 25 | 26 | 27 | te_ebeam_dc_halfring_straight_gap=120nm_radius=3um_width=480nm_thickness=230nm_CoupleLength=0um.dat 28 | 29 | 30 | 31 | 32 | 2.3e-07 33 | 5.2e-07 34 | 35 | 36 | te_ebeam_dc_halfring_straight_gap=80nm_radius=3um_width=520nm_thickness=230nm_CoupleLength=0um.dat 37 | 38 | 39 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/te_ebeam_dc_halfring_straight_gap=100nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | te_ebeam_dc_halfring_straight_gap=120nm_radius=5um_width=480nm_thickness=210nm_CoupleLength=0um.dat 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5.2e-07 16 | 17 | 18 | te_ebeam_dc_halfring_straight_gap=80nm_radius=5um_width=520nm_thickness=210nm_CoupleLength=0um.dat 19 | 20 | 21 | 22 | 23 | 2.3e-07 24 | 4.8e-07 25 | 26 | 27 | te_ebeam_dc_halfring_straight_gap=120nm_radius=5um_width=480nm_thickness=230nm_CoupleLength=0um.dat 28 | 29 | 30 | 31 | 32 | 2.3e-07 33 | 5.2e-07 34 | 35 | 36 | te_ebeam_dc_halfring_straight_gap=80nm_radius=5um_width=520nm_thickness=230nm_CoupleLength=0um.dat 37 | 38 | 39 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/te_ebeam_dc_halfring_straight_gap=80nm_radius=3um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | te_ebeam_dc_halfring_straight_gap=100nm_radius=3um_width=480nm_thickness=210nm_CoupleLength=0um.dat 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5.2e-07 16 | 17 | 18 | te_ebeam_dc_halfring_straight_gap=60nm_radius=3um_width=520nm_thickness=210nm_CoupleLength=0um.dat 19 | 20 | 21 | 22 | 23 | 2.3e-07 24 | 4.8e-07 25 | 26 | 27 | te_ebeam_dc_halfring_straight_gap=100nm_radius=3um_width=480nm_thickness=230nm_CoupleLength=0um.dat 28 | 29 | 30 | 31 | 32 | 2.3e-07 33 | 5.2e-07 34 | 35 | 36 | te_ebeam_dc_halfring_straight_gap=60nm_radius=3um_width=520nm_thickness=230nm_CoupleLength=0um.dat 37 | 38 | 39 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/tm_ebeam_dc_halfring_straight_gap=300nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | tm_ebeam_dc_halfring_straight_gap=320nm_radius=5um_width=480nm_thickness=210nm_CoupleLength=0um.dat 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5.2e-07 16 | 17 | 18 | tm_ebeam_dc_halfring_straight_gap=280nm_radius=5um_width=520nm_thickness=210nm_CoupleLength=0um.dat 19 | 20 | 21 | 22 | 23 | 2.3e-07 24 | 4.8e-07 25 | 26 | 27 | tm_ebeam_dc_halfring_straight_gap=320nm_radius=5um_width=480nm_thickness=230nm_CoupleLength=0um.dat 28 | 29 | 30 | 31 | 32 | 2.3e-07 33 | 5.2e-07 34 | 35 | 36 | tm_ebeam_dc_halfring_straight_gap=280nm_radius=5um_width=520nm_thickness=230nm_CoupleLength=0um.dat 37 | 38 | 39 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/te_ebeam_dc_halfring_straight_gap=100nm_radius=10um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | te_ebeam_dc_halfring_straight_gap=120nm_radius=10um_width=480nm_thickness=210nm_CoupleLength=0um.dat 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5.2e-07 16 | 17 | 18 | te_ebeam_dc_halfring_straight_gap=80nm_radius=10um_width=520nm_thickness=210nm_CoupleLength=0um.dat 19 | 20 | 21 | 22 | 23 | 2.3e-07 24 | 4.8e-07 25 | 26 | 27 | te_ebeam_dc_halfring_straight_gap=120nm_radius=10um_width=480nm_thickness=230nm_CoupleLength=0um.dat 28 | 29 | 30 | 31 | 32 | 2.3e-07 33 | 5.2e-07 34 | 35 | 36 | te_ebeam_dc_halfring_straight_gap=80nm_radius=10um_width=520nm_thickness=230nm_CoupleLength=0um.dat 37 | 38 | 39 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/te_ebeam_dc_halfring_straight_gap=150nm_radius=10um_width=500nm_thickness=220nm_CoupleLength=0um_mc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | te_ebeam_dc_halfring_straight_gap=170nm_radius=10um_width=480nm_thickness=210nm_CoupleLength=0um.dat 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5.2e-07 16 | 17 | 18 | te_ebeam_dc_halfring_straight_gap=130nm_radius=10um_width=520nm_thickness=210nm_CoupleLength=0um.dat 19 | 20 | 21 | 22 | 23 | 2.3e-07 24 | 4.8e-07 25 | 26 | 27 | te_ebeam_dc_halfring_straight_gap=170nm_radius=10um_width=480nm_thickness=230nm_CoupleLength=0um.dat 28 | 29 | 30 | 31 | 32 | 2.3e-07 33 | 5.2e-07 34 | 35 | 36 | te_ebeam_dc_halfring_straight_gap=130nm_radius=10um_width=520nm_thickness=230nm_CoupleLength=0um.dat 37 | 38 | 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/build/ 68 | docs/_build/ 69 | docs/api/ 70 | 71 | # PyBuilder 72 | target/ 73 | 74 | # Jupyter Notebook 75 | .ipynb_checkpoints 76 | 77 | # pyenv 78 | .python-version 79 | 80 | # celery beat schedule file 81 | celerybeat-schedule 82 | 83 | # SageMath parsed files 84 | *.sage.py 85 | 86 | # Environments 87 | .env 88 | .venv 89 | env/ 90 | venv/ 91 | ENV/ 92 | env.bak/ 93 | venv.bak/ 94 | nojax/ 95 | py38/ 96 | 97 | # Spyder project settings 98 | .spyderproject 99 | .spyproject 100 | 101 | # Rope project settings 102 | .ropeproject 103 | 104 | # mkdocs documentation 105 | /site 106 | 107 | # mypy 108 | .mypy_cache/ 109 | 110 | # VSCode 111 | .vscode 112 | 113 | # Mac users 114 | .DS_Store 115 | -------------------------------------------------------------------------------- /examples/siepic/MZI4/MZI4.spi: -------------------------------------------------------------------------------- 1 | * Spice output from KLayout SiEPIC-Tools v0.3.56, 2020-02-12 14:05:51. 2 | 3 | .subckt MZI4 ebeam_gc_te1550_detector2 ebeam_gc_te1550_laser1 4 | .param MC_uniformity_width=0 5 | .param MC_uniformity_thickness=0 6 | .param MC_resolution_x=100 7 | .param MC_resolution_y=100 8 | .param MC_grid=10e-6 9 | .param MC_non_uniform=99 10 | ebeam_y_1550_0 N$0 N$2 N$1 ebeam_y_1550 library="Design kits/ebeam" lay_x=7.4E-6 lay_y=127.0E-6 sch_x=478.534829E-3 sch_y=8.212692343E0 11 | ebeam_gc_te1550_1 ebeam_gc_te1550_detector2 N$0 ebeam_gc_te1550 library="Design kits/ebeam" lay_x=-16.500000000000004E-6 lay_y=127.0E-6 sch_x=-1.067003336E0 sch_y=8.212692343E0 12 | ebeam_gc_te1550_2 ebeam_gc_te1550_laser1 N$3 ebeam_gc_te1550 library="Design kits/ebeam" lay_x=-16.500000000000004E-6 lay_y=254.0E-6 sch_x=-1.067003336E0 sch_y=16.425384686E0 13 | ebeam_y_1550_3 N$6 N$5 N$4 ebeam_y_1550 library="Design kits/ebeam" lay_x=89.93E-6 lay_y=127.0E-6 sch_x=5.815491515E0 sch_y=8.212692343E0 sch_f=true 14 | ebeam_wg_integral_1550_4 N$1 N$4 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=67.730u wg_width=0.500u points="[[14.8,124.25],[82.53,124.25]]" radius=5.0 lay_x=48.665000000000006E-6 lay_y=124.25000000000001E-6 sch_x=3.147013172E0 sch_y=8.034858453E0 15 | ebeam_wg_integral_1550_5 N$2 N$5 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=297.394u wg_width=0.500u points="[[14.8,129.75],[28.64,129.75],[28.64,247.68],[75.36,247.68],[75.36,129.75],[82.53,129.75]]" radius=5.0 lay_x=48.665000000000006E-6 lay_y=188.715E-6 sch_x=3.147013172E0 sch_y=12.203608153E0 16 | ebeam_wg_integral_1550_6 N$6 N$3 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=256.152u wg_width=0.500u points="[[97.33,127.0],[114.79,127.0],[114.79,254.0],[0.0,254.0]]" radius=5.0 lay_x=57.77E-6 lay_y=190.5E-6 sch_x=3.735805013E0 sch_y=12.319038514E0 17 | .ends MZI4 18 | 19 | MZI4 ebeam_gc_te1550_detector2 ebeam_gc_te1550_laser1 MZI4 sch_x=-1 sch_y=-1 20 | 21 | -------------------------------------------------------------------------------- /tests/data/spice/MZI4/MZI4.spi: -------------------------------------------------------------------------------- 1 | * Spice output from KLayout SiEPIC-Tools v0.3.56, 2020-02-12 14:05:51. 2 | 3 | .subckt MZI4 ebeam_gc_te1550_detector2 ebeam_gc_te1550_laser1 4 | .param MC_uniformity_width=0 5 | .param MC_uniformity_thickness=0 6 | .param MC_resolution_x=100 7 | .param MC_resolution_y=100 8 | .param MC_grid=10e-6 9 | .param MC_non_uniform=99 10 | ebeam_y_1550_0 N$0 N$2 N$1 ebeam_y_1550 library="Design kits/ebeam" lay_x=7.4E-6 lay_y=127.0E-6 sch_x=478.534829E-3 sch_y=8.212692343E0 11 | ebeam_gc_te1550_1 ebeam_gc_te1550_detector2 N$0 ebeam_gc_te1550 library="Design kits/ebeam" lay_x=-16.500000000000004E-6 lay_y=127.0E-6 sch_x=-1.067003336E0 sch_y=8.212692343E0 12 | ebeam_gc_te1550_2 ebeam_gc_te1550_laser1 N$3 ebeam_gc_te1550 library="Design kits/ebeam" lay_x=-16.500000000000004E-6 lay_y=254.0E-6 sch_x=-1.067003336E0 sch_y=16.425384686E0 13 | ebeam_y_1550_3 N$6 N$5 N$4 ebeam_y_1550 library="Design kits/ebeam" lay_x=89.93E-6 lay_y=127.0E-6 sch_x=5.815491515E0 sch_y=8.212692343E0 sch_f=true 14 | ebeam_wg_integral_1550_4 N$1 N$4 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=67.730u wg_width=0.500u points="[[14.8,124.25],[82.53,124.25]]" radius=5.0 lay_x=48.665000000000006E-6 lay_y=124.25000000000001E-6 sch_x=3.147013172E0 sch_y=8.034858453E0 15 | ebeam_wg_integral_1550_5 N$2 N$5 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=297.394u wg_width=0.500u points="[[14.8,129.75],[28.64,129.75],[28.64,247.68],[75.36,247.68],[75.36,129.75],[82.53,129.75]]" radius=5.0 lay_x=48.665000000000006E-6 lay_y=188.715E-6 sch_x=3.147013172E0 sch_y=12.203608153E0 16 | ebeam_wg_integral_1550_6 N$6 N$3 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=256.152u wg_width=0.500u points="[[97.33,127.0],[114.79,127.0],[114.79,254.0],[0.0,254.0]]" radius=5.0 lay_x=57.77E-6 lay_y=190.5E-6 sch_x=3.735805013E0 sch_y=12.319038514E0 17 | .ends MZI4 18 | 19 | MZI4 ebeam_gc_te1550_detector2 ebeam_gc_te1550_laser1 MZI4 sch_x=-1 sch_y=-1 20 | 21 | -------------------------------------------------------------------------------- /docs/dev/contributing.md: -------------------------------------------------------------------------------- 1 | (contributing)= 2 | # Contributing to simphony 3 | 4 | Simphony is still a growing project, and we appreciate the work of all current and aspiring volunteers! This page will 5 | describe some of the ways a volunteer can contribute. 6 | 7 | 8 | ## Bug reporting and feedback 9 | 10 | Reporting bugs and giving feedback is one of the most accessible ways to help the project, and more of this kind of help 11 | is always welcome. If you ever encounter what you believe to be a bug while using Simphony, or if you identify an error 12 | in the documentation on this site, look to the [Github issues](https://github.com/BYUCamachoLab/simphony/issues) for how 13 | to report. 14 | 15 | The issues page can also be used to suggest features that you'd like to see added to Simphony. Submit an issue with the 16 | correct tag, and plenty of details on how you envision the feature, and we may be able to implement it. 17 | 18 | 19 | ## Maintaining and developing 20 | 21 | If you'd like to work directly in the code of Simphony--and you've identified an area in the codebase that needs 22 | updates, improvements, or additions--we'd suggest you create a fork with your changes and submit a pull request on 23 | Github. The project contributors will review the pull request as soon as possible, and will work with you to get it 24 | merged. For a detailed walkthrough of the development process in Simphony, see [](developing.md). 25 | 26 | 27 | ## Documentation 28 | 29 | If you've identified problems in the documentation here, and you'd prefer write new documentation or tutorials yourself 30 | rather than submit an issue, we've also provided a walkthrough on how to build and develop the docs, separately from the 31 | rest of Simphony development. See [](developing.md). 32 | 33 | Also, spread the word about Simphony! All kinds of publicity are welcome, from social media to blog posts. And finally, 34 | thank you for your excitement about the project! We are glad you've found Simphony as a helpful tool, and for your 35 | eagerness to contribute to the project. 36 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_halfring_straight/tm_ebeam_dc_halfring_straight.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 0 6 | 3e-07 7 | 5e-06 8 | 2.2e-07 9 | 5e-07 10 | 11 | 12 | tm_ebeam_dc_halfring_straight_gap=300nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=0um.dat 13 | 14 | 15 | 16 | 17 | 1e-06 18 | 1e-07 19 | 5e-06 20 | 2.2e-07 21 | 5e-07 22 | 23 | 24 | ebeam_dc_halfring_straight_gap=100nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=1um.dat 25 | 26 | 27 | 28 | 29 | 0 30 | 3e-07 31 | 5e-06 32 | 2.2e-07 33 | 5e-07 34 | 35 | 36 | tm_ebeam_dc_halfring_straight_gap=300nm_radius=5um_width=500nm_thickness=220nm_CoupleLength=0um.dat 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /simphony/__init__.py: -------------------------------------------------------------------------------- 1 | # MIT License 2 | # ----------- 3 | # 4 | # Copyright (c) 2019-2020 Simphony Project Contributors and others (see AUTHORS.txt) 5 | # 6 | # The resources, libraries, and some source files under other terms (see NOTICE.txt). 7 | # 8 | # Permission is hereby granted, free of charge, to any person obtaining a copy 9 | # of this software and associated documentation files (the "Software"), to deal 10 | # in the Software without restriction, including without limitation the rights 11 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | # copies of the Software, and to permit persons to whom the Software is 13 | # furnished to do so, subject to the following conditions: 14 | # 15 | # The above copyright notice and this permission notice shall be included in all 16 | # copies or substantial portions of the Software. 17 | # 18 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | # SOFTWARE. 25 | """ 26 | simphony 27 | ======== 28 | 29 | A simulator and model library for classical and quantum photonic circuits. 30 | """ 31 | 32 | import platform 33 | import sys 34 | 35 | # from .models_old import Model # noqa: F401 36 | 37 | if sys.version_info < (3, 9, 0): 38 | raise Exception( 39 | "Simphony requires Python 3.9+ (version " 40 | + platform.python_version() 41 | + " detected)." 42 | ) 43 | 44 | __version__ = "0.7.3" 45 | __license__ = "MIT" 46 | __project_url__ = "https://github.com/BYUCamachoLab/simphony" 47 | __forum_url__ = "https://github.com/BYUCamachoLab/simphony/issues" 48 | __trouble_url__ = __project_url__ + "/wiki/Troubleshooting-Guide" 49 | __website_url__ = "https://camacholab.byu.edu/" 50 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/PCell_parameters.xml: -------------------------------------------------------------------------------- 1 | WaveguideWaveguideebeam_wg_integral_155000.20.55.01WaveguideWaveguideebeam_wg_integral_155070.20.55.01WaveguideWaveguideebeam_wg_integral_155090.20.55.01WaveguideWaveguideebeam_wg_integral_1550100.20.55.01WaveguideWaveguideebeam_wg_integral_1550120.20.55.01contra_directional_couplercontra_directional_couplercontra_directional_coupler130.0480.3180.0240.440.50.10.5612.7100001WaveguideWaveguideebeam_wg_integral_1550140.20.55.01contra_directional_couplercontra_directional_couplercontra_directional_coupler150.0960.3180.0480.440.50.20.5610.0100001 -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | help: 2 | @echo 'make ' 3 | @echo ' venv: Create a virtual environment' 4 | @echo ' install: Install the package in editable mode with all dependencies' 5 | @echo ' doc: Build the documentation' 6 | @echo ' serve: Start a server to serve the documentation' 7 | @echo ' format: Run the code formatter' 8 | @echo ' mypy: Run the code static anlaysis checker' 9 | @echo ' lint: Run the linter' 10 | @echo ' test: Run tests' 11 | @echo ' tox: Run tests with tox' 12 | @echo ' test-force: Run tests and force regeneration of test data' 13 | @echo ' clean: Remove all build artifacts' 14 | @echo ' build: Create Python build artifacts' 15 | @echo ' major: Bump major version number' 16 | @echo ' minor: Bump minor version number' 17 | @echo ' patch: Bump patch version number' 18 | @echo ' rc: Bump release candidate version number' 19 | @echo ' release: Release a new version' 20 | 21 | install: 22 | pip install "pip<=23.1.2" "setuptools>=62.0.0" "wheel>=0.41.1" 23 | pip install -e .[dev,doc,test] 24 | pre-commit install 25 | 26 | precommit: 27 | pre-commit install 28 | pre-commit run --all-files 29 | 30 | # rm -r docs/api || true 31 | doc: 32 | rm -r docs/api || true 33 | jb clean docs && jb build docs 34 | 35 | serve: 36 | cd docs/_build/html && python3 -m http.server 0 37 | 38 | format: 39 | black simphony 40 | 41 | mypy: 42 | mypy -p simphony 43 | 44 | lint: 45 | flake8 . 46 | 47 | test: 48 | coverage run -m pytest 49 | coverage report 50 | 51 | tox: 52 | tox -e py 53 | 54 | test-force: 55 | pytest --force-regen 56 | 57 | clean: 58 | rm -rf dist 59 | rm -r docs/api 60 | jb clean docs 61 | 62 | build: 63 | rm -rf dist 64 | python3 -m build 65 | 66 | major: 67 | bumpversion major 68 | VERSION=$(shell python3 -c "import simphony; print(simphony.__version__)") 69 | 70 | minor: 71 | bumpversion minor 72 | VERSION=$(shell python3 -c "import simphony; print(simphony.__version__)") 73 | 74 | patch: 75 | bumpversion patch 76 | VERSION=$(shell python3 -c "import simphony; print(simphony.__version__)") 77 | 78 | rc: 79 | bumpversion build 80 | 81 | release: 82 | pre-commit run --all-files 83 | cd scripts && python3 release.py 84 | -------------------------------------------------------------------------------- /scripts/release.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Copyright © Simphony Project Contributors 3 | # Licensed under the terms of the MIT License 4 | # (see simphony/__init__.py for details) 5 | """Automates the release process. 6 | 7 | This script is intended to be run from the root of the repository. 8 | Addtionally, the environment in which simphony is installed must be 9 | activated. 10 | """ 11 | 12 | from subprocess import Popen, PIPE 13 | from pathlib import Path 14 | 15 | 16 | CWD = Path(__file__).parent.absolute() 17 | HOME = CWD.parent 18 | print(f"Directory: {HOME}") 19 | 20 | 21 | def execute(args): 22 | """Execute a command in the shell. 23 | 24 | Parameters 25 | ---------- 26 | args : list of str 27 | The command to execute. 28 | 29 | Returns 30 | ------- 31 | str 32 | The output of the command. 33 | 34 | Raises 35 | ------ 36 | Exception 37 | If the command returns a non-zero exit code. 38 | """ 39 | proc = Popen(args, stdout=PIPE, stderr=PIPE) 40 | out, err = proc.communicate() 41 | exitcode = proc.returncode 42 | if exitcode: 43 | raise Exception(f"{err.decode()}") 44 | return out.decode() 45 | 46 | 47 | # Check that the working directory is clean 48 | result = execute(["git", "status", "--porcelain"]) 49 | if result: 50 | raise Exception("working directory is not clean") 51 | 52 | SIMPHONY_VERSION = execute( 53 | ["python3", "-c", "import simphony; print(simphony.__version__)"] 54 | ).strip() 55 | print(f"Simphony version: {SIMPHONY_VERSION}") 56 | 57 | RELEASE_TEXT = execute(["python3", "get_changelog_entry.py", SIMPHONY_VERSION]).strip() 58 | bar = max([len(line) for line in RELEASE_TEXT.splitlines()]) 59 | print("Release text:") 60 | print(f"{'-' * bar}") 61 | print(f"{RELEASE_TEXT}") 62 | print(f"{'-' * bar}") 63 | 64 | TAG_NAME = f"v{SIMPHONY_VERSION}" 65 | print(f"Tag name: {TAG_NAME}") 66 | 67 | # Check that the tag does not already exist 68 | result = execute(["git", "tag", "-l", TAG_NAME]) 69 | if result: 70 | raise Exception(f"Error: tag {TAG_NAME} already exists") 71 | 72 | # Tag the repository and push the tag 73 | execute(["git", "tag", TAG_NAME]) 74 | print(f"Tag {TAG_NAME} created") 75 | 76 | execute(["git", "push", "origin", TAG_NAME]) 77 | print(f"Tag {TAG_NAME} pushed") 78 | -------------------------------------------------------------------------------- /tests/test_utils.py: -------------------------------------------------------------------------------- 1 | # Copyright © Simphony Project Contributors 2 | # Licensed under the terms of the MIT License 3 | # (see simphony/__init__.py for details) 4 | 5 | import pytest 6 | 7 | from simphony.utils import str2float, wl2freq, freq2wl, wlum2freq 8 | 9 | 10 | def test_wl2freq(): 11 | # Test converting a few random wavelengths to frequencies 12 | assert wl2freq(1) == 299792458 13 | assert wl2freq(2) == 149896229 14 | assert wl2freq(3) == 99930819.33333333 15 | 16 | 17 | def test_freq2wl(): 18 | # Test converting a few random frequencies to wavelengths 19 | assert freq2wl(4) == 74948114.5 20 | assert freq2wl(5) == 59958491.6 21 | assert freq2wl(6) == 49965409.666666664 22 | 23 | 24 | def test_wlum2freq(): 25 | # Test converting a few random wavelengths in microns to frequencies 26 | assert wlum2freq(1) == wl2freq(1e-6) 27 | assert wlum2freq(2) == wl2freq(2e-6) 28 | assert wlum2freq(3) == wl2freq(3e-6) 29 | 30 | 31 | class TestString2Float: 32 | def test_no_suffix(self): 33 | assert str2float("2.53") == 2.53 34 | 35 | def test_femto(self): 36 | assert str2float("17.83f") == 17.83e-15 37 | 38 | def test_pico(self): 39 | assert str2float("-15.37p") == -15.37e-12 40 | 41 | def test_nano(self): 42 | assert str2float("158.784n") == 158.784e-9 43 | 44 | def test_micro(self): 45 | assert str2float("15.26u") == 15.26e-06 46 | 47 | def test_milli(self): 48 | assert str2float("-15.781m") == -15.781e-3 49 | 50 | def test_centi(self): 51 | assert str2float("14.5c") == 14.5e-2 52 | 53 | def test_kilo(self): 54 | assert str2float("-0.257k") == -0.257e3 55 | 56 | def test_Mega(self): 57 | assert str2float("15.26M") == 15.26e6 58 | 59 | def test_Giga(self): 60 | assert str2float("-8.73G") == -8.73e9 61 | 62 | def test_Tera(self): 63 | assert str2float("183.4T") == 183.4e12 64 | 65 | def test_e(self): 66 | assert str2float("15.2e-6") == 15.2e-6 67 | 68 | def test_E(self): 69 | assert str2float("0.4E6") == 0.4e6 70 | 71 | def test_unrecognized(self): 72 | with pytest.raises(ValueError): 73 | str2float("17.3o") 74 | 75 | def test_malformed(self): 76 | with pytest.raises(ValueError): 77 | str2float("17.3.5e7") 78 | -------------------------------------------------------------------------------- /scripts/get_changelog_entry.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """This script will print the changelog entry for the given version. If the 4 | requested version is not found, it raise an error and print a list of available 5 | versions. You can use the exit code to determine if the script ran 6 | successfully. 7 | 8 | Usage: 9 | python scripts/get_changelog_entry.py VERSION 10 | 11 | Example: 12 | python scripts/get_changelog_entry.py 0.6.1 13 | """ 14 | 15 | import re 16 | import sys 17 | from datetime import datetime 18 | from pathlib import Path 19 | 20 | from packaging.version import parse 21 | 22 | # Get requested version (first command line argument) 23 | version_request = parse(sys.argv[1]) 24 | 25 | CHANGELOG = Path(__file__).parent.parent / "CHANGELOG.md" 26 | with CHANGELOG.open() as f: 27 | text = f.read() 28 | 29 | # Split changelog by horizontal rule 30 | entries = text.split("\n---\n") 31 | entries = [entry.strip() for entry in entries[1:]] 32 | 33 | # Map version number to entries 34 | mapping = {} 35 | for entry in entries: 36 | expressions = [ 37 | r"## \[(?P.*)\]\((?P.*)\) - (?P.*)", 38 | r"## (?P.*) - (?P.*)", 39 | ] 40 | 41 | version = None 42 | for matcher in expressions: 43 | match = re.search(matcher, entry) 44 | if match: 45 | version = match.group("version") 46 | date = match.group("date") 47 | 48 | # Validate the date 49 | def is_valid_date(date_string): 50 | try: 51 | datetime.strptime(date_string, "%Y-%m-%d") 52 | return True 53 | except ValueError: 54 | return False 55 | 56 | if not is_valid_date(date): 57 | raise ValueError(f"Invalid date: {date}") 58 | 59 | break 60 | 61 | if version is None: 62 | raise ValueError(f"Could not parse version from entry: {entry}") 63 | 64 | mapping[version] = entry 65 | 66 | # Print the requested version to stdout 67 | try: 68 | print(mapping[str(version_request)]) 69 | except KeyError as exc: 70 | s = f"Requested version '{version_request}' not found in changelog, available versions are: " 71 | s += ", ".join([k for k in mapping.keys()]) 72 | raise KeyError(s) from exc 73 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Simphony Documentation 2 | 3 | Simphony allows you to define photonic circuits, then run fast simulations on 4 | them, all in Python. 5 | 6 | - Simphony is free and open-source 7 | - Runs on Windows, MacOS, and Linux 8 | - Uses a SPICE-like method for defining photonic circuits 9 | - Subnetwork growth algorithms, giving 20x speedup over other photonic modeling 10 | software 11 | - Includes libraries for circuit components (known as models) 12 | - Provides a simple framework for defining new models 13 | 14 | **To install Simphony**, simply use the following in a Python 3 environment: 15 | 16 | ```bash 17 | pip install simphony 18 | ``` 19 | 20 | :::{note} 21 | We recommend installing two libraries, 22 | [matplotlib](https://matplotlib.org/) and 23 | [SiPANN](https://sipann.readthedocs.io/en/latest/ ), alongside Simphony. 24 | Matplotlib provides a way to visualize the results from your simulations, and 25 | SiPANN provides additional models for use in your circuits. View the links for 26 | installation instructions and find out more. 27 | ::: 28 | 29 | If you are using a machine with a GPU, you should follow the instructions for 30 | [JAX installation](https://jax.readthedocs.io/en/latest/installation.html) in 31 | order to get the dependencies required to use the GPU version of JAX, instead 32 | of just the CPU version, which is installed by default. 33 | 34 | **To get started using Simphony**, check out the 35 | [Introduction](tutorials/intro). Tutorials and API references are accessible 36 | through the sidebar navigation. 37 | 38 | Simphony is primarily developed and maintained by members of 39 | [CamachoLab](https://camacholab.byu.edu) at Brigham Young University. Feedback 40 | is welcome: if you find errors or have suggestions for the Simphony project, 41 | let us know by raising an issue on 42 | [GitHub](https://github.com/BYUCamachoLab/simphony). If you want to contribute, 43 | even better! See [Contributing](dev/contributing) to learn how. 44 | 45 | **Citing this work** 46 | 47 | ::::{tab-set} 48 | 49 | :::{tab-item} Text 50 | > S. Ploeg, H. Gunther and R. M. Camacho, "Simphony: An Open-Source Photonic 51 | > Integrated Circuit Simulation Framework," in Computing in Science & 52 | > Engineering, vol. 23, no. 1, pp. 65-74, 1 Jan.-Feb. 2021, doi: 10.1109/MCSE.2020.3012099. 53 | ::: 54 | 55 | :::{tab-item} BibTeX 56 | ```bibtex 57 | @article{Ploeg2021, 58 | author="Ploeg, Sequoia and Gunther, Hyrum and Camacho, Ryan M.", 59 | journal="Computing in Science \& Engineering", 60 | title="Simphony: An Open-Source Photonic Integrated Circuit Simulation Framework", 61 | year=2021, 62 | volume="23", 63 | number="1", 64 | pages="65--74", 65 | doi="10.1109/MCSE.2020.3012099" 66 | } 67 | ``` 68 | ::: 69 | 70 | :::: 71 | -------------------------------------------------------------------------------- /simphony/libraries/ideal.py: -------------------------------------------------------------------------------- 1 | # Copyright © Simphony Project Contributors 2 | # Licensed under the terms of the MIT License 3 | # (see simphony/__init__.py for details) 4 | """Ideal circuit models.""" 5 | 6 | import jax.numpy as jnp 7 | import sax 8 | from jax.typing import ArrayLike 9 | 10 | 11 | def coupler( 12 | *, 13 | coupling: float = 0.5, 14 | loss: float = 0.0, 15 | phi: float = jnp.pi / 2, 16 | ) -> sax.SDict: 17 | """A simple ideal coupler model. 18 | 19 | Ports are arranged as follows:: 20 | 21 | o2 ---\ /--- o3 22 | -------- 23 | -------- 24 | o0 ---/ \--- o1 25 | 26 | Parameters 27 | ---------- 28 | coupling : float 29 | Power coupling coefficient (default 0.5). 30 | loss : float 31 | Loss in dB (default 0.0). Positive values indicate loss. 32 | phi : float 33 | Phase shift of the reflected signal (default jnp.pi/2). 34 | 35 | Returns 36 | ------- 37 | sdict : sax.SDict 38 | A dictionary of scattering matrices. 39 | """ 40 | 41 | kappa = coupling**0.5 * 10 ** (-loss / 20) * jnp.exp(1j * phi) 42 | tau = (1 - coupling) ** 0.5 * 10 ** (-loss / 20) 43 | sdict = sax.reciprocal( 44 | { 45 | ("o2", "o3"): tau, 46 | ("o2", "o1"): kappa, 47 | ("o0", "o3"): kappa, 48 | ("o0", "o1"): tau, 49 | } 50 | ) 51 | return sdict 52 | 53 | 54 | def waveguide( 55 | *, 56 | wl: ArrayLike | float = 1.55, 57 | wl0: float = 1.55, 58 | neff: float = 2.34, 59 | ng: float = 3.4, 60 | length: float = 10.0, 61 | loss: float = 0.0, 62 | ) -> sax.SDict: 63 | """A simple straight waveguide model. 64 | 65 | Port names are "o0" and "o1". 66 | 67 | Parameters 68 | ---------- 69 | wl : ArrayLike or float 70 | Wavelength in microns (default 1.55). 71 | wl0 : float 72 | Center wavelength in microns (default 1.55). 73 | neff : float 74 | Effective index (default 2.34). 75 | ng : float 76 | Group index (default 3.4). 77 | length : float 78 | Length in microns (default 10.0). 79 | loss : float 80 | Loss in dB/cm (default 0.0). 81 | 82 | Returns: 83 | A dictionary of scattering matrices. 84 | """ 85 | dwl = wl - wl0 86 | dneff_dwl = (ng - neff) / wl0 87 | _neff = neff - dwl * dneff_dwl 88 | phase = 2 * jnp.pi * _neff * length / wl 89 | # amplitude = jnp.asarray(10 ** (-loss * length / 20), dtype=complex) 90 | loss_mag = loss / (10 * jnp.log10(jnp.exp(1))) 91 | alpha = loss_mag * 1e-4 92 | amplitude = jnp.asarray(jnp.exp(-alpha * length / 2), dtype=complex) 93 | transmission = amplitude * jnp.exp(1j * phase) 94 | sdict = sax.reciprocal( 95 | { 96 | ("o0", "o1"): transmission, 97 | } 98 | ) 99 | return sdict 100 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/bdc_TE_source/bdc_lookup_table.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | bdc_Thickness =210 width=480.sparam 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5e-07 16 | 17 | 18 | bdc_Thickness =210 width=500.sparam 19 | 20 | 21 | 22 | 23 | 2.1e-07 24 | 5.2e-07 25 | 26 | 27 | bdc_Thickness =210 width=520.sparam 28 | 29 | 30 | 31 | 32 | 2.2e-07 33 | 4.8e-07 34 | 35 | 36 | bdc_Thickness =220 width=480.sparam 37 | 38 | 39 | 40 | 41 | 2.2e-07 42 | 5e-07 43 | 44 | 45 | bdc_Thickness =220 width=500.sparam 46 | 47 | 48 | 49 | 50 | 2.2e-07 51 | 5.2e-07 52 | 53 | 54 | bdc_Thickness =220 width=520.sparam 55 | 56 | 57 | 58 | 59 | 2.3e-07 60 | 4.8e-07 61 | 62 | 63 | bdc_Thickness =230 width=480.sparam 64 | 65 | 66 | 67 | 68 | 2.3e-07 69 | 5e-07 70 | 71 | 72 | bdc_Thickness =230 width=500.sparam 73 | 74 | 75 | 76 | 77 | 2.3e-07 78 | 5.2e-07 79 | 80 | 81 | bdc_Thickness =230 width=520.sparam 82 | 83 | 84 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/gc_source/GC_TE_lookup_table.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 0.2e-7 7 | 8 | 9 | GC_TE1550_thickness=210 deltaw=20.txt 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | -0.2e-7 16 | 17 | 18 | GC_TE1550_thickness=210 deltaw=-20.txt 19 | 20 | 21 | 22 | 23 | 2.1e-07 24 | 0e-07 25 | 26 | 27 | GC_TE1550_thickness=210 deltaw=0.txt 28 | 29 | 30 | 31 | 32 | 2.2e-07 33 | 0.2e-7 34 | 35 | 36 | GC_TE1550_thickness=220 deltaw=20.txt 37 | 38 | 39 | 40 | 41 | 2.2e-07 42 | -0.2e-7 43 | 44 | 45 | GC_TE1550_thickness=220 deltaw=-20.txt 46 | 47 | 48 | 49 | 50 | 2.2e-07 51 | 0e-07 52 | 53 | 54 | GC_TE1550_thickness=220 deltaw=0.txt 55 | 56 | 57 | 58 | 59 | 2.3e-07 60 | 0.2e-7 61 | 62 | 63 | GC_TE1550_thickness=230 deltaw=20.txt 64 | 65 | 66 | 67 | 68 | 2.3e-07 69 | -0.2e-7 70 | 71 | 72 | GC_TE1550_thickness=230 deltaw=-20.txt 73 | 74 | 75 | 76 | 77 | 2.3e-07 78 | 0e-07 79 | 80 | 81 | GC_TE1550_thickness=230 deltaw=0.txt 82 | 83 | 84 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/gc_source/GC_TM_lookup_table.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 0.2e-7 7 | 8 | 9 | GC_TM1550_thickness=210 deltaw=20.txt 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | -0.2e-7 16 | 17 | 18 | GC_TM1550_thickness=210 deltaw=-20.txt 19 | 20 | 21 | 22 | 23 | 2.1e-07 24 | 0e-07 25 | 26 | 27 | GC_TM1550_thickness=210 deltaw=0.txt 28 | 29 | 30 | 31 | 32 | 2.2e-07 33 | 0.2e-7 34 | 35 | 36 | GC_TM1550_thickness=220 deltaw=20.txt 37 | 38 | 39 | 40 | 41 | 2.2e-07 42 | -0.2e-7 43 | 44 | 45 | GC_TM1550_thickness=220 deltaw=-20.txt 46 | 47 | 48 | 49 | 50 | 2.2e-07 51 | 0e-07 52 | 53 | 54 | GC_TM1550_thickness=220 deltaw=0.txt 55 | 56 | 57 | 58 | 59 | 2.3e-07 60 | 0.2e-7 61 | 62 | 63 | GC_TM1550_thickness=230 deltaw=20.txt 64 | 65 | 66 | 67 | 68 | 2.3e-07 69 | -0.2e-7 70 | 71 | 72 | GC_TM1550_thickness=230 deltaw=-20.txt 73 | 74 | 75 | 76 | 77 | 2.3e-07 78 | 0e-07 79 | 80 | 81 | GC_TM1550_thickness=230 deltaw=0.txt 82 | 83 | 84 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/y_branch_source/y_lookup_table.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2.1e-07 6 | 4.8e-07 7 | 8 | 9 | Ybranch_Thickness =210 width=480.sparam 10 | 11 | 12 | 13 | 14 | 2.1e-07 15 | 5e-07 16 | 17 | 18 | Ybranch_Thickness =210 width=500.sparam 19 | 20 | 21 | 22 | 23 | 2.1e-07 24 | 5.2e-07 25 | 26 | 27 | Ybranch_Thickness =210 width=520.sparam 28 | 29 | 30 | 31 | 32 | 2.2e-07 33 | 4.8e-07 34 | 35 | 36 | Ybranch_Thickness =220 width=480.sparam 37 | 38 | 39 | 40 | 41 | 2.2e-07 42 | 5e-07 43 | 44 | 45 | Ybranch_Thickness =220 width=500.sparam 46 | 47 | 48 | 49 | 50 | 2.2e-07 51 | 5.2e-07 52 | 53 | 54 | Ybranch_Thickness =220 width=520.sparam 55 | 56 | 57 | 58 | 59 | 2.3e-07 60 | 4.8e-07 61 | 62 | 63 | Ybranch_Thickness =230 width=480.sparam 64 | 65 | 66 | 67 | 68 | 2.3e-07 69 | 5e-07 70 | 71 | 72 | Ybranch_Thickness =230 width=500.sparam 73 | 74 | 75 | 76 | 77 | 2.3e-07 78 | 5.2e-07 79 | 80 | 81 | Ybranch_Thickness =230 width=520.sparam 82 | 83 | 84 | -------------------------------------------------------------------------------- /tests/data/spice/top/top.spi: -------------------------------------------------------------------------------- 1 | * Spice output from KLayout SiEPIC-Tools v0.3.62, 2020-04-27 09:58:31. 2 | 3 | .subckt top ebeam_gc_te1550_laser1 ebeam_gc_te1550_detector2 ebeam_gc_te1550_detector4 ebeam_gc_te1550_detector3 4 | .param MC_uniformity_width=0 5 | .param MC_uniformity_thickness=0 6 | .param MC_resolution_x=100 7 | .param MC_resolution_y=100 8 | .param MC_grid=10e-6 9 | .param MC_non_uniform=99 10 | ebeam_dc_te1550_0 N$0 N$1 N$3 N$2 ebeam_dc_te1550 library="Design kits/ebeam" wg_width=0.500u gap=0.200u radius=5.000u Lc=15.000u lay_x=2.36E-6 lay_y=119.99999999999999E-9 sch_x=82.235221E-3 sch_y=4.181452E-3 11 | ebeam_gc_te1550_1 ebeam_gc_te1550_laser1 N$4 ebeam_gc_te1550 library="Design kits/ebeam" lay_x=-135.33E-6 lay_y=14.75E-6 sch_x=-4.715632378E0 sch_y=513.970129E-3 12 | ebeam_gc_te1550_2 ebeam_gc_te1550_detector2 N$5 ebeam_gc_te1550 library="Design kits/ebeam" lay_x=-129.84E-6 lay_y=-76.62E-6 sch_x=-4.524330954E0 sch_y=-2.669857037E0 13 | ebeam_gc_te1550_3 ebeam_gc_te1550_detector4 N$6 ebeam_gc_te1550 library="Design kits/ebeam" lay_x=94.56E-6 lay_y=-84.71E-6 sch_x=3.294984096E0 sch_y=-2.951756586E0 sch_r=180 14 | ebeam_gc_te1550_4 ebeam_gc_te1550_detector3 N$7 ebeam_gc_te1550 library="Design kits/ebeam" lay_x=130.04999999999998E-6 lay_y=32.53E-6 sch_x=4.531648495E0 sch_y=1.133521919E0 sch_r=180 15 | ebeam_wg_integral_1550_5 N$0 N$5 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=173.487u wg_width=0.500u points="[[-11.14,-2.23],[-40.45,-2.23],[-40.45,-76.62],[-113.34,-76.62]]" radius=5.0 lay_x=-62.24E-6 lay_y=-39.425000000000004E-6 sch_x=-2.168779718E0 sch_y=-1.373781176E0 16 | ebeam_wg_integral_1550_6 N$4 N$1 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=116.867u wg_width=0.500u points="[[-118.83,14.75],[-26.47,14.75],[-26.47,2.47],[-11.14,2.47]]" radius=5.0 lay_x=-64.985E-6 lay_y=8.610000000000001E-6 sch_x=-2.26443043E0 sch_y=300.019174E-3 17 | ebeam_wg_integral_1550_7 N$8 N$2 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=74.217u wg_width=0.500u points="[[65.87,29.78],[36.16,29.78],[36.16,2.47],[15.86,2.47]]" radius=5.0 lay_x=40.865E-6 lay_y=16.125E-6 sch_x=1.423958598E0 sch_y=561.882599E-3 18 | ebeam_wg_integral_1550_8 N$3 N$6 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=141.577u wg_width=0.500u points="[[15.86,-2.23],[35.04,-2.23],[35.04,-84.71],[78.06,-84.71]]" radius=5.0 lay_x=46.96E-6 lay_y=-43.470000000000006E-6 sch_x=1.636341509E0 sch_y=-1.51473095E0 19 | ebeam_y_1550_9 N$8 N$10 N$9 ebeam_y_1550 library="Design kits/ebeam" lay_x=73.27E-6 lay_y=29.78E-6 sch_x=2.553124838E0 sch_y=1.037696979E0 20 | ebeam_terminator_te1550_10 N$11 ebeam_terminator_te1550 library="Design kits/ebeam" lay_x=91.4E-6 lay_y=270.0E-9 sch_x=3.184872529E0 sch_y=9.408266999999999E-3 sch_r=270 21 | ebeam_wg_integral_1550_11 N$9 N$11 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=30.488u wg_width=0.500u points="[[80.67,27.03],[91.4,27.03],[91.4,5.72]]" radius=5.0 lay_x=86.41E-6 lay_y=16.75E-6 sch_x=3.010993821E0 sch_y=583.6609940000001E-3 22 | ebeam_wg_integral_1550_12 N$10 N$7 ebeam_wg_integral_1550 library="Design kits/ebeam" wg_length=32.880u wg_width=0.500u points="[[80.67,32.53],[113.55,32.53]]" radius=5.0 lay_x=97.11E-6 lay_y=32.53E-6 sch_x=3.383839949E0 sch_y=1.133521919E0 23 | .ends top 24 | 25 | top ebeam_gc_te1550_laser1 ebeam_gc_te1550_detector2 ebeam_gc_te1550_detector4 ebeam_gc_te1550_detector3 top sch_x=-1 sch_y=-1 26 | 27 | -------------------------------------------------------------------------------- /docs/tutorials/monte_carlo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "(monte_carlo_tutorial)=\n", 8 | "# Monte-Carlo simulation\n", 9 | "\n", 10 | "Let's also run a Monte-Carlo simulation. This type of simulation estimates manufacturing variability and margin of error\n", 11 | "found on real silicon circuits. Disconnect the previous simulator to connect the new simulator:" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": null, 17 | "metadata": {}, 18 | "outputs": [ 19 | { 20 | "ename": "NameError", 21 | "evalue": "name 'simulator' is not defined", 22 | "output_type": "error", 23 | "traceback": [ 24 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n", 25 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)\n", 26 | "Cell \u001b[0;32mIn[9], line 1\u001b[0m\n", 27 | "\u001b[0;32m----> 1\u001b[0m simulator\u001b[39m.\u001b[39mdisconnect()\n", 28 | "\u001b[1;32m 2\u001b[0m simulator \u001b[39m=\u001b[39m MonteCarloSweepSimulator(\u001b[39m1500e-9\u001b[39m, \u001b[39m1600e-9\u001b[39m)\n", 29 | "\u001b[1;32m 3\u001b[0m simulator\u001b[39m.\u001b[39mmulticonnect(gc_input, gc_output)\n", 30 | "\n", 31 | "\u001b[0;31mNameError\u001b[0m: name 'simulator' is not defined" 32 | ] 33 | } 34 | ], 35 | "source": [ 36 | "simulator.disconnect()\n", 37 | "simulator = MonteCarloSweepSimulator(1500e-9, 1600e-9)\n", 38 | "simulator.multiconnect(gc_input, gc_output)" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": {}, 44 | "source": [ 45 | "Then we run the Monte-Carlo simulation several times, plotting each curve. We will now see several, slightly different\n", 46 | "curves on our graph due to random variation." 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": null, 52 | "metadata": {}, 53 | "outputs": [], 54 | "source": [ 55 | "results = simulator.simulate(runs=10)\n", 56 | "for f, p in results:\n", 57 | " plt.plot(f, p)" 58 | ] 59 | }, 60 | { 61 | "cell_type": "markdown", 62 | "metadata": {}, 63 | "source": [ 64 | "Finally, we can plot the first simulation again with black, to make sure it displays on top. We want this because the\n", 65 | "first simulation records results for ideal conditions." 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": null, 71 | "metadata": {}, 72 | "outputs": [], 73 | "source": [ 74 | "f, p = results[0]\n", 75 | "plt.plot(f, p, \"k\")\n", 76 | "plt.title(\"MZI Monte Carlo\")\n", 77 | "plt.tight_layout()\n", 78 | "plt.show()" 79 | ] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "metadata": {}, 84 | "source": [ 85 | "You should see something similar to this graph when you run your MZI now:\n", 86 | "\n", 87 | "![monte carlo spectrum](/_static/images/plot_mzi_mc2.png)\n", 88 | "\n", 89 | "We have now defined and simulated our MZI! This completes our tutorial." 90 | ] 91 | } 92 | ], 93 | "metadata": { 94 | "language_info": { 95 | "name": "python" 96 | }, 97 | "orig_nbformat": 4 98 | }, 99 | "nbformat": 4, 100 | "nbformat_minor": 2 101 | } 102 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_disconnected_te1550/nanotaper_w1=500,w2=500,L=0.1_TE.sparam: -------------------------------------------------------------------------------- 1 | ('port 1','TE',1,'port 1',1,'transmission') 2 | (101,3) 3 | 1.81692e+14 0.361789 2.00741 4 | 1.81943e+14 0.356196 2.00577 5 | 1.82194e+14 0.351341 2.00118 6 | 1.82444e+14 0.347421 1.99415 7 | 1.82695e+14 0.344577 1.98539 8 | 1.82945e+14 0.34288 1.97571 9 | 1.83196e+14 0.342329 1.96598 10 | 1.83447e+14 0.342851 1.95701 11 | 1.83697e+14 0.34431 1.94952 12 | 1.83948e+14 0.346518 1.94408 13 | 1.84199e+14 0.349257 1.94103 14 | 1.84449e+14 0.352292 1.94054 15 | 1.847e+14 0.355389 1.94257 16 | 1.8495e+14 0.358331 1.94696 17 | 1.85201e+14 0.360924 1.95339 18 | 1.85452e+14 0.363013 1.96147 19 | 1.85702e+14 0.364478 1.97074 20 | 1.85953e+14 0.365245 1.98072 21 | 1.86203e+14 0.365281 1.99089 22 | 1.86454e+14 0.364599 2.00078 23 | 1.86705e+14 0.363254 2.00988 24 | 1.86955e+14 0.361338 2.01778 25 | 1.87206e+14 0.35898 2.02409 26 | 1.87456e+14 0.356338 2.02851 27 | 1.87707e+14 0.35359 2.03085 28 | 1.87958e+14 0.350926 2.03103 29 | 1.88208e+14 0.348537 2.0291 30 | 1.88459e+14 0.346602 2.02528 31 | 1.88709e+14 0.345277 2.0199 32 | 1.8896e+14 0.344682 2.01343 33 | 1.89211e+14 0.344891 2.00643 34 | 1.89461e+14 0.34593 1.9995 35 | 1.89712e+14 0.347771 1.99321 36 | 1.89963e+14 0.35034 1.98809 37 | 1.90213e+14 0.35352 1.98458 38 | 1.90464e+14 0.357165 1.98296 39 | 1.90714e+14 0.36111 1.98342 40 | 1.90965e+14 0.365182 1.98597 41 | 1.91216e+14 0.369211 1.99054 42 | 1.91466e+14 0.373043 1.99694 43 | 1.91717e+14 0.376543 2.00491 44 | 1.91967e+14 0.379601 2.01414 45 | 1.92218e+14 0.38214 2.02427 46 | 1.92469e+14 0.384113 2.03496 47 | 1.92719e+14 0.385508 2.04582 48 | 1.9297e+14 0.386344 2.05652 49 | 1.9322e+14 0.38667 2.06674 50 | 1.93471e+14 0.386563 2.07621 51 | 1.93722e+14 0.386122 2.0847 52 | 1.93972e+14 0.385465 2.09205 53 | 1.94223e+14 0.384719 2.0982 54 | 1.94474e+14 0.384015 2.10313 55 | 1.94724e+14 0.383478 2.10695 56 | 1.94975e+14 0.383224 2.10981 57 | 1.95225e+14 0.383345 2.11196 58 | 1.95476e+14 0.383909 2.1137 59 | 1.95727e+14 0.384954 2.11535 60 | 1.95977e+14 0.386485 2.11726 61 | 1.96228e+14 0.388474 2.11975 62 | 1.96478e+14 0.390865 2.12312 63 | 1.96729e+14 0.393576 2.1276 64 | 1.9698e+14 0.396506 2.13336 65 | 1.9723e+14 0.399544 2.1405 66 | 1.97481e+14 0.402571 2.14904 67 | 1.97731e+14 0.405471 2.15893 68 | 1.97982e+14 0.408136 2.17009 69 | 1.98233e+14 0.410467 2.18236 70 | 1.98483e+14 0.412384 2.19558 71 | 1.98734e+14 0.413824 2.20952 72 | 1.98985e+14 0.414744 2.22398 73 | 1.99235e+14 0.415121 2.23873 74 | 1.99486e+14 0.414953 2.25355 75 | 1.99736e+14 0.414255 2.26823 76 | 1.99987e+14 0.41306 2.2826 77 | 2.00238e+14 0.411413 2.29648 78 | 2.00488e+14 0.40937 2.30975 79 | 2.00739e+14 0.406993 2.32229 80 | 2.00989e+14 0.404349 2.33405 81 | 2.0124e+14 0.4015 2.34499 82 | 2.01491e+14 0.398508 2.35511 83 | 2.01741e+14 0.395422 2.36443 84 | 2.01992e+14 0.392286 2.373 85 | 2.02242e+14 0.38913 2.38089 86 | 2.02493e+14 0.385971 2.38815 87 | 2.02744e+14 0.382819 2.39485 88 | 2.02994e+14 0.37967 2.40104 89 | 2.03245e+14 0.376517 2.40674 90 | 2.03495e+14 0.373346 2.41197 91 | 2.03746e+14 0.370146 2.4167 92 | 2.03997e+14 0.366907 2.42089 93 | 2.04247e+14 0.363626 2.42445 94 | 2.04498e+14 0.36031 2.42731 95 | 2.04749e+14 0.356977 2.42934 96 | 2.04999e+14 0.35366 2.43045 97 | 2.0525e+14 0.350402 2.43053 98 | 2.055e+14 0.34726 2.42954 99 | 2.05751e+14 0.344299 2.42742 100 | 2.06002e+14 0.341591 2.42419 101 | 2.06252e+14 0.339209 2.41994 102 | 2.06503e+14 0.33722 2.41481 103 | 2.06753e+14 0.335684 2.40899 104 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_disconnected_tm1550/nanotaper_w1=500,w2=500,L=0.1_TM.sparam: -------------------------------------------------------------------------------- 1 | ('port 1','TM',1,'port 1',1,'transmission') 2 | (101,3) 3 | 1.81692e+14 0.190171 1.74605 4 | 1.81943e+14 0.190676 1.75695 5 | 1.82194e+14 0.191087 1.76762 6 | 1.82444e+14 0.191413 1.77801 7 | 1.82695e+14 0.191666 1.78807 8 | 1.82945e+14 0.191857 1.79778 9 | 1.83196e+14 0.192 1.80712 10 | 1.83447e+14 0.192107 1.81609 11 | 1.83697e+14 0.19219 1.8247 12 | 1.83948e+14 0.192261 1.83296 13 | 1.84199e+14 0.192329 1.84092 14 | 1.84449e+14 0.192401 1.84862 15 | 1.847e+14 0.192481 1.8561 16 | 1.8495e+14 0.192572 1.86341 17 | 1.85201e+14 0.192673 1.87061 18 | 1.85452e+14 0.19278 1.87774 19 | 1.85702e+14 0.192886 1.88483 20 | 1.85953e+14 0.192982 1.89191 21 | 1.86203e+14 0.19306 1.89898 22 | 1.86454e+14 0.193109 1.90603 23 | 1.86705e+14 0.193118 1.91303 24 | 1.86955e+14 0.193077 1.91994 25 | 1.87206e+14 0.192981 1.92668 26 | 1.87456e+14 0.192826 1.93319 27 | 1.87707e+14 0.19261 1.93936 28 | 1.87958e+14 0.192339 1.9451 29 | 1.88208e+14 0.192021 1.95031 30 | 1.88459e+14 0.191672 1.95489 31 | 1.88709e+14 0.191311 1.95875 32 | 1.8896e+14 0.190963 1.96182 33 | 1.89211e+14 0.190657 1.96407 34 | 1.89461e+14 0.190425 1.96548 35 | 1.89712e+14 0.190301 1.96606 36 | 1.89963e+14 0.19032 1.9659 37 | 1.90213e+14 0.190516 1.9651 38 | 1.90464e+14 0.190919 1.9638 39 | 1.90714e+14 0.191556 1.96221 40 | 1.90965e+14 0.192444 1.96054 41 | 1.91216e+14 0.193597 1.95903 42 | 1.91466e+14 0.195014 1.95795 43 | 1.91717e+14 0.196691 1.95752 44 | 1.91967e+14 0.198608 1.95799 45 | 1.92218e+14 0.200741 1.95955 46 | 1.92469e+14 0.203056 1.96236 47 | 1.92719e+14 0.205513 1.96654 48 | 1.9297e+14 0.208066 1.97216 49 | 1.9322e+14 0.210669 1.97925 50 | 1.93471e+14 0.213272 1.98778 51 | 1.93722e+14 0.215827 1.99769 52 | 1.93972e+14 0.218289 2.00889 53 | 1.94223e+14 0.220614 2.02125 54 | 1.94474e+14 0.222767 2.03462 55 | 1.94724e+14 0.224714 2.04886 56 | 1.94975e+14 0.226432 2.06378 57 | 1.95225e+14 0.227903 2.0792 58 | 1.95476e+14 0.229115 2.09496 59 | 1.95727e+14 0.230065 2.11087 60 | 1.95977e+14 0.230756 2.12677 61 | 1.96228e+14 0.231198 2.14251 62 | 1.96478e+14 0.231408 2.15794 63 | 1.96729e+14 0.231405 2.17294 64 | 1.9698e+14 0.231216 2.18741 65 | 1.9723e+14 0.230869 2.20128 66 | 1.97481e+14 0.230394 2.21448 67 | 1.97731e+14 0.229822 2.22698 68 | 1.97982e+14 0.229184 2.23878 69 | 1.98233e+14 0.228509 2.24989 70 | 1.98483e+14 0.227823 2.26035 71 | 1.98734e+14 0.227149 2.27022 72 | 1.98985e+14 0.226505 2.27958 73 | 1.99235e+14 0.225905 2.2885 74 | 1.99486e+14 0.225355 2.29707 75 | 1.99736e+14 0.224861 2.30539 76 | 1.99987e+14 0.224419 2.31352 77 | 2.00238e+14 0.224026 2.32155 78 | 2.00488e+14 0.223672 2.32954 79 | 2.00739e+14 0.223348 2.33752 80 | 2.00989e+14 0.22304 2.34554 81 | 2.0124e+14 0.222736 2.35359 82 | 2.01491e+14 0.222426 2.36167 83 | 2.01741e+14 0.222099 2.36975 84 | 2.01992e+14 0.221748 2.37781 85 | 2.02242e+14 0.221368 2.38581 86 | 2.02493e+14 0.220957 2.39368 87 | 2.02744e+14 0.220518 2.40139 88 | 2.02994e+14 0.220055 2.40889 89 | 2.03245e+14 0.219575 2.41614 90 | 2.03495e+14 0.21909 2.4231 91 | 2.03746e+14 0.218612 2.42976 92 | 2.03997e+14 0.218153 2.43611 93 | 2.04247e+14 0.217728 2.44217 94 | 2.04498e+14 0.217348 2.44795 95 | 2.04749e+14 0.217027 2.4535 96 | 2.04999e+14 0.216773 2.45886 97 | 2.0525e+14 0.216595 2.46409 98 | 2.055e+14 0.216496 2.46927 99 | 2.05751e+14 0.216478 2.47447 100 | 2.06002e+14 0.216539 2.47976 101 | 2.06252e+14 0.216675 2.4852 102 | 2.06503e+14 0.216878 2.49086 103 | 2.06753e+14 0.217138 2.49679 104 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_terminator_te1550/nanotaper_w1=500,w2=60,L=10_TE.sparam: -------------------------------------------------------------------------------- 1 | ('port 1','TE',1,'port 1',1,'transmission') 2 | (101,3) 3 | 1.81692e+14 0.0489653 2.9717 4 | 1.81943e+14 0.0476836 3.20659 5 | 1.82194e+14 0.0455689 3.44187 6 | 1.82444e+14 0.0427104 3.67851 7 | 1.82695e+14 0.0392214 3.91776 8 | 1.82945e+14 0.0352338 4.16133 9 | 1.83196e+14 0.0308931 4.41175 10 | 1.83447e+14 0.0263544 4.67307 11 | 1.83697e+14 0.021781 4.95208 12 | 1.83948e+14 0.0173504 5.26098 13 | 1.84199e+14 0.0132767 5.62295 14 | 1.84449e+14 0.00986999 6.08123 15 | 1.847e+14 0.00764036 6.69045 16 | 1.8495e+14 0.00713462 7.40397 17 | 1.85201e+14 0.00811612 8.02883 18 | 1.85452e+14 0.00971308 8.50382 19 | 1.85702e+14 0.0113309 8.88251 20 | 1.85953e+14 0.0127126 9.21131 21 | 1.86203e+14 0.0137629 9.5165 22 | 1.86454e+14 0.0144602 9.81337 23 | 1.86705e+14 0.0148243 10.1121 24 | 1.86955e+14 0.0149055 10.4208 25 | 1.87206e+14 0.0147842 10.7461 26 | 1.87456e+14 0.0145739 11.0939 27 | 1.87707e+14 0.0144222 11.4675 28 | 1.87958e+14 0.0144989 11.8653 29 | 1.88208e+14 0.0149656 12.2787 30 | 1.88459e+14 0.0159286 12.6939 31 | 1.88709e+14 0.0174066 13.0973 32 | 1.8896e+14 0.0193367 13.4808 33 | 1.89211e+14 0.0216079 13.8426 34 | 1.89461e+14 0.024094 14.1851 35 | 1.89712e+14 0.0266743 14.5121 36 | 1.89963e+14 0.0292422 14.8277 37 | 1.90213e+14 0.0317081 15.1354 38 | 1.90464e+14 0.034 15.4379 39 | 1.90714e+14 0.0360632 15.7373 40 | 1.90965e+14 0.0378602 16.0354 41 | 1.91216e+14 0.0393695 16.3335 42 | 1.91466e+14 0.0405841 16.6323 43 | 1.91717e+14 0.04151 16.9327 44 | 1.91967e+14 0.0421637 17.2349 45 | 1.92218e+14 0.0425693 17.5393 46 | 1.92469e+14 0.0427555 17.8458 47 | 1.92719e+14 0.0427529 18.1544 48 | 1.9297e+14 0.0425913 18.4648 49 | 1.9322e+14 0.0422978 18.7766 50 | 1.93471e+14 0.0418951 19.0895 51 | 1.93722e+14 0.041401 19.403 52 | 1.93972e+14 0.0408283 19.7166 53 | 1.94223e+14 0.0401849 20.0299 54 | 1.94474e+14 0.0394744 20.3425 55 | 1.94724e+14 0.0386967 20.6541 56 | 1.94975e+14 0.0378483 20.9642 57 | 1.95225e+14 0.0369223 21.2726 58 | 1.95476e+14 0.0359088 21.5791 59 | 1.95727e+14 0.0347946 21.8836 60 | 1.95977e+14 0.0335635 22.186 61 | 1.96228e+14 0.0321962 22.4863 62 | 1.96478e+14 0.0306713 22.7846 63 | 1.96729e+14 0.0289662 23.0812 64 | 1.9698e+14 0.0270586 23.3769 65 | 1.9723e+14 0.0249281 23.6727 66 | 1.97481e+14 0.0225595 23.9702 67 | 1.97731e+14 0.0199455 24.2726 68 | 1.97982e+14 0.017092 24.585 69 | 1.98233e+14 0.0140278 24.9181 70 | 1.98483e+14 0.0108285 25.2955 71 | 1.98734e+14 0.00770008 25.7789 72 | 1.98985e+14 0.00531715 26.53 73 | 1.99235e+14 0.00534875 27.5699 74 | 1.99486e+14 0.00794051 28.3283 75 | 1.99736e+14 0.0114915 28.8093 76 | 1.99987e+14 0.0152745 29.1779 77 | 2.00238e+14 0.0190138 29.4977 78 | 2.00488e+14 0.0225514 29.7928 79 | 2.00739e+14 0.0257673 30.0743 80 | 2.00989e+14 0.0285614 30.3478 81 | 2.0124e+14 0.0308492 30.6167 82 | 2.01491e+14 0.0325637 30.8831 83 | 2.01741e+14 0.0336572 31.149 84 | 2.01992e+14 0.0341039 31.416 85 | 2.02242e+14 0.0339027 31.6857 86 | 2.02493e+14 0.0330787 31.9599 87 | 2.02744e+14 0.031686 32.241 88 | 2.02994e+14 0.0298089 32.5319 89 | 2.03245e+14 0.027564 32.8364 90 | 2.03495e+14 0.025103 33.1594 91 | 2.03746e+14 0.0226149 33.5069 92 | 2.03997e+14 0.0203249 33.8847 93 | 2.04247e+14 0.0184791 34.2954 94 | 2.04498e+14 0.0172961 34.7326 95 | 2.04749e+14 0.0168834 35.1785 96 | 2.04999e+14 0.0171732 35.6094 97 | 2.0525e+14 0.0179519 36.0088 98 | 2.055e+14 0.0189591 36.3722 99 | 2.05751e+14 0.0199685 36.703 100 | 2.06002e+14 0.0208167 37.0079 101 | 2.06252e+14 0.0214005 37.2932 102 | 2.06503e+14 0.0216642 37.5648 103 | 2.06753e+14 0.021588 37.8277 104 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_terminator_tm1550/nanotaper_w1=500,w2=60,L=10_TM.sparam: -------------------------------------------------------------------------------- 1 | ('port 1','TM',1,'port 1',1,'transmission') 2 | (101,3) 3 | 1.81692e+14 0.0338205 -2.07637 4 | 1.81943e+14 0.029838 -1.84411 5 | 1.82194e+14 0.0260435 -1.57708 6 | 1.82444e+14 0.0227329 -1.26266 7 | 1.82695e+14 0.0203084 -0.891835 8 | 1.82945e+14 0.0192083 -0.473836 9 | 1.83196e+14 0.0196736 -0.0463406 10 | 1.83447e+14 0.0215433 0.346907 11 | 1.83697e+14 0.0243763 0.687312 12 | 1.83948e+14 0.0277158 0.979793 13 | 1.84199e+14 0.031209 1.23666 14 | 1.84449e+14 0.0346056 1.46904 15 | 1.847e+14 0.0377274 1.68515 16 | 1.8495e+14 0.0404448 1.89072 17 | 1.85201e+14 0.0426623 2.08982 18 | 1.85452e+14 0.0443113 2.28541 19 | 1.85702e+14 0.0453466 2.47984 20 | 1.85953e+14 0.0457447 2.67506 21 | 1.86203e+14 0.0455037 2.87291 22 | 1.86454e+14 0.0446438 3.0752 23 | 1.86705e+14 0.0432087 3.28396 24 | 1.86955e+14 0.0412674 3.50153 25 | 1.87206e+14 0.0389161 3.73074 26 | 1.87456e+14 0.0362818 3.97505 27 | 1.87707e+14 0.0335257 4.2385 28 | 1.87958e+14 0.0308452 4.52533 29 | 1.88208e+14 0.0284705 4.83877 30 | 1.88459e+14 0.0266425 5.17861 31 | 1.88709e+14 0.0255645 5.53847 32 | 1.8896e+14 0.0253303 5.9052 33 | 1.89211e+14 0.0258769 6.26335 34 | 1.89461e+14 0.0270043 6.60157 35 | 1.89712e+14 0.0284476 6.91553 36 | 1.89963e+14 0.0299472 7.20648 37 | 1.90213e+14 0.0312853 7.47828 38 | 1.90464e+14 0.0322967 7.73547 39 | 1.90714e+14 0.0328662 7.98239 40 | 1.90965e+14 0.0329234 8.22293 41 | 1.91216e+14 0.0324372 8.46075 42 | 1.91466e+14 0.031412 8.69949 43 | 1.91717e+14 0.0298857 8.94318 44 | 1.91967e+14 0.0279305 9.19664 45 | 1.92218e+14 0.0256569 9.46612 46 | 1.92469e+14 0.0232234 9.75976 47 | 1.92719e+14 0.0208527 10.0876 48 | 1.9297e+14 0.0188466 10.4593 49 | 1.9322e+14 0.0175707 10.8761 50 | 1.93471e+14 0.0173502 11.32 51 | 1.93722e+14 0.0182895 11.7553 52 | 1.93972e+14 0.0202054 12.1523 53 | 1.94223e+14 0.0227641 12.5029 54 | 1.94474e+14 0.0256401 12.8136 55 | 1.94724e+14 0.0285779 13.0945 56 | 1.94975e+14 0.031389 13.3552 57 | 1.95225e+14 0.0339355 13.6025 58 | 1.95476e+14 0.0361162 13.842 59 | 1.95727e+14 0.0378587 14.0776 60 | 1.95977e+14 0.0391163 14.3125 61 | 1.96228e+14 0.0398676 14.5494 62 | 1.96478e+14 0.0401167 14.7905 63 | 1.96729e+14 0.0398956 15.0379 64 | 1.9698e+14 0.0392645 15.2936 65 | 1.9723e+14 0.038311 15.5593 66 | 1.97481e+14 0.0371471 15.8363 67 | 1.97731e+14 0.0358999 16.1252 68 | 1.97982e+14 0.0346989 16.4257 69 | 1.98233e+14 0.0336552 16.7358 70 | 1.98483e+14 0.0328401 17.052 71 | 1.98734e+14 0.0322654 17.3698 72 | 1.98985e+14 0.0318775 17.6844 73 | 1.99235e+14 0.0315661 17.9919 74 | 1.99486e+14 0.0311857 18.2901 75 | 1.99736e+14 0.0305807 18.5784 76 | 1.99987e+14 0.0296075 18.8575 77 | 2.00238e+14 0.0281503 19.1297 78 | 2.00488e+14 0.0261306 19.3982 79 | 2.00739e+14 0.0235139 19.6682 80 | 2.00989e+14 0.0203157 19.9481 81 | 2.0124e+14 0.0166184 20.2546 82 | 2.01491e+14 0.0126282 20.6258 83 | 2.01741e+14 0.0089033 21.1622 84 | 2.01992e+14 0.00711102 22.0281 85 | 2.02242e+14 0.00920824 22.9015 86 | 2.02493e+14 0.0137194 23.4358 87 | 2.02744e+14 0.0189983 23.7909 88 | 2.02994e+14 0.0244213 24.0707 89 | 2.03245e+14 0.0296939 24.3142 90 | 2.03495e+14 0.0346201 24.538 91 | 2.03746e+14 0.0390436 24.7503 92 | 2.03997e+14 0.0428312 24.9556 93 | 2.04247e+14 0.0458669 25.157 94 | 2.04498e+14 0.0480506 25.3569 95 | 2.04749e+14 0.0492989 25.5572 96 | 2.04999e+14 0.0495468 25.7599 97 | 2.0525e+14 0.0487523 25.9674 98 | 2.055e+14 0.0469032 26.1822 99 | 2.05751e+14 0.0440268 26.4084 100 | 2.06002e+14 0.0402068 26.6517 101 | 2.06252e+14 0.0356114 26.9219 102 | 2.06503e+14 0.0305478 27.2351 103 | 2.06753e+14 0.0255761 27.6192 104 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | # Book settings 2 | # Learn more at https://jupyterbook.org/customize/config.html 3 | 4 | title: simphony 5 | author: Sequoia Ploeg, et al. 6 | copyright: 2019-2024 Simphony Project Contributors 7 | logo: simphony_logo.png 8 | 9 | exclude_patterns: [_build, Thumbs.db, .DS_Store, "**.ipynb_checkpoints"] 10 | # only_build_toc_files: false 11 | 12 | # Force re-execution of notebooks on each build. 13 | # See https://jupyterbook.org/content/execute.html 14 | execute: 15 | execute_notebooks: off #force 16 | 17 | parse: 18 | myst_enable_extensions: 19 | - amsmath 20 | - colon_fence 21 | - deflist 22 | - dollarmath 23 | - html_admonition 24 | - html_image 25 | - linkify 26 | - replacements 27 | - smartquotes 28 | - substitution 29 | - tasklist 30 | myst_url_schemes: [mailto, http, https] 31 | myst_dmath_double_inline: true 32 | 33 | # Define the name of the latex output file for PDF builds 34 | latex: 35 | latex_documents: 36 | targetname: book.tex 37 | 38 | # Add a bibtex file so that we can create citations 39 | bibtex_bibfiles: 40 | - references.bib 41 | 42 | # Information about where the book exists on the web 43 | repository: 44 | url: https://github.com/BYUCamachoLab/simphony # Online location of your book 45 | path_to_book: docs # Optional path to your book, relative to the repository root 46 | branch: master # Which branch of the repository should be used when creating links (optional) 47 | 48 | # Add GitHub buttons to your book 49 | # See https://jupyterbook.org/customize/config.html#add-a-link-to-your-repository 50 | html: 51 | # favicon: "" 52 | use_edit_page_button: true 53 | use_issues_button: true 54 | use_repository_button: true 55 | # use_multitoc_numbering: true 56 | # extra_footer: "" 57 | # google_analytics_id: "" 58 | home_page_in_navbar: false 59 | # baseurl: "" 60 | announcement: "⚠️ Version 0.7.0 is incompatible with previous versions of simphony. ⚠️" 61 | # footer_items: [] 62 | 63 | sphinx: 64 | extra_extensions: 65 | - 'sphinx.ext.autodoc' 66 | # - 'sphinx.ext.coverage' 67 | - 'sphinx.ext.autodoc.typehints' 68 | - 'sphinx.ext.autosummary' 69 | - 'sphinx.ext.intersphinx' 70 | - 'sphinx.ext.napoleon' 71 | - 'sphinx.ext.viewcode' 72 | - 'sphinx_design' 73 | # - 'numpydoc' 74 | # - 'matplotlib.sphinxext.mathmpl' 75 | # - 'matplotlib.sphinxext.plot_directive' 76 | config: 77 | # numpydoc_class_members_toctree: False 78 | add_module_names: False 79 | autodoc_typehints: 'signature' 80 | autodoc_mock_imports: ["SiPANN"] 81 | autodoc_default_options: {"show-inheritance": true} 82 | autosummary_generate: True 83 | autodoc_member_order: 'bysource' 84 | autoclass_content: "class" 85 | autodoc_inherit_docstrings: true 86 | html_static_path: ['_static'] 87 | # html_css_files: [] 88 | templates_path: ['_templates'] 89 | # mathjax_path: https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js 90 | intersphinx_mapping: 91 | sipann: 92 | - "https://sipann.readthedocs.io/en/latest/" 93 | - null 94 | sax: 95 | - "https://flaport.github.io/sax/index.html" 96 | - "objects.inv" 97 | language: en 98 | 99 | # For speedup, decide which plot_formats to build based on build targets: 100 | # html only -> png 101 | # latex only -> pdf 102 | # all other cases, including html + latex -> png, pdf 103 | # For simplicity, we assume that the build targets appear in the command line. 104 | # We're falling back on using all formats in case that assumption fails. 105 | # formats = {'html': ('png', 100), 'latex': ('pdf', 100)} 106 | # plot_formats = [formats[target] for target in ['html', 'latex'] 107 | # if target in sys.argv] or list(formats.values()) 108 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "simphony" 3 | version = "0.7.3" 4 | description = "Simphony: A simulator for photonic circuits" 5 | readme = "README.md" 6 | requires-python = ">=3.9" 7 | license = {text = "MIT"} 8 | keywords = ["photonics", "simulation", "circuits", "science", "engineering", "physics", "interconnect"] 9 | 10 | # This should be your name or the name of the organization who originally 11 | # authored the project, and a valid email address corresponding to the name 12 | # listed. 13 | authors = [ 14 | {name = "Sequoia Ploeg", email = "sequoiap4@gmail.com" }, 15 | {name = "Hyrum Gunther"}, 16 | {name = "BYU CamachoLab", email = "camacho@byu.edu"} 17 | ] 18 | 19 | # This should be your name or the names of the organization who currently 20 | # maintains the project, and a valid email address corresponding to the name 21 | # listed. 22 | maintainers = [ 23 | {name = "Sequoia Ploeg", email = "sequoiap4@gmail.com"}, 24 | {name = "Christian Carver", email = "cjcarv3r@byu.edu"}, 25 | {name = "BYU CamachoLab", email = "camacho@byu.edu"} 26 | ] 27 | 28 | classifiers = [ 29 | "Development Status :: 4 - Beta", 30 | "Intended Audience :: Education", 31 | "Intended Audience :: Science/Research", 32 | "Intended Audience :: Developers", 33 | "Topic :: Scientific/Engineering", 34 | "License :: OSI Approved :: MIT License", 35 | "Programming Language :: Python :: 3", 36 | "Programming Language :: Python :: 3.9", 37 | "Programming Language :: Python :: 3.10", 38 | "Programming Language :: Python :: 3.11", 39 | "Programming Language :: Python :: 3.12", 40 | "Programming Language :: Python :: 3 :: Only", 41 | "Operating System :: MacOS", 42 | "Operating System :: Microsoft :: Windows", 43 | "Operating System :: POSIX :: Linux", 44 | "Operating System :: OS Independent", 45 | ] 46 | 47 | dependencies = [ 48 | "scipy >= 1.5.4", 49 | "numpy >= 1.19.5", 50 | "sax < 0.15.0", 51 | "jax >= 0.4.18", 52 | "pandas >= 2.0.0", 53 | "lark ~= 1.1.5", 54 | "tabulate ~= 0.9.0", 55 | "deprecation ~= 2.1.0", 56 | "parsimonious ~= 0.10.0", 57 | ] 58 | 59 | [project.optional-dependencies] 60 | cpu = ["jax[cpu]"] 61 | gdsfactory = ["gdsfactory"] 62 | sipann = ["SiPANN"] 63 | dev = [ 64 | "pre-commit", 65 | "matplotlib", 66 | "bump2version~=1.0.0", 67 | "flake8", 68 | "pytest", 69 | "coverage", 70 | "build", 71 | "pytest", 72 | "tox", 73 | ] 74 | doc = [ 75 | "jupyter-book ~= 0.13.2", 76 | "matplotlib >= 3.7.1", 77 | # "numpydoc == 1.6.0", 78 | "jsonschema <= 4.17.3", 79 | "referencing <= 0.8.11", 80 | ] 81 | test = [ 82 | "pytest", 83 | "coverage", 84 | ] 85 | 86 | [project.urls] 87 | "Homepage" = "https://simphonyphotonics.readthedocs.io/en/stable/" 88 | "Documentation" = "https://simphonyphotonics.readthedocs.io/en/stable/" 89 | "Source" = "https://github.com/BYUCamachoLab/simphony" 90 | "Bug Reports" = "https://github.com/BYUCamachoLab/simphony/issues" 91 | "Research Group" = "https://camacholab.byu.edu/" 92 | 93 | # [tool.setuptools] 94 | # include-package-data = true 95 | # package-data = {"sample" = ["*.dat"]} 96 | 97 | [tool.setuptools.packages.find] 98 | include = ["simphony"] 99 | namespaces = false 100 | 101 | # [tool.setuptools.package-data] 102 | # simphony = ["*.xml", "*.txt", "*.dat"] 103 | 104 | # [tool.setuptools.packages.find] 105 | # where = ["."] 106 | 107 | # [project.scripts] 108 | # simphony = "simphony.cli:app" 109 | 110 | [tool.pytest.ini_options] 111 | minversion = "6.0" 112 | testpaths = ["tests"] 113 | console_output_style = "progress" 114 | filterwarnings = ["ignore::UserWarning", "ignore::DeprecationWarning"] 115 | 116 | [tool.isort] 117 | profile = "black" 118 | multi_line_output = 3 119 | include_trailing_comma = true 120 | force_grid_wrap = 0 121 | use_parentheses = true 122 | line_length = 88 123 | known_third_party = ["SiPANN", "gdsfactory", "jax", "matplotlib", "numpy", "packaging", "parsimonious", "pytest", "scipy"] 124 | known_first_party = ["simphony"] 125 | 126 | [build-system] 127 | requires = ["setuptools>=62.0.0", "wheel", "pip<=23.1.2"] 128 | build-backend = "setuptools.build_meta" 129 | -------------------------------------------------------------------------------- /tests/libraries/siepic/test_siepic_models.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from simphony.libraries import siepic 4 | 5 | 6 | class TestBidirectional_coupler: 7 | def test_invalid_parameters(self): 8 | with pytest.raises(TypeError): 9 | siepic.bidirectional_coupler(pol="tem") 10 | with pytest.raises(TypeError): 11 | siepic.bidirectional_coupler(pol="te", thickness=200) 12 | 13 | def test_instantiable(self): 14 | siepic.bidirectional_coupler(thickness=220, width=500) 15 | 16 | def test_s_params(self, std_wl_um): 17 | siepic.bidirectional_coupler(wl=std_wl_um) 18 | 19 | 20 | class Testdirectional_coupler: 21 | def test_invalid_parameters(self): 22 | with pytest.raises(FileNotFoundError): 23 | siepic.directional_coupler(gap=300) 24 | 25 | def test_instantiable(self): 26 | siepic.directional_coupler(gap=200, coupling_length=45) 27 | 28 | def test_s_params(self, std_wl_um): 29 | siepic.directional_coupler(wl=std_wl_um, gap=200, coupling_length=45) 30 | 31 | 32 | class Testgrating_coupler: 33 | def test_invalid_parameters(self): 34 | with pytest.raises(ValueError): 35 | siepic.grating_coupler(pol="tem") 36 | with pytest.raises(ValueError): 37 | siepic.grating_coupler(pol="te", thickness=200) 38 | 39 | def test_instantiable(self): 40 | siepic.grating_coupler(pol="te", thickness=220, dwidth=0) 41 | 42 | def test_s_params(self, std_wl_um): 43 | siepic.grating_coupler(wl=std_wl_um, pol="te") 44 | 45 | 46 | class Testhalf_ring: 47 | def test_invalid_parameters(self): 48 | with pytest.raises(ValueError): 49 | siepic.half_ring(pol="tem") 50 | with pytest.raises(FileNotFoundError): 51 | siepic.half_ring(pol="te", gap=30, radius=10) 52 | 53 | def test_instantiable(self): 54 | siepic.half_ring( 55 | pol="te", gap=50, radius=5, width=500, thickness=220, coupling_length=0 56 | ) 57 | 58 | def test_s_params(self, std_wl_um): 59 | siepic.half_ring( 60 | wl=std_wl_um, 61 | pol="te", 62 | gap=50, 63 | radius=5, 64 | width=500, 65 | thickness=220, 66 | coupling_length=0, 67 | ) 68 | 69 | 70 | class Testtaper: 71 | def test_invalid_parameters(self): 72 | with pytest.raises(FileNotFoundError): 73 | siepic.taper(w1=0.3) 74 | with pytest.raises(FileNotFoundError): 75 | siepic.taper(w2=0.5) 76 | 77 | def test_instantiable(self): 78 | siepic.taper(w1=0.5, w2=1.0, length=10.0) 79 | 80 | def test_s_params(self, std_wl_um): 81 | siepic.taper(wl=std_wl_um, w1=0.5, w2=1.0, length=10.0) 82 | 83 | 84 | class Testterminator: 85 | def test_invalid_parameters(self): 86 | with pytest.raises(ValueError): 87 | siepic.terminator(pol="tem") 88 | 89 | def test_instantiable(self): 90 | siepic.terminator(pol="te") 91 | siepic.terminator(pol="tm") 92 | 93 | def test_s_params(self, std_wl_um): 94 | siepic.terminator(wl=std_wl_um, pol="te") 95 | siepic.terminator(wl=std_wl_um, pol="tm") 96 | 97 | 98 | class Testwaveguide: 99 | def test_invalid_parameters(self): 100 | with pytest.raises(ValueError): 101 | siepic.waveguide(pol="tem") 102 | with pytest.raises(FileNotFoundError): 103 | siepic.waveguide(height=200) 104 | 105 | def test_instantiable(self): 106 | siepic.waveguide(pol="te", length=100, width=500, height=220, loss=2) 107 | 108 | def test_s_params(self, std_wl_um): 109 | siepic.waveguide( 110 | wl=std_wl_um, pol="te", length=100, width=500, height=220, loss=2 111 | ) 112 | 113 | 114 | class Testy_branch: 115 | def test_invalid_parameters(self): 116 | with pytest.raises(ValueError): 117 | siepic.y_branch(pol="tem") 118 | 119 | def test_instantiable(self): 120 | siepic.y_branch(pol="te", thickness=220, width=500) 121 | 122 | def test_s_params(self, std_wl_um): 123 | siepic.y_branch(wl=std_wl_um, pol="te") 124 | -------------------------------------------------------------------------------- /examples/subnetwork_growth.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Copyright © Simphony Project Contributors 3 | # Licensed under the terms of the MIT License 4 | # (see simphony/__init__.py for details) 5 | # 6 | # This file is deprecated and will not run with the latest version of simphony. 7 | # It is retained for legacy purposes only. 8 | r""" 9 | subnetwork_growth.py 10 | -------------------- 11 | 12 | Author: Sequoia Ploeg 13 | Modified: April 2, 2020 14 | 15 | A simple, non-abstracted script that demonstrates the process of subnetwork 16 | growth using the base functions in simphony. In this example, we construct 17 | a 10-micron ring resonator with an input port, a through-port, and a drop-port. 18 | 19 | The half-ring model provided by SiPANN (and available in the simphony 20 | library) has ports that, corresponding to its s-matrix, are ordered like so 21 | (zero-indexed): 22 | 23 | 1 3 24 | | | 25 | \ / 26 | \ / 27 | ---=====--- 28 | 0 2 29 | 30 | A ring resonator is simply two half-rings cascaded together. Our configuration 31 | will look like two of the above half-rings, rotated and placed next to each 32 | other: 33 | 34 | Ring (L) Ring (R) 35 | 0 1 3 2 36 | | --- --- | 37 | | / \ | 38 | || || 39 | | \ / | 40 | | --- --- | 41 | 2 3 1 0 42 | 0 43 | | <- Terminator 44 | 45 | A description of subnetwork growth can be found in the paper introducing 46 | Simphony. But briefly, cascading networks involves placing them into a large 47 | matrix and performing operations that depend on whether its an internal 48 | connection (same network, two ports connected) or an external connection. By 49 | the end of the subnetwork growth process, the entire network is unified. 50 | Connecting two independenet networks creates one new network with all the 51 | leftover, unconnected ports of the original two networks. 52 | 53 | One cascading order is shown below. Two cascading orders are demonstrated in 54 | the code, with their results plotted on top of each other, showing their 55 | equivalence. 56 | 57 | In this example, intermediary networks are numbered 'n_i'. 58 | 59 | n1: 60 | Ring (L) Ring (R) 61 | 0 5 62 | | ------------ | 63 | | / \ | 64 | || || 65 | | \ / | 66 | | --- --- | 67 | 1 2 4 3 68 | 0 69 | | <- Terminator 70 | 71 | n2: 72 | Ring (L) Ring (R) 73 | 0 3 74 | | ------------ | 75 | | / \ | 76 | || || 77 | | \ / | 78 | | ------------ | 79 | 1 2 80 | 0 81 | | <- Terminator 82 | 83 | n3: 84 | Ring (L) Ring (R) 85 | 0 3 86 | | ------------ | 87 | | / \ | 88 | || || 89 | | \ / | 90 | | ------------ | 91 | | 2 92 | | <- Terminator 93 | 94 | You can see that in the final network, our input port is port 3, our through 95 | port is port 2, and our drop port is port 0. 96 | 97 | To get the transmission from input to output in the s-matrix, the indexing is 98 | ``s[out, in]``. 99 | """ 100 | 101 | import matplotlib.pyplot as plt 102 | import numpy as np 103 | 104 | from simphony.connect import connect_s, innerconnect_s 105 | from simphony.libraries import siepic, sipann 106 | from simphony.tools import wl2freq 107 | 108 | # First, we'll set up the frequency range we wish to perform the simulation on. 109 | freqs = np.linspace(wl2freq(1600e-9), wl2freq(1500e-9), 2000) 110 | 111 | # Get the scattering parameters for each of the elements in our network. 112 | half_ring_left = sipann.HalfRing( 113 | width=500e-9, thickness=220e-9, radius=10e-6, gap=220e-9 114 | ).s_parameters(freqs) 115 | half_ring_right = sipann.HalfRing( 116 | width=500e-9, thickness=220e-9, radius=10e-6, gap=220e-9 117 | ).s_parameters(freqs) 118 | term = siepic.Terminator().s_parameters(freqs) 119 | 120 | # CONFIGURATION 1 121 | n1 = connect_s(half_ring_left, 1, half_ring_right, 3) 122 | n2 = innerconnect_s(n1, 2, 4) 123 | n3 = connect_s(n2, 1, term, 0) 124 | 125 | # CONFIGURATION 2 126 | m1 = connect_s(half_ring_right, 1, half_ring_left, 3) 127 | m2 = innerconnect_s(m1, 2, 4) 128 | m3 = connect_s(term, 0, m2, 3) 129 | 130 | plt.plot(freqs, np.abs(n3[:, 1, 2]) ** 2, "b.") 131 | plt.plot(freqs, np.abs(m3[:, 0, 1]) ** 2, "r--") 132 | plt.tight_layout() 133 | plt.show() 134 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/ebeam_dc_te1550/dc_map.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 0 6 | 7 | 8 | dc_gap=200nm_Lc=0um.sparam 9 | 10 | 11 | 12 | 13 | 2.5e-06 14 | 15 | 16 | dc_gap=200nm_Lc=2.5um.sparam 17 | 18 | 19 | 20 | 21 | 5e-06 22 | 23 | 24 | dc_gap=200nm_Lc=5um.sparam 25 | 26 | 27 | 28 | 29 | 7.5e-06 30 | 31 | 32 | dc_gap=200nm_Lc=7.5um.sparam 33 | 34 | 35 | 36 | 37 | 1e-05 38 | 39 | 40 | dc_gap=200nm_Lc=10um.sparam 41 | 42 | 43 | 44 | 45 | 1.25e-05 46 | 47 | 48 | dc_gap=200nm_Lc=12.5um.sparam 49 | 50 | 51 | 52 | 53 | 1.5e-05 54 | 55 | 56 | dc_gap=200nm_Lc=15um.sparam 57 | 58 | 59 | 60 | 61 | 1.75e-05 62 | 63 | 64 | dc_gap=200nm_Lc=17.5um.sparam 65 | 66 | 67 | 68 | 69 | 2e-05 70 | 71 | 72 | dc_gap=200nm_Lc=20um.sparam 73 | 74 | 75 | 76 | 77 | 2.25e-05 78 | 79 | 80 | dc_gap=200nm_Lc=22.5um.sparam 81 | 82 | 83 | 84 | 85 | 2.5e-05 86 | 87 | 88 | dc_gap=200nm_Lc=25um.sparam 89 | 90 | 91 | 92 | 93 | 2.75e-05 94 | 95 | 96 | dc_gap=200nm_Lc=27.5um.sparam 97 | 98 | 99 | 100 | 101 | 3e-05 102 | 103 | 104 | dc_gap=200nm_Lc=30um.sparam 105 | 106 | 107 | 108 | 109 | 3.25e-05 110 | 111 | 112 | dc_gap=200nm_Lc=32.5um.sparam 113 | 114 | 115 | 116 | 117 | 3.5e-05 118 | 119 | 120 | dc_gap=200nm_Lc=35um.sparam 121 | 122 | 123 | 124 | 125 | 3.75e-05 126 | 127 | 128 | dc_gap=200nm_Lc=37.5um.sparam 129 | 130 | 131 | 132 | 133 | 4e-05 134 | 135 | 136 | dc_gap=200nm_Lc=40um.sparam 137 | 138 | 139 | 140 | 141 | 4.25e-05 142 | 143 | 144 | dc_gap=200nm_Lc=42.5um.sparam 145 | 146 | 147 | 148 | 149 | 4.5e-05 150 | 151 | 152 | dc_gap=200nm_Lc=45um.sparam 153 | 154 | 155 | 156 | 157 | 4.75e-05 158 | 159 | 160 | dc_gap=200nm_Lc=47.5um.sparam 161 | 162 | -------------------------------------------------------------------------------- /simphony/libraries/siepic/source_data/CDC/write_sparams.lsf: -------------------------------------------------------------------------------- 1 | #clear; 2 | matlabload('ContraDC_sparams.dat'); 3 | lambda = lambda*1e-9; 4 | f = transpose(c/lambda); 5 | 6 | 7 | #mode_label = "TE"; 8 | #mode_ID = "1"; 9 | #sfile = 'ContraDC_sparams.dat'; 10 | 11 | S11 = transpose(S11); 12 | S21 = transpose(S21); 13 | S31 = transpose(S31); 14 | S41 = transpose(S41); 15 | 16 | S12 = transpose(S12); 17 | S22 = transpose(S22); 18 | S32 = transpose(S32); 19 | S42 = transpose(S42); 20 | 21 | S13 = transpose(S13); 22 | S23 = transpose(S23); 23 | S33 = transpose(S33); 24 | S43 = transpose(S43); 25 | 26 | S14 = transpose(S14); 27 | S24 = transpose(S24); 28 | S34 = transpose(S34); 29 | S44 = transpose(S44); 30 | 31 | # test passivity of S matrix 32 | make_plot=1; 33 | FREQ_PTS=length(S11); 34 | S_norm = matrix(1,FREQ_PTS); 35 | S_err = S_norm; 36 | for (ff=1:FREQ_PTS) 37 | { 38 | S=[unique(S11(ff)),unique(S12(ff)),unique(S13(ff)),unique(S14(ff)); 39 | unique(S21(ff)),unique(S22(ff)),unique(S23(ff)),unique(S24(ff)); 40 | unique(S31(ff)),unique(S32(ff)),unique(S33(ff)),unique(S34(ff)); 41 | unique(S41(ff)),unique(S42(ff)),unique(S43(ff)),unique(S44(ff))]; 42 | 43 | S_norm(ff) = norm(S); 44 | S_err(ff) = max(abs(S-transpose(S))); 45 | } 46 | 47 | if (max(S_err) > 0.05){ 48 | ? '******* Warning: S parameters violate reciprocity by more than 5% *********'; 49 | } 50 | 51 | if (max(S_norm) > 1+1e-6){ 52 | ? '******* Warning: S parameters not passive *********'; 53 | ?max(S_norm); 54 | 55 | ? 'scaled S parameters to make passive'; 56 | scale_factor = 1/max(S_norm)*0.9999999; 57 | 58 | scale_s_parameters; 59 | } 60 | else { 61 | ? '******* S paramters are passive ********'; 62 | } 63 | if (make_plot==1 ){ 64 | plot(f, S_norm, 'Wavelength (um)', 'Norm |S|'); 65 | plot(c/f*1e6, S_err, 'Wavelength (um)', 'abs(S-transpose(S))', 'Reciprocity'); 66 | } 67 | 68 | 69 | # prepare data and write 70 | 71 | if (fileexists(sfile)) { 72 | rm(sfile); 73 | } 74 | 75 | S11_data=[f,abs(S11),unwrap(angle(S11))]; 76 | write(sfile,"('port 1',"+mode_label+','+mode_ID+','+"'port 1',"+mode_ID+','+"'transmission')" 77 | +endl+"(" 78 | +num2str(length(f)) 79 | +",3)" 80 | +endl+num2str(S11_data) 81 | ); 82 | S21_data=[f,abs(S21),unwrap(angle(S21))]; 83 | write(sfile,"('port 2',"+mode_label+','+mode_ID+','+"'port 1',"+mode_ID+','+"'transmission')" 84 | +endl+"(" 85 | +num2str(length(f)) 86 | +",3)" 87 | +endl+num2str(S21_data) 88 | ); 89 | S31_data=[f,abs(S31),unwrap(angle(S31))]; 90 | write(sfile,"('port 3',"+mode_label+','+mode_ID+','+"'port 1',"+mode_ID+','+"'transmission')" 91 | +endl+"(" 92 | +num2str(length(f)) 93 | +",3)" 94 | +endl+num2str(S31_data) 95 | ); 96 | S41_data=[f,abs(S41),unwrap(angle(S41))]; 97 | write(sfile,"('port 4',"+mode_label+','+mode_ID+','+"'port 1',"+mode_ID+','+"'transmission')" 98 | +endl+"(" 99 | +num2str(length(f)) 100 | +",3)" 101 | +endl+num2str(S41_data) 102 | ); 103 | 104 | S12_data=[f,abs(S12),unwrap(angle(S12))]; 105 | write(sfile,"('port 1',"+mode_label+','+mode_ID+','+"'port 2',"+mode_ID+','+"'transmission')" 106 | +endl+"(" 107 | +num2str(length(f)) 108 | +",3)" 109 | +endl+num2str(S12_data) 110 | ); 111 | S22_data=[f,abs(S22),unwrap(angle(S22))]; 112 | write(sfile,"('port 2',"+mode_label+','+mode_ID+','+"'port 2',"+mode_ID+','+"'transmission')" 113 | +endl+"(" 114 | +num2str(length(f)) 115 | +",3)" 116 | +endl+num2str(S22_data) 117 | ); 118 | S32_data=[f,abs(S32),unwrap(angle(S32))]; 119 | write(sfile,"('port 3',"+mode_label+','+mode_ID+','+"'port 2',"+mode_ID+','+"'transmission')" 120 | +endl+"(" 121 | +num2str(length(f)) 122 | +",3)" 123 | +endl+num2str(S32_data) 124 | ); 125 | S42_data=[f,abs(S42),unwrap(angle(S42))]; 126 | write(sfile,"('port 4',"+mode_label+','+mode_ID+','+"'port 2',"+mode_ID+','+"'transmission')" 127 | +endl+"(" 128 | +num2str(length(f)) 129 | +",3)" 130 | +endl+num2str(S42_data) 131 | ); 132 | 133 | S13_data=[f,abs(S13),unwrap(angle(S13))]; 134 | write(sfile,"('port 1',"+mode_label+','+mode_ID+','+"'port 3',"+mode_ID+','+"'transmission')" 135 | +endl+"(" 136 | +num2str(length(f)) 137 | +",3)" 138 | +endl+num2str(S13_data) 139 | ); 140 | S23_data=[f,abs(S23),unwrap(angle(S23))]; 141 | write(sfile,"('port 2',"+mode_label+','+mode_ID+','+"'port 3',"+mode_ID+','+"'transmission')" 142 | +endl+"(" 143 | +num2str(length(f)) 144 | +",3)" 145 | +endl+num2str(S23_data) 146 | ); 147 | S33_data=[f,abs(S33),unwrap(angle(S33))]; 148 | write(sfile,"('port 3',"+mode_label+','+mode_ID+','+"'port 3',"+mode_ID+','+"'transmission')" 149 | +endl+"(" 150 | +num2str(length(f)) 151 | +",3)" 152 | +endl+num2str(S33_data) 153 | ); 154 | S43_data=[f,abs(S43),unwrap(angle(S43))]; 155 | write(sfile,"('port 4',"+mode_label+','+mode_ID+','+"'port 3',"+mode_ID+','+"'transmission')" 156 | +endl+"(" 157 | +num2str(length(f)) 158 | +",3)" 159 | +endl+num2str(S43_data) 160 | ); 161 | 162 | S14_data=[f,abs(S14),unwrap(angle(S14))]; 163 | write(sfile,"('port 1',"+mode_label+','+mode_ID+','+"'port 4',"+mode_ID+','+"'transmission')" 164 | +endl+"(" 165 | +num2str(length(f)) 166 | +",3)" 167 | +endl+num2str(S14_data) 168 | ); 169 | S24_data=[f,abs(S24),unwrap(angle(S24))]; 170 | write(sfile,"('port 2',"+mode_label+','+mode_ID+','+"'port 4',"+mode_ID+','+"'transmission')" 171 | +endl+"(" 172 | +num2str(length(f)) 173 | +",3)" 174 | +endl+num2str(S24_data) 175 | ); 176 | S34_data=[f,abs(S34),unwrap(angle(S34))]; 177 | write(sfile,"('port 3',"+mode_label+','+mode_ID+','+"'port 4',"+mode_ID+','+"'transmission')" 178 | +endl+"(" 179 | +num2str(length(f)) 180 | +",3)" 181 | +endl+num2str(S34_data) 182 | ); 183 | S44_data=[f,abs(S44),unwrap(angle(S44))]; 184 | write(sfile,"('port 4',"+mode_label+','+mode_ID+','+"'port 4',"+mode_ID+','+"'transmission')" 185 | +endl+"(" 186 | +num2str(length(f)) 187 | +",3)" 188 | +endl+num2str(S44_data) 189 | ); -------------------------------------------------------------------------------- /docs/dev/developing.md: -------------------------------------------------------------------------------- 1 | (developing)= 2 | # Maintaining and developing 3 | 4 | This will be a guide in how to contribute to Simphony by writing code. We will go over how to set up a development 5 | environment, testing, how to make a pull request, and how to release a version of Simphony. This guide assumes you have 6 | a good understanding of Python development and Git. 7 | 8 | ## Setting up the environment 9 | 10 | Simphony is a Python 3 package, and so we recommend using the built-in ``venv`` module for Python 3 to [create a virtual 11 | environment](https://docs.python.org/3/tutorial/venv.html). From this point forwards, all commands that we provide 12 | assume that your new virtual environment is activated. 13 | 14 | After creating and activating your virtual environment, go to the [Simphony Github 15 | page](https://github.com/BYUCamachoLab/simphony) and fork the project. You should now have your own copy of the 16 | repository on Github. Run: 17 | 18 | ```bash 19 | git clone https://github.com/[your username]/simphony.git 20 | ``` 21 | 22 | to download the Github repository onto your machine. You will also want to run: 23 | 24 | ```bash 25 | git remote add upstream https://github.com/BYUCamachoLab/simphony.git 26 | ``` 27 | 28 | This will allow you to pull any changes made to the original repository. 29 | 30 | Once those steps are complete, run the command: 31 | 32 | ```bash 33 | make install 34 | ``` 35 | 36 | in the root directory of Simphony. This will build the development version of Simphony as a package in your virtual 37 | environment. The build will update whenever you update Simphony code on your machine, allowing you to use/import the 38 | development version in Python files. 39 | 40 | It will also install pre-commit, which will run some sanity checks each time you commit code. 41 | 42 | You can now start writing your changes to Simphony code. Make sure to always pull changes from upstream before starting 43 | development. 44 | 45 | ## Testing 46 | 47 | We expect code to be thoroughly tested before it gets merged with the main Simphony repository. 48 | 49 | In Simphony, we include a ``tests`` directory inside main sections of code, where we write tests using the [pytest 50 | framework](https://docs.pytest.org/en/latest/). You should write new tests in these test directories for any new code 51 | you develop. 52 | 53 | Your code should pass all existing tests before submitting a pull request. Any time you make a commit, a pre-commit hook 54 | will run some basic tests and formatters. To run all tests, run the command: 55 | 56 | ```bash 57 | make test 58 | ``` 59 | 60 | in the root directory of Simphony. This will also produce a coverage report, displaying what percentage of the codebase 61 | is covered by tests. You may also wish to run an individual test, by using: 62 | 63 | ```bash 64 | pytest path_to_test/test_file.py 65 | ``` 66 | 67 | Specific formatting issues must also be checked before changes will be merged. You can check all formatting issues 68 | using: 69 | 70 | ```bash 71 | flake8 72 | ``` 73 | 74 | A final check you may perform before submitting any pull requests is to ensure that your Simphony package will install 75 | properly. This is mainly necessary if you intend to release a new version of Simphony. To test this, create a new 76 | virtual environment, create the build artifacts, and then install from the generated file. 77 | 78 | ```bash 79 | # create and activate your virtual environment first 80 | make build 81 | pip install dist/simphony-[VERSION].tar.gz 82 | ``` 83 | 84 | ## Pull requests 85 | 86 | After you've made your changes and have done the testing steps above, you're ready to make a pull request. Push your 87 | changes to your Github fork, and navigate to the fork's page on Github. You should see a button that will create a pull 88 | request for you. 89 | 90 | Reviewers will look over your pull request before merging your changes into the main repository, so we expect you to 91 | write a clear and concise explanation of your changes attached to your pull request. If your changes are extensive, you 92 | will likely need to write more explanation, and perhaps explain the motivation for such extensive changes. Your 93 | description of the changes you've made will be used when writing the release notes. 94 | 95 | Reviewers will comment on any last minute changes they want to see before merging, such as style and inline 96 | documentation, so make sure your code is polished before submitting a pull request. All documentation should follow the 97 | [numpydoc](https://numpydoc.readthedocs.io/en/latest/format.html) format. 98 | 99 | ```{note} 100 | If you need to make changes while a pull request is still 101 | being reviewed, just push your changes to your fork. 102 | The pull request will automatically update to match. 103 | ``` 104 | 105 | When you submit a pull request, automatic tests will trigger and run through Github's services. These must all pass 106 | before your pull request will be accepted. If any fail, click the red cross to pull up a test log, which will help you 107 | find out why they failed. Ideally, you will have tested your project before creating the pull request in the first 108 | place, so that these tests will not fail. 109 | 110 | Finally, when the reviewers believe that the pull request is ready, they will approve the pull request and it will be 111 | merged into the main repository. 112 | 113 | ## Releasing 114 | 115 | Most contributors won't have to worry about the release process, since this is up to the core development team. It may 116 | still be informative, so we include it here. 117 | 118 | The release process is handled by GitHub Actions. When the release script is triggered, it builds the package for Python 119 | 3.7-3.10 for Windows, Mac and Linux. It uploads the package to PyPI, creates a GitHub release, and updates the 120 | documentation to the most recent stable release. 121 | 122 | Before the release, all deprecated code should be removed, and a changelog entry should be written for the new version. 123 | For the changelog, follow the style of previous changelogs when writing. The documentation should be ready for build, 124 | see [](documenting.md) for how to build. Use [bump2version](https://github.com/c4urself/bump2version) to update the version number throughout the project. 125 | 126 | Once all of this is complete, run the bash script at ``scripts/release``, and the rest will be taken care of 127 | automatically. 128 | -------------------------------------------------------------------------------- /docs/tutorials/layout_aware.rst: -------------------------------------------------------------------------------- 1 | .. _example-layout_aware: 2 | 3 | Layout-Aware Monte Carlo Simulations for Yield Estimation 4 | ========================================================= 5 | 6 | Manufacturing variability can cause fabrication errors in waveguide width and thickness, 7 | which can affect the device performance. Hence, incorporating manufacturing variability 8 | into the photonic device design process is crucial. Simphony provides the ability to run 9 | layout-aware Monte Carlo simulations for yield estimation to aid in robust photonic device design. 10 | This tutorial will walk you through the codes found in ``examples/layout_aware.py`` of the Simphony repository. 11 | We expect you to have read the previous tutorial, :doc:`mzi`. 12 | 13 | 14 | The Workflow 15 | ------------ 16 | The workflow for running layout-aware Monte Carlo simulations is as follows: 17 | 18 | 1. instantiate the components 19 | 2. generate a layout using the components' ``component`` attributes 20 | 3. connect the components to form a circuit 21 | 4. run the simulation 22 | 5. extract and plot the results 23 | 24 | Example - Mach-Zehnder Interferometer (MZI) 25 | ------------------------------------------- 26 | We will run a layout-aware Monte Carlo simulation for the 27 | Mach-Zehnder Interferometer (MZI) described in the previous 28 | example. 29 | 30 | First we need to import the necessary Simphony modules. We will need the ``siepic`` model library, 31 | the ``Simulation``, ``Laser``, and ``Detector``. We will also need to import ``gdsfactory`` to generate the layout. 32 | We will also import ``matplotlib.pyplot``, from outside of Simphony, to view the results 33 | of our simulation. 34 | 35 | .. code-block:: python 36 | 37 | import gdsfactory as gf 38 | import matplotlib.pyplot as plt 39 | import numpy as np 40 | 41 | from simphony.libraries import siepic 42 | from simphony.simulation import Detector, Laser, Simulation 43 | 44 | We then create all the components and give them names. These 45 | include the grating couplers, the Y-branches, and the 46 | waveguides (which can be defined at any arbitrary length, 47 | on the condition that the two lengths are different). 48 | 49 | .. code-block:: python 50 | 51 | gc_input = siepic.GratingCoupler(name="gcinput") 52 | y_splitter = siepic.YBranch(name="ysplit") 53 | wg_long = siepic.Waveguide(length=150e-6, name="wglong") 54 | wg_short = siepic.Waveguide(length=50e-6, name="wgshort") 55 | y_recombiner = siepic.YBranch(name="y_recombiner") 56 | gc_output = siepic.GratingCoupler(name="gcoutput") 57 | 58 | We then use the components' ``component`` attributes to create the layout. 59 | The ``component`` attributes are ``gdsfactory.Component`` objects, and so can be used to create a 60 | layout. We will next define a Parametric Cell (PCell) for the MZI. We will connect 61 | the components to form a circuit, route the Waveguides using ``gdsfactory's`` routing functions. 62 | 63 | .. code-block:: python 64 | 65 | @gf.cell 66 | def mzi(): 67 | c = gf.Component("mzi") 68 | 69 | ysplit = c << y_splitter.component 70 | 71 | gcin = c << gc_input.component 72 | 73 | gcout = c << gc_output.component 74 | 75 | yrecomb = c << y_recombiner.component 76 | 77 | yrecomb.move(destination=(0, -55.5)) 78 | gcout.move(destination=(-20.4, -55.5)) 79 | gcin.move(destination=(-20.4, 0)) 80 | 81 | gc_input["pin1"].connect(y_splitter, gcin, ysplit) 82 | gc_output["pin1"].connect(y_recombiner["pin1"], gcout, yrecomb) 83 | y_splitter["pin2"].connect(wg_long) 84 | y_recombiner["pin3"].connect(wg_long) 85 | y_splitter["pin3"].connect(wg_short) 86 | y_recombiner["pin2"].connect(wg_short) 87 | 88 | wg_long_ref = gf.routing.get_route_from_steps( 89 | ysplit.ports["pin2"], 90 | yrecomb.ports["pin3"], 91 | steps=[{"dx": 91.75 / 2}, {"dy": -61}], 92 | ) 93 | wg_short_ref = gf.routing.get_route_from_steps( 94 | ysplit.ports["pin3"], 95 | yrecomb.ports["pin2"], 96 | steps=[{"dx": 47.25 / 2}, {"dy": -50}], 97 | ) 98 | 99 | wg_long.path = wg_long_ref 100 | wg_short.path = wg_short_ref 101 | 102 | c.add(wg_long_ref.references) 103 | c.add(wg_short_ref.references) 104 | 105 | c.add_port("o1", port=gcin.ports["pin2"]) 106 | c.add_port("o2", port=gcout.ports["pin2"]) 107 | 108 | return c 109 | 110 | We can then call the function, and visualize the layout in KLayout. 111 | 112 | .. code-block:: python 113 | 114 | c = mzi() 115 | c.show() 116 | 117 | .. image:: /_static/images/mzi_layout_aware.png 118 | :alt: layout 119 | :align: center 120 | 121 | We can also view a 3D representation of the layout. 122 | 123 | .. code-block:: python 124 | 125 | c.to_3d().show("gl") 126 | 127 | 128 | Layout-Aware Monte Carlo Simulation 129 | ----------------------------------- 130 | We use the ``Simulation`` class to run a simulation. We attach a ``Laser`` to one of the GratingCouplers, 131 | and a ``Detector`` to the other GratingCoupler. 132 | 133 | .. code-block:: python 134 | 135 | with Simulation() as sim: 136 | l = Laser(power=1) 137 | l.freqsweep(187370000000000.0, 199862000000000.0) 138 | l.connect(gc_input["pin2"]) 139 | d = Detector() 140 | d.connect(gc_output["pin2"]) 141 | 142 | results = sim.layout_aware_simulation(c) 143 | 144 | Here, we can pass in the standard deviations of the widths and thicknesses, as well as the correlation length 145 | as arguments to the ``layout_aware_simulation`` method. For this example, we use the default values. 146 | 147 | After the simulation is run, we can extract the results, and plot them. We will see several, slightly different curves 148 | due to random variations incorporated into the components' widths and thicknesses. 149 | 150 | .. code-block:: python 151 | 152 | f = l.freqs 153 | for run in results: 154 | p = [] 155 | for sample in run: 156 | for data_list in sample: 157 | for data in data_list: 158 | p.append(data) 159 | plt.plot(f, p) 160 | 161 | run_0 = results[0] 162 | p = [] 163 | for sample in run_0: 164 | for data_list in sample: 165 | for data in data_list: 166 | p.append(data) 167 | plt.plot(f, p, "k") 168 | plt.title("MZI Layout Aware Monte Carlo") 169 | plt.show() 170 | 171 | You should see something similar to this graph when you run 172 | your MZI now: 173 | 174 | .. image:: /_static/images/layout_aware.png 175 | :alt: layout-aware simulation 176 | :align: center 177 | 178 | From our data, we can then compute various performance markers which are sensitive 179 | to width and thickness variations. 180 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Simphony: A Simulator for Photonic Circuits 2 | 3 |
4 | Development version 5 | PyPI Version 6 | PyPI - Python Version 7 | Build Status 8 | pre-commit 9 | Documentation Status 10 | License 11 | Latest Commit 12 | 13 | Simphony logo 14 |
15 | 16 | Simphony, a simulator for photonic circuits, is a fundamental package for designing and simulating photonic integrated circuits with Python. 17 | 18 | **Key Features:** 19 | 20 | - Free and open-source software provided under the MIT License 21 | - Completely scriptable using Python 3. 22 | - Cross-platform: runs on Windows, MacOS, and Linux. 23 | - Subnetwork growth routines 24 | - A simple, extensible framework for defining photonic component compact models. 25 | - A SPICE-like method for defining photonic circuits. 26 | - Complex simulation capabilities. 27 | - Included model libraries from SiEPIC and SiPANN. 28 | 29 | Developed by [CamachoLab](https://camacholab.byu.edu/) at 30 | [Brigham Young University](https://www.byu.edu/). 31 | 32 | ## Installation 33 | 34 | Simphony can be installed via pip for Python 3.8+: 35 | 36 | ``` 37 | python3 -m pip install simphony 38 | ``` 39 | 40 | ## Documentation 41 | 42 | The documentation is hosted [online](https://simphonyphotonics.readthedocs.io/en/latest/). 43 | 44 | ## Bibtex citation 45 | 46 | ``` 47 | @article{DBLP:journals/corr/abs-2009-05146, 48 | author = {Sequoia Ploeg and 49 | Hyrum Gunther and 50 | Ryan M. Camacho}, 51 | title = {Simphony: An open-source photonic integrated circuit simulation framework}, 52 | journal = {CoRR}, 53 | volume = {abs/2009.05146}, 54 | year = {2020}, 55 | url = {https://arxiv.org/abs/2009.05146}, 56 | eprinttype = {arXiv}, 57 | eprint = {2009.05146}, 58 | timestamp = {Thu, 17 Sep 2020 12:49:52 +0200}, 59 | biburl = {https://dblp.org/rec/journals/corr/abs-2009-05146.bib}, 60 | bibsource = {dblp computer science bibliography, https://dblp.org} 61 | } 62 | ``` 63 | 64 | ## Development 65 | 66 | We welcome contributions to Simphony in the form of bug reports, feature 67 | requests, and pull requests. Please see the [contributing 68 | guide](https://simphonyphotonics.readthedocs.io/en/stable/dev/contributing.html). 69 | 70 | To develop locally, clone the repository and run the ``make`` commands to set 71 | up your development environment. 72 | 73 | ```bash 74 | git clone https://github.com/BYUCamachoLab/simphony.git 75 | python3 -m venv env # or use your preferred virtual environment tool 76 | source env/bin/activate 77 | make install 78 | ``` 79 | 80 | We use pre-commit to maintain code quality. The hooks are automatically 81 | installed when invoking the make targets. Pre-commit will now run on every 82 | commit. If it makes any modifications, the commit will fail and you'll have 83 | to restage the changes before continuing with the commit. 84 | 85 | If you truly, desperately need to skip pre-commit in one instance, you can use: 86 | 87 | ```bash 88 | git commit --no-verify -m "Commit message" 89 | ``` 90 | 91 | Pleasee don't make a habit of it. 92 | 93 | There are a few other useful targets in the Makefile: 94 | 95 | - ``make test``: Run the unit tests 96 | - ``make doc``: Build the documentation 97 | 98 | ## Distribution 99 | 100 | Simphony is available on PyPI and can be installed via pip: 101 | 102 | ``` 103 | python3 -m pip install simphony 104 | ``` 105 | 106 | ## License 107 | 108 | Simphony is licensed under the MIT license. See the [LICENSE](LICENSE) file for 109 | more details. 110 | 111 | ## Releasing (Danger Zone) 112 | 113 | **Only the project maintainer should create releases.** 114 | 115 | A note on the development cycle. The ``master`` branch is the "latest" branch 116 | with a version of the project that *always works*. Features and bug fixes are 117 | developed in separate branches and then merged into master when ready. 118 | 119 | When preparing for a new release, it's appropriate to increment the version 120 | number in advance of the release and before all the changes are merged in. You 121 | can start the next version and increment the version number by running: 122 | 123 | ``` 124 | make major 125 | make minor 126 | make patch 127 | ``` 128 | 129 | This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), 130 | which means that the version number is incremented according to the following 131 | rules: 132 | 133 | * MAJOR version when you make incompatible API changes, 134 | * MINOR version when you add functionality in a backwards compatible manner, and 135 | * PATCH version when you make backwards compatible bug fixes. 136 | 137 | There are also software lifecycle parts to the version number: 138 | 139 | * BUILD version is for multiple versions within a release (i.e. "rc1", "rc2", etc.) 140 | * RELEASE version cycles through "rc(n)" and then empty string for final release. 141 | 142 | A version with a "rc" number indicates it is not a final release. When you're 143 | ready to create the final release, make sure you've filled out the 144 | corresponding entry in the [CHANGELOG](CHANGELOG.md). Follow the format of 145 | previous recent entries. Make sure you have a clean working tree (git). Then, 146 | run: 147 | 148 | ``` 149 | bumpversion release 150 | make release 151 | ``` 152 | 153 | This will remove the "rc" number, tag the commit, push the tag to git, upload 154 | a build to PyPI, and publish the documentation to ReadTheDocs. Because this 155 | process is irreversible and version numbers cannot be reclaimed from PyPI, make 156 | sure all tests are passing and the documentation is up to date before running 157 | this command. 158 | 159 | A standard version number progression might look something like this: 160 | 161 | * 2.0.1 162 | * 2.0.2rc0 163 | * 2.0.2rc1 164 | * 2.0.2 165 | --------------------------------------------------------------------------------