Source code for skidl.pyspice
# -*- coding: utf-8 -*-
# The MIT License (MIT) - Copyright (c) Dave Vandenbout.
"""
Import this file to reconfigure SKiDL for doing SPICE simulations.
This module configures SKiDL to work with SPICE simulations by:
1. Importing necessary SPICE-related modules and classes
2. Setting up the default ground net
3. Loading SPICE-specific parts libraries
4. Making all PySpice parts available in the module namespace
"""
import sys
from skidl.logger import active_logger
[docs]
def abort_if_spice_unavailable():
if "InSpice" not in sys.modules:
msg = "InSpice package is not available. SPICE simulation is not possible."
if sys.version_info < (3, 11):
# InSpice is not available for Python 3.10 or earlier.
msg += " Upgrade to Python 3.11 or later and install InSpice to enable SPICE simulation."
else:
# InSpice is not installed, so raise an ImportError.
msg += " Install InSpice to enable SPICE simulation."
active_logger.raise_(ImportError, msg)
# InSpice may not be installed because of Python version.
try:
from InSpice import *
from InSpice.Unit import *
except ImportError:
abort_if_spice_unavailable()
pass
from skidl import *
from .tools.spice import *
from .tools.skidl.libs.pyspice_sklib import *
_splib = SchLib("pyspice", tool=SKIDL) # Read-in the SPICE part library.
set_default_tool(SPICE) # Set the library format for reading SKiDL libraries.
GND = gnd = Net("0") # Instantiate the default ground net for SPICE.
gnd.fixed_name = True # Make sure ground keeps it's name of "0" during net merges.
# Place all the PySpice parts into the namespace so they can be instantiated easily.
_this_module = sys.modules[__name__]
for p in _splib.get_parts():
# Add the part name to the module namespace.
setattr(_this_module, p.name, p)
# Add all the part aliases to the module namespace.
try:
for alias in p.aliases:
setattr(_this_module, alias, p)
except AttributeError:
pass