torchdeltaflow 0.2.1__tar.gz → 0.2.3.dev21__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 (160) hide show
  1. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/.github/workflows/ci.yml +25 -25
  2. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/.github/workflows/docs.yml +43 -43
  3. torchdeltaflow-0.2.3.dev21/.github/workflows/publish.yml +78 -0
  4. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/.gitignore +83 -82
  5. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/CHANGELOG.md +94 -58
  6. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/CITATION.cff +11 -11
  7. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/CODE_OF_CONDUCT.md +28 -28
  8. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/CONTRIBUTING.md +26 -26
  9. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/LICENSE +21 -21
  10. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/MANIFEST.in +4 -4
  11. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/PKG-INFO +519 -438
  12. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/README.md +442 -362
  13. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/benchmarks/README.md +7 -7
  14. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/__init__.py +43 -40
  15. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/core/__init__.py +24 -18
  16. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/core/base.py +8 -8
  17. torchdeltaflow-0.2.3.dev21/deltaflow/core/base_coupling.py +22 -0
  18. torchdeltaflow-0.2.3.dev21/deltaflow/core/base_equilibrium_field.py +31 -0
  19. torchdeltaflow-0.2.3.dev21/deltaflow/core/base_equilibrium_interpolant.py +41 -0
  20. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/core/base_interpolant.py +26 -26
  21. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/core/base_loss.py +19 -19
  22. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/core/base_solver.py +76 -76
  23. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/core/base_velocity_field.py +20 -20
  24. torchdeltaflow-0.2.3.dev21/deltaflow/datasets/__init__.py +17 -0
  25. torchdeltaflow-0.2.3.dev21/deltaflow/datasets/radiograph.py +250 -0
  26. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/interpolants/__init__.py +19 -13
  27. torchdeltaflow-0.2.3.dev21/deltaflow/interpolants/base.py +7 -0
  28. torchdeltaflow-0.2.3.dev21/deltaflow/interpolants/equilibrium.py +121 -0
  29. torchdeltaflow-0.2.3.dev21/deltaflow/interpolants/linear.py +49 -0
  30. torchdeltaflow-0.2.3.dev21/deltaflow/interpolants/ot.py +84 -0
  31. torchdeltaflow-0.2.3.dev21/deltaflow/interpolants/schrodinger_bridge.py +135 -0
  32. torchdeltaflow-0.2.3.dev21/deltaflow/interpolants/variance_preserving.py +69 -0
  33. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/inverse/__init__.py +36 -36
  34. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/inverse/likelihood.py +100 -86
  35. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/inverse/operators.py +94 -93
  36. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/inverse/tweedie.py +102 -91
  37. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/losses/__init__.py +13 -11
  38. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/losses/conditional_flow_matching.py +86 -74
  39. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/losses/delta_alignment.py +162 -139
  40. torchdeltaflow-0.2.3.dev21/deltaflow/losses/equilibrium_matching.py +97 -0
  41. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/losses/flow_matching.py +7 -7
  42. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/models/__init__.py +13 -13
  43. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/models/backbone.py +110 -110
  44. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/models/ema.py +28 -28
  45. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/models/projector.py +96 -96
  46. torchdeltaflow-0.2.3.dev21/deltaflow/samplers/__init__.py +15 -0
  47. torchdeltaflow-0.2.3.dev21/deltaflow/samplers/euler.py +8 -0
  48. torchdeltaflow-0.2.3.dev21/deltaflow/solvers/__init__.py +19 -0
  49. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/solvers/euler.py +69 -61
  50. torchdeltaflow-0.2.3.dev21/deltaflow/solvers/gradient_descent.py +129 -0
  51. torchdeltaflow-0.2.3.dev21/deltaflow/solvers/heun.py +41 -0
  52. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/solvers/posterior_solver.py +130 -104
  53. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/trainer/__init__.py +18 -18
  54. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/trainer/coupling.py +50 -57
  55. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/trainer/data.py +104 -104
  56. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/trainer/loop.py +269 -269
  57. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/utils/__init__.py +25 -23
  58. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/deltaflow/utils/numerical.py +66 -66
  59. torchdeltaflow-0.2.3.dev21/deltaflow/utils/ot.py +52 -0
  60. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/core.md +3 -3
  61. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/datasets.md +3 -3
  62. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/index.md +18 -18
  63. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/interpolants.md +3 -3
  64. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/inverse.md +3 -3
  65. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/losses.md +3 -3
  66. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/models.md +3 -3
  67. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/samplers.md +3 -3
  68. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/solvers.md +3 -3
  69. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/trainer.md +3 -3
  70. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/api/utils.md +3 -3
  71. torchdeltaflow-0.2.3.dev21/docs/assets/algorithm-comparison/comparison.gif +0 -0
  72. torchdeltaflow-0.2.3.dev21/docs/assets/algorithm-comparison/comparison.png +0 -0
  73. torchdeltaflow-0.2.3.dev21/docs/assets/algorithm-comparison/trajectories_comparison.png +0 -0
  74. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/css/extra.css +139 -139
  75. torchdeltaflow-0.2.3.dev21/docs/assets/equilibrium-matching/energy_landscape.png +0 -0
  76. torchdeltaflow-0.2.3.dev21/docs/assets/equilibrium-matching/eqm_sampling.gif +0 -0
  77. torchdeltaflow-0.2.3.dev21/docs/assets/equilibrium-matching/gd_snapshots.png +0 -0
  78. torchdeltaflow-0.2.3.dev21/docs/assets/equilibrium-matching/gd_trajectories.png +0 -0
  79. torchdeltaflow-0.2.3.dev21/docs/assets/guidance-alignment/features.png +0 -0
  80. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/js/mathjax.js +19 -19
  81. torchdeltaflow-0.2.3.dev21/docs/assets/landmark-detection/landmark_detection.png +0 -0
  82. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/logo.svg +77 -77
  83. torchdeltaflow-0.2.3.dev21/docs/assets/schrodinger-bridge/bridge_paths.gif +0 -0
  84. torchdeltaflow-0.2.3.dev21/docs/assets/schrodinger-bridge/bridge_paths.png +0 -0
  85. torchdeltaflow-0.2.3.dev21/docs/assets/schrodinger-bridge/sb_flow.gif +0 -0
  86. torchdeltaflow-0.2.3.dev21/docs/assets/schrodinger-bridge/sb_snapshots.png +0 -0
  87. torchdeltaflow-0.2.3.dev21/docs/assets/schrodinger-bridge/sb_trajectories.png +0 -0
  88. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/concepts/architecture.md +75 -75
  89. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/contributing.md +43 -43
  90. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/examples.md +483 -289
  91. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/getting-started/installation.md +50 -46
  92. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/getting-started/quickstart.md +53 -53
  93. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/guides/delta-alignment.md +54 -54
  94. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/guides/flow-matching.md +71 -62
  95. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/guides/inverse-problems.md +66 -66
  96. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/guides/training.md +55 -54
  97. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/index.md +126 -84
  98. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/examples/00-foundations/01-linear-interpolant/main.py +34 -34
  99. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/examples/10-sampling/01-euler-flow/main.py +60 -60
  100. torchdeltaflow-0.2.3.dev21/examples/10-sampling/02-equilibrium-matching/main.py +72 -0
  101. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/examples/20-training/01-flow-matching/main.py +47 -47
  102. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/examples/20-training/02-delta-alignment/main.py +51 -51
  103. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/examples/30-inverse/01-posterior/main.py +146 -146
  104. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/examples/90-showcase/01-landmark-viz/main.py +253 -253
  105. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/examples/90-showcase/02-sampling-flow-viz/main.py +363 -363
  106. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/examples/90-showcase/03-minibatch-ot-viz/main.py +137 -137
  107. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/examples/90-showcase/04-inverse-posterior-viz/main.py +175 -175
  108. torchdeltaflow-0.2.3.dev21/examples/90-showcase/05-schrodinger-bridge-viz/main.py +379 -0
  109. torchdeltaflow-0.2.3.dev21/examples/90-showcase/06-algorithm-comparison/main.py +254 -0
  110. torchdeltaflow-0.2.3.dev21/examples/90-showcase/07-landmark-detection/main.py +477 -0
  111. torchdeltaflow-0.2.3.dev21/examples/90-showcase/08-guidance-alignment-pretraining/main.py +377 -0
  112. torchdeltaflow-0.2.3.dev21/examples/90-showcase/09-equilibrium-matching-viz/main.py +371 -0
  113. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/examples/90-showcase/README.md +7 -7
  114. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/mkdocs.yml +133 -133
  115. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/overrides/main.html +39 -39
  116. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/pyproject.toml +119 -110
  117. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/requirements-docs.txt +3 -3
  118. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/requirements.txt +4 -4
  119. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/setup.cfg +4 -4
  120. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/conftest.py +18 -18
  121. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/test_coupling.py +100 -58
  122. torchdeltaflow-0.2.3.dev21/tests/test_equilibrium.py +219 -0
  123. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/test_interpolants.py +28 -28
  124. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/test_interpolants_new.py +108 -62
  125. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/test_inverse.py +94 -94
  126. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/test_losses.py +31 -31
  127. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/test_models.py +38 -38
  128. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/test_samplers.py +26 -26
  129. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/test_solvers.py +91 -91
  130. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/test_trainer.py +65 -65
  131. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/torchdeltaflow.egg-info/PKG-INFO +519 -438
  132. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/torchdeltaflow.egg-info/SOURCES.txt +30 -0
  133. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/torchdeltaflow.egg-info/requires.txt +1 -0
  134. torchdeltaflow-0.2.3.dev21/torchdeltaflow.egg-info/scm_file_list.json +143 -0
  135. torchdeltaflow-0.2.3.dev21/torchdeltaflow.egg-info/scm_version.json +8 -0
  136. torchdeltaflow-0.2.1/deltaflow/datasets/__init__.py +0 -10
  137. torchdeltaflow-0.2.1/deltaflow/datasets/radiograph.py +0 -97
  138. torchdeltaflow-0.2.1/deltaflow/interpolants/base.py +0 -7
  139. torchdeltaflow-0.2.1/deltaflow/interpolants/linear.py +0 -32
  140. torchdeltaflow-0.2.1/deltaflow/interpolants/ot.py +0 -90
  141. torchdeltaflow-0.2.1/deltaflow/interpolants/variance_preserving.py +0 -40
  142. torchdeltaflow-0.2.1/deltaflow/samplers/__init__.py +0 -7
  143. torchdeltaflow-0.2.1/deltaflow/samplers/euler.py +0 -8
  144. torchdeltaflow-0.2.1/deltaflow/solvers/__init__.py +0 -11
  145. torchdeltaflow-0.2.1/deltaflow/solvers/heun.py +0 -34
  146. torchdeltaflow-0.2.1/torchdeltaflow.egg-info/scm_file_list.json +0 -113
  147. torchdeltaflow-0.2.1/torchdeltaflow.egg-info/scm_version.json +0 -8
  148. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/favicon.ico +0 -0
  149. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/favicon.png +0 -0
  150. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/inverse-posterior/inverse_posterior.gif +0 -0
  151. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/inverse-posterior/inverse_posterior.png +0 -0
  152. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/minibatch-ot/minibatch_ot.gif +0 -0
  153. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/minibatch-ot/minibatch_ot.png +0 -0
  154. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/sampling-flow/flow.gif +0 -0
  155. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/sampling-flow/snapshots.png +0 -0
  156. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/sampling-flow/trajectories.png +0 -0
  157. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/docs/assets/sampling-flow/velocity_field.png +0 -0
  158. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/tests/__init__.py +0 -0
  159. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/torchdeltaflow.egg-info/dependency_links.txt +0 -0
  160. {torchdeltaflow-0.2.1 → torchdeltaflow-0.2.3.dev21}/torchdeltaflow.egg-info/top_level.txt +0 -0
@@ -1,25 +1,25 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [main]
6
- pull_request:
7
- branches: [main]
8
-
9
- jobs:
10
- test:
11
- runs-on: ubuntu-latest
12
- strategy:
13
- matrix:
14
- python-version: ["3.10", "3.11", "3.12"]
15
- steps:
16
- - uses: actions/checkout@v4
17
- - uses: actions/setup-python@v5
18
- with:
19
- python-version: ${{ matrix.python-version }}
20
- - name: Install
21
- run: |
22
- python -m pip install --upgrade pip
23
- pip install -e ".[dev]"
24
- - name: Test
25
- run: pytest --cov=deltaflow
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.10", "3.11", "3.12"]
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: actions/setup-python@v5
18
+ with:
19
+ python-version: ${{ matrix.python-version }}
20
+ - name: Install
21
+ run: |
22
+ python -m pip install --upgrade pip
23
+ pip install -e ".[dev]"
24
+ - name: Test
25
+ run: pytest --cov=deltaflow
@@ -1,43 +1,43 @@
1
- name: docs
2
-
3
- on:
4
- push:
5
- branches: [main]
6
- workflow_dispatch:
7
-
8
- permissions:
9
- contents: read
10
- pages: write
11
- id-token: write
12
-
13
- concurrency:
14
- group: pages
15
- cancel-in-progress: false
16
-
17
- jobs:
18
- build:
19
- runs-on: ubuntu-latest
20
- steps:
21
- - uses: actions/checkout@v4
22
- - uses: actions/setup-python@v5
23
- with:
24
- python-version: "3.12"
25
- - name: Install
26
- run: |
27
- python -m pip install --upgrade pip
28
- pip install -e ".[docs]"
29
- - name: Build site
30
- run: mkdocs build --strict
31
- - uses: actions/upload-pages-artifact@v3
32
- with:
33
- path: site
34
-
35
- deploy:
36
- needs: build
37
- runs-on: ubuntu-latest
38
- environment:
39
- name: github-pages
40
- url: ${{ steps.deployment.outputs.page_url }}
41
- steps:
42
- - id: deployment
43
- uses: actions/deploy-pages@v4
1
+ name: docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+ pages: write
11
+ id-token: write
12
+
13
+ concurrency:
14
+ group: pages
15
+ cancel-in-progress: false
16
+
17
+ jobs:
18
+ build:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: actions/setup-python@v5
23
+ with:
24
+ python-version: "3.12"
25
+ - name: Install
26
+ run: |
27
+ python -m pip install --upgrade pip
28
+ pip install -e ".[docs]"
29
+ - name: Build site
30
+ run: mkdocs build --strict
31
+ - uses: actions/upload-pages-artifact@v3
32
+ with:
33
+ path: site
34
+
35
+ deploy:
36
+ needs: build
37
+ runs-on: ubuntu-latest
38
+ environment:
39
+ name: github-pages
40
+ url: ${{ steps.deployment.outputs.page_url }}
41
+ steps:
42
+ - id: deployment
43
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,78 @@
1
+ name: publish
2
+
3
+ # Publishes torchdeltaflow to PyPI in two cases:
4
+ #
5
+ # 1. A version tag (e.g. v0.2.2) is pushed -> a stable release. The version is
6
+ # derived from the tag by setuptools_scm, so the tag is the single source
7
+ # of truth. To cut a release, run:
8
+ #
9
+ # git tag v0.2.2
10
+ # git push origin v0.2.2
11
+ #
12
+ # 2. A pull request is merged into main -> a dev pre-release. setuptools_scm
13
+ # derives a clean PEP 440 version from the commit distance to the last tag
14
+ # (e.g. "0.2.3.dev4"), which is unique per merge. "skip-existing" below
15
+ # guards against the rare case where the same version was already uploaded.
16
+ #
17
+ # Authentication uses a PyPI API token stored as the repository secret
18
+ # PYPI_API_TOKEN. Create the token at https://pypi.org/manage/account/token/
19
+ # (scope it to the torchdeltaflow project), then add it under
20
+ # Settings > Secrets and variables > Actions as PYPI_API_TOKEN.
21
+
22
+ on:
23
+ push:
24
+ tags:
25
+ - "v*"
26
+ pull_request:
27
+ branches: [main]
28
+ types: [closed]
29
+
30
+ permissions:
31
+ contents: read
32
+
33
+ jobs:
34
+ build:
35
+ # Run for pushed version tags, or when a PR is actually merged (not just
36
+ # closed). Plain "closed" without merge must not publish.
37
+ if: github.event_name == 'push' || github.event.pull_request.merged == true
38
+ runs-on: ubuntu-latest
39
+ steps:
40
+ - uses: actions/checkout@v4
41
+ with:
42
+ # setuptools_scm needs the full history and tags to derive the version.
43
+ fetch-depth: 0
44
+ fetch-tags: true
45
+ - uses: actions/setup-python@v5
46
+ with:
47
+ python-version: "3.12"
48
+ - name: Build sdist and wheel
49
+ run: |
50
+ python -m pip install --upgrade pip build
51
+ python -m build
52
+ - name: Check distributions
53
+ run: |
54
+ python -m pip install --upgrade twine
55
+ python -m twine check dist/*
56
+ - uses: actions/upload-artifact@v4
57
+ with:
58
+ name: dist
59
+ path: dist/
60
+
61
+ publish:
62
+ needs: build
63
+ runs-on: ubuntu-latest
64
+ environment:
65
+ name: pypi
66
+ url: https://pypi.org/project/torchdeltaflow/
67
+ steps:
68
+ - uses: actions/download-artifact@v4
69
+ with:
70
+ name: dist
71
+ path: dist/
72
+ - name: Publish to PyPI
73
+ uses: pypa/gh-action-pypi-publish@release/v1
74
+ with:
75
+ password: ${{ secrets.PYPI_API_TOKEN }}
76
+ # Merge builds may reproduce an existing dev version if no new commits
77
+ # changed the distance to the last tag. Skip rather than fail.
78
+ skip-existing: true
@@ -1,82 +1,83 @@
1
- # --- Python ---
2
- __pycache__/
3
- *.py[cod]
4
- *.pyo
5
- *.pyd
6
- *$py.class
7
- .Python
8
-
9
- # --- Build / packaging ---
10
- build/
11
- dist/
12
- wheels/
13
- *.egg-info/
14
- *.egg
15
- .eggs/
16
- pip-wheel-metadata/
17
- MANIFEST
18
-
19
- # setuptools_scm writes deltaflow/_version.py; keep it out of git
20
- deltaflow/_version.py
21
-
22
- # --- Virtual environments ---
23
- venv/
24
- .venv/
25
- env/
26
- .env
27
- .env.*
28
-
29
- # --- Testing / coverage ---
30
- .pytest_cache/
31
- .coverage
32
- .coverage.*
33
- htmlcov/
34
- coverage.xml
35
- .tox/
36
- .nox/
37
- .hypothesis/
38
-
39
- # --- Type checkers / linters ---
40
- .mypy_cache/
41
- .pyright/
42
- .ruff_cache/
43
- .pytype/
44
-
45
- # --- Docs ---
46
- site/
47
- docs/_build/
48
-
49
- # --- Jupyter ---
50
- .ipynb_checkpoints/
51
-
52
- # --- Training artifacts (created by deltaflow.trainer + examples) ---
53
- checkpoints/
54
- outputs/
55
- runs/
56
- wandb/
57
- logs/
58
- *.pt
59
- *.pth
60
- *.ckpt
61
- *.safetensors
62
-
63
- # --- Data ---
64
- data/
65
- datasets/local/
66
- *.h5
67
- *.hdf5
68
- *.npy
69
- *.npz
70
-
71
- # --- Local agent instructions (not shared) ---
72
- .github/copilot-instructions.md
73
-
74
- # --- OS / editor ---
75
- .DS_Store
76
- Thumbs.db
77
- Desktop.ini
78
- *.swp
79
- *.swo
80
- .idea/
81
- .vscode/
82
- *.log
1
+ # --- Python ---
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.pyo
5
+ *.pyd
6
+ *$py.class
7
+ .Python
8
+
9
+ # --- Build / packaging ---
10
+ build/
11
+ dist/
12
+ wheels/
13
+ *.egg-info/
14
+ *.egg
15
+ .eggs/
16
+ pip-wheel-metadata/
17
+ MANIFEST
18
+
19
+ # setuptools_scm writes deltaflow/_version.py; keep it out of git
20
+ deltaflow/_version.py
21
+
22
+ # --- Virtual environments ---
23
+ venv/
24
+ .venv/
25
+ env/
26
+ .env
27
+ .env.*
28
+
29
+ # --- Testing / coverage ---
30
+ .pytest_cache/
31
+ .coverage
32
+ .coverage.*
33
+ htmlcov/
34
+ coverage.xml
35
+ .tox/
36
+ .nox/
37
+ .hypothesis/
38
+
39
+ # --- Type checkers / linters ---
40
+ .mypy_cache/
41
+ .pyright/
42
+ .ruff_cache/
43
+ .pytype/
44
+
45
+ # --- Docs ---
46
+ site/
47
+ docs/_build/
48
+
49
+ # --- Jupyter ---
50
+ .ipynb_checkpoints/
51
+
52
+ # --- Training artifacts (created by deltaflow.trainer + examples) ---
53
+ checkpoints/
54
+ outputs/
55
+ runs/
56
+ wandb/
57
+ logs/
58
+ *.pt
59
+ *.pth
60
+ *.ckpt
61
+ *.safetensors
62
+
63
+ # --- Data ---
64
+ data/
65
+ datasets/local/
66
+ *.h5
67
+ *.hdf5
68
+ *.npy
69
+ *.npz
70
+
71
+ # --- Local agent instructions (not shared) ---
72
+ .github/copilot-instructions.md
73
+
74
+ # --- OS / editor ---
75
+ .DS_Store
76
+ Thumbs.db
77
+ Desktop.ini
78
+ *.swp
79
+ *.swo
80
+ .idea/
81
+ .vscode/
82
+ *.log
83
+ SUMMARY.md
@@ -1,58 +1,94 @@
1
- # Changelog
2
-
3
- All notable changes to this project are documented here.
4
- The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
-
6
- ## [Unreleased]
7
-
8
- ## [0.2.1]
9
-
10
- ### Fixed
11
-
12
- - README images used relative paths (`docs/assets/...`), which don't resolve
13
- on PyPI's standalone README renderer. Switched to absolute
14
- `raw.githubusercontent.com` URLs so images load correctly on PyPI.
15
-
16
- ## [0.2.0]
17
-
18
- ### Added
19
-
20
- - `deltaflow.interpolants.OTInterpolant`: the linear path applied after a
21
- mini-batch optimal-transport re-ordering of `x0`.
22
- - `deltaflow.trainer` couplings: `IndependentCoupling` and `OTCoupling`
23
- (Hungarian assignment, greedy fallback) plus `ConditionalFlowMatchingLoss`.
24
- - `deltaflow.solvers`: `EulerSolver`, `HeunSolver` (second-order integration),
25
- and `PosteriorSolver`, which wraps a base solver with a per-step
26
- measurement-likelihood gradient.
27
- - `deltaflow.inverse`: measurement operators (`MaskOperator`, `BlurOperator`,
28
- `DownsampleOperator`, `IdentityOperator`), Tweedie estimators
29
- (`LinearTweedie`, `VPTweedie`), and `GaussianLikelihood` with an optional
30
- decoder pullback for the latent-space case.
31
- - `deltaflow.interpolants.VariancePreservingInterpolant` (trigonometric
32
- diffusion path).
33
- - Showcase examples: `01-landmark-viz`, `02-sampling-flow-viz`,
34
- `03-minibatch-ot-viz`, `04-inverse-posterior-viz`, reproducing the README
35
- figures and animations.
36
- - MkDocs Material documentation site (`docs/`), published via
37
- `.github/workflows/docs.yml`.
38
- - Animated logo, favicon, and algorithm figures under `docs/assets/`.
39
-
40
- ### Changed
41
-
42
- - Rewrote `README.md` in a component-table style with paper references,
43
- visuals, and per-method usage snippets (flow matching, OT couplings,
44
- variance-preserving path, delta alignment, posterior sampling).
45
- - Fixed paper attributions and introduced a `Likelihood` protocol in
46
- `deltaflow.inverse`.
47
-
48
- ## [0.1.0]
49
-
50
- ### Added
51
-
52
- - Initial scaffold: `core`, `interpolants` (`LinearInterpolant`), `samplers`
53
- (`FlowSampler`), `losses` (`FlowMatchingLoss`, `DeltaAlignmentLoss`),
54
- `models` (`MultiScaleProjector`, `EMA`), `datasets` (generic radiograph
55
- wrappers).
56
- - Tiered examples (`00-foundations`, `10-sampling`, `20-training`,
57
- `90-showcase`).
58
- - Unit tests for interpolants, samplers, losses, and models.
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented here.
4
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
+
6
+ ## [Unreleased]
7
+
8
+ ### Changed
9
+
10
+ - `scipy` is now a core dependency (previously gated behind the `ot`
11
+ extra), so `OTInterpolant`/`OTCoupling` use the exact Hungarian-algorithm
12
+ mini-batch OT assignment by default. The `ot` extra is kept as a
13
+ backwards-compatible no-op, and the greedy nearest-neighbour matcher
14
+ remains as a defensive fallback if `scipy` is ever missing.
15
+
16
+ ## [0.2.2]
17
+
18
+ ### Added
19
+
20
+ - API-reference docstrings now include the underlying mathematics in
21
+ LaTeX (rendered via MathJax/arithmatex): probability paths and target
22
+ velocities for the interpolants (`Linear`, `VariancePreserving`, `OT`,
23
+ `SchrodingerBridge`), the Euler/Heun update rules, the DPS posterior-solver
24
+ step, the conditional-flow-matching and delta-alignment objectives, the
25
+ `LinearTweedie`/`VPTweedie` inversions, and the Gaussian likelihood.
26
+
27
+ - `deltaflow.interpolants.SchrodingerBridgeInterpolant`: an entropic
28
+ Schrödinger-bridge probability path (a Brownian bridge with tunable
29
+ diffusivity `sigma` around the straight-line mean). `sigma=0` recovers
30
+ `LinearInterpolant` exactly. Intended to be paired with
31
+ `deltaflow.trainer.OTCoupling` for a simulation-free approximation of the
32
+ dynamic Schrödinger bridge.
33
+ - Showcase example `05-schrodinger-bridge-viz`: visualises the bridge path
34
+ at increasing `sigma` (`bridge_paths.png` static, `bridge_paths.gif`
35
+ animated), then trains a velocity field against it (with `OTCoupling`)
36
+ and inspects the resulting sampler on a two-moons target.
37
+ - Showcase example `06-algorithm-comparison`: trains the same model on the
38
+ same target under all four interpolant/coupling configurations (linear
39
+ independent, OT coupling, variance-preserving, Schrödinger bridge) and
40
+ compares final samples, sampled trajectories, and an animated side-by-side
41
+ sampling GIF. A README section ("Comparing the paths") links these
42
+ figures, alongside the Schrödinger-bridge sampling animation.
43
+
44
+ ## [0.2.1]
45
+
46
+ ### Fixed
47
+
48
+ - README images used relative paths (`docs/assets/...`), which don't resolve
49
+ on PyPI's standalone README renderer. Switched to absolute
50
+ `raw.githubusercontent.com` URLs so images load correctly on PyPI.
51
+
52
+ ## [0.2.0]
53
+
54
+ ### Added
55
+
56
+ - `deltaflow.interpolants.OTInterpolant`: the linear path applied after a
57
+ mini-batch optimal-transport re-ordering of `x0`.
58
+ - `deltaflow.trainer` couplings: `IndependentCoupling` and `OTCoupling`
59
+ (Hungarian assignment, greedy fallback) plus `ConditionalFlowMatchingLoss`.
60
+ - `deltaflow.solvers`: `EulerSolver`, `HeunSolver` (second-order integration),
61
+ and `PosteriorSolver`, which wraps a base solver with a per-step
62
+ measurement-likelihood gradient.
63
+ - `deltaflow.inverse`: measurement operators (`MaskOperator`, `BlurOperator`,
64
+ `DownsampleOperator`, `IdentityOperator`), Tweedie estimators
65
+ (`LinearTweedie`, `VPTweedie`), and `GaussianLikelihood` with an optional
66
+ decoder pullback for the latent-space case.
67
+ - `deltaflow.interpolants.VariancePreservingInterpolant` (trigonometric
68
+ diffusion path).
69
+ - Showcase examples: `01-landmark-viz`, `02-sampling-flow-viz`,
70
+ `03-minibatch-ot-viz`, `04-inverse-posterior-viz`, reproducing the README
71
+ figures and animations.
72
+ - MkDocs Material documentation site (`docs/`), published via
73
+ `.github/workflows/docs.yml`.
74
+ - Animated logo, favicon, and algorithm figures under `docs/assets/`.
75
+
76
+ ### Changed
77
+
78
+ - Rewrote `README.md` in a component-table style with paper references,
79
+ visuals, and per-method usage snippets (flow matching, OT couplings,
80
+ variance-preserving path, delta alignment, posterior sampling).
81
+ - Fixed paper attributions and introduced a `Likelihood` protocol in
82
+ `deltaflow.inverse`.
83
+
84
+ ## [0.1.0]
85
+
86
+ ### Added
87
+
88
+ - Initial scaffold: `core`, `interpolants` (`LinearInterpolant`), `samplers`
89
+ (`FlowSampler`), `losses` (`FlowMatchingLoss`, `DeltaAlignmentLoss`),
90
+ `models` (`MultiScaleProjector`, `EMA`), `datasets` (generic radiograph
91
+ wrappers).
92
+ - Tiered examples (`00-foundations`, `10-sampling`, `20-training`,
93
+ `90-showcase`).
94
+ - Unit tests for interpolants, samplers, losses, and models.
@@ -1,11 +1,11 @@
1
- cff-version: 1.2.0
2
- message: "If you use this software, please cite it as below."
3
- title: "torchDeltaFlow: Flow Matching, Optimal-Transport Coupling, and Posterior Sampling for Inverse Problems in PyTorch"
4
- authors:
5
- - family-names: "Limbunlom"
6
- given-names: "Phrugsa"
7
- email: "phrugsa.lim@gmail.com"
8
- date-released: 2026-07-22
9
- url: "https://github.com/phrugsa-limbunlom/deltaflow"
10
- repository-code: "https://github.com/phrugsa-limbunlom/deltaflow"
11
- license: MIT
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite it as below."
3
+ title: "torchDeltaFlow: Flow Matching, Optimal-Transport Coupling, and Posterior Sampling for Inverse Problems in PyTorch"
4
+ authors:
5
+ - family-names: "Limbunlom"
6
+ given-names: "Phrugsa"
7
+ email: "phrugsa.lim@gmail.com"
8
+ date-released: 2026-07-22
9
+ url: "https://github.com/phrugsa-limbunlom/deltaflow"
10
+ repository-code: "https://github.com/phrugsa-limbunlom/deltaflow"
11
+ license: MIT
@@ -1,28 +1,28 @@
1
- # Contributor Covenant Code of Conduct
2
-
3
- ## Our Pledge
4
-
5
- We as members, contributors, and leaders pledge to make participation in our
6
- community a harassment-free experience for everyone, regardless of age, body
7
- size, visible or invisible disability, ethnicity, sex characteristics,
8
- gender identity and expression, level of experience, education,
9
- socio-economic status, nationality, personal appearance, race, religion, or
10
- sexual identity and orientation.
11
-
12
- ## Our Standards
13
-
14
- Examples of behavior that contributes to a positive environment include
15
- being respectful of differing opinions, giving and gracefully accepting
16
- constructive feedback, and focusing on what is best for the community.
17
-
18
- Examples of unacceptable behavior include harassment, insulting or
19
- derogatory comments, and other conduct which could reasonably be considered
20
- inappropriate in a professional setting.
21
-
22
- ## Enforcement
23
-
24
- Instances of abusive, harassing, or otherwise unacceptable behavior may be
25
- reported to the project maintainers. All complaints will be reviewed and
26
- investigated promptly and fairly.
27
-
28
- This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.1.
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics,
8
+ gender identity and expression, level of experience, education,
9
+ socio-economic status, nationality, personal appearance, race, religion, or
10
+ sexual identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to a positive environment include
15
+ being respectful of differing opinions, giving and gracefully accepting
16
+ constructive feedback, and focusing on what is best for the community.
17
+
18
+ Examples of unacceptable behavior include harassment, insulting or
19
+ derogatory comments, and other conduct which could reasonably be considered
20
+ inappropriate in a professional setting.
21
+
22
+ ## Enforcement
23
+
24
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
25
+ reported to the project maintainers. All complaints will be reviewed and
26
+ investigated promptly and fairly.
27
+
28
+ This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.1.
@@ -1,26 +1,26 @@
1
- # Contributing
2
-
3
- Contributions are welcome. This project is small and research-oriented, so
4
- please open an issue to discuss non-trivial changes before sending a PR.
5
-
6
- ## Setup
7
-
8
- ```bash
9
- git clone https://github.com/yourname/deltaflow
10
- cd deltaflow
11
- pip install -e ".[dev]"
12
- ```
13
-
14
- ## Before opening a PR
15
-
16
- ```bash
17
- black deltaflow tests examples
18
- isort deltaflow tests examples
19
- pytest
20
- ```
21
-
22
- ## Adding an example
23
-
24
- Examples live under `examples/<tier>/<NN-name>/main.py`, where `<tier>` is
25
- one of `00-foundations`, `10-sampling`, `20-training`, `90-showcase`. Each
26
- example should run standalone in well under a minute on CPU.
1
+ # Contributing
2
+
3
+ Contributions are welcome. This project is small and research-oriented, so
4
+ please open an issue to discuss non-trivial changes before sending a PR.
5
+
6
+ ## Setup
7
+
8
+ ```bash
9
+ git clone https://github.com/yourname/deltaflow
10
+ cd deltaflow
11
+ pip install -e ".[dev]"
12
+ ```
13
+
14
+ ## Before opening a PR
15
+
16
+ ```bash
17
+ black deltaflow tests examples
18
+ isort deltaflow tests examples
19
+ pytest
20
+ ```
21
+
22
+ ## Adding an example
23
+
24
+ Examples live under `examples/<tier>/<NN-name>/main.py`, where `<tier>` is
25
+ one of `00-foundations`, `10-sampling`, `20-training`, `90-showcase`. Each
26
+ example should run standalone in well under a minute on CPU.