geopyv-dev 0.2.1__tar.gz → 0.2.2__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 (161) hide show
  1. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/Cargo.lock +3 -3
  2. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/Cargo.toml +1 -1
  3. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/PKG-INFO +1 -1
  4. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/tutorials/02_subset.rst +12 -4
  5. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/Cargo.toml +1 -1
  6. geopyv_dev-0.2.2/geopyv-gui/src/field_tab.rs +1011 -0
  7. geopyv_dev-0.2.2/geopyv-gui/src/field_view.rs +1046 -0
  8. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/lib.rs +2 -0
  9. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/main_window.rs +2 -4
  10. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/mesh_tab.rs +5 -112
  11. geopyv_dev-0.2.2/geopyv-gui/src/overlay.rs +476 -0
  12. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv_dev/plots.py +48 -83
  13. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/pyproject.toml +1 -1
  14. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/Cargo.toml +1 -1
  15. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_field.rs +66 -1
  16. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_subset.rs +5 -5
  17. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/field.rs +509 -2
  18. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/io.rs +171 -9
  19. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/subset.rs +209 -30
  20. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/validation.rs +2 -0
  21. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/io/test_io.py +1 -1
  22. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/plots/test_plots.py +113 -0
  23. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/subset/test_subset.py +36 -0
  24. geopyv_dev-0.2.2/tests/solve_timing.rs +181 -0
  25. geopyv_dev-0.2.1/geopyv-gui/src/field_tab.rs +0 -1533
  26. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/.github/workflows/release.yml +0 -0
  27. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/.gitignore +0 -0
  28. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/.readthedocs.yaml +0 -0
  29. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/CLAUDE.md +0 -0
  30. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/LICENSE +0 -0
  31. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/Makefile +0 -0
  32. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/README.md +0 -0
  33. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/basictest.py +0 -0
  34. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/gifs/intro_hero.gif +0 -0
  35. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/gifs/quad_deformation.gif +0 -0
  36. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/gifs/region_motion.gif +0 -0
  37. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/gifs/sequence_distortion.gif +0 -0
  38. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/gifs/subset_shape_order.gif +0 -0
  39. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/img/c2_subset.png +0 -0
  40. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/img/combined_25_standard_error.png +0 -0
  41. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/img/mask_local_vs_global.png +0 -0
  42. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/img/mesh_solve_flow.png +0 -0
  43. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/img/sequence_solve_flow.png +0 -0
  44. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/_static/img/subset_quality.png +0 -0
  45. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/api/index.rst +0 -0
  46. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/conf.py +0 -0
  47. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/index.rst +0 -0
  48. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/installation.rst +0 -0
  49. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/requirements-docs.txt +0 -0
  50. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/scripts/build_images_assets.py +0 -0
  51. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/scripts/build_intro_gif.py +0 -0
  52. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/scripts/build_mesh_flow.py +0 -0
  53. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/scripts/build_region_motion_gif.py +0 -0
  54. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/scripts/build_sequence_distortion_gif.py +0 -0
  55. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/scripts/build_sequence_flow.py +0 -0
  56. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/scripts/build_subset_assets.py +0 -0
  57. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/scripts/common.py +0 -0
  58. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/tutorials/00_introduction.rst +0 -0
  59. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/tutorials/01_images_and_masks.rst +0 -0
  60. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/tutorials/03_mesh.rst +0 -0
  61. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/tutorials/04_sequence.rst +0 -0
  62. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/tutorials/05_particle.rst +0 -0
  63. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/tutorials/06_field.rst +0 -0
  64. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/tutorials/07_validation.rst +0 -0
  65. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/tutorials/08_calibration.rst +0 -0
  66. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/docs/tutorials/index.rst +0 -0
  67. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/00_introduction.ipynb +0 -0
  68. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/01_images_and_masks.ipynb +0 -0
  69. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/02_subset.ipynb +0 -0
  70. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/03_mesh.ipynb +0 -0
  71. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/04_sequence.ipynb +0 -0
  72. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/05_particle_and_field.ipynb +0 -0
  73. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/data/sequence/seq_0.jpg +0 -0
  74. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/data/sequence/seq_1.jpg +0 -0
  75. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/data/sequence/seq_2.jpg +0 -0
  76. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/data/sequence/seq_3.jpg +0 -0
  77. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/data/sequence/seq_4.jpg +0 -0
  78. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/data/single/intro_0.jpg +0 -0
  79. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-dev-tutorials/data/single/intro_1.jpg +0 -0
  80. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/app.rs +0 -0
  81. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/colormap.rs +0 -0
  82. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/draw.rs +0 -0
  83. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/image_viewer.rs +0 -0
  84. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/main.rs +0 -0
  85. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/particle_tab.rs +0 -0
  86. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/progress.rs +0 -0
  87. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/project.rs +0 -0
  88. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/recent.rs +0 -0
  89. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/sequence_tab.rs +0 -0
  90. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv-gui/src/subset_tab.rs +0 -0
  91. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv_dev/__init__.py +0 -0
  92. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv_dev/calibration.py +0 -0
  93. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv_dev/gui.py +0 -0
  94. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/geopyv_dev/wrappers.py +0 -0
  95. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/SB/SB_0.jpg +0 -0
  96. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/SB/SB_1.jpg +0 -0
  97. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/SB/SB_2.jpg +0 -0
  98. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/SB/SB_3.jpg +0 -0
  99. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/SB/SB_4.jpg +0 -0
  100. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/SB/SB_5.jpg +0 -0
  101. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/SB/speckle_SB.pyv +0 -0
  102. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_0.jpg +0 -0
  103. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_1.jpg +0 -0
  104. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_10.jpg +0 -0
  105. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_2.jpg +0 -0
  106. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_3.jpg +0 -0
  107. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_4.jpg +0 -0
  108. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_5.jpg +0 -0
  109. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_6.jpg +0 -0
  110. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_7.jpg +0 -0
  111. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_8.jpg +0 -0
  112. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/comp/compression_9.jpg +0 -0
  113. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/quality/quality_speckle.jpg +0 -0
  114. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/shear/shear_0.jpg +0 -0
  115. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/shear/shear_1.jpg +0 -0
  116. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/shear/shear_2.jpg +0 -0
  117. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/shear/shear_3.jpg +0 -0
  118. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/shear/shear_4.jpg +0 -0
  119. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/images/shear/speckle_shear.pyv +0 -0
  120. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/geopyv-dev/__init__.py +0 -0
  121. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/lib.rs +0 -0
  122. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_calibration.rs +0 -0
  123. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_geometry.rs +0 -0
  124. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_gui.rs +0 -0
  125. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_image.rs +0 -0
  126. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_io.rs +0 -0
  127. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_mask.rs +0 -0
  128. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_mesh.rs +0 -0
  129. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_particle.rs +0 -0
  130. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_sequence.rs +0 -0
  131. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_speckle.rs +0 -0
  132. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/py_validation.rs +0 -0
  133. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/python/src/utils.rs +0 -0
  134. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/calibration.rs +0 -0
  135. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/error.rs +0 -0
  136. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/geometry/meshing.rs +0 -0
  137. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/geometry/mod.rs +0 -0
  138. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/geometry/rasterize.rs +0 -0
  139. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/geometry/region.rs +0 -0
  140. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/geometry/triangulation.rs +0 -0
  141. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/geometry/utilities.rs +0 -0
  142. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/image.rs +0 -0
  143. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/lib.rs +0 -0
  144. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/masks.rs +0 -0
  145. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/mesh.rs +0 -0
  146. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/particle.rs +0 -0
  147. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/progress.rs +0 -0
  148. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/sequence.rs +0 -0
  149. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/src/speckle.rs +0 -0
  150. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/calibration/test_calibration.py +0 -0
  151. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/field/test_field.py +0 -0
  152. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/geometry/test_geometry.py +0 -0
  153. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/image/test_image.py +0 -0
  154. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/mesh/test_mesh.py +0 -0
  155. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/particle/test_particle.py +0 -0
  156. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/plots/__init__.py +0 -0
  157. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/plots/conftest.py +0 -0
  158. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/sequence/test_sequence.py +0 -0
  159. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/templates/test_templates.py +0 -0
  160. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/validation/test_validation.py +0 -0
  161. {geopyv_dev-0.2.1 → geopyv_dev-0.2.2}/tests/python/validation/test_validation_solve.py +0 -0
@@ -1531,7 +1531,7 @@ dependencies = [
1531
1531
 
1532
1532
  [[package]]
1533
1533
  name = "geopyv-dev"
1534
- version = "0.2.1"
1534
+ version = "0.2.2"
1535
1535
  dependencies = [
1536
1536
  "bincode",
1537
1537
  "image",
@@ -1550,7 +1550,7 @@ dependencies = [
1550
1550
 
1551
1551
  [[package]]
1552
1552
  name = "geopyv-dev-python"
1553
- version = "0.2.1"
1553
+ version = "0.2.2"
1554
1554
  dependencies = [
1555
1555
  "geopyv-dev",
1556
1556
  "geopyv-gui",
@@ -1561,7 +1561,7 @@ dependencies = [
1561
1561
 
1562
1562
  [[package]]
1563
1563
  name = "geopyv-gui"
1564
- version = "0.2.1"
1564
+ version = "0.2.2"
1565
1565
  dependencies = [
1566
1566
  "dirs",
1567
1567
  "eframe",
@@ -4,7 +4,7 @@ resolver = "2"
4
4
 
5
5
  [package]
6
6
  name = "geopyv-dev"
7
- version = "0.2.1"
7
+ version = "0.2.2"
8
8
  edition = "2024"
9
9
 
10
10
  [dependencies]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: geopyv_dev
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Rust
6
6
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
@@ -33,8 +33,9 @@ A ``Subset`` is defined by four things:
33
33
  - The patch's radius (circle) or half-width (square), set on the
34
34
  ``local_mask`` itself
35
35
  * - Order
36
- - ``subset_order`` — 1 (affine) or 2 (quadratic); how complex a warp the
37
- solver is allowed to fit (see *The warp function*, below)
36
+ - ``subset_order`` — 0 (translation), 1 (affine), or 2 (quadratic); how
37
+ complex a warp the solver is allowed to fit (see *The warp function*,
38
+ below). Default ``1``.
38
39
 
39
40
  .. image:: /_static/gifs/subset_shape_order.gif
40
41
  :alt: A circle and a square subset template growing and shrinking, then fixed
@@ -117,7 +118,12 @@ The warp function
117
118
  -------------------
118
119
 
119
120
  The DIC solver describes how a subset deforms using a **warp vector** ``p``. For
120
- **order 1** (affine, 6 parameters)::
121
+ **order 0** (translation only, 2 parameters)::
122
+
123
+ u(x,y) = p[0]
124
+ v(x,y) = p[1]
125
+
126
+ For **order 1** (affine, 6 parameters)::
121
127
 
122
128
  u(x,y) = p[0] + p[2]·Δx + p[4]·Δy
123
129
  v(x,y) = p[1] + p[3]·Δx + p[5]·Δy
@@ -130,7 +136,9 @@ ordering used by ``Speckle``'s ``comp`` array in :doc:`00_introduction` and
130
136
 
131
137
  For **order 2** (quadratic, 12 parameters), six second-order terms
132
138
  (``p[6..11]``) are added. Most analyses use order 1 for ``Subset`` and order 2
133
- for ``Mesh``/``Sequence``.
139
+ for ``Mesh``/``Sequence``; order 0 is mainly useful as a deliberately
140
+ under-specified baseline, e.g. for warp-adequacy diagnostics that compare a
141
+ solve's residual against the modes a lower order couldn't fit.
134
142
 
135
143
  Solve
136
144
  ------
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "geopyv-gui"
3
- version = "0.2.1"
3
+ version = "0.2.2"
4
4
  edition = "2024"
5
5
 
6
6
  [lib]