{"library":"salamandra","title":"Salamandra Netlist Manipulation Framework","description":"Salamandra is an extensible Pythonic infrastructure for loading, analyzing, generating, and storing netlists. Developed by EnICS labs, it is currently at version 1.0.1 and is under active development. The library supports Python 3.5+ and is released under the Apache 2.0 open-source license.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install salamandra"],"cli":null},"imports":["from salamandra import Component","from salamandra import Pin","from salamandra import Input","from salamandra import Output","from salamandra import Inout"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import salamandra as slm\n\n# Create an NMOS component skeleton\nnmos = slm.Component('nmos')\nnmos.add_pin(slm.Pin('source'))\nnmos.add_pin(slm.Pin('drain'))\nnmos.add_pin(slm.Pin('gate'))\nnmos.add_pin(slm.Pin('body'))\n\n# Create an inverter component with subcomponents and connections\ninv = slm.Component('inv')\n# Add pins to the inverter\ninv.add_pin(slm.Input('I'))\ninv.add_pin(slm.Output('ZN'))\ninv.add_pin(slm.Inout('VDD'))\ninv.add_pin(slm.Inout('VSS'))\n\n# Add subcomponents (instances of nmos and pmos - pmos would be defined similarly to nmos)\n# For this example, let's assume 'pmos' is also a defined slm.Component object\npmos = slm.Component('pmos') # Define a dummy pmos for the example to be runnable\npmos.add_pin(slm.Pin('source'))\npmos.add_pin(slm.Pin('drain'))\npmos.add_pin(slm.Pin('gate'))\npmos.add_pin(slm.Pin('body'))\n\ninv.add_subcomponent(nmos, 'n1')\ninv.add_subcomponent(pmos, 'p1')\n\n# Establish connections\ninv.connect('I', 'n1.gate')\ninv.connect('I', 'p1.gate')\ninv.connect('ZN', 'n1.drain')\ninv.connect('ZN', 'p1.drain')\ninv.connect('VDD', 'p1.source')\ninv.connect('VDD', 'p1.body')\n\nprint(f\"Created component: {inv.name}\")\nprint(f\"Pins: {[p.name for p in inv.pins]}\")\nprint(f\"Subcomponents: {[s.name for s in inv.subcomponents]}\")\n# For full netlist export, one would typically call functions like inv.print_verilog()\n# print(\"\\nVerilog Netlist (example snippet):\")\n# inv.print_verilog()\n","lang":"python","description":"This quickstart demonstrates how to create basic `Component` objects, add `Pin`s, and then construct a hierarchical component like an inverter with subcomponents and connections.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"1.0.1","pypi_latest":"1.0.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.9,"avg_import_s":0.01,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"salamandra","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.01,"mem_mb":0.5,"disk_size":"18.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"salamandra","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"salamandra","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"20.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"salamandra","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.4,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"salamandra","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.01,"mem_mb":0.6,"disk_size":"11.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"salamandra","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.01,"mem_mb":0.6,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"salamandra","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"11.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"salamandra","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.01,"mem_mb":0.6,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"salamandra","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.01,"mem_mb":0.5,"disk_size":"17.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"salamandra","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"18M"}]}}