elasticipy 3.0.0__tar.gz → 4.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 (140) hide show
  1. {elasticipy-3.0.0 → elasticipy-4.1.0}/.github/workflows/Codecov.yml +1 -1
  2. {elasticipy-3.0.0 → elasticipy-4.1.0}/.readthedocs.yaml +1 -1
  3. elasticipy-4.1.0/CITATION.bib +17 -0
  4. elasticipy-4.1.0/CITATION.cff +11 -0
  5. {elasticipy-3.0.0 → elasticipy-4.1.0}/CONTRIBUTING.md +1 -1
  6. {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Elasticipy_vs_pymatgen.py +2 -4
  7. {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Elate_vs_Elasticipy.py +3 -3
  8. {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Example_Stiffness_tensor.py +33 -11
  9. {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Example_StressStrain_arrays.py +4 -4
  10. {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Example_WaveVelocity.py +7 -9
  11. {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Multiple_phases.py +1 -1
  12. elasticipy-4.1.0/Examples/SelfConsistent.py +86 -0
  13. {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/essai_plasticity.py +5 -6
  14. {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/example_readwrite.py +1 -1
  15. elasticipy-4.1.0/JOSS/YoungModulus.png +0 -0
  16. {elasticipy-3.0.0 → elasticipy-4.1.0}/JOSS/paper.md +15 -11
  17. {elasticipy-3.0.0/src/elasticipy.egg-info → elasticipy-4.1.0}/PKG-INFO +26 -8
  18. {elasticipy-3.0.0 → elasticipy-4.1.0}/README.md +20 -5
  19. elasticipy-4.1.0/docs/source/Elasticipy.interfaces.FEPX.rst +7 -0
  20. elasticipy-4.1.0/docs/source/Elasticipy.interfaces.PRISMS.rst +7 -0
  21. elasticipy-4.1.0/docs/source/Elasticipy.plasticity.rst +7 -0
  22. elasticipy-4.1.0/docs/source/Elasticipy.rst +25 -0
  23. elasticipy-4.1.0/docs/source/Elasticipy.spherical_function.rst +7 -0
  24. elasticipy-4.1.0/docs/source/Elasticipy.tensors.elasticity.rst +7 -0
  25. elasticipy-4.1.0/docs/source/Elasticipy.tensors.fourth_order.rst +7 -0
  26. elasticipy-4.1.0/docs/source/Elasticipy.tensors.second_order.rst +7 -0
  27. elasticipy-4.1.0/docs/source/Elasticipy.tensors.stress_strain.rst +7 -0
  28. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Plasticity.rst +10 -11
  29. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_AveragingMethods.rst +2 -2
  30. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_MultiplePhases.rst +1 -1
  31. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_ReadWriteFiles.rst +3 -2
  32. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_StiffnessTensor.rst +13 -1
  33. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_StressStrain.rst +48 -10
  34. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_ThermalExpansion.rst +1 -1
  35. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_wave-velocities.rst +11 -12
  36. elasticipy-4.1.0/docs/source/Tutorials/images/Mohr.png +0 -0
  37. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/conf.py +7 -1
  38. elasticipy-4.1.0/docs/source/logo/favicon.png +0 -0
  39. elasticipy-4.1.0/docs/source/logo/logo.png +0 -0
  40. elasticipy-4.1.0/docs/source/logo/logo.svg +100 -0
  41. elasticipy-4.1.0/docs/source/logo/logo_text.png +0 -0
  42. elasticipy-4.1.0/docs/source/logo/logo_text.svg +126 -0
  43. elasticipy-4.1.0/docs/source/logo/logo_text_whitebg.png +0 -0
  44. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/modules.rst +1 -1
  45. {elasticipy-3.0.0 → elasticipy-4.1.0}/pyproject.toml +5 -3
  46. {elasticipy-3.0.0 → elasticipy-4.1.0}/requirements.txt +2 -1
  47. elasticipy-4.1.0/src/Elasticipy/FourthOrderTensor.py +16 -0
  48. elasticipy-4.1.0/src/Elasticipy/StressStrainTensors.py +16 -0
  49. elasticipy-4.1.0/src/Elasticipy/ThermalExpansion.py +12 -0
  50. {elasticipy-3.0.0 → elasticipy-4.1.0}/src/Elasticipy/gui.py +3 -3
  51. elasticipy-4.1.0/src/Elasticipy/interfaces/FEPX.py +119 -0
  52. elasticipy-4.1.0/src/Elasticipy/interfaces/PRISMS.py +103 -0
  53. elasticipy-3.0.0/src/Elasticipy/Plasticity.py → elasticipy-4.1.0/src/Elasticipy/plasticity.py +35 -2
  54. elasticipy-3.0.0/src/Elasticipy/PoleFigure.py → elasticipy-4.1.0/src/Elasticipy/polefigure.py +21 -0
  55. elasticipy-3.0.0/src/Elasticipy/SphericalFunction.py → elasticipy-4.1.0/src/Elasticipy/spherical_function.py +3 -15
  56. elasticipy-3.0.0/src/Elasticipy/FourthOrderTensor.py → elasticipy-4.1.0/src/Elasticipy/tensors/elasticity.py +532 -563
  57. elasticipy-4.1.0/src/Elasticipy/tensors/fourth_order.py +662 -0
  58. elasticipy-4.1.0/src/Elasticipy/tensors/mapping.py +44 -0
  59. elasticipy-3.0.0/src/Elasticipy/SecondOrderTensor.py → elasticipy-4.1.0/src/Elasticipy/tensors/second_order.py +113 -9
  60. elasticipy-3.0.0/src/Elasticipy/StressStrainTensors.py → elasticipy-4.1.0/src/Elasticipy/tensors/stress_strain.py +21 -5
  61. elasticipy-3.0.0/src/Elasticipy/ThermalExpansion.py → elasticipy-4.1.0/src/Elasticipy/tensors/thermal_expansion.py +2 -2
  62. {elasticipy-3.0.0 → elasticipy-4.1.0/src/elasticipy.egg-info}/PKG-INFO +26 -8
  63. elasticipy-4.1.0/src/elasticipy.egg-info/SOURCES.txt +130 -0
  64. {elasticipy-3.0.0 → elasticipy-4.1.0}/src/elasticipy.egg-info/requires.txt +3 -1
  65. elasticipy-4.1.0/tests/__init__.py +0 -0
  66. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/.sim +23 -0
  67. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/defrate/defrate.step0 +2453 -0
  68. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/defrate/defrate.step1 +2453 -0
  69. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/defrate/defrate.step2 +2453 -0
  70. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/ori/ori.step0 +2453 -0
  71. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/ori/ori.step1 +2453 -0
  72. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/ori/ori.step2 +2453 -0
  73. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/spinrate/spinrate.step0 +2453 -0
  74. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/spinrate/spinrate.step1 +2453 -0
  75. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/spinrate/spinrate.step2 +2453 -0
  76. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/strain/strain.step0 +2453 -0
  77. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/strain/strain.step1 +2453 -0
  78. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/strain/strain.step2 +2453 -0
  79. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/stress/stress.step0 +2453 -0
  80. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/stress/stress.step1 +2453 -0
  81. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/stress/stress.step2 +2453 -0
  82. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/velgrad/velgrad.step0 +2453 -0
  83. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/velgrad/velgrad.step1 +2453 -0
  84. elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/velgrad/velgrad.step2 +2453 -0
  85. elasticipy-4.1.0/tests/interfaces/PRISMS/QuadratureOutputs.csv +64 -0
  86. elasticipy-4.1.0/tests/interfaces/PRISMS/stressstrain.txt +101 -0
  87. elasticipy-4.1.0/tests/test_FourthOrderTensors.py +112 -0
  88. {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/test_SphericalFunction.py +3 -3
  89. {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/test_StiffnessTensor.py +265 -96
  90. {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/test_StressStrainTensors.py +49 -12
  91. {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/test_ThermalExpansion.py +10 -4
  92. elasticipy-4.1.0/tests/test_interfaces_FEPX.py +51 -0
  93. elasticipy-4.1.0/tests/test_interfaces_prisms.py +66 -0
  94. {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/test_plasticity.py +25 -4
  95. elasticipy-3.0.0/JOSS/YoungModulus.png +0 -0
  96. elasticipy-3.0.0/docs/source/Elasticipy.FourthOrderTensor.rst +0 -7
  97. elasticipy-3.0.0/docs/source/Elasticipy.Plasticity.rst +0 -7
  98. elasticipy-3.0.0/docs/source/Elasticipy.SecondOrderTensor.rst +0 -7
  99. elasticipy-3.0.0/docs/source/Elasticipy.SphericalFunction.rst +0 -7
  100. elasticipy-3.0.0/docs/source/Elasticipy.StressStrainTensors.rst +0 -7
  101. elasticipy-3.0.0/docs/source/Elasticipy.rst +0 -22
  102. elasticipy-3.0.0/src/elasticipy.egg-info/SOURCES.txt +0 -85
  103. {elasticipy-3.0.0 → elasticipy-4.1.0}/.github/workflows/JOSS build.yml +0 -0
  104. {elasticipy-3.0.0 → elasticipy-4.1.0}/.github/workflows/cloc.yml +0 -0
  105. {elasticipy-3.0.0 → elasticipy-4.1.0}/.github/workflows/python-publish.yml +0 -0
  106. {elasticipy-3.0.0 → elasticipy-4.1.0}/CODE_OF_CONDUCT.md +0 -0
  107. {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/MaterialsProject.json +0 -0
  108. {elasticipy-3.0.0 → elasticipy-4.1.0}/JOSS/ElasticipyVSpymatgen.png +0 -0
  109. {elasticipy-3.0.0 → elasticipy-4.1.0}/JOSS/Nye.png +0 -0
  110. {elasticipy-3.0.0 → elasticipy-4.1.0}/JOSS/Plot_E.png +0 -0
  111. {elasticipy-3.0.0 → elasticipy-4.1.0}/JOSS/paper.bib +0 -0
  112. {elasticipy-3.0.0 → elasticipy-4.1.0}/LICENSE +0 -0
  113. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/_static/images/HyperSphericalCoordinates.png +0 -0
  114. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/index.rst +0 -0
  115. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/GUI.rst +0 -0
  116. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/Cyclic.png +0 -0
  117. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/E_PF.png +0 -0
  118. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/E_VRH_sections.png +0 -0
  119. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/E_hill_fiber.png +0 -0
  120. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/E_plot3D.png +0 -0
  121. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/E_xyz_sections.png +0 -0
  122. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/GUI.png +0 -0
  123. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/G_plot3D.png +0 -0
  124. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/G_plot3D_min.png +0 -0
  125. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/G_xyz_sections.png +0 -0
  126. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/Incremental.png +0 -0
  127. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/Shear.png +0 -0
  128. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/Stress-controlled.png +0 -0
  129. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/StressStrain-controlled.png +0 -0
  130. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/WaveVelocities.png +0 -0
  131. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/plot_volumeFraction.png +0 -0
  132. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials.rst +0 -0
  133. {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/index.rst +0 -0
  134. {elasticipy-3.0.0 → elasticipy-4.1.0}/setup.cfg +0 -0
  135. {elasticipy-3.0.0 → elasticipy-4.1.0}/src/Elasticipy/__init__.py +0 -0
  136. /elasticipy-3.0.0/src/Elasticipy/CrystalSymmetries.py → /elasticipy-4.1.0/src/Elasticipy/crystal_symmetries.py +0 -0
  137. {elasticipy-3.0.0/tests → elasticipy-4.1.0/src/Elasticipy/tensors}/__init__.py +0 -0
  138. {elasticipy-3.0.0 → elasticipy-4.1.0}/src/elasticipy.egg-info/dependency_links.txt +0 -0
  139. {elasticipy-3.0.0 → elasticipy-4.1.0}/src/elasticipy.egg-info/top_level.txt +0 -0
  140. {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/MaterialsProject.json +0 -0
@@ -9,7 +9,7 @@ jobs:
9
9
  runs-on: ubuntu-latest
10
10
  strategy:
11
11
  matrix:
12
- python-version: ["3.10", "3.11", "3.12"]
12
+ python-version: ["3.11", "3.12"]
13
13
 
14
14
  steps:
15
15
  - name: Checkout
@@ -15,7 +15,7 @@ build:
15
15
  # golang: "1.20"
16
16
  jobs:
17
17
  post_create_environment:
18
- - python -m pip install sphinx_rtd_theme mp_api
18
+ - python -m pip install sphinx_rtd_theme mp_api sphinx_copybutton
19
19
 
20
20
  # Build documentation in the "docs/" directory with Sphinx
21
21
  sphinx:
@@ -0,0 +1,17 @@
1
+ @software{dorian_depriester_2025_15188346,
2
+ author = {Dorian Depriester},
3
+ title = {DorianDepriester/Elasticipy: v4.0.0},
4
+ month = apr,
5
+ year = 2025,
6
+ publisher = {Zenodo},
7
+ version = {v4.0.0},
8
+ doi = {10.5281/zenodo.15188346},
9
+ url = {https://doi.org/10.5281/zenodo.15188346},
10
+ swhid = {swh:1:dir:f9538575fb87ee10510bd51906012987986fc36a
11
+ ;origin=https://doi.org/10.5281/zenodo.14501849;vi
12
+ sit=swh:1:snp:20bf603cb1ae305b4d37a4567557ac860e09
13
+ d3e5;anchor=swh:1:rel:6dad2d91dcebe09e35d44f82a0c8
14
+ a46c77f0d057;path=DorianDepriester-
15
+ Elasticipy-c8bfc05
16
+ },
17
+ }
@@ -0,0 +1,11 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite it as below."
3
+ authors:
4
+ - family-names: "Depriester"
5
+ given-names: "Dorian"
6
+ orcid: "https://orcid.org/0000-0002-2881-8942"
7
+ title: "Elasticipy"
8
+ version: 4.0.0
9
+ doi: 10.5281/zenodo.15188346
10
+ date-released: 2025-04-10
11
+ url: "https://github.com/DorianDepriester/Elasticipy"
@@ -25,7 +25,7 @@ All types of contributions are encouraged and valued. See the [Table of Contents
25
25
  ## Code of Conduct
26
26
 
27
27
  This project and everyone participating in it is governed by the
28
- [Elasticipy Code of Conduct](https://github.com/DorianDepriester/Elasticipy/blob//CODE_OF_CONDUCT.md).
28
+ [Elasticipy Code of Conduct](https://github.com/DorianDepriester/Elasticipy/blob/main/CODE_OF_CONDUCT.md).
29
29
  By participating, you are expected to uphold this code. Please report unacceptable behavior
30
30
  to <dorian.dep@gmail.com>.
31
31
 
@@ -1,7 +1,5 @@
1
- from docutils.utils.math.latex2mathml import layout_styles
2
-
3
- from Elasticipy.StressStrainTensors import StrainTensor
4
- from Elasticipy.FourthOrderTensor import StiffnessTensor
1
+ from Elasticipy.tensors.stress_strain import StrainTensor
2
+ from Elasticipy.tensors.elasticity import StiffnessTensor
5
3
  from matplotlib import pyplot as plt
6
4
  import matplotlib as mpl
7
5
  mpl.use('Qt5Agg') # Ensure interactive plot
@@ -1,9 +1,9 @@
1
1
  import numpy as np
2
2
  from elastic import Elastic
3
- from Elasticipy.FourthOrderTensor import StiffnessTensor
3
+ from Elasticipy.tensors.elasticity import StiffnessTensor
4
4
  import matplotlib as mpl
5
5
  mpl.use('Qt5Agg') # Ensure interactive plot
6
- from Elasticipy.SphericalFunction import sph2cart, _plot3D
6
+ from Elasticipy.spherical_function import sph2cart, _plot3D
7
7
  import time
8
8
  import matplotlib.pyplot as plt
9
9
 
@@ -13,7 +13,7 @@ C = StiffnessTensor.monoclinic(phase_name='TiNi',
13
13
  C22=240, C23=131, C33=175,
14
14
  C44=81, C55=11, C66=85,
15
15
  C15=-18, C25=1, C35=-3, C46=3)
16
- Celate = Elastic(list(C.matrix))
16
+ Celate = Elastic(list(C._matrix))
17
17
 
18
18
  # Plotting with Elate
19
19
  start_time=time.perf_counter()
@@ -1,7 +1,14 @@
1
- from Elasticipy.FourthOrderTensor import StiffnessTensor
1
+ from Elasticipy.tensors.elasticity import StiffnessTensor
2
2
  from scipy.spatial.transform import Rotation
3
+
4
+ ################################################
5
+ # The lines below are only required in PyCharm
6
+ ################################################
3
7
  import matplotlib as mpl
4
- mpl.use('Qt5Agg') # Ensure interactive plot
8
+ mpl.use('Qt5Agg')
9
+ from qtpy import QtWidgets
10
+ app = QtWidgets.QApplication.instance() or QtWidgets.QApplication([])
11
+ ################################################
5
12
 
6
13
  # First, let consider the NiTi material:
7
14
  C = StiffnessTensor.fromCrystalSymmetry(symmetry='monoclinic', diad='y', phase_name='TiNi',
@@ -15,29 +22,43 @@ print(C)
15
22
  E = C.Young_modulus
16
23
  # See min/max values
17
24
  print(E)
25
+
18
26
  # Now illustrate the spatial dependence
19
- E.plot_xyz_sections() # As 2D sections...
20
- E.plot3D() # ...or in 3D
21
- E.plot_as_pole_figure() # or even with PF
27
+ fig,_ = E.plot_xyz_sections() # As 2D sections...
28
+ fig.show()
29
+ fig,_ = E.plot3D() # ...or in 3D
30
+ fig.show()
31
+ fig,_ =E.plot_as_pole_figure() # or even with PF
32
+ fig.show()
33
+
34
+ # Print out the maximum value for the Young modulus
22
35
  print(E.max())
23
36
 
24
37
  # Apply a random rotation on stiffness tensor
25
38
  rotation = Rotation.from_euler('ZXZ', [90, 45, 0], degrees=True)
26
39
  Crot = C*rotation
27
40
  # Check that the Young modulus has changed as well
28
- Crot.Young_modulus.plot3D()
41
+ fig, _ = Crot.Young_modulus.plot3D()
42
+ fig.show()
29
43
 
30
44
  # Now let's consider the shear modulus
31
45
  G = C.shear_modulus
32
- G.plot_xyz_sections() # Plot sections with min, max and mean
33
- G.plot3D() # And plot it in 3D
46
+ fig,_ = G.plot_xyz_sections() # Plot sections with min, max and mean
47
+ fig.show()
48
+
49
+ fig,_ = G.plot3D() # And plot it in 3D
50
+ fig.show()
34
51
  print(G.min())
35
52
  print(G.max())
36
53
 
37
54
  # Finally, let's have a look on the Poisson ratio
38
55
  nu = C.Poisson_ratio
39
- nu.plot_xyz_sections()
40
- nu.plot3D(which='max')
56
+ fig,_ = nu.plot_xyz_sections()
57
+ fig.show()
58
+ fig,_ = nu.plot3D(which='max')
59
+ fig.show()
60
+
61
+ # Check out the maximum and minimum values
41
62
  print(nu.min())
42
63
  print(nu.max())
43
64
 
@@ -45,7 +66,8 @@ print(nu.max())
45
66
  oris = Rotation.random(1000)
46
67
  Crotated = C*oris # Compute the Voigt average
47
68
  Cvoigt = Crotated.Voigt_average()
48
- print(Cvoigt.Young_modulus) # Look at the corresponding Young modulis
69
+ print(Cvoigt.Young_modulus) # Look at the corresponding Young moduli
49
70
  print(C.Voigt_average().Young_modulus) # Compare with infinite number of orientations
50
71
 
51
72
 
73
+ app.exec() # Only required in PyCharm (see lines 7-10)
@@ -2,7 +2,7 @@
2
2
  # Imports and simple example of stress
3
3
  # ======================================================
4
4
  import numpy as np
5
- from Elasticipy.StressStrainTensors import StressTensor, StrainTensor
5
+ from Elasticipy.tensors.stress_strain import StressTensor, StrainTensor
6
6
 
7
7
 
8
8
  stress = StressTensor([[0, 1, 0],
@@ -23,7 +23,7 @@ print(strain.volumetric_strain())
23
23
  # ======================================================
24
24
  # Linear elasticity
25
25
  # ======================================================
26
- from Elasticipy.FourthOrderTensor import StiffnessTensor
26
+ from Elasticipy.tensors.elasticity import StiffnessTensor
27
27
 
28
28
  C = StiffnessTensor.fromCrystalSymmetry(symmetry='cubic', phase_name='ferrite',
29
29
  C11=274, C12=175, C44=89)
@@ -61,7 +61,7 @@ from scipy.spatial.transform import Rotation
61
61
  n_ori = 1000
62
62
  rotations = Rotation.random(n_ori)
63
63
 
64
- eps_rotated = eps.matmul(rotations)
64
+ eps_rotated = eps.rotate(rotations, mode='cross')
65
65
  print(eps_rotated.shape) # Just to check how it looks like
66
66
 
67
67
  sigma_rotated = C * eps_rotated
@@ -72,7 +72,7 @@ sigma_mean = sigma.mean(axis=1) # Compute the mean over all orientations
72
72
  print(sigma_mean[-1])
73
73
 
74
74
  C_rotated = C * rotations
75
- C_Voigt = C_rotated.Voigt_average()
75
+ C_Voigt = C_rotated.Voigt_average() # Now check that the previous result is consistent with Voigt average
76
76
  sigma_Voigt = C_Voigt * eps
77
77
  print(sigma_Voigt[-1])
78
78
 
@@ -1,16 +1,14 @@
1
- from Elasticipy.FourthOrderTensor import StiffnessTensor
2
- import matplotlib as mpl
3
- mpl.use('Qt5Agg') # Ensure interactive plot
1
+ from Elasticipy.tensors.elasticity import StiffnessTensor
4
2
  from matplotlib import pyplot as plt
5
3
 
6
- C = StiffnessTensor.fromCrystalSymmetry(symmetry='orthorombic', phase_name='forsterite',
4
+ C = StiffnessTensor.fromCrystalSymmetry(symmetry='orthorhombic', phase_name='forsterite',
7
5
  C11=320, C12=68.2, C13=71.6,
8
6
  C22=196.5, C23=76.8, C33=233.5, C44=64, C55=77, C66=78.7)
9
7
  rho = 3.355
10
8
 
11
9
  cp, cs_fast, cs_slow = C.wave_velocity(rho)
12
- print(cp)
13
-
14
- fig, _ =cp.plot_as_pole_figure(subplot_args=(131,), title='p wave', show=False)
15
- cs_fast.plot_as_pole_figure(subplot_args=(132,), title='s wave (fast)', fig=fig, show=False)
16
- cs_slow.plot_as_pole_figure(subplot_args=(133,), title='s wave (slow)', fig=fig, show=True)
10
+ fig = plt.figure(figsize=(12,4))
11
+ cp.plot_as_pole_figure(subplot_args=(131,), title='p wave', fig=fig)
12
+ cs_fast.plot_as_pole_figure(subplot_args=(132,), title='s wave (fast)', fig=fig)
13
+ cs_slow.plot_as_pole_figure(subplot_args=(133,), title='s wave (slow)', fig=fig)
14
+ fig.show()
@@ -1,4 +1,4 @@
1
- from Elasticipy.FourthOrderTensor import StiffnessTensor
1
+ from Elasticipy.tensors.elasticity import StiffnessTensor
2
2
  import numpy as np
3
3
  from matplotlib import pyplot as plt
4
4
 
@@ -0,0 +1,86 @@
1
+ import numpy as np
2
+ from Elasticipy.tensors.fourth_order import FourthOrderTensor
3
+ from Elasticipy.tensors.elasticity import StiffnessTensor
4
+ from scipy.integrate import trapezoid
5
+ from scipy.spatial.transform import Rotation
6
+
7
+ I = FourthOrderTensor.identity()
8
+
9
+ def gamma(C_macro_local, phi, theta, a1, a2, a3):
10
+ s1 = np.sin(theta)*np.cos(phi) / a1
11
+ s2 = np.sin(theta)*np.sin(phi) / a2
12
+ s3 = np.cos(theta) / a3
13
+ s = np.array([s1, s2, s3])
14
+ D = np.einsum('lmnp,pqr,lqr->qrmn', C_macro_local.full_tensor(), s, s)
15
+ Dinv = np.linalg.inv(D)
16
+ return np.einsum('qrjk,iqr,lqr->qrijkl', Dinv, s, s) # The symmetrization is made afterward (see below)
17
+
18
+ def polarization_tensor(C_macro_local, a1, a2, a3, n_phi, n_theta):
19
+ theta = np.linspace(0, np.pi, n_theta)
20
+ phi = np.linspace(0, 2 * np.pi, n_phi)
21
+ phi_grid, theta_grid = np.meshgrid(phi, theta, indexing='ij')
22
+ g = gamma(C_macro_local, phi_grid, theta_grid, a1, a2, a3)
23
+ gsin = (g.T*np.sin(theta_grid.T)).T
24
+ a = trapezoid(gsin, phi, axis=0)
25
+ b= trapezoid(a, theta, axis=0)/(4*np.pi)
26
+ return FourthOrderTensor(b, force_minor_symmetry=True) # Symmetrization here (see above)
27
+
28
+ def localization_tensor(C_macro_local, C_incl, n_phi, n_theta, a1, a2, a3):
29
+ E = polarization_tensor(C_macro_local, a1, a2, a3, n_phi, n_theta)
30
+ delta = FourthOrderTensor(C_incl._matrix - C_macro_local._matrix)
31
+ Ainv = E.ddot(delta) + I
32
+ return Ainv.inv()
33
+
34
+ def Kroner_Eshelby(Ci, g, method='strain', max_iter=5, atol=1e-3, rtol=1e-3, display=False, n_phi=100, n_theta=100, particle_size=None):
35
+ Ci_rotated = (Ci * g)
36
+ C_macro = Ci_rotated.Hill_average()
37
+ eigen_stiff = C_macro.eig_stiffnesses
38
+ keep_on = True
39
+ k = 0
40
+ message = 'Maximum number of iterations is reached'
41
+ m = len(g)
42
+ A_local = FourthOrderTensor.zeros(m)
43
+ if particle_size is None:
44
+ a1 = a2 = a3 = 1
45
+ else:
46
+ a1, a2, a3 = particle_size
47
+ while keep_on:
48
+ eigen_stiff_old = eigen_stiff
49
+ C_macro_local = C_macro * (g.inv())
50
+ for i in range(m):
51
+ A_local[i] = localization_tensor(C_macro_local[i], Ci, n_phi, n_theta, a1, a2, a3)
52
+ A = A_local * g
53
+ Q = Ci_rotated.ddot(A)
54
+ if method=='stress':
55
+ CiAi_mean = Q.mean()
56
+ C_macro = StiffnessTensor.from_Kelvin(CiAi_mean._matrix, force_symmetries=True)
57
+ err = A.mean() - FourthOrderTensor.identity()
58
+ else:
59
+ B = Q.ddot(C_macro.inv())
60
+ R = Ci_rotated.inv().ddot(B)
61
+ R_mean = R.mean()
62
+ C_macro = StiffnessTensor.from_Kelvin(R_mean.inv()._matrix, force_symmetries=True)
63
+ err = B.mean() - FourthOrderTensor.identity()
64
+
65
+ # Stopping criteria
66
+ eigen_stiff = C_macro.eig_stiffnesses
67
+ abs_change = np.abs(eigen_stiff - eigen_stiff_old)
68
+ rel_change = np.max(abs_change / eigen_stiff_old)
69
+ max_abs_change = np.max(abs_change)
70
+ k += 1
71
+ if max_abs_change < atol:
72
+ keep_on = False
73
+ message = 'Absolute change is below threshold value'
74
+ if rel_change < rtol:
75
+ keep_on = False
76
+ message = 'Relative change is below threshold value'
77
+ if k == max_iter:
78
+ keep_on = False
79
+ if display:
80
+ err = np.max(np.abs(err._matrix))
81
+ print('Iter #{}: abs. change={:0.5f}; rel. change={:0.5f}; error={:0.5f}'.format(k, max_abs_change, rel_change,err))
82
+ return C_macro, message
83
+
84
+ C=StiffnessTensor.cubic(C11=108, C44=28.3, C12=62)
85
+ orientations = Rotation.random(1000)
86
+ Cmacro, msg = Kroner_Eshelby(C, orientations, method='stress', display=True)
@@ -1,10 +1,8 @@
1
- from Elasticipy.Plasticity import JohnsonCook
2
- from Elasticipy.StressStrainTensors import StressTensor, StrainTensor
3
- from Elasticipy.FourthOrderTensor import StiffnessTensor
1
+ from Elasticipy.plasticity import JohnsonCook
2
+ from Elasticipy.tensors.stress_strain import StressTensor, StrainTensor
3
+ from Elasticipy.tensors.elasticity import StiffnessTensor
4
4
  import numpy as np
5
5
  from matplotlib import pyplot as plt
6
- import matplotlib as mpl
7
- mpl.use('Qt5Agg') # Ensure interactive plot
8
6
 
9
7
 
10
8
  JC = JohnsonCook(A=363, B=792.7122, n=0.5756) # https://doi.org/10.1016/j.matpr.2020.05.213
@@ -70,4 +68,5 @@ for j, model in enumerate(models):
70
68
  ax.plot(eps_xy, stress_mag, label=labels[j])
71
69
  ax.set_xlabel(r'$\varepsilon_{xy}$')
72
70
  ax.set_ylabel('Shear stress (MPa)')
73
- ax.legend()
71
+ ax.legend()
72
+ fig.show()
@@ -1,4 +1,4 @@
1
- from Elasticipy.FourthOrderTensor import StiffnessTensor
1
+ from Elasticipy.tensors.elasticity import StiffnessTensor
2
2
 
3
3
  C = StiffnessTensor.from_MP("mp-1048")
4
4
  C.save_to_txt("TiNi.txt")
Binary file
@@ -112,7 +112,7 @@ orthogonal sections.
112
112
 
113
113
  ![Young modulus (GPa) of Cu single crystal as a 3D surface (a) or a pole figure (b);
114
114
  Young modulus of Cu polycrystal with $[001]$ fiber texture, plotted in three orthogonal sections, depending on the
115
- averaging method. \label{fig:Young}](YoungModulus.png)
115
+ averaging method (c). \label{fig:Young}](YoungModulus.png)
116
116
 
117
117
  Elasticipy also introduces the concept of *tensor arrays*, in a similar way as in MTEX [@MTEX], allowing to
118
118
  process several tensors at once with simple and highly efficient commands. In order to highlight the performances
@@ -136,17 +136,20 @@ to other averaging methods (e.g. self-consistent models), possibly beyond linear
136
136
  with ease. It already implements thermal expansion.
137
137
 
138
138
  # Usage
139
+ This section presents the syntaxes of few basic operations performed with Elasticipy v4.0.0.
139
140
 
140
141
  ## Plot directional engineering constants
141
142
 
142
143
  \autoref{fig:Young}.a) and b) were rendered with the following syntax:
143
144
 
144
145
  ````python
145
- from Elasticipy.FourthOrderTensor import StiffnessTensor
146
+ from Elasticipy.tensors.elasticity import StiffnessTensor
146
147
  C = StiffnessTensor.cubic(C11=186, C12=134, C44=77)
147
148
  E = C.Young_modulus
148
- E.plot3D(n_phi=500, n_theta=500)
149
- E.plot_as_pole_figure()
149
+ fig, _ = E.plot3D(n_phi=500, n_theta=500)
150
+ fig.show()
151
+ fig, _ = E.plot_as_pole_figure()
152
+ fig.show()
150
153
  ````
151
154
 
152
155
  ## Create an array of rotated stiffness tensors and compute average
@@ -160,7 +163,7 @@ n = 10000
160
163
  phi1 = np.random.random(n)*2*np.pi # Random sampling from 0 to 2pi
161
164
  Euler_angles = np.array([phi1, np.zeros(n), np.zeros(n)]).T # Fibre texture
162
165
  rotations = Rotation.from_euler('ZXZ', Euler_angles) # Bunge-Euler angles
163
- C_rotated = C * rotations # n-lenght tensor array
166
+ C_rotated = C * rotations # n-length tensor array
164
167
  ````
165
168
 
166
169
  Then, the Voigt--Reuss--Hill average [@hill] can be computed from the tensor array:
@@ -172,7 +175,8 @@ C_VRH = C_rotated.Hill_average()
172
175
  Finally, the corresponding Young moduli can be plotted in orthogonal sections, as shown in \autoref{fig:Young}.c), with:
173
176
 
174
177
  ````python
175
- C_VRH.Young_modulus.plot_xyz_sections()
178
+ fig, ax = C_VRH.Young_modulus.plot_xyz_sections()
179
+ fig.show()
176
180
  ````
177
181
 
178
182
  ## Arrays of stress/strain tensor
@@ -181,17 +185,17 @@ Efforts have been made to provide out-of-the-box simple syntaxes for common oper
181
185
  will create a tensor array corresponding to evenly-spaced strain along $[1,0,0]$ axis:
182
186
 
183
187
  ````python
184
- from Elasticipy.StressStrainTensors import StrainTensor
185
- m = 1000 # length of tensor array
186
- mag = np.linspace(0, 0.1, m) # Strain magnitude
187
- strain = StrainTensor.tensile([1,0,0], mag)
188
+ from Elasticipy.tensors.stress_strain import StrainTensor
189
+ m = 1000 # length of tensor array
190
+ mag = np.linspace(0, 0.1, m) # Strain magnitude
191
+ strain = StrainTensor.tensile([1, 0, 0], mag)
188
192
  ````
189
193
 
190
194
  Given the stiffness tensor ``C`` (see above), one can compute the corresponding stress array with:
191
195
  ````python
192
196
  stress = C * strain
193
197
  ````
194
- Finally, ``stress.von_Mises()`` returns an array of length ``n`` and data type ``float64``, providing all the
198
+ Finally, ``stress.vonMises()`` returns an array of length ``n`` and data type ``float64``, providing all the
195
199
  corresponding von Mises equivalent stresses.
196
200
 
197
201
  # References
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: elasticipy
3
- Version: 3.0.0
3
+ Version: 4.1.0
4
4
  Summary: A Python library for elasticity tensor computations
5
5
  Author-email: Dorian Depriester <dorian.dep@gmail.com>
6
6
  License: MIT
@@ -15,20 +15,22 @@ Classifier: Programming Language :: Python
15
15
  Classifier: Programming Language :: Python :: 3.10
16
16
  Classifier: Programming Language :: Python :: 3.11
17
17
  Classifier: Programming Language :: Python :: 3.12
18
- Requires-Python: >=3.10
18
+ Requires-Python: >=3.11
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: numpy
22
22
  Requires-Dist: scipy
23
23
  Requires-Dist: matplotlib
24
+ Requires-Dist: qtpy
25
+ Requires-Dist: pandas
24
26
  Provides-Extra: dev
25
27
  Requires-Dist: pytest; extra == "dev"
26
28
  Requires-Dist: pytest-cov; extra == "dev"
27
29
  Requires-Dist: pymatgen; extra == "dev"
28
30
  Requires-Dist: orix; extra == "dev"
29
- Requires-Dist: mp_api; extra == "dev"
31
+ Requires-Dist: mp_api==0.45.9; extra == "dev"
32
+ Dynamic: license-file
30
33
 
31
- # Elasticipy
32
34
  [![PyPI - Version](https://img.shields.io/pypi/v/Elasticipy?link=https%3A%2F%2Fpypi.org%2Fproject%2FElasticipy%2F)](https://pypi.org/project/elasticipy/)
33
35
  [![PyPI - Downloads](https://img.shields.io/pypi/dm/Elasticipy?link=https%3A%2F%2Fpypi.org%2Fproject%2FElasticipy%2F)](https://pypistats.org/packages/elasticipy)
34
36
  [![PyPI - License](https://img.shields.io/pypi/l/Elasticipy)](https://github.com/DorianDepriester/Elasticipy/blob/main/LICENSE)
@@ -38,9 +40,9 @@ Requires-Dist: mp_api; extra == "dev"
38
40
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/Elasticipy)
39
41
  [![status](https://joss.theoj.org/papers/8cce91b782f17f52e9ee30916cd86ad5/status.svg)](https://joss.theoj.org/papers/8cce91b782f17f52e9ee30916cd86ad5)
40
42
 
43
+ # ![Elasticipy](docs/source/logo/logo_text.svg)
41
44
 
42
-
43
- A python toolkit to manipulate strain and strain tensors, and other linear elasticity-related tensors (e.g. stiffness).
45
+ A python toolkit to manipulate stress and strain tensors, and other linear elasticity-related tensors (e.g. stiffness).
44
46
  This package also provides a collection of easy-to-use and very fast tools to work on stress and strain tensors.
45
47
 
46
48
  ## Main features
@@ -48,7 +50,7 @@ Among other features, this package implements:
48
50
 
49
51
  - Computation of elasticity tensors,
50
52
  - Analysis of elastic anisotropy and wave propagation,
51
- - Working with multidimensional arrays of strain and stress tensors,
53
+ - Working with multidimensional arrays of tensors,
52
54
  - Thermal expansion tensors,
53
55
  - Rotation of tensors,
54
56
  - Integration with crystal symmetry groups,
@@ -79,3 +81,19 @@ Certain parts of the code, particularly those related to graphical user interfac
79
81
  **excluded from code coverage analysis**. This includes the following file:
80
82
 
81
83
  - **`src/Elasticipy/gui.py`**
84
+
85
+ ## Cite this package
86
+ If you use Elasticipy, please cite [![DOI](https://zenodo.org/badge/876162900.svg)](https://doi.org/10.5281/zenodo.14501849)
87
+
88
+ You can use the following BibTeX entry:
89
+ ````bibtex
90
+ @software{Elasticipy,
91
+ author = {Depriester, Dorian},
92
+ doi = {10.5281/zenodo.15188346},
93
+ month = apr,
94
+ title = {{Elasticipy}},
95
+ url = {https://github.com/DorianDepriester/Elasticipy},
96
+ version = {4.0.0},
97
+ year = {2025}
98
+ }
99
+ ````
@@ -1,4 +1,3 @@
1
- # Elasticipy
2
1
  [![PyPI - Version](https://img.shields.io/pypi/v/Elasticipy?link=https%3A%2F%2Fpypi.org%2Fproject%2FElasticipy%2F)](https://pypi.org/project/elasticipy/)
3
2
  [![PyPI - Downloads](https://img.shields.io/pypi/dm/Elasticipy?link=https%3A%2F%2Fpypi.org%2Fproject%2FElasticipy%2F)](https://pypistats.org/packages/elasticipy)
4
3
  [![PyPI - License](https://img.shields.io/pypi/l/Elasticipy)](https://github.com/DorianDepriester/Elasticipy/blob/main/LICENSE)
@@ -8,9 +7,9 @@
8
7
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/Elasticipy)
9
8
  [![status](https://joss.theoj.org/papers/8cce91b782f17f52e9ee30916cd86ad5/status.svg)](https://joss.theoj.org/papers/8cce91b782f17f52e9ee30916cd86ad5)
10
9
 
10
+ # ![Elasticipy](docs/source/logo/logo_text.svg)
11
11
 
12
-
13
- A python toolkit to manipulate strain and strain tensors, and other linear elasticity-related tensors (e.g. stiffness).
12
+ A python toolkit to manipulate stress and strain tensors, and other linear elasticity-related tensors (e.g. stiffness).
14
13
  This package also provides a collection of easy-to-use and very fast tools to work on stress and strain tensors.
15
14
 
16
15
  ## Main features
@@ -18,7 +17,7 @@ Among other features, this package implements:
18
17
 
19
18
  - Computation of elasticity tensors,
20
19
  - Analysis of elastic anisotropy and wave propagation,
21
- - Working with multidimensional arrays of strain and stress tensors,
20
+ - Working with multidimensional arrays of tensors,
22
21
  - Thermal expansion tensors,
23
22
  - Rotation of tensors,
24
23
  - Integration with crystal symmetry groups,
@@ -48,4 +47,20 @@ The project uses unit tests with `pytest` and coverage reports generated using `
48
47
  Certain parts of the code, particularly those related to graphical user interfaces (GUIs) or visual plotting, are
49
48
  **excluded from code coverage analysis**. This includes the following file:
50
49
 
51
- - **`src/Elasticipy/gui.py`**
50
+ - **`src/Elasticipy/gui.py`**
51
+
52
+ ## Cite this package
53
+ If you use Elasticipy, please cite [![DOI](https://zenodo.org/badge/876162900.svg)](https://doi.org/10.5281/zenodo.14501849)
54
+
55
+ You can use the following BibTeX entry:
56
+ ````bibtex
57
+ @software{Elasticipy,
58
+ author = {Depriester, Dorian},
59
+ doi = {10.5281/zenodo.15188346},
60
+ month = apr,
61
+ title = {{Elasticipy}},
62
+ url = {https://github.com/DorianDepriester/Elasticipy},
63
+ version = {4.0.0},
64
+ year = {2025}
65
+ }
66
+ ````
@@ -0,0 +1,7 @@
1
+ Elasticipy.interfaces.FEPX module
2
+ ====================================
3
+
4
+ .. automodule:: Elasticipy.interfaces.FEPX
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ Elasticipy.interfaces.PRISMS module
2
+ ====================================
3
+
4
+ .. automodule:: Elasticipy.interfaces.PRISMS
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ Elasticipy.plasticity module
2
+ ============================
3
+
4
+ .. automodule:: Elasticipy.plasticity
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,25 @@
1
+ Elasticipy package
2
+ ==================
3
+
4
+ Submodules
5
+ ----------
6
+
7
+ .. toctree::
8
+ :maxdepth: 4
9
+
10
+ Elasticipy.tensors.fourth_order
11
+ Elasticipy.tensors.elasticity
12
+ Elasticipy.tensors.second_order
13
+ Elasticipy.tensors.stress_strain
14
+ Elasticipy.spherical_function
15
+ Elasticipy.plasticity
16
+ Elasticipy.interfaces.PRISMS
17
+ Elasticipy.interfaces.FEPX
18
+
19
+ Module contents
20
+ ---------------
21
+
22
+ .. automodule:: Elasticipy
23
+ :members:
24
+ :undoc-members:
25
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ Elasticipy.spherical_function module
2
+ ====================================
3
+
4
+ .. automodule:: Elasticipy.spherical_function
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ Elasticipy.tensors.elasticity module
2
+ ====================================
3
+
4
+ .. automodule:: Elasticipy.tensors.elasticity
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ Elasticipy.tensors.fourth_order module
2
+ ======================================
3
+
4
+ .. automodule:: Elasticipy.tensors.fourth_order
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ Elasticipy.tensors.second_order module
2
+ ======================================
3
+
4
+ .. automodule:: Elasticipy.tensors.second_order
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ Elasticipy.tensors.stress_strain module
2
+ =======================================
3
+
4
+ .. automodule:: Elasticipy.tensors.stress_strain
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance: