Documentation · Cookbook · API reference · PyPI
Solverz is an open-source, general-purpose modeling and simulation toolkit for Python. Define symbolic equations, generate numerical functions or compiled Python modules, and solve your models through a consistent interface.
Installation
Solverz requires Python 3.10 or later.
pip install Solverz
Model types
Solverz supports three equation types.
- Algebraic Equations (AEs) $0=F(y,p)$
- Finite Difference Algebraic Equations (FDAEs) $0=F(y,p,y_0)$
- Differential Algebraic Equations (DAEs) $M\dot{y}=F(t,y,p)$
where $p$ is the parameter set of your models, $y_0$ is the previous time node value of $y$.
A first simulation
The following example models an object launched vertically from the ground. Its velocity and height satisfy
$$ \begin{aligned} &v'=-9.8\ &h'=v \end{aligned} $$
with $v(0)=20$ and $h(0)=0$, we can just type the codes
import matplotlib.pyplot as plt
import numpy as np
from Solverz import Model, Var, Ode, Opt, made_numerical, Rodas
# Declare a simulation model
m = Model()
# Declare variables and equations
m.h = Var('h', 0)
m.v = Var('v', 20)
m.f1 = Ode('f1', f=m.v, diff_var=m.h)
m.f2 = Ode('f2', f=-9.8, diff_var=m.v)
# Create the symbolic equation instance and the variable combination
bball, y0 = m.create_instance()
# Transform symbolic equations to python numerical functions.
nbball = made_numerical(bball, y0, sparse=True)
# Define events, that is, if the apple hits the ground then the simulation will cease.
def events(t, y):
value = np.array([y[0]])
isterminal = np.array([1])
direction = np.array([-1])
return value, isterminal, direction
# Solve the DAE
sol = Rodas(nbball,
np.linspace(0, 30, 100),
y0,
Opt(event=events))
# Visualize
plt.plot(sol.T, sol.Y['h'][:, 0])
plt.xlabel('Time/s')
plt.ylabel('h/m')
plt.show()
The result is
Use the numerical interface
The example uses a Rosenbrock method. Solverz also exposes numerical functions for custom solvers. The following Newton–Raphson implementation solves algebraic equations.
@ae_io_parser
def nr_method(eqn: nAE,
y: np.ndarray,
opt: Opt = None):
if opt is None:
opt = Opt(ite_tol=1e-8)
tol = opt.ite_tol
p = eqn.p
df = eqn.F(y, p)
ite = 0
# main loop
while max(abs(df)) > tol:
ite = ite + 1
y = y - solve(eqn.J(y, p), df)
df = eqn.F(y, p)
if ite >= 100:
print(f"Cannot converge within 100 iterations. Deviation: {max(abs(df))}!")
break
return aesol(y, ite)
The implementation of the NR solver just resembles the formulae you read in any numerical analysis book. This is because the numerical AE object eqn provides the $F(t,y,p)$ interface and its Jacobian $J(t,y,p)$, which is derived by symbolic differentiation.
Generate a reusable module
Save a model as an independent Python module when you need to reuse it.
from Solverz import module_printer
pyprinter = module_printer(bball,
y0,
'bounceball',
jit=True)
pyprinter.render()
Import the generated model with
from bounceball import mdl as nbball, y as y0
Resources
Cite Solverz
Chinese
[1] 俞睿智,顾伟,陆帅,张苏涵,徐一骏.面向综合能源系统的开源高性能仿真建模工具开发[J].中国电机工程学报,2026,46(9):3654-3665.DOI:10.13334/j.0258-8013.pcsee.242788.
English
[1] R. Yu, W. Gu, S. Lu, S. Zhang, Y. Xu and R. Wang, "Efficient and Generic Co-simulation Framework for Integrated Energy Systems with Renewable Energy Penetration," 2026 IEEE PES International Meeting (PES IM), Hong Kong, Hong Kong, 2026, pp. 1-5, doi: 10.1109/PESIM67009.2026.11439048.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file solverz-0.11.1.tar.gz.
File metadata
- Download URL: solverz-0.11.1.tar.gz
- Upload date:
- Size: 7.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d016efe7bc5b23e74abba1481e4f543733d2341c111ffa768b49702002992416
|
|
| MD5 |
1784682bda25d977f529e11ecc1a5272
|
|
| BLAKE2b-256 |
73b89118a6a35a94601e87e01229554c31baa16b32a41069fa499ecd0b4efcc2
|
Provenance
The following attestation bundles were made for solverz-0.11.1.tar.gz:
Publisher:
ci-cd.yml on smallbunnies/Solverz
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
solverz-0.11.1.tar.gz -
Subject digest:
d016efe7bc5b23e74abba1481e4f543733d2341c111ffa768b49702002992416 - Sigstore transparency entry: 2791529973
- Sigstore integration time:
-
Permalink:
smallbunnies/Solverz@85e5a3067abfb86c9a412172d97cd8c6c038ff49 -
Branch / Tag:
refs/tags/0.11.1 - Owner: https://github.com/smallbunnies
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@85e5a3067abfb86c9a412172d97cd8c6c038ff49 -
Trigger Event:
push
-
Statement type:
File details
Details for the file solverz-0.11.1-py3-none-any.whl.
File metadata
- Download URL: solverz-0.11.1-py3-none-any.whl
- Upload date:
- Size: 285.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d22c7535692fe36096ceb198419e952f068dfe8a1fe6067adf2e270d42851d09
|
|
| MD5 |
d14737b419cccfa8aa58595a8537ae20
|
|
| BLAKE2b-256 |
5516c9f97162c0cd6184b06589287afcbdebff09778366ce60941b5d359fe6d5
|
Provenance
The following attestation bundles were made for solverz-0.11.1-py3-none-any.whl:
Publisher:
ci-cd.yml on smallbunnies/Solverz
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
solverz-0.11.1-py3-none-any.whl -
Subject digest:
d22c7535692fe36096ceb198419e952f068dfe8a1fe6067adf2e270d42851d09 - Sigstore transparency entry: 2791530051
- Sigstore integration time:
-
Permalink:
smallbunnies/Solverz@85e5a3067abfb86c9a412172d97cd8c6c038ff49 -
Branch / Tag:
refs/tags/0.11.1 - Owner: https://github.com/smallbunnies
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@85e5a3067abfb86c9a412172d97cd8c6c038ff49 -
Trigger Event:
push
-
Statement type: