dolphin 0.22.0__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 (193) hide show
  1. dolphin-0.22.0/.dockerignore +8 -0
  2. dolphin-0.22.0/.flake8 +3 -0
  3. dolphin-0.22.0/.git-blame-ignore-revs +2 -0
  4. dolphin-0.22.0/.github/ISSUE_TEMPLATE/bug_report.yml +60 -0
  5. dolphin-0.22.0/.github/ISSUE_TEMPLATE/feature_request.yml +48 -0
  6. dolphin-0.22.0/.github/dependabot.yml +10 -0
  7. dolphin-0.22.0/.github/release.yml +5 -0
  8. dolphin-0.22.0/.github/workflows/benchmark.yml +85 -0
  9. dolphin-0.22.0/.github/workflows/cd.yml +37 -0
  10. dolphin-0.22.0/.github/workflows/test-build-push.yml +118 -0
  11. dolphin-0.22.0/.gitignore +171 -0
  12. dolphin-0.22.0/.pre-commit-config.yaml +41 -0
  13. dolphin-0.22.0/.readthedocs.yaml +24 -0
  14. dolphin-0.22.0/CHANGELOG.md +580 -0
  15. dolphin-0.22.0/CONTRIBUTING.md +93 -0
  16. dolphin-0.22.0/LICENSE +236 -0
  17. dolphin-0.22.0/MANIFEST.in +3 -0
  18. dolphin-0.22.0/PKG-INFO +149 -0
  19. dolphin-0.22.0/README.md +98 -0
  20. dolphin-0.22.0/asv.conf.json +45 -0
  21. dolphin-0.22.0/benchmarks/README_CI.md +28 -0
  22. dolphin-0.22.0/benchmarks/__init__.py +0 -0
  23. dolphin-0.22.0/benchmarks/benchmarks.py +217 -0
  24. dolphin-0.22.0/conda-env.yml +22 -0
  25. dolphin-0.22.0/docker/Dockerfile +84 -0
  26. dolphin-0.22.0/docker/build-docker-image.sh +90 -0
  27. dolphin-0.22.0/docker/create-lockfile.sh +96 -0
  28. dolphin-0.22.0/docker/specfile.txt +197 -0
  29. dolphin-0.22.0/docs/background-theory.md +0 -0
  30. dolphin-0.22.0/docs/developer-setup.md +2 -0
  31. dolphin-0.22.0/docs/gen_ref_pages.py +32 -0
  32. dolphin-0.22.0/docs/getting-started.md +5 -0
  33. dolphin-0.22.0/docs/gpu-setup.md +38 -0
  34. dolphin-0.22.0/docs/how-to-guides.md +0 -0
  35. dolphin-0.22.0/docs/img/apple-touch-icon.png +0 -0
  36. dolphin-0.22.0/docs/img/favicon-16x16.png +0 -0
  37. dolphin-0.22.0/docs/img/favicon-32x32.png +0 -0
  38. dolphin-0.22.0/docs/img/favicon.ico +0 -0
  39. dolphin-0.22.0/docs/img/site.webmanifest +1 -0
  40. dolphin-0.22.0/docs/index.md +12 -0
  41. dolphin-0.22.0/docs/javascripts/mathjax.js +18 -0
  42. dolphin-0.22.0/docs/mdx_bib.py +266 -0
  43. dolphin-0.22.0/docs/notebooks/simulate-demo.ipynb +470 -0
  44. dolphin-0.22.0/docs/notebooks/walkthrough-basic.ipynb +994 -0
  45. dolphin-0.22.0/docs/references.bib +166 -0
  46. dolphin-0.22.0/docs/requirements.txt +11 -0
  47. dolphin-0.22.0/docs/tutorials.md +21 -0
  48. dolphin-0.22.0/mkdocs.yml +68 -0
  49. dolphin-0.22.0/pyproject.toml +128 -0
  50. dolphin-0.22.0/requirements.txt +13 -0
  51. dolphin-0.22.0/scripts/create_glrt_cutoffs.py +109 -0
  52. dolphin-0.22.0/scripts/plot_shps.py +211 -0
  53. dolphin-0.22.0/scripts/test_run_bench.sh +14 -0
  54. dolphin-0.22.0/setup.cfg +4 -0
  55. dolphin-0.22.0/src/dolphin/__init__.py +9 -0
  56. dolphin-0.22.0/src/dolphin/__main__.py +9 -0
  57. dolphin-0.22.0/src/dolphin/_cli_timeseries.py +144 -0
  58. dolphin-0.22.0/src/dolphin/_cli_unwrap.py +150 -0
  59. dolphin-0.22.0/src/dolphin/_decorators.py +148 -0
  60. dolphin-0.22.0/src/dolphin/_log.py +137 -0
  61. dolphin-0.22.0/src/dolphin/_overviews.py +174 -0
  62. dolphin-0.22.0/src/dolphin/_show_versions.py +130 -0
  63. dolphin-0.22.0/src/dolphin/_types.py +136 -0
  64. dolphin-0.22.0/src/dolphin/_version.py +16 -0
  65. dolphin-0.22.0/src/dolphin/atmosphere/__init__.py +33 -0
  66. dolphin-0.22.0/src/dolphin/atmosphere/_netcdf.py +521 -0
  67. dolphin-0.22.0/src/dolphin/atmosphere/_utils.py +241 -0
  68. dolphin-0.22.0/src/dolphin/atmosphere/ionosphere.py +416 -0
  69. dolphin-0.22.0/src/dolphin/atmosphere/model_levels.py +1247 -0
  70. dolphin-0.22.0/src/dolphin/atmosphere/troposphere.py +505 -0
  71. dolphin-0.22.0/src/dolphin/atmosphere/weather_model.py +867 -0
  72. dolphin-0.22.0/src/dolphin/baseline.py +157 -0
  73. dolphin-0.22.0/src/dolphin/cli.py +34 -0
  74. dolphin-0.22.0/src/dolphin/filtering.py +194 -0
  75. dolphin-0.22.0/src/dolphin/goldstein.py +99 -0
  76. dolphin-0.22.0/src/dolphin/interferogram.py +780 -0
  77. dolphin-0.22.0/src/dolphin/interpolation.py +214 -0
  78. dolphin-0.22.0/src/dolphin/io/__init__.py +8 -0
  79. dolphin-0.22.0/src/dolphin/io/_background.py +264 -0
  80. dolphin-0.22.0/src/dolphin/io/_blocks.py +349 -0
  81. dolphin-0.22.0/src/dolphin/io/_core.py +779 -0
  82. dolphin-0.22.0/src/dolphin/io/_paths.py +197 -0
  83. dolphin-0.22.0/src/dolphin/io/_process.py +58 -0
  84. dolphin-0.22.0/src/dolphin/io/_readers.py +1078 -0
  85. dolphin-0.22.0/src/dolphin/io/_utils.py +264 -0
  86. dolphin-0.22.0/src/dolphin/io/_writers.py +479 -0
  87. dolphin-0.22.0/src/dolphin/log-config.json +45 -0
  88. dolphin-0.22.0/src/dolphin/masking.py +147 -0
  89. dolphin-0.22.0/src/dolphin/phase_link/__init__.py +9 -0
  90. dolphin-0.22.0/src/dolphin/phase_link/_compress.py +45 -0
  91. dolphin-0.22.0/src/dolphin/phase_link/_core.jl +19 -0
  92. dolphin-0.22.0/src/dolphin/phase_link/_core.py +507 -0
  93. dolphin-0.22.0/src/dolphin/phase_link/_eigenvalues.py +205 -0
  94. dolphin-0.22.0/src/dolphin/phase_link/_ps_filling.py +153 -0
  95. dolphin-0.22.0/src/dolphin/phase_link/covariance.py +195 -0
  96. dolphin-0.22.0/src/dolphin/phase_link/metrics.py +95 -0
  97. dolphin-0.22.0/src/dolphin/phase_link/simulate.py +433 -0
  98. dolphin-0.22.0/src/dolphin/ps.py +489 -0
  99. dolphin-0.22.0/src/dolphin/py.typed +0 -0
  100. dolphin-0.22.0/src/dolphin/shp/__init__.py +117 -0
  101. dolphin-0.22.0/src/dolphin/shp/_common.py +79 -0
  102. dolphin-0.22.0/src/dolphin/shp/_glrt.py +206 -0
  103. dolphin-0.22.0/src/dolphin/shp/_ks.py +243 -0
  104. dolphin-0.22.0/src/dolphin/shp/glrt_cutoffs.csv +1201 -0
  105. dolphin-0.22.0/src/dolphin/similarity.py +325 -0
  106. dolphin-0.22.0/src/dolphin/stack.py +466 -0
  107. dolphin-0.22.0/src/dolphin/stitching.py +631 -0
  108. dolphin-0.22.0/src/dolphin/timeseries.py +926 -0
  109. dolphin-0.22.0/src/dolphin/unwrap/__init__.py +5 -0
  110. dolphin-0.22.0/src/dolphin/unwrap/_constants.py +11 -0
  111. dolphin-0.22.0/src/dolphin/unwrap/_isce3.py +153 -0
  112. dolphin-0.22.0/src/dolphin/unwrap/_post_process.py +127 -0
  113. dolphin-0.22.0/src/dolphin/unwrap/_snaphu_py.py +227 -0
  114. dolphin-0.22.0/src/dolphin/unwrap/_tophu.py +189 -0
  115. dolphin-0.22.0/src/dolphin/unwrap/_unwrap.py +441 -0
  116. dolphin-0.22.0/src/dolphin/unwrap/_unwrap_3d.py +108 -0
  117. dolphin-0.22.0/src/dolphin/unwrap/_utils.py +162 -0
  118. dolphin-0.22.0/src/dolphin/utils.py +685 -0
  119. dolphin-0.22.0/src/dolphin/workflows/__init__.py +4 -0
  120. dolphin-0.22.0/src/dolphin/workflows/_cli_config.py +407 -0
  121. dolphin-0.22.0/src/dolphin/workflows/_cli_run.py +70 -0
  122. dolphin-0.22.0/src/dolphin/workflows/_utils.py +32 -0
  123. dolphin-0.22.0/src/dolphin/workflows/config/__init__.py +9 -0
  124. dolphin-0.22.0/src/dolphin/workflows/config/_common.py +436 -0
  125. dolphin-0.22.0/src/dolphin/workflows/config/_displacement.py +237 -0
  126. dolphin-0.22.0/src/dolphin/workflows/config/_enums.py +33 -0
  127. dolphin-0.22.0/src/dolphin/workflows/config/_ps.py +77 -0
  128. dolphin-0.22.0/src/dolphin/workflows/config/_unwrap_options.py +265 -0
  129. dolphin-0.22.0/src/dolphin/workflows/config/_unwrapping.py +74 -0
  130. dolphin-0.22.0/src/dolphin/workflows/config/_yaml_model.py +220 -0
  131. dolphin-0.22.0/src/dolphin/workflows/displacement.py +358 -0
  132. dolphin-0.22.0/src/dolphin/workflows/ps.py +120 -0
  133. dolphin-0.22.0/src/dolphin/workflows/sequential.py +183 -0
  134. dolphin-0.22.0/src/dolphin/workflows/single.py +422 -0
  135. dolphin-0.22.0/src/dolphin/workflows/stitching_bursts.py +168 -0
  136. dolphin-0.22.0/src/dolphin/workflows/unwrapping.py +118 -0
  137. dolphin-0.22.0/src/dolphin/workflows/wrapped_phase.py +386 -0
  138. dolphin-0.22.0/src/dolphin.egg-info/PKG-INFO +149 -0
  139. dolphin-0.22.0/src/dolphin.egg-info/SOURCES.txt +191 -0
  140. dolphin-0.22.0/src/dolphin.egg-info/dependency_links.txt +1 -0
  141. dolphin-0.22.0/src/dolphin.egg-info/entry_points.txt +2 -0
  142. dolphin-0.22.0/src/dolphin.egg-info/requires.txt +39 -0
  143. dolphin-0.22.0/src/dolphin.egg-info/top_level.txt +1 -0
  144. dolphin-0.22.0/tests/conftest.py +514 -0
  145. dolphin-0.22.0/tests/data/baseline_cslcs/OPERA_L2_CSLC-S1_T042-088905-IW1_20231021T140757Z_20231023T003801Z_S1A_VV_v1.0.h5 +0 -0
  146. dolphin-0.22.0/tests/data/baseline_cslcs/OPERA_L2_CSLC-S1_T042-088905-IW2_20231009T140758Z_20231010T204936Z_S1A_VV_v1.0.h5 +0 -0
  147. dolphin-0.22.0/tests/data/baseline_cslcs/copy_hdf5_subset.py +38 -0
  148. dolphin-0.22.0/tests/data/idaho_slc_file_list.txt.zip +0 -0
  149. dolphin-0.22.0/tests/data/ionosphere_files/jplg0010.22i +11417 -0
  150. dolphin-0.22.0/tests/data/ionosphere_files/jplg0020.22i +11417 -0
  151. dolphin-0.22.0/tests/data/ionosphere_files/jplg0030.22i +11417 -0
  152. dolphin-0.22.0/tests/data/ps-fix/failing_data_idxs.npz +0 -0
  153. dolphin-0.22.0/tests/data/tec_files.txt +3 -0
  154. dolphin-0.22.0/tests/data/troposphere_files/ERA5_N17_N22_W159_W147_20220101_14.grb +0 -0
  155. dolphin-0.22.0/tests/data/troposphere_files/ERA5_N17_N22_W159_W147_20220102_14.grb +0 -0
  156. dolphin-0.22.0/tests/data/troposphere_files/ERA5_N17_N22_W159_W147_20220103_14.grb +0 -0
  157. dolphin-0.22.0/tests/data/weather_model_files.txt +3 -0
  158. dolphin-0.22.0/tests/make_netcdf.py +157 -0
  159. dolphin-0.22.0/tests/requirements.txt +13 -0
  160. dolphin-0.22.0/tests/test_baseline.py +23 -0
  161. dolphin-0.22.0/tests/test_cli.py +47 -0
  162. dolphin-0.22.0/tests/test_decorators.py +96 -0
  163. dolphin-0.22.0/tests/test_filtering.py +18 -0
  164. dolphin-0.22.0/tests/test_interferogram.py +370 -0
  165. dolphin-0.22.0/tests/test_io_background.py +5 -0
  166. dolphin-0.22.0/tests/test_io_blocks.py +244 -0
  167. dolphin-0.22.0/tests/test_io_core.py +285 -0
  168. dolphin-0.22.0/tests/test_io_paths.py +119 -0
  169. dolphin-0.22.0/tests/test_io_readers.py +542 -0
  170. dolphin-0.22.0/tests/test_io_writers.py +152 -0
  171. dolphin-0.22.0/tests/test_overviews.py +55 -0
  172. dolphin-0.22.0/tests/test_phase_link_compress.py +43 -0
  173. dolphin-0.22.0/tests/test_phase_link_core.py +183 -0
  174. dolphin-0.22.0/tests/test_phase_link_covariance.py +154 -0
  175. dolphin-0.22.0/tests/test_phase_link_eigs.py +84 -0
  176. dolphin-0.22.0/tests/test_phase_link_metrics.py +56 -0
  177. dolphin-0.22.0/tests/test_phase_link_ps_filling.py +146 -0
  178. dolphin-0.22.0/tests/test_ps.py +169 -0
  179. dolphin-0.22.0/tests/test_show_versions.py +29 -0
  180. dolphin-0.22.0/tests/test_shp.py +264 -0
  181. dolphin-0.22.0/tests/test_similarity.py +97 -0
  182. dolphin-0.22.0/tests/test_stack.py +243 -0
  183. dolphin-0.22.0/tests/test_stitching.py +196 -0
  184. dolphin-0.22.0/tests/test_timeseries.py +229 -0
  185. dolphin-0.22.0/tests/test_unwrap.py +332 -0
  186. dolphin-0.22.0/tests/test_unwrap_utils.py +97 -0
  187. dolphin-0.22.0/tests/test_utils.py +92 -0
  188. dolphin-0.22.0/tests/test_workflows_config.py +420 -0
  189. dolphin-0.22.0/tests/test_workflows_displacement.py +181 -0
  190. dolphin-0.22.0/tests/test_workflows_ps.py +51 -0
  191. dolphin-0.22.0/tests/test_workflows_sequential.py +125 -0
  192. dolphin-0.22.0/tests/test_workflows_single.py +41 -0
  193. dolphin-0.22.0/tests/test_workflows_utils.py +84 -0
@@ -0,0 +1,8 @@
1
+ **/__pycache__/*
2
+ .mypy_cache/*
3
+ .asv
4
+ build/
5
+ data/
6
+ tests/data/*
7
+ dist/
8
+ .nox/
dolphin-0.22.0/.flake8 ADDED
@@ -0,0 +1,3 @@
1
+ [flake8]
2
+ ignore=E203,E722,E402,W502,W503
3
+ max-line-length=90
@@ -0,0 +1,2 @@
1
+ # Added new ruff configuration
2
+ a7d7722b4447a8fbaaa138233864b1668fffd233
@@ -0,0 +1,60 @@
1
+ name: Bug Report
2
+ description: Create a report to help us improve
3
+ title: "[Bug]: "
4
+ labels: ["bug", "needs triage"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ > _Thanks for filing a bug ticket. We appreciate your time and effort. Please answer a few questions._
10
+ - type: dropdown
11
+ id: checked-for-duplicates
12
+ attributes:
13
+ label: Checked for duplicates
14
+ description: Have you checked for duplicate issue tickets?
15
+ multiple: false
16
+ options:
17
+ - "Yes - I've already checked"
18
+ - "No - I haven't checked"
19
+ validations:
20
+ required: yes
21
+ - type: textarea
22
+ id: description
23
+ attributes:
24
+ label: Describe the bug
25
+ description: A clear and concise description of what the bug is. Plain-text snippets preferred but screenshots welcome.
26
+ placeholder: Tell us what you saw
27
+ value: "When I did [...] action, I noticed [...]"
28
+ validations:
29
+ required: true
30
+ - type: textarea
31
+ id: expected-behavior
32
+ attributes:
33
+ label: What did you expect?
34
+ description: A clear and concise description of what you expect to happen
35
+ placeholder: Tell us what you expected
36
+ value: "I expected [...]"
37
+ validations:
38
+ required: true
39
+ - type: textarea
40
+ id: reproduction
41
+ attributes:
42
+ label: Reproducible steps
43
+ description: "How would we reproduce this bug? Please walk us through it step by step. Plain-text snippets preferred but screenshots welcome."
44
+ value: |
45
+ 1.
46
+ 2.
47
+ 3.
48
+ ...
49
+ If you have a `dolphin_config.yaml` that you used, you can attach that as well.
50
+ render: bash
51
+ - type: textarea
52
+ id: environment
53
+ attributes:
54
+ label: Environment
55
+ description: "What is your environment?"
56
+ value: |
57
+ Please paste the output of the following:
58
+ `python -c "import dolphin; print(dolphin.show_versions())"`
59
+ ...
60
+ render: bash
@@ -0,0 +1,48 @@
1
+ name: New Feature
2
+ description: Submit a new feature request
3
+ title: "[New Feature]: "
4
+ labels: ["enhancement", "needs triage"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ > _Thanks for filing a new feature request. We appreciate your time and effort. Please answer a few questions._
10
+ - type: dropdown
11
+ id: checked-for-duplicates
12
+ attributes:
13
+ label: Checked for duplicates
14
+ description: Have you checked for duplicate issue tickets?
15
+ multiple: false
16
+ options:
17
+ - "Yes - I've already checked"
18
+ - "No - I haven't checked"
19
+ validations:
20
+ required: yes
21
+ - type: dropdown
22
+ id: checked-alternatives
23
+ attributes:
24
+ label: Alternatives considered
25
+ description: Have you considered alternative solutions to your feature request?
26
+ options:
27
+ - "Yes - and alternatives don't suffice"
28
+ - "No - I haven't considered"
29
+ validations:
30
+ required: yes
31
+ - type: textarea
32
+ id: related-problems
33
+ attributes:
34
+ label: Related problems
35
+ description: Is your feature request related to any problems? Please help us understand if so, including linking to any other issue tickets.
36
+ placeholder: Tell us the problems
37
+ value: "I'm frustrated when [...] happens as documented in issue-XYZ"
38
+ validations:
39
+ required: false
40
+ - type: textarea
41
+ id: description
42
+ attributes:
43
+ label: Describe the feature request
44
+ description: A clear and concise description of your request.
45
+ placeholder: Tell us what you want
46
+ value: "I need or want [...]"
47
+ validations:
48
+ required: true
@@ -0,0 +1,10 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "daily"
7
+ groups:
8
+ actions:
9
+ patterns:
10
+ - "*"
@@ -0,0 +1,5 @@
1
+ changelog:
2
+ exclude:
3
+ authors:
4
+ - dependabot
5
+ - pre-commit-ci
@@ -0,0 +1,85 @@
1
+ # Based off of scikit-image .github/workflows/benchmarks.yml
2
+ # and tqdm .github/workflows/check.yml#L54C1-L54C1
3
+ name: Benchmark
4
+
5
+ on:
6
+ pull_request:
7
+ types: [labeled]
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ benchmark:
12
+ if: contains(github.event.label.name, 'benchmark') || github.event_name == 'workflow_dispatch'
13
+ name: Linux
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ # We need the full repo to avoid this issue
18
+ # https://github.com/actions/checkout/issues/23
19
+ - uses: actions/checkout@v4
20
+ with:
21
+ fetch-depth: 0
22
+
23
+ - name: Setup environment
24
+ uses: mamba-org/setup-micromamba@v1
25
+ with:
26
+ environment-file: requirements.txt
27
+ environment-name: dolphin
28
+ condarc: |
29
+ channels:
30
+ - conda-forge
31
+ - nodefaults
32
+ create-args: >-
33
+ python=3.11
34
+ asv>=0.6
35
+
36
+ - name: Record machine info
37
+ shell: bash -l {0}
38
+ run: |
39
+ asv machine --yes
40
+ # https://github.com/tqdm/tqdm/blob/4c956c20b83be4312460fc0c4812eeb3fef5e7df/.github/workflows/check.yml#L26
41
+ - name: Restore previous results
42
+ uses: actions/cache@v4
43
+ with:
44
+ path: .asv
45
+ key: asv-${{ runner.os }}
46
+ restore-keys: |
47
+ asv-
48
+
49
+ - name: Run benchmarks
50
+ shell: bash -l {0}
51
+ id: benchmark
52
+ env:
53
+ OPENBLAS_NUM_THREADS: 1
54
+ MKL_NUM_THREADS: 1
55
+ OMP_NUM_THREADS: 1
56
+ run: |
57
+ set -x
58
+
59
+ echo "Baseline: ${{ github.event.pull_request.base.sha }} (${{ github.event.pull_request.base.label }})"
60
+ echo "Contender: ${GITHUB_SHA} (${{ github.event.pull_request.head.label }})"
61
+
62
+ # Run benchmarks for current commit against base
63
+ ASV_OPTIONS="--split --show-stderr"
64
+ asv continuous $ASV_OPTIONS ${{ github.event.pull_request.base.sha }} ${GITHUB_SHA} \
65
+ | sed "/Traceback \|failed$/ s/^/::error::/" \
66
+ | tee benchmarks.log
67
+
68
+ # Report and export results for subsequent steps
69
+ if grep "Traceback \|failed" benchmarks.log > /dev/null ; then
70
+ exit 1
71
+ fi
72
+
73
+ - name: Add instructions to artifact
74
+ if: always()
75
+ run: cp benchmarks/README_CI.md benchmarks.log .asv/results/
76
+
77
+ - uses: actions/upload-artifact@v4
78
+ if: always()
79
+ with:
80
+ name: asv-benchmark-results-${{ runner.os }}
81
+ path: .asv/results
82
+
83
+ # For now, we're just uploading the artifact
84
+ # If we want to publish to github pages, may want this:
85
+ # https://github.com/tqdm/tqdm/blob/4c956c20b83be4312460fc0c4812eeb3fef5e7df/.github/workflows/check.yml#L54C1-L54C1
@@ -0,0 +1,37 @@
1
+ # This workflow will build a Python Package and upload to pypi. See:
2
+ # https://docs.pypi.org/trusted-publishers/using-a-publisher/
3
+ # https://github.com/marketplace/actions/pypi-publish
4
+ name: CD
5
+
6
+ on:
7
+ workflow_dispatch:
8
+ release:
9
+ types: [created]
10
+
11
+ jobs:
12
+ pypi-publish:
13
+ name: upload release to PyPI
14
+ runs-on: ubuntu-latest
15
+ environment: release
16
+ permissions:
17
+ id-token: write
18
+ steps:
19
+ # retrieve your distributions here
20
+ - uses: actions/checkout@v4
21
+ with:
22
+ fetch-depth: 0
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: '3.x'
27
+ - name: Install build dependencies and package
28
+ run: |
29
+ python -m pip install --upgrade pip setuptools_scm
30
+ pip install build
31
+ - name: Get version and Build
32
+ run: |
33
+ # Version added upon installing package
34
+ python -m pip install --no-deps .
35
+ python -m build --sdist --wheel
36
+ - name: Publish package distributions to PyPI
37
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,118 @@
1
+ name: Pytest, build docker image, push to GHCR
2
+
3
+ on: [pull_request, push]
4
+
5
+ concurrency:
6
+ group: ${{ github.workflow }}-${{ github.head_ref }}
7
+ cancel-in-progress: true
8
+
9
+ env:
10
+ # https://github.com/pytest-dev/pytest/issues/2042#issuecomment-429289164
11
+ PY_IGNORE_IMPORTMISMATCH: 1
12
+
13
+ jobs:
14
+ pytest:
15
+ strategy:
16
+ matrix:
17
+ os: [ubuntu-latest, macos-14]
18
+ deps:
19
+ - label: Latest
20
+ # we can't specify `tophu` for conda, not available on mac
21
+ spec: >-
22
+ isce3
23
+ dask
24
+
25
+ fail-fast: true
26
+ name: ${{ matrix.os }} • ${{ matrix.deps.label }}
27
+ runs-on: ${{ matrix.os }}
28
+ defaults:
29
+ run:
30
+ shell: bash -l {0}
31
+ steps:
32
+ - name: Checkout
33
+ uses: actions/checkout@v4
34
+ - name: Setup environment
35
+ uses: mamba-org/setup-micromamba@v1
36
+ with:
37
+ environment-file: conda-env.yml
38
+ environment-name: dolphin-env
39
+ generate-run-shell: false
40
+ create-args: ${{ matrix.deps.spec }}
41
+ condarc: |
42
+ channels:
43
+ - conda-forge
44
+ - name: Install
45
+ run: |
46
+ pip install --no-deps "snaphu>=0.4.0" "opera-utils>=0.4.1" git+https://github.com/isce-framework/tophu@main
47
+ pip install --no-deps .
48
+ - name: Install test dependencies
49
+ run: |
50
+ micromamba install -f tests/requirements.txt -c conda-forge
51
+ pip install --no-deps git+https://github.com/isce-framework/tophu@main
52
+ - name: Enable numba boundscheck for better error catching
53
+ run: |
54
+ echo "NUMBA_BOUNDSCHECK=1" >> $GITHUB_ENV
55
+ echo "TQDM_DISABLE=1" >> $GITHUB_ENV
56
+ - name: Test (with numba boundscheck on)
57
+ run: |
58
+ pytest -n0 -vv
59
+ # https://community.codecov.com/t/numba-jitted-methods-are-not-captured-by-codecov/2649
60
+ # - name: Coverage report
61
+ # uses: codecov/codecov-action@v2
62
+
63
+ dockerize: # Based on Mintpy: https://github.com/insarlab/MintPy/blob/5ca554fef324b816f9130feec567e2cf463e41d2/.github/workflows/build-n-publish-to-pypi.yml
64
+ name: Build Docker image and push to GitHub Container Registry
65
+ runs-on: ubuntu-latest
66
+ permissions:
67
+ contents: read
68
+ packages: write
69
+ steps:
70
+ - name: Checkout
71
+ uses: actions/checkout@v4
72
+ with:
73
+ fetch-depth: 0
74
+ - name: Set up Python 3.11
75
+ uses: actions/setup-python@v5
76
+ with:
77
+ python-version: '3.11'
78
+ - name: Set environment variables for docker build
79
+ run: |
80
+ pip install setuptools_scm # Install setuptools_scm to get version number
81
+ # Save version number from CLI
82
+ version=$(python -m setuptools_scm)
83
+ sanitized_version=${version//+/-} # Replace all '+' with '-'
84
+ echo "DOLPHIN_VERSION=${sanitized_version}" >> $GITHUB_ENV
85
+
86
+ - name: Login to GitHub Container Registry
87
+ uses: docker/login-action@v3
88
+ with:
89
+ registry: ghcr.io
90
+ username: ${{ github.actor }}
91
+ password: ${{ secrets.GITHUB_TOKEN }}
92
+
93
+ - name: Build, tag, and push image to Github Container Registry
94
+ uses: docker/build-push-action@v6
95
+ with:
96
+ context: .
97
+ file: ./docker/Dockerfile
98
+ push: ${{ github.event_name != 'pull_request' }}
99
+ tags: |
100
+ ghcr.io/${{ github.repository }}:${{ env.DOLPHIN_VERSION }}
101
+ labels: |
102
+ org.opencontainers.image.created=${{ env.CI_JOB_TIMESTAMP }}
103
+ org.opencontainers.image.version=${{ env.DOLPHIN_VERSION }}
104
+ org.opencontainers.image.revision=${{ github.sha }}
105
+
106
+ - name: Add develop tag
107
+ if: github.ref == 'refs/heads/main'
108
+ uses: akhilerm/tag-push-action@v2.2.0
109
+ with:
110
+ src: ghcr.io/${{ github.repository }}:${{ env.DOLPHIN_VERSION }}
111
+ dst: ghcr.io/${{ github.repository }}:develop
112
+
113
+ - name: Add latest tag
114
+ if: startsWith(github.ref, 'refs/tags/v')
115
+ uses: akhilerm/tag-push-action@v2.2.0
116
+ with:
117
+ src: ghcr.io/${{ github.repository }}:${{ env.DOLPHIN_VERSION }}
118
+ dst: ghcr.io/${{ github.repository }}:latest
@@ -0,0 +1,171 @@
1
+ # setuptools-scm: autogenerated version, see pyproject.toml
2
+ src/dolphin/_version.py
3
+
4
+ docs/reference
5
+
6
+ # airspeed cache directory
7
+ .asv
8
+
9
+ # Testing data dir
10
+ data/
11
+ docs/**/*.h5
12
+
13
+ # MacOS
14
+ .DS_Store
15
+
16
+ # Byte-compiled / optimized / DLL files
17
+ __pycache__/
18
+ *.py[cod]
19
+ *$py.class
20
+
21
+ # C extensions
22
+ *.so
23
+
24
+ # Distribution / packaging
25
+ .Python
26
+ build/
27
+ develop-eggs/
28
+ dist/
29
+ downloads/
30
+ eggs/
31
+ .eggs/
32
+ lib/
33
+ lib64/
34
+ parts/
35
+ sdist/
36
+ var/
37
+ wheels/
38
+ share/python-wheels/
39
+ *.egg-info/
40
+ .installed.cfg
41
+ *.egg
42
+ MANIFEST
43
+
44
+ # PyInstaller
45
+ # Usually these files are written by a python script from a template
46
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
47
+ *.manifest
48
+ *.spec
49
+
50
+ # Installer logs
51
+ pip-log.txt
52
+ pip-delete-this-directory.txt
53
+
54
+ # Unit test / coverage reports
55
+ htmlcov/
56
+ .tox/
57
+ .nox/
58
+ .coverage
59
+ .coverage.*
60
+ .cache
61
+ nosetests.xml
62
+ coverage.xml
63
+ *.cover
64
+ *.py,cover
65
+ .hypothesis/
66
+ .pytest_cache/
67
+ cover/
68
+
69
+ # Translations
70
+ *.mo
71
+ *.pot
72
+
73
+ # Django stuff:
74
+ *.log
75
+ local_settings.py
76
+ db.sqlite3
77
+ db.sqlite3-journal
78
+
79
+ # Flask stuff:
80
+ instance/
81
+ .webassets-cache
82
+
83
+ # Scrapy stuff:
84
+ .scrapy
85
+
86
+ # Sphinx documentation
87
+ docs/_build/
88
+
89
+ # PyBuilder
90
+ .pybuilder/
91
+ target/
92
+
93
+ # Jupyter Notebook
94
+ .ipynb_checkpoints
95
+
96
+ # IPython
97
+ profile_default/
98
+ ipython_config.py
99
+
100
+ # pyenv
101
+ # For a library or package, you might want to ignore these files since the code is
102
+ # intended to run in multiple environments; otherwise, check them in:
103
+ # .python-version
104
+
105
+ # pipenv
106
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
107
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
108
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
109
+ # install all needed dependencies.
110
+ #Pipfile.lock
111
+
112
+ # poetry
113
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
114
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
115
+ # commonly ignored for libraries.
116
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
117
+ #poetry.lock
118
+
119
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
120
+ __pypackages__/
121
+
122
+ # Celery stuff
123
+ celerybeat-schedule
124
+ celerybeat.pid
125
+
126
+ # SageMath parsed files
127
+ *.sage.py
128
+
129
+ # Environments
130
+ .env
131
+ .venv
132
+ env/
133
+ venv/
134
+ ENV/
135
+ env.bak/
136
+ venv.bak/
137
+
138
+ # Spyder project settings
139
+ .spyderproject
140
+ .spyproject
141
+
142
+ # Rope project settings
143
+ .ropeproject
144
+
145
+ # VSCode project settings
146
+ .vscode
147
+
148
+ # mkdocs documentation
149
+ site
150
+ docs/reference
151
+
152
+ # mypy
153
+ .mypy_cache/
154
+ .dmypy.json
155
+ dmypy.json
156
+
157
+ # Pyre type checker
158
+ .pyre/
159
+
160
+ # pytype static type analyzer
161
+ .pytype/
162
+
163
+ # Cython debug symbols
164
+ cython_debug/
165
+
166
+ # PyCharm
167
+ # JetBrains specific template is maintainted in a separate JetBrains.gitignore that can
168
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
169
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
170
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
171
+ #.idea/
@@ -0,0 +1,41 @@
1
+ ci:
2
+ autofix_prs: true
3
+
4
+ repos:
5
+ - repo: https://github.com/pre-commit/pre-commit-hooks
6
+ rev: "v4.6.0"
7
+ hooks:
8
+ # https://github.com/pre-commit/pre-commit-hooks/issues/718
9
+ # - id: check-added-large-files # Fails with git v1.8.3
10
+ - id: check-case-conflict
11
+ - id: check-docstring-first
12
+ - id: check-merge-conflict
13
+ - id: check-yaml
14
+ args: [--allow-multiple-documents]
15
+ - id: debug-statements
16
+ - id: end-of-file-fixer
17
+ - id: file-contents-sorter
18
+ files: (requirements.txt)$
19
+ - id: mixed-line-ending
20
+ - id: trailing-whitespace
21
+
22
+ - repo: https://github.com/psf/black
23
+ rev: "24.4.2"
24
+ hooks:
25
+ - id: black
26
+
27
+ - repo: https://github.com/astral-sh/ruff-pre-commit
28
+ rev: v0.5.2
29
+ hooks:
30
+ - id: ruff
31
+ args: [--fix, --exit-non-zero-on-fix, --show-fixes]
32
+
33
+ - repo: https://github.com/pre-commit/mirrors-mypy
34
+ rev: "v1.10.1"
35
+ hooks:
36
+ - id: mypy
37
+ additional_dependencies:
38
+ - types-pkg_resources
39
+ - types-requests
40
+ - "pydantic>=2.4"
41
+ - types-markdown
@@ -0,0 +1,24 @@
1
+ # .readthedocs.yaml
2
+ # Read the Docs configuration file
3
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
4
+ version: 2
5
+
6
+ mkdocs:
7
+ configuration: mkdocs.yml
8
+
9
+ # Conda is causing "excessive memory usage"
10
+ # https://docs.readthedocs.io/en/stable/guides/conda.html#making-builds-faster-with-mamba
11
+ build:
12
+ os: "ubuntu-20.04"
13
+ tools:
14
+ python: "mambaforge-4.10"
15
+
16
+ conda:
17
+ environment: conda-env.yml
18
+
19
+ python:
20
+ install:
21
+ - method: pip
22
+ path: .
23
+ extra_requirements:
24
+ - docs