fusepoint 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fusepoint-0.1.0/LICENSE +29 -0
- fusepoint-0.1.0/PKG-INFO +164 -0
- fusepoint-0.1.0/README.md +138 -0
- fusepoint-0.1.0/fusepoint/__init__.py +26 -0
- fusepoint-0.1.0/fusepoint/card.py +592 -0
- fusepoint-0.1.0/fusepoint/core.py +419 -0
- fusepoint-0.1.0/fusepoint/engine.py +378 -0
- fusepoint-0.1.0/fusepoint/parsers.py +246 -0
- fusepoint-0.1.0/fusepoint/result.py +112 -0
- fusepoint-0.1.0/fusepoint.egg-info/PKG-INFO +164 -0
- fusepoint-0.1.0/fusepoint.egg-info/SOURCES.txt +18 -0
- fusepoint-0.1.0/fusepoint.egg-info/dependency_links.txt +1 -0
- fusepoint-0.1.0/fusepoint.egg-info/requires.txt +4 -0
- fusepoint-0.1.0/fusepoint.egg-info/top_level.txt +1 -0
- fusepoint-0.1.0/license_AGPL.txt +30 -0
- fusepoint-0.1.0/license_COMMERCIAL.txt +21 -0
- fusepoint-0.1.0/pyproject.toml +37 -0
- fusepoint-0.1.0/setup.cfg +4 -0
- fusepoint-0.1.0/tests/test_real_data.py +214 -0
- fusepoint-0.1.0/tests/test_validation.py +431 -0
fusepoint-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# License Notice
|
|
2
|
+
|
|
3
|
+
This software is licensed under a **dual-license model**:
|
|
4
|
+
|
|
5
|
+
1. **For Open Source and Non-Commercial Use**
|
|
6
|
+
- Licensed under the **GNU Affero General Public License v3.0 (AGPL-3.0)**.
|
|
7
|
+
- You may use, modify, and distribute this software **provided that any derivative works are also licensed under the AGPL-3.0**.
|
|
8
|
+
- See `license_AGPL.txt` for full license terms.
|
|
9
|
+
|
|
10
|
+
2. **For Commercial Use**
|
|
11
|
+
- Companies, organizations, and other commercial entities **must obtain a commercial license**.
|
|
12
|
+
- The commercial license allows proprietary use without the copyleft requirements of the AGPL.
|
|
13
|
+
- See `license_COMMERCIAL.txt` for details and contact information.
|
|
14
|
+
|
|
15
|
+
By using this software, you agree to these terms.
|
|
16
|
+
For commercial licensing inquiries, contact: **nfo@forgottenforge.xyz**
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Summary of Key Terms
|
|
21
|
+
|
|
22
|
+
| License Type | Permitted Uses | Restrictions |
|
|
23
|
+
|---------------|----------------|---------------|
|
|
24
|
+
| **AGPL-3.0** (for open-source / non-commercial use) | Free use, modification, redistribution under AGPL | Must disclose source code of modified versions and networked services |
|
|
25
|
+
| **Commercial License** (for companies) | Proprietary use, closed-source integration, internal business use | Requires commercial agreement, no resale without consent |
|
|
26
|
+
|
|
27
|
+
For full details, see:
|
|
28
|
+
- `license_AGPL.txt`
|
|
29
|
+
- `license_COMMERCIAL.txt`
|
fusepoint-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fusepoint
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Fuse — find where your system breaks, before it does.
|
|
5
|
+
Author-email: Forgotten Forge <nfo@forgottenforge.xyz>
|
|
6
|
+
License-Expression: AGPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://www.forgottenforge.xyz
|
|
8
|
+
Project-URL: Repository, https://github.com/forgottenforge/fusepoint
|
|
9
|
+
Project-URL: Documentation, https://github.com/forgottenforge/fusepoint#readme
|
|
10
|
+
Keywords: tipping-point,stability,phase-transition,critical-point,data-analysis
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering
|
|
16
|
+
Requires-Python: >=3.9
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
License-File: license_AGPL.txt
|
|
20
|
+
License-File: license_COMMERCIAL.txt
|
|
21
|
+
Requires-Dist: numpy>=1.22
|
|
22
|
+
Requires-Dist: scipy>=1.9
|
|
23
|
+
Requires-Dist: matplotlib>=3.6
|
|
24
|
+
Requires-Dist: pandas>=1.5
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
|
|
27
|
+
# Fuse
|
|
28
|
+
[](https://www.gnu.org/licenses/agpl-3.0)
|
|
29
|
+
[](mailto:nfo@forgottenforge.xyz)
|
|
30
|
+
[](https://pypi.org/project/fusepoint/)
|
|
31
|
+
[](https://python.org)
|
|
32
|
+
[]()
|
|
33
|
+
|
|
34
|
+
**Know your breaking point.**
|
|
35
|
+
|
|
36
|
+
One function. Two columns of data. A publication-quality Fuse Report.
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from fusepoint import analyze
|
|
40
|
+
|
|
41
|
+
card = analyze(x, y, current_x=0.01)
|
|
42
|
+
print(card.score) # 87
|
|
43
|
+
card.save("fuse_report.png")
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## What it does
|
|
47
|
+
|
|
48
|
+
You have a parameter you turn and a result you measure. Fuse tells you:
|
|
49
|
+
|
|
50
|
+
- **Where the tipping point is** (and how sure it is — bootstrap CI)
|
|
51
|
+
- **Whether it's real or noise** (permutation test, not guessing)
|
|
52
|
+
- **How sharp it is** (k — is it a cliff or a gentle slope?)
|
|
53
|
+
- **How safe you are** (distance to the edge, as a percentage)
|
|
54
|
+
- **A single Stability Score** from 0 to 100
|
|
55
|
+
|
|
56
|
+
All of this in a beautiful Fuse Report you can screenshot, share, put in a presentation.
|
|
57
|
+
|
|
58
|
+
## Install
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
pip install fusepoint
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Dependencies: numpy, scipy, matplotlib, pandas. That's it.
|
|
65
|
+
|
|
66
|
+
## Quick Start
|
|
67
|
+
|
|
68
|
+
### Array mode
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
import numpy as np
|
|
72
|
+
from fusepoint import analyze
|
|
73
|
+
|
|
74
|
+
lr = np.linspace(1e-5, 0.1, 80)
|
|
75
|
+
loss = your_training_function(lr)
|
|
76
|
+
|
|
77
|
+
card = analyze(lr, loss, current_x=0.01,
|
|
78
|
+
x_name="Learning Rate", y_name="Loss",
|
|
79
|
+
label="Training Stability")
|
|
80
|
+
print(card.score) # 87 — you're safe
|
|
81
|
+
print(card.critical_x) # 0.035 — this is where it blows up
|
|
82
|
+
card.save("lr_report.png")
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### DataFrame mode — the natural API
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import pandas as pd
|
|
89
|
+
from fusepoint import analyze
|
|
90
|
+
|
|
91
|
+
df = pd.read_csv("server_metrics.csv")
|
|
92
|
+
card = analyze(df, x="concurrent_requests", y="response_time_ms",
|
|
93
|
+
current_x=5000, label="Production Server")
|
|
94
|
+
card.save("server_report.png")
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Column names become axis labels automatically.
|
|
98
|
+
|
|
99
|
+
### Scan mode — analyze everything at once
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
from fusepoint import scan
|
|
103
|
+
|
|
104
|
+
results = scan("data.csv") # auto-detect x, analyze all y columns
|
|
105
|
+
results = scan(df, x="time", top_n=5) # explicit x, top 5 results
|
|
106
|
+
|
|
107
|
+
for r in results:
|
|
108
|
+
print(f"{r.y_name}: {r.score} ({r.grade})")
|
|
109
|
+
r.save(f"{r.y_name}_report.png")
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Accepts CSV, TSV, JSON (Plotly, Elasticsearch, Pandas formats), Excel, and Parquet.
|
|
113
|
+
|
|
114
|
+
### Before / After — the comparison
|
|
115
|
+
|
|
116
|
+
```python
|
|
117
|
+
from fusepoint import compare
|
|
118
|
+
|
|
119
|
+
delta = compare(x, y_before, x, y_after,
|
|
120
|
+
current_x=0.2,
|
|
121
|
+
label_before="Before Fix",
|
|
122
|
+
label_after="After Fix")
|
|
123
|
+
print(delta.delta_score) # +18 points
|
|
124
|
+
delta.save("improvement.png")
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## The Score
|
|
128
|
+
|
|
129
|
+
The Stability Score (0-100) is built from four independently validated
|
|
130
|
+
statistical components:
|
|
131
|
+
|
|
132
|
+
| Component | Weight | What it measures |
|
|
133
|
+
|-----------|--------|-----------------|
|
|
134
|
+
| **Detection** | 40% | Is the tipping point real? (permutation p-value) |
|
|
135
|
+
| **Clarity** | 20% | How sharp is it? (k = peak/mean ratio) |
|
|
136
|
+
| **Precision** | 15% | How precisely located? (CI width / range) |
|
|
137
|
+
| **Safety** | 25% | How far from the edge? (margin / range) |
|
|
138
|
+
|
|
139
|
+
The score is **self-calibrating**: Detection is measured against your own data's
|
|
140
|
+
null distribution, not against arbitrary thresholds.
|
|
141
|
+
|
|
142
|
+
## What it's NOT
|
|
143
|
+
|
|
144
|
+
- Not a curve fitter (use scipy for that)
|
|
145
|
+
- Not an anomaly detector (use isolation forests for that)
|
|
146
|
+
- Not a time-series tool (use ruptures for changepoint detection)
|
|
147
|
+
|
|
148
|
+
Fuse finds **parameter-space tipping points** — the critical value of a
|
|
149
|
+
knob where your system's behavior qualitatively changes. And it tells you how
|
|
150
|
+
confident it is.
|
|
151
|
+
|
|
152
|
+
## Built on
|
|
153
|
+
|
|
154
|
+
The mathematics behind Fuse come from [sigmacore](https://github.com/forgottenforge/sigmacore),
|
|
155
|
+
a peer-reviewed universal criticality analysis framework published in
|
|
156
|
+
[AVS Quantum Science](https://doi.org/10.1116/5.0254846).
|
|
157
|
+
Fuse is the simple door to that building.
|
|
158
|
+
|
|
159
|
+
## License
|
|
160
|
+
|
|
161
|
+
Copyright (c) 2026 Forgotten Forge — [forgottenforge.xyz](https://www.forgottenforge.xyz)
|
|
162
|
+
|
|
163
|
+
Dual-licensed: **AGPL-3.0** for open-source use, **commercial licenses** available.
|
|
164
|
+
Contact nfo@forgottenforge.xyz for commercial inquiries.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Fuse
|
|
2
|
+
[](https://www.gnu.org/licenses/agpl-3.0)
|
|
3
|
+
[](mailto:nfo@forgottenforge.xyz)
|
|
4
|
+
[](https://pypi.org/project/fusepoint/)
|
|
5
|
+
[](https://python.org)
|
|
6
|
+
[]()
|
|
7
|
+
|
|
8
|
+
**Know your breaking point.**
|
|
9
|
+
|
|
10
|
+
One function. Two columns of data. A publication-quality Fuse Report.
|
|
11
|
+
|
|
12
|
+
```python
|
|
13
|
+
from fusepoint import analyze
|
|
14
|
+
|
|
15
|
+
card = analyze(x, y, current_x=0.01)
|
|
16
|
+
print(card.score) # 87
|
|
17
|
+
card.save("fuse_report.png")
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## What it does
|
|
21
|
+
|
|
22
|
+
You have a parameter you turn and a result you measure. Fuse tells you:
|
|
23
|
+
|
|
24
|
+
- **Where the tipping point is** (and how sure it is — bootstrap CI)
|
|
25
|
+
- **Whether it's real or noise** (permutation test, not guessing)
|
|
26
|
+
- **How sharp it is** (k — is it a cliff or a gentle slope?)
|
|
27
|
+
- **How safe you are** (distance to the edge, as a percentage)
|
|
28
|
+
- **A single Stability Score** from 0 to 100
|
|
29
|
+
|
|
30
|
+
All of this in a beautiful Fuse Report you can screenshot, share, put in a presentation.
|
|
31
|
+
|
|
32
|
+
## Install
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install fusepoint
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Dependencies: numpy, scipy, matplotlib, pandas. That's it.
|
|
39
|
+
|
|
40
|
+
## Quick Start
|
|
41
|
+
|
|
42
|
+
### Array mode
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
import numpy as np
|
|
46
|
+
from fusepoint import analyze
|
|
47
|
+
|
|
48
|
+
lr = np.linspace(1e-5, 0.1, 80)
|
|
49
|
+
loss = your_training_function(lr)
|
|
50
|
+
|
|
51
|
+
card = analyze(lr, loss, current_x=0.01,
|
|
52
|
+
x_name="Learning Rate", y_name="Loss",
|
|
53
|
+
label="Training Stability")
|
|
54
|
+
print(card.score) # 87 — you're safe
|
|
55
|
+
print(card.critical_x) # 0.035 — this is where it blows up
|
|
56
|
+
card.save("lr_report.png")
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### DataFrame mode — the natural API
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
import pandas as pd
|
|
63
|
+
from fusepoint import analyze
|
|
64
|
+
|
|
65
|
+
df = pd.read_csv("server_metrics.csv")
|
|
66
|
+
card = analyze(df, x="concurrent_requests", y="response_time_ms",
|
|
67
|
+
current_x=5000, label="Production Server")
|
|
68
|
+
card.save("server_report.png")
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Column names become axis labels automatically.
|
|
72
|
+
|
|
73
|
+
### Scan mode — analyze everything at once
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
from fusepoint import scan
|
|
77
|
+
|
|
78
|
+
results = scan("data.csv") # auto-detect x, analyze all y columns
|
|
79
|
+
results = scan(df, x="time", top_n=5) # explicit x, top 5 results
|
|
80
|
+
|
|
81
|
+
for r in results:
|
|
82
|
+
print(f"{r.y_name}: {r.score} ({r.grade})")
|
|
83
|
+
r.save(f"{r.y_name}_report.png")
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Accepts CSV, TSV, JSON (Plotly, Elasticsearch, Pandas formats), Excel, and Parquet.
|
|
87
|
+
|
|
88
|
+
### Before / After — the comparison
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
from fusepoint import compare
|
|
92
|
+
|
|
93
|
+
delta = compare(x, y_before, x, y_after,
|
|
94
|
+
current_x=0.2,
|
|
95
|
+
label_before="Before Fix",
|
|
96
|
+
label_after="After Fix")
|
|
97
|
+
print(delta.delta_score) # +18 points
|
|
98
|
+
delta.save("improvement.png")
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## The Score
|
|
102
|
+
|
|
103
|
+
The Stability Score (0-100) is built from four independently validated
|
|
104
|
+
statistical components:
|
|
105
|
+
|
|
106
|
+
| Component | Weight | What it measures |
|
|
107
|
+
|-----------|--------|-----------------|
|
|
108
|
+
| **Detection** | 40% | Is the tipping point real? (permutation p-value) |
|
|
109
|
+
| **Clarity** | 20% | How sharp is it? (k = peak/mean ratio) |
|
|
110
|
+
| **Precision** | 15% | How precisely located? (CI width / range) |
|
|
111
|
+
| **Safety** | 25% | How far from the edge? (margin / range) |
|
|
112
|
+
|
|
113
|
+
The score is **self-calibrating**: Detection is measured against your own data's
|
|
114
|
+
null distribution, not against arbitrary thresholds.
|
|
115
|
+
|
|
116
|
+
## What it's NOT
|
|
117
|
+
|
|
118
|
+
- Not a curve fitter (use scipy for that)
|
|
119
|
+
- Not an anomaly detector (use isolation forests for that)
|
|
120
|
+
- Not a time-series tool (use ruptures for changepoint detection)
|
|
121
|
+
|
|
122
|
+
Fuse finds **parameter-space tipping points** — the critical value of a
|
|
123
|
+
knob where your system's behavior qualitatively changes. And it tells you how
|
|
124
|
+
confident it is.
|
|
125
|
+
|
|
126
|
+
## Built on
|
|
127
|
+
|
|
128
|
+
The mathematics behind Fuse come from [sigmacore](https://github.com/forgottenforge/sigmacore),
|
|
129
|
+
a peer-reviewed universal criticality analysis framework published in
|
|
130
|
+
[AVS Quantum Science](https://doi.org/10.1116/5.0254846).
|
|
131
|
+
Fuse is the simple door to that building.
|
|
132
|
+
|
|
133
|
+
## License
|
|
134
|
+
|
|
135
|
+
Copyright (c) 2026 Forgotten Forge — [forgottenforge.xyz](https://www.forgottenforge.xyz)
|
|
136
|
+
|
|
137
|
+
Dual-licensed: **AGPL-3.0** for open-source use, **commercial licenses** available.
|
|
138
|
+
Contact nfo@forgottenforge.xyz for commercial inquiries.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Fuse — Find where your system breaks, before it does.
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
from fusepoint import analyze
|
|
6
|
+
card = analyze(x, y, x_name="Load", y_name="Latency")
|
|
7
|
+
card = analyze(df, x="load", y="latency") # DataFrame mode
|
|
8
|
+
print(card.score)
|
|
9
|
+
card.save("stability.png")
|
|
10
|
+
|
|
11
|
+
https://www.forgottenforge.xyz
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from fusepoint.core import analyze, scan, compare
|
|
15
|
+
from fusepoint.result import StabilityResult
|
|
16
|
+
from fusepoint.parsers import parse_json, detect_x_column
|
|
17
|
+
|
|
18
|
+
__version__ = "0.1.0"
|
|
19
|
+
__all__ = [
|
|
20
|
+
"analyze",
|
|
21
|
+
"scan",
|
|
22
|
+
"compare",
|
|
23
|
+
"StabilityResult",
|
|
24
|
+
"parse_json",
|
|
25
|
+
"detect_x_column",
|
|
26
|
+
]
|