elasticipy 6.0.0__py3-none-any.whl → 6.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -75,7 +75,7 @@ def _map(matrix, mapping_convention):
75
75
  array[...,i] = matrix[...,j,k]
76
76
  return array * mapping_convention
77
77
 
78
- def filldraw_circle(ax, center, radius, color, fill=False, alpha=1.):
78
+ def _filldraw_circle(ax, center, radius, color, fill=False, alpha=1.):
79
79
  theta = np.linspace(0, 2 * np.pi, 500)
80
80
  x = center[0] + radius * np.cos(theta)
81
81
  y = center[1] + radius * np.sin(theta)
@@ -572,12 +572,12 @@ class SecondOrderTensor:
572
572
 
573
573
  We can for instance check that:
574
574
 
575
- >>> AB_pair[5] == A[5].dot(B[5])
575
+ >>> print(AB_pair[5] == A[5].dot(B[5]))
576
576
  True
577
577
 
578
578
  and:
579
579
 
580
- >>> AB_cross[0,1] == A[0].dot(B[1])
580
+ >>> print(AB_cross[0,1] == A[0].dot(B[1]))
581
581
  True
582
582
 
583
583
  See Also
@@ -1345,10 +1345,111 @@ class SecondOrderTensor:
1345
1345
  E13 etc.
1346
1346
  kwargs : dict
1347
1347
  Keyword arguments passed to pandas.DataFrame.to_csv()
1348
+
1349
+ See Also
1350
+ --------
1351
+ load_from_txt : load a tensor array from a text file
1352
+
1353
+ Examples
1354
+ --------
1355
+ Let's start with a random tensor:
1356
+
1357
+ >>> from elasticipy.tensors.second_order import SecondOrderTensor
1358
+ >>> t = SecondOrderTensor.rand(seed=123) # Use seed to ensure reproducibility
1359
+ >>> t
1360
+ Second-order tensor
1361
+ [[0.68235186 0.05382102 0.22035987]
1362
+ [0.18437181 0.1759059 0.81209451]
1363
+ [0.923345 0.2765744 0.81975456]]
1364
+
1365
+ Then, this tensor can be saved to a text file:
1366
+
1367
+ >>> t.save_as_txt('random_tensor.txt')
1368
+
1369
+ The content of this file will look like this::
1370
+
1371
+ 11,12,13,21,22,23,31,32,33
1372
+ 0.6823518632481435,0.053821018802222675,0.22035987277261138,0.1843718106986697,0.17590590108503035,0.8120945066557737,0.9233449980270564,0.27657439779710624,0.8197545615930021
1373
+
1374
+
1375
+ Later, this file can be read with ``load_from_txt``:
1376
+
1377
+ >>> t2 = SecondOrderTensor.load_from_txt('random_tensor.txt')
1378
+ >>> t2
1379
+ Second-order tensor
1380
+ Shape=(1,)
1381
+
1382
+ One can note that the returned object is an array here (although ``t`` was a single tensor). This is because the
1383
+ functions above are mainly meant to deal with tensor arrays. Still, we have:
1384
+
1385
+ >>> t2[0]
1386
+ Second-order tensor
1387
+ [[0.68235186 0.05382102 0.22035987]
1388
+ [0.18437181 0.1759059 0.81209451]
1389
+ [0.923345 0.2765744 0.81975456]]
1390
+
1391
+ Now, let's consider a random tensor array:
1392
+
1393
+ >>> t = SecondOrderTensor.rand(shape=(100,), seed=123)
1394
+
1395
+ Have a look on its first value:
1396
+
1397
+ >>> t[0]
1398
+ Second-order tensor
1399
+ [[0.68235186 0.05382102 0.22035987]
1400
+ [0.18437181 0.1759059 0.81209451]
1401
+ [0.923345 0.2765744 0.81975456]]
1402
+
1403
+ Now save the array:
1404
+
1405
+ >>> t.save_as_txt('random_tensor_array.txt')
1406
+
1407
+ and try to reload it:
1408
+
1409
+ >>> t2 = SecondOrderTensor.load_from_txt('random_tensor_array.txt')
1410
+
1411
+ One can check that the original shape has bee retreived:
1412
+
1413
+ >>> t2.shape
1414
+ (100,)
1415
+
1416
+ And that its value are almost the same of the original one (because of round off errors), e.g.:
1417
+
1418
+ >>> t2[0]
1419
+ Second-order tensor
1420
+ [[0.68235186 0.05382102 0.22035987]
1421
+ [0.18437181 0.1759059 0.81209451]
1422
+ [0.923345 0.2765744 0.81975456]]
1423
+
1424
+ By default, the columns in the text file are named 11, 12, etc. These names can be appended with a prefix:
1425
+
1426
+ >>> t.save_as_txt('random_tensor_array_with_prefix.txt', name_prefix='E')
1427
+
1428
+ In this case, the resulting text file will look like this::
1429
+
1430
+ E11,E12,E13,E21,E22,E23,E31,E32,E33
1431
+ 0.6823518632481435,0.053821018802222675,0.22035987277261138,0.1843718106986697,0.17590590108503035,0.8120945066557737,0.9233449980270564,0.27657439779710624,0.8197545615930021
1432
+ 0.8898926931111859,0.5129704552295319,0.24496460106879647,0.8242415960974113,0.21376296337509548,0.7414670522347097,0.6299402045896808,0.927407258525167,0.23190818860641882
1433
+ 0.7991251286200829,0.5181650368527142,0.23155562481706748,0.16590399324074456,0.49778896849779386,0.5827246406153199,0.18433798742847973,0.014894916760232246,0.47113322889046083
1434
+ [...]
1435
+
1436
+ And it can still be parsed to rebuild the tensor:
1437
+
1438
+ >>> t3 = SecondOrderTensor.load_from_txt('random_tensor_array_with_prefix.txt', name_prefix='E')
1439
+
1440
+ One can check that all the values of ``t2`` and ``t3`` are the same:
1441
+
1442
+ >>> import numpy as np
1443
+ >>> np.all(t3 == t2)
1444
+ np.True_
1348
1445
  """
1349
1446
  if self.ndim > 1:
1350
1447
  raise ValueError('The array must be flatten before getting dumped to text file.')
1351
1448
  else:
1449
+ if self.shape:
1450
+ matrix = self.matrix
1451
+ else:
1452
+ matrix = self.matrix[np.newaxis,:,:]
1352
1453
  d = dict()
1353
1454
  for i in range(3):
1354
1455
  if isinstance(self, SkewSymmetricSecondOrderTensor):
@@ -1359,7 +1460,7 @@ class SecondOrderTensor:
1359
1460
  r =range(3)
1360
1461
  for j in r:
1361
1462
  key = name_prefix + '{}{}'.format(i+1, j+1)
1362
- d[key] = self.C[i,j]
1463
+ d[key] = matrix[:,i,j]
1363
1464
  df = pd.DataFrame(d)
1364
1465
  df.to_csv(file, index=False, **kwargs)
1365
1466
 
@@ -1384,9 +1485,9 @@ class SecondOrderTensor:
1384
1485
  df = pd.read_csv(file, **kwargs)
1385
1486
  matrix = np.zeros((len(df), 3, 3))
1386
1487
  for i in range(3):
1387
- if cls is SkewSymmetricSecondOrderTensor:
1488
+ if issubclass(cls, SkewSymmetricSecondOrderTensor):
1388
1489
  r = range(i+1, 3)
1389
- elif cls is SymmetricSecondOrderTensor:
1490
+ elif issubclass(cls, SymmetricSecondOrderTensor):
1390
1491
  r = range(i, 3)
1391
1492
  else:
1392
1493
  r= range(3)
@@ -1458,9 +1559,9 @@ class SecondOrderTensor:
1458
1559
  >>> c.shape
1459
1560
  (2, 3)
1460
1561
  >>> np.all(c[0] == a)
1461
- True
1562
+ np.True_
1462
1563
  >>> np.all(c[1] == b)
1463
- True
1564
+ np.True_
1464
1565
 
1465
1566
  >>> a = SecondOrderTensor.rand(shape=(3, 4))
1466
1567
  >>> b = SecondOrderTensor.rand(shape=(3, 4))
@@ -1468,9 +1569,9 @@ class SecondOrderTensor:
1468
1569
  >>> c.shape
1469
1570
  (3, 2, 4)
1470
1571
  >>> np.all(c[:,0,:] == a)
1471
- True
1572
+ np.True_
1472
1573
  >>> np.all(c[:,1,:] == b)
1473
- True
1574
+ np.True_
1474
1575
  """
1475
1576
  mat_array = [a.matrix for a in arrays]
1476
1577
  if axis<0:
@@ -1516,7 +1617,7 @@ class SymmetricSecondOrderTensor(SecondOrderTensor):
1516
1617
 
1517
1618
  and check that a==b:
1518
1619
 
1519
- >>> a==b
1620
+ >>> print(a==b)
1520
1621
  True
1521
1622
  """
1522
1623
  if isinstance(mat, SecondOrderTensor):
@@ -1685,12 +1786,12 @@ class SymmetricSecondOrderTensor(SecondOrderTensor):
1685
1786
  center3 = ((a + c) /2, 0)
1686
1787
 
1687
1788
  fig, ax = plt.subplots()
1688
- filldraw_circle(ax, center1, r1, 'skyblue')
1689
- filldraw_circle(ax, center2, r2, 'lightgreen')
1690
- filldraw_circle(ax, center3, r3, 'red')
1691
- filldraw_circle(ax, center3, r3, 'red', fill=True, alpha=0.2)
1692
- filldraw_circle(ax, center1, r1, 'white', fill=True)
1693
- filldraw_circle(ax, center2, r2, 'white', fill=True)
1789
+ _filldraw_circle(ax, center1, r1, 'skyblue')
1790
+ _filldraw_circle(ax, center2, r2, 'lightgreen')
1791
+ _filldraw_circle(ax, center3, r3, 'red')
1792
+ _filldraw_circle(ax, center3, r3, 'red', fill=True, alpha=0.2)
1793
+ _filldraw_circle(ax, center1, r1, 'white', fill=True)
1794
+ _filldraw_circle(ax, center2, r2, 'white', fill=True)
1694
1795
  ax.set_aspect('equal')
1695
1796
  ax.set_xlabel(f"Normal")
1696
1797
  ax.set_ylabel(f"Shear")
@@ -1733,7 +1834,7 @@ class SkewSymmetricSecondOrderTensor(SecondOrderTensor):
1733
1834
 
1734
1835
  and check that a==b:
1735
1836
 
1736
- >>> a==b
1837
+ >>> print(a==b)
1737
1838
  True
1738
1839
 
1739
1840
  """
@@ -4,8 +4,7 @@ from elasticipy.tensors.second_order import SymmetricSecondOrderTensor
4
4
 
5
5
  class StrainTensor(SymmetricSecondOrderTensor):
6
6
  """
7
- Class for manipulating symmetric strain tensors or arrays of symmetric strain tensors.
8
-
7
+ Class for manipulating the symmetric part of gradient tensor (aka. strain tensor), or arrays of such tensors.
9
8
  """
10
9
  name = 'Strain tensor'
11
10
  _voigt_map = [1, 1, 1, 2, 2, 2]
@@ -57,7 +56,7 @@ class StrainTensor(SymmetricSecondOrderTensor):
57
56
 
58
57
  >>> from elasticipy.tensors.stress_strain import StrainTensor
59
58
  >>> eps = StrainTensor.shear([1,0,0],[0,1,0],1e-3)
60
- >>> eps.volumetric_strain()
59
+ >>> print(eps.volumetric_strain())
61
60
  0.0
62
61
 
63
62
  Now try with hydrastatic straining:
@@ -69,7 +68,7 @@ class StrainTensor(SymmetricSecondOrderTensor):
69
68
  [[-0.001 -0. -0. ]
70
69
  [-0. -0.001 -0. ]
71
70
  [-0. -0. -0.001]]
72
- >>> eps_hydro.volumetric_strain()
71
+ >>> print(eps_hydro.volumetric_strain())
73
72
  -0.003
74
73
  """
75
74
  return self.I1
@@ -93,9 +92,11 @@ class StrainTensor(SymmetricSecondOrderTensor):
93
92
  Examples
94
93
  --------
95
94
  >>> from elasticipy.tensors.stress_strain import StrainTensor
96
- >>> StrainTensor.tensile([1,0,0], 1e-3).eq_strain()
95
+ >>> eps_eq = StrainTensor.tensile([1,0,0], 1e-3).eq_strain()
96
+ >>> print(eps_eq)
97
97
  0.000816496580927726
98
- >>> StrainTensor.shear([1,0,0],[0,1,0], 1e-3).eq_strain()
98
+ >>> eps_eq = StrainTensor.shear([1,0,0],[0,1,0], 1e-3).eq_strain()
99
+ >>> print(eps_eq)
99
100
  0.0011547005383792514
100
101
  """
101
102
  return np.sqrt(2/3 * self.ddot(self))
@@ -135,7 +136,8 @@ class StrainTensor(SymmetricSecondOrderTensor):
135
136
 
136
137
  Then, the volumetric elastic energy is:
137
138
 
138
- >>> eps.elastic_energy(sigma)
139
+ >>> e = eps.elastic_energy(sigma)
140
+ >>> print(e)
139
141
  0.13423295454545456
140
142
  """
141
143
  return 0.5 * self.ddot(stress, mode=mode)
@@ -146,6 +148,13 @@ class StrainTensor(SymmetricSecondOrderTensor):
146
148
  ax.set_ylabel(ax.get_ylabel() + ' strain')
147
149
  return fig, ax
148
150
 
151
+ def save_as_txt(self, file, name_prefix='E', **kwargs):
152
+ super().save_as_txt(file, name_prefix=name_prefix, **kwargs)
153
+
154
+ @classmethod
155
+ def load_from_txt(cls, file, name_prefix='E', **kwargs):
156
+ return super().load_from_txt(file, name_prefix=name_prefix, **kwargs)
157
+
149
158
 
150
159
  class StressTensor(SymmetricSecondOrderTensor):
151
160
  """
@@ -185,13 +194,13 @@ class StressTensor(SymmetricSecondOrderTensor):
185
194
 
186
195
  >>> from elasticipy.tensors.stress_strain import StressTensor
187
196
  >>> sigma = StressTensor.tensile([1,0,0],1)
188
- >>> sigma.vonMises()
197
+ >>> print(sigma.vonMises())
189
198
  1.0
190
199
 
191
200
  For (single-valued) shear stress:
192
201
 
193
202
  >>> sigma = StressTensor.shear([1,0,0],[0,1,0],1)
194
- >>> sigma.vonMises()
203
+ >>> print(sigma.vonMises())
195
204
  1.7320508075688772
196
205
 
197
206
  For arrays of stresses :
@@ -224,13 +233,13 @@ class StressTensor(SymmetricSecondOrderTensor):
224
233
 
225
234
  >>> from elasticipy.tensors.stress_strain import StressTensor
226
235
  >>> sigma = StressTensor.tensile([1,0,0],1)
227
- >>> sigma.Tresca()
236
+ >>> print(sigma.Tresca())
228
237
  1.0
229
238
 
230
239
  For (single-valued) shear stress:
231
240
 
232
241
  >>> sigma = StressTensor.shear([1,0,0],[0,1,0],1)
233
- >>> sigma.Tresca()
242
+ >>> print(sigma.Tresca())
234
243
  2.0
235
244
 
236
245
  For arrays of stresses :
@@ -293,20 +302,13 @@ class StressTensor(SymmetricSecondOrderTensor):
293
302
 
294
303
  Examples
295
304
  --------
296
- In order to illustrate this function, we consider a triaxial tensile stress:
297
-
298
- >>> from elasticipy.tensors.stress_strain import StressTensor
299
- >>> sigma = StressTensor.tensile([1,0,0],1) + StressTensor.tensile([0,1,0],3)
305
+ Consider the biaxial stress-state:
300
306
 
301
- The princiapl stresses are obviously 0, 1 and 2:
307
+ .. plot::
302
308
 
303
- >>> sigma.principal_stresses()
304
- array([3., 1., 0.])
305
-
306
- These principal stresses can be directly plotted with:
307
-
308
- >>> fig, ax = sigma.draw_Mohr_circles()
309
- >>> fig.show()
309
+ from elasticipy.tensors.stress_strain import StressTensor
310
+ sigma = StressTensor.tensile([1,0,0],1) + StressTensor.tensile([0,1,0],3)
311
+ sigma.draw_Mohr_circles()
310
312
  """
311
313
  fig, ax = super().draw_Mohr_circles()
312
314
  ax.set_xlabel(ax.get_xlabel() + ' stress')
@@ -348,7 +350,7 @@ class StressTensor(SymmetricSecondOrderTensor):
348
350
 
349
351
  >>> from elasticipy.tensors.stress_strain import StressTensor
350
352
  >>> s1 = StressTensor.tensile([1,0,0],1.)
351
- >>> s1.triaxiality()
353
+ >>> print(s1.triaxiality())
352
354
  0.3333333333333333
353
355
 
354
356
  For a stress array (e.g. for biaxial tensile stress):
@@ -357,4 +359,18 @@ class StressTensor(SymmetricSecondOrderTensor):
357
359
  >>> s2.triaxiality()
358
360
  array([0.33333333, 0.57735027, 0.66666667])
359
361
  """
360
- return self.I1 / self.vonMises() / 3
362
+ return self.I1 / self.vonMises() / 3
363
+
364
+ def save_as_txt(self, file, name_prefix='S', **kwargs):
365
+ super().save_as_txt(file, name_prefix=name_prefix, **kwargs)
366
+
367
+ @classmethod
368
+ def load_from_txt(cls, file, name_prefix='S', **kwargs):
369
+ return super().load_from_txt(file, name_prefix=name_prefix, **kwargs)
370
+
371
+
372
+ class StrainRateTensor(StrainTensor):
373
+ """
374
+ Class for manipulating strain rate tensors, or arrays of strain rate tensors.
375
+ """
376
+ name = 'Strain rate tensor'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: elasticipy
3
- Version: 6.0.0
3
+ Version: 6.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
@@ -25,6 +25,7 @@ Requires-Dist: matplotlib
25
25
  Requires-Dist: qtpy
26
26
  Requires-Dist: pyqt5
27
27
  Requires-Dist: pandas
28
+ Requires-Dist: orix
28
29
  Provides-Extra: dev
29
30
  Requires-Dist: pytest; extra == "dev"
30
31
  Requires-Dist: pytest-cov; extra == "dev"
@@ -44,7 +45,7 @@ Dynamic: license-file
44
45
  [![codecov](https://codecov.io/gh/DorianDepriester/Elasticipy/graph/badge.svg?token=VUZPEUPBH1)](https://codecov.io/gh/DorianDepriester/Elasticipy)
45
46
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/Elasticipy)
46
47
  [![DOI](https://joss.theoj.org/papers/10.21105/joss.07940/status.svg)](https://doi.org/10.21105/joss.07940)
47
- [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/DorianDepriester/Elasticipy/HEAD?urlpath=%2Fdoc%2Ftree%2FElasticipy_for_the_Impatient.ipynb)
48
+ [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/DorianDepriester/elasticipy-notebook/HEAD?urlpath=%2Fdoc%2Ftree%2FElasticipy.ipynb)
48
49
 
49
50
 
50
51
  # ![Elasticipy](https://raw.githubusercontent.com/DorianDepriester/Elasticipy/refs/heads/main/docs/source/logo/logo_text.svg)
@@ -82,7 +83,7 @@ Tutorials and full documentation are available on [ReadTheDoc](https://elasticip
82
83
 
83
84
  ## ⏱️ Elasticipy in a nutshell
84
85
  Take a 5-minute tour through Elasticipy's main features by running the online Jupyter Notebook, hosted on
85
- [Binder](https://mybinder.org/v2/gh/DorianDepriester/Elasticipy/HEAD?urlpath=%2Fdoc%2Ftree%2FElasticipy_for_the_Impatient.ipynb).
86
+ [Binder](https://mybinder.org/v2/gh/DorianDepriester/elasticipy-notebook/HEAD?urlpath=%2Fdoc%2Ftree%2FElasticipy.ipynb).
86
87
 
87
88
 
88
89
  ## 🔍 Sources
@@ -113,7 +114,8 @@ You can use the following BibTeX entry:
113
114
  number = {115},
114
115
  pages = {7940},
115
116
  author = {Depriester, Dorian and Kubler, Régis},
116
- title = {elasticipy: A Python package for linear elasticity and tensor analysis},
117
+ title = {Elasticipy: A Python package for linear elasticity and tensor analysis},
117
118
  journal = {Journal of Open Source Software}
118
119
  }
119
120
  ````
121
+ Alternatively, you can by me a coffee on [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/W7W11S5TCH)
@@ -0,0 +1,31 @@
1
+ elasticipy/FourthOrderTensor.py,sha256=tfrR2UMDXAOncViyvbjzExKEiA1AvwzKhgeYD71op2o,508
2
+ elasticipy/StressStrainTensors.py,sha256=qf1hCDtX2N_WlInaav0Ewkqc1J_opKbpO-07i-GRPoQ,491
3
+ elasticipy/ThermalExpansion.py,sha256=hn4MPBaex_LQLjmyfKyYLwTKKYPIOFeOMATlhfq_ROg,411
4
+ elasticipy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ elasticipy/crystal_symmetries.py,sha256=DAX-XPgYqI2nFvf6anCVvZ5fLM0CNSDJ7r2h15l3Hoc,3958
6
+ elasticipy/crystal_texture.py,sha256=1nLUW8hQ2l3Xq5tMwHYABbpokZoJ5Y8V2AR6HTR4ce8,28431
7
+ elasticipy/plasticity.py,sha256=2rhEcpApfArv0NE8ZYXlJIrbiDKT-FNtvv7hX_liLbU,16763
8
+ elasticipy/polefigure.py,sha256=-Qrf5B4_m8HSlwXfOntie75EUqKnFsl7ZeXx9lNPUsY,4119
9
+ elasticipy/spherical_function.py,sha256=nCSp0o0XVLRU1C8_52dDw3ddTPZM7WCCO5_KOL90UK0,42454
10
+ elasticipy/gui/__init__.py,sha256=nABRj-Vx3Fhxnvd5ag9_TlwCqveXy6A_BX00jKpCzsE,79
11
+ elasticipy/gui/about.py,sha256=zxsU2eBHmcmHdwFvdZ6Pn73PJf72-pmtwx30nMQfnS8,1456
12
+ elasticipy/gui/gui.py,sha256=KH7iLUBTaMxx1YcNN9XQ-xCs8LLSzPwBdlRpmzho0oA,18460
13
+ elasticipy/gui/rotate_window.py,sha256=xzNx9fzCRXFBxq2DqPxIeXS817vcR1K6jQyBGX4b_eg,2398
14
+ elasticipy/interfaces/FEPX.py,sha256=t6c8bqiBDeG6FKCEUFCuA2_qnT-jOfvKvtBk3l8qBQo,4231
15
+ elasticipy/interfaces/PRISMS.py,sha256=m2PLmhdL49YYSivsMGdDcaMJdDXNBzjaqkRE_EIT6wQ,3844
16
+ elasticipy/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ elasticipy/resources/favicon.png,sha256=sUmEetdu_fDc7JFSiEn6c7DTU7Y6ZYgRUgaC6RoB4PQ,1492
18
+ elasticipy/resources/logo_text.png,sha256=LuiJmhXuOp0DS5-Gye4x7_Dt98jD-Dv0HsVoXit-ldo,67524
19
+ elasticipy/tensors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ elasticipy/tensors/elasticity.py,sha256=BFmudyrF9NCwL8wXYhhztPvJNqztXKp6Xcf_wLHjy4Q,104904
21
+ elasticipy/tensors/fourth_order.py,sha256=pZe1COdISzZt81IaJoibWProQH1klS5Pbu4VapTH-a4,50283
22
+ elasticipy/tensors/mapping.py,sha256=K9SQDLgg3jW3rpDYzdpwcOJQRf04iSw7xjj8N3fHwT8,3178
23
+ elasticipy/tensors/second_order.py,sha256=73SD9p8JFyAuWsTxvBrFUdyxqTtlODnsxPOD7uJrFEA,60895
24
+ elasticipy/tensors/stress_strain.py,sha256=1LDPrm3sXl-fkjSHt6km6XX6c1veVkw-HojJtCR8C2o,11229
25
+ elasticipy/tensors/thermal_expansion.py,sha256=i0Pld_1VlrfEp-9nhWK1VRm0H2yqcDQ3V9_8vDKpCiA,8648
26
+ elasticipy-6.1.0.dist-info/licenses/LICENSE,sha256=qNthTMSjVkIDM1_BREgVFQHdn1wVNQi9pwWVfTIazMA,1074
27
+ elasticipy-6.1.0.dist-info/METADATA,sha256=aQOB1hOhUieMez8go4a8EYRbUHiZafjww3ITt7wsCos,5800
28
+ elasticipy-6.1.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
29
+ elasticipy-6.1.0.dist-info/entry_points.txt,sha256=FzF1VdnQui3zO3oM49U0s-3efK_n9tTRCxwSi79uEIU,70
30
+ elasticipy-6.1.0.dist-info/top_level.txt,sha256=EkWNSvs2L7F2nB0tvSJcxv6P3E9OYrIKhczEWu4SetI,11
31
+ elasticipy-6.1.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,2 @@
1
+ [gui_scripts]
2
+ elasticipy-gui = elasticipy.gui:crystal_elastic_plotter
@@ -1,126 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
-
4
- <svg
5
- width="78.908997mm"
6
- height="36.786999mm"
7
- viewBox="0 0 78.908996 36.786998"
8
- version="1.1"
9
- id="svg1"
10
- sodipodi:docname="logo_text.svg"
11
- inkscape:export-filename="logo_text_whitebg.png"
12
- inkscape:export-xdpi="422.73401"
13
- inkscape:export-ydpi="422.73401"
14
- inkscape:version="1.4 (86a8ad7, 2024-10-11)"
15
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
16
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
17
- xmlns:xlink="http://www.w3.org/1999/xlink"
18
- xmlns="http://www.w3.org/2000/svg"
19
- xmlns:svg="http://www.w3.org/2000/svg">
20
- <sodipodi:namedview
21
- id="namedview1"
22
- pagecolor="#ffffff"
23
- bordercolor="#000000"
24
- borderopacity="0.25"
25
- inkscape:showpageshadow="2"
26
- inkscape:pageopacity="0.0"
27
- inkscape:pagecheckerboard="0"
28
- inkscape:deskcolor="#d1d1d1"
29
- inkscape:document-units="mm"
30
- inkscape:zoom="1.4520904"
31
- inkscape:cx="120.51591"
32
- inkscape:cy="48.550696"
33
- inkscape:window-width="1920"
34
- inkscape:window-height="1017"
35
- inkscape:window-x="1912"
36
- inkscape:window-y="-8"
37
- inkscape:window-maximized="1"
38
- inkscape:current-layer="layer1"
39
- inkscape:export-bgcolor="#ffffffff"
40
- showgrid="false" />
41
- <defs
42
- id="defs1">
43
- <linearGradient
44
- inkscape:collect="always"
45
- xlink:href="#linearGradient4671"
46
- id="linearGradient11"
47
- gradientUnits="userSpaceOnUse"
48
- gradientTransform="matrix(0.26458333,0,0,-0.26458333,62.63747,141.42565)"
49
- x1="333.83426"
50
- y1="-25.560944"
51
- x2="333.83426"
52
- y2="-79.333092"
53
- spreadMethod="pad" />
54
- <linearGradient
55
- id="linearGradient4671">
56
- <stop
57
- style="stop-color:#ffd43b;stop-opacity:1"
58
- offset="0"
59
- id="stop4673" />
60
- <stop
61
- style="stop-color:#ffe873;stop-opacity:1"
62
- offset="1"
63
- id="stop4675" />
64
- </linearGradient>
65
- <linearGradient
66
- inkscape:collect="always"
67
- xlink:href="#linearGradient4689"
68
- id="linearGradient9"
69
- gradientUnits="userSpaceOnUse"
70
- gradientTransform="matrix(0.26458333,0,0,0.26458333,79.98938,139.19081)"
71
- x1="181.30275"
72
- y1="-17.131027"
73
- x2="256.79184"
74
- y2="52.408573" />
75
- <linearGradient
76
- id="linearGradient4689">
77
- <stop
78
- style="stop-color:#5a9fd4;stop-opacity:1"
79
- offset="0"
80
- id="stop4691" />
81
- <stop
82
- style="stop-color:#306998;stop-opacity:1"
83
- offset="1"
84
- id="stop4693" />
85
- </linearGradient>
86
- <linearGradient
87
- inkscape:collect="always"
88
- xlink:href="#linearGradient4671"
89
- id="linearGradient2"
90
- x1="171.01212"
91
- y1="149.74876"
92
- x2="171.01212"
93
- y2="161.5468"
94
- gradientUnits="userSpaceOnUse" />
95
- </defs>
96
- <g
97
- inkscape:label="Layer 1"
98
- inkscape:groupmode="layer"
99
- id="layer1"
100
- transform="translate(-126.73542,-133.35)">
101
- <path
102
- id="text1-4-5-2-54-3"
103
- style="font-size:192px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;fill:url(#linearGradient11);fill-opacity:1;stroke-width:0.264583"
104
- d="m 150.16462,142.15596 c -0.96996,0 -1.83852,0.007 -2.66237,0.0186 0.52425,0.50605 0.97673,1.07142 1.28261,1.74873 0.50892,1.12689 0.82992,2.28417 0.82992,3.53829 v 1.39991 c 2.66736,0.0162 5.07681,0.0196 8.15455,0.0196 0,-0.87942 0.0155,-1.76812 0.0155,-2.4474 0,-2.51527 -0.32529,-4.27777 -7.62021,-4.27777 z m -11.61583,2.07016 c -0.74411,1.15235 -0.76426,2.93071 -0.76946,5.67458 v 0.0248 c 0,1.14102 0.14056,2.1084 0.42168,2.90215 0.11054,0.30092 0.24218,0.57875 0.39378,0.83406 1.45247,-0.19775 2.71407,-2.31732 2.71404,-4.72736 3e-5,-2.43536 -1.28837,-4.55112 -2.76004,-4.70824 z m 16.1029,0.14314 a 1.3449186,1.3449186 0 0 1 1.34513,1.34514 1.3449186,1.3449186 0 0 1 -1.34513,1.34513 1.3449186,1.3449186 0 0 1 -1.34462,-1.34513 1.3449186,1.3449186 0 0 1 1.34462,-1.34514 z m -5.05448,5.9893 c -0.0858,2.29191 -0.60955,4.25462 -1.45572,5.93038 -0.90878,1.81756 -2.28539,2.88556 -4.03025,3.84887 -1.74485,0.96331 -3.67874,1.21646 -6.13244,1.21646 -0.067,0 -0.12977,-0.004 -0.19585,-0.005 -3.2e-4,0.0383 -0.004,0.0729 -0.004,0.11162 v 0.0248 c 0.0134,7.04478 0.0291,7.74475 12.38529,7.74475 7.29492,0 7.62021,-1.7625 7.62021,-4.27777 0,-0.67928 -0.0155,-1.56798 -0.0155,-2.4474 -4.40154,0 -7.05527,-0.01 -11.76001,0.046 -0.74191,0.01 -0.77069,-0.8692 -0.01,-0.8692 4.27995,0 5.96966,-1.55757 5.96966,-6.01823 0,-2.77849 -0.67428,-4.46657 -2.37195,-5.30562 z"
105
- inkscape:label="epsilon" />
106
- <path
107
- id="text1-1-5-1"
108
- style="font-weight:bold;font-size:192px;font-family:Bahnschrift;-inkscape-font-specification:'Bahnschrift Bold';display:inline;fill:url(#linearGradient9);stroke-width:0.705556"
109
- d="m 143.34747,134.44325 c -2.87272,0 -8.44558,0.27355 -10.72338,1.48363 -1.5875,0.84336 -2.80293,2.06706 -3.64629,3.6711 -0.82682,1.60402 -1.24023,3.53053 -1.24023,5.77949 v 4.19199 c 0,2.36472 0.41341,4.39043 1.24023,6.07715 0.84336,1.67018 2.05879,2.94349 3.64629,3.81992 1.5875,0.87644 3.49746,1.31465 5.72988,1.31465 2.23242,0 4.14239,-0.43821 5.72989,-1.31465 1.5875,-0.87643 2.79466,-2.14147 3.62148,-3.79511 0.84336,-1.67019 1.26504,-3.67937 1.26504,-6.02754 v -2.03399 c 0,-1.14101 -0.23151,-2.22415 -0.69453,-3.24941 -0.46302,-1.02526 -1.14102,-1.87689 -2.03399,-2.55488 -0.29302,-0.22791 -0.60567,-0.42439 -0.93431,-0.59532 0,0 6.299,0.0465 8.87181,0 0.001,-0.72917 0.0207,-1.55216 0.0207,-2.13475 0,-3.69368 -0.73316,-4.63228 -10.85257,-4.63228 z m 7.72666,2.2779 a 1.3383084,1.3383084 0 0 1 1.33841,1.33842 1.3383084,1.3383084 0 0 1 -1.33841,1.3379 1.3383084,1.3383084 0 0 1 -1.33791,-1.3379 1.3383084,1.3383084 0 0 1 1.33791,-1.33842 z m -12.67365,6.68641 c 1.97408,3e-4 3.57433,2.43687 3.57446,5.44257 6e-5,3.00589 -1.60025,5.44278 -3.57446,5.44308 -1.97441,1.4e-4 -3.57503,-2.43688 -3.57497,-5.44308 1.3e-4,-3.00601 1.60069,-5.44271 3.57497,-5.44257 z"
110
- inkscape:label="sigma" />
111
- <path
112
- style="font-weight:500;font-size:16.9333px;font-family:Flux;-inkscape-font-specification:'Flux Medium';fill:url(#linearGradient2);stroke-width:0.0352778;fill-opacity:1"
113
- d="m 155.92935,161.50243 v -0.64346 c -0.8636,-0.0339 -1.38853,-0.27094 -1.38853,-1.25307 v -10.02451 l -1.20227,0.38947 v 9.66891 c 0,1.27 0.94827,2.01506 2.5908,1.86266 z m 6.62093,-1.25306 v -4.28413 c 0,-1.37159 -1.2192,-2.18439 -2.45533,-2.18439 -1.016,0 -1.69333,0.16933 -2.57386,0.64346 l 0.3048,0.7112 c 0.66039,-0.33866 1.20226,-0.52493 1.94732,-0.52493 0.82974,0 1.60867,0.57573 1.60867,1.4224 v 0.72813 h -2.01506 c -1.4224,-0.0169 -2.54,0.8636 -2.55693,2.30293 -0.0339,1.35466 1.0668,2.42146 2.40453,2.45533 1.47319,0.0169 2.62466,-0.5588 3.33586,-1.27 z m -1.20227,-0.16933 c -0.22013,0.23706 -0.88053,0.62653 -1.59173,0.60959 -0.98213,0 -1.69333,-0.81279 -1.69333,-1.65946 0,-0.93133 0.7112,-1.4732 1.65947,-1.4732 0.60959,-0.0169 1.23613,-0.0169 1.62559,-0.0169 z m 5.04613,1.50706 c 1.4224,0 2.92947,-0.74507 2.9464,-2.3368 0,-0.67733 -0.3048,-1.11759 -0.7112,-1.43933 -0.38947,-0.3048 -0.8636,-0.47413 -1.3208,-0.6604 -0.47413,-0.18626 -0.98213,-0.38946 -1.35466,-0.55879 -0.38947,-0.16934 -0.64347,-0.4064 -0.64347,-0.82974 0.0169,-0.79586 0.79587,-1.16839 1.50707,-1.16839 0.54186,0.0169 1.0668,0.16933 1.62559,0.49106 l 0.4572,-0.72813 c -0.67733,-0.37253 -1.38853,-0.62653 -2.15053,-0.62653 -1.32079,0 -2.59079,0.77893 -2.59079,2.20133 0,0.69426 0.3048,1.11759 0.7112,1.40546 0.38946,0.3048 0.8636,0.47413 1.3208,0.64347 0.23706,0.0677 0.47413,0.16933 0.69426,0.254 0.5588,0.22013 1.2192,0.44026 1.23613,1.16839 0.0339,0.93133 -0.93133,1.30387 -1.74413,1.30387 -0.6604,-0.0169 -1.40546,-0.27094 -1.91346,-0.6604 l -0.44027,0.7112 c 0.64347,0.49106 1.50707,0.82973 2.37066,0.82973 z m 4.77519,-6.82412 v 4.85986 c 0,1.26999 0.98213,2.01506 2.62466,1.86266 v -0.64347 c -0.8636,-0.0339 -1.38853,-0.27093 -1.38853,-1.25306 v -4.82599 h 1.38853 v -0.79587 h -1.38853 v -2.50612 l -1.23613,0.44026 v 2.06586 h -0.84667 v 0.79587 z m 4.72438,6.62092 h 1.2192 v -7.60305 l -1.2192,0.4064 z m -0.2032,-9.99065 c 0,0.44027 0.3556,0.79587 0.79587,0.79587 0.4572,0 0.8128,-0.3556 0.8128,-0.79587 0,-0.4572 -0.3556,-0.8128 -0.79587,-0.8128 -0.4572,0 -0.8128,0.3556 -0.8128,0.79587 z m 6.33305,10.14305 c 1.08373,0 1.99813,-0.3048 2.72626,-0.77893 l -0.32173,-0.64347 c -0.67733,0.32173 -1.25306,0.6096 -2.04893,0.59267 -1.40546,-0.0169 -2.11666,-1.60867 -2.11666,-2.9464 0,-1.40546 0.6604,-3.08186 1.99813,-3.14959 0.57573,-0.0339 1.27,0.16933 1.77799,0.4064 l 0.3556,-0.6604 c -1.16839,-0.72813 -2.74319,-0.77893 -3.77612,-0.0677 -1.03293,0.7112 -1.60867,2.08279 -1.60867,3.47132 0,1.86267 1.1176,3.7592 3.01413,3.77613 z m 4.45347,-0.1524 h 1.21919 v -7.60305 l -1.21919,0.4064 z m -0.2032,-9.99065 c 0,0.44027 0.3556,0.79587 0.79586,0.79587 0.4572,0 0.8128,-0.3556 0.8128,-0.79587 0,-0.4572 -0.3556,-0.8128 -0.79586,-0.8128 -0.4572,0 -0.8128,0.3556 -0.8128,0.79587 z"
114
- id="text1"
115
- aria-label="lasticipy"
116
- sodipodi:nodetypes="ccsccsccssccsscccccccscccsccccccccsscccccccscsccscccccccccccccccssssssccccsccccscccccccssssss"
117
- inkscape:label="lastici" />
118
- <path
119
- style="font-weight:500;font-size:16.9333px;font-family:Flux;-inkscape-font-specification:'Flux Medium';fill:#646464;stroke-width:0.0352778"
120
- d="m 193.45354,153.79778 c 2.01506,-0.0339 2.92946,1.86266 2.94639,4.01319 0,1.89653 -0.94826,3.67453 -2.98026,3.74226 -0.82973,0 -1.54093,-0.254 -2.23519,-0.67733 v 4.38573 l -1.2192,-0.44027 0.0169,-9.73665 c -0.0169,0 0.94827,-1.27 3.4544,-1.30386 z m -0.3048,6.87492 c 1.6256,-0.1016 1.8288,-1.69333 1.8288,-2.94639 0,-1.2192 -0.2032,-3.048 -1.74413,-3.11573 -1.04987,-0.0677 -1.89653,0.42333 -2.06587,0.59266 v 4.826 c 0.4064,0.25399 1.2192,0.69426 1.9812,0.64346 z m 6.53626,-1.69333 v -5.19852 l -1.25307,0.42333 v 5.14772 c 0,1.3716 1.27,2.16747 2.3876,2.16747 1.45626,0 2.28599,-0.4064 2.65853,-0.57574 0.0169,0.18627 0,0.13547 0,0.32174 0,0.54186 -0.0169,1.47319 -0.27094,1.94733 -0.508,0.96519 -1.86266,1.10066 -2.81093,1.23613 l 0.2032,0.77893 c 1.25307,-0.0339 3.01413,-0.508 3.64066,-1.69333 0.3556,-0.67733 0.4064,-1.9812 0.4064,-2.8448 v -6.72252 h -1.23613 v 6.04519 c -0.4064,0.27093 -1.15146,0.64347 -1.81186,0.6604 -1.10067,0.0169 -1.91346,-0.57573 -1.91346,-1.71026 z"
121
- id="text1-2"
122
- aria-label="lasticipy"
123
- sodipodi:nodetypes="ccccccccccscccccccsscsccccscccccc"
124
- inkscape:label="py" />
125
- </g>
126
- </svg>
@@ -1,30 +0,0 @@
1
- elasticipy/FourthOrderTensor.py,sha256=tfrR2UMDXAOncViyvbjzExKEiA1AvwzKhgeYD71op2o,508
2
- elasticipy/StressStrainTensors.py,sha256=qf1hCDtX2N_WlInaav0Ewkqc1J_opKbpO-07i-GRPoQ,491
3
- elasticipy/ThermalExpansion.py,sha256=hn4MPBaex_LQLjmyfKyYLwTKKYPIOFeOMATlhfq_ROg,411
4
- elasticipy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- elasticipy/crystal_symmetries.py,sha256=DAX-XPgYqI2nFvf6anCVvZ5fLM0CNSDJ7r2h15l3Hoc,3958
6
- elasticipy/plasticity.py,sha256=I0XeRbNRJ_95Y8QllL_lrWVQjAgvjlBRAh6izzoBB0E,16756
7
- elasticipy/polefigure.py,sha256=-Qrf5B4_m8HSlwXfOntie75EUqKnFsl7ZeXx9lNPUsY,4119
8
- elasticipy/spherical_function.py,sha256=e3iAKuYsi8KPiuSGa5mzSihrZwd86fCUnCUyZky8okU,42380
9
- elasticipy/gui/__init__.py,sha256=nABRj-Vx3Fhxnvd5ag9_TlwCqveXy6A_BX00jKpCzsE,79
10
- elasticipy/gui/about.py,sha256=XnGWZABk_Wz5v44KcWLTaMQLXwdfhMEK9zIex8RooMM,1424
11
- elasticipy/gui/gui.py,sha256=GfPmAiyHLfMLrllNtPw0PRflU5RQkg145beP5d5e6xI,18541
12
- elasticipy/gui/rotate_window.py,sha256=xzNx9fzCRXFBxq2DqPxIeXS817vcR1K6jQyBGX4b_eg,2398
13
- elasticipy/interfaces/FEPX.py,sha256=sLn-M572rEInhAFBp1wklaOSVYw84PueHmzVvCP57mA,4233
14
- elasticipy/interfaces/PRISMS.py,sha256=QpOBa3Q9ly10zq13oBgVMIsGkFz2Mzh-bTymF6m8YZE,3835
15
- elasticipy/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- elasticipy/resources/favicon.png,sha256=sUmEetdu_fDc7JFSiEn6c7DTU7Y6ZYgRUgaC6RoB4PQ,1492
17
- elasticipy/resources/logo_text.svg,sha256=3xF_PQJrYzgup-PHYEgb5yRPWBUUL-AXLwUSpM5EOF0,10578
18
- elasticipy/tensors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- elasticipy/tensors/elasticity.py,sha256=ailNf4n_09U73scNBZ9kJTHJWuQ77AIs49rI_1vdHSU,98391
20
- elasticipy/tensors/fourth_order.py,sha256=O0oXPXbVayXJD_dIUqadeKe2L8SFbG18Nblb6gG2SKE,49577
21
- elasticipy/tensors/mapping.py,sha256=K9SQDLgg3jW3rpDYzdpwcOJQRf04iSw7xjj8N3fHwT8,3178
22
- elasticipy/tensors/second_order.py,sha256=WSVhtFe6O5W9dIBlbqRCtWrumUl2o56leX_nCDWgBoY,57073
23
- elasticipy/tensors/stress_strain.py,sha256=9475JsQs6yiDF7bwkoMZlHBF_mK3SZy3vasc5xdtZ6M,10566
24
- elasticipy/tensors/thermal_expansion.py,sha256=i0Pld_1VlrfEp-9nhWK1VRm0H2yqcDQ3V9_8vDKpCiA,8648
25
- elasticipy-6.0.0.dist-info/licenses/LICENSE,sha256=qNthTMSjVkIDM1_BREgVFQHdn1wVNQi9pwWVfTIazMA,1074
26
- elasticipy-6.0.0.dist-info/METADATA,sha256=yDavWvY7-52dtiGsfbugkVeoMMe7BmOc5C6Doe16M9M,5673
27
- elasticipy-6.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
- elasticipy-6.0.0.dist-info/entry_points.txt,sha256=giDQPKF6ucGGxo5_PpuSqnmOka5xs_QuwCvTYTNpACY,70
29
- elasticipy-6.0.0.dist-info/top_level.txt,sha256=EkWNSvs2L7F2nB0tvSJcxv6P3E9OYrIKhczEWu4SetI,11
30
- elasticipy-6.0.0.dist-info/RECORD,,
@@ -1,2 +0,0 @@
1
- [gui_scripts]
2
- elasticipy-gui = Elasticipy.gui:crystal_elastic_plotter