tensyl 0.1.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 (187) hide show
  1. tensyl-0.1.0/.gitignore +243 -0
  2. tensyl-0.1.0/.python-version +1 -0
  3. tensyl-0.1.0/CHANGELOG.md +19 -0
  4. tensyl-0.1.0/CONTRIBUTING.md +58 -0
  5. tensyl-0.1.0/LICENSE +21 -0
  6. tensyl-0.1.0/PKG-INFO +389 -0
  7. tensyl-0.1.0/README.md +360 -0
  8. tensyl-0.1.0/asv.conf.json +23 -0
  9. tensyl-0.1.0/benchmarks/__init__.py +1 -0
  10. tensyl-0.1.0/benchmarks/benchmarks.py +119 -0
  11. tensyl-0.1.0/docs/api/cells-and-sections.md +40 -0
  12. tensyl-0.1.0/docs/api/core.md +31 -0
  13. tensyl-0.1.0/docs/api/geometry-and-fields.md +24 -0
  14. tensyl-0.1.0/docs/api/homogenizers.md +16 -0
  15. tensyl-0.1.0/docs/api/io.md +15 -0
  16. tensyl-0.1.0/docs/api/materials.md +11 -0
  17. tensyl-0.1.0/docs/assets/brand/tensyl-logo.jpeg +0 -0
  18. tensyl-0.1.0/docs/assets/brand/tensyl-mark.png +0 -0
  19. tensyl-0.1.0/docs/assets/examples/cylinder-stiffness-map.png +0 -0
  20. tensyl-0.1.0/docs/assets/examples/ellipsoid-stiffness-map.png +0 -0
  21. tensyl-0.1.0/docs/assets/nemeth-treatise/fig-03-isogrid-stiffened-cylinders.jpg +0 -0
  22. tensyl-0.1.0/docs/assets/nemeth-treatise/fig-14-braced-orthogrid-cell.jpg +0 -0
  23. tensyl-0.1.0/docs/assets/nemeth-treatise/fig-17-isosceles-triangle-cell.jpg +0 -0
  24. tensyl-0.1.0/docs/assets/nemeth-treatise/fig-18-kagome-cell.jpg +0 -0
  25. tensyl-0.1.0/docs/assets/nemeth-treatise/fig-21-hexagon-cell.jpg +0 -0
  26. tensyl-0.1.0/docs/assets/nemeth-treatise/fig-23-star-cell.jpg +0 -0
  27. tensyl-0.1.0/docs/assets/sections/blade-section.svg +61 -0
  28. tensyl-0.1.0/docs/assets/sections/channel-section.svg +75 -0
  29. tensyl-0.1.0/docs/assets/sections/hat-section.svg +85 -0
  30. tensyl-0.1.0/docs/assets/sections/tee-section.svg +72 -0
  31. tensyl-0.1.0/docs/assets/sections/thin-wall-segment.svg +61 -0
  32. tensyl-0.1.0/docs/assets/sections/zee-section.svg +75 -0
  33. tensyl-0.1.0/docs/background/motivation.md +72 -0
  34. tensyl-0.1.0/docs/background/terminology.md +95 -0
  35. tensyl-0.1.0/docs/examples/orthogrid-panel.md +117 -0
  36. tensyl-0.1.0/docs/examples/sampled-stiffness-atlas.md +137 -0
  37. tensyl-0.1.0/docs/examples/scripts/stiffness_field_maps.py +713 -0
  38. tensyl-0.1.0/docs/examples/skin-only.md +79 -0
  39. tensyl-0.1.0/docs/examples/stiffness-field-maps.md +161 -0
  40. tensyl-0.1.0/docs/getting-started/first-abd-stiffness.md +59 -0
  41. tensyl-0.1.0/docs/getting-started/first-homogenized-cell.md +70 -0
  42. tensyl-0.1.0/docs/getting-started/installation.md +47 -0
  43. tensyl-0.1.0/docs/img/favicon.ico +0 -0
  44. tensyl-0.1.0/docs/index.md +84 -0
  45. tensyl-0.1.0/docs/javascripts/mathjax.js +13 -0
  46. tensyl-0.1.0/docs/references.md +43 -0
  47. tensyl-0.1.0/docs/theory/conventions.md +116 -0
  48. tensyl-0.1.0/docs/theory/equivalent-stiffness.md +112 -0
  49. tensyl-0.1.0/docs/theory/tangent-plane-homogenization.md +216 -0
  50. tensyl-0.1.0/docs/theory/validity.md +71 -0
  51. tensyl-0.1.0/docs/user-guide/beam-sections-and-cells.md +285 -0
  52. tensyl-0.1.0/docs/user-guide/external-workflows.md +59 -0
  53. tensyl-0.1.0/docs/user-guide/geometry-and-fields.md +212 -0
  54. tensyl-0.1.0/docs/user-guide/homogenization.md +163 -0
  55. tensyl-0.1.0/docs/user-guide/materials-and-laminates.md +54 -0
  56. tensyl-0.1.0/docs/user-guide/solver-handoff.md +329 -0
  57. tensyl-0.1.0/docs/user-guide/sp8007-data-handoff.md +263 -0
  58. tensyl-0.1.0/docs/user-guide/units-and-consistency.md +59 -0
  59. tensyl-0.1.0/docs/validation/index.md +50 -0
  60. tensyl-0.1.0/mkdocs.yml +71 -0
  61. tensyl-0.1.0/pyproject.toml +119 -0
  62. tensyl-0.1.0/scripts/__init__.py +1 -0
  63. tensyl-0.1.0/scripts/generate_section_diagrams.py +725 -0
  64. tensyl-0.1.0/src/tensyl/__init__.py +171 -0
  65. tensyl-0.1.0/src/tensyl/_version.py +17 -0
  66. tensyl-0.1.0/src/tensyl/cells/__init__.py +45 -0
  67. tensyl-0.1.0/src/tensyl/cells/tangent_plane.py +863 -0
  68. tensyl-0.1.0/src/tensyl/constitutive.py +21 -0
  69. tensyl-0.1.0/src/tensyl/conventions.py +10 -0
  70. tensyl-0.1.0/src/tensyl/core/__init__.py +59 -0
  71. tensyl-0.1.0/src/tensyl/core/_validation.py +119 -0
  72. tensyl-0.1.0/src/tensyl/core/constitutive.py +466 -0
  73. tensyl-0.1.0/src/tensyl/core/conventions.py +145 -0
  74. tensyl-0.1.0/src/tensyl/core/rotations.py +125 -0
  75. tensyl-0.1.0/src/tensyl/core/typing.py +43 -0
  76. tensyl-0.1.0/src/tensyl/fields/__init__.py +21 -0
  77. tensyl-0.1.0/src/tensyl/fields/stiffness_field.py +428 -0
  78. tensyl-0.1.0/src/tensyl/geometry/__init__.py +23 -0
  79. tensyl-0.1.0/src/tensyl/geometry/surfaces.py +510 -0
  80. tensyl-0.1.0/src/tensyl/homogenizers/__init__.py +33 -0
  81. tensyl-0.1.0/src/tensyl/homogenizers/tangent_plane.py +507 -0
  82. tensyl-0.1.0/src/tensyl/io/__init__.py +33 -0
  83. tensyl-0.1.0/src/tensyl/io/schema.py +578 -0
  84. tensyl-0.1.0/src/tensyl/laminates.py +5 -0
  85. tensyl-0.1.0/src/tensyl/materials/__init__.py +13 -0
  86. tensyl-0.1.0/src/tensyl/materials/base.py +177 -0
  87. tensyl-0.1.0/src/tensyl/materials/laminates.py +162 -0
  88. tensyl-0.1.0/src/tensyl/py.typed +1 -0
  89. tensyl-0.1.0/src/tensyl/rotations.py +21 -0
  90. tensyl-0.1.0/src/tensyl/sections/__init__.py +27 -0
  91. tensyl-0.1.0/src/tensyl/sections/beam.py +61 -0
  92. tensyl-0.1.0/src/tensyl/sections/thin_wall.py +505 -0
  93. tensyl-0.1.0/src/tensyl/typing.py +17 -0
  94. tensyl-0.1.0/src/tensyl/verification/__init__.py +13 -0
  95. tensyl-0.1.0/src/tensyl/verification/invariants.py +85 -0
  96. tensyl-0.1.0/tests/__init__.py +1 -0
  97. tensyl-0.1.0/tests/_helpers.py +47 -0
  98. tensyl-0.1.0/tests/data/external_workflows/v2_abd_stiffness.json +154 -0
  99. tensyl-0.1.0/tests/data/external_workflows/v2_abd_stiffness.yaml +119 -0
  100. tensyl-0.1.0/tests/data/external_workflows/v2_homogenization_result.json +181 -0
  101. tensyl-0.1.0/tests/data/external_workflows/v2_homogenization_result.yaml +140 -0
  102. tensyl-0.1.0/tests/data/nemeth_phase3_cases.json +44 -0
  103. tensyl-0.1.0/tests/docs_examples/test_public_examples.py +436 -0
  104. tensyl-0.1.0/tests/test_constitutive.py +217 -0
  105. tensyl-0.1.0/tests/test_conventions.py +29 -0
  106. tensyl-0.1.0/tests/test_fields.py +344 -0
  107. tensyl-0.1.0/tests/test_geometry.py +155 -0
  108. tensyl-0.1.0/tests/test_homogenizers.py +220 -0
  109. tensyl-0.1.0/tests/test_import.py +27 -0
  110. tensyl-0.1.0/tests/test_import_boundaries.py +74 -0
  111. tensyl-0.1.0/tests/test_io.py +280 -0
  112. tensyl-0.1.0/tests/test_laminates.py +55 -0
  113. tensyl-0.1.0/tests/test_phase3_cells.py +328 -0
  114. tensyl-0.1.0/tests/test_rotations.py +65 -0
  115. tensyl-0.1.0/tests/test_section_diagrams.py +38 -0
  116. tensyl-0.1.0/tests/test_thin_wall_sections.py +164 -0
  117. tensyl-0.1.0/tests/test_validation_calculix_parser.py +140 -0
  118. tensyl-0.1.0/tests/test_validation_comparison.py +27 -0
  119. tensyl-0.1.0/tests/test_validation_decks.py +172 -0
  120. tensyl-0.1.0/tests/test_validation_lab.py +83 -0
  121. tensyl-0.1.0/tests/test_validation_local_abd.py +85 -0
  122. tensyl-0.1.0/tests/test_validation_scripts.py +125 -0
  123. tensyl-0.1.0/tests/test_validation_solver_extraction.py +149 -0
  124. tensyl-0.1.0/tests/test_validation_solvers.py +66 -0
  125. tensyl-0.1.0/uv.lock +1208 -0
  126. tensyl-0.1.0/validation/README.md +46 -0
  127. tensyl-0.1.0/validation/artifacts/committed/README.md +7 -0
  128. tensyl-0.1.0/validation/artifacts/committed/barrels/orthogrid_axial_smeared/manifest.json +47 -0
  129. tensyl-0.1.0/validation/artifacts/committed/barrels/orthogrid_axial_smeared/metrics.json +30 -0
  130. tensyl-0.1.0/validation/artifacts/committed/barrels/orthogrid_axial_smeared/smeared_response.json +95 -0
  131. tensyl-0.1.0/validation/artifacts/committed/flat_panels/orthogrid_axial_smeared/manifest.json +47 -0
  132. tensyl-0.1.0/validation/artifacts/committed/flat_panels/orthogrid_axial_smeared/metrics.json +25 -0
  133. tensyl-0.1.0/validation/artifacts/committed/flat_panels/orthogrid_axial_smeared/smeared_response.json +88 -0
  134. tensyl-0.1.0/validation/artifacts/committed/gallery_summary.json +176 -0
  135. tensyl-0.1.0/validation/artifacts/committed/local_abd/README.md +26 -0
  136. tensyl-0.1.0/validation/artifacts/committed/local_abd/isogrid_equilateral/manifest.json +38 -0
  137. tensyl-0.1.0/validation/artifacts/committed/local_abd/isogrid_equilateral/metrics.json +33 -0
  138. tensyl-0.1.0/validation/artifacts/committed/local_abd/isogrid_equilateral/target_abd.json +179 -0
  139. tensyl-0.1.0/validation/artifacts/committed/local_abd/orthogrid_eccentric/manifest.json +38 -0
  140. tensyl-0.1.0/validation/artifacts/committed/local_abd/orthogrid_eccentric/metrics.json +34 -0
  141. tensyl-0.1.0/validation/artifacts/committed/local_abd/orthogrid_eccentric/target_abd.json +181 -0
  142. tensyl-0.1.0/validation/artifacts/committed/local_abd/orthogrid_zero_eccentricity/manifest.json +38 -0
  143. tensyl-0.1.0/validation/artifacts/committed/local_abd/orthogrid_zero_eccentricity/metrics.json +33 -0
  144. tensyl-0.1.0/validation/artifacts/committed/local_abd/orthogrid_zero_eccentricity/target_abd.json +180 -0
  145. tensyl-0.1.0/validation/artifacts/committed/local_abd/skin_only/README.md +41 -0
  146. tensyl-0.1.0/validation/artifacts/committed/local_abd/skin_only/abd6_comparison_table.csv +37 -0
  147. tensyl-0.1.0/validation/artifacts/committed/local_abd/skin_only/abd6_comparison_table.json +428 -0
  148. tensyl-0.1.0/validation/artifacts/committed/local_abd/skin_only/comparison_metrics.json +12 -0
  149. tensyl-0.1.0/validation/artifacts/committed/local_abd/skin_only/extracted_abd.json +123 -0
  150. tensyl-0.1.0/validation/artifacts/committed/local_abd/skin_only/extraction_manifest.json +62 -0
  151. tensyl-0.1.0/validation/artifacts/committed/local_abd/skin_only/manifest.json +40 -0
  152. tensyl-0.1.0/validation/artifacts/committed/local_abd/skin_only/metrics.json +31 -0
  153. tensyl-0.1.0/validation/artifacts/committed/local_abd/skin_only/target_abd.json +165 -0
  154. tensyl-0.1.0/validation/artifacts/committed/local_abd/unidirectional/manifest.json +38 -0
  155. tensyl-0.1.0/validation/artifacts/committed/local_abd/unidirectional/metrics.json +33 -0
  156. tensyl-0.1.0/validation/artifacts/committed/local_abd/unidirectional/target_abd.json +179 -0
  157. tensyl-0.1.0/validation/cases/barrels/orthogrid_axial_smeared.yml +75 -0
  158. tensyl-0.1.0/validation/cases/flat_panels/orthogrid_axial_smeared.yml +63 -0
  159. tensyl-0.1.0/validation/cases/local_abd/isogrid_equilateral.yml +125 -0
  160. tensyl-0.1.0/validation/cases/local_abd/orthogrid_eccentric.yml +133 -0
  161. tensyl-0.1.0/validation/cases/local_abd/orthogrid_zero_eccentricity.yml +132 -0
  162. tensyl-0.1.0/validation/cases/local_abd/skin_only.yml +140 -0
  163. tensyl-0.1.0/validation/cases/local_abd/unidirectional.yml +122 -0
  164. tensyl-0.1.0/validation/cases/smoke/skin_only.yml +13 -0
  165. tensyl-0.1.0/validation/lib/tensyl_validation/__init__.py +25 -0
  166. tensyl-0.1.0/validation/lib/tensyl_validation/artifacts.py +70 -0
  167. tensyl-0.1.0/validation/lib/tensyl_validation/barrels.py +312 -0
  168. tensyl-0.1.0/validation/lib/tensyl_validation/calculix/__init__.py +43 -0
  169. tensyl-0.1.0/validation/lib/tensyl_validation/calculix/decks.py +449 -0
  170. tensyl-0.1.0/validation/lib/tensyl_validation/calculix/parsers.py +416 -0
  171. tensyl-0.1.0/validation/lib/tensyl_validation/cases.py +133 -0
  172. tensyl-0.1.0/validation/lib/tensyl_validation/flat_panels.py +272 -0
  173. tensyl-0.1.0/validation/lib/tensyl_validation/gmsh/__init__.py +5 -0
  174. tensyl-0.1.0/validation/lib/tensyl_validation/gmsh/geometry.py +96 -0
  175. tensyl-0.1.0/validation/lib/tensyl_validation/local_abd.py +402 -0
  176. tensyl-0.1.0/validation/lib/tensyl_validation/local_abd_solver.py +505 -0
  177. tensyl-0.1.0/validation/lib/tensyl_validation/metrics.py +152 -0
  178. tensyl-0.1.0/validation/lib/tensyl_validation/solvers.py +209 -0
  179. tensyl-0.1.0/validation/scripts/build_gallery_summary.py +169 -0
  180. tensyl-0.1.0/validation/scripts/build_skin_only_abd6_comparison.py +234 -0
  181. tensyl-0.1.0/validation/scripts/check_solvers.py +43 -0
  182. tensyl-0.1.0/validation/scripts/compare_case.py +58 -0
  183. tensyl-0.1.0/validation/scripts/run_case.py +34 -0
  184. tensyl-0.1.0/validation/scripts/run_local_abd_solver.py +95 -0
  185. tensyl-0.1.0/validation/scripts/run_matrix.py +50 -0
  186. tensyl-0.1.0/validation/scripts/setup_solvers.py +101 -0
  187. tensyl-0.1.0/validation/solver-environment.yml +7 -0
@@ -0,0 +1,243 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # macOS
7
+ .DS_Store
8
+
9
+ # C extensions
10
+ *.so
11
+
12
+ # Distribution / packaging
13
+ .Python
14
+ build/
15
+ develop-eggs/
16
+ dist/
17
+ downloads/
18
+ eggs/
19
+ .eggs/
20
+ lib/
21
+ lib64/
22
+ parts/
23
+ sdist/
24
+ var/
25
+ wheels/
26
+ share/python-wheels/
27
+ *.egg-info/
28
+ .installed.cfg
29
+ *.egg
30
+ MANIFEST
31
+
32
+ # PyInstaller
33
+ # Usually these files are written by a python script from a template
34
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
35
+ *.manifest
36
+ *.spec
37
+
38
+ # Installer logs
39
+ pip-log.txt
40
+ pip-delete-this-directory.txt
41
+
42
+ # Unit test / coverage reports
43
+ htmlcov/
44
+ .tox/
45
+ .nox/
46
+ .coverage
47
+ .coverage.*
48
+ .cache
49
+ nosetests.xml
50
+ coverage.xml
51
+ *.cover
52
+ *.py.cover
53
+ *.lcov
54
+ .hypothesis/
55
+ .pytest_cache/
56
+ cover/
57
+
58
+ # Translations
59
+ *.mo
60
+ *.pot
61
+
62
+ # Django stuff:
63
+ *.log
64
+ local_settings.py
65
+ db.sqlite3
66
+ db.sqlite3-journal
67
+
68
+ # Flask stuff:
69
+ instance/
70
+ .webassets-cache
71
+
72
+ # Scrapy stuff:
73
+ .scrapy
74
+
75
+ # Sphinx documentation
76
+ docs/_build/
77
+
78
+ # PyBuilder
79
+ .pybuilder/
80
+ target/
81
+
82
+ # Jupyter Notebook
83
+ .ipynb_checkpoints
84
+
85
+ # IPython
86
+ profile_default/
87
+ ipython_config.py
88
+
89
+ # pyenv
90
+ # For a library or package, you might want to ignore these files since the code is
91
+ # intended to run in multiple environments; otherwise, check them in:
92
+ # .python-version
93
+
94
+ # pipenv
95
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
96
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
97
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
98
+ # install all needed dependencies.
99
+ # Pipfile.lock
100
+
101
+ # UV
102
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
103
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
104
+ # commonly ignored for libraries.
105
+ # uv.lock
106
+
107
+ # poetry
108
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
109
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
110
+ # commonly ignored for libraries.
111
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
112
+ # poetry.lock
113
+ # poetry.toml
114
+
115
+ # pdm
116
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
117
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
118
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
119
+ # pdm.lock
120
+ # pdm.toml
121
+ .pdm-python
122
+ .pdm-build/
123
+
124
+ # pixi
125
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
126
+ # pixi.lock
127
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
128
+ # in the .venv directory. It is recommended not to include this directory in version control.
129
+ .pixi/*
130
+ !.pixi/config.toml
131
+
132
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
133
+ __pypackages__/
134
+
135
+ # Celery stuff
136
+ celerybeat-schedule*
137
+ celerybeat.pid
138
+
139
+ # Redis
140
+ *.rdb
141
+ *.aof
142
+ *.pid
143
+
144
+ # RabbitMQ
145
+ mnesia/
146
+ rabbitmq/
147
+ rabbitmq-data/
148
+
149
+ # ActiveMQ
150
+ activemq-data/
151
+
152
+ # SageMath parsed files
153
+ *.sage.py
154
+
155
+ # Environments
156
+ .env
157
+ .envrc
158
+ .venv
159
+ env/
160
+ venv/
161
+ ENV/
162
+ env.bak/
163
+ venv.bak/
164
+
165
+ # Spyder project settings
166
+ .spyderproject
167
+ .spyproject
168
+
169
+ # Rope project settings
170
+ .ropeproject
171
+
172
+ # mkdocs documentation
173
+ /site
174
+
175
+ # ASV benchmark environments and results
176
+ .asv/
177
+
178
+ # FEM validation local solver environments and scratch artifacts
179
+ validation/.solver-env/
180
+ validation/artifacts/scratch/
181
+ !validation/lib/
182
+ !validation/lib/**
183
+ validation/lib/**/__pycache__/
184
+ validation/lib/**/*.py[codz]
185
+
186
+ # Obsidian local vault state
187
+ docs/.obsidian/
188
+
189
+ # Local AI agent workspace
190
+ AGENTS.md
191
+ .claude/
192
+ docs/llm_wiki/
193
+ docs/internal/
194
+
195
+ # mypy
196
+ .mypy_cache/
197
+ .dmypy.json
198
+ dmypy.json
199
+
200
+ # Pyre type checker
201
+ .pyre/
202
+
203
+ # pytype static type analyzer
204
+ .pytype/
205
+
206
+ # Cython debug symbols
207
+ cython_debug/
208
+
209
+ # PyCharm
210
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
211
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
212
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
213
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
214
+ # .idea/
215
+
216
+ # Abstra
217
+ # Abstra is an AI-powered process automation framework.
218
+ # Ignore directories containing user credentials, local state, and settings.
219
+ # Learn more at https://abstra.io/docs
220
+ .abstra/
221
+
222
+ # Visual Studio Code
223
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
224
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
225
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
226
+ # you could uncomment the following to ignore the entire vscode folder
227
+ # .vscode/
228
+ # Temporary file for partial code execution
229
+ tempCodeRunnerFile.py
230
+
231
+ # Ruff stuff:
232
+ .ruff_cache/
233
+
234
+ # PyPI configuration file
235
+ .pypirc
236
+
237
+ # Marimo
238
+ marimo/_static/
239
+ marimo/_lsp/
240
+ __marimo__/
241
+
242
+ # Streamlit
243
+ .streamlit/secrets.toml
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,19 @@
1
+ # Changelog
2
+
3
+ All notable user-facing changes to Tensyl are recorded here.
4
+
5
+ Tensyl follows pre-1.0 semantic versioning: public APIs may still change between
6
+ minor versions, while patch releases should stay backward compatible except for
7
+ bug fixes that correct clearly wrong behavior.
8
+
9
+ ## 0.1.0 - 2026-06-29
10
+
11
+ Initial public PyPI release.
12
+
13
+ - Package `tensyl` for Python 3.12 and later.
14
+ - Provide core ABD stiffness models, strain/resultant conventions, rotations,
15
+ materials, laminates, sections, tangent-plane cells, homogenizers, geometry
16
+ surfaces, stiffness fields, and solver-neutral YAML/JSON I/O.
17
+ - Include validation fixtures and formal MkDocs documentation for mechanics
18
+ assumptions, units, examples, and external-workflow handoff.
19
+ - Publish under the MIT license.
@@ -0,0 +1,58 @@
1
+ # Contributing
2
+
3
+ Tensyl is a Python 3.12+ scientific library. The public import name is
4
+ `tensyl`.
5
+
6
+ ## Development Setup
7
+
8
+ Use `uv` for dependency management and command execution:
9
+
10
+ ```bash
11
+ uv sync --dev
12
+ ```
13
+
14
+ Run the full local verification set before opening a pull request:
15
+
16
+ ```bash
17
+ uv run ruff check .
18
+ uv run ruff format --check .
19
+ uv run ty check
20
+ uv run pytest
21
+ uv run mkdocs build --strict
22
+ ```
23
+
24
+ Documentation is part of the product. Changes that alter behavior, public APIs,
25
+ mechanics assumptions, examples, or release workflows should update the relevant
26
+ documentation in the same change.
27
+
28
+ ## Packaging Checks
29
+
30
+ Build the release artifacts locally with:
31
+
32
+ ```bash
33
+ uv build --out-dir dist
34
+ uvx twine check dist/*
35
+ ```
36
+
37
+ For an install smoke test, use a fresh temporary environment and install the
38
+ built wheel:
39
+
40
+ ```bash
41
+ uv venv /tmp/tensyl-wheel-smoke
42
+ uv pip install --python /tmp/tensyl-wheel-smoke/bin/python dist/tensyl-*.whl
43
+ /tmp/tensyl-wheel-smoke/bin/python -c "import tensyl; print(tensyl.__version__)"
44
+ ```
45
+
46
+ ## Release Process
47
+
48
+ Releases are built from Git tags and published to PyPI through Trusted
49
+ Publishing. Do not add PyPI API tokens to the repository.
50
+
51
+ 1. Confirm the verification commands pass on `main`.
52
+ 2. Confirm the PyPI project name `tensyl` still points to this project.
53
+ 3. Create an annotated tag such as `v0.1.0`.
54
+ 4. Push the tag to GitHub.
55
+ 5. Approve the `pypi` environment if GitHub requests approval.
56
+ 6. Install the published wheel in a fresh environment and run a smoke import.
57
+
58
+ Release notes should be reflected in `CHANGELOG.md` before the tag is created.
tensyl-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Sergey Rogachev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.