deep-learning-core 0.0.24__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.24 → deep_learning_core-0.0.26}/.github/workflows/publish-testpypi.yml +6 -20
  3. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/.github/workflows/publish.yml +6 -20
  4. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/AGENTS.md +1 -0
  5. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/PKG-INFO +71 -33
  6. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/README.md +60 -27
  7. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/pyproject.toml +11 -11
  8. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/README.md +9 -2
  9. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/guide/1_getting_started.md +1 -1
  10. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/guide/2_creating_an_experiment_repository.md +9 -0
  11. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/guide/3_local_components_and_sweeps.md +3 -1
  12. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/technical/1_configuration.md +7 -0
  13. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/technical/2_entry_points.md +3 -2
  14. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/technical/5_testing.md +3 -1
  15. deep_learning_core-0.0.26/readme/technical/6_reinforcement_learning.md +344 -0
  16. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/tldr/2_create_and_run_an_experiment.md +8 -2
  17. deep_learning_core-0.0.26/src/dl_core/__init__.py +189 -0
  18. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/analysis/sweep_analyzer.py +1 -1
  19. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/callbacks/local_metric_tracker.py +45 -5
  20. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/cli.py +1 -1
  21. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/component_describer.py +4 -0
  22. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/component_scaffold.py +74 -0
  23. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/__init__.py +17 -0
  24. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_callback.py +139 -0
  25. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/registry.py +71 -10
  26. deep_learning_core-0.0.26/src/dl_core/core/replay_buffer.py +179 -0
  27. deep_learning_core-0.0.26/src/dl_core/core/rl_trainer.py +679 -0
  28. deep_learning_core-0.0.26/src/dl_core/core/rl_types.py +83 -0
  29. deep_learning_core-0.0.26/src/dl_core/core/rollout_buffer.py +223 -0
  30. deep_learning_core-0.0.26/src/dl_core/environments/__init__.py +32 -0
  31. deep_learning_core-0.0.26/src/dl_core/environments/gymnasium_environment.py +67 -0
  32. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/init_experiment.py +67 -14
  33. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/init_extensions.py +12 -0
  34. deep_learning_core-0.0.26/src/dl_core/models/__init__.py +14 -0
  35. deep_learning_core-0.0.26/src/dl_core/models/dqn.py +53 -0
  36. deep_learning_core-0.0.26/src/dl_core/models/ppo.py +90 -0
  37. deep_learning_core-0.0.26/src/dl_core/models/sac.py +122 -0
  38. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/optimizers/__init__.py +3 -3
  39. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/project.py +1 -0
  40. deep_learning_core-0.0.26/src/dl_core/py.typed +1 -0
  41. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/schedulers/__init__.py +6 -6
  42. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/single_run.py +76 -2
  43. deep_learning_core-0.0.26/src/dl_core/trainers/__init__.py +16 -0
  44. deep_learning_core-0.0.26/src/dl_core/trainers/dqn_trainer.py +379 -0
  45. deep_learning_core-0.0.26/src/dl_core/trainers/ppo_trainer.py +506 -0
  46. deep_learning_core-0.0.26/src/dl_core/trainers/q_learning_trainer.py +221 -0
  47. deep_learning_core-0.0.26/src/dl_core/trainers/sac_trainer.py +695 -0
  48. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/trainers/standard_trainer.py +0 -6
  49. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/config_validator.py +55 -39
  50. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/distributed_utils.py +0 -4
  51. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/worker.py +2 -2
  52. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_component_describer.py +21 -0
  53. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_component_scaffold.py +39 -0
  54. deep_learning_core-0.0.26/tests/test_config_validator.py +124 -0
  55. deep_learning_core-0.0.26/tests/test_dqn_trainer.py +315 -0
  56. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_init_experiment.py +29 -1
  57. deep_learning_core-0.0.26/tests/test_local_components.py +117 -0
  58. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_local_metric_tracker_callback.py +49 -0
  59. deep_learning_core-0.0.26/tests/test_ppo_trainer.py +265 -0
  60. deep_learning_core-0.0.26/tests/test_q_learning_trainer.py +175 -0
  61. deep_learning_core-0.0.26/tests/test_registry.py +38 -0
  62. deep_learning_core-0.0.26/tests/test_rl_environment_contracts.py +83 -0
  63. deep_learning_core-0.0.26/tests/test_rl_preflight.py +91 -0
  64. deep_learning_core-0.0.26/tests/test_rl_trainer.py +220 -0
  65. deep_learning_core-0.0.26/tests/test_sac_trainer.py +370 -0
  66. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_scaffold_smoke.py +5 -3
  67. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_tracking_components.py +0 -1
  68. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/uv.lock +420 -37
  69. deep_learning_core-0.0.24/.github/workflows/ci.yml +0 -60
  70. deep_learning_core-0.0.24/requirements-ci.txt +0 -11
  71. deep_learning_core-0.0.24/src/dl_core/__init__.py +0 -89
  72. deep_learning_core-0.0.24/src/dl_core/models/__init__.py +0 -7
  73. deep_learning_core-0.0.24/src/dl_core/trainers/__init__.py +0 -8
  74. deep_learning_core-0.0.24/tests/test_local_components.py +0 -35
  75. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/.gitignore +0 -0
  76. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/LICENSE +0 -0
  77. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/plan.md +0 -0
  78. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/technical/3_sweep_system.md +0 -0
  79. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/technical/4_local_component_loading.md +0 -0
  80. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/readme/tldr/1_install_and_verify.md +0 -0
  81. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/accelerators/__init__.py +0 -0
  82. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/accelerators/cpu.py +0 -0
  83. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/accelerators/multi_gpu.py +0 -0
  84. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/accelerators/single_gpu.py +0 -0
  85. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/analysis/__init__.py +0 -0
  86. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/augmentations/__init__.py +0 -0
  87. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/augmentations/minimal.py +0 -0
  88. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/augmentations/standard.py +0 -0
  89. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/callbacks/__init__.py +0 -0
  90. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/callbacks/checkpoint.py +0 -0
  91. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/callbacks/dataset_refresh.py +0 -0
  92. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/callbacks/early_stopping.py +0 -0
  93. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/callbacks/metric_logger.py +0 -0
  94. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/adaptive_computation_trainer.py +0 -0
  95. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_accelerator.py +0 -0
  96. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_biometric_model.py +0 -0
  97. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_criterion.py +0 -0
  98. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_dataset.py +0 -0
  99. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_detector.py +0 -0
  100. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_executor.py +0 -0
  101. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_metric.py +0 -0
  102. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_metric_manager.py +0 -0
  103. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_metrics_source.py +0 -0
  104. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_model.py +0 -0
  105. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_sampler.py +0 -0
  106. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_tracker.py +0 -0
  107. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_trainer.py +0 -0
  108. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/base_transform.py +0 -0
  109. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/config_metadata.py +0 -0
  110. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/epoch_trainer.py +0 -0
  111. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/core/sequence_trainer.py +0 -0
  112. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/criterions/__init__.py +0 -0
  113. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/criterions/bce_with_logits.py +0 -0
  114. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/criterions/crossentropy.py +0 -0
  115. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/dataset_inspect.py +0 -0
  116. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/datasets/__init__.py +0 -0
  117. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/datasets/standard.py +0 -0
  118. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/executors/__init__.py +0 -0
  119. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/executors/local.py +0 -0
  120. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/metric_managers/__init__.py +0 -0
  121. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/metric_managers/standard_manager.py +0 -0
  122. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/metrics/__init__.py +0 -0
  123. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/metrics/accuracy.py +0 -0
  124. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/metrics/auc.py +0 -0
  125. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/metrics/f1.py +0 -0
  126. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/metrics/halt_steps.py +0 -0
  127. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/metrics_sources/__init__.py +0 -0
  128. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/metrics_sources/local.py +0 -0
  129. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/migrate.py +0 -0
  130. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/models/resnet.py +0 -0
  131. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/samplers/__init__.py +0 -0
  132. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/samplers/label.py +0 -0
  133. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/schedulers/cosinewithwarmup.py +0 -0
  134. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/smoke.py +0 -0
  135. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep/__init__.py +0 -0
  136. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep/config/__init__.py +0 -0
  137. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep/config/config_builder.py +0 -0
  138. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep/config/config_utils.py +0 -0
  139. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep/runner.py +0 -0
  140. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep/template/__init__.py +0 -0
  141. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep/template/template_loader.py +0 -0
  142. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep/template/template_merger.py +0 -0
  143. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep/template/template_validator.py +0 -0
  144. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep/template/tracking_utils.py +0 -0
  145. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sweep_scaffold.py +0 -0
  146. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/sync.py +0 -0
  147. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/templates/README.md +0 -0
  148. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/templates/base/base.yaml +0 -0
  149. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/templates/base/base_sweep.yaml +0 -0
  150. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/templates/presets.yaml +0 -0
  151. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/templates/sweeps/example_sweep.yaml +0 -0
  152. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/trackers/__init__.py +0 -0
  153. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/trackers/local.py +0 -0
  154. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/__init__.py +0 -0
  155. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/artifact_manager.py +0 -0
  156. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/checkpoint_utils.py +0 -0
  157. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/common.py +0 -0
  158. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/config.py +0 -0
  159. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/config_names.py +0 -0
  160. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/ema.py +0 -0
  161. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/logging/__init__.py +0 -0
  162. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/logging/logger.py +0 -0
  163. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/runtime_utils.py +0 -0
  164. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/src/dl_core/utils/sweep_tracker.py +0 -0
  165. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/conftest.py +0 -0
  166. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_checkpoint_behavior.py +0 -0
  167. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_checkpoint_utils.py +0 -0
  168. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_dataset_bases.py +0 -0
  169. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_dataset_cli.py +0 -0
  170. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_init_extensions.py +0 -0
  171. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_metric_pipeline.py +0 -0
  172. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_samplers.py +0 -0
  173. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_sweep_runner.py +0 -0
  174. {deep_learning_core-0.0.24 → deep_learning_core-0.0.26}/tests/test_sync_cli.py +0 -0
  175. {deep_learning_core-0.0.24 → 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
@@ -28,6 +28,7 @@
28
28
  <rule>Use f-strings for string formatting.</rule>
29
29
  <rule>Keep functions focused and avoid unnecessary nesting.</rule>
30
30
  <rule>No formatter or linter configuration is defined in <code>pyproject.toml</code>; mirror nearby files instead of re-styling code arbitrarily.</rule>
31
+ <rule>Whenever package behavior, public APIs, CLI behavior, scaffold output, dependencies, or versions change, review <code>README.md</code> and the relevant <code>readme/</code> docs and keep them consistent with the code. If no documentation update is needed, state why.</rule>
31
32
  </development_rules>
32
33
 
33
34
  <architecture_rules>
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deep-learning-core
3
- Version: 0.0.24
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
@@ -53,13 +55,16 @@ Requires-Dist: torch
53
55
  Requires-Dist: torchvision
54
56
  Requires-Dist: tqdm
55
57
  Provides-Extra: azure
56
- Requires-Dist: deep-learning-azure<0.1,>=0.0.17; extra == 'azure'
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
- Requires-Dist: deep-learning-mlflow<0.1,>=0.0.10; extra == 'mlflow'
65
+ Requires-Dist: deep-learning-mlflow<0.1,>=0.0.11; extra == 'mlflow'
61
66
  Provides-Extra: wandb
62
- Requires-Dist: deep-learning-wandb<0.1,>=0.0.11; extra == 'wandb'
67
+ Requires-Dist: deep-learning-wandb<0.1,>=0.0.12; extra == 'wandb'
63
68
  Description-Content-Type: text/markdown
64
69
 
65
70
  # deep-learning-core
@@ -71,28 +76,38 @@ 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
- ## What's New?
75
-
76
- - `dl-init` is now the primary scaffold command
77
- - `dl-core list` makes built-in and local registry discovery easier
78
- - `dl-core add` defaults to plain base classes unless `--base` is given
79
- - `dl-analyze` is the primary sweep-analysis CLI
80
- - `dl-analyze` now supports explicit ranking metrics and rank methods
81
- - `dl-analyze` now persists `analysis_cache.json` next to `sweep_tracking.json`
82
- - `dl-analyze` now writes versioned reports under `analysis/vN.md`
83
- - `dl-sync --sweep ... --artifacts` now syncs tracked remote artifacts into the
84
- local repository when the active backend supports it
85
- - EMA checkpoints now include a drop-in `ema_models_state_dict` alongside the
86
- normal training weights and EMA resume metadata
87
- - `dl-run --validate-only` now performs a real preflight by resolving the
88
- configured components without starting training
89
- - `dl-inspect-dataset` now summarizes split sizes and one collated batch from
90
- the current config
91
- - `dl-smoke` now checks one dataset batch and one model forward pass from a
92
- config file
93
- - local artifacts now use:
94
- - `artifacts/runs/<run_name>/...`
95
- - `artifacts/sweeps/<sweep_name>/<run_name>/...`
79
+ Current release: `deep-learning-core==0.0.26`.
80
+
81
+ Compatible companion package floors:
82
+
83
+ - `deep-learning-azure>=0.0.18,<0.1`
84
+ - `deep-learning-mlflow>=0.0.11,<0.1`
85
+ - `deep-learning-wandb>=0.0.12,<0.1`
86
+
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
96
111
 
97
112
  ## Install
98
113
 
@@ -202,7 +217,9 @@ that repository, run `uv sync`, then run:
202
217
  uv run dl-run --config configs/base.yaml --validate-only
203
218
  uv run dl-inspect-dataset --config configs/base.yaml
204
219
  uv run dl-smoke --config configs/base.yaml
205
- 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
206
223
  uv run dl-sweep experiments/lr_sweep.yaml --preview
207
224
  uv run dl-sweep experiments/lr_sweep.yaml --only "*seed_2025*"
208
225
  uv run dl-sweep experiments/lr_sweep.yaml
@@ -241,10 +258,12 @@ Then:
241
258
  - `scripts/temporary/test_model.py`
242
259
  - `experiments/lr_sweep.yaml`
243
260
  - `AGENTS.md`
261
+ - `CLAUDE.md`
244
262
  2. implement the generated dataset wrapper under `src/datasets/my_exp.py`
245
263
  3. adjust `configs/base.yaml` so it points at the dataset/model/trainer you want
246
- and set the root-level reproducibility defaults you need (`seed` and
247
- `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.
248
267
  4. smoke-check the generated helpers:
249
268
 
250
269
  ```bash
@@ -258,7 +277,9 @@ uv run python scripts/temporary/test_model.py
258
277
  uv run dl-run --config configs/base.yaml --validate-only
259
278
  uv run dl-inspect-dataset --config configs/base.yaml
260
279
  uv run dl-smoke --config configs/base.yaml
261
- 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
262
283
  ```
263
284
 
264
285
  Once that works, move on to:
@@ -318,6 +339,20 @@ That means evaluator-side code can load:
318
339
 
319
340
  without needing to reconstruct EMA state manually.
320
341
 
342
+ ## Post-Training Checkpoint Hooks
343
+
344
+ After a successful training loop, `BaseTrainer.run()` calls
345
+ `select_checkpoint()` and passes the returned path into
346
+ `post_training(checkpoint_path)`. This hook runs before run-analysis artifacts
347
+ are persisted and before tracking callbacks upload finalized artifacts.
348
+
349
+ The default `select_checkpoint()` implementation keeps the existing checkpoint
350
+ callback behavior authoritative: it returns final `best.pth` when present,
351
+ falls back to final `latest.pth`, and returns `None` if no checkpoint exists.
352
+ Override `select_checkpoint()` when a project needs custom single- or
353
+ multi-metric model selection, and override `post_training()` for completed-run
354
+ evaluation, export, or report generation.
355
+
321
356
  If Azure support is installed, `uv run dl-init --with-azure` will
322
357
  also scaffold Azure-ready config placeholders and `azure-config.json`.
323
358
 
@@ -348,6 +383,7 @@ Common local component scaffolds:
348
383
  ```bash
349
384
  uv run dl-core add model MyResNet
350
385
  uv run dl-core add trainer MyTrainer
386
+ uv run dl-core add trainer MyPolicy --base rltrainer
351
387
  uv run dl-core add callback MyMetrics
352
388
  uv run dl-core add metric_manager MyManager
353
389
  uv run dl-core add sampler MySampler
@@ -482,7 +518,7 @@ provided through `dl-azure`.
482
518
 
483
519
  ## Documentation
484
520
 
485
- - [Documentation Index](https://github.com/Blazkowiz47/dl-core/tree/main/readme)
521
+ - [Documentation Index](https://github.com/Blazkowiz47/dl-core/tree/master/readme)
486
522
  - [GitHub Repository](https://github.com/Blazkowiz47/dl-core)
487
523
 
488
524
  ## License
@@ -493,5 +529,7 @@ MIT. See [LICENSE](LICENSE).
493
529
 
494
530
  ```bash
495
531
  uv run --extra dev pytest
532
+ uv run --extra dev ruff check src tests
496
533
  uv run python -m compileall src/dl_core
534
+ uv build --no-sources
497
535
  ```
@@ -7,28 +7,38 @@ 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
- ## What's New?
11
-
12
- - `dl-init` is now the primary scaffold command
13
- - `dl-core list` makes built-in and local registry discovery easier
14
- - `dl-core add` defaults to plain base classes unless `--base` is given
15
- - `dl-analyze` is the primary sweep-analysis CLI
16
- - `dl-analyze` now supports explicit ranking metrics and rank methods
17
- - `dl-analyze` now persists `analysis_cache.json` next to `sweep_tracking.json`
18
- - `dl-analyze` now writes versioned reports under `analysis/vN.md`
19
- - `dl-sync --sweep ... --artifacts` now syncs tracked remote artifacts into the
20
- local repository when the active backend supports it
21
- - EMA checkpoints now include a drop-in `ema_models_state_dict` alongside the
22
- normal training weights and EMA resume metadata
23
- - `dl-run --validate-only` now performs a real preflight by resolving the
24
- configured components without starting training
25
- - `dl-inspect-dataset` now summarizes split sizes and one collated batch from
26
- the current config
27
- - `dl-smoke` now checks one dataset batch and one model forward pass from a
28
- config file
29
- - local artifacts now use:
30
- - `artifacts/runs/<run_name>/...`
31
- - `artifacts/sweeps/<sweep_name>/<run_name>/...`
10
+ Current release: `deep-learning-core==0.0.26`.
11
+
12
+ Compatible companion package floors:
13
+
14
+ - `deep-learning-azure>=0.0.18,<0.1`
15
+ - `deep-learning-mlflow>=0.0.11,<0.1`
16
+ - `deep-learning-wandb>=0.0.12,<0.1`
17
+
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
32
42
 
33
43
  ## Install
34
44
 
@@ -138,7 +148,9 @@ that repository, run `uv sync`, then run:
138
148
  uv run dl-run --config configs/base.yaml --validate-only
139
149
  uv run dl-inspect-dataset --config configs/base.yaml
140
150
  uv run dl-smoke --config configs/base.yaml
141
- 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
142
154
  uv run dl-sweep experiments/lr_sweep.yaml --preview
143
155
  uv run dl-sweep experiments/lr_sweep.yaml --only "*seed_2025*"
144
156
  uv run dl-sweep experiments/lr_sweep.yaml
@@ -177,10 +189,12 @@ Then:
177
189
  - `scripts/temporary/test_model.py`
178
190
  - `experiments/lr_sweep.yaml`
179
191
  - `AGENTS.md`
192
+ - `CLAUDE.md`
180
193
  2. implement the generated dataset wrapper under `src/datasets/my_exp.py`
181
194
  3. adjust `configs/base.yaml` so it points at the dataset/model/trainer you want
182
- and set the root-level reproducibility defaults you need (`seed` and
183
- `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.
184
198
  4. smoke-check the generated helpers:
185
199
 
186
200
  ```bash
@@ -194,7 +208,9 @@ uv run python scripts/temporary/test_model.py
194
208
  uv run dl-run --config configs/base.yaml --validate-only
195
209
  uv run dl-inspect-dataset --config configs/base.yaml
196
210
  uv run dl-smoke --config configs/base.yaml
197
- 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
198
214
  ```
199
215
 
200
216
  Once that works, move on to:
@@ -254,6 +270,20 @@ That means evaluator-side code can load:
254
270
 
255
271
  without needing to reconstruct EMA state manually.
256
272
 
273
+ ## Post-Training Checkpoint Hooks
274
+
275
+ After a successful training loop, `BaseTrainer.run()` calls
276
+ `select_checkpoint()` and passes the returned path into
277
+ `post_training(checkpoint_path)`. This hook runs before run-analysis artifacts
278
+ are persisted and before tracking callbacks upload finalized artifacts.
279
+
280
+ The default `select_checkpoint()` implementation keeps the existing checkpoint
281
+ callback behavior authoritative: it returns final `best.pth` when present,
282
+ falls back to final `latest.pth`, and returns `None` if no checkpoint exists.
283
+ Override `select_checkpoint()` when a project needs custom single- or
284
+ multi-metric model selection, and override `post_training()` for completed-run
285
+ evaluation, export, or report generation.
286
+
257
287
  If Azure support is installed, `uv run dl-init --with-azure` will
258
288
  also scaffold Azure-ready config placeholders and `azure-config.json`.
259
289
 
@@ -284,6 +314,7 @@ Common local component scaffolds:
284
314
  ```bash
285
315
  uv run dl-core add model MyResNet
286
316
  uv run dl-core add trainer MyTrainer
317
+ uv run dl-core add trainer MyPolicy --base rltrainer
287
318
  uv run dl-core add callback MyMetrics
288
319
  uv run dl-core add metric_manager MyManager
289
320
  uv run dl-core add sampler MySampler
@@ -418,7 +449,7 @@ provided through `dl-azure`.
418
449
 
419
450
  ## Documentation
420
451
 
421
- - [Documentation Index](https://github.com/Blazkowiz47/dl-core/tree/main/readme)
452
+ - [Documentation Index](https://github.com/Blazkowiz47/dl-core/tree/master/readme)
422
453
  - [GitHub Repository](https://github.com/Blazkowiz47/dl-core)
423
454
 
424
455
  ## License
@@ -429,5 +460,7 @@ MIT. See [LICENSE](LICENSE).
429
460
 
430
461
  ```bash
431
462
  uv run --extra dev pytest
463
+ uv run --extra dev ruff check src tests
432
464
  uv run python -m compileall src/dl_core
465
+ uv build --no-sources
433
466
  ```
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "deep-learning-core"
7
- version = "0.0.24"
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",
@@ -49,21 +51,24 @@ dependencies = [
49
51
 
50
52
  [project.optional-dependencies]
51
53
  azure = [
52
- "deep-learning-azure>=0.0.17,<0.1",
54
+ "deep-learning-azure>=0.0.18,<0.1",
53
55
  ]
54
56
  mlflow = [
55
- "deep-learning-mlflow>=0.0.10,<0.1",
57
+ "deep-learning-mlflow>=0.0.11,<0.1",
56
58
  ]
57
59
  wandb = [
58
- "deep-learning-wandb>=0.0.11,<0.1",
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,6 +4,8 @@ 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.26`.
8
+
7
9
  ## Companion Packages
8
10
 
9
11
  - [`dl-azure`](https://github.com/Blazkowiz47/dl-azure): Azure execution and
@@ -41,6 +43,7 @@ mechanics.
41
43
  - [Sweep System](./technical/3_sweep_system.md)
42
44
  - [Local Component Loading](./technical/4_local_component_loading.md)
43
45
  - [Testing](./technical/5_testing.md)
46
+ - [Reinforcement Learning](./technical/6_reinforcement_learning.md)
44
47
 
45
48
  ## Common Tasks
46
49
 
@@ -65,11 +68,15 @@ uv run dl-init --root-dir .
65
68
  ### Run a local training job
66
69
 
67
70
  ```bash
68
- 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
69
75
  ```
70
76
 
71
77
  Generated `configs/base.yaml` files include root-level `seed` and
72
- `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.
73
80
 
74
81
  ### Smoke-check generated dataset and model helpers
75
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
@@ -125,6 +125,13 @@ trainer:
125
125
  That wrapper extends `dl_core.trainers.standard_trainer.StandardTrainer`,
126
126
  which builds on the epoch-based `dl_core.core.EpochTrainer`.
127
127
 
128
+ After successful training, `BaseTrainer.run()` calls `select_checkpoint()` and
129
+ passes that path to `post_training(checkpoint_path)`. The default selector
130
+ returns final `best.pth` when the checkpoint callback created it, falls back to
131
+ final `latest.pth`, and otherwise returns `None`. Override `select_checkpoint()`
132
+ for custom single- or multi-metric model selection, and override
133
+ `post_training()` for completed-run evaluation or export work.
134
+
128
135
  ## Reproducibility
129
136
 
130
137
  Generated base configs expose reproducibility at the root level:
@@ -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