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.
- pynumgeo/__init__.py +144 -0
- pynumgeo/_provenance.py +77 -0
- pynumgeo/_version.py +28 -0
- pynumgeo/catalogue/__init__.py +466 -0
- pynumgeo/catalogue/data/catalogue.json +56012 -0
- pynumgeo/catalogue/data/docs/reference/accelerator.md +102 -0
- pynumgeo/catalogue/data/docs/reference/amplitude.md +124 -0
- pynumgeo/catalogue/data/docs/reference/assign_material.md +36 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/Uboundary.md +55 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/body-force.md +58 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/boundary.md +201 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/cload.md +75 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/connector_element.md +16 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/dload.md +241 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/dsload.md +378 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/flexible-boundary.md +115 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/index.md +134 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/mass_point.md +16 -0
- pynumgeo/catalogue/data/docs/reference/boundary-conditions/reaction_force.md +36 -0
- pynumgeo/catalogue/data/docs/reference/contacts/contact-options.md +25 -0
- pynumgeo/catalogue/data/docs/reference/contacts/contact-pair.md +88 -0
- pynumgeo/catalogue/data/docs/reference/contacts/fluid_interaction.md +21 -0
- pynumgeo/catalogue/data/docs/reference/contacts/index.md +28 -0
- pynumgeo/catalogue/data/docs/reference/contacts/interaction.md +214 -0
- pynumgeo/catalogue/data/docs/reference/controls.md +201 -0
- pynumgeo/catalogue/data/docs/reference/element/elements-beam.md +87 -0
- pynumgeo/catalogue/data/docs/reference/element/elements-shell.md +123 -0
- pynumgeo/catalogue/data/docs/reference/element/elements-u-truss.md +69 -0
- pynumgeo/catalogue/data/docs/reference/element/elements-u.md +56 -0
- pynumgeo/catalogue/data/docs/reference/element/elements-uU-sat.md +60 -0
- pynumgeo/catalogue/data/docs/reference/element/elements-up-sat.md +119 -0
- pynumgeo/catalogue/data/docs/reference/element/elements-up.md +118 -0
- pynumgeo/catalogue/data/docs/reference/element/elements-upU-sat.md +57 -0
- pynumgeo/catalogue/data/docs/reference/element/elements-upp.md +43 -0
- pynumgeo/catalogue/data/docs/reference/element/elements-ut.md +79 -0
- pynumgeo/catalogue/data/docs/reference/element/index.md +40 -0
- pynumgeo/catalogue/data/docs/reference/elset.md +37 -0
- pynumgeo/catalogue/data/docs/reference/embedded-regions/absorbed.md +46 -0
- pynumgeo/catalogue/data/docs/reference/embedded-regions/index.md +19 -0
- pynumgeo/catalogue/data/docs/reference/embedded-regions/interaction.md +184 -0
- pynumgeo/catalogue/data/docs/reference/equation.md +123 -0
- pynumgeo/catalogue/data/docs/reference/execute-command.md +12 -0
- pynumgeo/catalogue/data/docs/reference/extrapolation.md +33 -0
- pynumgeo/catalogue/data/docs/reference/index.md +140 -0
- pynumgeo/catalogue/data/docs/reference/initial-conditions/contact.md +11 -0
- pynumgeo/catalogue/data/docs/reference/initial-conditions/index.md +25 -0
- pynumgeo/catalogue/data/docs/reference/initial-conditions/pore-pressure.md +24 -0
- pynumgeo/catalogue/data/docs/reference/initial-conditions/state-variables.md +171 -0
- pynumgeo/catalogue/data/docs/reference/initial-conditions/stress.md +90 -0
- pynumgeo/catalogue/data/docs/reference/initial-conditions/temperature.md +28 -0
- pynumgeo/catalogue/data/docs/reference/initial-conditions/velocity-acceleration.md +45 -0
- pynumgeo/catalogue/data/docs/reference/initial-conditions/void-ratio.md +28 -0
- pynumgeo/catalogue/data/docs/reference/material/beam-properties.md +100 -0
- pynumgeo/catalogue/data/docs/reference/material/bishop.md +98 -0
- pynumgeo/catalogue/data/docs/reference/material/bulk_modulus.md +9 -0
- pynumgeo/catalogue/data/docs/reference/material/cavitation.md +17 -0
- pynumgeo/catalogue/data/docs/reference/material/damping.md +61 -0
- pynumgeo/catalogue/data/docs/reference/material/density.md +15 -0
- pynumgeo/catalogue/data/docs/reference/material/fpl-stabilisation.md +39 -0
- pynumgeo/catalogue/data/docs/reference/material/hourglass.md +92 -0
- pynumgeo/catalogue/data/docs/reference/material/hydraulic/brooks-corey.md +27 -0
- pynumgeo/catalogue/data/docs/reference/material/hydraulic/exponential.md +25 -0
- pynumgeo/catalogue/data/docs/reference/material/hydraulic/fredlund-xing.md +28 -0
- pynumgeo/catalogue/data/docs/reference/material/hydraulic/gallipoli-model.md +28 -0
- pynumgeo/catalogue/data/docs/reference/material/hydraulic/index.md +64 -0
- pynumgeo/catalogue/data/docs/reference/material/hydraulic/karlsruhe-model.md +38 -0
- pynumgeo/catalogue/data/docs/reference/material/hydraulic/van-genuchten.md +28 -0
- pynumgeo/catalogue/data/docs/reference/material/index.md +55 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/avhp.md +12 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/avisa.md +84 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/barotropic_elasticity.md +54 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/bathytropic-elasticity.md +113 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/bc-hypo-igs-sf.md +116 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/bingham.md +49 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/hardening_soil_MN.md +94 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/hardening_soil_MN_bricks.md +96 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/hca-sand.md +263 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/hypo-clay.md +13 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/hypoplasticity_gis.md +111 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/hypoplasticity_igs.md +181 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/hypoplasticity_isa-sf.md +126 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/hypoplasticity_isa.md +147 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/index.md +43 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/linear_elasticity.md +13 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/matsuoka_nakai.md +41 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/modified-cam-clay.md +166 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/mohr_coulomb.md +205 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/sanisand.md +154 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/sanisand_f.md +84 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/sanisand_msf.md +101 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/ta-ger.md +106 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical/thermal_elasticity.md +48 -0
- pynumgeo/catalogue/data/docs/reference/material/mechanical_viscosity.md +23 -0
- pynumgeo/catalogue/data/docs/reference/material/min_pressure.md +23 -0
- pynumgeo/catalogue/data/docs/reference/material/permeability/brooks-corey.md +24 -0
- pynumgeo/catalogue/data/docs/reference/material/permeability/fredlund-xing.md +34 -0
- pynumgeo/catalogue/data/docs/reference/material/permeability/index.md +27 -0
- pynumgeo/catalogue/data/docs/reference/material/permeability/logistic-fit.md +27 -0
- pynumgeo/catalogue/data/docs/reference/material/permeability/nguyen.md +25 -0
- pynumgeo/catalogue/data/docs/reference/material/permeability/van-genuchten.md +24 -0
- pynumgeo/catalogue/data/docs/reference/material/permeability.md +153 -0
- pynumgeo/catalogue/data/docs/reference/material/phantom_elasticity.md +25 -0
- pynumgeo/catalogue/data/docs/reference/material/shell-properties.md +64 -0
- pynumgeo/catalogue/data/docs/reference/material/specific-heat.md +24 -0
- pynumgeo/catalogue/data/docs/reference/material/thermal-capacity.md +22 -0
- pynumgeo/catalogue/data/docs/reference/material/thermal-conductivity.md +24 -0
- pynumgeo/catalogue/data/docs/reference/material/thermal-stabilisation.md +24 -0
- pynumgeo/catalogue/data/docs/reference/material/truss-properties.md +56 -0
- pynumgeo/catalogue/data/docs/reference/model-change/index.md +13 -0
- pynumgeo/catalogue/data/docs/reference/model-change/material.md +32 -0
- pynumgeo/catalogue/data/docs/reference/node.md +29 -0
- pynumgeo/catalogue/data/docs/reference/non-local.md +32 -0
- pynumgeo/catalogue/data/docs/reference/nset.md +60 -0
- pynumgeo/catalogue/data/docs/reference/output/field.md +203 -0
- pynumgeo/catalogue/data/docs/reference/output/index.md +56 -0
- pynumgeo/catalogue/data/docs/reference/output/print.md +158 -0
- pynumgeo/catalogue/data/docs/reference/read-state.md +8 -0
- pynumgeo/catalogue/data/docs/reference/reset.md +25 -0
- pynumgeo/catalogue/data/docs/reference/restart.md +73 -0
- pynumgeo/catalogue/data/docs/reference/solver.md +515 -0
- pynumgeo/catalogue/data/docs/reference/step/dynamic.md +65 -0
- pynumgeo/catalogue/data/docs/reference/step/explicit-dynamic.md +48 -0
- pynumgeo/catalogue/data/docs/reference/step/geostatic.md +14 -0
- pynumgeo/catalogue/data/docs/reference/step/index.md +83 -0
- pynumgeo/catalogue/data/docs/reference/step/reduction.md +32 -0
- pynumgeo/catalogue/data/docs/reference/step/static.md +27 -0
- pynumgeo/catalogue/data/docs/reference/step/transient-critical.md +20 -0
- pynumgeo/catalogue/data/docs/reference/step/transient.md +14 -0
- pynumgeo/catalogue/data/docs/reference/submodel.md +30 -0
- pynumgeo/catalogue/data/docs/reference/surface.md +28 -0
- pynumgeo/catalogue/data/docs/reference/termination.md +29 -0
- pynumgeo/catalogue/data/docs/reference/user/amplitude.md +48 -0
- pynumgeo/catalogue/data/docs/reference/user/boundary.md +58 -0
- pynumgeo/catalogue/data/docs/reference/user/contact.md +84 -0
- pynumgeo/catalogue/data/docs/reference/user/index.md +42 -0
- pynumgeo/catalogue/data/docs/reference/user/initial-statev.md +73 -0
- pynumgeo/catalogue/data/docs/reference/user/initial-stress.md +77 -0
- pynumgeo/catalogue/data/docs/reference/user/load.md +70 -0
- pynumgeo/catalogue/data/docs/reference/user/material.md +169 -0
- pynumgeo/catalogue/data/docs_index.json +136 -0
- pynumgeo/catalogue/data/messages.json +24331 -0
- pynumgeo/cli/__init__.py +14 -0
- pynumgeo/cli/__main__.py +243 -0
- pynumgeo/deck/__init__.py +21 -0
- pynumgeo/deck/compare.py +181 -0
- pynumgeo/deck/deck.py +338 -0
- pynumgeo/deck/keyword.py +182 -0
- pynumgeo/deck/names.py +270 -0
- pynumgeo/io/__init__.py +14 -0
- pynumgeo/io/lexer.py +298 -0
- pynumgeo/io/numbers.py +125 -0
- pynumgeo/io/reader.py +997 -0
- pynumgeo/io/syntax.py +258 -0
- pynumgeo/io/writer.py +464 -0
- pynumgeo/issue.py +70 -0
- pynumgeo/mesh/__init__.py +59 -0
- pynumgeo/mesh/convert.py +573 -0
- pynumgeo/mesh/freecad_adapter.py +289 -0
- pynumgeo/mesh/mesh.py +384 -0
- pynumgeo/mesh/meshio_adapter.py +255 -0
- pynumgeo/mesh/quality.py +195 -0
- pynumgeo/mesh/topology.py +590 -0
- pynumgeo/py.typed +0 -0
- pynumgeo/results/__init__.py +78 -0
- pynumgeo/results/_fortran.py +89 -0
- pynumgeo/results/printfiles.py +617 -0
- pynumgeo/results/results.py +345 -0
- pynumgeo/results/sta.py +256 -0
- pynumgeo/results/tensors.py +75 -0
- pynumgeo/results/vtk.py +465 -0
- pynumgeo/solver/__init__.py +73 -0
- pynumgeo/solver/executable.py +237 -0
- pynumgeo/solver/logs.py +564 -0
- pynumgeo/solver/messages.py +285 -0
- pynumgeo/solver/outcome.py +650 -0
- pynumgeo/solver/result.py +267 -0
- pynumgeo/solver/runner.py +482 -0
- pynumgeo/validation/__init__.py +51 -0
- pynumgeo/validation/engine.py +121 -0
- pynumgeo/validation/issue.py +19 -0
- pynumgeo/validation/rules/__init__.py +17 -0
- pynumgeo/validation/rules/behaviour.py +3565 -0
- pynumgeo/validation/rules/core.py +491 -0
- pynumgeo/validation/rules/keywords.py +1085 -0
- pynumgeo-2026.2.0.dev2.dist-info/METADATA +103 -0
- pynumgeo-2026.2.0.dev2.dist-info/RECORD +190 -0
- pynumgeo-2026.2.0.dev2.dist-info/WHEEL +4 -0
- pynumgeo-2026.2.0.dev2.dist-info/entry_points.txt +2 -0
- pynumgeo-2026.2.0.dev2.dist-info/licenses/LICENSE +28 -0
- 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__)
|
pynumgeo/_provenance.py
ADDED
|
@@ -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"
|