deep-learning-core 0.0.25__tar.gz → 0.0.26__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.
Files changed (175) hide show
  1. deep_learning_core-0.0.26/.github/workflows/ci.yml +54 -0
  2. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/.github/workflows/publish-testpypi.yml +6 -20
  3. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/.github/workflows/publish.yml +6 -20
  4. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/PKG-INFO +47 -34
  5. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/README.md +39 -31
  6. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/pyproject.toml +8 -8
  7. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/README.md +8 -3
  8. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/guide/1_getting_started.md +1 -1
  9. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/guide/2_creating_an_experiment_repository.md +9 -0
  10. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/guide/3_local_components_and_sweeps.md +3 -1
  11. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/technical/2_entry_points.md +3 -2
  12. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/technical/5_testing.md +3 -1
  13. deep_learning_core-0.0.26/readme/technical/6_reinforcement_learning.md +344 -0
  14. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/tldr/2_create_and_run_an_experiment.md +8 -2
  15. deep_learning_core-0.0.26/src/dl_core/__init__.py +189 -0
  16. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/analysis/sweep_analyzer.py +1 -1
  17. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/callbacks/local_metric_tracker.py +45 -5
  18. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/cli.py +1 -1
  19. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/component_describer.py +4 -0
  20. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/component_scaffold.py +74 -0
  21. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/__init__.py +17 -0
  22. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_callback.py +139 -0
  23. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/registry.py +71 -10
  24. deep_learning_core-0.0.26/src/dl_core/core/replay_buffer.py +179 -0
  25. deep_learning_core-0.0.26/src/dl_core/core/rl_trainer.py +679 -0
  26. deep_learning_core-0.0.26/src/dl_core/core/rl_types.py +83 -0
  27. deep_learning_core-0.0.26/src/dl_core/core/rollout_buffer.py +223 -0
  28. deep_learning_core-0.0.26/src/dl_core/environments/__init__.py +32 -0
  29. deep_learning_core-0.0.26/src/dl_core/environments/gymnasium_environment.py +67 -0
  30. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/init_experiment.py +67 -14
  31. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/init_extensions.py +12 -0
  32. deep_learning_core-0.0.26/src/dl_core/models/__init__.py +14 -0
  33. deep_learning_core-0.0.26/src/dl_core/models/dqn.py +53 -0
  34. deep_learning_core-0.0.26/src/dl_core/models/ppo.py +90 -0
  35. deep_learning_core-0.0.26/src/dl_core/models/sac.py +122 -0
  36. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/optimizers/__init__.py +3 -3
  37. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/project.py +1 -0
  38. deep_learning_core-0.0.26/src/dl_core/py.typed +1 -0
  39. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/schedulers/__init__.py +6 -6
  40. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/single_run.py +76 -2
  41. deep_learning_core-0.0.26/src/dl_core/trainers/__init__.py +16 -0
  42. deep_learning_core-0.0.26/src/dl_core/trainers/dqn_trainer.py +379 -0
  43. deep_learning_core-0.0.26/src/dl_core/trainers/ppo_trainer.py +506 -0
  44. deep_learning_core-0.0.26/src/dl_core/trainers/q_learning_trainer.py +221 -0
  45. deep_learning_core-0.0.26/src/dl_core/trainers/sac_trainer.py +695 -0
  46. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/trainers/standard_trainer.py +0 -6
  47. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/config_validator.py +55 -39
  48. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/distributed_utils.py +0 -4
  49. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/worker.py +2 -2
  50. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_component_describer.py +21 -0
  51. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_component_scaffold.py +39 -0
  52. deep_learning_core-0.0.26/tests/test_config_validator.py +124 -0
  53. deep_learning_core-0.0.26/tests/test_dqn_trainer.py +315 -0
  54. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_init_experiment.py +29 -1
  55. deep_learning_core-0.0.26/tests/test_local_components.py +117 -0
  56. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_local_metric_tracker_callback.py +49 -0
  57. deep_learning_core-0.0.26/tests/test_ppo_trainer.py +265 -0
  58. deep_learning_core-0.0.26/tests/test_q_learning_trainer.py +175 -0
  59. deep_learning_core-0.0.26/tests/test_registry.py +38 -0
  60. deep_learning_core-0.0.26/tests/test_rl_environment_contracts.py +83 -0
  61. deep_learning_core-0.0.26/tests/test_rl_preflight.py +91 -0
  62. deep_learning_core-0.0.26/tests/test_rl_trainer.py +220 -0
  63. deep_learning_core-0.0.26/tests/test_sac_trainer.py +370 -0
  64. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_scaffold_smoke.py +5 -3
  65. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_tracking_components.py +0 -1
  66. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/uv.lock +417 -34
  67. deep_learning_core-0.0.25/.github/workflows/ci.yml +0 -60
  68. deep_learning_core-0.0.25/requirements-ci.txt +0 -11
  69. deep_learning_core-0.0.25/src/dl_core/__init__.py +0 -89
  70. deep_learning_core-0.0.25/src/dl_core/models/__init__.py +0 -7
  71. deep_learning_core-0.0.25/src/dl_core/trainers/__init__.py +0 -8
  72. deep_learning_core-0.0.25/tests/test_local_components.py +0 -35
  73. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/.gitignore +0 -0
  74. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/AGENTS.md +0 -0
  75. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/LICENSE +0 -0
  76. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/plan.md +0 -0
  77. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/technical/1_configuration.md +0 -0
  78. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/technical/3_sweep_system.md +0 -0
  79. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/technical/4_local_component_loading.md +0 -0
  80. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/readme/tldr/1_install_and_verify.md +0 -0
  81. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/accelerators/__init__.py +0 -0
  82. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/accelerators/cpu.py +0 -0
  83. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/accelerators/multi_gpu.py +0 -0
  84. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/accelerators/single_gpu.py +0 -0
  85. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/analysis/__init__.py +0 -0
  86. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/augmentations/__init__.py +0 -0
  87. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/augmentations/minimal.py +0 -0
  88. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/augmentations/standard.py +0 -0
  89. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/callbacks/__init__.py +0 -0
  90. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/callbacks/checkpoint.py +0 -0
  91. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/callbacks/dataset_refresh.py +0 -0
  92. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/callbacks/early_stopping.py +0 -0
  93. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/callbacks/metric_logger.py +0 -0
  94. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/adaptive_computation_trainer.py +0 -0
  95. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_accelerator.py +0 -0
  96. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_biometric_model.py +0 -0
  97. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_criterion.py +0 -0
  98. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_dataset.py +0 -0
  99. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_detector.py +0 -0
  100. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_executor.py +0 -0
  101. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_metric.py +0 -0
  102. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_metric_manager.py +0 -0
  103. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_metrics_source.py +0 -0
  104. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_model.py +0 -0
  105. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_sampler.py +0 -0
  106. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_tracker.py +0 -0
  107. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_trainer.py +0 -0
  108. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/base_transform.py +0 -0
  109. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/config_metadata.py +0 -0
  110. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/epoch_trainer.py +0 -0
  111. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/core/sequence_trainer.py +0 -0
  112. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/criterions/__init__.py +0 -0
  113. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/criterions/bce_with_logits.py +0 -0
  114. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/criterions/crossentropy.py +0 -0
  115. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/dataset_inspect.py +0 -0
  116. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/datasets/__init__.py +0 -0
  117. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/datasets/standard.py +0 -0
  118. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/executors/__init__.py +0 -0
  119. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/executors/local.py +0 -0
  120. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/metric_managers/__init__.py +0 -0
  121. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/metric_managers/standard_manager.py +0 -0
  122. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/metrics/__init__.py +0 -0
  123. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/metrics/accuracy.py +0 -0
  124. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/metrics/auc.py +0 -0
  125. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/metrics/f1.py +0 -0
  126. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/metrics/halt_steps.py +0 -0
  127. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/metrics_sources/__init__.py +0 -0
  128. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/metrics_sources/local.py +0 -0
  129. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/migrate.py +0 -0
  130. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/models/resnet.py +0 -0
  131. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/samplers/__init__.py +0 -0
  132. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/samplers/label.py +0 -0
  133. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/schedulers/cosinewithwarmup.py +0 -0
  134. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/smoke.py +0 -0
  135. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep/__init__.py +0 -0
  136. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep/config/__init__.py +0 -0
  137. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep/config/config_builder.py +0 -0
  138. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep/config/config_utils.py +0 -0
  139. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep/runner.py +0 -0
  140. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep/template/__init__.py +0 -0
  141. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep/template/template_loader.py +0 -0
  142. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep/template/template_merger.py +0 -0
  143. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep/template/template_validator.py +0 -0
  144. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep/template/tracking_utils.py +0 -0
  145. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sweep_scaffold.py +0 -0
  146. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/sync.py +0 -0
  147. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/templates/README.md +0 -0
  148. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/templates/base/base.yaml +0 -0
  149. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/templates/base/base_sweep.yaml +0 -0
  150. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/templates/presets.yaml +0 -0
  151. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/templates/sweeps/example_sweep.yaml +0 -0
  152. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/trackers/__init__.py +0 -0
  153. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/trackers/local.py +0 -0
  154. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/__init__.py +0 -0
  155. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/artifact_manager.py +0 -0
  156. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/checkpoint_utils.py +0 -0
  157. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/common.py +0 -0
  158. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/config.py +0 -0
  159. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/config_names.py +0 -0
  160. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/ema.py +0 -0
  161. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/logging/__init__.py +0 -0
  162. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/logging/logger.py +0 -0
  163. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/runtime_utils.py +0 -0
  164. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/src/dl_core/utils/sweep_tracker.py +0 -0
  165. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/conftest.py +0 -0
  166. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_checkpoint_behavior.py +0 -0
  167. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_checkpoint_utils.py +0 -0
  168. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_dataset_bases.py +0 -0
  169. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_dataset_cli.py +0 -0
  170. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_init_extensions.py +0 -0
  171. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_metric_pipeline.py +0 -0
  172. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_samplers.py +0 -0
  173. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_sweep_runner.py +0 -0
  174. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_sync_cli.py +0 -0
  175. {deep_learning_core-0.0.25 → deep_learning_core-0.0.26}/tests/test_trainer_hierarchy.py +0 -0
@@ -0,0 +1,54 @@
1
+ name: CI
2
+
3
+ env:
4
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - master
10
+ pull_request:
11
+ workflow_dispatch:
12
+
13
+ jobs:
14
+ validate:
15
+ name: Python ${{ matrix.python-version }}
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: read
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ python-version: ["3.10", "3.11", "3.12"]
23
+
24
+ steps:
25
+ - name: Check out repository
26
+ uses: actions/checkout@v5
27
+
28
+ - name: Set up uv
29
+ uses: astral-sh/setup-uv@v7
30
+
31
+ - name: Set up Python
32
+ run: uv python install ${{ matrix.python-version }}
33
+
34
+ - name: Install locked dependencies
35
+ run: uv sync --locked --extra dev --python ${{ matrix.python-version }}
36
+
37
+ - name: Run Ruff
38
+ run: uv run --no-sync ruff check src tests
39
+
40
+ - name: Run tests with coverage
41
+ run: >-
42
+ uv run --no-sync python -m pytest
43
+ --cov=dl_core
44
+ --cov-report=term
45
+ --cov-fail-under=45
46
+
47
+ - name: Compile package
48
+ run: uv run --no-sync python -m compileall src/dl_core
49
+
50
+ - name: Build distribution artifacts
51
+ run: uv build --no-sources
52
+
53
+ - name: Check distribution metadata
54
+ run: uv run --no-sync twine check dist/*
@@ -31,28 +31,14 @@ jobs:
31
31
  - name: Set up Python
32
32
  run: uv python install 3.11
33
33
 
34
- - name: Create virtual environment
35
- run: uv venv
34
+ - name: Install locked dependencies
35
+ run: uv sync --locked --extra dev --python 3.11
36
36
 
37
- - name: Install test dependencies
38
- run: |
39
- python3 - <<'PY'
40
- from pathlib import Path
41
- import tomllib
42
-
43
- pyproject = tomllib.loads(Path("pyproject.toml").read_text())
44
- dependencies = pyproject["project"]["dependencies"]
45
- dev_dependencies = pyproject["project"]["optional-dependencies"]["dev"]
46
- Path("requirements-ci.txt").write_text(
47
- "\n".join([*dependencies, *dev_dependencies, "twine"]) + "\n",
48
- encoding="utf-8",
49
- )
50
- PY
51
- uv pip install --python .venv/bin/python -r requirements-ci.txt
52
- uv pip install --python .venv/bin/python --no-deps --editable .
37
+ - name: Run Ruff
38
+ run: uv run --no-sync ruff check src tests
53
39
 
54
40
  - name: Run tests
55
- run: VIRTUAL_ENV="$PWD/.venv" PATH="$PWD/.venv/bin:$PATH" .venv/bin/python -m pytest
41
+ run: uv run --no-sync python -m pytest
56
42
 
57
43
  - name: Build distribution artifacts
58
44
  run: |
@@ -60,7 +46,7 @@ jobs:
60
46
  uv build --no-sources
61
47
 
62
48
  - name: Check distribution metadata
63
- run: .venv/bin/python -m twine check dist/*
49
+ run: uv run --no-sync twine check dist/*
64
50
 
65
51
  - name: Upload distribution artifacts
66
52
  uses: actions/upload-artifact@v6
@@ -31,28 +31,14 @@ jobs:
31
31
  - name: Set up Python
32
32
  run: uv python install 3.11
33
33
 
34
- - name: Create virtual environment
35
- run: uv venv
34
+ - name: Install locked dependencies
35
+ run: uv sync --locked --extra dev --python 3.11
36
36
 
37
- - name: Install test dependencies
38
- run: |
39
- python3 - <<'PY'
40
- from pathlib import Path
41
- import tomllib
42
-
43
- pyproject = tomllib.loads(Path("pyproject.toml").read_text())
44
- dependencies = pyproject["project"]["dependencies"]
45
- dev_dependencies = pyproject["project"]["optional-dependencies"]["dev"]
46
- Path("requirements-ci.txt").write_text(
47
- "\n".join([*dependencies, *dev_dependencies, "twine"]) + "\n",
48
- encoding="utf-8",
49
- )
50
- PY
51
- uv pip install --python .venv/bin/python -r requirements-ci.txt
52
- uv pip install --python .venv/bin/python --no-deps --editable .
37
+ - name: Run Ruff
38
+ run: uv run --no-sync ruff check src tests
53
39
 
54
40
  - name: Run tests
55
- run: VIRTUAL_ENV="$PWD/.venv" PATH="$PWD/.venv/bin:$PATH" .venv/bin/python -m pytest
41
+ run: uv run --no-sync python -m pytest
56
42
 
57
43
  - name: Build distribution artifacts
58
44
  run: |
@@ -60,7 +46,7 @@ jobs:
60
46
  uv build --no-sources
61
47
 
62
48
  - name: Check distribution metadata
63
- run: .venv/bin/python -m twine check dist/*
49
+ run: uv run --no-sync twine check dist/*
64
50
 
65
51
  - name: Upload distribution artifacts
66
52
  uses: actions/upload-artifact@v6
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deep-learning-core
3
- Version: 0.0.25
3
+ Version: 0.0.26
4
4
  Summary: Reusable deep learning framework core.
5
5
  Project-URL: Homepage, https://github.com/Blazkowiz47/dl-core
6
- Project-URL: Documentation, https://github.com/Blazkowiz47/dl-core/tree/main/readme
6
+ Project-URL: Documentation, https://github.com/Blazkowiz47/dl-core/tree/master/readme
7
7
  Project-URL: Repository, https://github.com/Blazkowiz47/dl-core
8
8
  Project-URL: Issues, https://github.com/Blazkowiz47/dl-core/issues
9
9
  Author-email: blazkowiz47 <sushrutpatwardhan@gmail.com>
@@ -42,8 +42,10 @@ Classifier: Programming Language :: Python :: 3.11
42
42
  Classifier: Programming Language :: Python :: 3.12
43
43
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
44
44
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
45
+ Classifier: Typing :: Typed
45
46
  Requires-Python: >=3.10
46
47
  Requires-Dist: albumentations
48
+ Requires-Dist: gymnasium<2,>=1.3
47
49
  Requires-Dist: numpy
48
50
  Requires-Dist: opencv-python-headless
49
51
  Requires-Dist: psutil
@@ -55,7 +57,10 @@ Requires-Dist: tqdm
55
57
  Provides-Extra: azure
56
58
  Requires-Dist: deep-learning-azure<0.1,>=0.0.18; extra == 'azure'
57
59
  Provides-Extra: dev
58
- Requires-Dist: pytest; extra == 'dev'
60
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
61
+ Requires-Dist: pytest>=8.0; extra == 'dev'
62
+ Requires-Dist: ruff>=0.12; extra == 'dev'
63
+ Requires-Dist: twine>=6.0; extra == 'dev'
59
64
  Provides-Extra: mlflow
60
65
  Requires-Dist: deep-learning-mlflow<0.1,>=0.0.11; extra == 'mlflow'
61
66
  Provides-Extra: wandb
@@ -71,7 +76,7 @@ across many experiment repositories. It is intended to be the public base
71
76
  package, while optional integrations such as Azure are layered on through
72
77
  extras and companion extension packages.
73
78
 
74
- Current release: `deep-learning-core==0.0.25`.
79
+ Current release: `deep-learning-core==0.0.26`.
75
80
 
76
81
  Compatible companion package floors:
77
82
 
@@ -79,31 +84,30 @@ Compatible companion package floors:
79
84
  - `deep-learning-mlflow>=0.0.11,<0.1`
80
85
  - `deep-learning-wandb>=0.0.12,<0.1`
81
86
 
82
- ## What's New?
83
-
84
- - `dl-init` is now the primary scaffold command
85
- - `dl-core list` makes built-in and local registry discovery easier
86
- - `dl-core add` defaults to plain base classes unless `--base` is given
87
- - `dl-analyze` is the primary sweep-analysis CLI
88
- - `dl-analyze` now supports explicit ranking metrics and rank methods
89
- - `dl-analyze` now persists `analysis_cache.json` next to `sweep_tracking.json`
90
- - `dl-analyze` now writes versioned reports under `analysis/vN.md`
91
- - `dl-sync --sweep ... --artifacts` now syncs tracked remote artifacts into the
92
- local repository when the active backend supports it
93
- - EMA checkpoints now include a drop-in `ema_models_state_dict` alongside the
94
- normal training weights and EMA resume metadata
95
- - `dl-run --validate-only` now performs a real preflight by resolving the
96
- configured components without starting training
97
- - `BaseTrainer` now exposes `select_checkpoint()` and
98
- `post_training(checkpoint_path)` hooks for completed-run evaluation or export
99
- work; the default checkpoint selection uses `best.pth` then `latest.pth`
100
- - `dl-inspect-dataset` now summarizes split sizes and one collated batch from
101
- the current config
102
- - `dl-smoke` now checks one dataset batch and one model forward pass from a
103
- config file
104
- - local artifacts now use:
105
- - `artifacts/runs/<run_name>/...`
106
- - `artifacts/sweeps/<sweep_name>/<run_name>/...`
87
+ ## What's New in 0.0.26?
88
+
89
+ - Gymnasium-compatible environments can now be registered, discovered, and
90
+ created through a first-class environment contract
91
+ - `RLTrainer` provides an episode-based lifecycle, deterministic evaluation,
92
+ RL callback hooks, and resumable algorithm checkpoints alongside
93
+ `EpochTrainer`
94
+ - `QLearningTrainer` adds tabular epsilon-greedy learning for finite discrete
95
+ Gymnasium environments
96
+ - `DQNTrainer` adds replay-based discrete control with target networks,
97
+ Double-DQN targets, and a built-in MLP Q-network
98
+ - `PPOTrainer` adds clipped on-policy optimization, GAE, and discrete or
99
+ bounded-continuous actor-critic policies
100
+ - `SACTrainer` adds replay-based bounded-continuous control with twin critics,
101
+ Polyak targets, and optional automatic entropy tuning
102
+ - `dl-run --validate-only` now resolves RL environments, models, optimizers,
103
+ and callbacks without resetting or stepping an environment
104
+ - `dl-core add trainer MyPolicy --base rltrainer` scaffolds custom algorithms
105
+ against the episode-oriented lifecycle
106
+ - the local metric callback records RL episode, update, and evaluation metrics
107
+ - local component loading now cleans up registrations and import paths between
108
+ projects, while registry lookups prefer the most specific matching prefix
109
+ - configuration validation rejects malformed root and component structures
110
+ more consistently
107
111
 
108
112
  ## Install
109
113
 
@@ -213,7 +217,9 @@ that repository, run `uv sync`, then run:
213
217
  uv run dl-run --config configs/base.yaml --validate-only
214
218
  uv run dl-inspect-dataset --config configs/base.yaml
215
219
  uv run dl-smoke --config configs/base.yaml
216
- uv run dl-run --config configs/base.yaml
220
+ cp configs/base.yaml experiments/debug.yaml
221
+ uv run dl-run --config experiments/debug.yaml --validate-only
222
+ uv run dl-run --config experiments/debug.yaml
217
223
  uv run dl-sweep experiments/lr_sweep.yaml --preview
218
224
  uv run dl-sweep experiments/lr_sweep.yaml --only "*seed_2025*"
219
225
  uv run dl-sweep experiments/lr_sweep.yaml
@@ -252,10 +258,12 @@ Then:
252
258
  - `scripts/temporary/test_model.py`
253
259
  - `experiments/lr_sweep.yaml`
254
260
  - `AGENTS.md`
261
+ - `CLAUDE.md`
255
262
  2. implement the generated dataset wrapper under `src/datasets/my_exp.py`
256
263
  3. adjust `configs/base.yaml` so it points at the dataset/model/trainer you want
257
- and set the root-level reproducibility defaults you need (`seed` and
258
- `deterministic`)
264
+ and set the shared reproducibility defaults you need (`seed` and
265
+ `deterministic`). Keep concrete single-run configs in `experiments/`,
266
+ including debug and baseline runs.
259
267
  4. smoke-check the generated helpers:
260
268
 
261
269
  ```bash
@@ -269,7 +277,9 @@ uv run python scripts/temporary/test_model.py
269
277
  uv run dl-run --config configs/base.yaml --validate-only
270
278
  uv run dl-inspect-dataset --config configs/base.yaml
271
279
  uv run dl-smoke --config configs/base.yaml
272
- uv run dl-run --config configs/base.yaml
280
+ cp configs/base.yaml experiments/debug.yaml
281
+ uv run dl-run --config experiments/debug.yaml --validate-only
282
+ uv run dl-run --config experiments/debug.yaml
273
283
  ```
274
284
 
275
285
  Once that works, move on to:
@@ -373,6 +383,7 @@ Common local component scaffolds:
373
383
  ```bash
374
384
  uv run dl-core add model MyResNet
375
385
  uv run dl-core add trainer MyTrainer
386
+ uv run dl-core add trainer MyPolicy --base rltrainer
376
387
  uv run dl-core add callback MyMetrics
377
388
  uv run dl-core add metric_manager MyManager
378
389
  uv run dl-core add sampler MySampler
@@ -507,7 +518,7 @@ provided through `dl-azure`.
507
518
 
508
519
  ## Documentation
509
520
 
510
- - [Documentation Index](https://github.com/Blazkowiz47/dl-core/tree/main/readme)
521
+ - [Documentation Index](https://github.com/Blazkowiz47/dl-core/tree/master/readme)
511
522
  - [GitHub Repository](https://github.com/Blazkowiz47/dl-core)
512
523
 
513
524
  ## License
@@ -518,5 +529,7 @@ MIT. See [LICENSE](LICENSE).
518
529
 
519
530
  ```bash
520
531
  uv run --extra dev pytest
532
+ uv run --extra dev ruff check src tests
521
533
  uv run python -m compileall src/dl_core
534
+ uv build --no-sources
522
535
  ```
@@ -7,7 +7,7 @@ across many experiment repositories. It is intended to be the public base
7
7
  package, while optional integrations such as Azure are layered on through
8
8
  extras and companion extension packages.
9
9
 
10
- Current release: `deep-learning-core==0.0.25`.
10
+ Current release: `deep-learning-core==0.0.26`.
11
11
 
12
12
  Compatible companion package floors:
13
13
 
@@ -15,31 +15,30 @@ Compatible companion package floors:
15
15
  - `deep-learning-mlflow>=0.0.11,<0.1`
16
16
  - `deep-learning-wandb>=0.0.12,<0.1`
17
17
 
18
- ## What's New?
19
-
20
- - `dl-init` is now the primary scaffold command
21
- - `dl-core list` makes built-in and local registry discovery easier
22
- - `dl-core add` defaults to plain base classes unless `--base` is given
23
- - `dl-analyze` is the primary sweep-analysis CLI
24
- - `dl-analyze` now supports explicit ranking metrics and rank methods
25
- - `dl-analyze` now persists `analysis_cache.json` next to `sweep_tracking.json`
26
- - `dl-analyze` now writes versioned reports under `analysis/vN.md`
27
- - `dl-sync --sweep ... --artifacts` now syncs tracked remote artifacts into the
28
- local repository when the active backend supports it
29
- - EMA checkpoints now include a drop-in `ema_models_state_dict` alongside the
30
- normal training weights and EMA resume metadata
31
- - `dl-run --validate-only` now performs a real preflight by resolving the
32
- configured components without starting training
33
- - `BaseTrainer` now exposes `select_checkpoint()` and
34
- `post_training(checkpoint_path)` hooks for completed-run evaluation or export
35
- work; the default checkpoint selection uses `best.pth` then `latest.pth`
36
- - `dl-inspect-dataset` now summarizes split sizes and one collated batch from
37
- the current config
38
- - `dl-smoke` now checks one dataset batch and one model forward pass from a
39
- config file
40
- - local artifacts now use:
41
- - `artifacts/runs/<run_name>/...`
42
- - `artifacts/sweeps/<sweep_name>/<run_name>/...`
18
+ ## What's New in 0.0.26?
19
+
20
+ - Gymnasium-compatible environments can now be registered, discovered, and
21
+ created through a first-class environment contract
22
+ - `RLTrainer` provides an episode-based lifecycle, deterministic evaluation,
23
+ RL callback hooks, and resumable algorithm checkpoints alongside
24
+ `EpochTrainer`
25
+ - `QLearningTrainer` adds tabular epsilon-greedy learning for finite discrete
26
+ Gymnasium environments
27
+ - `DQNTrainer` adds replay-based discrete control with target networks,
28
+ Double-DQN targets, and a built-in MLP Q-network
29
+ - `PPOTrainer` adds clipped on-policy optimization, GAE, and discrete or
30
+ bounded-continuous actor-critic policies
31
+ - `SACTrainer` adds replay-based bounded-continuous control with twin critics,
32
+ Polyak targets, and optional automatic entropy tuning
33
+ - `dl-run --validate-only` now resolves RL environments, models, optimizers,
34
+ and callbacks without resetting or stepping an environment
35
+ - `dl-core add trainer MyPolicy --base rltrainer` scaffolds custom algorithms
36
+ against the episode-oriented lifecycle
37
+ - the local metric callback records RL episode, update, and evaluation metrics
38
+ - local component loading now cleans up registrations and import paths between
39
+ projects, while registry lookups prefer the most specific matching prefix
40
+ - configuration validation rejects malformed root and component structures
41
+ more consistently
43
42
 
44
43
  ## Install
45
44
 
@@ -149,7 +148,9 @@ that repository, run `uv sync`, then run:
149
148
  uv run dl-run --config configs/base.yaml --validate-only
150
149
  uv run dl-inspect-dataset --config configs/base.yaml
151
150
  uv run dl-smoke --config configs/base.yaml
152
- uv run dl-run --config configs/base.yaml
151
+ cp configs/base.yaml experiments/debug.yaml
152
+ uv run dl-run --config experiments/debug.yaml --validate-only
153
+ uv run dl-run --config experiments/debug.yaml
153
154
  uv run dl-sweep experiments/lr_sweep.yaml --preview
154
155
  uv run dl-sweep experiments/lr_sweep.yaml --only "*seed_2025*"
155
156
  uv run dl-sweep experiments/lr_sweep.yaml
@@ -188,10 +189,12 @@ Then:
188
189
  - `scripts/temporary/test_model.py`
189
190
  - `experiments/lr_sweep.yaml`
190
191
  - `AGENTS.md`
192
+ - `CLAUDE.md`
191
193
  2. implement the generated dataset wrapper under `src/datasets/my_exp.py`
192
194
  3. adjust `configs/base.yaml` so it points at the dataset/model/trainer you want
193
- and set the root-level reproducibility defaults you need (`seed` and
194
- `deterministic`)
195
+ and set the shared reproducibility defaults you need (`seed` and
196
+ `deterministic`). Keep concrete single-run configs in `experiments/`,
197
+ including debug and baseline runs.
195
198
  4. smoke-check the generated helpers:
196
199
 
197
200
  ```bash
@@ -205,7 +208,9 @@ uv run python scripts/temporary/test_model.py
205
208
  uv run dl-run --config configs/base.yaml --validate-only
206
209
  uv run dl-inspect-dataset --config configs/base.yaml
207
210
  uv run dl-smoke --config configs/base.yaml
208
- uv run dl-run --config configs/base.yaml
211
+ cp configs/base.yaml experiments/debug.yaml
212
+ uv run dl-run --config experiments/debug.yaml --validate-only
213
+ uv run dl-run --config experiments/debug.yaml
209
214
  ```
210
215
 
211
216
  Once that works, move on to:
@@ -309,6 +314,7 @@ Common local component scaffolds:
309
314
  ```bash
310
315
  uv run dl-core add model MyResNet
311
316
  uv run dl-core add trainer MyTrainer
317
+ uv run dl-core add trainer MyPolicy --base rltrainer
312
318
  uv run dl-core add callback MyMetrics
313
319
  uv run dl-core add metric_manager MyManager
314
320
  uv run dl-core add sampler MySampler
@@ -443,7 +449,7 @@ provided through `dl-azure`.
443
449
 
444
450
  ## Documentation
445
451
 
446
- - [Documentation Index](https://github.com/Blazkowiz47/dl-core/tree/main/readme)
452
+ - [Documentation Index](https://github.com/Blazkowiz47/dl-core/tree/master/readme)
447
453
  - [GitHub Repository](https://github.com/Blazkowiz47/dl-core)
448
454
 
449
455
  ## License
@@ -454,5 +460,7 @@ MIT. See [LICENSE](LICENSE).
454
460
 
455
461
  ```bash
456
462
  uv run --extra dev pytest
463
+ uv run --extra dev ruff check src tests
457
464
  uv run python -m compileall src/dl_core
465
+ uv build --no-sources
458
466
  ```
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "deep-learning-core"
7
- version = "0.0.25"
7
+ version = "0.0.26"
8
8
  description = "Reusable deep learning framework core."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -34,9 +34,11 @@ classifiers = [
34
34
  "Programming Language :: Python :: 3.12",
35
35
  "Topic :: Scientific/Engineering :: Artificial Intelligence",
36
36
  "Topic :: Software Development :: Libraries :: Python Modules",
37
+ "Typing :: Typed",
37
38
  ]
38
39
  dependencies = [
39
40
  "albumentations",
41
+ "gymnasium>=1.3,<2",
40
42
  "numpy",
41
43
  "opencv-python-headless",
42
44
  "psutil",
@@ -58,12 +60,15 @@ wandb = [
58
60
  "deep-learning-wandb>=0.0.12,<0.1",
59
61
  ]
60
62
  dev = [
61
- "pytest",
63
+ "pytest>=8.0",
64
+ "pytest-cov>=5.0",
65
+ "ruff>=0.12",
66
+ "twine>=6.0",
62
67
  ]
63
68
 
64
69
  [project.urls]
65
70
  Homepage = "https://github.com/Blazkowiz47/dl-core"
66
- Documentation = "https://github.com/Blazkowiz47/dl-core/tree/main/readme"
71
+ Documentation = "https://github.com/Blazkowiz47/dl-core/tree/master/readme"
67
72
  Repository = "https://github.com/Blazkowiz47/dl-core"
68
73
  Issues = "https://github.com/Blazkowiz47/dl-core/issues"
69
74
 
@@ -81,11 +86,6 @@ dl-smoke = "dl_core.smoke:main"
81
86
  dl-sweep = "dl_core.sweep.runner:main"
82
87
  dl-train-worker = "dl_core.worker:main"
83
88
 
84
- [tool.uv.sources]
85
- "deep-learning-azure" = { path = "../dl-azure", editable = true }
86
- "deep-learning-mlflow" = { path = "../dl-mlflow", editable = true }
87
- "deep-learning-wandb" = { path = "../dl-wandb", editable = true }
88
-
89
89
  [tool.hatch.build.targets.sdist]
90
90
  exclude = [
91
91
  "/.tmp-ci-venv",
@@ -4,7 +4,7 @@ This documentation is split into quick references, workflow guides, and
4
4
  technical notes. The goal is the same as in the original framework repo, but
5
5
  focused on the extracted package and the experiment-repo workflow around it.
6
6
 
7
- Current public release: `deep-learning-core==0.0.25`.
7
+ Current public release: `deep-learning-core==0.0.26`.
8
8
 
9
9
  ## Companion Packages
10
10
 
@@ -43,6 +43,7 @@ mechanics.
43
43
  - [Sweep System](./technical/3_sweep_system.md)
44
44
  - [Local Component Loading](./technical/4_local_component_loading.md)
45
45
  - [Testing](./technical/5_testing.md)
46
+ - [Reinforcement Learning](./technical/6_reinforcement_learning.md)
46
47
 
47
48
  ## Common Tasks
48
49
 
@@ -67,11 +68,15 @@ uv run dl-init --root-dir .
67
68
  ### Run a local training job
68
69
 
69
70
  ```bash
70
- uv run dl-run --config configs/base.yaml
71
+ uv run dl-run --config configs/base.yaml --validate-only
72
+ cp configs/base.yaml experiments/debug.yaml
73
+ uv run dl-run --config experiments/debug.yaml --validate-only
74
+ uv run dl-run --config experiments/debug.yaml
71
75
  ```
72
76
 
73
77
  Generated `configs/base.yaml` files include root-level `seed` and
74
- `deterministic` defaults so reproducibility can be controlled explicitly.
78
+ `deterministic` defaults so reproducibility can be controlled explicitly. Keep
79
+ concrete single-run configs under `experiments/`, including debug runs.
75
80
 
76
81
  ### Smoke-check generated dataset and model helpers
77
82
 
@@ -54,7 +54,7 @@ Inside the generated repository:
54
54
  ```bash
55
55
  uv add --editable ../dl-core
56
56
  uv sync
57
- uv run dl-run --config configs/base.yaml
57
+ uv run dl-run --config configs/base.yaml --validate-only
58
58
  ```
59
59
 
60
60
  If that succeeds, your local package plus experiment repo integration is
@@ -32,6 +32,8 @@ uv run dl-init --name my-exp --root-dir . --with-mlflow
32
32
 
33
33
  ```text
34
34
  my-exp/
35
+ AGENTS.md
36
+ CLAUDE.md
35
37
  pyproject.toml
36
38
  configs/
37
39
  base.yaml
@@ -78,6 +80,8 @@ By default:
78
80
  - `configs/presets.yaml`
79
81
  - `experiments/lr_sweep.yaml`
80
82
  - `experiments/experiments.log`
83
+ - `AGENTS.md`
84
+ - `CLAUDE.md`
81
85
 
82
86
  Start there before editing the wrapper classes. After updating the dataset or
83
87
  model wrapper, use:
@@ -88,3 +92,8 @@ uv run python scripts/temporary/test_model.py
88
92
  ```
89
93
 
90
94
  before committing to a full `dl-run`.
95
+
96
+ Use `configs/base.yaml` for reusable shared defaults. Before a real single run,
97
+ copy or derive it into a named file under `experiments/`, for example
98
+ `experiments/debug.yaml`, validate that concrete config, and run `dl-run`
99
+ against the `experiments/` file.
@@ -104,7 +104,9 @@ The core dataset bases are intended for different data shapes:
104
104
  ## Local Training
105
105
 
106
106
  ```bash
107
- uv run dl-run --config configs/base.yaml
107
+ uv run dl-run --config configs/base.yaml --validate-only
108
+ cp configs/base.yaml experiments/debug.yaml
109
+ uv run dl-run --config experiments/debug.yaml
108
110
  ```
109
111
 
110
112
  ## Sweeps
@@ -73,7 +73,7 @@ scripts.
73
73
  Runs a single local training job through the local executor.
74
74
 
75
75
  ```bash
76
- uv run dl-run --config configs/base.yaml
76
+ uv run dl-run --config experiments/debug.yaml
77
77
  ```
78
78
 
79
79
  Useful flags:
@@ -88,7 +88,8 @@ Notes:
88
88
  - `--validate-only` now performs a lightweight preflight: it validates the
89
89
  config, resolves the configured components, safely instantiates the dataset,
90
90
  models, criterions, optimizer, and optional scheduler, then exits without
91
- starting training
91
+ starting training. Malformed YAML roots and section types are reported as
92
+ validation errors instead of failing with an internal exception.
92
93
 
93
94
  ## `dl-smoke`
94
95
 
@@ -24,7 +24,9 @@ uv run python -m compileall src/dl_core
24
24
  From a generated experiment repository:
25
25
 
26
26
  ```bash
27
- uv run dl-run --config configs/base.yaml
27
+ uv run dl-run --config configs/base.yaml --validate-only
28
+ cp configs/base.yaml experiments/debug.yaml
29
+ uv run dl-run --config experiments/debug.yaml
28
30
  uv run dl-sweep experiments/lr_sweep.yaml
29
31
  ```
30
32