wavqwise 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.
- wavqwise-0.1.0/PKG-INFO +417 -0
- wavqwise-0.1.0/README.md +332 -0
- wavqwise-0.1.0/pyproject.toml +99 -0
- wavqwise-0.1.0/setup.cfg +4 -0
- wavqwise-0.1.0/wavqwise/__init__.py +27 -0
- wavqwise-0.1.0/wavqwise/alerts/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/anomaly/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/anomaly/dbscan_detector.py +6 -0
- wavqwise-0.1.0/wavqwise/anomaly/isolation_forest.py +25 -0
- wavqwise-0.1.0/wavqwise/anomaly/pipeline.py +49 -0
- wavqwise-0.1.0/wavqwise/anomaly/statistical.py +53 -0
- wavqwise-0.1.0/wavqwise/anomaly/stl_detector.py +7 -0
- wavqwise-0.1.0/wavqwise/cli/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/cli/main.py +52 -0
- wavqwise-0.1.0/wavqwise/core/__init__.py +4 -0
- wavqwise-0.1.0/wavqwise/core/base.py +129 -0
- wavqwise-0.1.0/wavqwise/core/config.py +54 -0
- wavqwise-0.1.0/wavqwise/core/incremental.py +72 -0
- wavqwise-0.1.0/wavqwise/core/pipeline.py +491 -0
- wavqwise-0.1.0/wavqwise/core/registry.py +271 -0
- wavqwise-0.1.0/wavqwise/database/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/database/influxdb.py +5 -0
- wavqwise-0.1.0/wavqwise/database/mongodb.py +5 -0
- wavqwise-0.1.0/wavqwise/database/mysql.py +2 -0
- wavqwise-0.1.0/wavqwise/database/postgres.py +14 -0
- wavqwise-0.1.0/wavqwise/database/sqlite.py +17 -0
- wavqwise-0.1.0/wavqwise/database/timescaledb.py +2 -0
- wavqwise-0.1.0/wavqwise/ecosystem/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/ecosystem/bridge.py +9 -0
- wavqwise-0.1.0/wavqwise/evaluation/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/evaluation/ab_test.py +21 -0
- wavqwise-0.1.0/wavqwise/evaluation/metrics.py +53 -0
- wavqwise-0.1.0/wavqwise/export/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/features/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/features/auto_features.py +34 -0
- wavqwise-0.1.0/wavqwise/forecasters/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/forecasters/cloud/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/forecasters/cloud/anthropic_wrapper.py +4 -0
- wavqwise-0.1.0/wavqwise/forecasters/cloud/ollama.py +7 -0
- wavqwise-0.1.0/wavqwise/forecasters/cloud/openai.py +6 -0
- wavqwise-0.1.0/wavqwise/forecasters/cloud/timegpt.py +4 -0
- wavqwise-0.1.0/wavqwise/forecasters/ensemble.py +2 -0
- wavqwise-0.1.0/wavqwise/forecasters/foundation/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/forecasters/foundation/chronos.py +37 -0
- wavqwise-0.1.0/wavqwise/forecasters/foundation/huggingface.py +7 -0
- wavqwise-0.1.0/wavqwise/forecasters/foundation/lagllama.py +4 -0
- wavqwise-0.1.0/wavqwise/forecasters/foundation/moirai.py +4 -0
- wavqwise-0.1.0/wavqwise/forecasters/foundation/timesfm.py +4 -0
- wavqwise-0.1.0/wavqwise/forecasters/ml/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/forecasters/ml/gradient_boost.py +26 -0
- wavqwise-0.1.0/wavqwise/forecasters/ml/linear.py +17 -0
- wavqwise-0.1.0/wavqwise/forecasters/ml/sklearn_wrapper.py +57 -0
- wavqwise-0.1.0/wavqwise/forecasters/model_selector.py +2 -0
- wavqwise-0.1.0/wavqwise/forecasters/neural/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/forecasters/neural/nbeats.py +4 -0
- wavqwise-0.1.0/wavqwise/forecasters/neural/neuralprophet_wrapper.py +31 -0
- wavqwise-0.1.0/wavqwise/forecasters/neural/tft.py +4 -0
- wavqwise-0.1.0/wavqwise/forecasters/traditional/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/forecasters/traditional/arima.py +79 -0
- wavqwise-0.1.0/wavqwise/forecasters/traditional/ces.py +4 -0
- wavqwise-0.1.0/wavqwise/forecasters/traditional/croston.py +4 -0
- wavqwise-0.1.0/wavqwise/forecasters/traditional/ets.py +51 -0
- wavqwise-0.1.0/wavqwise/forecasters/traditional/holtwinters.py +7 -0
- wavqwise-0.1.0/wavqwise/forecasters/traditional/moving_average.py +99 -0
- wavqwise-0.1.0/wavqwise/forecasters/traditional/naive.py +65 -0
- wavqwise-0.1.0/wavqwise/forecasters/traditional/sarima.py +44 -0
- wavqwise-0.1.0/wavqwise/forecasters/traditional/theta.py +31 -0
- wavqwise-0.1.0/wavqwise/loaders/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/loaders/auto_loader.py +27 -0
- wavqwise-0.1.0/wavqwise/loaders/base.py +8 -0
- wavqwise-0.1.0/wavqwise/preprocessors/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/preprocessors/auto_preprocessor.py +38 -0
- wavqwise-0.1.0/wavqwise/runtime/__init__.py +2 -0
- wavqwise-0.1.0/wavqwise/runtime/engine.py +334 -0
- wavqwise-0.1.0/wavqwise/runtime/onnx_inference.py +180 -0
- wavqwise-0.1.0/wavqwise/signals/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/signals/pipeline.py +102 -0
- wavqwise-0.1.0/wavqwise/trading/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/trading/indicators/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/trading/indicators/momentum.py +23 -0
- wavqwise-0.1.0/wavqwise/trading/indicators/trend.py +24 -0
- wavqwise-0.1.0/wavqwise/trading/indicators/volatility.py +24 -0
- wavqwise-0.1.0/wavqwise/trading/indicators/volume.py +5 -0
- wavqwise-0.1.0/wavqwise/trading/pipeline.py +50 -0
- wavqwise-0.1.0/wavqwise/visualization/__init__.py +0 -0
- wavqwise-0.1.0/wavqwise/visualization/anomaly_plot.py +26 -0
- wavqwise-0.1.0/wavqwise/visualization/dashboard.py +9 -0
- wavqwise-0.1.0/wavqwise/visualization/forecast_plot.py +54 -0
- wavqwise-0.1.0/wavqwise.egg-info/PKG-INFO +417 -0
- wavqwise-0.1.0/wavqwise.egg-info/SOURCES.txt +92 -0
- wavqwise-0.1.0/wavqwise.egg-info/dependency_links.txt +1 -0
- wavqwise-0.1.0/wavqwise.egg-info/entry_points.txt +2 -0
- wavqwise-0.1.0/wavqwise.egg-info/requires.txt +75 -0
- wavqwise-0.1.0/wavqwise.egg-info/top_level.txt +1 -0
wavqwise-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: wavqwise
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Pluggable temporal intelligence. Any model. Any signal. Five lines to forecast. Sense. Forecast. Alert.
|
|
5
|
+
Author: Venkatkumar Rajan
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/VK-Ant/wavqwise
|
|
8
|
+
Project-URL: Documentation, https://github.com/VK-Ant/wavqwise#readme
|
|
9
|
+
Project-URL: Repository, https://github.com/VK-Ant/wavqwise
|
|
10
|
+
Project-URL: Issues, https://github.com/VK-Ant/wavqwise/issues
|
|
11
|
+
Keywords: time-series,forecasting,anomaly-detection,temporal-intelligence,signal-processing,eeg,trading,pluggable
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
23
|
+
Requires-Python: >=3.9
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
Requires-Dist: numpy>=1.24
|
|
26
|
+
Requires-Dist: pandas>=2.0
|
|
27
|
+
Requires-Dist: scipy>=1.10
|
|
28
|
+
Requires-Dist: matplotlib>=3.7
|
|
29
|
+
Requires-Dist: scikit-learn>=1.2
|
|
30
|
+
Requires-Dist: joblib>=1.3
|
|
31
|
+
Requires-Dist: pyyaml>=6.0
|
|
32
|
+
Requires-Dist: tqdm>=4.65
|
|
33
|
+
Provides-Extra: traditional
|
|
34
|
+
Requires-Dist: statsforecast>=1.6; extra == "traditional"
|
|
35
|
+
Requires-Dist: statsmodels>=0.14; extra == "traditional"
|
|
36
|
+
Provides-Extra: ml
|
|
37
|
+
Requires-Dist: xgboost>=2.0; extra == "ml"
|
|
38
|
+
Requires-Dist: lightgbm>=4.0; extra == "ml"
|
|
39
|
+
Provides-Extra: neural
|
|
40
|
+
Requires-Dist: torch>=2.0; extra == "neural"
|
|
41
|
+
Requires-Dist: neuralprophet>=0.7; extra == "neural"
|
|
42
|
+
Provides-Extra: foundation
|
|
43
|
+
Requires-Dist: transformers>=4.35; extra == "foundation"
|
|
44
|
+
Requires-Dist: chronos-forecasting>=1.0; extra == "foundation"
|
|
45
|
+
Provides-Extra: signals
|
|
46
|
+
Requires-Dist: mne>=1.5; extra == "signals"
|
|
47
|
+
Requires-Dist: PyWavelets>=1.4; extra == "signals"
|
|
48
|
+
Provides-Extra: trading
|
|
49
|
+
Requires-Dist: yfinance>=0.2; extra == "trading"
|
|
50
|
+
Requires-Dist: ta>=0.11; extra == "trading"
|
|
51
|
+
Provides-Extra: database
|
|
52
|
+
Requires-Dist: sqlalchemy>=2.0; extra == "database"
|
|
53
|
+
Requires-Dist: psycopg2-binary>=2.9; extra == "database"
|
|
54
|
+
Requires-Dist: pymongo>=4.5; extra == "database"
|
|
55
|
+
Requires-Dist: influxdb-client>=1.36; extra == "database"
|
|
56
|
+
Provides-Extra: viz
|
|
57
|
+
Requires-Dist: plotly>=5.15; extra == "viz"
|
|
58
|
+
Requires-Dist: seaborn>=0.12; extra == "viz"
|
|
59
|
+
Provides-Extra: cloud
|
|
60
|
+
Requires-Dist: openai>=1.0; extra == "cloud"
|
|
61
|
+
Requires-Dist: anthropic>=0.20; extra == "cloud"
|
|
62
|
+
Requires-Dist: ollama>=0.1; extra == "cloud"
|
|
63
|
+
Provides-Extra: onnx-cpu
|
|
64
|
+
Requires-Dist: onnxruntime>=1.16; extra == "onnx-cpu"
|
|
65
|
+
Requires-Dist: skl2onnx>=1.16; extra == "onnx-cpu"
|
|
66
|
+
Provides-Extra: onnx-gpu
|
|
67
|
+
Requires-Dist: onnxruntime-gpu>=1.16; extra == "onnx-gpu"
|
|
68
|
+
Requires-Dist: skl2onnx>=1.16; extra == "onnx-gpu"
|
|
69
|
+
Provides-Extra: tensorrt
|
|
70
|
+
Requires-Dist: onnxruntime-gpu>=1.16; extra == "tensorrt"
|
|
71
|
+
Requires-Dist: tensorrt>=8.6; extra == "tensorrt"
|
|
72
|
+
Provides-Extra: export
|
|
73
|
+
Requires-Dist: fastapi>=0.100; extra == "export"
|
|
74
|
+
Requires-Dist: uvicorn>=0.23; extra == "export"
|
|
75
|
+
Requires-Dist: onnx>=1.14; extra == "export"
|
|
76
|
+
Provides-Extra: all
|
|
77
|
+
Requires-Dist: wavqwise[cloud,database,export,foundation,ml,neural,signals,trading,traditional,viz]; extra == "all"
|
|
78
|
+
Provides-Extra: dev
|
|
79
|
+
Requires-Dist: pytest>=7.4; extra == "dev"
|
|
80
|
+
Requires-Dist: pytest-cov>=4.1; extra == "dev"
|
|
81
|
+
Requires-Dist: ruff>=0.1; extra == "dev"
|
|
82
|
+
Requires-Dist: black>=23.0; extra == "dev"
|
|
83
|
+
Requires-Dist: isort>=5.12; extra == "dev"
|
|
84
|
+
Requires-Dist: mypy>=1.5; extra == "dev"
|
|
85
|
+
|
|
86
|
+
<p align="center">
|
|
87
|
+
<img src="assets/wavqwise_hero.png" alt="WavqWise" width="100%"/>
|
|
88
|
+
</p>
|
|
89
|
+
|
|
90
|
+
<h1 align="center">WavqWise</h1>
|
|
91
|
+
<h3 align="center">Sense. Forecast. Alert.</h3>
|
|
92
|
+
<p align="center">Pluggable temporal intelligence. Any model. Any signal. Five lines to forecast.</p>
|
|
93
|
+
|
|
94
|
+
<p align="center">
|
|
95
|
+
<a href="https://pypi.org/project/wavqwise/"><img src="https://img.shields.io/pypi/v/wavqwise?color=blue" alt="PyPI"/></a>
|
|
96
|
+
<a href="https://github.com/VK-Ant/wavqwise/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-green" alt="License"/></a>
|
|
97
|
+
</p>
|
|
98
|
+
|
|
99
|
+
<p align="center">
|
|
100
|
+
<a href="#quick-start">Quick Start</a> |
|
|
101
|
+
<a href="#one-import-any-model">33+ Models</a> |
|
|
102
|
+
<a href="#auto-gpu--onnx--tensorrt">Auto GPU</a> |
|
|
103
|
+
<a href="#real-data-demos">Real Data Demos</a> |
|
|
104
|
+
<a href="#colab-notebooks">Colab Notebooks</a> |
|
|
105
|
+
<a href="#ecosystem">Ecosystem</a>
|
|
106
|
+
</p>
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Why WavqWise?
|
|
111
|
+
|
|
112
|
+
| Without WavqWise | With WavqWise |
|
|
113
|
+
|:---|:---|
|
|
114
|
+
| Import statsmodels for ARIMA | `model="arima"` |
|
|
115
|
+
| Import xgboost for ML | `model="xgboost"` |
|
|
116
|
+
| Import chronos for foundation | `model="chronos"` |
|
|
117
|
+
| Write preprocessing pipeline | Auto-handled |
|
|
118
|
+
| Write evaluation loop | Built-in |
|
|
119
|
+
| Manual GPU setup | Auto-detected |
|
|
120
|
+
| Full retrain on new data | `.update()` incremental |
|
|
121
|
+
| **~50 lines per model** | **5 lines, any model** |
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Quick Start
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
pip install wavqwise
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
from wavqwise import WavqPipeline
|
|
133
|
+
|
|
134
|
+
pipeline = WavqPipeline()
|
|
135
|
+
pipeline.load("sales.csv", target="revenue", time="date")
|
|
136
|
+
forecast = pipeline.forecast(horizon=30, model="arima")
|
|
137
|
+
forecast.plot()
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**That's it.** No model imports. No boilerplate. Change `"arima"` to `"xgboost"` or `"chronos"` — same code.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## One Import. Any Model.
|
|
145
|
+
|
|
146
|
+
```python
|
|
147
|
+
from wavqwise import WavqPipeline # The ONLY import you need
|
|
148
|
+
|
|
149
|
+
# Traditional
|
|
150
|
+
forecast = pipeline.forecast(horizon=30, model="moving_average")
|
|
151
|
+
forecast = pipeline.forecast(horizon=30, model="arima")
|
|
152
|
+
forecast = pipeline.forecast(horizon=30, model="ets")
|
|
153
|
+
forecast = pipeline.forecast(horizon=30, model="holtwinters")
|
|
154
|
+
forecast = pipeline.forecast(horizon=30, model="theta")
|
|
155
|
+
|
|
156
|
+
# ML
|
|
157
|
+
forecast = pipeline.forecast(horizon=30, model="xgboost")
|
|
158
|
+
forecast = pipeline.forecast(horizon=30, model="lightgbm")
|
|
159
|
+
forecast = pipeline.forecast(horizon=30, model="random_forest")
|
|
160
|
+
|
|
161
|
+
# Foundation Models
|
|
162
|
+
forecast = pipeline.forecast(horizon=30, model="chronos")
|
|
163
|
+
forecast = pipeline.forecast(horizon=30, model="timesfm")
|
|
164
|
+
|
|
165
|
+
# Cloud / LLM
|
|
166
|
+
forecast = pipeline.forecast(horizon=30, model="ollama:llama3")
|
|
167
|
+
|
|
168
|
+
# Auto-select best model
|
|
169
|
+
forecast = pipeline.forecast(horizon=30, model="auto")
|
|
170
|
+
|
|
171
|
+
# Ensemble
|
|
172
|
+
forecast = pipeline.forecast(horizon=30, model=["arima", "ets", "xgboost"])
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 33+ Pluggable Models
|
|
176
|
+
|
|
177
|
+
| Category | Models |
|
|
178
|
+
|----------|--------|
|
|
179
|
+
| **Traditional** | Moving Average, EMA, ARIMA, SARIMA, ETS, Holt-Winters, Theta, CES, Croston, Naive, Seasonal Naive |
|
|
180
|
+
| **ML** | XGBoost, LightGBM, CatBoost, Random Forest, Ridge, Lasso, ElasticNet |
|
|
181
|
+
| **Neural** | NeuralProphet, N-BEATS, TFT |
|
|
182
|
+
| **Foundation** | Chronos, TimesFM, Lag-Llama, Moirai, HuggingFace Hub |
|
|
183
|
+
| **Cloud** | TimeGPT, Ollama, OpenAI, Anthropic |
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Incremental Training
|
|
188
|
+
|
|
189
|
+
Most libraries retrain from scratch. WavqWise updates in-place:
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
pipeline = WavqPipeline()
|
|
193
|
+
pipeline.load(historical_data, target="sales", time="date")
|
|
194
|
+
pipeline.forecast(horizon=30, model="arima")
|
|
195
|
+
|
|
196
|
+
# New data arrives — update, don't retrain
|
|
197
|
+
pipeline.update(new_week_data)
|
|
198
|
+
forecast = pipeline.forecast(horizon=30)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Auto GPU / ONNX / TensorRT
|
|
204
|
+
|
|
205
|
+
WavqWise auto-detects the best available hardware on startup:
|
|
206
|
+
|
|
207
|
+
```python
|
|
208
|
+
pipeline = WavqPipeline() # Auto-detect
|
|
209
|
+
pipeline = WavqPipeline(device="cuda") # Force CUDA
|
|
210
|
+
pipeline = WavqPipeline(device="tensorrt") # Force TensorRT
|
|
211
|
+
|
|
212
|
+
print(pipeline.runtime_info())
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
WavqWise Runtime Engine
|
|
217
|
+
========================================
|
|
218
|
+
Backend: tensorrt
|
|
219
|
+
Device: NVIDIA RTX 4090
|
|
220
|
+
GPU: Yes
|
|
221
|
+
VRAM: 24.0 GB
|
|
222
|
+
Compute: SM 8.9
|
|
223
|
+
Available: cpu, onnx-cpu, onnx-gpu, cuda, tensorrt
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Detection priority:** TensorRT → ONNX GPU → PyTorch CUDA → PyTorch MPS (Apple) → ONNX CPU → CPU
|
|
227
|
+
|
|
228
|
+
### ONNX Export for Production
|
|
229
|
+
|
|
230
|
+
```python
|
|
231
|
+
from wavqwise.runtime import ONNXExporter, ONNXPredictor
|
|
232
|
+
|
|
233
|
+
# Export trained model to ONNX
|
|
234
|
+
exporter = ONNXExporter()
|
|
235
|
+
exporter.export_sklearn(trained_model, "model.onnx", n_features=13)
|
|
236
|
+
|
|
237
|
+
# Optimize with TensorRT (FP16)
|
|
238
|
+
exporter.optimize_for_tensorrt("model.onnx")
|
|
239
|
+
|
|
240
|
+
# Fast inference
|
|
241
|
+
predictor = ONNXPredictor("model.onnx") # Auto GPU
|
|
242
|
+
result = predictor.predict(input_array)
|
|
243
|
+
print(predictor.benchmark(input_array)) # Latency report
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Anomaly Detection
|
|
249
|
+
|
|
250
|
+
```python
|
|
251
|
+
from wavqwise import AnomalyPipeline
|
|
252
|
+
|
|
253
|
+
detector = AnomalyPipeline()
|
|
254
|
+
detector.load("sensor_data.csv", target="temperature", time="timestamp")
|
|
255
|
+
anomalies = detector.detect(method="zscore") # or "iqr", "isolation_forest"
|
|
256
|
+
anomalies.plot(show_severity=True)
|
|
257
|
+
print(anomalies.summary())
|
|
258
|
+
# Anomalies: 93/10000 (0.9%) | Method: zscore
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## EEG & Signal Processing
|
|
264
|
+
|
|
265
|
+
```python
|
|
266
|
+
from wavqwise import SignalPipeline
|
|
267
|
+
|
|
268
|
+
sig = SignalPipeline()
|
|
269
|
+
sig.load("eeg.csv", channels=["Fp1", "Fp2", "C3", "C4"], sample_rate=256)
|
|
270
|
+
sig.filter(low=1, high=50, notch=50)
|
|
271
|
+
bands = sig.extract_bands(["delta", "theta", "alpha", "beta", "gamma"])
|
|
272
|
+
bands.plot_bands()
|
|
273
|
+
events = sig.detect_events(threshold=3.0)
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Trading & Financial Analysis
|
|
279
|
+
|
|
280
|
+
```python
|
|
281
|
+
from wavqwise import WavqPipeline
|
|
282
|
+
from wavqwise.trading.indicators.momentum import RSIIndicator
|
|
283
|
+
from wavqwise.trading.indicators.trend import MACDIndicator, SMAIndicator
|
|
284
|
+
from wavqwise.trading.indicators.volatility import BollingerBandsIndicator
|
|
285
|
+
|
|
286
|
+
# Load real stock data
|
|
287
|
+
import yfinance as yf
|
|
288
|
+
stock = yf.download("AAPL", period="2y", auto_adjust=True).reset_index()
|
|
289
|
+
|
|
290
|
+
# Add indicators
|
|
291
|
+
stock = RSIIndicator(14).compute(stock)
|
|
292
|
+
stock = MACDIndicator().compute(stock)
|
|
293
|
+
stock = BollingerBandsIndicator(20, 2).compute(stock)
|
|
294
|
+
|
|
295
|
+
# Forecast
|
|
296
|
+
pipeline = WavqPipeline()
|
|
297
|
+
pipeline.load(stock, target="Close", time="Date")
|
|
298
|
+
forecast = pipeline.forecast(horizon=30, model="ema")
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Database Support
|
|
304
|
+
|
|
305
|
+
```python
|
|
306
|
+
# PostgreSQL / TimescaleDB
|
|
307
|
+
pipeline.load("postgresql://user:pass@host:5432/db",
|
|
308
|
+
query="SELECT timestamp, value FROM sensors")
|
|
309
|
+
|
|
310
|
+
# SQLite
|
|
311
|
+
pipeline.load("sqlite:///local.db", table="readings")
|
|
312
|
+
|
|
313
|
+
# MongoDB / InfluxDB
|
|
314
|
+
pipeline.load("mongodb://host:27017/db", collection="data")
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Real Data Demos
|
|
320
|
+
|
|
321
|
+
All demos use **real open-source data** — no synthetic:
|
|
322
|
+
|
|
323
|
+
| Demo | Data Source | Run |
|
|
324
|
+
|------|-----------|-----|
|
|
325
|
+
| EEG Classification | MNE Sample Dataset (real clinical EEG) | `python demos/demo_eeg_real_data.py` |
|
|
326
|
+
| Trading Forecast | Yahoo Finance via yfinance (AAPL) | `python demos/demo_trading_real_data.py` |
|
|
327
|
+
| Anomaly Detection | Real sensor readings | `python demos/demo_anomaly_detection.py` |
|
|
328
|
+
| Forecasting | Sales data | `python demos/demo_forecasting.py` |
|
|
329
|
+
| EEG Band Analysis | Signal processing | `python demos/demo_eeg_analysis.py` |
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Colab Notebooks
|
|
334
|
+
|
|
335
|
+
Run in browser, zero setup:
|
|
336
|
+
|
|
337
|
+
| Notebook | Data | Open |
|
|
338
|
+
|----------|------|------|
|
|
339
|
+
| EEG Classification | MNE real EEG | [](https://colab.research.google.com/github/VK-Ant/wavqwise/blob/main/demos/notebooks/wavqwise_eeg_real_data.ipynb) |
|
|
340
|
+
| Trading Forecast | yfinance AAPL/TSLA/MSFT | [](https://colab.research.google.com/github/VK-Ant/wavqwise/blob/main/demos/notebooks/wavqwise_trading_real_data.ipynb) |
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## CLI
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
# Forecast
|
|
348
|
+
wavqwise forecast --input data.csv --target sales --model arima --horizon 30
|
|
349
|
+
|
|
350
|
+
# Anomaly detection
|
|
351
|
+
wavqwise detect --input sensor.csv --target temperature --method zscore
|
|
352
|
+
|
|
353
|
+
# List models
|
|
354
|
+
wavqwise models
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
## Install Options
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
pip install wavqwise # Core (numpy, pandas, sklearn)
|
|
363
|
+
pip install wavqwise[traditional] # + ARIMA, SARIMA, ETS, Theta
|
|
364
|
+
pip install wavqwise[ml] # + XGBoost, LightGBM, CatBoost
|
|
365
|
+
pip install wavqwise[neural] # + NeuralProphet, N-BEATS, TFT
|
|
366
|
+
pip install wavqwise[foundation] # + Chronos, TimesFM, Moirai
|
|
367
|
+
pip install wavqwise[signals] # + EEG, spectral analysis (MNE)
|
|
368
|
+
pip install wavqwise[trading] # + yfinance, indicators, backtest
|
|
369
|
+
pip install wavqwise[database] # + PostgreSQL, MongoDB, InfluxDB
|
|
370
|
+
pip install wavqwise[onnx-gpu] # + ONNX Runtime GPU
|
|
371
|
+
pip install wavqwise[tensorrt] # + TensorRT optimization
|
|
372
|
+
pip install wavqwise[all] # Everything
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## Docker
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
docker-compose -f docker/docker-compose.yml up -d
|
|
381
|
+
# WavqWise + TimescaleDB + Grafana ready at localhost:8888
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
## Ecosystem
|
|
385
|
+
|
|
386
|
+
WavqWise is part of the **VK-Ant pluggable AI ecosystem** — six libraries, one architecture:
|
|
387
|
+
|
|
388
|
+
| Library | Domain | Tagline | PyPI |
|
|
389
|
+
|---------|--------|---------|------|
|
|
390
|
+
| [SightRAG](https://github.com/VK-Ant/SightRAG) | Vision | See. Search. Retrieve. | [](https://pypi.org/project/sightrag/) |
|
|
391
|
+
| [Sonarwise](https://github.com/VK-Ant/sonarwise) | Audio | Hear. Search. Retrieve. | [](https://pypi.org/project/sonarwise/) |
|
|
392
|
+
| [Docqwise](https://github.com/VK-Ant/docqwise) | Documents | Read. Extract. Retrieve. | [](https://pypi.org/project/docqwise/) |
|
|
393
|
+
| **WavqWise** | **Temporal** | **Sense. Forecast. Alert.** | [](https://pypi.org/project/wavqwise/) |
|
|
394
|
+
| [Adaptive Intelligence](https://github.com/VK-Ant/adaptive-intelligence) | Orchestration | Learn. Remember. Adapt. | [](https://pypi.org/project/adaptive-intelligence/) |
|
|
395
|
+
| [LLMEvalKit](https://github.com/VK-Ant/llmevalkit) | Evaluation | Evaluate. Score. Improve. | [](https://pypi.org/project/llmevalkit/) |
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
## Contributing
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
git clone https://github.com/VK-Ant/wavqwise.git
|
|
403
|
+
cd wavqwise
|
|
404
|
+
pip install -e ".[dev]"
|
|
405
|
+
make test # 18 tests (smoke + sanity + A/B)
|
|
406
|
+
make lint # ruff + mypy
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## License
|
|
412
|
+
|
|
413
|
+
Apache 2.0 License
|
|
414
|
+
|
|
415
|
+
## Author
|
|
416
|
+
|
|
417
|
+
Venkatkumar Rajan
|