Skip to main content

High-performance circuit simulator for power electronics

Project description

██████╗ ██╗   ██╗██╗     ███████╗██╗███╗   ███╗
██╔══██╗██║   ██║██║     ██╔════╝██║████╗ ████║
██████╔╝██║   ██║██║     ███████╗██║██╔████╔██║
██╔═══╝ ██║   ██║██║     ╚════██║██║██║╚██╔╝██║
██║     ╚██████╔╝███████╗███████║██║██║ ╚═╝ ██║
╚═╝      ╚═════╝ ╚══════╝╚══════╝╚═╝╚═╝     ╚═╝

Header-only C++23 + Python power-electronics simulator with an in-house sparse-LU kernel.

CI Docs PyPI Python C++23 License: MIT Citation v1.4.0 release

Docs · Tutorials · API reference · How Pulsim works · Examples · Changelog


TL;DR

Pulsim is a SPICE alternative tuned for the switched-mode power electronics workload: PWL devices, finite-state topologies, $10^8$-step transients. Where SPICE pays full assembly + LU factorization on every step, Pulsim caches one state-space per switch combination and updates only the columns of $L+U$ that actually changed.

The v1.3.0 sparse LU rewrite + the v1.4.0 generalised path-based update framework give:

Workload n_state Speedup vs baseline
Buck single-bit Gray-code 14 2.81×
Multi-bit δ=2 switch transition 14 1.58× vs Eigen LU
Parametric sweep (R/L/C) 14–26 3.0–3.7× vs rebuild
AC sweep complex LU 8–32 rough parity with Eigen

Both single-bit and (v1.4.0+) multi-bit / parametric paths run through an in-house C++23 sparse LU. No KLU, no SuiteSparse, no Eigen::SparseLU<complex> in production — only Eigen as a matrix container.


Why Pulsim

Feature What it buys you
PLECS-style PWL cache (Layer 4) switched-converter transient in milliseconds, not minutes
Header-only C++23 kernel drop pulsim/ into your CMake via pulsim::core; no static-library link
In-house sparse LU (Pulsim's own, v1.3.0+) path-based partial refactor for switch flips + parameter sweeps; zero third-party LU
Python-first ergonomics CircuitBuilder takes string node names + SI units; one SimulationResult for transients, AC, sweeps, MC
Mixed-domain control chain PID / comparator / rate-limiter / FOC / thermal at kernel speed (no Python interpreter per step)
Frequency-domain analysis small-signal MNA Bode + swept-sine FRA + closed-loop GM/PM in the same surface
Drop-in parameter sweep + MC (v1.4.0+) sweep_path_aware / monte_carlo_path_aware reuse the cached LU across all sweep points

Performance

Numbers captured 2026-05-24 on macOS / Apple Silicon (-O3 -DNDEBUG). Reproducible end-to-end via cmake --build build --target pulsim_benchmarks followed by ./build/core/pulsim_benchmarks "[rank1][microbench]" (and the analogous tags [multi_bit], [parametric], [ac_sweep]).

1) Single-bit rank-1 (v1.3.0, N-switch chain)

3-backend microbench. (A) baseline solve per-mask cache, (B) Eigen sliding solver, (C) Pulsim path-based partial refactor.

N n_state µs/solve (A) µs/eigen (B) µs/pulsim (C) C/A
4 6 6.74 6.15 2.30 2.93×
12 14 10.01 5.41 3.56 2.81×
16 18 12.15 7.08 4.31 2.82×
20 22 13.85 8.24 5.08 2.73×
24 26 16.41 9.83 6.13 2.68×

Zero fallbacks across all 1999 single-bit Gray-code flips × 8 N values.

2) Multi-bit path-union (v1.4.0, Pulsim ÷ Eigen sliding solver)

N (n_state) δ=1 δ=2 δ=3 δ=4
8 (10) 3.12× 1.62× 1.61× 1.42×
12 (14) 1.72× 1.58× 1.58× 1.42×
16 (18) 1.56× 1.28× 1.51× 1.25×
20 (22) 1.36× 1.42× 1.54× 1.51×
24 (26) 1.55× 1.46× 1.33× 1.42×

Hit rate decays gracefully: ~45 % path-union at δ=2 → ~10 % at δ=4 (rest fall back cleanly to full factorize).

3) Parametric sweep / Monte Carlo (v1.4.0, Pulsim ÷ legacy rebuild)

n_state 50 pts 100 pts 500 pts 1000 pts
8 5.18× 3.29× 3.55× 3.68×
14 3.57× 3.02× 3.51× 3.35×
26 3.53× 3.31× 3.38× 3.40×

Zero fallbacks across all 12 cells.

4) AC sweep complex LU (v1.4.0, Pulsim ÷ Eigen)

n µs/freq Eigen µs/freq Pulsim Pulsim ÷ Eigen Parity Δ
8 8.98 5.48 0.61× (Pulsim faster) 1×10⁻²²
16 8.16 7.64 0.94× 5×10⁻²²
32 13.98 14.56 1.04× 3×10⁻²¹
64 28.49 33.36 1.17× 1×10⁻²¹
128 46.13 91.52 1.98× (Eigen faster) 4×10⁻²¹

Both solvers numerically interchangeable. v1.4.0 contribution is no third-party LU on the production path; Backend::Eigen is kept explicitly available as a paper-comparison baseline.


Quick start

Prerequisites

Two native dependencies — everything else is header-only or vendored at configure time:

Dependency Why
Eigen 3.4+ Header-only sparse linear algebra (matrix + vector containers). Pulsim ships its own sparse LU on top.
C++23 compiler AppleClang 15+ / Clang 17+ / GCC 13+
# macOS (Homebrew)
brew install cmake ninja eigen

# Debian / Ubuntu
sudo apt-get install -y cmake ninja-build libeigen3-dev

# Fedora
sudo dnf install cmake ninja-build eigen3-devel

Install from PyPI

pip install pulsim

Or build from source

git clone https://github.com/lgili/Pulsim.git
cd Pulsim
pip install -e .

First simulation — 8 lines

import pulsim as p

b = p.CircuitBuilder()
b.add_voltage_source("Vin", "n0", "gnd", 5.0)
b.add_resistor      ("R1", "n0", "vc",   1000.0)
b.add_capacitor     ("C1", "vc", "gnd",  1e-6)

res = p.simulate(b, t_end=5e-3, dt=1e-5)
p.plot.scope(b, res, signals=["vc"])      # one-line waveform

Parametric sweep — exploit the v1.4.0 path-based refactor

import numpy as np
import pulsim as p

def make_rc(R=5.0, C=10e-6):
    b = p.CircuitBuilder()
    b.add_voltage_source("v1", "vin", "gnd", 10.0)
    b.add_resistor      ("R_load", "vin", "vout", R)
    b.add_capacitor     ("C_out", "vout", "gnd", C)
    return b

def steady_state_vout(res, _params):
    states = np.asarray(res.states)
    return {"vout": float(states[-1, 1])}

# Sweep R_load through 100 values. v1.4.0 path-based refactor:
# build the cache ONCE, then reuse the L+U factors at each point.
out = p.sweep_path_aware(
    make_rc(),                               # initial builder
    params={"R_load": np.linspace(1, 20, 100).tolist()},
    kpi_fn=steady_state_vout,
    t_end=5e-3, dt=1e-6,
)
print(out.to_dataframe().head())

For Monte Carlo, swap sweep_path_awaremonte_carlo_path_aware(builder, distributions={"R_load": lambda r: r.uniform(1, 20)}, n_samples=1000, ...) and get the same ~3.4× speedup over the legacy rebuild-per-sample pattern.


What's new in v1.4.0

Two algorithmic contributions ship in one release — see CHANGELOG.md for the full breakdown.

In-house complex sparse LU

PulsimSparseLuSolver is now templated on Scalar. The new PulsimComplexSparseLuSolver = PulsimSparseLuSolverT<std::complex<Real>> drives the AC-sweep production path — Eigen::SparseLU<complex> is no longer compiled in. Backward-compat aliases keep the v1.3.0 real-scalar API source-identical:

using PulsimSparseLuSolver        = PulsimSparseLuSolverT<Real>;
using PulsimComplexSparseLuSolver = PulsimSparseLuSolverT<std::complex<Real>>;
using Matrix                      = MatrixT<Real>;
using Vector                      = VectorT<Real>;

Multi-bit + parametric path-based update

The v1.3.0 single-bit path-based partial refactor now generalises to three SMPS-relevant use cases:

Case Mechanism Speedup
Single-bit switch flip (v1.3.0) etree path of one column 2.7–2.9×
Multi-bit switch flip (v1.4.0+) union of etree paths 1.3–1.7×
Parametric value sweep (v1.4.0+) path of param-affected cols 3.0–3.7×

The MAX_PATH_LENGTH_RATIO = 0.6 gate skips the path-based attempt when the union path covers > 60 % of $n$ (the path-walk would cost the same as a fresh factorise).

Python helpers

Drop-in replacements for the legacy sweep / MC APIs:

import pulsim as p
p.sweep_path_aware(builder, params={...}, kpi_fn=..., t_end=..., dt=...)
p.monte_carlo_path_aware(builder, distributions={...}, n_samples=..., ...)

Auto-fallback to the legacy code path when a parameter name isn't recognised (warns + delegates) — drop-in safe.


What's NOT in Pulsim (intentionally)

Many simulators inherit a sprawling dependency tree from their sparse-LU backend. Pulsim deliberately doesn't:

❌ Not used Why
SuiteSparse / KLU The v1.3.0 in-house LU replaces KLU completely. No SuiteSparse linkage, no licensing complexity.
Eigen::SparseLU Replaced in v1.4.0 by the in-house complex specialisation. Backend::Eigen is retained explicitly as a paper-comparison baseline.
dpsim / dwf / PSCAD vendored code Pulsim's algorithms are entirely first-party; the methods paper claims ours, not someone else's.
Runtime Python in kernel The C++ kernel has zero Python dependency. pybind11 only crosses the boundary at the API surface.
Heavy installer / multi-step build pip install pulsim or cmake --build; no make-then-make-install dance.

What IS used: Eigen 3.4+ (header-only, as a sparse matrix container) and pybind11 (for the Python binding). That's it.


Architecture

10 layers, bottom-up:

Layer 0:  Sparse LU + matrix containers      (in-house, real + complex)
Layer 1:  Topology graph + switch state mask
Layer 2:  Device models (R, L, C, MOSFET, IGBT, source, ...)
Layer 3:  Symbolic stamping helpers (Newton refresh)
Layer 4:  PWL state-space cache  ← refactor_parametric + solve_rank1
Layer 5:  Solver loop + event detection + run_transient
Layer 6:  CircuitBuilder (ergonomic API surface)
Layer 7:  YAML loader + reference circuits
Layer 8:  AC analysis (small-signal MNA Bode + FRA)
Layer 9:  Python facade (CircuitBuilder, simulate, sweep, plot)

See docs/how-pulsim-works/ for the chapter-by-chapter walkthrough (18 figures, 11 chapters, MNA basics through path-based partial refactor with full provenance).


Validation

# C++ kernel tests (Catch2 binaries per layer)
ctest --test-dir build --output-on-failure
# 498 / 498 tests pass on a fresh checkout

# Python runtime tests
PYTHONPATH=build/python pytest python/tests -v
# 6 / 6 path-aware sweep tests pass

# Benchmark suite (opt-in, not in default ctest)
./build/core/pulsim_benchmarks "[rank1][microbench]"
./build/core/pulsim_benchmarks "[multi_bit][microbench]"
./build/core/pulsim_benchmarks "[parametric][microbench]"
./build/core/pulsim_benchmarks "[ac_sweep][microbench]"

Reference CSV traces for the 10 converter showcases live under benchmarks/baselines/. A 1.0-native regression runner that consumes them is on the roadmap.


Roadmap

Version Highlight Status
v1.3.0 In-house real sparse LU (KLU removed) ✅ shipped
v1.4.0 Complex sparse LU + multi-bit + parametric refactor + Python helpers ✅ shipped (this release)
v1.5.0 Reachability-based sparse triangular solve (close the n ≥ 64 Eigen gap on AC sweep) planned
v1.6.0 AC-sweep symbolic-reuse: amortise analyze across all frequencies planned
v1.7.0 BTF block-triangular ordering — composes with path-union for an extra ~2× on wide multi-bit transitions planned
v2.0.0 TBD — first breaking Python API change since v1.0.0 TBD

Citation

If you use Pulsim in academic work, please cite:

@software{pulsim,
  author  = {Gili, Luiz Carlos},
  title   = {Pulsim: A piecewise-linear state-space simulator for switched-mode power electronics},
  version = {1.4.0},
  url     = {https://github.com/lgili/Pulsim},
  year    = {2026},
}

Machine-readable CITATION.cff is in the repo root.


Contributing

PRs welcome. Workflow:

  1. Open an issue describing the change (or pick one from the issue tracker).
  2. For non-trivial work, draft an OpenSpec proposal under openspec/changes/<name>/ (see existing proposals under openspec/changes/archive/ for the format).
  3. Implement + add tests under core/tests/ (C++) or python/tests/ (Python).
  4. Ensure all 498 C++ tests + 6 Python tests pass and openspec validate --strict is green.
  5. Open the PR; CI runs on every push.

See CONTRIBUTING.md for the full guide.


License

MIT © 2026 Luiz Carlos Gili. Free for academic + commercial use; please cite when used in academic work.


Documentation deployment

Docs are published by .github/workflows/docs.yml using MkDocs Material + mike:

  • PR: strict docs build (no deploy)
  • main: deploys to the dev channel
  • vX.Y.Z tag: deploys release docs and updates latest

In repository settings, set Pages Source to GitHub Actions.

Live docs: https://lgili.github.io/Pulsim/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pulsim-1.6.1.tar.gz (36.9 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pulsim-1.6.1-cp313-cp313-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.13Windows x86-64

pulsim-1.6.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pulsim-1.6.1-cp313-cp313-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 13.0+ ARM64

pulsim-1.6.1-cp312-cp312-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.12Windows x86-64

pulsim-1.6.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pulsim-1.6.1-cp312-cp312-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64

pulsim-1.6.1-cp311-cp311-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.11Windows x86-64

pulsim-1.6.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pulsim-1.6.1-cp311-cp311-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64

pulsim-1.6.1-cp310-cp310-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.10Windows x86-64

pulsim-1.6.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pulsim-1.6.1-cp310-cp310-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.10macOS 13.0+ ARM64

File details

Details for the file pulsim-1.6.1.tar.gz.

File metadata

  • Download URL: pulsim-1.6.1.tar.gz
  • Upload date:
  • Size: 36.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pulsim-1.6.1.tar.gz
Algorithm Hash digest
SHA256 8ada501781a2d723f17e6e4e9ed2d01bc3bbf9de4d16f59c2906580a872458c3
MD5 4a0d958b7b7f451fe4eb54875625691a
BLAKE2b-256 e0549cc4b952fc06418e67b513e1733fbf45170701d7013adfc60b0396ff515f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1.tar.gz:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pulsim-1.6.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pulsim-1.6.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c07650addbb12ca4e64428b1d053f4d2b4054f07256d1e6245d6127d8efb890b
MD5 8ed304fff37269808b3b1807c0546184
BLAKE2b-256 d3a4f98e782b9caee9df38a9f62984949819888e71b8c274c6b5c12247d253f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 025e1de1d69bc9673a4b0d5bc2f5449f71f02ccc27d4d5ee0f4cb7d1d6f161a8
MD5 4096903d175744ef5e82a8478cd4ce8f
BLAKE2b-256 4b31c982f9ea1a67f64efaa87a798fb25520e26bab1d6db9e04e40cc115d5651

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp313-cp313-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.1-cp313-cp313-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 bec64b2a3760f85694760c41edbc91b7a17ded06aaa160f8be81543ecd0ed56a
MD5 aa1011219e0bbc97faa479fc3feb2429
BLAKE2b-256 bfcc568d2430379b3ac4921f46ae72e86047cde2537bc4ee9dc27ae2c4c6c60c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp313-cp313-macosx_13_0_arm64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pulsim-1.6.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pulsim-1.6.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a1f83b7726828426caf73a66548555b9fc50e8287dc75f405922143afcf7b4cc
MD5 4bc437de8542f2e5dcb0fd6f6394cf71
BLAKE2b-256 f8dc8cf051c2f776d031c5ba7ba502dfb71d5ff6165a632304328ea308747daf

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 97127df215a1a5d8b3ce4f5a5b01f35293058a54f33d1093ef8e0dd3f88dd536
MD5 2cb275625841de94d98a71c5cb20785c
BLAKE2b-256 5efb7e19452cdc0b6fb49899bc284136579d771ac569eb81a3136d5d8aaa7259

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp312-cp312-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.1-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 a49725b02e49bad354eeb2f6a4fdfc34bc28b20af0da63a5721a061d50ab3011
MD5 65bec42b198dcecf3232d411cc71f463
BLAKE2b-256 5d96e6dfe8422a10510d2186f5f24072e7320c364e1f7c31f925a8740d5906ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp312-cp312-macosx_13_0_arm64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pulsim-1.6.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pulsim-1.6.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 827b3361f6a5d00b077eea13f0cfaea8de0e0fc0f1658195a295037b8c8a8d4e
MD5 ebf7fb186f1484a59456398c44be9ecd
BLAKE2b-256 ba31216476ab85dd7746fa1626904f3e28c420c8b36f0ea7ad60b19c8567da3b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f1e530e1da415055adc8d5c45adc8cc48750149e856568cf1ef32e01e0014f3c
MD5 b3ea55683b126bedb96435f0d60aa62c
BLAKE2b-256 e012613241942f2d5c25a4d500510574d74a0102c0d6a5a1e738a18d5db20e22

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp311-cp311-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.1-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 72d616121fa68117982f33f3758d2bb84d92a9141e895477e54d85e5b32c41d4
MD5 9c636606b98b82e07d0a8c5c4bf86e34
BLAKE2b-256 704a8132a90529d21a141a7fabb7480f8b993fbb02dd36140940efae6ebd9cef

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp311-cp311-macosx_13_0_arm64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pulsim-1.6.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pulsim-1.6.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9db374e3d1d8e0f2d5b1fbaa93dc2166f4a21b9dda4bd75d11069b00f89fb72c
MD5 9026db82b06e652b536bb2952b8fb9af
BLAKE2b-256 49a2f67f1e05ce4e49cffa85418369799e3d844c9368f4ab1711f55dff9f68ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 552eff94dd4a22a94e409e01ca718b96ca2f437cf24602205373fbc47cc5ab41
MD5 85243089bd1395888a2b4353d29611ae
BLAKE2b-256 cd4b6696143d86d48566762599d86c5290f5b93de28d4c4f94a96ffb3a069a3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pulsim-1.6.1-cp310-cp310-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.1-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 ca2ecf83c29edd154ef2d70f4028cdd4a0dab6106abc8699ccff6f1b0ee0cbd5
MD5 e1279a377684491f2249ea07d5479940
BLAKE2b-256 c2b0720ee2d2e5796585fe9a1d068bdacfe327498f9269bf2634dc0427f68459

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.1-cp310-cp310-macosx_13_0_arm64.whl:

Publisher: publish.yml on lgili/Pulsim

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page