Simulator¶
Base Class for all simulators.
- class spicelib.sim.simulator.Simulator[source]¶
Bases:
ABCPure static class template for Spice simulators. This class only defines the interface of the subclasses. The variables below shall be overridden by the subclasses. Instantiating this class will raise a SpiceSimulatorError exception.
A typical subclass for a Windows installation is:
class MySpiceWindowsInstallation(Simulator): spice_exe = ['<path to the spice executable>'] process_name = "<name of the process on Windows Task Manager>"
or on a Linux distribution:
class MySpiceLinuxInstallation(Simulator): spice_exe = ['<wine_command>', '<path to the spice executable>'] process_name = "<name of the process within the system>"
If you use MacOS, you can choose either one of the 2 above. If you are on Intel, running LTSpice under wine (therefore: like under Linux) is preferred.
The subclasses should then implement at least the run() function as a classmethod.
@classmethod def run(cls, netlist_file: str | Path, cmd_line_switches: list | None = None, timeout: float | None = None, stdout=None, stderr=None, cwd: str | Path | None = None, exe_log: bool = False) -> int: '''This method implements the call for the simulation of the netlist file. ''' cmd_run = cls.spice_exe + ['-Run'] + ['-b'] + [netlist_file] + cmd_line_switches return run_function(cmd_run, timeout=timeout, stdout=stdout, stderr=stderr, cwd=cwd)
The
run_function()can be imported from the simulator.py withfrom spicelib.sim.simulator import run_functioninstruction.- classmethod create_from(path_to_exe, process_name=None)[source]¶
Creates a simulator class from a path to the simulator executable
- Parameters:
path_to_exe (pathlib.Path or str. If it is a string, it supports multiple sections, allowing loaders like wine, but MUST be in posix format in that case, and the last section MUST be the simulator executable.)
process_name – the process_name to be used for killing phantom processes. If not provided, it will be
- Returns:
a class instance representing the Spice simulator
- Return type:
- static expand_and_check_local_dir(path, exe_path=None)[source]¶
Expands a directory path to become an absolute path, while taking into account a potential use under wine (under MacOS and Linux). Will also check if that directory exists. The path must either be an absolute path or start with ~. Relative paths are not supported. On MacOS or Linux, it will try to replace any reference to the virtual windows root under wine into a host OS path.
Examples:
under windows:
C:/mydir -> C:/mydir
~/mydir -> C:/Users/myuser/mydir
under linux, and if the executable is /mywineroot/.wine/drive_c/(something):
C:/mydir -> /mywineroot/.wine/drive_c/mydir
~/mydir -> /mywineroot/.wine/drive_c/users/myuser/mydir
- Parameters:
path (str) – The path to expand. Must be in posix format, use PureWindowsPath(path).as_posix() to transform a windows path to a posix path.
exe_path (str | None) – path to a related executable that may or may not be under wine, defaults to None, ignored on Windows
- Returns:
the fully expanded path, as posix path, will return None if the path does not exist.
- Return type:
str | None
- classmethod get_default_library_paths()[source]¶
Return the directories that contain the standard simulator’s libraries, as derived from the simulator’s executable path and platform. spice_exe must be set before calling this method.
This is companion with set_custom_library_paths()
- Returns:
the list of paths where the libraries should be located.
- Return type:
list[str]
- classmethod is_available()[source]¶
This method checks if the simulator exists in the system. It will return a boolean value indicating if the simulator is installed or not.
- process_name: str¶
the name of the process in the task manager
- abstract classmethod run(netlist_file, cmd_line_switches=None, timeout=None, stdout=None, stderr=None, cwd=None, exe_log=False)[source]¶
This method implements the call for the simulation of the netlist file. This should be overriden by its subclass.
- spice_exe: list[str]¶
The executable. If using a loader (like wine), make sure that the last in the array is the real simulator.