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.2.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.2-cp313-cp313-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.13Windows x86-64

pulsim-1.6.2-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.2-cp313-cp313-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 13.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

pulsim-1.6.2-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.2-cp312-cp312-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

pulsim-1.6.2-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.2-cp311-cp311-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

pulsim-1.6.2-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.2-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.2.tar.gz.

File metadata

  • Download URL: pulsim-1.6.2.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.2.tar.gz
Algorithm Hash digest
SHA256 a7df954bacd8e72b8edcefc8ff6818dda0cae1c0c0cada3df40fbe951b393d64
MD5 7231976231fb5b5b01f05a962d6df17d
BLAKE2b-256 93be1adfc885f2cadfff35dcd1ba14b1c276afaf565ca3dfecb6069a16a7e59f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2.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.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pulsim-1.6.2-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.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cd820457e96e67d89ac046a64f263ef17a224a12cceafb93f55b6bdb263304cd
MD5 08e64e6b916b62bf69b19091f8f989fc
BLAKE2b-256 6e2a4cc5b7e3af1f04757cbae018440e81fd649e48f2658e5821929281297cb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d183cdb1c72f53bbbe29f4a77235e988b33ac111ba03ab75ee6149064c13a0b9
MD5 4d575e3cdebda7fedf101cddd6265a22
BLAKE2b-256 e64ad95aa9c24d598938bb33d27bd86ebdcc260543c2bf1231d50644041da7a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp313-cp313-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.2-cp313-cp313-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 961cec4e90da6f4e4124871056674aa5b2eacdfc66528589c51a1f5fdd4445db
MD5 0b844f8625fbb6036d7e7a4312985edf
BLAKE2b-256 48f988c5c1e0eecb51e9d8ab15ed4ad8fe2e34e63e7980032e486f8003159d13

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pulsim-1.6.2-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.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1f98df28701953e44bc165f80aa902720471816dfdbb45ac4b5b25e587a3a06b
MD5 1231478fda4fe8103320f6be3d5ec5ff
BLAKE2b-256 8094cb5f7fbdddab29c1c2802f4c517a1b72de8b9e25cc8a0c1e71bfc51dca91

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a154e841dd2ec4eb3c3378042aecae78a80352e5377e51af2b5be1575ee88145
MD5 4907896ef35e947eea39879f241eacda
BLAKE2b-256 ac629f30b47a6cbd8846970d6f58d3404ce334f5e07620b620bc7a86649d8efb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp312-cp312-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.2-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 93314687c43ecbc3672ff7493324b4aea5309bc1131d6bab2bb2d7da87c6ea6f
MD5 b8e7929858142d3055318b4312e1774e
BLAKE2b-256 b57ca7a95cf77e5ce122face2dcc79ccc72db2d704c731d6acb78b8f7f1b78b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pulsim-1.6.2-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.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 19dac0771448d1eda1fe7cdac254e04ea4fe53765a28ff239dbeb2fb7c4fae0c
MD5 5e551ab2bc82b7d2379d515fab233d12
BLAKE2b-256 c89f009fcd7fd54c705a847e3a4ecb92499b77e640639da3e1ec2128f3aada7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0246391ba7b1b9d50dab68b26b49ba8301c6d690bd3a2675936dd9cf5ba4aa04
MD5 a0e535acb02b22e947726729eab10ff6
BLAKE2b-256 5e2432a7b8685eec0e01622b670e45532d1c5a17e61dc6f726a3232ea37a3725

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp311-cp311-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.2-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 cf3de99c6320a6283c5d0857d21b329fb9c52cf9467a2920381cce624b7699f1
MD5 ac8b229c5909b958cce8663667b000af
BLAKE2b-256 59718654a72e37f6517524ae401a90d78b25ed2fe67fb7e543c3af5bfa400bc4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pulsim-1.6.2-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.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7d15cab263a82baf976a69ff60e57bf367024e1d8cc71f2015a9fe36a4e74dda
MD5 184fb688183f8597ba65be4680a74012
BLAKE2b-256 ec48ade10535db2f222dfa3bff48e2915a947a687dc59e54d19e82d2fff1febc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e19a0e1638827fd3daae97e01a79102a989f73d632dc3e1d128e4c53b8ca2401
MD5 ae899aee93eb5c6c0c70e180f89dcfee
BLAKE2b-256 c0a2765ef3db39b379af2bda42a22e809d27302117939f892ceb623e3ac5055d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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.2-cp310-cp310-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for pulsim-1.6.2-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 87a9182a375aa72b9e16d8142f1647e035ecfbf3af461a8d2d43d4c4dce828e6
MD5 38c87e9636050dcece53804afb24348a
BLAKE2b-256 f0f76cfbf3c22b0863e4f9c62921d5f74c77127c13021440386ac8b0ec5ba4a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulsim-1.6.2-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