atopile 0.3.7.dev0__tar.gz → 0.3.9.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- atopile-0.3.9.dev0/.cursorrules +18 -0
- atopile-0.3.7.dev0/.github/workflows/wheels.yml → atopile-0.3.9.dev0/.github/workflows/deploy.yml +64 -3
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.github/workflows/pre-commit.yml +4 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.github/workflows/pytest.yml +30 -2
- atopile-0.3.9.dev0/.github/workflows/website.yml +66 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/PKG-INFO +3 -2
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/dockerfiles/Dockerfile.kicad +2 -2
- atopile-0.3.9.dev0/docs/CHANGELOG.md +28 -0
- atopile-0.3.9.dev0/docs/CNAME +1 -0
- atopile-0.3.9.dev0/docs/assets/images/cell-sim.png +0 -0
- atopile-0.3.9.dev0/docs/assets/images/quickstart-layout.png +0 -0
- atopile-0.3.9.dev0/docs/assets/images/spin-showing-off-the-very-goods.jpg +0 -0
- atopile-0.3.9.dev0/docs/assets/logo/emblem-white.svg +20 -0
- atopile-0.3.9.dev0/docs/development.md +31 -0
- atopile-0.3.9.dev0/docs/guides/faebryk.md +24 -0
- atopile-0.3.9.dev0/docs/guides/git.md +50 -0
- atopile-0.3.9.dev0/docs/guides/installation.md +38 -0
- atopile-0.3.9.dev0/docs/index.md +62 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/home.html +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/main.html +11 -3
- atopile-0.3.9.dev0/docs/quickstart.md +152 -0
- atopile-0.3.9.dev0/docs/reference/attributes.md +23 -0
- atopile-0.3.9.dev0/docs/reference/config.md +93 -0
- atopile-0.3.9.dev0/docs/stylesheets/extra.css +240 -0
- atopile-0.3.7.dev0/docs/maths.md → atopile-0.3.9.dev0/docs/tutorial/the-ato-language.md +73 -29
- atopile-0.3.9.dev0/examples/ch1_1_ato.ato +16 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/ch2_1_fab.py +2 -2
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/mkdocs.yml +28 -36
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/pyproject.toml +8 -8
- atopile-0.3.7.dev0/src/atopile/_shim.py → atopile-0.3.9.dev0/src/atopile/attributes.py +243 -74
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/buildutil.py +116 -92
- atopile-0.3.9.dev0/src/atopile/cli/build.py +174 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/cli/cli.py +24 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/cli/create.py +291 -38
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/cli/install.py +57 -99
- atopile-0.3.9.dev0/src/atopile/config.py +882 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/errors.py +12 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/front_end.py +130 -51
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/layout.py +20 -14
- atopile-0.3.9.dev0/src/atopile/packages/C_0201_0603Metric.kicad_mod +197 -0
- atopile-0.3.9.dev0/src/atopile/packages/C_0402_1005Metric.kicad_mod +203 -0
- atopile-0.3.9.dev0/src/atopile/packages/C_0603_1608Metric.kicad_mod +203 -0
- atopile-0.3.9.dev0/src/atopile/packages/C_0805_2012Metric.kicad_mod +203 -0
- atopile-0.3.9.dev0/src/atopile/packages/L_0201_0603Metric.kicad_mod +197 -0
- atopile-0.3.9.dev0/src/atopile/packages/L_0402_1005Metric.kicad_mod +183 -0
- atopile-0.3.9.dev0/src/atopile/packages/L_0603_1608Metric.kicad_mod +203 -0
- atopile-0.3.9.dev0/src/atopile/packages/L_0805_2012Metric.kicad_mod +203 -0
- atopile-0.3.9.dev0/src/atopile/packages/R_0201_0603Metric.kicad_mod +197 -0
- atopile-0.3.9.dev0/src/atopile/packages/R_0402_1005Metric.kicad_mod +203 -0
- atopile-0.3.9.dev0/src/atopile/packages/R_0603_1608Metric.kicad_mod +203 -0
- atopile-0.3.9.dev0/src/atopile/packages/R_0805_2012Metric.kicad_mod +203 -0
- atopile-0.3.9.dev0/src/atopile/packages/__init__.py +20 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/moduleinterface.py +1 -1
- atopile-0.3.9.dev0/src/faebryk/core/solver/__init__.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/trait.py +8 -4
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/netlist/graph.py +24 -77
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/netlist/kicad/netlist_kicad.py +26 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/netlist/netlist.py +1 -1
- atopile-0.3.9.dev0/src/faebryk/exporters/pcb/kicad/pcb.py +73 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/kicad/transformer.py +697 -57
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/layout/heuristic_decoupling.py +5 -4
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/schematic/kicad/transformer.py +3 -3
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Analog_Devices_ADM2587EBRWZ.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/B0505S_1WR3.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/B4B_ZR_SM4_TF.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/BH1750FVI_TR.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/BJT.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Button.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ButtonCell.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CBM9002A_56ILG.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CH340x.py +1 -3
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CH342.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CH342F.py +2 -2
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CH344.py +1 -4
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CH344Q_ReferenceDesign.py +2 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Capacitor.py +2 -2
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Common_Mode_Filter.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Comparator.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Crystal.py +1 -3
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/DE9Connector.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Diode.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Diodes_Incorporated_AP255x_x.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/EEPROM.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ESP32_C3.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ESP32_C3_MINI_1.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ElecSuper_PSM712_ES.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/EnablePin.py +3 -2
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Fuse.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/GDT.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/HLK_LD2410B_P.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Header.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/INA228.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ISO1540.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Inductor.py +1 -1
- atopile-0.3.9.dev0/src/faebryk/library/KicadFootprint.py +83 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/LDO.py +3 -3
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Logic74xx.py +1 -3
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/M24C08_FMN6TP.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/MCP2221A.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ME6211C33M5G_N.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/MOSFET.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Mounting_Hole.py +6 -5
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Net.py +6 -2
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/OLED_Module.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/OpAmp.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/PANASONIC_AQY212EHAX.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/PJ398SM.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/QWIIC_Connector.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/RJ45_Receptacle.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/RP2040.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/RP2040_ReferenceDesign.py +7 -6
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/RaspberryPiPico.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/RaspberryPiPicoBase_ReferenceDesign.py +11 -5
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Relay.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Resistor.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SCD40.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SK6812.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SK9822_EC20.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SNx4LVC541A.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SP3243E.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SPIFlash.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SWDConnector.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Shenzhen_Kinghelm_Elec_KH_BNC75_3511.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Switch.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/TD541S485H.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/TPS2116.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/TXS0102DCUR.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/UART_RS485.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB2514B.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB2_0_ESD_Protection.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB3_connector.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USBLC6_2P6.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB_Type_C_Receptacle_14_pin_Vertical.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB_Type_C_Receptacle_16_pin.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB_Type_C_Receptacle_24_pin.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/WCHJiangsu_Qin_Heng_CH224K.py +3 -2
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/WCHJiangsu_Qin_Heng_CH224K_ReferenceDesign.py +2 -2
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Winbond_Elec_W25Q128JVSIQ.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Wuxi_I_core_Elec_AiP74LVC1T45GB236_TR.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/XL_3528RGBW_WS2812B.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/_F.py +10 -11
- atopile-0.3.7.dev0/src/faebryk/library/has_designator_defined.py → atopile-0.3.9.dev0/src/faebryk/library/has_designator.py +2 -2
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_designator_prefix.py +71 -4
- atopile-0.3.9.dev0/src/faebryk/library/has_footprint_impl.py +22 -0
- atopile-0.3.9.dev0/src/faebryk/library/has_package.py +114 -0
- atopile-0.3.9.dev0/src/faebryk/library/has_package_requirement.py +25 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/pf_533984002.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/pf_74AHCT2G125.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/app/designators.py +9 -24
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/app/pcb.py +100 -80
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/kicad/fileformats.py +14 -15
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/picker/api/api.py +24 -29
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/picker/api/models.py +12 -18
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/picker/api/picker_lib.py +7 -7
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/picker/lcsc.py +33 -24
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/picker/picker.py +1 -1
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/util.py +29 -10
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/tools/main.py +0 -2
- atopile-0.3.9.dev0/test/conftest.py +33 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/core/solver/test_solver.py +1 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/core/test_performance.py +3 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/exporters/netlist/kicad/test_netlist_kicad.py +8 -6
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/front_end/test_front_end.py +29 -20
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/front_end/test_front_end_pick.py +4 -11
- atopile-0.3.9.dev0/test/library/test_names.py +34 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/picker/components.py +18 -21
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/picker/test_pickers.py +10 -4
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/test_lcsc.py +4 -1
- atopile-0.3.9.dev0/test/libs/util/test_yield_missing.py +29 -0
- atopile-0.3.9.dev0/test/test_config.py +65 -0
- atopile-0.3.9.dev0/test/test_create.py +63 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/test_errors.py +5 -8
- atopile-0.3.9.dev0/test/test_examples.py +67 -0
- atopile-0.3.9.dev0/test/test_packages.py +51 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/test_parse_utils.py +2 -5
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/test_regressions.py +3 -32
- atopile-0.3.9.dev0/tools/atopile_mkdocs_plugin/plugin.py +42 -0
- atopile-0.3.9.dev0/tools/atopile_mkdocs_plugin/pyproject.toml +19 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/uv.lock +370 -19
- atopile-0.3.7.dev0/.github/workflows/cd.yml +0 -124
- atopile-0.3.7.dev0/.github/workflows/website.yml +0 -40
- atopile-0.3.7.dev0/docs/CNAME +0 -1
- atopile-0.3.7.dev0/docs/api/solver.md +0 -8
- atopile-0.3.7.dev0/docs/assets/images/assertion-checks-2.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/assertion-checks.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/assertion-solver.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/block_diagram_example.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/buck_ic.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/buck_topology.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/capacitor_definition.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/ci-generated-gerbers-githash.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/ci-generated-gerbers.avif +0 -0
- atopile-0.3.7.dev0/docs/assets/images/ci-generated-gerbers.gif +0 -0
- atopile-0.3.7.dev0/docs/assets/images/cloud_bom.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/code-layout-pcb.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/code-loading.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/equation-preview.gif +0 -0
- atopile-0.3.7.dev0/docs/assets/images/extension-python-setup.gif +0 -0
- atopile-0.3.7.dev0/docs/assets/images/file-import.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/footprints.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/groups.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/import-settings.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/ldo-demo.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/mosfet.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/schematic_example.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/swoop-block-diagram.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/swoop-bringup.png +0 -0
- atopile-0.3.7.dev0/docs/assets/images/swoop.png +0 -0
- atopile-0.3.7.dev0/docs/blog/.authors.yml +0 -16
- atopile-0.3.7.dev0/docs/blog/index.md +0 -2
- atopile-0.3.7.dev0/docs/blog/posts/assertions.md +0 -34
- atopile-0.3.7.dev0/docs/blog/posts/ci-generated-gerbers.md +0 -30
- atopile-0.3.7.dev0/docs/blog/posts/cloud_components.md +0 -69
- atopile-0.3.7.dev0/docs/blog/posts/dsl.md +0 -27
- atopile-0.3.7.dev0/docs/blog/posts/layout-reuse-2.md +0 -22
- atopile-0.3.7.dev0/docs/blog/posts/layout-reuse.md +0 -30
- atopile-0.3.7.dev0/docs/blog/posts/matts-story.md +0 -24
- atopile-0.3.7.dev0/docs/blog/posts/narayans-story.md +0 -44
- atopile-0.3.7.dev0/docs/blog/posts/traits.md +0 -111
- atopile-0.3.7.dev0/docs/building.md +0 -55
- atopile-0.3.7.dev0/docs/ci.md +0 -16
- atopile-0.3.7.dev0/docs/class.md +0 -88
- atopile-0.3.7.dev0/docs/component_selection.md +0 -22
- atopile-0.3.7.dev0/docs/config.md +0 -67
- atopile-0.3.7.dev0/docs/connect.md +0 -5
- atopile-0.3.7.dev0/docs/development.md +0 -66
- atopile-0.3.7.dev0/docs/doc-strings.md +0 -13
- atopile-0.3.7.dev0/docs/first_project.md +0 -86
- atopile-0.3.7.dev0/docs/git.md +0 -47
- atopile-0.3.7.dev0/docs/how-to.md +0 -82
- atopile-0.3.7.dev0/docs/import.md +0 -16
- atopile-0.3.7.dev0/docs/index.md +0 -144
- atopile-0.3.7.dev0/docs/install.md +0 -100
- atopile-0.3.7.dev0/docs/kicad.md +0 -80
- atopile-0.3.7.dev0/docs/overrides/assets/stylesheets/custom.css +0 -570
- atopile-0.3.7.dev0/docs/roadmap.md +0 -60
- atopile-0.3.7.dev0/docs/types.md +0 -118
- atopile-0.3.7.dev0/docs/view.md +0 -84
- atopile-0.3.7.dev0/docs/yc-hardware-meetup.md +0 -22
- atopile-0.3.7.dev0/examples/ch1_1_ato.ato +0 -14
- atopile-0.3.7.dev0/examples/ch1_2_ldo_demo.ato +0 -88
- atopile-0.3.7.dev0/src/atopile/cli/build.py +0 -169
- atopile-0.3.7.dev0/src/atopile/cli/common.py +0 -221
- atopile-0.3.7.dev0/src/atopile/config.py +0 -483
- atopile-0.3.7.dev0/src/faebryk/exporters/pcb/kicad/pcb.py +0 -453
- atopile-0.3.7.dev0/src/faebryk/library/KicadFootprint.py +0 -36
- atopile-0.3.7.dev0/src/faebryk/library/has_designator.py +0 -11
- atopile-0.3.7.dev0/src/faebryk/library/has_designator_prefix_defined.py +0 -13
- atopile-0.3.7.dev0/src/faebryk/library/has_footprint_impl.py +0 -14
- atopile-0.3.7.dev0/src/faebryk/library/has_package_requirement.py +0 -15
- atopile-0.3.7.dev0/src/faebryk/tools/libadd.py +0 -395
- atopile-0.3.7.dev0/test/conftest.py +0 -13
- atopile-0.3.7.dev0/test/library/test_names.py +0 -28
- atopile-0.3.7.dev0/test/test_config.py +0 -45
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.git-blame-ignore-revs +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.gitattributes +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.github/CODEOWNERS +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.github/dependabot.yml +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.github/pull_request_template.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.github/workflows/regression.yml +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.github/workflows/vsx.yml +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.gitignore +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.gitmodules +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.pre-commit-config.yaml +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.vscode/extensions.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.vscode/launch.shared.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.vscode/settings.shared.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/.vscode/tasks.shared.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/LICENSE +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/README.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/atopile-custom-words.txt +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/cspell.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/dockerfiles/README.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/CODE_OF_CONDUCT.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/CODING_GUIDELINES.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/CONTRIBUTING.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/api/cli.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/ato_extension.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/debugger-vscode.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/discord-qr.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/download.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/kicad_buttons.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/placement-reuse.avif +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/placement-reuse.gif +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/reload.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/slice.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/slow-to-fast-hq.gif +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/trace-reuse.avif +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/trace-reuse.gif +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/images/upload.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/logo/ato_logo_256x256.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/logo/ato_logo_32x32.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/logo/emblem.svg +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/logo/faebryk_logo.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/logo/logo-with-text-dark.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/assets/logo/logo-with-text.png +0 -0
- /atopile-0.3.7.dev0/src/atopile/__init__.py → /atopile-0.3.9.dev0/docs/guides/best-practices.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/Inconsolata-Black.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/Inconsolata-Bold.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/Inconsolata-ExtraBold.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/Inconsolata-ExtraLight.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/Inconsolata-Light.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/Inconsolata-Medium.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/Inconsolata-Regular.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/Inconsolata-SemiBold.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/SpaceMono-Bold.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/SpaceMono-BoldItalic.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/SpaceMono-Italic.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/SpaceMono-Regular.ttf +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/assets/javascripts/custom.129bd6ad.min.js +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/assets/javascripts/custom.129bd6ad.min.js.map +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/assets/javascripts/iconsearch_index.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/hooks/shortcodes.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/hooks/translations.html +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/overrides/hooks/translations.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/spin.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/docs/swoop.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/.ato/modules/generics/README.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/.ato/modules/generics/capacitors.ato +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/.ato/modules/generics/resistors.ato +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/.gitignore +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/README.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/ato.yaml +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/ch2_2_minimal_led.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/ch2_3_minimal_led_explicit_parts.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/ch2_4_maximal_led.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/ch2_5_signal_processing.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/ch2_6_route.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/ch2_7_pcb_layout.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/ch2_8_mcu.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/ch2_9_iterative_design_nand.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/layout/ato/fp-lib-table +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/layout/ato/pcb.kicad_pcb +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/layout/ato/pcb.kicad_pro +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/layout/fab/fp-lib-table +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/layout/fab/pcb.kicad_pcb +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/examples/layout/fab/pcb.kicad_pro +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/scripts/attach_license.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/scripts/clean_issues.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/scripts/find_duplicate_test_files.sh +0 -0
- {atopile-0.3.7.dev0/src/atopile/cli → atopile-0.3.9.dev0/src/atopile}/__init__.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/__main__.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/address.py +0 -0
- {atopile-0.3.7.dev0/src/faebryk → atopile-0.3.9.dev0/src/atopile/cli}/__init__.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/cli/configure.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/cli/console.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/cli/excepthook.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/cli/inspect.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/cli/logging.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/cli/view.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/datatypes.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/.gitignore +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/README.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/__init__.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/buttons.svg +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/common.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/download.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/pullgroup.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/pushgroup.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/reload.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/reloadgroup.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/kicad_plugin/upload.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parse.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parse_utils.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/.gitignore +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoLexer.g4 +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoLexer.interp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoLexer.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoLexer.tokens +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoLexerBase.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoParser.g4 +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoParser.interp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoParser.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoParser.tokens +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoParserBase.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/AtoParserVisitor.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/README.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/__init__.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/parser/build.sh +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/telemetry.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/atopile/version.py +0 -0
- {atopile-0.3.7.dev0/src/faebryk/core → atopile-0.3.9.dev0/src/faebryk}/__init__.py +0 -0
- {atopile-0.3.7.dev0/src/faebryk/core/solver → atopile-0.3.9.dev0/src/faebryk/core}/__init__.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/core.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/.clang-format +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/CMakeLists.txt +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/__init__.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/__init__.pyi +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/cpp_helpers.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/include/graph/graph.hpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/include/graph/graphinterfaces.hpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/include/graph/links.hpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/include/nano.hpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/include/pathfinder/bfs.hpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/include/pathfinder/pathcounter.hpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/include/pathfinder/pathfinder.hpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/include/perf.hpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/include/pyutil.hpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/include/util.hpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/graph/graph.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/graph/graphinterface.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/graph/graphinterfaces.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/graph/link.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/graph/links.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/graph/node.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/graph/path.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/graph/type.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/main.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/pathfinder/bfs.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/pathfinder/pathcounter.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/pathfinder/pathfinder.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/cpp/src/perf.cpp +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/graph.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/graphinterface.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/link.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/module.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/node.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/parameter.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/pathfinder.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/reference.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/solver/analytical.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/solver/canonical.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/solver/defaultsolver.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/solver/literal_folding.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/solver/solver.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/core/solver/utils.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/bom/jlcpcb.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/documentation/datasheets.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/esphome/esphome.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/parameters/parameters_to_file.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/kicad/artifacts.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/layout/absolute.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/layout/extrude.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/layout/font.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/layout/heuristic_pulls.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/layout/layout.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/layout/matrix.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/layout/next_to.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/layout/next_to_pin.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/layout/typehierarchy.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/pick_and_place/jlcpcb.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/pcb/routing/util.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/project/faebryk/project_faebryk.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/visualize/interactive_graph.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/visualize/interactive_params.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/visualize/interactive_params_base.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/exporters/visualize/util.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/importers/netlist/kicad/netlist_kicad.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Analog_Devices_ADM2587EBRWZ_ReferenceDesign.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Battery.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CBM9002A_56ILG_ReferenceDesign.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CD4011.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CH342F_ReferenceDesign.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CH342K.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CH342K_ReferenceDesign.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/CH344Q.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Crystal_Oscillator.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/DE9RS232Connector.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/DIP.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/DifferentialPair.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Diodes_Incorporated_AP2552W6_7.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Diodes_Incorporated_AP2553W6_7.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ESP32_C3_MINI_1_ReferenceDesign.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ElectricLogic.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ElectricLogicGate.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ElectricLogicGates.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ElectricPower.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Electrical.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Ethernet.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Fan.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Filter.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/FilterElectricalLC.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/FilterElectricalRC.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Footprint.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/GenericBusProtection.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/HDMI.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/I2C.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/I2S.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/INA228_ReferenceDesign.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ISO1540_ReferenceDesign.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/JTAG.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/LED.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/LEDIndicator.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Logic.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/LogicGate.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/LogicGates.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/LogicOps.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Mechanical.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/MultiCapacitor.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/MultiSPI.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/PM1006.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Pad.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Pinmux.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Potentiometer.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Power.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/PowerMux.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/PowerSwitch.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/PowerSwitchMOSFET.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/PowerSwitchStatic.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/PoweredLED.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Powered_Relay.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/QFN.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/RP2040Pinmux.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/RS232.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/RS485HalfDuplex.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/RS485_Bus_Protection.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/ResistorVoltageDivider.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Resistor_Voltage_Divider.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SMDTwoPin.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SOIC.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SP3243E_ReferenceDesign.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SPI.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SWD.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Sercom.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Signal.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SignalElectrical.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/SurgeProtection.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Symbol.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/TECH_PUBLIC_USBLC6_2SC6.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/TI_CD4011BE.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/TVS.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/TXS0102DCUR_UART.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/UART.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/UART_Base.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB2514B_ReferenceDesign.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB2_0.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB2_0_IF.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB3.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB3_IF.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB_C.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB_C_5V_PSU.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB_C_PSU_Vertical.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB_C_PowerOnly.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/USB_RS485.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/Winbond_W25Q16JVUXIQ.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/XtalIF.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_attach_to_footprint.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_attach_to_footprint_symmetrically.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_attach_to_footprint_via_pinmap.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_attach_via_pinmap.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_attach_via_pinmap_equal.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_attach_via_pinmap_pinlist.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_be_decoupled.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_be_decoupled_rails.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_be_surge_protected.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_be_surge_protected_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_bridge.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_bridge_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_specialize.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_specialize_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_switch_power.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/can_switch_power_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_capacitance.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_construction_dependency.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_datasheet.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_datasheet_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_descriptive_properties.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_descriptive_properties_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_equal_pins.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_equal_pins_in_ifs.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_esphome_config.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_esphome_config_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_explicit_part.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_footprint.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_footprint_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_kicad_footprint.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_kicad_footprint_equal_ifs.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_kicad_footprint_equal_ifs_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_kicad_manual_footprint.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_kicad_ref.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_layout_transform.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_linked_pad.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_linked_pad_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_net_name.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_overriden_name.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_overriden_name_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_part_picked.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_part_removed.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pcb_layout.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pcb_layout_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pcb_position.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pcb_position_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pcb_position_defined_relative.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pcb_position_defined_relative_to_parent.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pcb_routing_strategy.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pcb_routing_strategy_greedy_direct_line.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pcb_routing_strategy_manual.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pcb_routing_strategy_via_to_layer.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pin_association_heuristic.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_pin_association_heuristic_lookup_table.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_reference.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_reference_layout.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_resistance.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_simple_value_representation.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_simple_value_representation_based_on_params.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_simple_value_representation_based_on_params_chain.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_simple_value_representation_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_single_connection.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_single_connection_impl.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_single_electric_reference.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_single_electric_reference_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_symbol_layout.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/has_symbol_layout_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_app_root.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_bus_parameter.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_decoupled.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_esphome_bus.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_esphome_bus_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_not_pickable.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_optional.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_optional_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_pickable.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_pickable_by_part_number.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_pickable_by_supplier_id.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_pickable_by_type.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_representable_by_single_value.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_representable_by_single_value_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_surge_protected.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/library/is_surge_protected_defined.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/algorithm.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/app/checks.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/app/erc.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/app/manufacturing.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/app/picking.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/brightness.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/examples/resources/example/example.kicad_pcb +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/examples/resources/example/example.kicad_pro +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/examples/resources/example/fp-lib-table +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/exceptions.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/font.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/geometry/basic.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/header.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/iso_metric_screw_thread.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/kicad/fileformats_common.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/kicad/fileformats_sch.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/kicad/fileformats_v5.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/kicad/fileformats_v6.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/kicad/fileformats_version.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/kicad/paths.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/library/L.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/logging.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/pycodegen.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/sets/numeric_sets.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/sets/quantity_sets.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/sets/sets.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/sexp/dataclass_sexp.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/sexp/util.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/test/fileformats.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/test/times.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/titlecase.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/tools/typer.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/libs/units.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/tools/project.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/faebryk/tools/refactor.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/.eslintrc.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/.gitignore +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/.prettierrc.js +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/.vscodeignore +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/CODE_OF_CONDUCT.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/DEVELOPMENT.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/LICENSE +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/README.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/SECURITY.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/SUPPORT.md +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/ato_logo_256x256.png +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/bundled/tool/__init__.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/bundled/tool/_debug_server.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/bundled/tool/lsp_jsonrpc.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/bundled/tool/lsp_runner.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/bundled/tool/lsp_server.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/bundled/tool/lsp_utils.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/demo.gif +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/language-configuration.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/package-lock.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/package.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/runtime.txt +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/snippets/snippets.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/src/common/constants.ts +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/src/common/log/logging.ts +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/src/common/python.ts +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/src/common/server.ts +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/src/common/settings.ts +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/src/common/setup.ts +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/src/common/utilities.ts +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/src/common/vscodeapi.ts +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/src/extension.ts +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/src/ui/ui.ts +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/syntaxes/ato.tmLanguage.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/tsconfig.json +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/src/vscode-atopile/webpack.config.js +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/libs/footprints/logos.pretty/faebryk_logo.kicad_mod +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/fileformats/kicad/v5/fp/C0603.kicad_mod +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/fileformats/kicad/v5/fp/KMR211NGLFS.kicad_mod +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/fileformats/kicad/v6/fp/SOT-23-5_RIT.kicad_mod +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/fileformats/kicad/v7/fplib/fp-lib-table +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/fileformats/kicad/v8/fp/test.kicad_mod +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/fileformats/kicad/v8/netlist/test_e.net +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/fileformats/kicad/v8/pcb/test.kicad_pcb +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/fileformats/kicad/v8/prj/test.kicad_pro +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/fileformats/kicad/v8/sch/test.kicad_sch +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/fileformats/kicad/v8/sym/test.kicad_sym +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/test-project/ato.yaml +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/test-project/unconstructable.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/test-project/unimportable.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/test.net +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/common/resources/test_essentials.net +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/core/cpp/test_importcpp.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/core/solver/test_solver_util.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/core/test_core.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/core/test_core_util.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/core/test_mif_connect.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/core/test_node.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/core/test_parameters.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/core/test_traits.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/exporters/netlist/test_graph.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/exporters/pcb/kicad/test_pcb_transformer.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/exporters/schematic/kicad/test_schematic_transformer.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/front_end/test_literals.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/integration/netlist/kicad2faebryk/test_netlist_kicad_2_faebryk_prj.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/library/nodes/test_decouple.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/library/nodes/test_electricpower.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/library/nodes/test_has_simple_value_representation.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/library/test_footprints.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/library/test_instance_library_modules.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/library/test_reference.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/geometry/test_basic_transformations.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/kicad/test_fileformats.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/test_exceptions.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/test_sets.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/test_units.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/test_util.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/test_util_atexit.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/test_util_func_collections.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/test_util_importers.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/util/test_has_attr_or_property.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/util/test_has_instance_settable_attr.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/libs/util/test_write_only_property.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/runpytest.sh +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/runtest.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/test_address.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/test_cli.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/test_datatypes.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/test_telemetry.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/test/test_version.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/tools/library/gen_F.py +0 -0
- {atopile-0.3.7.dev0 → atopile-0.3.9.dev0}/tools/profile.py +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
You an expert Python programmer, cpp programmer and electrical engineer.
|
|
2
|
+
|
|
3
|
+
You are developing an application called "atopile", which is a tool to design PCBs using a new language called "ato", or in Python with a framework called "fabll".
|
|
4
|
+
|
|
5
|
+
You will follow the following rules and best practices during development:
|
|
6
|
+
|
|
7
|
+
- When directed to "consider" something, assume it's an imperfect suggestion. Contemplate whether it's a good idea, and if it's not, suggest an alternative with reasoning.
|
|
8
|
+
- Add comments to your code such that a future developer, also an expert in the field, but without the immediate context of the reason for development can understand the code.
|
|
9
|
+
|
|
10
|
+
## Test Writing
|
|
11
|
+
|
|
12
|
+
- Use pytest best practices
|
|
13
|
+
- Use `pytest.mark.parametrize` to run tests on multiple inputs, rather than for loops within the a single test function
|
|
14
|
+
- Run tests you have created or modified with `pytest <path_to_test_file>::<test_name>`
|
|
15
|
+
- If you have made large changes, run the most appropriate of:
|
|
16
|
+
- `pytest -m <module_name>` for a single modules' changes
|
|
17
|
+
- `pytest -m "not regression"` to run all tests except for LONG regression tests
|
|
18
|
+
- `pytest` to run all tests
|
atopile-0.3.7.dev0/.github/workflows/wheels.yml → atopile-0.3.9.dev0/.github/workflows/deploy.yml
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Taken from https://github.com/pybind/scikit_build_example/blob/master/.github/workflows/wheels.yml
|
|
2
2
|
|
|
3
|
-
name:
|
|
3
|
+
name: deploy
|
|
4
4
|
|
|
5
5
|
on:
|
|
6
6
|
workflow_dispatch:
|
|
@@ -88,10 +88,12 @@ jobs:
|
|
|
88
88
|
path: wheelhouse/*.whl
|
|
89
89
|
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
name:
|
|
91
|
+
publish_wheels:
|
|
92
|
+
name: Publish Wheels
|
|
93
93
|
needs: [build_wheels, build_sdist]
|
|
94
94
|
runs-on: ubuntu-latest
|
|
95
|
+
# Publish wheels properly on release
|
|
96
|
+
# or to testpypi on main branch pushes to validate the workflow
|
|
95
97
|
if: github.event_name == 'release' && github.event.action == 'published' || github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
96
98
|
environment: pypi
|
|
97
99
|
permissions:
|
|
@@ -123,3 +125,62 @@ jobs:
|
|
|
123
125
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
124
126
|
with:
|
|
125
127
|
attestations: true
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
docker:
|
|
131
|
+
name: Docker Build and Publish
|
|
132
|
+
runs-on: ubuntu-latest
|
|
133
|
+
needs: build_wheels
|
|
134
|
+
|
|
135
|
+
strategy:
|
|
136
|
+
matrix:
|
|
137
|
+
include:
|
|
138
|
+
- dockerfile: "Dockerfile.kicad"
|
|
139
|
+
image: "atopile-kicad"
|
|
140
|
+
|
|
141
|
+
# Sets the permissions granted to the `GITHUB_TOKEN`
|
|
142
|
+
# for the actions in this job.
|
|
143
|
+
permissions:
|
|
144
|
+
contents: read
|
|
145
|
+
packages: write
|
|
146
|
+
|
|
147
|
+
steps:
|
|
148
|
+
- uses: actions/checkout@v4
|
|
149
|
+
|
|
150
|
+
- name: Download wheel artifacts
|
|
151
|
+
uses: actions/download-artifact@v4
|
|
152
|
+
with:
|
|
153
|
+
pattern: cibw-*
|
|
154
|
+
merge-multiple: true
|
|
155
|
+
path: dist
|
|
156
|
+
|
|
157
|
+
- name: Docker meta
|
|
158
|
+
id: meta
|
|
159
|
+
uses: docker/metadata-action@v5
|
|
160
|
+
with:
|
|
161
|
+
images: |
|
|
162
|
+
ghcr.io/atopile/${{ matrix.image }}
|
|
163
|
+
flavor: |
|
|
164
|
+
latest=${{github.event_name == 'release' && github.event.action == 'published' && !github.event.release.prerelease && !github.event.release.draft}}
|
|
165
|
+
tags: |
|
|
166
|
+
type=ref,event=branch
|
|
167
|
+
type=ref,event=pr
|
|
168
|
+
type=semver,pattern={{version}}
|
|
169
|
+
type=semver,pattern={{major}}.{{minor}}
|
|
170
|
+
type=sha
|
|
171
|
+
|
|
172
|
+
- name: Log in to the Container registry
|
|
173
|
+
uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446
|
|
174
|
+
with:
|
|
175
|
+
registry: ghcr.io
|
|
176
|
+
username: ${{ github.actor }}
|
|
177
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
178
|
+
|
|
179
|
+
- name: Build and push
|
|
180
|
+
uses: docker/build-push-action@v6
|
|
181
|
+
with:
|
|
182
|
+
context: .
|
|
183
|
+
file: dockerfiles/${{ matrix.dockerfile }}
|
|
184
|
+
push: true
|
|
185
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
186
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
@@ -2,6 +2,10 @@ name: pytest
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
workflow_dispatch:
|
|
5
9
|
|
|
6
10
|
jobs:
|
|
7
11
|
pytest:
|
|
@@ -29,12 +33,36 @@ jobs:
|
|
|
29
33
|
- name: Setup cmake
|
|
30
34
|
uses: jwlawson/actions-setup-cmake@v2
|
|
31
35
|
|
|
36
|
+
# Required by examples
|
|
37
|
+
# TODO: remove dependency on global fp-lib-table
|
|
38
|
+
- name: Configure AWS Credentials
|
|
39
|
+
uses: aws-actions/configure-aws-credentials@v4
|
|
40
|
+
with:
|
|
41
|
+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
42
|
+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
43
|
+
aws-region: ${{ secrets.AWS_REGION }}
|
|
44
|
+
|
|
45
|
+
- name: Prepare test environment
|
|
46
|
+
run: |
|
|
47
|
+
mkdir -p ~/.config/kicad/8.0/
|
|
48
|
+
aws s3 cp "s3://${{ secrets.TEST_DATASET_BUCKET }}/kicad-8.0-fp-lib-table" ~/.config/kicad/8.0/fp-lib-table
|
|
49
|
+
|
|
50
|
+
mkdir -p /usr/share/kicad/
|
|
51
|
+
aws s3 cp "s3://${{ secrets.TEST_DATASET_BUCKET }}/kicad-8.0-footprints.tar.gz" - | tar -xz -C /usr/share/kicad/
|
|
52
|
+
|
|
32
53
|
- name: Run pytest
|
|
33
54
|
id: pytest
|
|
34
55
|
continue-on-error: true
|
|
35
|
-
run:
|
|
36
|
-
uv run --dev --no-editable --frozen
|
|
56
|
+
run: >
|
|
57
|
+
uv run --dev --no-editable --frozen
|
|
58
|
+
--with pytest-github-actions-annotate-failures
|
|
59
|
+
pytest
|
|
60
|
+
-m "not not_in_ci and not slow and not regression"
|
|
61
|
+
--timeout=300
|
|
37
62
|
env:
|
|
63
|
+
GH_TOKEN: ${{ github.token }}
|
|
64
|
+
PYTEST_HISTORY_EMAIL: ${{ vars.PYTEST_HISTORY_EMAIL }}
|
|
65
|
+
PYTEST_HISTORY_PASSWORD: ${{ secrets.PYTEST_HISTORY_PASSWORD }}
|
|
38
66
|
COLUMNS: 150 # rich console width will be pulled from this
|
|
39
67
|
|
|
40
68
|
- name: Upload all test logs
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
name: website-deploy
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- main
|
|
6
|
+
release:
|
|
7
|
+
types: [published]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
deploy:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
environment: github-pages
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
with:
|
|
19
|
+
fetch-depth: 0 # Required for mike to work with git history
|
|
20
|
+
|
|
21
|
+
- name: Configure Git Credentials
|
|
22
|
+
run: |
|
|
23
|
+
git config user.name github-actions[bot]
|
|
24
|
+
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
|
25
|
+
|
|
26
|
+
- name: Set up Python
|
|
27
|
+
uses: actions/setup-python@v5
|
|
28
|
+
with:
|
|
29
|
+
python-version-file: 'pyproject.toml'
|
|
30
|
+
|
|
31
|
+
- name: Install uv
|
|
32
|
+
uses: astral-sh/setup-uv@v4
|
|
33
|
+
with:
|
|
34
|
+
version: '0.5.5'
|
|
35
|
+
enable-cache: true
|
|
36
|
+
cache-dependency-glob: "uv.lock"
|
|
37
|
+
|
|
38
|
+
- name: Get version
|
|
39
|
+
id: get_version
|
|
40
|
+
# Uses hatch rather than ato to get the version
|
|
41
|
+
# because currently ato might also produce logging output
|
|
42
|
+
# which contaminates stdout
|
|
43
|
+
run: |
|
|
44
|
+
VERSION=$(uv run --dev hatch version)
|
|
45
|
+
MAJOR_MINOR=$(echo $VERSION | cut -d. -f1,2)
|
|
46
|
+
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
|
47
|
+
echo "MAJOR_MINOR=$MAJOR_MINOR" >> $GITHUB_ENV
|
|
48
|
+
|
|
49
|
+
# FIXME: enable deployment access restrictions
|
|
50
|
+
# - enforce https://github.com/atopile/atopile/settings/rules/3213715
|
|
51
|
+
# - specify the --remote in `mike deploy` to include the app token https://stackoverflow.com/questions/18935539/authenticate-with-github-using-a-token
|
|
52
|
+
# - uses: actions/create-github-app-token@v1
|
|
53
|
+
# id: app-token
|
|
54
|
+
# with:
|
|
55
|
+
# app-id: ${{ vars.WEBSITE_DEPLOYER_APP_ID }}
|
|
56
|
+
# private-key: ${{ secrets.WEBSITE_DEPLOYER_KEY }}
|
|
57
|
+
|
|
58
|
+
- name: Deploy development docs
|
|
59
|
+
if: github.event_name == 'push'
|
|
60
|
+
# TODO: it'd be nice to have the upcoming version number here as well
|
|
61
|
+
# but it clobbers the latest release in case they're the same
|
|
62
|
+
run: uv run mike deploy --push --update-aliases dev
|
|
63
|
+
|
|
64
|
+
- name: Deploy release docs
|
|
65
|
+
if: github.event_name == 'release' && !github.event.release.prerelease && !github.event.release.draft
|
|
66
|
+
run: uv run mike deploy --push --update-aliases $MAJOR_MINOR latest
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atopile
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.9.dev0
|
|
4
4
|
Summary: A toolchain bringing the best of software development to the real-world!
|
|
5
5
|
Project-URL: Homepage, https://github.com/atopile/atopile
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/atopile/atopile/issues
|
|
@@ -48,7 +48,7 @@ Requires-Dist: isort<5.14.0,>=5.6.4
|
|
|
48
48
|
Requires-Dist: jinja2>=3.1.3
|
|
49
49
|
Requires-Dist: kicadcliwrapper<2.0.0,>=1.0.0
|
|
50
50
|
Requires-Dist: matplotlib<4.0.0,>=3.7.1
|
|
51
|
-
Requires-Dist: more-itertools<10.
|
|
51
|
+
Requires-Dist: more-itertools<10.7,>=10.4
|
|
52
52
|
Requires-Dist: natsort>=8.4.0
|
|
53
53
|
Requires-Dist: numpy<3.0.0,>=2.2.0
|
|
54
54
|
Requires-Dist: packaging>=23.2
|
|
@@ -56,6 +56,7 @@ Requires-Dist: pandas>=2.1.4
|
|
|
56
56
|
Requires-Dist: patool<2.4.0,>=2.3.0
|
|
57
57
|
Requires-Dist: pint<1.0.0,>=0.24.4
|
|
58
58
|
Requires-Dist: psutil<7.0.0,>=6.0.0
|
|
59
|
+
Requires-Dist: pydantic-settings>=2.7.1
|
|
59
60
|
Requires-Dist: pygls>=1.3.0
|
|
60
61
|
Requires-Dist: quart-cors>=0.7.0
|
|
61
62
|
Requires-Dist: quart-schema[pydantic]>=0.20.0
|
|
@@ -34,8 +34,8 @@ COPY --from=ghcr.io/astral-sh/uv:0.5.5 /uv /bin/uv
|
|
|
34
34
|
# @python3.14
|
|
35
35
|
RUN uv python install 3.13
|
|
36
36
|
|
|
37
|
-
COPY --chown=kicad:kicad dist/atopile
|
|
37
|
+
COPY --chown=kicad:kicad dist/atopile-*-cp313-cp313-manylinux*.whl /tmp/
|
|
38
38
|
|
|
39
|
-
RUN uv tool install /tmp/atopile
|
|
39
|
+
RUN uv tool install /tmp/atopile-*-cp313-cp313-manylinux*.whl
|
|
40
40
|
|
|
41
41
|
ENTRYPOINT [ "bash", "-c", "ato install && ato build" ]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
## v0.3.x
|
|
4
|
+
|
|
5
|
+
Firstly, thanks for using atopile! It's been a ride, and we're glad you're here. 🙌
|
|
6
|
+
|
|
7
|
+
### Changed Commands
|
|
8
|
+
|
|
9
|
+
Add `--help` after any command to see new options in the CLI. This is always the most accurate source of information.
|
|
10
|
+
|
|
11
|
+
| Old | New |
|
|
12
|
+
|-----|-----|
|
|
13
|
+
| `ato install --jlcpcb` | `ato create component` |
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### I'm seeing a bunch of `DeprecationWarning`
|
|
17
|
+
|
|
18
|
+
There will be a LOT of new deprecation warnings you'll see.
|
|
19
|
+
|
|
20
|
+
For the most part, it's safe to ignore them for the minute, and we plan to make the breaking changes in 0.4.0
|
|
21
|
+
|
|
22
|
+
Upgrading will give you more access to features as they're added, but there's no need to rush if you're content.
|
|
23
|
+
|
|
24
|
+
### PCBs are now directly modified
|
|
25
|
+
|
|
26
|
+
This means no more need to open the PCB file, import the netlist and cycle.
|
|
27
|
+
|
|
28
|
+
`ato build` now directly modifies the PCB file as required on each build.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
docs.atopile.io
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 264.12 264.12">
|
|
3
|
+
<defs>
|
|
4
|
+
<style>
|
|
5
|
+
.cls-1 {
|
|
6
|
+
fill: #fff;
|
|
7
|
+
stroke-width: 0px;
|
|
8
|
+
}
|
|
9
|
+
</style>
|
|
10
|
+
</defs>
|
|
11
|
+
<g id="_Слой_1" data-name="Слой 1">
|
|
12
|
+
<g>
|
|
13
|
+
<rect class="cls-1" x="0" y="229.39" width="57.39" height="34.73" rx="2.5" ry="2.5" transform="translate(57.39 493.5) rotate(180)"/>
|
|
14
|
+
<path class="cls-1" d="m168.54,26.23V8.5c0-4.7,3.81-8.5,8.5-8.5h78.57c4.7,0,8.5,3.81,8.5,8.5v88.27c0,4.7-3.81,8.5-8.5,8.5h-17.73c-4.7,0-8.5-3.81-8.5-8.5v-53.54c0-4.7-3.81-8.5-8.5-8.5h-43.84c-4.7,0-8.5-3.81-8.5-8.5Z"/>
|
|
15
|
+
<path class="cls-1" d="m0,147.08v-17.73c0-4.7,3.81-8.5,8.5-8.5h40.38c4.7,0,8.5,3.81,8.5,8.5v37.26c0,4.7,3.81,8.5,8.5,8.5h29.82c4.7,0,8.5,3.81,8.5,8.5v37.26c0,4.7,3.81,8.5,8.5,8.5h108.17c4.7,0,8.5-3.81,8.5-8.5v-56.8c0-4.7-3.81-8.5-8.5-8.5h-45.95c-4.7,0-8.5-3.81-8.5-8.5v-43.42c0-4.7-3.81-8.5-8.5-8.5h-29.67c-4.7,0-8.5-3.81-8.5-8.5v-43.43c0-4.7-3.81-8.5-8.5-8.5h-24.05c-4.7,0-8.5-3.81-8.5-8.5V8.5c0-4.7,3.81-8.5,8.5-8.5h57.25c4.7,0,8.5,3.81,8.5,8.5v43.42c0,4.7,3.81,8.5,8.5,8.5h29.67c4.7,0,8.5,3.81,8.5,8.5v43.42c0,4.7,3.81,8.5,8.5,8.5h47.48c4.7,0,8.5,3.81,8.5,8.5v126.27c0,4.7-3.81,8.5-8.5,8.5H78.95c-4.7,0-8.5-3.81-8.5-8.5v-37.26c0-4.7-3.81-8.5-8.5-8.5h-29.83c-4.7,0-8.5-3.81-8.5-8.5v-37.26c0-4.7-3.81-8.5-8.5-8.5h-6.61c-4.7,0-8.5-3.81-8.5-8.5Z"/>
|
|
16
|
+
<path class="cls-1" d="m25.08,86.66v-17.73c0-4.7,3.81-8.5,8.5-8.5h61.84c4.7,0,8.5,3.81,8.5,8.5v43.42c0,4.7,3.81,8.5,8.5,8.5h32.03c4.7,0,8.5,3.81,8.5,8.5v37.26c0,4.7,3.81,8.5,8.5,8.5h39.69c4.7,0,8.5,3.81,8.5,8.5v17.73c0,4.7-3.81,8.5-8.5,8.5h-73.46c-4.7,0-8.5-3.81-8.5-8.5v-37.26c0-4.7-3.81-8.5-8.5-8.5h-31.45c-4.7,0-8.5-3.81-8.5-8.5v-43.42c0-4.7-3.81-8.5-8.5-8.5h-28.65c-4.7,0-8.5-3.81-8.5-8.5Z"/>
|
|
17
|
+
<rect class="cls-1" x="25.08" y="0" width="34.73" height="34.73" rx="2.5" ry="2.5" transform="translate(84.9 34.73) rotate(180)"/>
|
|
18
|
+
</g>
|
|
19
|
+
</g>
|
|
20
|
+
</svg>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Development
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
- [Editable atopile install](/guides/installation/#editable-installation-best-for-development)
|
|
6
|
+
|
|
7
|
+
## Dev Tools
|
|
8
|
+
|
|
9
|
+
We recommend VSCode for development. If nothing else, it has heaps of high quality extensions and atopile language support, plus it's what we all use internally - so we know how to configure it for purpose.
|
|
10
|
+
|
|
11
|
+
You should have at minimum:
|
|
12
|
+
- [Cursor](https://www.cursor.com/) or [VSCode](https://code.visualstudio.com)
|
|
13
|
+
- [VSCode atopile extension](https://marketplace.visualstudio.com/items?itemName=atopile.atopile) (also works for Cursor)
|
|
14
|
+
|
|
15
|
+
### Verbosity
|
|
16
|
+
|
|
17
|
+
You can increase the verbosity of atopile by using the `-v`, `-vv` or `-vvv` flags, eg. `ato -vv build`
|
|
18
|
+
|
|
19
|
+
!!! tip "Flag Location"
|
|
20
|
+
Flags are placed after the `ato` command and before the command you want to run. For example, `ato -vv build` will run the build command with the verbose flag set to the highest level, while `ato build -vv` will not work.
|
|
21
|
+
|
|
22
|
+
### Debugging
|
|
23
|
+
|
|
24
|
+
You can start the CLI in debug mode by using the `--debug` flag, eg. `ato --debug build`
|
|
25
|
+
|
|
26
|
+
This will run a [`debugpy`](https://github.com/microsoft/debugpy) server on port `5678` which you can connect to with the VSCode built-in debugger.
|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
??? help "Syntax highlighting isn't working"
|
|
31
|
+
If you're having trouble with syntax highlighting in the debugger, it might be because VSCode sets up a mapping between the remote and local file paths by default - remove it.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# `faebryk` & `fabll` 🐍
|
|
2
|
+
|
|
3
|
+
`faebryk` is atopile's core. It's how we model the world.
|
|
4
|
+
|
|
5
|
+
`faebryk` is a Python module that uses a powerful and efficient core graph (nodes + edges) to represent every relationship in your design or circuit.
|
|
6
|
+
|
|
7
|
+
`fabll` is a Python framework to model circuits, much like `ato`. It unlocks a the whole Turing-complete power of Python to do design in + low-level procedural code and logic. Think of it like writing C for a Python module. It's focus is power - not ease of use like `ato`, so it's not recommended for most designs to start with.
|
|
8
|
+
|
|
9
|
+
!!! warning
|
|
10
|
+
`fabll` is currently in a very early stage of development. It's not publicly supported yet.
|
|
11
|
+
|
|
12
|
+
## Building `fabll` code
|
|
13
|
+
|
|
14
|
+
To build a `fabll` module with atopile, you just need to point to the module within your `ato.yaml` configuration file.
|
|
15
|
+
|
|
16
|
+
When you run `ato build`, atopile will automatically build the `fabll` module and link it to your project.
|
|
17
|
+
|
|
18
|
+
## Importing `fabll` code
|
|
19
|
+
|
|
20
|
+
You can just import `fabll` modules in `ato` like any other import:
|
|
21
|
+
|
|
22
|
+
```ato
|
|
23
|
+
from path/to/some/fabll.py import SomeModule
|
|
24
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Using `git` for Hardware
|
|
2
|
+
|
|
3
|
+
`git` is a powerful way to version control your design and one of the key reason we started atopile. If you don't know about `git`, we strongly recommend learning it. There is a high chance you will end up loving it.
|
|
4
|
+
|
|
5
|
+
## Workflow Overview
|
|
6
|
+
|
|
7
|
+
`git` is the de-facto standard for version control in software development. For people who haven't used it before, it's worth explaining a few terms and the workflow
|
|
8
|
+
|
|
9
|
+
| Term | Definition |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| Repo or Repository | A collection of files and directories that is version controlled together. |
|
|
12
|
+
| Branch | A "branch" is an isolated space for your changes. |
|
|
13
|
+
| Commit | A "commit" is a snapshot of some changes in that place in time. |
|
|
14
|
+
| Push | A "push" is sending your changes to the remote repo. |
|
|
15
|
+
| Pull Request | A "pull request" is a request to merge your changes into the main branch. This is the time to review and test your changes with others on your team. |
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
AA[Find a project you want to work on on Github] --> A[**Clone** a copy of the repo to your computer]
|
|
20
|
+
AB[Create a new project on Github] --> A
|
|
21
|
+
A --> B["Create an isolated space (or **branch**) for your changes"]
|
|
22
|
+
B --> C[Do some work ⛏️]
|
|
23
|
+
C --> D[Check the **status** of your changes]
|
|
24
|
+
D --> E[**Stage** the changes for one topic]
|
|
25
|
+
E --> F[**Commit** the changes with a message explaining what you did]
|
|
26
|
+
F -->|More work to do on this topic| D
|
|
27
|
+
F -->|Ready for review| H[**Push** your branch to the **remote** repo on Github]
|
|
28
|
+
H --> I[Create **Pull Request** on GitHub]
|
|
29
|
+
I --> II["Continuous Integration (**CI**) runs tests and ensures your project still builds after your updates"]
|
|
30
|
+
II -->|Tests pass| J[**Review** all the changes]
|
|
31
|
+
II -->|Tests fail| D
|
|
32
|
+
J -->|Changes requested in review| D
|
|
33
|
+
J -->|Approved| K[**Merge** to main]
|
|
34
|
+
K --> L[Your changes are now combined with the work of everyone else on the project]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Basic Usage
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
git clone <repo-url>
|
|
41
|
+
git checkout -b <new-branch-name>
|
|
42
|
+
git add <file-to-commit>
|
|
43
|
+
git commit -m "This commits adds an LED indicator..."
|
|
44
|
+
git push -u origin HEAD
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## More resources
|
|
48
|
+
|
|
49
|
+
- https://github.com/git-guides
|
|
50
|
+
- https://git-scm.com/docs/gittutorial
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Alternative Installation
|
|
2
|
+
|
|
3
|
+
!!! warning
|
|
4
|
+
Check out the [quickstart guide](quickstart.md) for a step-by-step guide for the recommended way to install atopile.
|
|
5
|
+
This page provides alternative installation methods.
|
|
6
|
+
|
|
7
|
+
Ultimately `atopile` is a python package, so you can install it where and however you want - but some python package managers are better than others. Here's how we recommend you install atopile.
|
|
8
|
+
|
|
9
|
+
## Editable installation (Best for development)
|
|
10
|
+
|
|
11
|
+
1. Install `uv`
|
|
12
|
+
See: https://docs.astral.sh/uv/getting-started/installation/
|
|
13
|
+
|
|
14
|
+
3. Clone the repo
|
|
15
|
+
|
|
16
|
+
``` sh
|
|
17
|
+
git clone https://github.com/atopile/atopile
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
4. `cd` into the repo
|
|
21
|
+
|
|
22
|
+
``` sh
|
|
23
|
+
cd atopile
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
5. Install
|
|
27
|
+
|
|
28
|
+
``` sh
|
|
29
|
+
uv sync --dev
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Via `brew`
|
|
33
|
+
|
|
34
|
+
We would recommend this, however it's not yet quite ready
|
|
35
|
+
|
|
36
|
+
``` sh
|
|
37
|
+
brew install atopile/tap/atopile
|
|
38
|
+
```
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Welcome
|
|
2
|
+
|
|
3
|
+
`atopile` is a language, compiler and toolchain to design electronics with code.
|
|
4
|
+
|
|
5
|
+
Design circuit boards with the same powerful workflows that software developers use - version control, modularity, and automated validation. Instead of point-and-click schematics, use human-readable `.ato` files that can be version controlled and shared. Capture design intelligence and validation rules in code to ensure your hardware works as intended.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- 🚀 Auto-select components like resistors and capacitors, based on their attribute's values
|
|
10
|
+
- 🤖 Embed calculations in your code, which are checked on every build
|
|
11
|
+
- 🧱 Build you circuit from reliable configurable modules so you can focus on high level design
|
|
12
|
+
- 💥 Build, release and test your circuit board from the `CLI`
|
|
13
|
+
- 📦 Embedded package manager to install and manage modules from https://packages.atopile.io, or Github
|
|
14
|
+
- 🔍 Version control line-by-line diffable code w/ git
|
|
15
|
+
|
|
16
|
+
Jump right in with the [quickstart guide](quickstart.md)
|
|
17
|
+
|
|
18
|
+
## Who's atopile for?
|
|
19
|
+
|
|
20
|
+
Currently atopile is young - which means we can't do everything yet and we're focussed on being incredible at a few things:
|
|
21
|
+
|
|
22
|
+
### Custom Validation Equipment
|
|
23
|
+
|
|
24
|
+
> "Rome wasn't built in a day, but your HiL should be"
|
|
25
|
+
|
|
26
|
+
If you're serious about automating the validation of your production hardware, you're in the right place.
|
|
27
|
+
|
|
28
|
+
[Cell-sim](https://github.com/atopile/cell-sim/) is a 16ch, 16-bit, isolated, 0-5V, 0-500mA battery-cell simulator designed from scratch in atopile, from concept to 2-revisions in under 5 days work. Oh, and that time includes the firmware. It is a relatively complex HiL design, and required many new modules that didn't yet exist on our package manager. Simpler HiL designs are frequently just a day's work.
|
|
29
|
+
|
|
30
|
+

|
|
31
|
+
|
|
32
|
+
### Young companies who need to iterate on hardware
|
|
33
|
+
|
|
34
|
+
`atopile` designed hardware is in satellites, humanoid robots and VTOL drones - all from startups within the last year.
|
|
35
|
+
|
|
36
|
+
Not every young company NEEDs to iterate on it's hardware, but many more should than do.
|
|
37
|
+
|
|
38
|
+
We're used to this in the software world, but getting the same engine running at even remotely similar speeds for hardware is a huge challenge. `atopile` let's multiple people work on different features or concepts on the same project in parallel via branches in `git`. With calculations checked and tests run automatically on every change, you can iterate as an individual - quickly trying out new ideas before committing to a design as a team and only after validating it in the real-world.
|
|
39
|
+
|
|
40
|
+
### Huge nerds 🤓
|
|
41
|
+
|
|
42
|
+
Welcome the club!
|
|
43
|
+
|
|
44
|
+
If you like making dope stuff, like these [servo drives](https://github.com/atopile/spin-servo-drive) you're in the right place. Welcome!
|
|
45
|
+
|
|
46
|
+

|
|
47
|
+
|
|
48
|
+
## Roadmap
|
|
49
|
+
|
|
50
|
+
### Up-next
|
|
51
|
+
|
|
52
|
+
- [ ] 📦 [Package Manager](https://github.com/atopile/atopile/discussions/495) - Make finding, installing and publishing modules fast and easy
|
|
53
|
+
- [ ] First-party packages for HiL systems
|
|
54
|
+
|
|
55
|
+
### Soon
|
|
56
|
+
|
|
57
|
+
- [ ] Language Server - A standard LSP server for atopile
|
|
58
|
+
- [ ] Plugin system - Make it easy to extend the `ato` CLI
|
|
59
|
+
|
|
60
|
+
### Non-goals
|
|
61
|
+
|
|
62
|
+
- Integration with XXX design tool. Reliably supporting all the features of legacy EDA tools is a huge lift, and, with rapid continued improvement in the open-source EDA space, it's not currently the best use of our time.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<a href="{{ page.next_page.url | url }}" title="{{ page.next_page.title | e }}" class="md-button md-button--primary">
|
|
18
18
|
Quick start
|
|
19
19
|
</a>
|
|
20
|
-
<a href="mailto:
|
|
20
|
+
<a href="mailto:founders@atopile.io" title="Email us" class="md-button">
|
|
21
21
|
Contact us
|
|
22
22
|
</a>
|
|
23
23
|
</div>
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
{#-
|
|
2
|
-
This file was automatically generated - do not edit
|
|
3
|
-
-#}
|
|
4
1
|
{% extends "base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block outdated %}
|
|
4
|
+
You're not viewing the latest version.
|
|
5
|
+
<a href="{{ '../' ~ base_url }}">
|
|
6
|
+
<strong>Click here to go to latest.</strong>
|
|
7
|
+
</a>
|
|
8
|
+
{% endblock %}
|
|
9
|
+
|
|
5
10
|
{% block announce %}
|
|
6
11
|
For updates, star us on
|
|
7
12
|
<a href="https://github.com/atopile/atopile">
|
|
@@ -23,6 +28,7 @@
|
|
|
23
28
|
{% include ".icons/fontawesome/brands/youtube.svg" %}
|
|
24
29
|
</span>
|
|
25
30
|
<strong>YouTube</strong>
|
|
31
|
+
</a>
|
|
26
32
|
, or join us on
|
|
27
33
|
<a href="https://discord.gg/nkpC7wYRVw">
|
|
28
34
|
<span class="twemoji discord">
|
|
@@ -31,9 +37,11 @@
|
|
|
31
37
|
<strong>Discord</strong>
|
|
32
38
|
</a>
|
|
33
39
|
{% endblock %}
|
|
40
|
+
|
|
34
41
|
{% block extrahead %}
|
|
35
42
|
<link rel="stylesheet" href="{{ 'assets/stylesheets/custom.css' | url }}">
|
|
36
43
|
{% endblock %}
|
|
44
|
+
|
|
37
45
|
{% block scripts %}
|
|
38
46
|
{{ super() }}
|
|
39
47
|
<script src="{{ 'assets/javascripts/custom.129bd6ad.min.js' | url }}"></script>
|