SurfaceTopography 0.0.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 (267) hide show
  1. surfacetopography-0.0.0/.check_mufft_capabilities.py +13 -0
  2. surfacetopography-0.0.0/.gitattributes +3 -0
  3. surfacetopography-0.0.0/.github/workflows/flake8.yml +31 -0
  4. surfacetopography-0.0.0/.github/workflows/publish.yml +80 -0
  5. surfacetopography-0.0.0/.github/workflows/test-code-functionality.yml +86 -0
  6. surfacetopography-0.0.0/.github/workflows/test-source-package.yml +43 -0
  7. surfacetopography-0.0.0/.github/workflows/wheels.yml +95 -0
  8. surfacetopography-0.0.0/.gitignore +29 -0
  9. surfacetopography-0.0.0/.pre-commit-config.yaml +11 -0
  10. surfacetopography-0.0.0/AUTHORS +14 -0
  11. surfacetopography-0.0.0/LICENSE.md +19 -0
  12. surfacetopography-0.0.0/MANIFEST.in +4 -0
  13. surfacetopography-0.0.0/PKG-INFO +99 -0
  14. surfacetopography-0.0.0/README.md +41 -0
  15. surfacetopography-0.0.0/SurfaceTopography/CLI/ShowTopography.py +17 -0
  16. surfacetopography-0.0.0/SurfaceTopography/CLI/__init__.py +0 -0
  17. surfacetopography-0.0.0/SurfaceTopography/CLI/meson.build +13 -0
  18. surfacetopography-0.0.0/SurfaceTopography/ChangeLog.md +1075 -0
  19. surfacetopography-0.0.0/SurfaceTopography/Container/Averaging.py +144 -0
  20. surfacetopography-0.0.0/SurfaceTopography/Container/IO/CE.py +324 -0
  21. surfacetopography-0.0.0/SurfaceTopography/Container/IO/Reader.py +129 -0
  22. surfacetopography-0.0.0/SurfaceTopography/Container/IO/ZAG.py +192 -0
  23. surfacetopography-0.0.0/SurfaceTopography/Container/IO/__init__.py +158 -0
  24. surfacetopography-0.0.0/SurfaceTopography/Container/IO/meson.build +13 -0
  25. surfacetopography-0.0.0/SurfaceTopography/Container/Integration.py +210 -0
  26. surfacetopography-0.0.0/SurfaceTopography/Container/ScaleDependentStatistics.py +217 -0
  27. surfacetopography-0.0.0/SurfaceTopography/Container/SurfaceContainer.py +107 -0
  28. surfacetopography-0.0.0/SurfaceTopography/Container/__init__.py +33 -0
  29. surfacetopography-0.0.0/SurfaceTopography/Container/common.py +90 -0
  30. surfacetopography-0.0.0/SurfaceTopography/Container/meson.build +17 -0
  31. surfacetopography-0.0.0/SurfaceTopography/Exceptions.py +130 -0
  32. surfacetopography-0.0.0/SurfaceTopography/FFTTricks.py +245 -0
  33. surfacetopography-0.0.0/SurfaceTopography/Generation.py +324 -0
  34. surfacetopography-0.0.0/SurfaceTopography/Generic/Curvature.py +121 -0
  35. surfacetopography-0.0.0/SurfaceTopography/Generic/Fractional.py +146 -0
  36. surfacetopography-0.0.0/SurfaceTopography/Generic/Moments.py +120 -0
  37. surfacetopography-0.0.0/SurfaceTopography/Generic/ReliabilityCutoff.py +79 -0
  38. surfacetopography-0.0.0/SurfaceTopography/Generic/RobustStatistics.py +169 -0
  39. surfacetopography-0.0.0/SurfaceTopography/Generic/ScaleDependentStatistics.py +181 -0
  40. surfacetopography-0.0.0/SurfaceTopography/Generic/ScanningProbe.py +99 -0
  41. surfacetopography-0.0.0/SurfaceTopography/Generic/Slope.py +107 -0
  42. surfacetopography-0.0.0/SurfaceTopography/Generic/__init__.py +29 -0
  43. surfacetopography-0.0.0/SurfaceTopography/Generic/meson.build +20 -0
  44. surfacetopography-0.0.0/SurfaceTopography/HeightContainer.py +356 -0
  45. surfacetopography-0.0.0/SurfaceTopography/IO/AL3D.py +159 -0
  46. surfacetopography-0.0.0/SurfaceTopography/IO/BCR.py +234 -0
  47. surfacetopography-0.0.0/SurfaceTopography/IO/DATX.py +183 -0
  48. surfacetopography-0.0.0/SurfaceTopography/IO/DI.py +325 -0
  49. surfacetopography-0.0.0/SurfaceTopography/IO/DZI.py +390 -0
  50. surfacetopography-0.0.0/SurfaceTopography/IO/EZD.py +255 -0
  51. surfacetopography-0.0.0/SurfaceTopography/IO/FRT.py +618 -0
  52. surfacetopography-0.0.0/SurfaceTopography/IO/FromFile.py +230 -0
  53. surfacetopography-0.0.0/SurfaceTopography/IO/GWY.py +297 -0
  54. surfacetopography-0.0.0/SurfaceTopography/IO/H5.py +87 -0
  55. surfacetopography-0.0.0/SurfaceTopography/IO/IBW.py +179 -0
  56. surfacetopography-0.0.0/SurfaceTopography/IO/JPK.py +357 -0
  57. surfacetopography-0.0.0/SurfaceTopography/IO/LEXT.py +244 -0
  58. surfacetopography-0.0.0/SurfaceTopography/IO/MI.py +314 -0
  59. surfacetopography-0.0.0/SurfaceTopography/IO/Matlab.py +114 -0
  60. surfacetopography-0.0.0/SurfaceTopography/IO/MetroPro.py +441 -0
  61. surfacetopography-0.0.0/SurfaceTopography/IO/Mitutoyo.py +262 -0
  62. surfacetopography-0.0.0/SurfaceTopography/IO/NC.py +554 -0
  63. surfacetopography-0.0.0/SurfaceTopography/IO/NMM.py +341 -0
  64. surfacetopography-0.0.0/SurfaceTopography/IO/NPY.py +173 -0
  65. surfacetopography-0.0.0/SurfaceTopography/IO/OIR.py +629 -0
  66. surfacetopography-0.0.0/SurfaceTopography/IO/OPD.py +215 -0
  67. surfacetopography-0.0.0/SurfaceTopography/IO/OPDx.py +600 -0
  68. surfacetopography-0.0.0/SurfaceTopography/IO/PLU.py +281 -0
  69. surfacetopography-0.0.0/SurfaceTopography/IO/PLUX.py +215 -0
  70. surfacetopography-0.0.0/SurfaceTopography/IO/PS.py +221 -0
  71. surfacetopography-0.0.0/SurfaceTopography/IO/Reader.py +855 -0
  72. surfacetopography-0.0.0/SurfaceTopography/IO/SUR.py +228 -0
  73. surfacetopography-0.0.0/SurfaceTopography/IO/Text.py +526 -0
  74. surfacetopography-0.0.0/SurfaceTopography/IO/VK.py +357 -0
  75. surfacetopography-0.0.0/SurfaceTopography/IO/WSXM.py +241 -0
  76. surfacetopography-0.0.0/SurfaceTopography/IO/X3P.py +310 -0
  77. surfacetopography-0.0.0/SurfaceTopography/IO/XYZ.py +566 -0
  78. surfacetopography-0.0.0/SurfaceTopography/IO/ZON.py +261 -0
  79. surfacetopography-0.0.0/SurfaceTopography/IO/__init__.py +325 -0
  80. surfacetopography-0.0.0/SurfaceTopography/IO/binary.py +434 -0
  81. surfacetopography-0.0.0/SurfaceTopography/IO/common.py +168 -0
  82. surfacetopography-0.0.0/SurfaceTopography/IO/meson.build +48 -0
  83. surfacetopography-0.0.0/SurfaceTopography/Metadata.py +41 -0
  84. surfacetopography-0.0.0/SurfaceTopography/Models/SelfAffine.py +267 -0
  85. surfacetopography-0.0.0/SurfaceTopography/Models/__init__.py +0 -0
  86. surfacetopography-0.0.0/SurfaceTopography/Models/meson.build +13 -0
  87. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/Autocorrelation.py +207 -0
  88. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/BearingArea.py +151 -0
  89. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/Converters.py +169 -0
  90. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/Derivative.py +123 -0
  91. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/Detrending.py +230 -0
  92. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/Interpolation.py +54 -0
  93. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/PowerSpectrum.py +237 -0
  94. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/ScalarParameters.py +176 -0
  95. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/VariableBandwidth.py +187 -0
  96. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/__init__.py +28 -0
  97. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/common.py +84 -0
  98. surfacetopography-0.0.0/SurfaceTopography/Nonuniform/meson.build +22 -0
  99. surfacetopography-0.0.0/SurfaceTopography/NonuniformLineScan.py +286 -0
  100. surfacetopography-0.0.0/SurfaceTopography/Pipeline.py +91 -0
  101. surfacetopography-0.0.0/SurfaceTopography/ScanningProbe/RigidScan.py +135 -0
  102. surfacetopography-0.0.0/SurfaceTopography/ScanningProbe/__init__.py +25 -0
  103. surfacetopography-0.0.0/SurfaceTopography/ScanningProbe/meson.build +13 -0
  104. surfacetopography-0.0.0/SurfaceTopography/Special.py +298 -0
  105. surfacetopography-0.0.0/SurfaceTopography/Support/Bibliography.py +85 -0
  106. surfacetopography-0.0.0/SurfaceTopography/Support/Deprecation.py +56 -0
  107. surfacetopography-0.0.0/SurfaceTopography/Support/Interpolation.py +30 -0
  108. surfacetopography-0.0.0/SurfaceTopography/Support/JSON.py +125 -0
  109. surfacetopography-0.0.0/SurfaceTopography/Support/Regression.py +464 -0
  110. surfacetopography-0.0.0/SurfaceTopography/Support/UnitConversion.py +247 -0
  111. surfacetopography-0.0.0/SurfaceTopography/Support/__init__.py +71 -0
  112. surfacetopography-0.0.0/SurfaceTopography/Support/meson.build +18 -0
  113. surfacetopography-0.0.0/SurfaceTopography/Uniform/Autocorrelation.py +279 -0
  114. surfacetopography-0.0.0/SurfaceTopography/Uniform/BearingArea.py +213 -0
  115. surfacetopography-0.0.0/SurfaceTopography/Uniform/Converters.py +106 -0
  116. surfacetopography-0.0.0/SurfaceTopography/Uniform/Derivative.py +611 -0
  117. surfacetopography-0.0.0/SurfaceTopography/Uniform/Detrending.py +394 -0
  118. surfacetopography-0.0.0/SurfaceTopography/Uniform/Filtering.py +428 -0
  119. surfacetopography-0.0.0/SurfaceTopography/Uniform/GeometryAnalysis.py +133 -0
  120. surfacetopography-0.0.0/SurfaceTopography/Uniform/Imputation.py +168 -0
  121. surfacetopography-0.0.0/SurfaceTopography/Uniform/Integration.py +200 -0
  122. surfacetopography-0.0.0/SurfaceTopography/Uniform/Interpolation.py +278 -0
  123. surfacetopography-0.0.0/SurfaceTopography/Uniform/PowerSpectrum.py +285 -0
  124. surfacetopography-0.0.0/SurfaceTopography/Uniform/ScalarParameters.py +377 -0
  125. surfacetopography-0.0.0/SurfaceTopography/Uniform/VariableBandwidth.py +363 -0
  126. surfacetopography-0.0.0/SurfaceTopography/Uniform/__init__.py +28 -0
  127. surfacetopography-0.0.0/SurfaceTopography/Uniform/common.py +179 -0
  128. surfacetopography-0.0.0/SurfaceTopography/Uniform/meson.build +26 -0
  129. surfacetopography-0.0.0/SurfaceTopography/UniformLineScanAndTopography.py +819 -0
  130. surfacetopography-0.0.0/SurfaceTopography/Version.py +27 -0
  131. surfacetopography-0.0.0/SurfaceTopography/__init__.py +76 -0
  132. surfacetopography-0.0.0/SurfaceTopography/meson.build +38 -0
  133. surfacetopography-0.0.0/c/autocorrelation.cpp +140 -0
  134. surfacetopography-0.0.0/c/autocorrelation.h +46 -0
  135. surfacetopography-0.0.0/c/bicubic.cpp +589 -0
  136. surfacetopography-0.0.0/c/bicubic.h +133 -0
  137. surfacetopography-0.0.0/c/meson.build +24 -0
  138. surfacetopography-0.0.0/c/module.cpp +87 -0
  139. surfacetopography-0.0.0/c/patchfinder.cpp +1091 -0
  140. surfacetopography-0.0.0/c/patchfinder.h +52 -0
  141. surfacetopography-0.0.0/c/stack.h +301 -0
  142. surfacetopography-0.0.0/c/test_stack.cpp +56 -0
  143. surfacetopography-0.0.0/cpp/bearing_area.cpp +167 -0
  144. surfacetopography-0.0.0/cpp/bearing_area.h +30 -0
  145. surfacetopography-0.0.0/cpp/eigen_helper.h +33 -0
  146. surfacetopography-0.0.0/cpp/meson.build +16 -0
  147. surfacetopography-0.0.0/cpp/module.cpp +66 -0
  148. surfacetopography-0.0.0/cpp/moments.h +211 -0
  149. surfacetopography-0.0.0/docs/Figures/geometry.svg +585 -0
  150. surfacetopography-0.0.0/docs/Figures/geometry_pdf_tex.svg +144 -0
  151. surfacetopography-0.0.0/docs/Makefile +20 -0
  152. surfacetopography-0.0.0/docs/_ext/edit_on_github.py +42 -0
  153. surfacetopography-0.0.0/docs/_templates/sourcelink.html +15 -0
  154. surfacetopography-0.0.0/docs/conf.py +183 -0
  155. surfacetopography-0.0.0/docs/contributing.rst +137 -0
  156. surfacetopography-0.0.0/docs/index.rst +49 -0
  157. surfacetopography-0.0.0/docs/installation.rst +163 -0
  158. surfacetopography-0.0.0/docs/make.bat +36 -0
  159. surfacetopography-0.0.0/docs/testing.rst +23 -0
  160. surfacetopography-0.0.0/docs/usage.rst +181 -0
  161. surfacetopography-0.0.0/env.sh +4 -0
  162. surfacetopography-0.0.0/examples/230207_scalar_parameters_from_PSD.ipynb.html +15034 -0
  163. surfacetopography-0.0.0/examples/bicubic_interpolation.py +107 -0
  164. surfacetopography-0.0.0/examples/files_xy_width_heights.ipynb +404 -0
  165. surfacetopography-0.0.0/examples/fourier_synthesis.ipynb +195 -0
  166. surfacetopography-0.0.0/examples/howto_plot_2D_data.ipynb +526 -0
  167. surfacetopography-0.0.0/examples/large_memory_tests/bicubic.py +52 -0
  168. surfacetopography-0.0.0/helpers/HurstEstimationNumerics.py +208 -0
  169. surfacetopography-0.0.0/helpers/HurstEstimationSymbolics.py +56 -0
  170. surfacetopography-0.0.0/helpers/PowerSpectrumSymbolics.py +75 -0
  171. surfacetopography-0.0.0/helpers/SurfaceExample.asc +1039 -0
  172. surfacetopography-0.0.0/helpers/SurfaceExampleUnfiltered.asc +1039 -0
  173. surfacetopography-0.0.0/helpers/WindowTest.py +154 -0
  174. surfacetopography-0.0.0/maintenance/copyright.py +101 -0
  175. surfacetopography-0.0.0/maintenance/replace_header.py +39 -0
  176. surfacetopography-0.0.0/maintenance/update_license_headers.sh +7 -0
  177. surfacetopography-0.0.0/meson.build +22 -0
  178. surfacetopography-0.0.0/pyproject.toml +79 -0
  179. surfacetopography-0.0.0/pytest.ini +3 -0
  180. surfacetopography-0.0.0/renovate.json +6 -0
  181. surfacetopography-0.0.0/run-tests.py +10 -0
  182. surfacetopography-0.0.0/setup.cfg +4 -0
  183. surfacetopography-0.0.0/singularity/SurfaceTopography_serial.def +62 -0
  184. surfacetopography-0.0.0/subprojects/eigen.wrap +13 -0
  185. surfacetopography-0.0.0/subprojects/pybind11.wrap +13 -0
  186. surfacetopography-0.0.0/test/IO/__init__.py +28 -0
  187. surfacetopography-0.0.0/test/IO/test_al3d.py +72 -0
  188. surfacetopography-0.0.0/test/IO/test_api.py +36 -0
  189. surfacetopography-0.0.0/test/IO/test_asc.py +162 -0
  190. surfacetopography-0.0.0/test/IO/test_bcr.py +76 -0
  191. surfacetopography-0.0.0/test/IO/test_container.py +212 -0
  192. surfacetopography-0.0.0/test/IO/test_csv.py +73 -0
  193. surfacetopography-0.0.0/test/IO/test_datx.py +79 -0
  194. surfacetopography-0.0.0/test/IO/test_di.py +63 -0
  195. surfacetopography-0.0.0/test/IO/test_dzi.py +399 -0
  196. surfacetopography-0.0.0/test/IO/test_ezd.py +84 -0
  197. surfacetopography-0.0.0/test/IO/test_frt.py +112 -0
  198. surfacetopography-0.0.0/test/IO/test_gwy.py +90 -0
  199. surfacetopography-0.0.0/test/IO/test_h5.py +74 -0
  200. surfacetopography-0.0.0/test/IO/test_hgt.py +42 -0
  201. surfacetopography-0.0.0/test/IO/test_ibw.py +206 -0
  202. surfacetopography-0.0.0/test/IO/test_io.py +861 -0
  203. surfacetopography-0.0.0/test/IO/test_jpk.py +106 -0
  204. surfacetopography-0.0.0/test/IO/test_lext.py +108 -0
  205. surfacetopography-0.0.0/test/IO/test_mat.py +50 -0
  206. surfacetopography-0.0.0/test/IO/test_metropro.py +75 -0
  207. surfacetopography-0.0.0/test/IO/test_mi.py +109 -0
  208. surfacetopography-0.0.0/test/IO/test_mitutoyo.py +279 -0
  209. surfacetopography-0.0.0/test/IO/test_nc.py +203 -0
  210. surfacetopography-0.0.0/test/IO/test_nmm.py +54 -0
  211. surfacetopography-0.0.0/test/IO/test_npy.py +175 -0
  212. surfacetopography-0.0.0/test/IO/test_oir.py +104 -0
  213. surfacetopography-0.0.0/test/IO/test_opd.py +62 -0
  214. surfacetopography-0.0.0/test/IO/test_opdx.py +172 -0
  215. surfacetopography-0.0.0/test/IO/test_plu.py +76 -0
  216. surfacetopography-0.0.0/test/IO/test_plux.py +78 -0
  217. surfacetopography-0.0.0/test/IO/test_ps.py +58 -0
  218. surfacetopography-0.0.0/test/IO/test_sur.py +148 -0
  219. surfacetopography-0.0.0/test/IO/test_vk.py +114 -0
  220. surfacetopography-0.0.0/test/IO/test_wsxm.py +90 -0
  221. surfacetopography-0.0.0/test/IO/test_x3p.py +103 -0
  222. surfacetopography-0.0.0/test/IO/test_xyz.py +130 -0
  223. surfacetopography-0.0.0/test/IO/test_zag.py +45 -0
  224. surfacetopography-0.0.0/test/IO/test_zon.py +75 -0
  225. surfacetopography-0.0.0/test/Models/__inits__.py +28 -0
  226. surfacetopography-0.0.0/test/Models/test_selfaffine.py +167 -0
  227. surfacetopography-0.0.0/test/__init__.py +26 -0
  228. surfacetopography-0.0.0/test/compare-orientation-with-gwyddion.py +102 -0
  229. surfacetopography-0.0.0/test/conftest.py +79 -0
  230. surfacetopography-0.0.0/test/contact_map.txt.gz +0 -0
  231. surfacetopography-0.0.0/test/test_api.py +267 -0
  232. surfacetopography-0.0.0/test/test_autocorrelation.py +404 -0
  233. surfacetopography-0.0.0/test/test_bearing_area.py +250 -0
  234. surfacetopography-0.0.0/test/test_bicubic_interpolation.py +190 -0
  235. surfacetopography-0.0.0/test/test_container.py +47 -0
  236. surfacetopography-0.0.0/test/test_derivatives.py +442 -0
  237. surfacetopography-0.0.0/test/test_filtering.py +219 -0
  238. surfacetopography-0.0.0/test/test_generation.py +326 -0
  239. surfacetopography-0.0.0/test/test_geometry_analysis.py +336 -0
  240. surfacetopography-0.0.0/test/test_import.py +49 -0
  241. surfacetopography-0.0.0/test/test_imputation.py +150 -0
  242. surfacetopography-0.0.0/test/test_linear_interpolation.py +100 -0
  243. surfacetopography-0.0.0/test/test_make_sphere.py +105 -0
  244. surfacetopography-0.0.0/test/test_make_topography_from_function.py +47 -0
  245. surfacetopography-0.0.0/test/test_missing_data.py +179 -0
  246. surfacetopography-0.0.0/test/test_nonuniform_line_scan.py +178 -0
  247. surfacetopography-0.0.0/test/test_parallel.py +82 -0
  248. surfacetopography-0.0.0/test/test_pipeline.py +334 -0
  249. surfacetopography-0.0.0/test/test_power_spectrum.py +456 -0
  250. surfacetopography-0.0.0/test/test_reentrant.py +42 -0
  251. surfacetopography-0.0.0/test/test_regression.py +88 -0
  252. surfacetopography-0.0.0/test/test_reliability_cutoff.py +492 -0
  253. surfacetopography-0.0.0/test/test_robust_statistics.py +131 -0
  254. surfacetopography-0.0.0/test/test_scalar_parameters.py +941 -0
  255. surfacetopography-0.0.0/test/test_scalar_parameters_container.py +558 -0
  256. surfacetopography-0.0.0/test/test_scale_dependent_statistics.py +444 -0
  257. surfacetopography-0.0.0/test/test_scanning_probe.py +70 -0
  258. surfacetopography-0.0.0/test/test_slope.py +70 -0
  259. surfacetopography-0.0.0/test/test_support.py +14 -0
  260. surfacetopography-0.0.0/test/test_topography.py +823 -0
  261. surfacetopography-0.0.0/test/test_uniform_line_scan.py +196 -0
  262. surfacetopography-0.0.0/test/test_unit_conversion.py +77 -0
  263. surfacetopography-0.0.0/test/test_usage_sample.py +55 -0
  264. surfacetopography-0.0.0/test/test_variable_bandwidth.py +204 -0
  265. surfacetopography-0.0.0/tools/wheels/README.md +3 -0
  266. surfacetopography-0.0.0/tools/wheels/cibw_before_all_cp38_macosx_arm64.sh +4 -0
  267. surfacetopography-0.0.0/tools/wheels/release-wheels.sh +36 -0
@@ -0,0 +1,13 @@
1
+ import sys
2
+
3
+ import muGrid
4
+
5
+ mpi_required = sys.argv[1] in ["yes", "1"]
6
+
7
+ print('`muGrid` imported successfully')
8
+ print(f'muGrid version: {muGrid.__version__}')
9
+
10
+ if mpi_required:
11
+ # Make sure that we have the parallel version running
12
+ assert muGrid.has_mpi, "MPI support is required but muGrid.has_mpi is False"
13
+ print('MPI support: enabled')
@@ -0,0 +1,3 @@
1
+ # Meson dist uses git to create the package - we don't want file format
2
+ # examples in the packages as those are > 100 MB.
3
+ test/file_format_examples export-ignore
@@ -0,0 +1,31 @@
1
+ name: Check coding conventions with flake8
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - '**'
7
+ tags:
8
+ - '**'
9
+ pull_request:
10
+ branches:
11
+ - '**'
12
+
13
+ jobs:
14
+ tests:
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - uses: actions/checkout@v6
19
+ with:
20
+ fetch-depth: 0
21
+
22
+ submodules: recursive
23
+
24
+ - name: Install dependencies
25
+ run: |
26
+ sudo apt-get update -qy
27
+ sudo apt-get install -y flake8
28
+
29
+ - name: Flake8
30
+ run: |
31
+ flake8 SurfaceTopography test
@@ -0,0 +1,80 @@
1
+ name: Publish
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ tags:
8
+ - '*'
9
+
10
+ jobs:
11
+ build:
12
+ runs-on: ubuntu-24.04
13
+
14
+ steps:
15
+ - uses: actions/checkout@v6
16
+ with:
17
+ fetch-depth: 0
18
+ submodules: recursive
19
+
20
+ - name: Installing Python
21
+ run: |
22
+ sudo apt-get update -qy
23
+ sudo apt-get install -y \
24
+ python3-dev \
25
+ python3-pip \
26
+ python3-venv \
27
+ meson \
28
+ ninja-build
29
+ python3 -m venv ../venv
30
+ source ../venv/bin/activate
31
+ pip install build
32
+
33
+ - name: Build package
34
+ run: |
35
+ source ../venv/bin/activate
36
+ python3 -m build . -s
37
+
38
+ - name: Install extension module
39
+ run: |
40
+ source ../venv/bin/activate
41
+ pip install dist/*.tar.gz
42
+
43
+ - name: Install sphinx
44
+ run: |
45
+ source ../venv/bin/activate
46
+ pip install sphinx sphinx_rtd_theme
47
+
48
+ - name: Build documentation
49
+ run: |
50
+ source ../venv/bin/activate
51
+ cd docs
52
+ sphinx-apidoc -o source/ ../SurfaceTopography
53
+ make html
54
+ cd ..
55
+
56
+ - name: Commit documentation changes
57
+ run: |
58
+ git clone https://github.com/ContactEngineering/SurfaceTopography.git --branch gh-pages --single-branch gh-pages
59
+ cp -r docs/_build/html/* gh-pages/
60
+ cd gh-pages
61
+ git config --local user.email "action@github.com"
62
+ git config --local user.name "GitHub Action"
63
+ git add .
64
+ git commit -m "Update documentation" -a || true
65
+ # The above command will fail if no changes were present, so we ignore
66
+ # that.
67
+
68
+ - name: Push documentation changes
69
+ uses: ad-m/github-push-action@master
70
+ with:
71
+ branch: gh-pages
72
+ directory: gh-pages
73
+ github_token: ${{ secrets.GITHUB_TOKEN }}
74
+
75
+ - name: Publish package
76
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
77
+ uses: pypa/gh-action-pypi-publish@master
78
+ with:
79
+ user: __token__
80
+ password: ${{ secrets.PYPI_PASSWORD }}
@@ -0,0 +1,86 @@
1
+ name: Test code functionality
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - '**'
7
+ tags:
8
+ - '**'
9
+ pull_request:
10
+ branches:
11
+ - '**'
12
+ schedule:
13
+ - cron: "0 2 * * 5"
14
+ jobs:
15
+ tests:
16
+ runs-on: ubuntu-24.04
17
+ timeout-minutes: 45
18
+
19
+ strategy:
20
+ matrix:
21
+ mpi: ['no', 'mpi']
22
+ python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
23
+ mpi4py-version: [4.0.3]
24
+
25
+ steps:
26
+ - uses: actions/checkout@v6
27
+ with:
28
+ fetch-depth: 0
29
+ submodules: recursive
30
+
31
+ - name: Set up python3 ${{ matrix.python-version }}
32
+ uses: actions/setup-python@v6
33
+ with:
34
+ python-version: ${{ matrix.python-version }}
35
+
36
+ - name: Install dependencies
37
+ run: |
38
+ sudo apt-get update -qy
39
+ python3 -m venv venv
40
+ source venv/bin/activate
41
+ python3 -m pip install --upgrade pip pip-tools meson build
42
+ if [ "${{ matrix.mpi }}" == "yes" ]; then
43
+ sudo apt-get install -y \
44
+ openmpi-bin \
45
+ libopenmpi-dev \
46
+ libfftw3-dev \
47
+ libfftw3-mpi-dev \
48
+ libhdf5-mpi-dev \
49
+ libpnetcdf-dev \
50
+ libnetcdf-pnetcdf-dev \
51
+ meson \
52
+ ninja-build
53
+ # Compute mpi4py, numpy and muGrid versions
54
+ pip-compile pyproject.toml
55
+ NUMPY_VERSION=$(grep 'numpy==' requirements.txt)
56
+ MUGRID_VERSION=$(grep 'mugrid==' requirements.txt)
57
+ echo "numpy version: ${NUMPY_VERSION}"
58
+ echo "muGrid version: ${MUGRID_VERSION}"
59
+ # Install numpy
60
+ pip install -v ${NUMPY_VERSION}
61
+ # Install mpi4py
62
+ echo "Installing mpi4py==${{ matrix.mpi4py-version }}"
63
+ CC=mpicc python3 -m pip install -v \
64
+ --no-binary mpi4py \
65
+ mpi4py==${{ matrix.mpi4py-version }}
66
+ # Manually install muGrid with MPI enabled
67
+ echo "Installing ${MUGRID_VERSION}"
68
+ pip install -v --no-binary muGrid ${MUGRID_VERSION}
69
+ else
70
+ sudo apt-get install -y \
71
+ libfftw3-dev \
72
+ libhdf5-dev \
73
+ libnetcdf-dev
74
+ fi
75
+ python3 -m pip list
76
+
77
+ - name: Install extension module
78
+ run: |
79
+ source venv/bin/activate
80
+ python3 -m pip install .[test]
81
+
82
+ - name: Test with pytest
83
+ run: |
84
+ source venv/bin/activate
85
+ python3 .check_mufft_capabilities.py ${{ matrix.mpi }}
86
+ if [ "${{ matrix.mpi }}" == "yes" ]; then python3 run-tests.py --no-build --verbose --full-trace; else python3 -m pytest --verbose --full-trace -s; fi
@@ -0,0 +1,43 @@
1
+ name: Test build and install of source package
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - '**'
7
+ tags:
8
+ - '**'
9
+ pull_request:
10
+ branches:
11
+ - '**'
12
+
13
+ jobs:
14
+ tests:
15
+ runs-on: ubuntu-24.04
16
+
17
+ steps:
18
+ - uses: actions/checkout@v6
19
+ with:
20
+ fetch-depth: 0
21
+ submodules: recursive
22
+
23
+ - name: Installing Python
24
+ run: |
25
+ sudo apt-get update -qy
26
+ sudo apt-get install -y \
27
+ python3-dev \
28
+ python3-pip \
29
+ python3-venv \
30
+ ninja-build
31
+ python3 -m venv ../venv
32
+ source ../venv/bin/activate
33
+ python3 -m pip install --upgrade pip pip-tools meson build
34
+
35
+ - name: Build package
36
+ run: |
37
+ source ../venv/bin/activate
38
+ python3 -m build . -s
39
+
40
+ - name: Install package
41
+ run: |
42
+ source ../venv/bin/activate
43
+ pip install -v dist/*.tar.gz
@@ -0,0 +1,95 @@
1
+ name: Wheels
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - '**'
7
+ tags:
8
+ - '**'
9
+ pull_request:
10
+ branches:
11
+ - '**'
12
+
13
+ jobs:
14
+ build_wheels:
15
+ name: Build wheel for ${{ matrix.python }}-${{ matrix.buildplat[1] }} ${{ matrix.buildplat[2] }}
16
+ runs-on: ${{ matrix.buildplat[0] }}
17
+ strategy:
18
+ matrix:
19
+ buildplat:
20
+ - [ubuntu-22.04, manylinux, x86_64]
21
+ - [ubuntu-22.04, manylinux, aarch64]
22
+ - [macos-14, macosx, arm64]
23
+ - [windows-2022, win, AMD64]
24
+ - [windows-2022, win, ARM64]
25
+ python: ["cp310", "cp311", "cp312", "cp313", "cp314"]
26
+ fail-fast: false
27
+
28
+ env:
29
+ IS_32_BIT: ${{ matrix.buildplat[2] == 'x86' }}
30
+ MACOSX_DEPLOYMENT_TARGET: "14.0"
31
+
32
+ steps:
33
+ - if: matrix.buildplat[2] == 'aarch64'
34
+ uses: docker/setup-qemu-action@v3
35
+ with:
36
+ platforms: all
37
+
38
+ - uses: actions/checkout@v6
39
+ with:
40
+ fetch-depth: 0
41
+ submodules: recursive
42
+
43
+ - uses: actions/setup-python@v6
44
+ with:
45
+ python-version: '3.14'
46
+
47
+ - name: Get version from DiscoverVersion
48
+ id: get_version
49
+ run: |
50
+ pip install DiscoverVersion
51
+ echo "version=$(python -m DiscoverVersion)" >> $GITHUB_OUTPUT
52
+ shell: bash
53
+
54
+ - name: Build wheels
55
+ uses: pypa/cibuildwheel@v3.3.1
56
+ env:
57
+ CIBW_BUILD: ${{ matrix.python }}-${{ matrix.buildplat[1] }}*
58
+ CIBW_ARCHS: ${{ matrix.buildplat[2] }}
59
+ CIBW_ENVIRONMENT: DISCOVER_VERSION=${{ steps.get_version.outputs.version }}
60
+ CIBW_ENVIRONMENT_PASS_LINUX: RUNNER_OS DISCOVER_VERSION
61
+ CIBW_BEFORE_BUILD_WINDOWS: pip install delvewheel
62
+ CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: delvewheel repair -w {dest_dir} {wheel}
63
+ CIBW_TEST_COMMAND: python -c "import SurfaceTopography; print(SurfaceTopography.__version__)"
64
+ CIBW_TEST_SKIP: "*-*linux_{aarch64,ppc64le,s390x}"
65
+
66
+ - uses: actions/upload-artifact@v6
67
+ with:
68
+ path: ./wheelhouse/*.whl
69
+ name: ${{ matrix.python }}-${{ matrix.buildplat[1] }}-${{ matrix.buildplat[2] }}
70
+
71
+ - name: Release wheels
72
+ uses: softprops/action-gh-release@v2
73
+ if: startsWith(github.ref, 'refs/tags/')
74
+ with:
75
+ files: wheelhouse/*.whl
76
+ env:
77
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
78
+
79
+ - name: Check tag
80
+ id: check-tag
81
+ run: |
82
+ if [[ ${{ github.ref }} =~ ^refs/tags/[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
83
+ echo ::set-output name=match::true
84
+ fi
85
+ shell: bash
86
+
87
+ - name: Deploy to PyPI
88
+ if: steps.check-tag.outputs.match == 'true'
89
+ run: |
90
+ pip install twine
91
+ twine upload wheelhouse/*.whl
92
+ env:
93
+ TWINE_USERNAME: __token__
94
+ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
95
+ shell: bash
@@ -0,0 +1,29 @@
1
+ *~
2
+ *.pyc
3
+ *.cpython*.so
4
+ __pycache__
5
+ ../build
6
+ dist
7
+ *egg-info
8
+ /tests/*.png
9
+ /helpers/*.png
10
+ /helpers/*.png.pdf
11
+ /helpers/figs.pdf
12
+ /notes/*/_region_*
13
+ /notes/*/auto
14
+ /notes/*/*.aux
15
+ /notes/*/*.bbl
16
+ /notes/*/*.blg
17
+ /notes/*/*.log
18
+ /notes/power_spectrum/power_spectrum.pdf
19
+ /notes/power_spectrum/prv*
20
+ /notes/auto/biblio.el
21
+ /helpers/.ipynb_checkpoints/
22
+ *.pyc
23
+ .eggs
24
+ .idea
25
+ .vscode
26
+ build
27
+ docs/_build
28
+ /subprojects/*
29
+ !/subprojects/*.wrap
@@ -0,0 +1,11 @@
1
+ repos:
2
+ - repo: https://github.com/pycqa/flake8
3
+ rev: '7.0.0'
4
+ hooks:
5
+ - id: flake8
6
+ name: flake8 (check python code style)
7
+ - repo: https://github.com/pycqa/isort
8
+ rev: '5.13.2'
9
+ hooks:
10
+ - id: isort
11
+ name: isort (check imports)
@@ -0,0 +1,14 @@
1
+ Lintao Fang <michaelfanglt@gmail.com>
2
+ Kai Haase <k.o.haase@googlemail.com>
3
+ Johannes Hörmann <johannes.hoermann@imtek.uni-freiburg.de>
4
+ Till Junge <till.junge@altermail.ch>
5
+ Till Junge <till.junge@kit.edu>
6
+ Till Junge <junge@Festwemse-3>
7
+ Till Junge <junge@cmsjunge>
8
+ Lars Pastewka <lars.pastewka@kit.edu>
9
+ Lars Pastewka <lars.pastewka@imtek.uni-freiburg.de>
10
+ Lars Pastewka <lars.pastewka@surface.design>
11
+ Michael Röttger <info@michael-roettger.de>
12
+ Antoine Sanner <antoine.sanner@imtek.uni-freiburg.de>
13
+ Antoine Sanner <asanner@ethz.ch>
14
+ Paul Strauch <paul-strauch@gmx.de>
@@ -0,0 +1,19 @@
1
+ ### MIT license
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
@@ -0,0 +1,4 @@
1
+ prune test
2
+ include examples/*.py
3
+ include examples/*.ipynb
4
+ include c/*.h
@@ -0,0 +1,99 @@
1
+ Metadata-Version: 2.1
2
+ Name: SurfaceTopography
3
+ Version: 0.0.0
4
+ Summary: Read and analyze surface topographies
5
+ Author-Email: Lars Pastewka <lars.pastewka@imtek.uni-freiburg.de>, Kai Haase <k.o.haase@googlemail.com>, =?utf-8?q?Johannes_H=C3=B6rmann?= <johannes.hoermann@imtek.uni-freiburg.de>, Till Junge <till.junge@altermail.ch>, =?utf-8?q?Michael_R=C3=B6ttger?= <info@michael-roettger.de>, Antoine Sanner <antoine.sanner@imtek.uni-freiburg.de>
6
+ License: ### MIT license
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ of this software and associated documentation files (the "Software"), to deal
10
+ in the Software without restriction, including without limitation the rights
11
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ copies of the Software, and to permit persons to whom the Software is
13
+ furnished to do so, subject to the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be included in
16
+ all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24
+ SOFTWARE.
25
+
26
+ Classifier: Development Status :: 5 - Production/Stable
27
+ Classifier: Programming Language :: Python
28
+ Project-URL: documentation, https://contactengineering.github.io/SurfaceTopography/
29
+ Project-URL: repository, https://github.com/ContactEngineering/SurfaceTopography
30
+ Project-URL: changelog, https://github.com/ContactEngineering/SurfaceTopography/blob/master/SurfaceTopography/ChangeLog.md
31
+ Requires-Python: >=3.10.0
32
+ Requires-Dist: numpy>=2.0.0
33
+ Requires-Dist: scipy>=1.9.0
34
+ Requires-Dist: defusedxml
35
+ Requires-Dist: h5py
36
+ Requires-Dist: igor2
37
+ Requires-Dist: matplotlib>=1.0.0
38
+ Requires-Dist: muGrid>=0.103.0
39
+ Requires-Dist: NuMPI>=0.9.0
40
+ Requires-Dist: numpyencoder
41
+ Requires-Dist: openpyxl
42
+ Requires-Dist: Pillow
43
+ Requires-Dist: python-dateutil
44
+ Requires-Dist: pyyaml
45
+ Requires-Dist: requests
46
+ Requires-Dist: tiffile
47
+ Requires-Dist: xmltodict
48
+ Requires-Dist: pandas
49
+ Requires-Dist: pydantic
50
+ Requires-Dist: zstandard
51
+ Provides-Extra: test
52
+ Requires-Dist: flake8<8; extra == "test"
53
+ Requires-Dist: pytest; extra == "test"
54
+ Requires-Dist: pytest-cov; extra == "test"
55
+ Requires-Dist: pytest-flake8; extra == "test"
56
+ Requires-Dist: runtests; extra == "test"
57
+ Description-Content-Type: text/markdown
58
+
59
+ [![Build Status](https://github.com/ContactEngineering/SurfaceTopography/actions/workflows/test-code-functionality.yml/badge.svg)](https://github.com/ContactEngineering/SurfaceTopography/actions/workflows/tests.yml)
60
+
61
+ [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/ContactEngineering/SurfaceTopography)
62
+
63
+ SurfaceTopography
64
+ =================
65
+
66
+ *Read and analyze surface topographies with Python.* This code implements basic classes for handling uniform and
67
+ nonuniform surface topography data. It contains a rich set of import filters for experimental surface topography data.
68
+ Surface topographies can be easily analyzed using standard (rms height, power spectrum, ...) and some special purpose
69
+ (autocorrelation function, variable bandwidth analysis, ...) statistical techniques.
70
+
71
+ If you use this code, please cite:
72
+ * [Jacobs, Junge, Pastewka, Surf. Topogr. Metrol. Prop. 1, 013001 (2017)](https://doi.org/10.1088/2051-672X/aa51f8)
73
+ * [Röttger el al., Surf. Topogr. Metrol. Prop. 10, 035032 (2022)](https://doi.org/10.1088/2051-672X/ac860a)
74
+
75
+ Documentation
76
+ -------------
77
+
78
+ This README file contains a brief introduction into the code. The full documentation can be found at https://contactengineering.github.io/SurfaceTopography/.
79
+
80
+ Installation
81
+ ------------
82
+
83
+ Detailed instruction for the installation are provided in the [documentation](https://contactengineering.github.io/SurfaceTopography/installation.html?highlight=installation). If you want to install from source
84
+ you need to run `git submodule update --init` after a fresh checkout.
85
+
86
+ The most basic configuration of SurfaceTopography installs all requirements autonomously `python3 -m pip install SurfaceTopgography`
87
+
88
+ If you need an editable install (e.g. for development purposes), make sure you disable build isolation:
89
+
90
+ python3 -m pip install --no-build-isolation -e .
91
+
92
+ You need to manually install `ninja`, `meson-python`, `pytest`, `runtests`, `DiscoverVersion` and `numpy` before:
93
+
94
+ python3 -m pip install ninja meson-python pytest runtests DiscoverVersion numpy
95
+
96
+ Funding
97
+ -------
98
+
99
+ Development of this project is funded by the [European Research Council](https://erc.europa.eu) within [Starting Grant 757343](https://cordis.europa.eu/project/id/757343) and by the [Deutsche Forschungsgemeinschaft](https://www.dfg.de/en) within projects [PA 2023/2](https://gepris.dfg.de/gepris/projekt/258153560) and [EXC 2193](https://gepris.dfg.de/gepris/projekt/390951807).
@@ -0,0 +1,41 @@
1
+ [![Build Status](https://github.com/ContactEngineering/SurfaceTopography/actions/workflows/test-code-functionality.yml/badge.svg)](https://github.com/ContactEngineering/SurfaceTopography/actions/workflows/tests.yml)
2
+
3
+ [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/ContactEngineering/SurfaceTopography)
4
+
5
+ SurfaceTopography
6
+ =================
7
+
8
+ *Read and analyze surface topographies with Python.* This code implements basic classes for handling uniform and
9
+ nonuniform surface topography data. It contains a rich set of import filters for experimental surface topography data.
10
+ Surface topographies can be easily analyzed using standard (rms height, power spectrum, ...) and some special purpose
11
+ (autocorrelation function, variable bandwidth analysis, ...) statistical techniques.
12
+
13
+ If you use this code, please cite:
14
+ * [Jacobs, Junge, Pastewka, Surf. Topogr. Metrol. Prop. 1, 013001 (2017)](https://doi.org/10.1088/2051-672X/aa51f8)
15
+ * [Röttger el al., Surf. Topogr. Metrol. Prop. 10, 035032 (2022)](https://doi.org/10.1088/2051-672X/ac860a)
16
+
17
+ Documentation
18
+ -------------
19
+
20
+ This README file contains a brief introduction into the code. The full documentation can be found at https://contactengineering.github.io/SurfaceTopography/.
21
+
22
+ Installation
23
+ ------------
24
+
25
+ Detailed instruction for the installation are provided in the [documentation](https://contactengineering.github.io/SurfaceTopography/installation.html?highlight=installation). If you want to install from source
26
+ you need to run `git submodule update --init` after a fresh checkout.
27
+
28
+ The most basic configuration of SurfaceTopography installs all requirements autonomously `python3 -m pip install SurfaceTopgography`
29
+
30
+ If you need an editable install (e.g. for development purposes), make sure you disable build isolation:
31
+
32
+ python3 -m pip install --no-build-isolation -e .
33
+
34
+ You need to manually install `ninja`, `meson-python`, `pytest`, `runtests`, `DiscoverVersion` and `numpy` before:
35
+
36
+ python3 -m pip install ninja meson-python pytest runtests DiscoverVersion numpy
37
+
38
+ Funding
39
+ -------
40
+
41
+ Development of this project is funded by the [European Research Council](https://erc.europa.eu) within [Starting Grant 757343](https://cordis.europa.eu/project/id/757343) and by the [Deutsche Forschungsgemeinschaft](https://www.dfg.de/en) within projects [PA 2023/2](https://gepris.dfg.de/gepris/projekt/258153560) and [EXC 2193](https://gepris.dfg.de/gepris/projekt/390951807).
@@ -0,0 +1,17 @@
1
+ import argparse
2
+
3
+ from matplotlib import pyplot as plt
4
+
5
+ from SurfaceTopography.IO import read_topography
6
+
7
+
8
+ def main():
9
+ parser = argparse.ArgumentParser(
10
+ prog="show-topography", description="Visualize a surface topography"
11
+ )
12
+ parser.add_argument('filename')
13
+ args = parser.parse_args()
14
+
15
+ t = read_topography(args.filename)
16
+ t.plot()
17
+ plt.show()
@@ -0,0 +1,13 @@
1
+ # https://mesonbuild.com/Python-module.html
2
+
3
+ # Pure Python sources
4
+ python_sources = [
5
+ '__init__.py',
6
+ 'ShowTopography.py'
7
+ ]
8
+
9
+ # Install pure Python
10
+ python.install_sources(
11
+ python_sources,
12
+ subdir: 'SurfaceTopography/CLI'
13
+ )