materforge 0.5.5__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 (193) hide show
  1. materforge-0.5.5/.github/workflows/ci.yml +82 -0
  2. materforge-0.5.5/.readthedocs.yml +30 -0
  3. materforge-0.5.5/AUTHORS.txt +5 -0
  4. materforge-0.5.5/CHANGELOG.md +53 -0
  5. materforge-0.5.5/CITATION.cff +25 -0
  6. materforge-0.5.5/CONTRIBUTING.md +114 -0
  7. materforge-0.5.5/LICENSE +28 -0
  8. materforge-0.5.5/MANIFEST.in +38 -0
  9. materforge-0.5.5/PKG-INFO +228 -0
  10. materforge-0.5.5/README.md +159 -0
  11. materforge-0.5.5/docs/_build/html/.buildinfo +4 -0
  12. materforge-0.5.5/docs/_build/html/.doctrees/environment.pickle +0 -0
  13. materforge-0.5.5/docs/_build/html/.doctrees/explanation/design_philosophy.doctree +0 -0
  14. materforge-0.5.5/docs/_build/html/.doctrees/explanation/material_properties.doctree +0 -0
  15. materforge-0.5.5/docs/_build/html/.doctrees/how-to/define_materials.doctree +0 -0
  16. materforge-0.5.5/docs/_build/html/.doctrees/how-to/energy_temperature_conversion.doctree +0 -0
  17. materforge-0.5.5/docs/_build/html/.doctrees/index.doctree +0 -0
  18. materforge-0.5.5/docs/_build/html/.doctrees/reference/api/material.doctree +0 -0
  19. materforge-0.5.5/docs/_build/html/.doctrees/reference/api.doctree +0 -0
  20. materforge-0.5.5/docs/_build/html/.doctrees/reference/yaml_schema.doctree +0 -0
  21. materforge-0.5.5/docs/_build/html/.doctrees/tutorials/first_simulation.doctree +0 -0
  22. materforge-0.5.5/docs/_build/html/.doctrees/tutorials/getting_started.doctree +0 -0
  23. materforge-0.5.5/docs/_build/html/_modules/index.html +122 -0
  24. materforge-0.5.5/docs/_build/html/_modules/materforge/algorithms/interpolation.html +220 -0
  25. materforge-0.5.5/docs/_build/html/_modules/materforge/algorithms/piecewise_builder.html +384 -0
  26. materforge-0.5.5/docs/_build/html/_modules/materforge/algorithms/piecewise_inverter.html +341 -0
  27. materforge-0.5.5/docs/_build/html/_modules/materforge/algorithms/regression_processor.html +310 -0
  28. materforge-0.5.5/docs/_build/html/_modules/materforge/core/elements.html +212 -0
  29. materforge-0.5.5/docs/_build/html/_modules/materforge/core/exceptions.html +146 -0
  30. materforge-0.5.5/docs/_build/html/_modules/materforge/core/materials.html +565 -0
  31. materforge-0.5.5/docs/_build/html/_modules/materforge/core/symbol_registry.html +154 -0
  32. materforge-0.5.5/docs/_build/html/_modules/materforge/parsing/api.html +453 -0
  33. materforge-0.5.5/docs/_build/html/_modules/materforge/parsing/config/material_yaml_parser.html +519 -0
  34. materforge-0.5.5/docs/_build/html/_modules/materforge/parsing/processors/property_processor.html +250 -0
  35. materforge-0.5.5/docs/_build/html/_modules/materforge/parsing/validation/property_type_detector.html +359 -0
  36. materforge-0.5.5/docs/_build/html/_modules/materforge/visualization/plotters.html +508 -0
  37. materforge-0.5.5/docs/_build/html/_sources/explanation/design_philosophy.md.txt +234 -0
  38. materforge-0.5.5/docs/_build/html/_sources/explanation/material_properties.md.txt +240 -0
  39. materforge-0.5.5/docs/_build/html/_sources/how-to/define_materials.md.txt +518 -0
  40. materforge-0.5.5/docs/_build/html/_sources/how-to/energy_temperature_conversion.md.txt +70 -0
  41. materforge-0.5.5/docs/_build/html/_sources/index.rst.txt +60 -0
  42. materforge-0.5.5/docs/_build/html/_sources/reference/api/material.md.txt +275 -0
  43. materforge-0.5.5/docs/_build/html/_sources/reference/api.rst.txt +60 -0
  44. materforge-0.5.5/docs/_build/html/_sources/reference/yaml_schema.md.txt +197 -0
  45. materforge-0.5.5/docs/_build/html/_sources/tutorials/first_simulation.md.txt +143 -0
  46. materforge-0.5.5/docs/_build/html/_sources/tutorials/getting_started.md.txt +117 -0
  47. materforge-0.5.5/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  48. materforge-0.5.5/docs/_build/html/_static/basic.css +914 -0
  49. materforge-0.5.5/docs/_build/html/_static/css/badge_only.css +1 -0
  50. materforge-0.5.5/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  51. materforge-0.5.5/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  52. materforge-0.5.5/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  53. materforge-0.5.5/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  54. materforge-0.5.5/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  55. materforge-0.5.5/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  56. materforge-0.5.5/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  57. materforge-0.5.5/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  58. materforge-0.5.5/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  59. materforge-0.5.5/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  60. materforge-0.5.5/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  61. materforge-0.5.5/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  62. materforge-0.5.5/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  63. materforge-0.5.5/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  64. materforge-0.5.5/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  65. materforge-0.5.5/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  66. materforge-0.5.5/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  67. materforge-0.5.5/docs/_build/html/_static/css/theme.css +4 -0
  68. materforge-0.5.5/docs/_build/html/_static/doctools.js +149 -0
  69. materforge-0.5.5/docs/_build/html/_static/documentation_options.js +13 -0
  70. materforge-0.5.5/docs/_build/html/_static/file.png +0 -0
  71. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
  72. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  73. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
  74. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  75. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  76. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  77. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  78. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  79. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
  80. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  81. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
  82. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  83. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
  84. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  85. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
  86. materforge-0.5.5/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  87. materforge-0.5.5/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  88. materforge-0.5.5/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  89. materforge-0.5.5/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  90. materforge-0.5.5/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  91. materforge-0.5.5/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  92. materforge-0.5.5/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  93. materforge-0.5.5/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  94. materforge-0.5.5/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  95. materforge-0.5.5/docs/_build/html/_static/jquery.js +2 -0
  96. materforge-0.5.5/docs/_build/html/_static/js/badge_only.js +1 -0
  97. materforge-0.5.5/docs/_build/html/_static/js/theme.js +1 -0
  98. materforge-0.5.5/docs/_build/html/_static/js/versions.js +228 -0
  99. materforge-0.5.5/docs/_build/html/_static/language_data.js +192 -0
  100. materforge-0.5.5/docs/_build/html/_static/minus.png +0 -0
  101. materforge-0.5.5/docs/_build/html/_static/plus.png +0 -0
  102. materforge-0.5.5/docs/_build/html/_static/pygments.css +75 -0
  103. materforge-0.5.5/docs/_build/html/_static/searchtools.js +632 -0
  104. materforge-0.5.5/docs/_build/html/_static/sphinx_highlight.js +154 -0
  105. materforge-0.5.5/docs/_build/html/explanation/design_philosophy.html +488 -0
  106. materforge-0.5.5/docs/_build/html/explanation/material_properties.html +433 -0
  107. materforge-0.5.5/docs/_build/html/genindex.html +396 -0
  108. materforge-0.5.5/docs/_build/html/how-to/define_materials.html +667 -0
  109. materforge-0.5.5/docs/_build/html/how-to/energy_temperature_conversion.html +203 -0
  110. materforge-0.5.5/docs/_build/html/index.html +404 -0
  111. materforge-0.5.5/docs/_build/html/objects.inv +0 -0
  112. materforge-0.5.5/docs/_build/html/py-modindex.html +149 -0
  113. materforge-0.5.5/docs/_build/html/reference/api/material.html +406 -0
  114. materforge-0.5.5/docs/_build/html/reference/api.html +2701 -0
  115. materforge-0.5.5/docs/_build/html/reference/yaml_schema.html +389 -0
  116. materforge-0.5.5/docs/_build/html/search.html +129 -0
  117. materforge-0.5.5/docs/_build/html/searchindex.js +1 -0
  118. materforge-0.5.5/docs/_build/html/tutorials/first_simulation.html +278 -0
  119. materforge-0.5.5/docs/_build/html/tutorials/getting_started.html +238 -0
  120. materforge-0.5.5/docs/conf.py +72 -0
  121. materforge-0.5.5/docs/explanation/design_philosophy.md +234 -0
  122. materforge-0.5.5/docs/explanation/material_properties.md +240 -0
  123. materforge-0.5.5/docs/how-to/define_materials.md +518 -0
  124. materforge-0.5.5/docs/how-to/energy_temperature_conversion.md +70 -0
  125. materforge-0.5.5/docs/index.rst +60 -0
  126. materforge-0.5.5/docs/reference/api/material.md +275 -0
  127. materforge-0.5.5/docs/reference/api.rst +60 -0
  128. materforge-0.5.5/docs/reference/yaml_schema.md +197 -0
  129. materforge-0.5.5/docs/requirements.txt +5 -0
  130. materforge-0.5.5/docs/tutorials/first_simulation.md +143 -0
  131. materforge-0.5.5/docs/tutorials/getting_started.md +117 -0
  132. materforge-0.5.5/examples/__init__.py +0 -0
  133. materforge-0.5.5/examples/material_properties_demo.py +467 -0
  134. materforge-0.5.5/examples/modular_demo.py +725 -0
  135. materforge-0.5.5/pyproject.toml +117 -0
  136. materforge-0.5.5/setup.cfg +4 -0
  137. materforge-0.5.5/src/materforge/__init__.py +96 -0
  138. materforge-0.5.5/src/materforge/_version.py +21 -0
  139. materforge-0.5.5/src/materforge/algorithms/__init__.py +20 -0
  140. materforge-0.5.5/src/materforge/algorithms/interpolation.py +105 -0
  141. materforge-0.5.5/src/materforge/algorithms/piecewise_builder.py +266 -0
  142. materforge-0.5.5/src/materforge/algorithms/piecewise_inverter.py +223 -0
  143. materforge-0.5.5/src/materforge/algorithms/regression_processor.py +186 -0
  144. materforge-0.5.5/src/materforge/core/__init__.py +21 -0
  145. materforge-0.5.5/src/materforge/core/elements.py +100 -0
  146. materforge-0.5.5/src/materforge/core/exceptions.py +28 -0
  147. materforge-0.5.5/src/materforge/core/materials.py +441 -0
  148. materforge-0.5.5/src/materforge/core/symbol_registry.py +33 -0
  149. materforge-0.5.5/src/materforge/data/__init__.py +25 -0
  150. materforge-0.5.5/src/materforge/data/constants/__init__.py +11 -0
  151. materforge-0.5.5/src/materforge/data/constants/physical_constants.py +115 -0
  152. materforge-0.5.5/src/materforge/data/constants/processing_constants.py +54 -0
  153. materforge-0.5.5/src/materforge/data/elements/__init__.py +14 -0
  154. materforge-0.5.5/src/materforge/data/elements/element_data.py +186 -0
  155. materforge-0.5.5/src/materforge/data/materials/__init__.py +14 -0
  156. materforge-0.5.5/src/materforge/data/materials/alloys/1.4301/1.4301.xlsx +0 -0
  157. materforge-0.5.5/src/materforge/data/materials/alloys/1.4301/1.4301.yaml +167 -0
  158. materforge-0.5.5/src/materforge/data/materials/alloys/1.4301/__init__.py +0 -0
  159. materforge-0.5.5/src/materforge/data/materials/alloys/1.4301/materforge_plots/1.4301_properties_20250730_155031.png +0 -0
  160. materforge-0.5.5/src/materforge/data/materials/alloys/1.4301/materforge_plots/1.4301_properties_20250730_155046.png +0 -0
  161. materforge-0.5.5/src/materforge/data/materials/alloys/1.4301/materforge_plots/1.4301_properties_20250730_155233.png +0 -0
  162. materforge-0.5.5/src/materforge/data/materials/alloys/1.4301/materforge_plots/1.4301_properties_20250730_155251.png +0 -0
  163. materforge-0.5.5/src/materforge/data/materials/alloys/__init__.py +14 -0
  164. materforge-0.5.5/src/materforge/data/materials/pure_metals/Al/Al.yaml +147 -0
  165. materforge-0.5.5/src/materforge/data/materials/pure_metals/Al/__init__.py +0 -0
  166. materforge-0.5.5/src/materforge/data/materials/pure_metals/__init__.py +13 -0
  167. materforge-0.5.5/src/materforge/parsing/__init__.py +24 -0
  168. materforge-0.5.5/src/materforge/parsing/api.py +325 -0
  169. materforge-0.5.5/src/materforge/parsing/config/__init__.py +14 -0
  170. materforge-0.5.5/src/materforge/parsing/config/material_yaml_parser.py +404 -0
  171. materforge-0.5.5/src/materforge/parsing/config/yaml_keys.py +66 -0
  172. materforge-0.5.5/src/materforge/parsing/io/__init__.py +7 -0
  173. materforge-0.5.5/src/materforge/parsing/io/data_handler.py +289 -0
  174. materforge-0.5.5/src/materforge/parsing/processors/__init__.py +35 -0
  175. materforge-0.5.5/src/materforge/parsing/processors/dependency_processor.py +202 -0
  176. materforge-0.5.5/src/materforge/parsing/processors/post_processor.py +125 -0
  177. materforge-0.5.5/src/materforge/parsing/processors/property_handlers.py +210 -0
  178. materforge-0.5.5/src/materforge/parsing/processors/property_processor.py +135 -0
  179. materforge-0.5.5/src/materforge/parsing/processors/property_processor_base.py +247 -0
  180. materforge-0.5.5/src/materforge/parsing/processors/temperature_resolver.py +463 -0
  181. materforge-0.5.5/src/materforge/parsing/utils/__init__.py +9 -0
  182. materforge-0.5.5/src/materforge/parsing/utils/utilities.py +65 -0
  183. materforge-0.5.5/src/materforge/parsing/validation/__init__.py +17 -0
  184. materforge-0.5.5/src/materforge/parsing/validation/array_validator.py +45 -0
  185. materforge-0.5.5/src/materforge/parsing/validation/errors.py +30 -0
  186. materforge-0.5.5/src/materforge/parsing/validation/property_type_detector.py +238 -0
  187. materforge-0.5.5/src/materforge/parsing/validation/property_validator.py +44 -0
  188. materforge-0.5.5/src/materforge/py.typed +0 -0
  189. materforge-0.5.5/src/materforge/visualization/__init__.py +7 -0
  190. materforge-0.5.5/src/materforge/visualization/plotters.py +378 -0
  191. materforge-0.5.5/src/materforge.egg-info/SOURCES.txt +190 -0
  192. materforge-0.5.5/sync-repos.sh +12 -0
  193. materforge-0.5.5/update-docs.sh +32 -0
@@ -0,0 +1,82 @@
1
+ name: CI/CD Pipeline
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, develop ]
6
+ pull_request:
7
+ branches: [ main ]
8
+ release:
9
+ types: [published]
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ${{ matrix.os }}
14
+ strategy:
15
+ matrix:
16
+ os: [ubuntu-latest, windows-latest, macos-latest]
17
+ python-version: ["3.10", "3.11", "3.12"]
18
+
19
+ steps:
20
+ - uses: actions/checkout@v4 # Updated to v4
21
+
22
+ - name: Set up Python ${{ matrix.python-version }}
23
+ uses: actions/setup-python@v4
24
+ with:
25
+ python-version: ${{ matrix.python-version }}
26
+
27
+ - name: Install dependencies
28
+ run: |
29
+ python -m pip install --upgrade pip
30
+ pip install -e .
31
+ pip install pytest pytest-cov pytest-xdist
32
+
33
+ - name: Run tests
34
+ run: |
35
+ pytest tests/ --cov=materforge --cov-report=xml -v -m "not slow"
36
+
37
+ - name: Upload coverage reports
38
+ uses: codecov/codecov-action@v3
39
+ if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.10'
40
+
41
+ build:
42
+ runs-on: ubuntu-latest
43
+ needs: test
44
+
45
+ steps:
46
+ - uses: actions/checkout@v4 # Updated to v4
47
+ with:
48
+ fetch-depth: 0 # For setuptools_scm
49
+
50
+ - name: Set up Python
51
+ uses: actions/setup-python@v4
52
+ with:
53
+ python-version: "3.10"
54
+
55
+ - name: Build package
56
+ run: |
57
+ python -m pip install --upgrade pip build twine
58
+ python -m build
59
+ twine check dist/*
60
+
61
+ - name: Upload artifacts
62
+ uses: actions/upload-artifact@v4 # Updated to v4
63
+ with:
64
+ name: packages
65
+ path: dist/
66
+
67
+ publish:
68
+ runs-on: ubuntu-latest
69
+ needs: build
70
+ if: github.event_name == 'release' && github.event.action == 'published'
71
+
72
+ steps:
73
+ - name: Download artifacts
74
+ uses: actions/download-artifact@v4 # Updated to v4
75
+ with:
76
+ name: packages
77
+ path: dist/
78
+
79
+ - name: Publish to PyPI
80
+ uses: pypa/gh-action-pypi-publish@release/v1
81
+ with:
82
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,30 @@
1
+ # Read the Docs configuration file for materforge
2
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3
+
4
+ version: 2
5
+
6
+ # Set the OS, Python version and other tools you might need
7
+ build:
8
+ os: ubuntu-22.04
9
+ tools:
10
+ python: "3.10"
11
+
12
+ # Build documentation in the docs/ directory with Sphinx
13
+ sphinx:
14
+ configuration: docs/conf.py
15
+ fail_on_warning: false
16
+
17
+ # Optionally build your docs in additional formats such as PDF and ePub
18
+ formats:
19
+ - pdf
20
+ - epub
21
+
22
+ # Optional but recommended, declare the Python requirements required
23
+ # to build your documentation
24
+ python:
25
+ install:
26
+ - method: pip
27
+ path: .
28
+ extra_requirements:
29
+ - docs
30
+ - requirements: docs/requirements.txt
@@ -0,0 +1,5 @@
1
+
2
+ Contributors:
3
+ -------------
4
+
5
+ - Rahil Doshi <rahil.doshi@fau.de>
@@ -0,0 +1,53 @@
1
+ # Changelog
2
+
3
+ All notable changes to MaterForge will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.5.0] - 2025-07-30
9
+
10
+ ### Added
11
+ - Complete rebranding from PyMatLib to MaterForge
12
+ - Materials Analysis & Transformation Engine functionality
13
+ - Enhanced symbolic computation with SymPy integration
14
+ - Comprehensive material property modeling
15
+ - Piecewise function building and regression capabilities
16
+ - Property visualization and plotting tools
17
+ - YAML-based material configuration system
18
+ - Support for pure metals and alloys
19
+ - Temperature-dependent property evaluation
20
+
21
+ ### Changed
22
+ - Package name: `pymatlib` β†’ `materforge`
23
+ - Import statements: `from pymatlib` β†’ `from materforge`
24
+ - Repository structure and naming conventions
25
+ - Enhanced error handling and validation
26
+ - Improved logging and debugging capabilities
27
+
28
+ ### Fixed
29
+ - NumPy float64 compatibility issues with SymPy
30
+ - Property interpolation edge cases
31
+ - Temperature validation and bounds checking
32
+ - Dependency resolution for computed properties
33
+
34
+ ### Breaking Changes
35
+ - Package name changed from `pymatlib` to `materforge`
36
+ - All import statements must be updated
37
+ - Installation command: `pip install materforge`
38
+
39
+ ### Migration Guide
40
+ ```
41
+
42
+
43
+ # Old way
44
+
45
+ from pymatlib.parsing.api import create_material
46
+ material = create_material('steel.yaml', T)
47
+
48
+ # New way
49
+
50
+ from materforge.parsing.api import create_material
51
+ material = create_material('steel.yaml', T)
52
+
53
+ ```
@@ -0,0 +1,25 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite it as below."
3
+ authors:
4
+ - family-names: "Doshi"
5
+ given-names: "Rahil Miten"
6
+ email: "rahil.doshi@fau.de"
7
+ affiliation: "Friedrich-Alexander-UniversitΓ€t Erlangen-NΓΌrnberg"
8
+ orcid: "https://orcid.org/0009-0008-3570-9841"
9
+ title: "MaterForge: A Python Library for Temperature-Dependent Materials Property Modeling"
10
+ version: "0.5.5"
11
+ date-released: "2025-07-30"
12
+ url: "https://i10git.cs.fau.de/rahil.doshi/materforge"
13
+ repository-code: "https://i10git.cs.fau.de/rahil.doshi/materforge"
14
+ license: "BSD-3-Clause"
15
+ abstract: "A high-performance Python library for material simulation and analysis with a focus on temperature-dependent properties. MaterForge enables efficient modeling of pure metals and alloys through YAML configuration files, providing symbolic and numerical property evaluation for various material properties."
16
+ keywords:
17
+ - "materials science"
18
+ - "thermophysical properties"
19
+ - "temperature-dependent"
20
+ - "python"
21
+ - "simulation"
22
+ - "yaml"
23
+ - "symbolic mathematics"
24
+ - "piecewise functions"
25
+ type: "software"
@@ -0,0 +1,114 @@
1
+ # Contributing to MaterForge
2
+
3
+ Thank you for your interest in contributing to MaterForge!
4
+ We welcome contributions from the community and appreciate your help in making this project better.
5
+
6
+ ## Getting Started
7
+
8
+ ### Prerequisites
9
+ - Python 3.10 or higher
10
+ - Git
11
+ - Basic knowledge of Python and scientific computing
12
+
13
+ ### Development Setup
14
+
15
+ 1. Fork the repository on GitLab
16
+ 2. Clone your fork locally:
17
+ ```bash
18
+ git clone https://i10git.cs.fau.de/your-username/materforge.git
19
+ cd materforge
20
+ ```
21
+ 3. Create a virtual environment and install dependencies:
22
+ ```bash
23
+ python -m venv venv
24
+ source venv/bin/activate # On Windows: venv\Scripts\activate
25
+ pip install -e .[dev]
26
+ ```
27
+ 4. Install pre-commit hooks:
28
+ ```bash
29
+ pre-commit install
30
+ ```
31
+
32
+ ## Making Changes
33
+
34
+ ### Branch Naming
35
+ - Use descriptive branch names: `feature/add-new-property`, `fix/temperature-calculation`, `docs/update-readme`
36
+ - Use prefixes: `feature/`, `fix/`, `docs/`, `refactor/`, `test/`
37
+
38
+ ### Development Workflow
39
+ 1. Create a new branch from `master`:
40
+ ```bash
41
+ git checkout master
42
+ git pull origin master
43
+ git checkout -b feature/your-feature-name
44
+ ```
45
+ 2. Make your changes and test your changes thoroughly
46
+ 3. Commit your changes with clear messages
47
+ 4. Push to your fork and create a merge request
48
+
49
+ ## Testing
50
+
51
+ ### Running Tests
52
+
53
+ ```bash
54
+ # Run all tests
55
+ pytest
56
+
57
+ # Run specific categories
58
+ pytest tests/unit/
59
+ pytest tests/integration/
60
+ pytest tests/performance/
61
+
62
+ # Run with coverage
63
+ pytest --cov=src/materforge
64
+ ```
65
+
66
+ ### Code Standards
67
+ Python Style
68
+ - Follow PEP 8 guidelines
69
+ - Use type hints
70
+ - Maximum line length: 120 characters
71
+ - Use descriptive variable names
72
+
73
+ ### Quality Tools
74
+ Run before submitting changes:
75
+ ```bash
76
+ # Format code
77
+ black src/ tests/
78
+ isort src/ tests/
79
+
80
+ # Check linting
81
+ flake8 src/ tests/
82
+ mypy src/materforge/
83
+ ```
84
+
85
+ ## Submitting Changes
86
+
87
+ ### Merge Request Requirements
88
+ 1. Ensure all tests pass
89
+ 2. Code follows style guidelines
90
+ 3. Update documentation if necessary
91
+ 4. Create a merge request with:
92
+ - Clear title and description
93
+ - Reference any related issues
94
+ - List of changes made
95
+ - Testing performed
96
+
97
+ ### Merge Request Template
98
+ ```markdown
99
+ ## Description
100
+ Brief description of changes
101
+
102
+ ## Type of Change
103
+ - [ ] Bug fix
104
+ - [ ] New feature
105
+ - [ ] Documentation update
106
+ - [ ] Performance improvement
107
+
108
+ ## Testing
109
+ - [ ] Unit tests pass
110
+ - [ ] Integration tests pass
111
+ - [ ] Manual testing performed
112
+ ```
113
+
114
+ Thank you for contributing to MaterForge! πŸš€
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2025, Rahil Miten Doshi, Friedrich-Alexander-UniversitΓ€t Erlangen-NΓΌrnberg
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,38 @@
1
+ include LICENSE
2
+ include README.md
3
+ include AUTHORS.txt
4
+ include pyproject.toml
5
+ include requirements.txt
6
+
7
+ # Include all source code and data files
8
+ graft src
9
+
10
+ # Include documentation
11
+ graft docs
12
+
13
+ # Exclude applications directory - not part of the library
14
+ prune apps
15
+
16
+ # Exclude tests directory - not needed in distribution
17
+ prune tests
18
+
19
+ # Global exclusions - bytecode and cache files
20
+ global-exclude *.py[co]
21
+ global-exclude __pycache__
22
+ global-exclude .DS_Store
23
+ global-exclude *.so
24
+ global-exclude .git*
25
+ global-exclude .pytest_cache
26
+
27
+ # Exclude build artifacts
28
+ prune build
29
+ prune dist
30
+ prune *.egg-info
31
+ prune src/*.egg-info
32
+
33
+ # Exclude IDE and editor files
34
+ global-exclude .vscode
35
+ global-exclude .idea
36
+ global-exclude *.swp
37
+ global-exclude *.swo
38
+ global-exclude *~
@@ -0,0 +1,228 @@
1
+ Metadata-Version: 2.4
2
+ Name: materforge
3
+ Version: 0.5.5
4
+ Summary: A high-performance Python library for material simulation and analysis
5
+ Author-email: Rahil Doshi <rahil.doshi@fau.de>
6
+ Maintainer-email: Rahil Doshi <rahil.doshi@fau.de>
7
+ Project-URL: Homepage, https://github.com/rahildoshi97/materforge
8
+ Project-URL: Repository, https://github.com/rahildoshi97/materforge
9
+ Project-URL: Bug Tracker, https://github.com/rahildoshi97/materforge/issues
10
+ Project-URL: Documentation, https://materforge.readthedocs.io
11
+ Project-URL: Changelog, https://github.com/rahildoshi97/materforge/blob/main/CHANGELOG.md
12
+ Project-URL: GitLab Mirror, https://i10git.cs.fau.de/rahil.doshi/materforge
13
+ Keywords: materials,thermophysical,properties,yaml,scientific-computing,piecewise,regression,sympy
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: BSD License
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Topic :: Scientific/Engineering :: Physics
24
+ Classifier: Topic :: Scientific/Engineering
25
+ Requires-Python: >=3.10
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Requires-Dist: numpy<3.0.0,>=1.20.0
29
+ Requires-Dist: sympy<2.0.0,>=1.9.0
30
+ Requires-Dist: scipy<2.0.0,>=1.7.0
31
+ Requires-Dist: matplotlib<4.0.0,>=3.5.0
32
+ Requires-Dist: ruamel.yaml<1.0.0,>=0.17.0
33
+ Requires-Dist: pandas<3.0.0,>=1.4.0
34
+ Requires-Dist: openpyxl>=3.1.5
35
+ Requires-Dist: pwlf<3.0.0,>=2.5.1
36
+ Provides-Extra: dev
37
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
38
+ Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
39
+ Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
40
+ Requires-Dist: hypothesis>=6.0.0; extra == "dev"
41
+ Requires-Dist: black>=23.0.0; extra == "dev"
42
+ Requires-Dist: isort>=5.12.0; extra == "dev"
43
+ Requires-Dist: flake8>=6.0.0; extra == "dev"
44
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
45
+ Requires-Dist: pre-commit>=3.0.0; extra == "dev"
46
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
47
+ Provides-Extra: test
48
+ Requires-Dist: pytest>=7.0.0; extra == "test"
49
+ Requires-Dist: pytest-xdist>=3.0.0; extra == "test"
50
+ Requires-Dist: pytest-mock>=3.10.0; extra == "test"
51
+ Requires-Dist: hypothesis>=6.0.0; extra == "test"
52
+ Requires-Dist: pytest-benchmark>=4.0.0; extra == "test"
53
+ Provides-Extra: docs
54
+ Requires-Dist: sphinx>=6.0.0; extra == "docs"
55
+ Requires-Dist: sphinx-rtd-theme>=1.2.0; extra == "docs"
56
+ Requires-Dist: myst-parser>=1.0.0; extra == "docs"
57
+ Requires-Dist: sphinx-autodoc-typehints>=1.20.0; extra == "docs"
58
+ Requires-Dist: sphinx-copybutton>=0.5.2; extra == "docs"
59
+ Requires-Dist: linkify-it-py>=0.7.1; extra == "docs"
60
+ Provides-Extra: performance
61
+ Requires-Dist: line_profiler>=4.0.0; extra == "performance"
62
+ Requires-Dist: memory_profiler>=0.60.0; extra == "performance"
63
+ Requires-Dist: pytest-benchmark>=4.0.0; extra == "performance"
64
+ Provides-Extra: simulation
65
+ Requires-Dist: pystencils>=1.3.0; extra == "simulation"
66
+ Provides-Extra: all
67
+ Requires-Dist: materforge[dev,docs,performance,simulation,test]; extra == "all"
68
+ Dynamic: license-file
69
+
70
+ # MaterForge - Materials Formulation Engine with Python
71
+
72
+ A high-performance Python library for material simulation and analysis. MaterForge enables efficient modeling of pure metals and alloys through YAML configuration files, providing symbolic and numerical property evaluation for various material properties.
73
+
74
+ [![Python](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
75
+ [![Latest Release](https://i10git.cs.fau.de/rahil.doshi/materforge/-/badges/release.svg)](https://i10git.cs.fau.de/rahil.doshi/materforge/-/releases)
76
+ [![License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](LICENSE)
77
+ [![Documentation Status](https://readthedocs.org/projects/materforge/badge/?version=latest)](https://materforge.readthedocs.io/en/latest/?badge=latest)
78
+ [![Pipeline Status](https://i10git.cs.fau.de/rahil.doshi/materforge/badges/master/pipeline.svg)](https://i10git.cs.fau.de/rahil.doshi/materforge/-/pipelines)
79
+ [![Code Coverage](https://i10git.cs.fau.de/rahil.doshi/materforge/badges/master/coverage.svg)](https://i10git.cs.fau.de/rahil.doshi/materforge/-/commits/master)
80
+
81
+ ## Table of Contents
82
+ - [Key Features](#-key-features)
83
+ - [Installation](#-installation)
84
+ - [Quick Sart](#-quick-start)
85
+ - [YAML Configuration Format](#-yaml-configuration-format)
86
+ - [Documentation](#-documentation)
87
+ - [Contributing](#-contributing)
88
+ - [Known Limitations](#-known-limitations)
89
+ - [License](#-license)
90
+ - [Citation](#-citation)
91
+ - [Support](#-support)
92
+ - [Acknowledgments](#-acknowledgments)
93
+
94
+ ## πŸš€ Key Features
95
+ - **Modular Architecture**: Clean separation with algorithms, parsing, and visualization modules
96
+ - **Flexible Material Definition**: Support for both pure metals and alloys
97
+ - **YAML-Driven Configuration**: Define materials using intuitive YAML files
98
+ - **Temperature-Dependent Properties**: Support for complex temperature-dependent material properties
99
+ - **Symbolic Mathematics**: Built on SymPy for precise mathematical expressions
100
+ - **Piecewise Functions**: Advanced piecewise function support with regression capabilities
101
+ - **Property Inversion**: Create inverse functions for energy density and other properties
102
+ - **Visualization**: Automatic plotting of material properties with customizable options
103
+ - **Material Types**: Support for both pure metals and alloys with appropriate phase transition temperatures
104
+ - **Multiple Property Types**: Support for constants, step functions, file-based data, key-value pairs, and computed properties
105
+ - **Regression Analysis**: Built-in piecewise linear fitting with configurable parameters
106
+
107
+ ## πŸ“¦ Installation
108
+ ### Prerequisites
109
+ - Python 3.10 or higher
110
+ - Required dependencies: `numpy`, `sympy`, `matplotlib`, `pandas`, `ruamel.yaml`
111
+
112
+ ### Install from Git Repository
113
+ ```
114
+ pip install "git+https://i10git.cs.fau.de/rahil.doshi/materforge.git"
115
+ ```
116
+ ### Development Installation
117
+ ```bash
118
+ git clone https://i10git.cs.fau.de/rahil.doshi/materforge.git
119
+ cd materforge
120
+ pip install -e .[dev]
121
+ ```
122
+
123
+ ## πŸƒ Quick Start
124
+ ### Basic Material Creation
125
+
126
+ ```python
127
+ import sympy as sp
128
+ from materforge.parsing.api import create_material
129
+
130
+ # Create a material with symbolic temperature
131
+ T = sp.Symbol('T')
132
+ material_T = create_material('path/to/material.yaml', T)
133
+
134
+ # Create a material at specific temperature
135
+ material_500 = create_material('path/to/material.yaml', 500.0)
136
+
137
+ # Access properties
138
+ print(f"Heat capacity: {material_T.heat_capacity}")
139
+ print(f"Density: {material_500.density}")
140
+
141
+ # Evaluate at specific temperature
142
+ temp_value = 1500.0 # Kelvin
143
+ density_at_temp = float(material_T.density.subs(T, temp_value))
144
+ print(f"Density at {temp_value}K: {density_at_temp:.2f} kg/mΒ³")
145
+
146
+ # For numerical evaluation (no plots generated)
147
+ material_800 = create_material('aluminum.yaml', 800.0)
148
+
149
+ # For symbolic expressions with automatic plotting
150
+ material_with_plot = create_material('steel.yaml', T, enable_plotting=True)
151
+ ```
152
+ ### Working with Piecewise Inverse Functions
153
+
154
+ ```python
155
+ from materforge.algorithms.piecewise_inverter import PiecewiseInverter
156
+
157
+ # Create inverse energy density function: T = f_inv(E)
158
+ if hasattr(material, 'energy_density'):
159
+ E = sp.Symbol('E')
160
+ inverse_func = PiecewiseInverter.create_energy_density_inverse(material, 'E')
161
+
162
+ # Test round-trip accuracy
163
+ test_temp = 500.0
164
+ energy_val = float(material.energy_density.subs(T, test_temp))
165
+ recovered_temp = float(inverse_func.subs(E, energy_val))
166
+ print(f"Round-trip: T={test_temp} -> E={energy_val:.2e} -> T={recovered_temp:.2f}")
167
+ ```
168
+
169
+ ## πŸ“‹ YAML Configuration Format
170
+ ### Supported Property Types
171
+ - **CONSTANT_VALUE**: Simple numeric values
172
+ - **FILE_IMPORT**: Data loaded from CSV/Excel/text files
173
+ - **TABULAR_DATA**: Temperature and corresponding property value pairs
174
+ - **STEP_FUNCTION**: Discontinuous transitions
175
+ - **PIECEWISE_EQUATION**: Symbolic equations over temperature ranges
176
+ - **COMPUTED_PROPERTY**: Properties calculated from other properties
177
+
178
+ See [the YAML schema documentation](docs/reference/yaml_schema.md) for detailed configuration options.
179
+ YAML configuration examples can be found here:
180
+ - [Pure Metals](src/materforge/data/materials/pure_metals/Al/Al.yaml)
181
+ - [Alloys](src/materforge/data/materials/alloys/1.4301/1.4301.yaml)
182
+
183
+ ## πŸ“š Documentation
184
+ Our documentation follows the _DiΓ‘taxis_ framework with four distinct types:
185
+ ### Tutorials - Learning-oriented guides
186
+ - [Getting Started with materforge](docs/tutorials/getting_started.md)
187
+ - [Creating Your First Material Simulation](docs/tutorials/first_simulation.md)
188
+ ### How-to Guides - Problem-oriented instructions
189
+ - [Defining Custom Material Properties](docs/how-to/define_materials.md)
190
+ - [Converting Between Energy Density and Temperature](docs/how-to/energy_temperature_conversion.md)
191
+ ### Reference - Information-oriented documentation
192
+ - [API Reference](docs/reference/api)
193
+ - [YAML Configuration Schema](docs/reference/yaml_schema.md)
194
+ ### Explanation - Understanding-oriented discussions
195
+ - [Material Properties Concepts](docs/explanation/material_properties.md)
196
+ - [Design Philosophy](docs/explanation/design_philosophy.md)
197
+
198
+ ## 🀝 Contributing
199
+ Contributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details on how to get started.
200
+
201
+ ## πŸ› Known Limitations
202
+ - **Piecewise Inverter**: Currently supports only linear piecewise functions
203
+ - **File Formats**: Limited to CSV, Excel, and text files
204
+ - **Memory Usage**: Large datasets may require optimization for very high-resolution data
205
+ - **Regression**: Maximum 8 segments recommended for stability
206
+
207
+ ## πŸ“„ License
208
+ This project is licensed under the BSD 3-Clause License. See the [LICENSE](LICENSE) file for details.
209
+
210
+ ## πŸ“– Citation
211
+ If you use MaterForge in your research, please cite it using the information in our [CITATION.cff](CITATION.cff) file.
212
+
213
+ ## πŸ“ž Support
214
+ - **Author**: Rahil Doshi
215
+ - **Email**: rahil.doshi@fau.de
216
+ - **Project Homepage**: [materforge](https://i10git.cs.fau.de/rahil.doshi/materforge)
217
+ - **Bug Tracker**: [Issues](https://i10git.cs.fau.de/rahil.doshi/materforge/-/issues)
218
+
219
+ ## πŸ™ Acknowledgments
220
+ - Built with [SymPy](https://www.sympy.org/) for symbolic mathematics
221
+ - Data handling powered by [pandas](https://pandas.pydata.org/)
222
+ - Uses [pwlf](https://github.com/cjekel/piecewise_linear_fit_py) for piecewise linear fitting
223
+ - Visualization powered by [Matplotlib](https://matplotlib.org/)
224
+ - YAML parsing with [ruamel.yaml](https://yaml.dev/doc/ruamel.yaml/)
225
+
226
+ #### MaterForge - Empowering material simulation with Python πŸš€
227
+
228
+ ---