pynumgeo 2026.2.0.dev2__py3-none-any.whl

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 (190) hide show
  1. pynumgeo/__init__.py +144 -0
  2. pynumgeo/_provenance.py +77 -0
  3. pynumgeo/_version.py +28 -0
  4. pynumgeo/catalogue/__init__.py +466 -0
  5. pynumgeo/catalogue/data/catalogue.json +56012 -0
  6. pynumgeo/catalogue/data/docs/reference/accelerator.md +102 -0
  7. pynumgeo/catalogue/data/docs/reference/amplitude.md +124 -0
  8. pynumgeo/catalogue/data/docs/reference/assign_material.md +36 -0
  9. pynumgeo/catalogue/data/docs/reference/boundary-conditions/Uboundary.md +55 -0
  10. pynumgeo/catalogue/data/docs/reference/boundary-conditions/body-force.md +58 -0
  11. pynumgeo/catalogue/data/docs/reference/boundary-conditions/boundary.md +201 -0
  12. pynumgeo/catalogue/data/docs/reference/boundary-conditions/cload.md +75 -0
  13. pynumgeo/catalogue/data/docs/reference/boundary-conditions/connector_element.md +16 -0
  14. pynumgeo/catalogue/data/docs/reference/boundary-conditions/dload.md +241 -0
  15. pynumgeo/catalogue/data/docs/reference/boundary-conditions/dsload.md +378 -0
  16. pynumgeo/catalogue/data/docs/reference/boundary-conditions/flexible-boundary.md +115 -0
  17. pynumgeo/catalogue/data/docs/reference/boundary-conditions/index.md +134 -0
  18. pynumgeo/catalogue/data/docs/reference/boundary-conditions/mass_point.md +16 -0
  19. pynumgeo/catalogue/data/docs/reference/boundary-conditions/reaction_force.md +36 -0
  20. pynumgeo/catalogue/data/docs/reference/contacts/contact-options.md +25 -0
  21. pynumgeo/catalogue/data/docs/reference/contacts/contact-pair.md +88 -0
  22. pynumgeo/catalogue/data/docs/reference/contacts/fluid_interaction.md +21 -0
  23. pynumgeo/catalogue/data/docs/reference/contacts/index.md +28 -0
  24. pynumgeo/catalogue/data/docs/reference/contacts/interaction.md +214 -0
  25. pynumgeo/catalogue/data/docs/reference/controls.md +201 -0
  26. pynumgeo/catalogue/data/docs/reference/element/elements-beam.md +87 -0
  27. pynumgeo/catalogue/data/docs/reference/element/elements-shell.md +123 -0
  28. pynumgeo/catalogue/data/docs/reference/element/elements-u-truss.md +69 -0
  29. pynumgeo/catalogue/data/docs/reference/element/elements-u.md +56 -0
  30. pynumgeo/catalogue/data/docs/reference/element/elements-uU-sat.md +60 -0
  31. pynumgeo/catalogue/data/docs/reference/element/elements-up-sat.md +119 -0
  32. pynumgeo/catalogue/data/docs/reference/element/elements-up.md +118 -0
  33. pynumgeo/catalogue/data/docs/reference/element/elements-upU-sat.md +57 -0
  34. pynumgeo/catalogue/data/docs/reference/element/elements-upp.md +43 -0
  35. pynumgeo/catalogue/data/docs/reference/element/elements-ut.md +79 -0
  36. pynumgeo/catalogue/data/docs/reference/element/index.md +40 -0
  37. pynumgeo/catalogue/data/docs/reference/elset.md +37 -0
  38. pynumgeo/catalogue/data/docs/reference/embedded-regions/absorbed.md +46 -0
  39. pynumgeo/catalogue/data/docs/reference/embedded-regions/index.md +19 -0
  40. pynumgeo/catalogue/data/docs/reference/embedded-regions/interaction.md +184 -0
  41. pynumgeo/catalogue/data/docs/reference/equation.md +123 -0
  42. pynumgeo/catalogue/data/docs/reference/execute-command.md +12 -0
  43. pynumgeo/catalogue/data/docs/reference/extrapolation.md +33 -0
  44. pynumgeo/catalogue/data/docs/reference/index.md +140 -0
  45. pynumgeo/catalogue/data/docs/reference/initial-conditions/contact.md +11 -0
  46. pynumgeo/catalogue/data/docs/reference/initial-conditions/index.md +25 -0
  47. pynumgeo/catalogue/data/docs/reference/initial-conditions/pore-pressure.md +24 -0
  48. pynumgeo/catalogue/data/docs/reference/initial-conditions/state-variables.md +171 -0
  49. pynumgeo/catalogue/data/docs/reference/initial-conditions/stress.md +90 -0
  50. pynumgeo/catalogue/data/docs/reference/initial-conditions/temperature.md +28 -0
  51. pynumgeo/catalogue/data/docs/reference/initial-conditions/velocity-acceleration.md +45 -0
  52. pynumgeo/catalogue/data/docs/reference/initial-conditions/void-ratio.md +28 -0
  53. pynumgeo/catalogue/data/docs/reference/material/beam-properties.md +100 -0
  54. pynumgeo/catalogue/data/docs/reference/material/bishop.md +98 -0
  55. pynumgeo/catalogue/data/docs/reference/material/bulk_modulus.md +9 -0
  56. pynumgeo/catalogue/data/docs/reference/material/cavitation.md +17 -0
  57. pynumgeo/catalogue/data/docs/reference/material/damping.md +61 -0
  58. pynumgeo/catalogue/data/docs/reference/material/density.md +15 -0
  59. pynumgeo/catalogue/data/docs/reference/material/fpl-stabilisation.md +39 -0
  60. pynumgeo/catalogue/data/docs/reference/material/hourglass.md +92 -0
  61. pynumgeo/catalogue/data/docs/reference/material/hydraulic/brooks-corey.md +27 -0
  62. pynumgeo/catalogue/data/docs/reference/material/hydraulic/exponential.md +25 -0
  63. pynumgeo/catalogue/data/docs/reference/material/hydraulic/fredlund-xing.md +28 -0
  64. pynumgeo/catalogue/data/docs/reference/material/hydraulic/gallipoli-model.md +28 -0
  65. pynumgeo/catalogue/data/docs/reference/material/hydraulic/index.md +64 -0
  66. pynumgeo/catalogue/data/docs/reference/material/hydraulic/karlsruhe-model.md +38 -0
  67. pynumgeo/catalogue/data/docs/reference/material/hydraulic/van-genuchten.md +28 -0
  68. pynumgeo/catalogue/data/docs/reference/material/index.md +55 -0
  69. pynumgeo/catalogue/data/docs/reference/material/mechanical/avhp.md +12 -0
  70. pynumgeo/catalogue/data/docs/reference/material/mechanical/avisa.md +84 -0
  71. pynumgeo/catalogue/data/docs/reference/material/mechanical/barotropic_elasticity.md +54 -0
  72. pynumgeo/catalogue/data/docs/reference/material/mechanical/bathytropic-elasticity.md +113 -0
  73. pynumgeo/catalogue/data/docs/reference/material/mechanical/bc-hypo-igs-sf.md +116 -0
  74. pynumgeo/catalogue/data/docs/reference/material/mechanical/bingham.md +49 -0
  75. pynumgeo/catalogue/data/docs/reference/material/mechanical/hardening_soil_MN.md +94 -0
  76. pynumgeo/catalogue/data/docs/reference/material/mechanical/hardening_soil_MN_bricks.md +96 -0
  77. pynumgeo/catalogue/data/docs/reference/material/mechanical/hca-sand.md +263 -0
  78. pynumgeo/catalogue/data/docs/reference/material/mechanical/hypo-clay.md +13 -0
  79. pynumgeo/catalogue/data/docs/reference/material/mechanical/hypoplasticity_gis.md +111 -0
  80. pynumgeo/catalogue/data/docs/reference/material/mechanical/hypoplasticity_igs.md +181 -0
  81. pynumgeo/catalogue/data/docs/reference/material/mechanical/hypoplasticity_isa-sf.md +126 -0
  82. pynumgeo/catalogue/data/docs/reference/material/mechanical/hypoplasticity_isa.md +147 -0
  83. pynumgeo/catalogue/data/docs/reference/material/mechanical/index.md +43 -0
  84. pynumgeo/catalogue/data/docs/reference/material/mechanical/linear_elasticity.md +13 -0
  85. pynumgeo/catalogue/data/docs/reference/material/mechanical/matsuoka_nakai.md +41 -0
  86. pynumgeo/catalogue/data/docs/reference/material/mechanical/modified-cam-clay.md +166 -0
  87. pynumgeo/catalogue/data/docs/reference/material/mechanical/mohr_coulomb.md +205 -0
  88. pynumgeo/catalogue/data/docs/reference/material/mechanical/sanisand.md +154 -0
  89. pynumgeo/catalogue/data/docs/reference/material/mechanical/sanisand_f.md +84 -0
  90. pynumgeo/catalogue/data/docs/reference/material/mechanical/sanisand_msf.md +101 -0
  91. pynumgeo/catalogue/data/docs/reference/material/mechanical/ta-ger.md +106 -0
  92. pynumgeo/catalogue/data/docs/reference/material/mechanical/thermal_elasticity.md +48 -0
  93. pynumgeo/catalogue/data/docs/reference/material/mechanical_viscosity.md +23 -0
  94. pynumgeo/catalogue/data/docs/reference/material/min_pressure.md +23 -0
  95. pynumgeo/catalogue/data/docs/reference/material/permeability/brooks-corey.md +24 -0
  96. pynumgeo/catalogue/data/docs/reference/material/permeability/fredlund-xing.md +34 -0
  97. pynumgeo/catalogue/data/docs/reference/material/permeability/index.md +27 -0
  98. pynumgeo/catalogue/data/docs/reference/material/permeability/logistic-fit.md +27 -0
  99. pynumgeo/catalogue/data/docs/reference/material/permeability/nguyen.md +25 -0
  100. pynumgeo/catalogue/data/docs/reference/material/permeability/van-genuchten.md +24 -0
  101. pynumgeo/catalogue/data/docs/reference/material/permeability.md +153 -0
  102. pynumgeo/catalogue/data/docs/reference/material/phantom_elasticity.md +25 -0
  103. pynumgeo/catalogue/data/docs/reference/material/shell-properties.md +64 -0
  104. pynumgeo/catalogue/data/docs/reference/material/specific-heat.md +24 -0
  105. pynumgeo/catalogue/data/docs/reference/material/thermal-capacity.md +22 -0
  106. pynumgeo/catalogue/data/docs/reference/material/thermal-conductivity.md +24 -0
  107. pynumgeo/catalogue/data/docs/reference/material/thermal-stabilisation.md +24 -0
  108. pynumgeo/catalogue/data/docs/reference/material/truss-properties.md +56 -0
  109. pynumgeo/catalogue/data/docs/reference/model-change/index.md +13 -0
  110. pynumgeo/catalogue/data/docs/reference/model-change/material.md +32 -0
  111. pynumgeo/catalogue/data/docs/reference/node.md +29 -0
  112. pynumgeo/catalogue/data/docs/reference/non-local.md +32 -0
  113. pynumgeo/catalogue/data/docs/reference/nset.md +60 -0
  114. pynumgeo/catalogue/data/docs/reference/output/field.md +203 -0
  115. pynumgeo/catalogue/data/docs/reference/output/index.md +56 -0
  116. pynumgeo/catalogue/data/docs/reference/output/print.md +158 -0
  117. pynumgeo/catalogue/data/docs/reference/read-state.md +8 -0
  118. pynumgeo/catalogue/data/docs/reference/reset.md +25 -0
  119. pynumgeo/catalogue/data/docs/reference/restart.md +73 -0
  120. pynumgeo/catalogue/data/docs/reference/solver.md +515 -0
  121. pynumgeo/catalogue/data/docs/reference/step/dynamic.md +65 -0
  122. pynumgeo/catalogue/data/docs/reference/step/explicit-dynamic.md +48 -0
  123. pynumgeo/catalogue/data/docs/reference/step/geostatic.md +14 -0
  124. pynumgeo/catalogue/data/docs/reference/step/index.md +83 -0
  125. pynumgeo/catalogue/data/docs/reference/step/reduction.md +32 -0
  126. pynumgeo/catalogue/data/docs/reference/step/static.md +27 -0
  127. pynumgeo/catalogue/data/docs/reference/step/transient-critical.md +20 -0
  128. pynumgeo/catalogue/data/docs/reference/step/transient.md +14 -0
  129. pynumgeo/catalogue/data/docs/reference/submodel.md +30 -0
  130. pynumgeo/catalogue/data/docs/reference/surface.md +28 -0
  131. pynumgeo/catalogue/data/docs/reference/termination.md +29 -0
  132. pynumgeo/catalogue/data/docs/reference/user/amplitude.md +48 -0
  133. pynumgeo/catalogue/data/docs/reference/user/boundary.md +58 -0
  134. pynumgeo/catalogue/data/docs/reference/user/contact.md +84 -0
  135. pynumgeo/catalogue/data/docs/reference/user/index.md +42 -0
  136. pynumgeo/catalogue/data/docs/reference/user/initial-statev.md +73 -0
  137. pynumgeo/catalogue/data/docs/reference/user/initial-stress.md +77 -0
  138. pynumgeo/catalogue/data/docs/reference/user/load.md +70 -0
  139. pynumgeo/catalogue/data/docs/reference/user/material.md +169 -0
  140. pynumgeo/catalogue/data/docs_index.json +136 -0
  141. pynumgeo/catalogue/data/messages.json +24331 -0
  142. pynumgeo/cli/__init__.py +14 -0
  143. pynumgeo/cli/__main__.py +243 -0
  144. pynumgeo/deck/__init__.py +21 -0
  145. pynumgeo/deck/compare.py +181 -0
  146. pynumgeo/deck/deck.py +338 -0
  147. pynumgeo/deck/keyword.py +182 -0
  148. pynumgeo/deck/names.py +270 -0
  149. pynumgeo/io/__init__.py +14 -0
  150. pynumgeo/io/lexer.py +298 -0
  151. pynumgeo/io/numbers.py +125 -0
  152. pynumgeo/io/reader.py +997 -0
  153. pynumgeo/io/syntax.py +258 -0
  154. pynumgeo/io/writer.py +464 -0
  155. pynumgeo/issue.py +70 -0
  156. pynumgeo/mesh/__init__.py +59 -0
  157. pynumgeo/mesh/convert.py +573 -0
  158. pynumgeo/mesh/freecad_adapter.py +289 -0
  159. pynumgeo/mesh/mesh.py +384 -0
  160. pynumgeo/mesh/meshio_adapter.py +255 -0
  161. pynumgeo/mesh/quality.py +195 -0
  162. pynumgeo/mesh/topology.py +590 -0
  163. pynumgeo/py.typed +0 -0
  164. pynumgeo/results/__init__.py +78 -0
  165. pynumgeo/results/_fortran.py +89 -0
  166. pynumgeo/results/printfiles.py +617 -0
  167. pynumgeo/results/results.py +345 -0
  168. pynumgeo/results/sta.py +256 -0
  169. pynumgeo/results/tensors.py +75 -0
  170. pynumgeo/results/vtk.py +465 -0
  171. pynumgeo/solver/__init__.py +73 -0
  172. pynumgeo/solver/executable.py +237 -0
  173. pynumgeo/solver/logs.py +564 -0
  174. pynumgeo/solver/messages.py +285 -0
  175. pynumgeo/solver/outcome.py +650 -0
  176. pynumgeo/solver/result.py +267 -0
  177. pynumgeo/solver/runner.py +482 -0
  178. pynumgeo/validation/__init__.py +51 -0
  179. pynumgeo/validation/engine.py +121 -0
  180. pynumgeo/validation/issue.py +19 -0
  181. pynumgeo/validation/rules/__init__.py +17 -0
  182. pynumgeo/validation/rules/behaviour.py +3565 -0
  183. pynumgeo/validation/rules/core.py +491 -0
  184. pynumgeo/validation/rules/keywords.py +1085 -0
  185. pynumgeo-2026.2.0.dev2.dist-info/METADATA +103 -0
  186. pynumgeo-2026.2.0.dev2.dist-info/RECORD +190 -0
  187. pynumgeo-2026.2.0.dev2.dist-info/WHEEL +4 -0
  188. pynumgeo-2026.2.0.dev2.dist-info/entry_points.txt +2 -0
  189. pynumgeo-2026.2.0.dev2.dist-info/licenses/LICENSE +28 -0
  190. pynumgeo-2026.2.0.dev2.dist-info/licenses/NOTICE +19 -0
pynumgeo/__init__.py ADDED
@@ -0,0 +1,144 @@
1
+ # =~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~=~
2
+ # pynumgeo
3
+ # Python API for the finite element code numgeo
4
+ # Copyright (C) 2026 Jan Machacek
5
+ # =~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~=~
6
+ #
7
+ # Author: Jan Machacek
8
+ #
9
+ # pynumgeo writes, checks and runs numgeo input files and reads numgeo results. It follows the
10
+ # development of numgeo: new developments in the numgeo source code are taken over into the API, and a
11
+ # CI pipeline tests every change.
12
+ #
13
+ # License: BSD-3-Clause, see LICENSE.
14
+ # =~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~=~
15
+ """pynumgeo — Python API for the finite element code numgeo.
16
+
17
+ Read, build, validate and write numgeo input decks, run the solver and read its results::
18
+
19
+ import pynumgeo as ng
20
+
21
+ deck = ng.read("model.inp") # numgeo input -> Deck (mesh, materials, steps, ...)
22
+ issues = ng.validate(deck) # what numgeo would reject or read differently
23
+ ng.write(deck, "job/model.inp") # normal-case, deterministic numgeo input
24
+ res = ng.run(deck, "job", job="model") # run numgeo, judge the outcome from its logs
25
+ frames = ng.open_results("job", "model").frames()
26
+
27
+ Everything numgeo-specific (keywords, options, element types, constitutive models, messages) comes from
28
+ the catalogue (:mod:`pynumgeo.catalogue`), generated from the numgeo source. Submodules are imported
29
+ lazily, so ``import pynumgeo`` stays fast. The functions ``run`` and ``validate`` live in the subpackages
30
+ :mod:`pynumgeo.solver` and :mod:`pynumgeo.validation`; the subpackages are named differently from the
31
+ functions so that importing one never replaces ``pynumgeo.run`` or ``pynumgeo.validate`` by a module.
32
+ """
33
+
34
+ from __future__ import annotations
35
+
36
+ import importlib
37
+ from typing import TYPE_CHECKING, Any
38
+
39
+ from pynumgeo._version import NUMGEO_DOCS_COMMIT, NUMGEO_SOURCE_COMMIT, NUMGEO_VERSION, __version__
40
+
41
+ if TYPE_CHECKING: # pragma: no cover
42
+ from pynumgeo import catalogue
43
+ from pynumgeo.deck import Amplitude, Deck, Keyword, Material, Section, Step, diff
44
+ from pynumgeo.io.reader import (
45
+ FragmentResult,
46
+ ReadError,
47
+ ReadResult,
48
+ data_tokens,
49
+ parse,
50
+ parse_fragment,
51
+ parse_text,
52
+ read,
53
+ )
54
+ from pynumgeo.io.writer import WriteError, format_keyword, format_material, write, write_text, write_texts
55
+ from pynumgeo.issue import Issue
56
+ from pynumgeo.mesh import Mesh
57
+ from pynumgeo.results import open_results
58
+ from pynumgeo.solver import RunResult, RunStatus, run
59
+ from pynumgeo.validation import BuildProfile, validate
60
+
61
+ __all__ = [
62
+ "NUMGEO_DOCS_COMMIT",
63
+ "NUMGEO_SOURCE_COMMIT",
64
+ "NUMGEO_VERSION",
65
+ "Amplitude",
66
+ "BuildProfile",
67
+ "Deck",
68
+ "FragmentResult",
69
+ "Issue",
70
+ "Keyword",
71
+ "Material",
72
+ "Mesh",
73
+ "ReadError",
74
+ "ReadResult",
75
+ "RunResult",
76
+ "RunStatus",
77
+ "Section",
78
+ "Step",
79
+ "WriteError",
80
+ "__version__",
81
+ "catalogue",
82
+ "data_tokens",
83
+ "diff",
84
+ "format_keyword",
85
+ "format_material",
86
+ "open_results",
87
+ "parse",
88
+ "parse_fragment",
89
+ "parse_text",
90
+ "read",
91
+ "run",
92
+ "validate",
93
+ "write",
94
+ "write_text",
95
+ "write_texts",
96
+ ]
97
+
98
+ _LAZY = {
99
+ "catalogue": ("pynumgeo.catalogue", None),
100
+ "Amplitude": ("pynumgeo.deck", "Amplitude"),
101
+ "Deck": ("pynumgeo.deck", "Deck"),
102
+ "Keyword": ("pynumgeo.deck", "Keyword"),
103
+ "Material": ("pynumgeo.deck", "Material"),
104
+ "Section": ("pynumgeo.deck", "Section"),
105
+ "Step": ("pynumgeo.deck", "Step"),
106
+ "diff": ("pynumgeo.deck", "diff"),
107
+ "Mesh": ("pynumgeo.mesh", "Mesh"),
108
+ "Issue": ("pynumgeo.issue", "Issue"),
109
+ "ReadError": ("pynumgeo.io.reader", "ReadError"),
110
+ "ReadResult": ("pynumgeo.io.reader", "ReadResult"),
111
+ "FragmentResult": ("pynumgeo.io.reader", "FragmentResult"),
112
+ "parse_fragment": ("pynumgeo.io.reader", "parse_fragment"),
113
+ "data_tokens": ("pynumgeo.io.reader", "data_tokens"),
114
+ "parse": ("pynumgeo.io.reader", "parse"),
115
+ "parse_text": ("pynumgeo.io.reader", "parse_text"),
116
+ "read": ("pynumgeo.io.reader", "read"),
117
+ "WriteError": ("pynumgeo.io.writer", "WriteError"),
118
+ "write": ("pynumgeo.io.writer", "write"),
119
+ "write_text": ("pynumgeo.io.writer", "write_text"),
120
+ "write_texts": ("pynumgeo.io.writer", "write_texts"),
121
+ "format_keyword": ("pynumgeo.io.writer", "format_keyword"),
122
+ "format_material": ("pynumgeo.io.writer", "format_material"),
123
+ "BuildProfile": ("pynumgeo.validation", "BuildProfile"),
124
+ "validate": ("pynumgeo.validation", "validate"),
125
+ "run": ("pynumgeo.solver", "run"),
126
+ "RunResult": ("pynumgeo.solver", "RunResult"),
127
+ "RunStatus": ("pynumgeo.solver", "RunStatus"),
128
+ "open_results": ("pynumgeo.results", "open_results"),
129
+ }
130
+
131
+
132
+ def __getattr__(name: str) -> Any:
133
+ try:
134
+ mod, attr = _LAZY[name]
135
+ except KeyError:
136
+ raise AttributeError(f"module 'pynumgeo' has no attribute {name!r}") from None
137
+ m = importlib.import_module(mod)
138
+ value = m if attr is None else getattr(m, attr)
139
+ globals()[name] = value
140
+ return value
141
+
142
+
143
+ def __dir__() -> list[str]:
144
+ return sorted(__all__)
@@ -0,0 +1,77 @@
1
+ # =~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~=~
2
+ # pynumgeo
3
+ # Python API for the finite element code numgeo
4
+ # Copyright (C) 2026 Jan Machacek
5
+ # =~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~=~
6
+ #
7
+ # Author: Jan Machacek
8
+ #
9
+ # pynumgeo writes, checks and runs numgeo input files and reads numgeo results. It follows the
10
+ # development of numgeo: new developments in the numgeo source code are taken over into the API, and a
11
+ # CI pipeline tests every change.
12
+ #
13
+ # License: BSD-3-Clause, see LICENSE.
14
+ # =~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~=~
15
+ """What pynumgeo writes into every file it creates: program, version and author.
16
+
17
+ * Input files start with a banner of numgeo comment lines (``**``), in the style of the numgeo source
18
+ files: :func:`input_file_header`. numgeo cuts every line at ``**``, so the banner is not read.
19
+ * The console log of a run (``<job>.console.log``) starts with :func:`console_header`; the console
20
+ parser skips that line.
21
+ * The JSON reports of the command line carry :func:`provenance` under the key ``"pynumgeo"``.
22
+
23
+ The creation date is not written: the same deck always gives the same file.
24
+
25
+ Examples:
26
+ >>> print("\\n".join(input_file_header())) # doctest: +ELLIPSIS
27
+ ** =~~=~~=...=~=~
28
+ ...numgeo input file
29
+ ...Created with pynumgeo ..., the Python API for numgeo by Jan Machacek
30
+ ...Written for numgeo... (numgeo source ...)
31
+ ** =~~=~~=...=~=~
32
+ """
33
+
34
+ from __future__ import annotations
35
+
36
+ from pynumgeo._version import NUMGEO_SOURCE_COMMIT, NUMGEO_VERSION, __version__
37
+
38
+ __all__ = ["AUTHOR", "BANNER", "CONSOLE_MARK", "console_header", "input_file_header", "provenance"]
39
+
40
+ #: The author of pynumgeo.
41
+ AUTHOR = "Jan Machacek"
42
+ #: Banner line of the numgeo source files (103 characters).
43
+ BANNER = "=~~" * 33 + "=~=~"
44
+ #: Start of the first line of a console log written by pynumgeo.
45
+ CONSOLE_MARK = "pynumgeo "
46
+
47
+
48
+ def _centre(text: str) -> str:
49
+ return " " * max((len(BANNER) - len(text)) // 2, 0) + text
50
+
51
+
52
+ def input_file_header() -> list[str]:
53
+ """The comment lines at the top of every input file pynumgeo writes (each at most 106 characters)."""
54
+ lines = [
55
+ BANNER,
56
+ _centre("numgeo input file"),
57
+ _centre(f"Created with pynumgeo {__version__}, the Python API for numgeo by {AUTHOR}"),
58
+ _centre(f"Written for {NUMGEO_VERSION} (numgeo source {NUMGEO_SOURCE_COMMIT[:8]})"),
59
+ BANNER,
60
+ ]
61
+ return [f"** {ln}" for ln in lines]
62
+
63
+
64
+ def console_header(command: list[str]) -> str:
65
+ """The first line of ``<job>.console.log``: who recorded it, and the command that started numgeo."""
66
+ return f"{CONSOLE_MARK}{__version__} (Python API for numgeo by {AUTHOR}): console output of {' '.join(command)}"
67
+
68
+
69
+ def provenance() -> dict[str, str]:
70
+ """Program, version and author, plus the numgeo build pynumgeo was written for (JSON reports)."""
71
+ return {
72
+ "program": "pynumgeo",
73
+ "version": __version__,
74
+ "author": AUTHOR,
75
+ "numgeo_version": NUMGEO_VERSION,
76
+ "numgeo_source_commit": NUMGEO_SOURCE_COMMIT,
77
+ }
pynumgeo/_version.py ADDED
@@ -0,0 +1,28 @@
1
+ # =~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~=~
2
+ # pynumgeo
3
+ # Python API for the finite element code numgeo
4
+ # Copyright (C) 2026 Jan Machacek
5
+ # =~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~=~
6
+ #
7
+ # Author: Jan Machacek
8
+ #
9
+ # pynumgeo writes, checks and runs numgeo input files and reads numgeo results. It follows the
10
+ # development of numgeo: new developments in the numgeo source code are taken over into the API, and a
11
+ # CI pipeline tests every change.
12
+ #
13
+ # License: BSD-3-Clause, see LICENSE.
14
+ # =~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~=~
15
+ """Version of pynumgeo and of the numgeo source it was derived from.
16
+
17
+ pynumgeo follows the numgeo version: numgeo ``numgeo2026-v2`` corresponds to pynumgeo ``2026.2.x``
18
+ (``.devN`` until it is released together with numgeo).
19
+ """
20
+
21
+ __version__ = "2026.2.0.dev2"
22
+
23
+ #: numgeo version string this pynumgeo was derived from (console banner of the solver).
24
+ NUMGEO_VERSION = "numgeo2026-v2"
25
+ #: numgeo-src commit the catalogue was generated from.
26
+ NUMGEO_SOURCE_COMMIT = "834564ed77c2aa9ce5f6cdeabc03293c331520af"
27
+ #: numgeo documentation commit the bundled reference pages come from.
28
+ NUMGEO_DOCS_COMMIT = "eceee9749a1f0e47ff9aeedd50131707c4d7290a"