Automatic convergence detection for iterative numerical methods. Stop wasting compute.
Project description
Convergio
Automatic convergence detection for iterative numerical methods.
Stop wasting compute. One function call tells you if your solver has converged, is oscillating, is stuck between two states, or is diverging.
"Your solver finished 3000 iterations ago."
Install
pip install convergio
Only dependency: NumPy.
Usage
Analyze a completed run
from convergio import detect
result = detect(my_residual_history)
print(result.state) # "converged" | "oscillating" | "bistable" | "diverging"
print(result.quality) # 0.0 — 1.0
print(result.converged_at) # step where convergence was detected
print(result.n_modes) # number of distinct stable states
Monitor a running simulation
from convergio import watch
mon = watch(var_threshold=1e-6)
for step in range(10000):
residual = solver.step()
stop, info = mon.step(residual)
if stop:
print(f"Converged at step {step}")
break
What it detects
| State | Meaning | Recommendation |
|---|---|---|
converged |
Signal has stabilized | Stop |
oscillating |
Signal oscillates without settling | Continue or adjust parameters |
bistable |
Signal jumps between 2+ distinct states | Investigate — multiple solutions exist |
diverging |
Variance is growing | Restart with different parameters |
warming_up |
Not enough data yet | Continue |
Works with
- FEM / CFD solvers (residual monitoring)
- ML training (loss convergence)
- Monte Carlo simulations (running averages)
- Optimization loops (objective function)
- Molecular dynamics (energy equilibration)
- Any iterative numerical process that produces a scalar time series
API
detect(signal, window=0, var_threshold=1e-6)
Analyze a complete time series. Returns ConvergenceResult.
watch(var_threshold=1e-6, check_every=50, min_steps=100)
Create a live monitor. Returns Watch object. Call .step(value) each iteration.
ConvergenceResult
| Field | Type | Description |
|---|---|---|
state |
str | converged, oscillating, bistable, diverging, warming_up |
quality |
float | 0.0 — 1.0 convergence quality |
converged_at |
int or None | Step where convergence detected |
final_variance |
float | Variance of last window |
oscillation_freq |
float | Detected oscillation frequency |
n_modes |
int | Number of distinct stable states |
recommendation |
str | stop, continue, restart |
License
MIT
Author
Maximilian Jurak — 3 Kaiserberge Engineering & Research
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
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 convergio-0.1.3.tar.gz.
File metadata
- Download URL: convergio-0.1.3.tar.gz
- Upload date:
- Size: 8.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
936ad45276f6cb59d23c95dcce06ce302a517710bb8512e445d394f30c6c602e
|
|
| MD5 |
f1527b554a4c6203b08f2035495cc7e0
|
|
| BLAKE2b-256 |
cb49a2ecfa94ef811942c88dce5f0a1d981d645d83798982c75e1a51e86f93d4
|
File details
Details for the file convergio-0.1.3-py3-none-any.whl.
File metadata
- Download URL: convergio-0.1.3-py3-none-any.whl
- Upload date:
- Size: 7.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2d38dcf6f8e32372b493a19d401568b7860cc6d2b9d21c422c033d4502b2a0c
|
|
| MD5 |
fc9ab0afafb56d6cc1dfdfd44e0e3479
|
|
| BLAKE2b-256 |
8b6a66fa60d3c8f4da8310fab3ed911e4833e2894832b146cf6ca52ecbf2b2f5
|