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.
Files changed (71) hide show
  1. resdag/__init__.py +132 -0
  2. resdag/composition/__init__.py +48 -0
  3. resdag/composition/symbolic.py +768 -0
  4. resdag/hpo/__init__.py +157 -0
  5. resdag/hpo/losses.py +345 -0
  6. resdag/hpo/objective.py +214 -0
  7. resdag/hpo/run.py +279 -0
  8. resdag/hpo/utils.py +136 -0
  9. resdag/init/__init__.py +43 -0
  10. resdag/init/graphs/__init__.py +51 -0
  11. resdag/init/graphs/barabasi_albert.py +78 -0
  12. resdag/init/graphs/chord_dendrocycle.py +154 -0
  13. resdag/init/graphs/complete.py +56 -0
  14. resdag/init/graphs/connected_erdos_renyi.py +63 -0
  15. resdag/init/graphs/connected_watts_strogatz.py +57 -0
  16. resdag/init/graphs/dendrocycle.py +205 -0
  17. resdag/init/graphs/erdos_renyi.py +62 -0
  18. resdag/init/graphs/kleinberg_small_world.py +111 -0
  19. resdag/init/graphs/multi_cycle.py +72 -0
  20. resdag/init/graphs/newman_watts_strogatz.py +83 -0
  21. resdag/init/graphs/random.py +57 -0
  22. resdag/init/graphs/regular.py +79 -0
  23. resdag/init/graphs/ring_chord.py +69 -0
  24. resdag/init/graphs/simple_cycle_jumps.py +55 -0
  25. resdag/init/graphs/spectral_cascade.py +129 -0
  26. resdag/init/graphs/watts_strogatz.py +89 -0
  27. resdag/init/input_feedback/__init__.py +105 -0
  28. resdag/init/input_feedback/base.py +109 -0
  29. resdag/init/input_feedback/binary_balanced.py +209 -0
  30. resdag/init/input_feedback/chain_of_neurons_input.py +112 -0
  31. resdag/init/input_feedback/chebyshev.py +120 -0
  32. resdag/init/input_feedback/chessboard.py +79 -0
  33. resdag/init/input_feedback/dendrocycle_input.py +113 -0
  34. resdag/init/input_feedback/opposite_anchors.py +90 -0
  35. resdag/init/input_feedback/pseudo_diagonal.py +133 -0
  36. resdag/init/input_feedback/random.py +117 -0
  37. resdag/init/input_feedback/random_binary.py +90 -0
  38. resdag/init/input_feedback/registry.py +188 -0
  39. resdag/init/input_feedback/ring_window.py +176 -0
  40. resdag/init/topology/__init__.py +71 -0
  41. resdag/init/topology/base.py +220 -0
  42. resdag/init/topology/registry.py +237 -0
  43. resdag/init/utils/__init__.py +17 -0
  44. resdag/init/utils/graph_tools.py +68 -0
  45. resdag/init/utils/resolve.py +114 -0
  46. resdag/layers/__init__.py +61 -0
  47. resdag/layers/custom/__init__.py +44 -0
  48. resdag/layers/custom/concatenate.py +84 -0
  49. resdag/layers/custom/feature_partitioner.py +120 -0
  50. resdag/layers/custom/outliers_filtered_mean.py +135 -0
  51. resdag/layers/custom/selective_dropout.py +95 -0
  52. resdag/layers/custom/selective_exponentiation.py +87 -0
  53. resdag/layers/readouts/__init__.py +36 -0
  54. resdag/layers/readouts/base.py +212 -0
  55. resdag/layers/readouts/cg_readout.py +282 -0
  56. resdag/layers/reservoir.py +515 -0
  57. resdag/models/__init__.py +60 -0
  58. resdag/models/classic_esn.py +162 -0
  59. resdag/models/headless_esn.py +97 -0
  60. resdag/models/linear_esn.py +90 -0
  61. resdag/models/ott_esn.py +179 -0
  62. resdag/training/__init__.py +31 -0
  63. resdag/training/trainer.py +249 -0
  64. resdag/utils/__init__.py +34 -0
  65. resdag/utils/data/__init__.py +95 -0
  66. resdag/utils/data/io.py +304 -0
  67. resdag/utils/data/prepare.py +311 -0
  68. resdag/utils/general.py +23 -0
  69. resdag-0.1.0.dist-info/METADATA +631 -0
  70. resdag-0.1.0.dist-info/RECORD +71 -0
  71. 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"]