structuralcodes 0.3.0__py3-none-any.whl → 0.4.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.

Potentially problematic release.


This version of structuralcodes might be problematic. Click here for more details.

@@ -61,24 +61,25 @@ def create_constitutive_law(
61
61
 
62
62
  If the consitutive law selected is not available for the specific
63
63
  material, an exception will be raised.
64
+
65
+ Raises:
66
+ ValueError: If the constitutive law is not available for the material.
67
+ ValueError: If the constitutive law name is unknown.
64
68
  """
65
- law = None
66
69
  const_law = CONSTITUTIVE_LAWS.get(constitutive_law_name.lower())
67
70
  if const_law is not None:
68
71
  method_name = f'__{constitutive_law_name}__'
69
72
  # check if the material object has the special method needed
70
- if hasattr(material, method_name):
73
+ if hasattr(material, method_name) and callable(
74
+ getattr(material, method_name)
75
+ ):
71
76
  method = getattr(material, method_name)
72
- if callable(method):
73
- # get the kwargs from the special dunder method
74
- kwargs = method()
75
- # create the constitutive law
76
- law = const_law(**kwargs)
77
- else:
78
- raise ValueError(
79
- f'Constitutive law {constitutive_law_name} not available for'
80
- f' material {material.__class__.__name__}'
81
- )
82
- else:
83
- raise ValueError(f'Unknown constitutive law: {constitutive_law_name}')
84
- return law
77
+ # get the kwargs from the special dunder method
78
+ kwargs = method()
79
+ # create and return the constitutive law
80
+ return const_law(**kwargs)
81
+ raise ValueError(
82
+ f'Constitutive law {constitutive_law_name} not available for'
83
+ f' material {material.__class__.__name__}'
84
+ )
85
+ raise ValueError(f'Unknown constitutive law: {constitutive_law_name}')
@@ -51,10 +51,10 @@ class BilinearCompression(ConstitutiveLaw):
51
51
  # Compute stress
52
52
  # If it is a scalar
53
53
  if np.isscalar(eps):
54
- sig = 0
55
- if self._fc / self._E <= eps <= 0:
56
- sig = self._E * eps
57
- return sig
54
+ if eps > 0 or eps < self._eps_cu:
55
+ return 0
56
+ return max(self._E * eps, self._fc)
57
+
58
58
  # If it is an array
59
59
  sig = self._E * eps
60
60
  sig[sig < self._fc] = self._fc
@@ -69,13 +69,14 @@ class BilinearCompression(ConstitutiveLaw):
69
69
  eps = eps if np.isscalar(eps) else np.atleast_1d(eps)
70
70
  # If it is a scalar
71
71
  if np.isscalar(eps):
72
- tangent = 0
73
- if self._fc / self._E <= eps <= 0:
74
- tangent = self._E
75
- return tangent
72
+ if self._eps_c < eps <= 0:
73
+ return self._E
74
+ return 0
75
+
76
76
  # If it is an array
77
77
  tangent = np.ones_like(eps) * self._E
78
- tangent[eps < self._eps_c] = 0.0
78
+ tangent[eps >= 0] = 0
79
+ tangent[eps < self._eps_c] = 0
79
80
 
80
81
  return tangent
81
82
 
@@ -4,10 +4,6 @@ import abc
4
4
  import typing as t
5
5
 
6
6
  from structuralcodes.core.base import ConstitutiveLaw, Material
7
- from structuralcodes.materials.constitutive_laws import (
8
- ElasticPlastic,
9
- create_constitutive_law,
10
- )
11
7
 
12
8
 
13
9
  class Reinforcement(Material):
@@ -39,45 +35,21 @@ class Reinforcement(Material):
39
35
  self._epsuk = abs(epsuk)
40
36
  self._gamma_s = gamma_s
41
37
 
42
- # Calculate the plastic hardening modulus
43
- if self.epsuk - self.fyk / self.Es > 0.0 and self.ftk - self.fyk > 0:
44
- Eh = (self.ftk - self.fyk) / (self.epsuk - self.fyk / self.Es)
45
- else:
46
- Eh = 0.0
47
- self._constitutive_law = ElasticPlastic(
48
- E=self.Es, fy=self.fyd(), Eh=Eh, eps_su=self.epsud()
49
- )
50
-
51
38
  @property
52
39
  def fyk(self) -> float:
53
40
  """Returns fyk in MPa."""
54
41
  return self._fyk
55
42
 
56
- @fyk.setter
57
- def fyk(self, fyk: float) -> None:
58
- """Setter for fyk (in MPa)."""
59
- self._fyk = abs(fyk)
60
-
61
43
  @property
62
44
  def Es(self) -> float:
63
45
  """Returns Es in MPa."""
64
46
  return self._Es
65
47
 
66
- @Es.setter
67
- def Es(self, Es: float) -> None:
68
- """Setter for Es (in MPa)."""
69
- self._Es = abs(Es)
70
-
71
48
  @property
72
49
  def ftk(self) -> float:
73
50
  """Returns ftk in MPa."""
74
51
  return self._ftk
75
52
 
76
- @ftk.setter
77
- def ftk(self, ftk: float) -> None:
78
- """Setter for ftk (in MPa)."""
79
- self._ftk = abs(ftk)
80
-
81
53
  @property
82
54
  def epsuk(self) -> float:
83
55
  """Returns epsuk."""
@@ -98,49 +70,6 @@ class Reinforcement(Material):
98
70
  """Returns the constitutive law object."""
99
71
  return self._constitutive_law
100
72
 
101
- @constitutive_law.setter
102
- def constitutive_law(
103
- self,
104
- constitutive_law: t.Union[
105
- ConstitutiveLaw,
106
- t.Literal[
107
- 'elastic',
108
- 'elasticperfecltyplastic',
109
- 'elasticplastic',
110
- ],
111
- ],
112
- ) -> None:
113
- """Setter for constitutive law.
114
-
115
- Arguments:
116
- consitutive_law (ConstitutiveLaw | str): a valid ConstitutiveLaw
117
- object for reinforcement or a string defining a valid
118
- constitutive law type for reinforcement. (valid options:
119
- 'elastic', 'elasticperfectlyplastic', 'elasticplastic').
120
- """
121
- if constitutive_law is None:
122
- raise ValueError(
123
- 'At least a constitutive law or a string defining the '
124
- 'constitutive law must be provided.'
125
- )
126
- if isinstance(constitutive_law, str):
127
- constitutive_law = create_constitutive_law(
128
- constitutive_law_name=constitutive_law, material=self
129
- )
130
-
131
- if isinstance(constitutive_law, ConstitutiveLaw):
132
- if 'rebars' in constitutive_law.__materials__:
133
- self._constitutive_law = constitutive_law
134
- else:
135
- raise ValueError(
136
- 'The constitutive law selected is not suitable '
137
- 'for being used with a Reinforcement material.'
138
- )
139
- else:
140
- raise ValueError(
141
- f'The constitutive law {constitutive_law} could not be created'
142
- )
143
-
144
73
  @property
145
74
  @abc.abstractmethod
146
75
  def gamma_s(self) -> float:
@@ -4,6 +4,7 @@ import typing as t
4
4
 
5
5
  from structuralcodes.codes import ec2_2004
6
6
 
7
+ from ..constitutive_laws import ConstitutiveLaw, create_constitutive_law
7
8
  from ._reinforcement import Reinforcement
8
9
 
9
10
 
@@ -20,6 +21,16 @@ class ReinforcementEC2_2004(Reinforcement): # noqa: N801
20
21
  gamma_eps: t.Optional[float] = None,
21
22
  name: t.Optional[str] = None,
22
23
  density: float = 7850.0,
24
+ constitutive_law: t.Optional[
25
+ t.Union[
26
+ t.Literal[
27
+ 'elastic',
28
+ 'elasticperfectlyplastic',
29
+ 'elasticplastic',
30
+ ],
31
+ ConstitutiveLaw,
32
+ ]
33
+ ] = 'elasticplastic',
23
34
  ):
24
35
  """Initializes a new instance of Reinforcement for EC2 2004.
25
36
 
@@ -33,13 +44,25 @@ class ReinforcementEC2_2004(Reinforcement): # noqa: N801
33
44
  Default value is 1.15.
34
45
 
35
46
  Keyword Arguments:
47
+ gamma_eps (float): The partial factor for ultimate strain. Default
48
+ value is 0.9.
36
49
  name (str): A descriptive name for the reinforcement.
37
50
  density (float): Density of material in kg/m3 (default: 7850).
51
+ constitutive_law (ConstitutiveLaw | str): A valid ConstitutiveLaw
52
+ object for reinforcement or a string defining a valid
53
+ constitutive law type for reinforcement. (valid options for
54
+ string: 'elastic', 'elasticplastic', or
55
+ 'elasticperfectlyplastic').
56
+
57
+ Raises:
58
+ ValueError: If the constitutive law name is not available for the
59
+ material.
60
+ ValueError: If the provided constitutive law is not valid for
61
+ reinforcement.
38
62
  """
39
63
  if name is None:
40
64
  name = f'Reinforcement{round(fyk):d}'
41
65
 
42
- self._gamma_eps = gamma_eps
43
66
  super().__init__(
44
67
  fyk=fyk,
45
68
  Es=Es,
@@ -49,6 +72,18 @@ class ReinforcementEC2_2004(Reinforcement): # noqa: N801
49
72
  epsuk=epsuk,
50
73
  gamma_s=gamma_s,
51
74
  )
75
+ self._gamma_eps = gamma_eps
76
+ self._constitutive_law = (
77
+ constitutive_law
78
+ if isinstance(constitutive_law, ConstitutiveLaw)
79
+ else create_constitutive_law(
80
+ constitutive_law_name=constitutive_law, material=self
81
+ )
82
+ )
83
+ if 'steel' not in self._constitutive_law.__materials__:
84
+ raise ValueError(
85
+ 'The provided constitutive law is not valid for reinforcement.'
86
+ )
52
87
 
53
88
  def fyd(self) -> float:
54
89
  """The design yield strength."""
@@ -4,6 +4,7 @@ import typing as t
4
4
 
5
5
  from structuralcodes.codes import ec2_2023
6
6
 
7
+ from ..constitutive_laws import ConstitutiveLaw, create_constitutive_law
7
8
  from ._reinforcement import Reinforcement
8
9
 
9
10
 
@@ -19,6 +20,16 @@ class ReinforcementEC2_2023(Reinforcement): # noqa: N801
19
20
  gamma_s: t.Optional[float] = None,
20
21
  name: t.Optional[str] = None,
21
22
  density: float = 7850.0,
23
+ constitutive_law: t.Optional[
24
+ t.Union[
25
+ t.Literal[
26
+ 'elastic',
27
+ 'elasticperfectlyplastic',
28
+ 'elasticplastic',
29
+ ],
30
+ ConstitutiveLaw,
31
+ ]
32
+ ] = 'elasticplastic',
22
33
  ):
23
34
  """Initializes a new instance of Reinforcement for EC2 2023.
24
35
 
@@ -34,6 +45,17 @@ class ReinforcementEC2_2023(Reinforcement): # noqa: N801
34
45
  Keyword Args:
35
46
  name (str): A descriptive name for the reinforcement.
36
47
  density (float): Density of material in kg/m3 (default: 7850).
48
+ constitutive_law (ConstitutiveLaw | str): A valid ConstitutiveLaw
49
+ object for reinforcement or a string defining a valid
50
+ constitutive law type for reinforcement. (valid options for
51
+ string: 'elastic', 'elasticplastic', or
52
+ 'elasticperfectlyplastic').
53
+
54
+ Raises:
55
+ ValueError: If the constitutive law name is not available for the
56
+ material.
57
+ ValueError: If the provided constitutive law is not valid for
58
+ reinforcement.
37
59
  """
38
60
  if name is None:
39
61
  name = f'Reinforcement{round(fyk):d}'
@@ -46,6 +68,17 @@ class ReinforcementEC2_2023(Reinforcement): # noqa: N801
46
68
  epsuk=epsuk,
47
69
  gamma_s=gamma_s,
48
70
  )
71
+ self._constitutive_law = (
72
+ constitutive_law
73
+ if isinstance(constitutive_law, ConstitutiveLaw)
74
+ else create_constitutive_law(
75
+ constitutive_law_name=constitutive_law, material=self
76
+ )
77
+ )
78
+ if 'steel' not in self._constitutive_law.__materials__:
79
+ raise ValueError(
80
+ 'The provided constitutive law is not valid for reinforcement.'
81
+ )
49
82
 
50
83
  def fyd(self) -> float:
51
84
  """The design yield strength."""
@@ -4,6 +4,7 @@ import typing as t
4
4
 
5
5
  from structuralcodes.codes import mc2010
6
6
 
7
+ from ..constitutive_laws import ConstitutiveLaw, create_constitutive_law
7
8
  from ._reinforcement import Reinforcement
8
9
 
9
10
 
@@ -20,6 +21,16 @@ class ReinforcementMC2010(Reinforcement):
20
21
  gamma_eps: t.Optional[float] = None,
21
22
  name: t.Optional[str] = None,
22
23
  density: float = 7850.0,
24
+ constitutive_law: t.Optional[
25
+ t.Union[
26
+ t.Literal[
27
+ 'elastic',
28
+ 'elasticperfectlyplastic',
29
+ 'elasticplastic',
30
+ ],
31
+ ConstitutiveLaw,
32
+ ]
33
+ ] = 'elasticplastic',
23
34
  ):
24
35
  """Initializes a new instance of Reinforcement for MC2010.
25
36
 
@@ -33,12 +44,25 @@ class ReinforcementMC2010(Reinforcement):
33
44
  Default value is 1.15.
34
45
 
35
46
  Keyword Args:
47
+ gamma_eps (float): The partial factor for ultimate strain. Default
48
+ value is 0.9.
36
49
  name (str): A descriptive name for the reinforcement.
37
50
  density (float): Density of material in kg/m3 (default: 7850).
51
+ constitutive_law (ConstitutiveLaw | str): A valid ConstitutiveLaw
52
+ object for reinforcement or a string defining a valid
53
+ constitutive law type for reinforcement. (valid options for
54
+ string: 'elastic', 'elasticplastic', or
55
+ 'elasticperfectlyplastic').
56
+
57
+ Raises:
58
+ ValueError: If the constitutive law name is not available for the
59
+ material.
60
+ ValueError: If the provided constitutive law is not valid for
61
+ reinforcement.
38
62
  """
39
63
  if name is None:
40
64
  name = f'Reinforcement{round(fyk):d}'
41
- self._gamma_eps = gamma_eps
65
+
42
66
  super().__init__(
43
67
  fyk=fyk,
44
68
  Es=Es,
@@ -48,6 +72,18 @@ class ReinforcementMC2010(Reinforcement):
48
72
  epsuk=epsuk,
49
73
  gamma_s=gamma_s,
50
74
  )
75
+ self._gamma_eps = gamma_eps
76
+ self._constitutive_law = (
77
+ constitutive_law
78
+ if isinstance(constitutive_law, ConstitutiveLaw)
79
+ else create_constitutive_law(
80
+ constitutive_law_name=constitutive_law, material=self
81
+ )
82
+ )
83
+ if 'steel' not in self._constitutive_law.__materials__:
84
+ raise ValueError(
85
+ 'The provided constitutive law is not valid for reinforcement.'
86
+ )
51
87
 
52
88
  def fyd(self) -> float:
53
89
  """The design yield strength."""
@@ -439,12 +439,18 @@ class GenericSectionCalculator(SectionCalculator):
439
439
  apply the bisection algorithm.
440
440
  """
441
441
  ITMAX = 20
442
+ MAXRESTATTEMPTS = 20
442
443
  sign = -1 if dn_a > 0 else 1
443
444
  found = False
444
445
  it = 0
446
+ restarts = 0
445
447
  delta = 1e-3
446
- while not found and it < ITMAX:
447
- eps_0_b = eps_0_a + sign * delta * (it + 1)
448
+ # Use a growth factor for an exponential finding
449
+ r = 2.0
450
+ diverging = False
451
+ diverging_steps = 0
452
+ while not found and it < ITMAX and restarts < MAXRESTATTEMPTS:
453
+ eps_0_b = eps_0_a + sign * delta * r ** (it)
448
454
  (
449
455
  n_int,
450
456
  _,
@@ -457,10 +463,20 @@ class GenericSectionCalculator(SectionCalculator):
457
463
  if dn_a * dn_b < 0:
458
464
  found = True
459
465
  elif abs(dn_b) > abs(dn_a):
460
- # we are driving aay from the solution, probably due
466
+ # we are driving away from the solution, probably due
461
467
  # to failure of a material
462
- delta /= 2
463
- it -= 1
468
+ diverging = True
469
+ if diverging:
470
+ # Count for how many steps we are diverging
471
+ diverging_steps += 1
472
+ # If we are consistently diverging for more than 10 steps,
473
+ # Restart the process with a small delta
474
+ if diverging_steps > 10:
475
+ delta /= 2
476
+ it = 0
477
+ restarts += 1
478
+ diverging = False
479
+ diverging_steps = 0
464
480
  it += 1
465
481
  if it >= ITMAX and not found:
466
482
  s = f'Last iteration reached a unbalance of: \
@@ -631,7 +647,7 @@ class GenericSectionCalculator(SectionCalculator):
631
647
  matrix then `integrate='modulus'`.
632
648
 
633
649
  Examples:
634
- result = self.integrate_strain_profile(strain,integrate='tangent')
650
+ result = self.integrate_strain_profile(strain,integrate='modulus')
635
651
  # `result` will be the tangent stiffness matrix (a 3x3 numpy array)
636
652
 
637
653
  result = self.integrate_strain_profile(strain)
@@ -1342,7 +1358,7 @@ class GenericSectionCalculator(SectionCalculator):
1342
1358
  n (float): Axial load.
1343
1359
  my (float): Bending moment around y-axis.
1344
1360
  mz (float): Bending moment around z-axis.
1345
- initial (bool): If True the modified newton with initial tanget is
1361
+ initial (bool): If True the modified newton with initial tangent is
1346
1362
  used (default = False).
1347
1363
  max_iter (int): the maximum number of iterations in the iterative
1348
1364
  process (default = 10).
@@ -1,12 +1,13 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: structuralcodes
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: A Python package that contains models from structural design codes.
5
5
  Author-email: fib - International Federation for Structural Concrete <info@fib-international.org>
6
6
  Requires-Python: >=3.8
7
7
  Description-Content-Type: text/markdown
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Operating System :: OS Independent
10
+ License-File: LICENSE
10
11
  Requires-Dist: numpy>=1.20.0
11
12
  Requires-Dist: scipy>=1.6.0
12
13
  Requires-Dist: shapely>=2.0.2
@@ -1,4 +1,4 @@
1
- structuralcodes/__init__.py,sha256=M73UUEi9wi6nGJ5MpzxFY4m1XBkyMVY_homTDP5zfvY,390
1
+ structuralcodes/__init__.py,sha256=cNO1h58v3gIPEMsX1HiSV14kJbKoDDCaW7Tzdh9ZU9Y,390
2
2
  structuralcodes/codes/__init__.py,sha256=g5xMAJ3jEZHFd0cypvZY6lMCi7XeVEntsO8zHzI2mWc,2803
3
3
  structuralcodes/codes/ec2_2004/__init__.py,sha256=DljXFNrCGE1lZIOsgyZgJ7Xo-xUidJomDrDKyfOHcH8,2431
4
4
  structuralcodes/codes/ec2_2004/_concrete_creep_and_shrinkage.py,sha256=Vbxxc3g0WZz2qFWDlfrVvC-uxMO2YJpfclnHxRPMuYQ,15301
@@ -10,32 +10,33 @@ structuralcodes/codes/ec2_2023/__init__.py,sha256=UohRxikCUqPAUpHj4uSWHw5drICjZm
10
10
  structuralcodes/codes/ec2_2023/_annexB_time_dependent.py,sha256=ykRAHBHzqtMSErkVA-rwTHBdUq8-L7q2AOaEd2YW5wc,472
11
11
  structuralcodes/codes/ec2_2023/_section5_materials.py,sha256=-vYowBVcebyPyuGvX3wLfxiePdM0OrBgRrYil71Vd88,32384
12
12
  structuralcodes/codes/ec2_2023/_section9_sls.py,sha256=l1d3xcALAweU9jAAf1d91TJaGB_0p-eMzbRGuhfKydQ,11252
13
- structuralcodes/codes/mc2010/__init__.py,sha256=g2J2GTIy9jbLTVq_yF4DXau4WLmAkpmMTgnD4QmW2vI,2844
13
+ structuralcodes/codes/mc2010/__init__.py,sha256=xuty6-sQAnxGH8NCzvyj_bf-RUg8bTaH0HYWsqOycsk,3165
14
14
  structuralcodes/codes/mc2010/_concrete_creep_and_shrinkage.py,sha256=lQAj8n0TVhRvttVFF9YLVNzCRo3O3wIqWvBdZRu9vDk,24295
15
15
  structuralcodes/codes/mc2010/_concrete_interface_different_casting_times.py,sha256=x_n9Z9WEPY6DFf8Og5UIERPivNh-O_3RM4ZnGBy64cs,3570
16
16
  structuralcodes/codes/mc2010/_concrete_material_properties.py,sha256=MTz70-9iaN_s0Z8gJksCEzP0Yza4pPfZ-vOI30pzbw4,12362
17
17
  structuralcodes/codes/mc2010/_concrete_punching.py,sha256=ZG2P7WXIRcFh5sGlmHP20BsJbz0o44cFO51FCru2kXw,17431
18
18
  structuralcodes/codes/mc2010/_concrete_shear.py,sha256=HZhhpzQd-09NPrHpSK5fnPA1epVCQH8JfdSi6bpgiFg,21883
19
19
  structuralcodes/codes/mc2010/_concrete_torsion.py,sha256=QBFnCYTOnP6FjN0MgX9iBrXN1yuELxQVP2TeDXDB7PM,4523
20
+ structuralcodes/codes/mc2010/_interface_concrete_steel_rebar.py,sha256=bkZN4FYA430Nor3b25Z3ujWL2xbRhdYO5tgqPnUXCnk,9966
20
21
  structuralcodes/codes/mc2010/_reinforcement_material_properties.py,sha256=FELmgMcCrHlajGwQNRRHb8nqKnMCsLso1OyjonsTAdk,2842
21
22
  structuralcodes/codes/mc2020/__init__.py,sha256=5hrAfBtAeG69N_lroFpG10_ZKB1SuNlKBnuHug2DI3E,174
22
23
  structuralcodes/core/__init__.py,sha256=spnvZIm_w3jX_lV-v3bloDjgHh8lrH6UHpA1Nv1zeAI,55
23
24
  structuralcodes/core/_section_results.py,sha256=MzUGThcxmZvyp0UBwxEiUAx2qz49UTlIo7MqoPEy3xk,7968
24
- structuralcodes/core/base.py,sha256=l8CgvUyz034F5HRyx6fBpiZvVRnD3cBDqJOTeuEV2hY,9505
25
+ structuralcodes/core/base.py,sha256=UyJKocFs_RAhDveIFb69p1ClfA7KfjfTZuqLCx4Bnj4,8661
25
26
  structuralcodes/geometry/__init__.py,sha256=STc2chf49NkWlnpcfB8n4mYWmR633VsKtbfyG8ylQ7s,771
26
- structuralcodes/geometry/_circular.py,sha256=kMvfMdgPeNupC-qi4-azKgBjTuwW_-5i397oFr_Mkr8,2658
27
- structuralcodes/geometry/_geometry.py,sha256=lwgvi4PSMi1fV5ueP7Qz-eYaWUV0R5ePwHgFxbETas8,31241
28
- structuralcodes/geometry/_rectangular.py,sha256=80aHN9RjYxM4zwYtETEMjtwyiFHUkD3tyimvcQSJDgo,2616
27
+ structuralcodes/geometry/_circular.py,sha256=vYk5mBY0bh_qqX_RrXn_NTE2iwPBvC-Uku3_AJEIZgQ,3557
28
+ structuralcodes/geometry/_geometry.py,sha256=HE2pJaUdjgeFWp7WNA9Rm1Bt7QI6_Bjn-ePt6aO7AcY,31544
29
+ structuralcodes/geometry/_rectangular.py,sha256=PLKgz998qDjcn76JjVW08fexN0jAke0K6yNeaOynqOQ,3458
29
30
  structuralcodes/geometry/_reinforcement.py,sha256=2l4I2tm5YEy9Oeqlzt1GulljSW0k5_4_iG6quvhlSRk,9097
30
31
  structuralcodes/geometry/_steel_sections.py,sha256=UdJmhhnK8r5gEfBzvWsMFHGs5gmuoOhFoduBanlRMQg,60225
31
32
  structuralcodes/materials/__init__.py,sha256=r5E5vsXVKB-BGZXTnEbsrYJbH6rr6Xlc_b4LlcUPIbc,173
32
33
  structuralcodes/materials/concrete/__init__.py,sha256=GRD5WcbYrnE4iN-L7qVkhVTi7w_PUP7pnbGueOaVeFs,2576
33
- structuralcodes/materials/concrete/_concrete.py,sha256=3zMTFtaqFeUl7ne7-pe9wF4LryzqvGpUwThnHTidCZU,3774
34
- structuralcodes/materials/concrete/_concreteEC2_2004.py,sha256=gWG3O9yeGw3UeftCjYTajZco_XYDmBxPGqhAEpH3nY0,14666
35
- structuralcodes/materials/concrete/_concreteEC2_2023.py,sha256=vguNzlfoPuaieTVw9T3xWU0wb230WvER4Vy1jswcdlo,14017
36
- structuralcodes/materials/concrete/_concreteMC2010.py,sha256=lHy-WYiVpXPwiNAyjUBxuGWuGFd0-Uirh6KiolMH4MY,15313
37
- structuralcodes/materials/constitutive_laws/__init__.py,sha256=r817qyeimqZyyan2mU8cVwjwMkiB--f-BOIBSzXKiZo,2954
38
- structuralcodes/materials/constitutive_laws/_bilinearcompression.py,sha256=WNFSkd8iRK6bfuyEHRqbLGwBk3x0dj-oxdBqF6FdP_o,6101
34
+ structuralcodes/materials/concrete/_concrete.py,sha256=VmdxxSoqKEPADwcQ-LhL1adukZkgigh2zCfp3QqkTAs,1480
35
+ structuralcodes/materials/concrete/_concreteEC2_2004.py,sha256=waNTw-iiytWHGPML1swW2EQDcb10FOQNMsm2y5ykQPk,18713
36
+ structuralcodes/materials/concrete/_concreteEC2_2023.py,sha256=5IMw2uSrZcrf984c5iYf-SWbXGCje9MZ-5A-AwH8Owo,17851
37
+ structuralcodes/materials/concrete/_concreteMC2010.py,sha256=_TdyCkPuzaFUrfv9bB3zaenSu56ygLZo-KQZMIT8qjQ,18967
38
+ structuralcodes/materials/constitutive_laws/__init__.py,sha256=IGpwrTvbfUGJ11lYugY3k4mmaYJUFPqAOw680aUkTxo,3063
39
+ structuralcodes/materials/constitutive_laws/_bilinearcompression.py,sha256=wap9cPSj4baeAZ4dqSfajWb5wdidkpkcT2pgb2QHrBk,6083
39
40
  structuralcodes/materials/constitutive_laws/_elastic.py,sha256=xxSneoCW41AQy0vj3_x-sTuvE_SsS1kutaG_NbqAWbk,4306
40
41
  structuralcodes/materials/constitutive_laws/_elasticplastic.py,sha256=VXA4wgkfL8NdGnZa7AQX_TL-JCpEBjMVumIwQhhloFY,8118
41
42
  structuralcodes/materials/constitutive_laws/_parabolarectangle.py,sha256=9GeY0HuFE5l9L61OoKi-M5MgQemJpcKccysN0SQ0oXM,8609
@@ -43,12 +44,12 @@ structuralcodes/materials/constitutive_laws/_popovics.py,sha256=dpXFQ9KHE245C9dg
43
44
  structuralcodes/materials/constitutive_laws/_sargin.py,sha256=WJGw0EtqkPh-d3N6vTPRIfhE1Ypyc16JpGcoi-0U1A8,3495
44
45
  structuralcodes/materials/constitutive_laws/_userdefined.py,sha256=vr01SyZTQvDimJLJN3-shvhIevvt9_qRtiy8OjodKQQ,9925
45
46
  structuralcodes/materials/reinforcement/__init__.py,sha256=-UA04GSNN6_xLKqnH_5taiOmgxYwD_wtT6Nw8UbfkJY,2757
46
- structuralcodes/materials/reinforcement/_reinforcement.py,sha256=zrSdBvHKTYqOHpkJzxit8w_b2JG2pggviOvgZyH246Q,5029
47
- structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py,sha256=svLpubjaTH_DepwY68TQIA8fRwadoAE3Y3KsyViGQHk,3265
48
- structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py,sha256=3tKpFcMNYK52s5K2K_PctRcuSgwZTe-QXX3xziHPUno,2887
49
- structuralcodes/materials/reinforcement/_reinforcementMC2010.py,sha256=az_IAQJNKSF6Vv9KMoXjWTdYkWI6xcEm7s8i8GETn3A,2939
47
+ structuralcodes/materials/reinforcement/_reinforcement.py,sha256=AzVaUe0ULD01dkD1V2-gpzXbKpnXKssmjFkohSHKIZI,2610
48
+ structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py,sha256=nx1OTJmqBD6yEtsVk8BlLkrGQgC0UUNIZbR7rxQhPAA,4744
49
+ structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py,sha256=XSBJ8hC7ZbPNxXQVdngH16X8v8pBY_vWjsdMVdhJHBA,4257
50
+ structuralcodes/materials/reinforcement/_reinforcementMC2010.py,sha256=LPvKm1K59zHxQ_KUBGdqEVOWYGHxqUJDFHj5PeYXniM,4419
50
51
  structuralcodes/sections/__init__.py,sha256=gUGqiv8zyhiMmxEFme8E9nC2b3aJKs3ieBYz6X2GVFY,545
51
- structuralcodes/sections/_generic.py,sha256=ZsqOOTQJwj1VtXbpcxao1y21qK16QGq7xZ0jOwBsRcU,55744
52
+ structuralcodes/sections/_generic.py,sha256=BCMRraICt9-3FY8UXDNLnW31yTM0bPLbw76TB_5XdJA,56415
52
53
  structuralcodes/sections/_rc_utils.py,sha256=KZGVyQNSsbol7Dcyx7StoN1ybzrXMeKlyIFdXAauJW0,4229
53
54
  structuralcodes/sections/section_integrators/__init__.py,sha256=PK4ixV0XrfHXN-itIrB1r90npoWo3aIJqMcenqcaees,399
54
55
  structuralcodes/sections/section_integrators/_factory.py,sha256=MHp14hfWU-oXTiIutCKLJEC47LirYsHgEAAmHVtnFMY,1242
@@ -56,6 +57,7 @@ structuralcodes/sections/section_integrators/_fiber_integrator.py,sha256=7On87ES
56
57
  structuralcodes/sections/section_integrators/_marin_integration.py,sha256=SZgya6d_Tequ3jez7UEBlYioZepW2IDKaAxn_6WrMbU,1563
57
58
  structuralcodes/sections/section_integrators/_marin_integrator.py,sha256=wdgscIWTIRfkPPafI77Lk4-FmtQLDNw2kanMkhNkfTc,15392
58
59
  structuralcodes/sections/section_integrators/_section_integrator.py,sha256=aPYuUpqeQLYauVi3_uJoEtXPSuXn79Aau3GTlISn-sI,2355
59
- structuralcodes-0.3.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
60
- structuralcodes-0.3.0.dist-info/METADATA,sha256=CNBkuhyn1rbhWooMht5_sBEb_rSPoSOHCe77303H62k,2444
61
- structuralcodes-0.3.0.dist-info/RECORD,,
60
+ structuralcodes-0.4.0.dist-info/licenses/LICENSE,sha256=3pqb3JVOTHCoMlvB4xxKrBlj0KsM_5Tyg5nsaCLJcSY,11372
61
+ structuralcodes-0.4.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
62
+ structuralcodes-0.4.0.dist-info/METADATA,sha256=SQl0Zk0FbcEyC3bLfcsesntyvDGQBDf5y6oXFhddfrA,2466
63
+ structuralcodes-0.4.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: flit 3.10.1
2
+ Generator: flit 3.12.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any