morphml 1.0.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.
Potentially problematic release.
This version of morphml might be problematic. Click here for more details.
- morphml/__init__.py +14 -0
- morphml/api/__init__.py +26 -0
- morphml/api/app.py +326 -0
- morphml/api/auth.py +193 -0
- morphml/api/client.py +338 -0
- morphml/api/models.py +132 -0
- morphml/api/rate_limit.py +192 -0
- morphml/benchmarking/__init__.py +36 -0
- morphml/benchmarking/comparison.py +430 -0
- morphml/benchmarks/__init__.py +56 -0
- morphml/benchmarks/comparator.py +409 -0
- morphml/benchmarks/datasets.py +280 -0
- morphml/benchmarks/metrics.py +199 -0
- morphml/benchmarks/openml_suite.py +201 -0
- morphml/benchmarks/problems.py +289 -0
- morphml/benchmarks/suite.py +318 -0
- morphml/cli/__init__.py +5 -0
- morphml/cli/commands/experiment.py +329 -0
- morphml/cli/main.py +457 -0
- morphml/cli/quickstart.py +312 -0
- morphml/config.py +278 -0
- morphml/constraints/__init__.py +19 -0
- morphml/constraints/handler.py +205 -0
- morphml/constraints/predicates.py +285 -0
- morphml/core/__init__.py +3 -0
- morphml/core/crossover.py +449 -0
- morphml/core/dsl/README.md +359 -0
- morphml/core/dsl/__init__.py +72 -0
- morphml/core/dsl/ast_nodes.py +364 -0
- morphml/core/dsl/compiler.py +318 -0
- morphml/core/dsl/layers.py +368 -0
- morphml/core/dsl/lexer.py +336 -0
- morphml/core/dsl/parser.py +455 -0
- morphml/core/dsl/search_space.py +386 -0
- morphml/core/dsl/syntax.py +199 -0
- morphml/core/dsl/type_system.py +361 -0
- morphml/core/dsl/validator.py +386 -0
- morphml/core/graph/__init__.py +40 -0
- morphml/core/graph/edge.py +124 -0
- morphml/core/graph/graph.py +507 -0
- morphml/core/graph/mutations.py +409 -0
- morphml/core/graph/node.py +196 -0
- morphml/core/graph/serialization.py +361 -0
- morphml/core/graph/visualization.py +431 -0
- morphml/core/objectives/__init__.py +20 -0
- morphml/core/search/__init__.py +33 -0
- morphml/core/search/individual.py +252 -0
- morphml/core/search/parameters.py +453 -0
- morphml/core/search/population.py +375 -0
- morphml/core/search/search_engine.py +340 -0
- morphml/distributed/__init__.py +76 -0
- morphml/distributed/fault_tolerance.py +497 -0
- morphml/distributed/health_monitor.py +348 -0
- morphml/distributed/master.py +709 -0
- morphml/distributed/proto/README.md +224 -0
- morphml/distributed/proto/__init__.py +74 -0
- morphml/distributed/proto/worker.proto +170 -0
- morphml/distributed/proto/worker_pb2.py +79 -0
- morphml/distributed/proto/worker_pb2_grpc.py +423 -0
- morphml/distributed/resource_manager.py +416 -0
- morphml/distributed/scheduler.py +567 -0
- morphml/distributed/storage/__init__.py +33 -0
- morphml/distributed/storage/artifacts.py +381 -0
- morphml/distributed/storage/cache.py +366 -0
- morphml/distributed/storage/checkpointing.py +329 -0
- morphml/distributed/storage/database.py +459 -0
- morphml/distributed/worker.py +549 -0
- morphml/evaluation/__init__.py +5 -0
- morphml/evaluation/heuristic.py +237 -0
- morphml/exceptions.py +55 -0
- morphml/execution/__init__.py +5 -0
- morphml/execution/local_executor.py +350 -0
- morphml/integrations/__init__.py +28 -0
- morphml/integrations/jax_adapter.py +206 -0
- morphml/integrations/pytorch_adapter.py +530 -0
- morphml/integrations/sklearn_adapter.py +206 -0
- morphml/integrations/tensorflow_adapter.py +230 -0
- morphml/logging_config.py +93 -0
- morphml/meta_learning/__init__.py +66 -0
- morphml/meta_learning/architecture_similarity.py +277 -0
- morphml/meta_learning/experiment_database.py +240 -0
- morphml/meta_learning/knowledge_base/__init__.py +19 -0
- morphml/meta_learning/knowledge_base/embedder.py +179 -0
- morphml/meta_learning/knowledge_base/knowledge_base.py +313 -0
- morphml/meta_learning/knowledge_base/meta_features.py +265 -0
- morphml/meta_learning/knowledge_base/vector_store.py +271 -0
- morphml/meta_learning/predictors/__init__.py +27 -0
- morphml/meta_learning/predictors/ensemble.py +221 -0
- morphml/meta_learning/predictors/gnn_predictor.py +552 -0
- morphml/meta_learning/predictors/learning_curve.py +231 -0
- morphml/meta_learning/predictors/proxy_metrics.py +261 -0
- morphml/meta_learning/strategy_evolution/__init__.py +27 -0
- morphml/meta_learning/strategy_evolution/adaptive_optimizer.py +226 -0
- morphml/meta_learning/strategy_evolution/bandit.py +276 -0
- morphml/meta_learning/strategy_evolution/portfolio.py +230 -0
- morphml/meta_learning/transfer.py +581 -0
- morphml/meta_learning/warm_start.py +286 -0
- morphml/optimizers/__init__.py +74 -0
- morphml/optimizers/adaptive_operators.py +399 -0
- morphml/optimizers/bayesian/__init__.py +52 -0
- morphml/optimizers/bayesian/acquisition.py +387 -0
- morphml/optimizers/bayesian/base.py +319 -0
- morphml/optimizers/bayesian/gaussian_process.py +635 -0
- morphml/optimizers/bayesian/smac.py +534 -0
- morphml/optimizers/bayesian/tpe.py +411 -0
- morphml/optimizers/differential_evolution.py +220 -0
- morphml/optimizers/evolutionary/__init__.py +61 -0
- morphml/optimizers/evolutionary/cma_es.py +416 -0
- morphml/optimizers/evolutionary/differential_evolution.py +556 -0
- morphml/optimizers/evolutionary/encoding.py +426 -0
- morphml/optimizers/evolutionary/particle_swarm.py +449 -0
- morphml/optimizers/genetic_algorithm.py +486 -0
- morphml/optimizers/gradient_based/__init__.py +22 -0
- morphml/optimizers/gradient_based/darts.py +550 -0
- morphml/optimizers/gradient_based/enas.py +585 -0
- morphml/optimizers/gradient_based/operations.py +474 -0
- morphml/optimizers/gradient_based/utils.py +601 -0
- morphml/optimizers/hill_climbing.py +169 -0
- morphml/optimizers/multi_objective/__init__.py +56 -0
- morphml/optimizers/multi_objective/indicators.py +504 -0
- morphml/optimizers/multi_objective/nsga2.py +647 -0
- morphml/optimizers/multi_objective/visualization.py +427 -0
- morphml/optimizers/nsga2.py +308 -0
- morphml/optimizers/random_search.py +172 -0
- morphml/optimizers/simulated_annealing.py +181 -0
- morphml/plugins/__init__.py +35 -0
- morphml/plugins/custom_evaluator_example.py +81 -0
- morphml/plugins/custom_optimizer_example.py +63 -0
- morphml/plugins/plugin_system.py +454 -0
- morphml/reports/__init__.py +30 -0
- morphml/reports/generator.py +362 -0
- morphml/tracking/__init__.py +7 -0
- morphml/tracking/experiment.py +309 -0
- morphml/tracking/logger.py +301 -0
- morphml/tracking/reporter.py +357 -0
- morphml/utils/__init__.py +6 -0
- morphml/utils/checkpoint.py +189 -0
- morphml/utils/comparison.py +390 -0
- morphml/utils/export.py +407 -0
- morphml/utils/progress.py +392 -0
- morphml/utils/validation.py +392 -0
- morphml/version.py +7 -0
- morphml/visualization/__init__.py +50 -0
- morphml/visualization/analytics.py +423 -0
- morphml/visualization/architecture_diagrams.py +353 -0
- morphml/visualization/architecture_plot.py +223 -0
- morphml/visualization/convergence_plot.py +174 -0
- morphml/visualization/crossover_viz.py +386 -0
- morphml/visualization/graph_viz.py +338 -0
- morphml/visualization/pareto_plot.py +149 -0
- morphml/visualization/plotly_dashboards.py +422 -0
- morphml/visualization/population.py +309 -0
- morphml/visualization/progress.py +260 -0
- morphml-1.0.0.dist-info/METADATA +434 -0
- morphml-1.0.0.dist-info/RECORD +158 -0
- morphml-1.0.0.dist-info/WHEEL +4 -0
- morphml-1.0.0.dist-info/entry_points.txt +3 -0
- morphml-1.0.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: morphml
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Production-grade Neural Architecture Search framework with distributed optimization and meta-learning
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Keywords: neural-architecture-search,automl,deep-learning,optimization,nas,genetic-algorithm,bayesian-optimization,multi-objective,distributed-computing
|
|
8
|
+
Author: Vedanth
|
|
9
|
+
Author-email: vedanth@vedanthq.com
|
|
10
|
+
Maintainer: Vedanth
|
|
11
|
+
Maintainer-email: vedanth@vedanthq.com
|
|
12
|
+
Requires-Python: >=3.10,<4.0
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Education
|
|
16
|
+
Classifier: Intended Audience :: Science/Research
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
26
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
27
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
28
|
+
Classifier: Typing :: Typed
|
|
29
|
+
Provides-Extra: advanced
|
|
30
|
+
Provides-Extra: all
|
|
31
|
+
Provides-Extra: api
|
|
32
|
+
Provides-Extra: bayesian
|
|
33
|
+
Provides-Extra: dashboard
|
|
34
|
+
Provides-Extra: distributed
|
|
35
|
+
Provides-Extra: gpu
|
|
36
|
+
Provides-Extra: gradient
|
|
37
|
+
Provides-Extra: messaging
|
|
38
|
+
Provides-Extra: storage
|
|
39
|
+
Requires-Dist: boto3 (>=1.26.0,<2.0.0) ; extra == "storage" or extra == "all"
|
|
40
|
+
Requires-Dist: botorch (>=0.9.0,<0.10.0) ; extra == "bayesian" or extra == "gpu" or extra == "all"
|
|
41
|
+
Requires-Dist: click (>=8.1.0,<9.0.0)
|
|
42
|
+
Requires-Dist: cma (>=3.3.0,<4.0.0) ; extra == "advanced" or extra == "all"
|
|
43
|
+
Requires-Dist: fastapi (>=0.100.0,<0.101.0) ; extra == "api" or extra == "dashboard" or extra == "all"
|
|
44
|
+
Requires-Dist: gpytorch (>=1.11,<2.0) ; extra == "bayesian" or extra == "gpu" or extra == "all"
|
|
45
|
+
Requires-Dist: grpcio (>=1.54.0,<2.0.0) ; extra == "distributed" or extra == "all"
|
|
46
|
+
Requires-Dist: grpcio-tools (>=1.54.0,<2.0.0) ; extra == "distributed" or extra == "all"
|
|
47
|
+
Requires-Dist: kubernetes (>=28.1.0,<29.0.0) ; extra == "distributed" or extra == "all"
|
|
48
|
+
Requires-Dist: matplotlib (>=3.7.0,<4.0.0)
|
|
49
|
+
Requires-Dist: networkx (>=3.1,<4.0)
|
|
50
|
+
Requires-Dist: numpy (>=1.24.0,<2.0.0)
|
|
51
|
+
Requires-Dist: openml (>=0.14.0,<0.15.0)
|
|
52
|
+
Requires-Dist: passlib (>=1.7.4,<2.0.0) ; extra == "dashboard" or extra == "all"
|
|
53
|
+
Requires-Dist: plotly (>=5.14.0,<6.0.0)
|
|
54
|
+
Requires-Dist: protobuf (>=4.23.0,<5.0.0) ; extra == "distributed" or extra == "all"
|
|
55
|
+
Requires-Dist: psutil (>=5.9.0,<6.0.0)
|
|
56
|
+
Requires-Dist: psycopg2-binary (>=2.9.0,<3.0.0) ; extra == "storage" or extra == "all"
|
|
57
|
+
Requires-Dist: pydantic (>=2.0.0,<3.0.0)
|
|
58
|
+
Requires-Dist: pymoo (>=0.6.0,<0.7.0)
|
|
59
|
+
Requires-Dist: python-jose (>=3.3.0,<4.0.0) ; extra == "dashboard" or extra == "all"
|
|
60
|
+
Requires-Dist: pyyaml (>=6.0,<7.0)
|
|
61
|
+
Requires-Dist: pyzmq (>=25.0.0,<26.0.0) ; extra == "messaging" or extra == "all"
|
|
62
|
+
Requires-Dist: redis (>=4.5.0,<5.0.0) ; extra == "storage" or extra == "all"
|
|
63
|
+
Requires-Dist: rich (>=13.4.0,<14.0.0)
|
|
64
|
+
Requires-Dist: scikit-learn (>=1.3.0,<2.0.0)
|
|
65
|
+
Requires-Dist: scikit-optimize (>=0.9.0,<0.10.0)
|
|
66
|
+
Requires-Dist: scipy (>=1.10.0,<2.0.0)
|
|
67
|
+
Requires-Dist: seaborn (>=0.12.0,<0.13.0)
|
|
68
|
+
Requires-Dist: sqlalchemy (>=2.0.0,<3.0.0) ; extra == "storage" or extra == "all"
|
|
69
|
+
Requires-Dist: torch (>=2.0.0,<3.0.0) ; extra == "gradient" or extra == "gpu" or extra == "all"
|
|
70
|
+
Requires-Dist: tqdm (>=4.65.0,<5.0.0)
|
|
71
|
+
Requires-Dist: uvicorn (>=0.23.0,<0.24.0) ; extra == "api" or extra == "dashboard" or extra == "all"
|
|
72
|
+
Requires-Dist: websockets (>=11.0,<12.0) ; extra == "api" or extra == "dashboard" or extra == "all"
|
|
73
|
+
Project-URL: Documentation, https://morphml.readthedocs.io
|
|
74
|
+
Project-URL: Homepage, https://github.com/TIVerse/MorphML
|
|
75
|
+
Project-URL: Repository, https://github.com/TIVerse/MorphML
|
|
76
|
+
Description-Content-Type: text/markdown
|
|
77
|
+
|
|
78
|
+
# MorphML 🧬
|
|
79
|
+
|
|
80
|
+
**Production-grade Neural Architecture Search framework with distributed optimization and meta-learning.**
|
|
81
|
+
|
|
82
|
+
[](https://github.com/TIVerse/MorphML/actions)
|
|
83
|
+
[](https://opensource.org/licenses/MIT)
|
|
84
|
+
[](https://www.python.org/downloads/)
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 🚀 Overview
|
|
89
|
+
|
|
90
|
+
MorphML is a comprehensive framework for **automated neural architecture search (NAS)** that combines multiple optimization paradigms, distributed execution, and meta-learning to find optimal neural network architectures for your machine learning tasks.
|
|
91
|
+
|
|
92
|
+
**Key Features:**
|
|
93
|
+
|
|
94
|
+
- 🔬 **Multiple Optimization Algorithms**: Genetic Algorithm, Random Search, Hill Climbing, Bayesian, Multi-objective
|
|
95
|
+
- 🎯 **Pythonic DSL**: Intuitive search space definition with 13+ layer types including **flatten layer**
|
|
96
|
+
- 🚀 **Heuristic Evaluators**: Fast architecture assessment without training
|
|
97
|
+
- 💾 **Checkpointing**: Save and resume long-running searches
|
|
98
|
+
- 📤 **Smart Code Export**: Generate PyTorch/Keras code with **automatic shape inference**
|
|
99
|
+
- 🧬 **Advanced Crossover**: True genetic crossover with **visualization support**
|
|
100
|
+
- 🎚️ **Adaptive Operators**: Automatic crossover/mutation rate tuning based on diversity
|
|
101
|
+
- 🔍 **Enhanced Constraints**: Detailed violation messages with actual vs expected values
|
|
102
|
+
- 🎨 **Visualization**: Crossover operations, diversity analysis, architecture comparison
|
|
103
|
+
- 🔧 **Extensible**: Custom layer handlers for any operation type
|
|
104
|
+
- 📊 **Production Ready**: 91 tests passing, 76% coverage, full type safety
|
|
105
|
+
- 📚 **Comprehensive Docs**: User guide, API reference, tutorials, and 20+ examples
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 📦 Installation
|
|
110
|
+
|
|
111
|
+
### From PyPI (Coming Soon)
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
pip install morphml
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### From Source
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
git clone https://github.com/TIVerse/MorphML.git
|
|
121
|
+
cd MorphML
|
|
122
|
+
poetry install
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### For Development
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
git clone https://github.com/TIVerse/MorphML.git
|
|
129
|
+
cd MorphML
|
|
130
|
+
poetry install --with dev
|
|
131
|
+
poetry run pre-commit install
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 🎯 Quick Start
|
|
137
|
+
|
|
138
|
+
### Define a Search Space
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
from morphml.core.dsl import create_cnn_space, SearchSpace, Layer
|
|
142
|
+
|
|
143
|
+
# Option 1: Use pre-built template
|
|
144
|
+
space = create_cnn_space(num_classes=10)
|
|
145
|
+
|
|
146
|
+
# Option 2: Define custom space
|
|
147
|
+
space = SearchSpace("my_cnn")
|
|
148
|
+
space.add_layers(
|
|
149
|
+
Layer.input(shape=(3, 32, 32)),
|
|
150
|
+
Layer.conv2d(filters=[32, 64, 128], kernel_size=[3, 5]),
|
|
151
|
+
Layer.relu(),
|
|
152
|
+
Layer.maxpool(pool_size=2),
|
|
153
|
+
Layer.flatten(), # Essential for CNN -> Dense transition
|
|
154
|
+
Layer.dense(units=[128, 256, 512]),
|
|
155
|
+
Layer.output(units=10)
|
|
156
|
+
)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Run Architecture Search
|
|
160
|
+
|
|
161
|
+
```python
|
|
162
|
+
from morphml.optimizers import GeneticAlgorithm
|
|
163
|
+
|
|
164
|
+
# Configure optimizer
|
|
165
|
+
ga = GeneticAlgorithm(
|
|
166
|
+
search_space=space,
|
|
167
|
+
population_size=50,
|
|
168
|
+
num_generations=100,
|
|
169
|
+
mutation_rate=0.2,
|
|
170
|
+
elitism=5
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
# Define evaluator
|
|
174
|
+
def evaluate(graph):
|
|
175
|
+
# Your training/evaluation logic
|
|
176
|
+
return accuracy
|
|
177
|
+
|
|
178
|
+
# Run search with progress tracking
|
|
179
|
+
def callback(gen, pop):
|
|
180
|
+
stats = pop.get_statistics()
|
|
181
|
+
print(f"Gen {gen}: Best={stats['best_fitness']:.4f}")
|
|
182
|
+
|
|
183
|
+
best = ga.optimize(evaluator=evaluate, callback=callback)
|
|
184
|
+
print(f"Best fitness: {best.fitness:.4f}")
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Export Architecture
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
from morphml.utils import ArchitectureExporter
|
|
191
|
+
|
|
192
|
+
exporter = ArchitectureExporter()
|
|
193
|
+
|
|
194
|
+
# Generate PyTorch code
|
|
195
|
+
pytorch_code = exporter.to_pytorch(best.graph, 'MyModel')
|
|
196
|
+
with open('model.py', 'w') as f:
|
|
197
|
+
f.write(pytorch_code)
|
|
198
|
+
|
|
199
|
+
# Generate Keras code
|
|
200
|
+
keras_code = exporter.to_keras(best.graph)
|
|
201
|
+
with open('model_keras.py', 'w') as f:
|
|
202
|
+
f.write(keras_code)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## ✨ Enhanced Features (P1-P3)
|
|
208
|
+
|
|
209
|
+
### Adaptive Operators
|
|
210
|
+
Automatically tune crossover and mutation rates based on population diversity:
|
|
211
|
+
|
|
212
|
+
```python
|
|
213
|
+
from morphml.optimizers.adaptive_operators import AdaptiveOperatorScheduler
|
|
214
|
+
|
|
215
|
+
scheduler = AdaptiveOperatorScheduler(
|
|
216
|
+
initial_crossover=0.8,
|
|
217
|
+
initial_mutation=0.2
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
# During optimization
|
|
221
|
+
crossover_rate, mutation_rate = scheduler.get_rates(
|
|
222
|
+
population, best_fitness, generation
|
|
223
|
+
)
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Crossover Visualization
|
|
227
|
+
Visualize how parent architectures combine:
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
from morphml.visualization.crossover_viz import quick_crossover_viz
|
|
231
|
+
|
|
232
|
+
quick_crossover_viz(parent1, parent2, "crossover.png")
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Enhanced Constraint Messages
|
|
236
|
+
Get detailed violation information:
|
|
237
|
+
|
|
238
|
+
```python
|
|
239
|
+
from morphml.constraints import ConstraintHandler, MaxParametersConstraint
|
|
240
|
+
|
|
241
|
+
handler = ConstraintHandler()
|
|
242
|
+
handler.add_constraint(MaxParametersConstraint(max_params=1000000))
|
|
243
|
+
|
|
244
|
+
if not handler.check(graph):
|
|
245
|
+
print(handler.format_violations(graph))
|
|
246
|
+
# Output:
|
|
247
|
+
# Found 1 constraint violation(s):
|
|
248
|
+
# 1. max_parameters
|
|
249
|
+
# Message: Architecture has 1,250,000 parameters, exceeding limit by 250,000
|
|
250
|
+
# Actual: 1,250,000
|
|
251
|
+
# Expected: <= 1,000,000
|
|
252
|
+
# Penalty: 0.2500
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Custom Layer Handlers
|
|
256
|
+
Extend export system for custom operations:
|
|
257
|
+
|
|
258
|
+
```python
|
|
259
|
+
exporter = ArchitectureExporter()
|
|
260
|
+
|
|
261
|
+
def attention_handler(node, shapes):
|
|
262
|
+
return f"nn.MultiheadAttention(embed_dim={node.params['dim']}, num_heads={node.params['heads']})"
|
|
263
|
+
|
|
264
|
+
exporter.add_custom_layer_handler("attention", pytorch_handler=attention_handler)
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## 🏗️ Architecture
|
|
270
|
+
|
|
271
|
+
MorphML is built with a layered architecture:
|
|
272
|
+
|
|
273
|
+
```
|
|
274
|
+
┌─────────────────────────────────────────┐
|
|
275
|
+
│ User Interface (CLI, Dashboard) │
|
|
276
|
+
├─────────────────────────────────────────┤
|
|
277
|
+
│ Optimizers (GA, BO, DARTS, NSGA-II) │
|
|
278
|
+
├─────────────────────────────────────────┤
|
|
279
|
+
│ Search Space & Graph System │
|
|
280
|
+
├─────────────────────────────────────────┤
|
|
281
|
+
│ Distributed Execution (K8s, gRPC) │
|
|
282
|
+
├─────────────────────────────────────────┤
|
|
283
|
+
│ Meta-Learning & Knowledge Base (GNN) │
|
|
284
|
+
└─────────────────────────────────────────┘
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 🔬 Supported Optimizers
|
|
290
|
+
|
|
291
|
+
| Optimizer | Type | Best For | Status |
|
|
292
|
+
|-----------|------|----------|--------|
|
|
293
|
+
| **Genetic Algorithm** | Evolutionary | General-purpose search | ✅ Production |
|
|
294
|
+
| **Random Search** | Sampling | Baseline comparison | ✅ Production |
|
|
295
|
+
| **Hill Climbing** | Local search | Architecture refinement | ✅ Production |
|
|
296
|
+
| **Bayesian Optimization** | Model-based | Sample-efficient search | 🔜 Phase 2 |
|
|
297
|
+
| **DARTS** | Gradient-based | Fast GPU-accelerated search | 🔜 Phase 2 |
|
|
298
|
+
| **NSGA-II** | Multi-objective | Trading off multiple metrics | 🔜 Phase 2 |
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 📊 Example Results
|
|
303
|
+
|
|
304
|
+
Search on CIFAR-10 with different optimizers:
|
|
305
|
+
|
|
306
|
+
| Method | Best Accuracy | Architectures Evaluated | Time |
|
|
307
|
+
|--------|---------------|------------------------|------|
|
|
308
|
+
| Random Search | 89.2% | 500 | 48h |
|
|
309
|
+
| Genetic Algorithm | 93.5% | 500 | 36h |
|
|
310
|
+
| Bayesian Opt | 94.1% | 200 | 18h |
|
|
311
|
+
| DARTS | 94.8% | 100 | 8h |
|
|
312
|
+
| MorphML (Meta) | **95.2%** | **150** | **12h** |
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## 🛠️ Utilities
|
|
317
|
+
|
|
318
|
+
### Heuristic Evaluation
|
|
319
|
+
|
|
320
|
+
Fast architecture assessment without training:
|
|
321
|
+
|
|
322
|
+
```python
|
|
323
|
+
from morphml.evaluation import HeuristicEvaluator
|
|
324
|
+
|
|
325
|
+
evaluator = HeuristicEvaluator()
|
|
326
|
+
score = evaluator(graph) # Instant evaluation
|
|
327
|
+
|
|
328
|
+
# Get detailed scores
|
|
329
|
+
scores = evaluator.get_all_scores(graph)
|
|
330
|
+
print(scores) # {'parameter': 0.85, 'depth': 0.92, ...}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Checkpointing
|
|
334
|
+
|
|
335
|
+
Save and resume long-running searches:
|
|
336
|
+
|
|
337
|
+
```python
|
|
338
|
+
from morphml.utils import Checkpoint
|
|
339
|
+
|
|
340
|
+
# Save during optimization
|
|
341
|
+
Checkpoint.save(ga, 'checkpoint.json')
|
|
342
|
+
|
|
343
|
+
# Resume later
|
|
344
|
+
ga = Checkpoint.load('checkpoint.json', search_space)
|
|
345
|
+
best = ga.optimize(evaluator)
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Multiple Optimizers
|
|
349
|
+
|
|
350
|
+
Compare different search strategies:
|
|
351
|
+
|
|
352
|
+
```python
|
|
353
|
+
from morphml.optimizers import GeneticAlgorithm, RandomSearch, HillClimbing
|
|
354
|
+
|
|
355
|
+
# Baseline
|
|
356
|
+
rs = RandomSearch(space, num_samples=100)
|
|
357
|
+
baseline_best = rs.optimize(evaluator)
|
|
358
|
+
|
|
359
|
+
# Main search
|
|
360
|
+
ga = GeneticAlgorithm(space, population_size=50, num_generations=100)
|
|
361
|
+
ga_best = ga.optimize(evaluator)
|
|
362
|
+
|
|
363
|
+
# Refinement
|
|
364
|
+
hc = HillClimbing(space, max_iterations=50)
|
|
365
|
+
hc.current = ga_best
|
|
366
|
+
refined_best = hc.optimize(evaluator)
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## 📚 Documentation
|
|
372
|
+
|
|
373
|
+
- **[User Guide](docs/user-guide/)**: Comprehensive tutorials and examples
|
|
374
|
+
- **[API Reference](docs/api-reference/)**: Detailed API documentation
|
|
375
|
+
- **[Tutorials](docs/tutorials/)**: Jupyter notebooks with step-by-step guides
|
|
376
|
+
- **[Deployment](docs/deployment/)**: Production deployment guides
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## 🤝 Contributing
|
|
381
|
+
|
|
382
|
+
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
# Fork and clone the repository
|
|
386
|
+
git clone https://github.com/YOUR_USERNAME/MorphML.git
|
|
387
|
+
|
|
388
|
+
# Create a branch
|
|
389
|
+
git checkout -b feature/amazing-feature
|
|
390
|
+
|
|
391
|
+
# Make changes and test
|
|
392
|
+
poetry run pytest
|
|
393
|
+
poetry run black morphml tests
|
|
394
|
+
poetry run mypy morphml
|
|
395
|
+
|
|
396
|
+
# Submit a pull request
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
## 📄 License
|
|
402
|
+
|
|
403
|
+
MorphML is released under the [MIT License](LICENSE).
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
## 🙏 Acknowledgments
|
|
408
|
+
|
|
409
|
+
Built with ❤️ by [TONMOY INFRASTRUCTURE & VISION](https://github.com/TIVerse)
|
|
410
|
+
|
|
411
|
+
**Authors & Maintainers:**
|
|
412
|
+
- Vedanth ([@vedanthq](https://github.com/vedanthq))
|
|
413
|
+
- Eshan Roy ([@eshanized](https://github.com/eshanized))
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## 📮 Contact
|
|
418
|
+
|
|
419
|
+
- **Issues**: [GitHub Issues](https://github.com/TIVerse/MorphML/issues)
|
|
420
|
+
- **Discussions**: [GitHub Discussions](https://github.com/TIVerse/MorphML/discussions)
|
|
421
|
+
- **Email**: eshanized@proton.me
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## 🗺️ Roadmap
|
|
426
|
+
|
|
427
|
+
- [x] Phase 1: Core functionality (DSL, Graph, GA)
|
|
428
|
+
- [ ] Phase 2: Advanced optimizers (BO, DARTS, Multi-objective)
|
|
429
|
+
- [ ] Phase 3: Distributed execution (Kubernetes, fault tolerance)
|
|
430
|
+
- [ ] Phase 4: Meta-learning (warm-starting, performance prediction)
|
|
431
|
+
- [ ] Phase 5: Ecosystem (dashboard, integrations, documentation)
|
|
432
|
+
|
|
433
|
+
**Star ⭐ the repo to follow our progress!**
|
|
434
|
+
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
morphml/__init__.py,sha256=YsXt0BfDYfsxZZrXYt-mMvhsUiJnDeHShsojVxKTiVM,410
|
|
2
|
+
morphml/api/__init__.py,sha256=dNpfoPVyhXkpCk1MYg18QIHheZUJEG3yIwOzBFqe4ws,508
|
|
3
|
+
morphml/api/app.py,sha256=5qcbejulpPII2KIOfhv-GOVKecPc0vIFwM_gJtXedAQ,9658
|
|
4
|
+
morphml/api/auth.py,sha256=vPut7M_72bYL7VUbIxR7oR1-N6zc8h8W7-4zQUVz1Ow,4665
|
|
5
|
+
morphml/api/client.py,sha256=mFzSh6OTbio3XG2OZnMFD6RoYKQjCZAozv5r5K8Cz4Q,9043
|
|
6
|
+
morphml/api/models.py,sha256=P92VqBXJo93pQGS3Utd3HiAIE75JP2zonNzYMJ1TkKQ,3911
|
|
7
|
+
morphml/api/rate_limit.py,sha256=bYr0KB-Ta28LVA1Gau2cRo1g-BIsgoHd5MiZklmKMEY,5468
|
|
8
|
+
morphml/benchmarking/__init__.py,sha256=o37Acj23IjVwKZ1Ieh25cdxfgkNDfBf9UeJBazuctHo,967
|
|
9
|
+
morphml/benchmarking/comparison.py,sha256=uIR7pkk3uQUYYXWa8XghqqtAFiAt94u0gXu48B8Q6pU,14070
|
|
10
|
+
morphml/benchmarks/__init__.py,sha256=5rc29LhOV0zV7CKrLGwYUkmcCJRxs-AWr8peIV-h_L0,1416
|
|
11
|
+
morphml/benchmarks/comparator.py,sha256=W1MKjbgNdRxVnclnM6KftTMWinWpAH3N8FdVALl7C0w,13046
|
|
12
|
+
morphml/benchmarks/datasets.py,sha256=rXZccGUuUW6bqCo3TtAR4S274y_dWPYCEYdHJD1wiIw,7871
|
|
13
|
+
morphml/benchmarks/metrics.py,sha256=pFO8zxYR__9FU3tQJ2CHL8u8mtUrFZ7hyk7IFcHdZWY,4880
|
|
14
|
+
morphml/benchmarks/openml_suite.py,sha256=g16LwLrFbJ6BrwlNl30T7s-4wv1EHmjcULhYhH0VVck,5476
|
|
15
|
+
morphml/benchmarks/problems.py,sha256=_4EJOlyYqhd279vnUK7TWZmPG84RBO1Jb5h4STOXnr4,9182
|
|
16
|
+
morphml/benchmarks/suite.py,sha256=WmRdOeDiNJ1d7JcUajGR1xPrDYLEhkJnAf-gV3mC5F4,10598
|
|
17
|
+
morphml/cli/__init__.py,sha256=XNE_x0p8fU8w-tKHlvwOhuLqAIqnQZcYhn5l0sMv9Jg,95
|
|
18
|
+
morphml/cli/commands/experiment.py,sha256=2xwbUgW6YreOo2oeziUFk3iswWARtioCGSImaNNm2O4,10259
|
|
19
|
+
morphml/cli/main.py,sha256=HlkAQNKzEniC6AR39Xnn0I07BBAXldKFnQp53uFLPi8,15577
|
|
20
|
+
morphml/cli/quickstart.py,sha256=uhiAYbp9YA79Wodz7qyQ_KJGvXS1ScspfMl-U3Q2ljo,9303
|
|
21
|
+
morphml/config.py,sha256=jllB5nT4Lczw3u3ZmhMSzfJGzah9AxBC5UqV0gNK_-4,8285
|
|
22
|
+
morphml/constraints/__init__.py,sha256=PjpU2FSWkGQ5HeKy912y_k6OiM2viwWi7XhIZlDwJbg,457
|
|
23
|
+
morphml/constraints/handler.py,sha256=jW1-dQYm7rwc9JZ4JjHRaQJanERjHE5z149yV-esd7Y,6303
|
|
24
|
+
morphml/constraints/predicates.py,sha256=jyo9JRTe6I3oOORZlpowh_WvlQaon8J8am2cOyVxqW0,9498
|
|
25
|
+
morphml/core/__init__.py,sha256=a8EByB4EB4YY0n7hZbarz8H0qVWyFWe2FTppeRfutmw,46
|
|
26
|
+
morphml/core/crossover.py,sha256=xAtsabG-ZxSt9lqrRWSxTAVMnxh2_3Kf8JVCdqgrpjM,14258
|
|
27
|
+
morphml/core/dsl/README.md,sha256=l_ey6kCqEowSDD47HpyPSsCptmiu0IuM5Xw3SrYqUJA,8714
|
|
28
|
+
morphml/core/dsl/__init__.py,sha256=eqCz2T89VYpLCUUPEnnS5sHBRfpzoBRxLe4OS8GfR8U,1876
|
|
29
|
+
morphml/core/dsl/ast_nodes.py,sha256=88OjdwLTSNPcRtiY7edRHE-a81HaEPrC7WMaIKBq2aw,10869
|
|
30
|
+
morphml/core/dsl/compiler.py,sha256=Bu7q3YiOImdwBVCkC81juucaW7m9V-FIfsHgZIpEq-w,8792
|
|
31
|
+
morphml/core/dsl/layers.py,sha256=AuG-EIUhCsn25mBgHTT5T-gS8_gJBXpTnICujt-w7vQ,10739
|
|
32
|
+
morphml/core/dsl/lexer.py,sha256=8WC8Z7h9QbXHk2q5bNlOwy_ixiijXZUXuYmN8xuej84,10659
|
|
33
|
+
morphml/core/dsl/parser.py,sha256=H3t8mdbR91J5B8RlbWQlYfooh9X8IwTWd5RjXpbHc_M,12853
|
|
34
|
+
morphml/core/dsl/search_space.py,sha256=qLtu8HeJ70voM651OSXUiM9-jJDMKPjp32u_9JQydmg,11260
|
|
35
|
+
morphml/core/dsl/syntax.py,sha256=J2seHZgEUeLP7rRCliUzFCVODKpOH6qWHQaDkKHU7pY,4572
|
|
36
|
+
morphml/core/dsl/type_system.py,sha256=1c2th7s3Ugs7ckA6_NwvlWLhipWJ1TjO8Wr5RLwDuAU,9768
|
|
37
|
+
morphml/core/dsl/validator.py,sha256=r6N1_tcnLXH7polMhXVLs0UUbUPxwj9U7jOp_YqDspE,13823
|
|
38
|
+
morphml/core/graph/__init__.py,sha256=uXIMx4btAJ9Tv1f_pvjPUk25qpcgFZ_PN-mznCSMDkE,982
|
|
39
|
+
morphml/core/graph/edge.py,sha256=Ygm9sgR_tvlzq-c8LYhmBqG69BLq56Ck4DrktnrtRTA,3560
|
|
40
|
+
morphml/core/graph/graph.py,sha256=xGEhZurLQLVlZ-QvrIQmPrCSCvbPMKkfkCS_AwP59Ig,14556
|
|
41
|
+
morphml/core/graph/mutations.py,sha256=siXTw5vb4x91ZEp2HqrKxGtRZDLrzYMRf10Ptf8jfEM,12931
|
|
42
|
+
morphml/core/graph/node.py,sha256=v9w0pCBo5U9RjjGipOpOENZOoe118t-HMvR2bDTqUGI,5361
|
|
43
|
+
morphml/core/graph/serialization.py,sha256=JAMYjJciJwgLo0ZQr9-YMMYQvDm7iz-dbAtSvz69HyI,9610
|
|
44
|
+
morphml/core/graph/visualization.py,sha256=xlj3FbBtZXFZKx2zPT7lXvE3W1g2qG3uhFLKme4LLkc,12926
|
|
45
|
+
morphml/core/objectives/__init__.py,sha256=7qSejOJdIwfyJ2mwqVrgtGXSTEWrOh_uNEE7T-mE434,689
|
|
46
|
+
morphml/core/search/__init__.py,sha256=uslC94fyOOA_y-83_HgKSF_Lt7KS3Yh46vkPutGAmhI,753
|
|
47
|
+
morphml/core/search/individual.py,sha256=C_5drsH5fZtmlpfa51vjGXaukJSeUxkoOxcOBoUtTHc,7179
|
|
48
|
+
morphml/core/search/parameters.py,sha256=kcuKGjEL0yf7ZCVjqyTVexEhZFdhkpmybwaOMU9Z_dY,12971
|
|
49
|
+
morphml/core/search/population.py,sha256=4VLKnGAcxXP2KbHawNok_1fM83i7OFbw3RVctqM6QTM,11612
|
|
50
|
+
morphml/core/search/search_engine.py,sha256=QtJ8Rx7vqoOVb9D6QUhXmw7SboXWjR8szIR_cYf3_9s,10806
|
|
51
|
+
morphml/distributed/__init__.py,sha256=xhWLxiYgqDneYlEFa0er48C6XUcjs4ugNer1BXDM5qQ,1816
|
|
52
|
+
morphml/distributed/fault_tolerance.py,sha256=-b0ncM3yFimtRI-Gbe8GbE86kIYWNKKlJtQ5m-kKNKs,15816
|
|
53
|
+
morphml/distributed/health_monitor.py,sha256=VdQpvtjLNyplfgUF2hGzVhwquMtMWR1VmEAvG-PBpVE,10799
|
|
54
|
+
morphml/distributed/master.py,sha256=kE904c-BdGGL0ddU63onr333CK5nU1LUrQ-FYAmfrlA,24935
|
|
55
|
+
morphml/distributed/proto/README.md,sha256=qHkZNX6gnbV0F83JryY-D7kFOouG_5i1RML2gzhJ-J8,5728
|
|
56
|
+
morphml/distributed/proto/__init__.py,sha256=U9HwQgwWKBknwsdIRkibEVNm0X2wCR4Abw7jwFT3iFg,1950
|
|
57
|
+
morphml/distributed/proto/worker.proto,sha256=ETEIEmZI2VZ5ojNN0BdRufllLeQOyXmBeLtRmffxtVk,3712
|
|
58
|
+
morphml/distributed/proto/worker_pb2.py,sha256=JbwRYbDRwwU-XQ2k5AV8dq0hk4vTBf0FdjwThgofoKQ,7524
|
|
59
|
+
morphml/distributed/proto/worker_pb2_grpc.py,sha256=psJgPhZ1a5OTZBV1cn-ABrRUhxcozWN6q6cJQ72WzDI,13889
|
|
60
|
+
morphml/distributed/resource_manager.py,sha256=BayTV_ue_py12F2cXrPN6fl7sRk1FQANzJpGiQ7OHHA,13293
|
|
61
|
+
morphml/distributed/scheduler.py,sha256=aW7xbl_ZlVY5oCQGVWbyYiP32Uxe_B82Ou3lcU0PUbA,17362
|
|
62
|
+
morphml/distributed/storage/__init__.py,sha256=Ka0briqIkJkSoi2c6FgCe9C3u4LlpAYp4HKyHKsUVRI,805
|
|
63
|
+
morphml/distributed/storage/artifacts.py,sha256=-Hrm9MeJIH_PnFjozhK1-NS7K6yscLtk6mWXMd-ycMU,11177
|
|
64
|
+
morphml/distributed/storage/cache.py,sha256=cBQ7Skui6cFXqTx37X_e1gayGnba4C7RgSA_bY_XCsM,9807
|
|
65
|
+
morphml/distributed/storage/checkpointing.py,sha256=Jb0Xjx_NHfV3SyJvHElb6EzTLRYdQkuv-qnRF1EZYNw,10655
|
|
66
|
+
morphml/distributed/storage/database.py,sha256=6p3OUc6HSRwZItpQPR3VqWHwqT8R4-N_DPHapAOOT_Q,13268
|
|
67
|
+
morphml/distributed/worker.py,sha256=e3nzBZd4kjvMaBJsRzNmT61PKjK09aXo-OkCkbp5AOQ,18396
|
|
68
|
+
morphml/evaluation/__init__.py,sha256=DGIVqjCBLUZkDLDCNciA2ztn74vZ6SQAGrDQk--BOZ4,148
|
|
69
|
+
morphml/evaluation/heuristic.py,sha256=CbuqG8quEEwuuU9yO5_-JsKqvBN1eY_2H6Z9tEe5twk,6498
|
|
70
|
+
morphml/exceptions.py,sha256=jTKYomHZXeupV9KDHsuiLlFkbyx97hhJWwQXWHEUY2w,917
|
|
71
|
+
morphml/execution/__init__.py,sha256=AdKD0r_pCe1bq3BrkZdUkO0nl9e7nWMUgZ9gQd1Nr7g,171
|
|
72
|
+
morphml/execution/local_executor.py,sha256=etCFWEmXJqAsyyW38FTUS8LyarSLb_2ivyonnc4vN6Y,11824
|
|
73
|
+
morphml/integrations/__init__.py,sha256=_A-wyyiNW-CFwDOASJ0ZmIYfo-xRQzHbKyk75R5v1y8,853
|
|
74
|
+
morphml/integrations/jax_adapter.py,sha256=Jt9E1fQB4wj1o8DqTOumu8FKSsVQuP4p-tDnphsspUQ,6178
|
|
75
|
+
morphml/integrations/pytorch_adapter.py,sha256=c5dDGEhst36jBdGOZgjUbW-8SBvKD3K7Kuf4aeAiQnU,15785
|
|
76
|
+
morphml/integrations/sklearn_adapter.py,sha256=9yGM_9DjW2kx-NuwXRyomWeeHZppsdGsWBixEs_4sX0,6428
|
|
77
|
+
morphml/integrations/tensorflow_adapter.py,sha256=bJS5xTjDPlpGD9w4tksCbzZPev6j0qhyBi22S4cZkzQ,6668
|
|
78
|
+
morphml/logging_config.py,sha256=fQOVSAt9D9HGE7JFPWMizQG_rt7rh4aBO9oSi9fOZ0Y,2504
|
|
79
|
+
morphml/meta_learning/__init__.py,sha256=dndiFEoMBxZFhVJzFZJhiDNTWMwcmZ_pTSyEKdTv0F0,1690
|
|
80
|
+
morphml/meta_learning/architecture_similarity.py,sha256=_ggMNhzs4Vyvg57c-yI1fxou83fntIaCfo6rMINay8M,8312
|
|
81
|
+
morphml/meta_learning/experiment_database.py,sha256=TGKBOBGNYd0qErmcNBA3Mqik18CD8AHuvsuMIyvo_Ts,7835
|
|
82
|
+
morphml/meta_learning/knowledge_base/__init__.py,sha256=zS0Moel1pmN2fZtmAIwD2TiNyyHH_OU7x8fJaWsiutY,636
|
|
83
|
+
morphml/meta_learning/knowledge_base/embedder.py,sha256=ZJhBIlSmrl46v9GulnzTDWu5iDLVq3He8-WUVsxrCdo,5409
|
|
84
|
+
morphml/meta_learning/knowledge_base/knowledge_base.py,sha256=HjROyaGUvmHsNila_oy8Jhx_Iyct0ahBLu4NJTEx47w,9945
|
|
85
|
+
morphml/meta_learning/knowledge_base/meta_features.py,sha256=0qf0RCgjkojPZydrJqOC9nbsjNsG0tfO9JrHtL0EPc8,8459
|
|
86
|
+
morphml/meta_learning/knowledge_base/vector_store.py,sha256=5w-ZKa9B79_cqx0sCx2owDXpz3RFc93mIrjAMTM-Zc0,7843
|
|
87
|
+
morphml/meta_learning/predictors/__init__.py,sha256=9bv_353RsK7Gz5Wl1QfVT5MXuFkeCk2FE1tfR6ZUGt8,795
|
|
88
|
+
morphml/meta_learning/predictors/ensemble.py,sha256=O-9CKwYvH-8JlBll2i1OibLTgRQZSHuW6-OoQFi-Wc0,6888
|
|
89
|
+
morphml/meta_learning/predictors/gnn_predictor.py,sha256=C0q44A9OP1YtWwd-QB_s9o7yOdvzqe9hqcM1ddrunxg,19432
|
|
90
|
+
morphml/meta_learning/predictors/learning_curve.py,sha256=T0ItbVoIEC1c6ddWE4u6XlF88qRNhO4esE0zHuf4OWI,7168
|
|
91
|
+
morphml/meta_learning/predictors/proxy_metrics.py,sha256=7MudwT1htCkKwgcH-tLqUlh49fIKi5CDIaNItU9mPlQ,7834
|
|
92
|
+
morphml/meta_learning/strategy_evolution/__init__.py,sha256=cFUqoxKXE5Qea5OhljvC_xOcKbPnVk2oBn6pjMZjTN0,744
|
|
93
|
+
morphml/meta_learning/strategy_evolution/adaptive_optimizer.py,sha256=A4jnJMzhtCAAZTQpCIT8ZHMIVk9pB8z1ZmAzBIMw730,7680
|
|
94
|
+
morphml/meta_learning/strategy_evolution/bandit.py,sha256=U7hPPMZZcdZUhwvAvQIgLDwIY41FzQNoF3FKbOby9eI,8237
|
|
95
|
+
morphml/meta_learning/strategy_evolution/portfolio.py,sha256=8YECicUH2VXHm37OUEF_58Ohgj-olKATffjwRzY2y48,7440
|
|
96
|
+
morphml/meta_learning/transfer.py,sha256=DoKg2plpubd0v68bBZYqYunb7xagwlwaLNsLJ5grZnw,20088
|
|
97
|
+
morphml/meta_learning/warm_start.py,sha256=eZ6IQ40ZvFryH6AKOW6efwWZQyf5cnCQoUErWTWEDJA,8992
|
|
98
|
+
morphml/optimizers/__init__.py,sha256=_NykHvXASbW3g0Q548XBAHTwnIIBkaf9RtvFlCvUO2M,2284
|
|
99
|
+
morphml/optimizers/adaptive_operators.py,sha256=1cRTPJlhLNbVIO8ngdoJt2xkPC2vrGHZV2Ock1SWjwQ,12847
|
|
100
|
+
morphml/optimizers/bayesian/__init__.py,sha256=xBzONjBlRduS02gRLLOl-smR26u-CPmmYViJMMRRg-M,1617
|
|
101
|
+
morphml/optimizers/bayesian/acquisition.py,sha256=026J4kGkudAyNfSb7rcawELJaGS4A6Bflq0n0xMdj6o,12131
|
|
102
|
+
morphml/optimizers/bayesian/base.py,sha256=tDJ2CpxuIBzQFp6x-jQXmXIz-fPhAZuiA1dhivmEl-c,10335
|
|
103
|
+
morphml/optimizers/bayesian/gaussian_process.py,sha256=t5W7JHGELTiq6Ote7nqnygg-GFgXfwG4HtYvXaYe884,21426
|
|
104
|
+
morphml/optimizers/bayesian/smac.py,sha256=dgT5KJbxJfuUazBL9bxoEYchAqznarloT5su2e1i42w,17564
|
|
105
|
+
morphml/optimizers/bayesian/tpe.py,sha256=ugaBZgTRQOACooxV18UmNzMx59od4FcLI-ybrKtkrEY,13381
|
|
106
|
+
morphml/optimizers/differential_evolution.py,sha256=CLsg5LXNoG8wYuZHxu4yCf4-tDyIQEekDm4xipv5KHw,7668
|
|
107
|
+
morphml/optimizers/evolutionary/__init__.py,sha256=dc2RyeN273Chllzk0csAcrkGZKRuLXmc28QuaWdich0,1887
|
|
108
|
+
morphml/optimizers/evolutionary/cma_es.py,sha256=IsuEyl5aae-YAEudfzry1JZATlqhPQYz8Dgfnpk-F-A,14470
|
|
109
|
+
morphml/optimizers/evolutionary/differential_evolution.py,sha256=FrxUj5L_EeG-WXDeHueHmp87GukC0z7VefLO-fTv-Go,17650
|
|
110
|
+
morphml/optimizers/evolutionary/encoding.py,sha256=AHD-T1tkdfBNzfuI4po6uH-FVdT1J6JQIfpTDHuSxGg,12865
|
|
111
|
+
morphml/optimizers/evolutionary/particle_swarm.py,sha256=ggOUoUe1_rLrIQKbWJOcjVUp0M2zI8Q1LpxDgn1etG0,14186
|
|
112
|
+
morphml/optimizers/genetic_algorithm.py,sha256=ap5EumC78dkfeels2uLx7BmAZh8E7nMtDMGfH82wQ9A,16090
|
|
113
|
+
morphml/optimizers/gradient_based/__init__.py,sha256=Hl-IcpoeoV4I5BRBMvumlfoMCHbq0VOwQDHZ5VHJg80,721
|
|
114
|
+
morphml/optimizers/gradient_based/darts.py,sha256=8GLoWAUeSXWCYKsjYa2O3PyOq251CKCaz42-edgHWm0,17236
|
|
115
|
+
morphml/optimizers/gradient_based/enas.py,sha256=NIfesbHKVeXM0lIRuhFodKPAPAh8TW7DKUTrPujjqow,18215
|
|
116
|
+
morphml/optimizers/gradient_based/operations.py,sha256=RTP7Fsa0pBsP9i4Xaz8TNsvMfFQcn99NuPFzYVNZ7BE,13109
|
|
117
|
+
morphml/optimizers/gradient_based/utils.py,sha256=gPPW8rk8gR2o8XdkAwtxlACMU8CUy6ZXbpg__qU5tac,15618
|
|
118
|
+
morphml/optimizers/hill_climbing.py,sha256=MzdX6MlhBf91QZfN7SuDZseCDRvuNq9IEpvlBASXea4,5659
|
|
119
|
+
morphml/optimizers/multi_objective/__init__.py,sha256=-CUPUbMco45vCfbs5MAmJ3OE-N5-wJuI6G5Tsn8P9Pg,1572
|
|
120
|
+
morphml/optimizers/multi_objective/indicators.py,sha256=dlwYgSWKQucNFUPr2lkTwH1XJXuJCI7ClTMis7WStOg,15979
|
|
121
|
+
morphml/optimizers/multi_objective/nsga2.py,sha256=v0GZBU6e647RBQpliURp-j1euE0M_NJbvmy7Lx0fmEo,22146
|
|
122
|
+
morphml/optimizers/multi_objective/visualization.py,sha256=fxmmCrtGYiSfoBQMXPwgnLop_MP3rv09lf53XTz7a9E,14437
|
|
123
|
+
morphml/optimizers/nsga2.py,sha256=kZXD_GRm_WZSRvQVQlBey1BrCLS0WAOAKFX9Zn1H8dE,10998
|
|
124
|
+
morphml/optimizers/random_search.py,sha256=ew8pRsoUPikqhUIykVgfkPkGmczTpzz4SflvEE7HRiE,5664
|
|
125
|
+
morphml/optimizers/simulated_annealing.py,sha256=fQVtbmoDPdWT7UkKJVT_KpF9liOR6bgopGwUUSfk8d4,6236
|
|
126
|
+
morphml/plugins/__init__.py,sha256=TW-93PxRBmhrtJqafaDpY99XF9MNaz8AZ4OtYwcnEes,743
|
|
127
|
+
morphml/plugins/custom_evaluator_example.py,sha256=mTsJMptvg_u2i6gEOt-wdCxOBzoTY9ivK3utR7d5dLo,2690
|
|
128
|
+
morphml/plugins/custom_optimizer_example.py,sha256=Dr6vdad-6hKl1rowj1JpuYGhuSAaNfzp-wICwhp5A30,2079
|
|
129
|
+
morphml/plugins/plugin_system.py,sha256=b6okBeIY_2aemPCMQZKk1-XkLUYBAA30ycOoZmPNBmY,12063
|
|
130
|
+
morphml/reports/__init__.py,sha256=G5iZMIYXRgLkuTzFOoUv5c0nj6tiArB7n860bBge5Ok,734
|
|
131
|
+
morphml/reports/generator.py,sha256=iKJyP55xEN8OUlgAAI0qKuAA4RifY-Cm8SyH34lODz0,10568
|
|
132
|
+
morphml/tracking/__init__.py,sha256=tGFnbKqrWEVQvPmOdPvk-hw3WLZpMvzLXKbcj1BY3gs,255
|
|
133
|
+
morphml/tracking/experiment.py,sha256=L6r2YHx34n690hExs8rELkKXD_6HZByll2KSGK882Qg,10014
|
|
134
|
+
morphml/tracking/logger.py,sha256=OhfcldlCItjJToduyi9ZhuIgTbWa2cTvWIc-r-Jc8G8,9084
|
|
135
|
+
morphml/tracking/reporter.py,sha256=giMusVanyue4CSBU5MkA294ZzSpBT8us6NJTCIv5Y6Q,11448
|
|
136
|
+
morphml/utils/__init__.py,sha256=PlgFiWR_95gxTXkVgyFcBJ_8-QEvT8ihtKQwgFyS2UE,190
|
|
137
|
+
morphml/utils/checkpoint.py,sha256=FzcvQyjKtfQdb9_BtB5NKxRe8nrOvkqf2eq__Jf0Zgg,6269
|
|
138
|
+
morphml/utils/comparison.py,sha256=p9N85IdC7rF_X8f9P6HphU9_P2tCJEE54_btl1Ftszo,12102
|
|
139
|
+
morphml/utils/export.py,sha256=cFJohqFH7D9HSh4pXELpR3gNe4C-tuwpxFal-23a2HQ,14359
|
|
140
|
+
morphml/utils/progress.py,sha256=jxk6MLQXfLv7yEf2vJFejVokJChijNY3bJhSoRoB1_k,11783
|
|
141
|
+
morphml/utils/validation.py,sha256=mE0GD9k_Shygmst9mUhoJ-GV1QEA6FE6MLHdXXl4TLs,12876
|
|
142
|
+
morphml/version.py,sha256=4RdyJfe9CUm7I-ep2Bg4s9us5Z9zWbk8nfL2Bi-O1JA,259
|
|
143
|
+
morphml/visualization/__init__.py,sha256=RoSYHQ6qs48b8kScjg6AD78WwWlqoO3R6NUyY9xtX-4,1568
|
|
144
|
+
morphml/visualization/analytics.py,sha256=PXttB-Hx6MUFDrYDfCijRIf3otRfmgUcasVyI0rqwSc,14563
|
|
145
|
+
morphml/visualization/architecture_diagrams.py,sha256=4Zq0vTHTSFgW3aIS3b_9ugMkiBliBUntxp8EleO4nSM,10850
|
|
146
|
+
morphml/visualization/architecture_plot.py,sha256=tjjThP0eGSv8fvncMyH_uz405PsoWetWScHKx3aUabU,6270
|
|
147
|
+
morphml/visualization/convergence_plot.py,sha256=PoDjvLJrY8DfqluH7iAcUqspEpBoRa1lCyvkJetAljc,4832
|
|
148
|
+
morphml/visualization/crossover_viz.py,sha256=8SI3Dfxz4LaUQeb7ElI72XTE4CFYh6KEIfRW6Vmk2u0,11599
|
|
149
|
+
morphml/visualization/graph_viz.py,sha256=52gpy23DzwkDr-wiymzdS0ZP_9Gf5gWO2D9dsi8s8q4,10896
|
|
150
|
+
morphml/visualization/pareto_plot.py,sha256=d-3v3qZG4LeJQubZq5cHR6K_xKisn1rlX2O_3gD6bpo,4384
|
|
151
|
+
morphml/visualization/plotly_dashboards.py,sha256=VQDn66vTHDeQ4kcqvMe5AZ9HVyOV2ym8ALku83rPfjA,13219
|
|
152
|
+
morphml/visualization/population.py,sha256=2Ttkrtf72s6mM-gfRVMtPx9ROOnORvuXl-1g97EsjYw,10467
|
|
153
|
+
morphml/visualization/progress.py,sha256=xG9IuthimxuSXfX88Uj5yrDd4ZzGOjlwenxtckwgJGw,8671
|
|
154
|
+
morphml-1.0.0.dist-info/METADATA,sha256=byaiiyZew8sL5qG8XErdUOivdtuGrf7xWgWxKYoC6Io,14173
|
|
155
|
+
morphml-1.0.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
156
|
+
morphml-1.0.0.dist-info/entry_points.txt,sha256=VSIUVNWCLYiKS2Wz1EcZRFMfuqIJ25MQPyyt0nlz7gE,48
|
|
157
|
+
morphml-1.0.0.dist-info/licenses/LICENSE,sha256=19GwZT4dLbe7Y80dOoT8iyet3At2bTXYQijEaDSzr24,1064
|
|
158
|
+
morphml-1.0.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 TIVerse
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|