resdag 0.1.0__py3-none-any.whl
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.
- resdag/__init__.py +132 -0
- resdag/composition/__init__.py +48 -0
- resdag/composition/symbolic.py +768 -0
- resdag/hpo/__init__.py +157 -0
- resdag/hpo/losses.py +345 -0
- resdag/hpo/objective.py +214 -0
- resdag/hpo/run.py +279 -0
- resdag/hpo/utils.py +136 -0
- resdag/init/__init__.py +43 -0
- resdag/init/graphs/__init__.py +51 -0
- resdag/init/graphs/barabasi_albert.py +78 -0
- resdag/init/graphs/chord_dendrocycle.py +154 -0
- resdag/init/graphs/complete.py +56 -0
- resdag/init/graphs/connected_erdos_renyi.py +63 -0
- resdag/init/graphs/connected_watts_strogatz.py +57 -0
- resdag/init/graphs/dendrocycle.py +205 -0
- resdag/init/graphs/erdos_renyi.py +62 -0
- resdag/init/graphs/kleinberg_small_world.py +111 -0
- resdag/init/graphs/multi_cycle.py +72 -0
- resdag/init/graphs/newman_watts_strogatz.py +83 -0
- resdag/init/graphs/random.py +57 -0
- resdag/init/graphs/regular.py +79 -0
- resdag/init/graphs/ring_chord.py +69 -0
- resdag/init/graphs/simple_cycle_jumps.py +55 -0
- resdag/init/graphs/spectral_cascade.py +129 -0
- resdag/init/graphs/watts_strogatz.py +89 -0
- resdag/init/input_feedback/__init__.py +105 -0
- resdag/init/input_feedback/base.py +109 -0
- resdag/init/input_feedback/binary_balanced.py +209 -0
- resdag/init/input_feedback/chain_of_neurons_input.py +112 -0
- resdag/init/input_feedback/chebyshev.py +120 -0
- resdag/init/input_feedback/chessboard.py +79 -0
- resdag/init/input_feedback/dendrocycle_input.py +113 -0
- resdag/init/input_feedback/opposite_anchors.py +90 -0
- resdag/init/input_feedback/pseudo_diagonal.py +133 -0
- resdag/init/input_feedback/random.py +117 -0
- resdag/init/input_feedback/random_binary.py +90 -0
- resdag/init/input_feedback/registry.py +188 -0
- resdag/init/input_feedback/ring_window.py +176 -0
- resdag/init/topology/__init__.py +71 -0
- resdag/init/topology/base.py +220 -0
- resdag/init/topology/registry.py +237 -0
- resdag/init/utils/__init__.py +17 -0
- resdag/init/utils/graph_tools.py +68 -0
- resdag/init/utils/resolve.py +114 -0
- resdag/layers/__init__.py +61 -0
- resdag/layers/custom/__init__.py +44 -0
- resdag/layers/custom/concatenate.py +84 -0
- resdag/layers/custom/feature_partitioner.py +120 -0
- resdag/layers/custom/outliers_filtered_mean.py +135 -0
- resdag/layers/custom/selective_dropout.py +95 -0
- resdag/layers/custom/selective_exponentiation.py +87 -0
- resdag/layers/readouts/__init__.py +36 -0
- resdag/layers/readouts/base.py +212 -0
- resdag/layers/readouts/cg_readout.py +282 -0
- resdag/layers/reservoir.py +515 -0
- resdag/models/__init__.py +60 -0
- resdag/models/classic_esn.py +162 -0
- resdag/models/headless_esn.py +97 -0
- resdag/models/linear_esn.py +90 -0
- resdag/models/ott_esn.py +179 -0
- resdag/training/__init__.py +31 -0
- resdag/training/trainer.py +249 -0
- resdag/utils/__init__.py +34 -0
- resdag/utils/data/__init__.py +95 -0
- resdag/utils/data/io.py +304 -0
- resdag/utils/data/prepare.py +311 -0
- resdag/utils/general.py +23 -0
- resdag-0.1.0.dist-info/METADATA +631 -0
- resdag-0.1.0.dist-info/RECORD +71 -0
- resdag-0.1.0.dist-info/WHEEL +4 -0
resdag/__init__.py
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"""
|
|
2
|
+
resdag - PyTorch Reservoir Computing Library
|
|
3
|
+
===============================================
|
|
4
|
+
|
|
5
|
+
A modular, GPU-accelerated library for Echo State Networks (ESN) and
|
|
6
|
+
reservoir computing in PyTorch.
|
|
7
|
+
|
|
8
|
+
Features
|
|
9
|
+
--------
|
|
10
|
+
- Pure PyTorch ``nn.Module`` components
|
|
11
|
+
- Graph-based topology initialization
|
|
12
|
+
- Stateful reservoir layers with Echo State Property
|
|
13
|
+
- GPU acceleration throughout
|
|
14
|
+
- Modular composition for arbitrary DAGs
|
|
15
|
+
- Hyperparameter optimization integration
|
|
16
|
+
|
|
17
|
+
Modules
|
|
18
|
+
-------
|
|
19
|
+
composition
|
|
20
|
+
Model composition using pytorch_symbolic.
|
|
21
|
+
layers
|
|
22
|
+
Neural network layers (ReservoirLayer, ReadoutLayer, etc.).
|
|
23
|
+
init
|
|
24
|
+
Weight initialization (topologies, input/feedback).
|
|
25
|
+
training
|
|
26
|
+
Training utilities (ESNTrainer).
|
|
27
|
+
models
|
|
28
|
+
Premade ESN architectures.
|
|
29
|
+
hpo
|
|
30
|
+
Hyperparameter optimization with Optuna.
|
|
31
|
+
utils
|
|
32
|
+
Data loading and utility functions.
|
|
33
|
+
|
|
34
|
+
Examples
|
|
35
|
+
--------
|
|
36
|
+
Basic reservoir usage:
|
|
37
|
+
|
|
38
|
+
>>> import torch
|
|
39
|
+
>>> from resdag.layers import ReservoirLayer
|
|
40
|
+
>>> from resdag.layers.readouts import CGReadoutLayer
|
|
41
|
+
>>>
|
|
42
|
+
>>> reservoir = ReservoirLayer(
|
|
43
|
+
... reservoir_size=100,
|
|
44
|
+
... feedback_size=10,
|
|
45
|
+
... topology="erdos_renyi"
|
|
46
|
+
... )
|
|
47
|
+
>>> x = torch.randn(32, 50, 10) # (batch, time, features)
|
|
48
|
+
>>> h = reservoir(x)
|
|
49
|
+
>>> print(h.shape)
|
|
50
|
+
torch.Size([32, 50, 100])
|
|
51
|
+
|
|
52
|
+
Building a complete ESN model:
|
|
53
|
+
|
|
54
|
+
>>> import pytorch_symbolic as ps
|
|
55
|
+
>>> from resdag import ESNModel, ReservoirLayer, CGReadoutLayer
|
|
56
|
+
>>>
|
|
57
|
+
>>> inp = ps.Input((100, 3))
|
|
58
|
+
>>> reservoir = ReservoirLayer(200, feedback_size=3)(inp)
|
|
59
|
+
>>> readout = CGReadoutLayer(200, 3, name="output")(reservoir)
|
|
60
|
+
>>> model = ESNModel(inp, readout)
|
|
61
|
+
>>> model.summary()
|
|
62
|
+
|
|
63
|
+
Using premade models:
|
|
64
|
+
|
|
65
|
+
>>> from resdag import ott_esn
|
|
66
|
+
>>> model = ott_esn(reservoir_size=500, feedback_size=3, output_size=3)
|
|
67
|
+
|
|
68
|
+
See Also
|
|
69
|
+
--------
|
|
70
|
+
ESNModel : Main model class for ESN composition.
|
|
71
|
+
ReservoirLayer : Core reservoir layer with recurrent dynamics.
|
|
72
|
+
ESNTrainer : Trainer for fitting readout layers.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
from . import composition, hpo, init, layers, models, training, utils
|
|
76
|
+
|
|
77
|
+
# Convenience imports for common use cases
|
|
78
|
+
from .composition import ESNModel
|
|
79
|
+
|
|
80
|
+
# Convenience submodule imports
|
|
81
|
+
from .init import graphs, input_feedback, topology
|
|
82
|
+
from .layers import ReservoirLayer
|
|
83
|
+
from .layers.readouts import CGReadoutLayer
|
|
84
|
+
from .models import classic_esn, headless_esn, linear_esn, ott_esn
|
|
85
|
+
from .training import ESNTrainer
|
|
86
|
+
|
|
87
|
+
__version__ = "0.1.0"
|
|
88
|
+
|
|
89
|
+
__all__ = [
|
|
90
|
+
# Modules
|
|
91
|
+
"composition",
|
|
92
|
+
"hpo",
|
|
93
|
+
"init",
|
|
94
|
+
"layers",
|
|
95
|
+
"models",
|
|
96
|
+
"training",
|
|
97
|
+
"utils",
|
|
98
|
+
"__version__",
|
|
99
|
+
# Convenience submodules
|
|
100
|
+
"graphs",
|
|
101
|
+
"topology",
|
|
102
|
+
"input_feedback",
|
|
103
|
+
# Core layers
|
|
104
|
+
"ReservoirLayer",
|
|
105
|
+
"CGReadoutLayer",
|
|
106
|
+
# Model composition
|
|
107
|
+
"ESNModel",
|
|
108
|
+
# Training
|
|
109
|
+
"ESNTrainer",
|
|
110
|
+
# Premade models
|
|
111
|
+
"classic_esn",
|
|
112
|
+
"ott_esn",
|
|
113
|
+
"headless_esn",
|
|
114
|
+
"linear_esn",
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def __getattr__(name: str):
|
|
119
|
+
"""Lazy import for optional HPO functions."""
|
|
120
|
+
if name == "run_hpo":
|
|
121
|
+
from .hpo import run_hpo
|
|
122
|
+
|
|
123
|
+
return run_hpo
|
|
124
|
+
if name == "LOSSES":
|
|
125
|
+
from .hpo import LOSSES
|
|
126
|
+
|
|
127
|
+
return LOSSES
|
|
128
|
+
if name == "get_study_summary":
|
|
129
|
+
from .hpo import get_study_summary
|
|
130
|
+
|
|
131
|
+
return get_study_summary
|
|
132
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Model Composition
|
|
3
|
+
=================
|
|
4
|
+
|
|
5
|
+
This module provides tools for building ESN models using the
|
|
6
|
+
``pytorch_symbolic`` library for symbolic tensor computation.
|
|
7
|
+
|
|
8
|
+
Classes
|
|
9
|
+
-------
|
|
10
|
+
ESNModel
|
|
11
|
+
Extended SymbolicModel with ESN-specific methods for forecasting
|
|
12
|
+
and reservoir state management.
|
|
13
|
+
Input
|
|
14
|
+
Alias for ``pytorch_symbolic.Input`` for defining model inputs.
|
|
15
|
+
|
|
16
|
+
Examples
|
|
17
|
+
--------
|
|
18
|
+
Building a simple ESN:
|
|
19
|
+
|
|
20
|
+
>>> import pytorch_symbolic as ps
|
|
21
|
+
>>> from resdag.composition import ESNModel
|
|
22
|
+
>>> from resdag.layers import ReservoirLayer
|
|
23
|
+
>>> from resdag.layers.readouts import CGReadoutLayer
|
|
24
|
+
>>>
|
|
25
|
+
>>> inp = ps.Input((100, 3))
|
|
26
|
+
>>> reservoir = ReservoirLayer(200, feedback_size=3)(inp)
|
|
27
|
+
>>> readout = CGReadoutLayer(200, 3)(reservoir)
|
|
28
|
+
>>> model = ESNModel(inp, readout)
|
|
29
|
+
|
|
30
|
+
Multi-input model:
|
|
31
|
+
|
|
32
|
+
>>> feedback = ps.Input((100, 3))
|
|
33
|
+
>>> driver = ps.Input((100, 5))
|
|
34
|
+
>>> reservoir = ReservoirLayer(200, feedback_size=3, input_size=5)(feedback, driver)
|
|
35
|
+
>>> readout = CGReadoutLayer(200, 3)(reservoir)
|
|
36
|
+
>>> model = ESNModel([feedback, driver], readout)
|
|
37
|
+
|
|
38
|
+
See Also
|
|
39
|
+
--------
|
|
40
|
+
resdag.models : Premade ESN architectures.
|
|
41
|
+
resdag.training.ESNTrainer : Trainer for fitting readouts.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
import pytorch_symbolic as ps
|
|
45
|
+
|
|
46
|
+
from .symbolic import ESNModel, Input
|
|
47
|
+
|
|
48
|
+
__all__ = ["ESNModel", "Input", "ps"]
|