pyroll-core 2.1.7__tar.gz → 2.1.8__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 (75) hide show
  1. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/PKG-INFO +1 -1
  2. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/__init__.py +1 -1
  3. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll/hookimpls.py +6 -1
  4. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll/roll.py +3 -0
  5. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/deformation_unit.py +1 -1
  6. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/helpers.py +1 -1
  7. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/profile.py +7 -7
  8. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/roll.py +1 -1
  9. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/roll_pass.py +3 -10
  10. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/three_roll_pass.py +6 -5
  11. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/rotator/hookimpls.py +6 -0
  12. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/.gitignore +0 -0
  13. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/LICENSE +0 -0
  14. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/README.md +0 -0
  15. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/hatch.toml +0 -0
  16. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyproject.toml +0 -0
  17. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/config.py +0 -0
  18. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/disk_elements/__init__.py +0 -0
  19. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/disk_elements/disk_element_unit.py +0 -0
  20. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/disk_elements/hookimpls.py +0 -0
  21. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/__init__.py +0 -0
  22. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/base.py +0 -0
  23. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/boxes/__init__.py +0 -0
  24. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/boxes/box.py +0 -0
  25. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/boxes/constricted_box.py +0 -0
  26. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/boxes/upset_box.py +0 -0
  27. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/diamonds/__init__.py +0 -0
  28. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/diamonds/diamond.py +0 -0
  29. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/diamonds/gothic.py +0 -0
  30. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/diamonds/square.py +0 -0
  31. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/equivalent_ripped_groove.py +0 -0
  32. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/flat.py +0 -0
  33. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/generic_elongation.py +0 -0
  34. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/generic_elongation_solvers.py +0 -0
  35. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/hexagonal.py +0 -0
  36. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/__init__.py +0 -0
  37. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/circular_oval.py +0 -0
  38. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/constricted_circular_oval.py +0 -0
  39. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/constricted_swedish_oval.py +0 -0
  40. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/flat_oval.py +0 -0
  41. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/oval_3radii.py +0 -0
  42. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/oval_3radii_flanked.py +0 -0
  43. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/swedish_oval.py +0 -0
  44. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/upset_oval.py +0 -0
  45. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/rounds/__init__.py +0 -0
  46. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/rounds/false_round.py +0 -0
  47. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/rounds/round.py +0 -0
  48. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/spline.py +0 -0
  49. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/hooks.py +0 -0
  50. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/log.py +0 -0
  51. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/profile/__init__.py +0 -0
  52. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/profile/hookimpls.py +2 -2
  53. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/profile/profile.py +0 -0
  54. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/repr.py +0 -0
  55. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll/__init__.py +0 -0
  56. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/__init__.py +0 -0
  57. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/deformation_unit.py +0 -0
  58. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/__init__.py +0 -0
  59. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/disk_element.py +0 -0
  60. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/roll_pass.py +0 -0
  61. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/rotator/__init__.py +0 -0
  62. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/rotator/rotator.py +0 -0
  63. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/sequence/__init__.py +0 -0
  64. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/sequence/hookimpls.py +0 -0
  65. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/sequence/sequence.py +0 -0
  66. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/shapes.py +0 -0
  67. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/__init__.py +0 -0
  68. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/cooling_pipe.py +0 -0
  69. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/hookimpls/__init__.py +0 -0
  70. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/hookimpls/cooling_pipe.py +0 -0
  71. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/hookimpls/transport.py +0 -0
  72. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/transport.py +0 -0
  73. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/unit/__init__.py +0 -0
  74. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/unit/hookimpls.py +0 -0
  75. {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/unit/unit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyroll-core
3
- Version: 2.1.7
3
+ Version: 2.1.8
4
4
  Summary: PyRoll rolling simulation framework - core library.
5
5
  Project-URL: Homepage, https://pyroll-project.github.io
6
6
  Project-URL: Repository, https://github.com/pyroll-project/pyroll-core
@@ -12,7 +12,7 @@ from .hooks import Hook, HookHost, HookFunction, root_hooks
12
12
  from .disk_elements import DiskElementUnit
13
13
  from .config import Config, config
14
14
 
15
- VERSION = "2.1.7"
15
+ VERSION = "2.1.8"
16
16
 
17
17
  root_hooks.extend(
18
18
  [
@@ -24,6 +24,11 @@ def roll_power(self: Roll):
24
24
  return self.roll_torque * self.rotational_frequency * 2 * np.pi
25
25
 
26
26
 
27
+ @Roll.working_velocity
28
+ def working_velocity(self: Roll):
29
+ return self.rotational_frequency * self.working_radius * 2 * np.pi
30
+
31
+
27
32
  @Roll.surface_velocity
28
33
  def surface_velocity(self: Roll):
29
34
  return self.rotational_frequency * self.nominal_radius * 2 * np.pi
@@ -31,7 +36,7 @@ def surface_velocity(self: Roll):
31
36
 
32
37
  @Roll.rotational_frequency
33
38
  def rotational_frequency(self: Roll):
34
- return self.surface_velocity / self.nominal_radius
39
+ return self.surface_velocity / (2 * np.pi * self.nominal_radius)
35
40
 
36
41
 
37
42
  @Roll.width
@@ -32,6 +32,9 @@ class Roll(HookHost):
32
32
  surface_velocity = Hook[float]()
33
33
  """Tangential velocity of the outer roll surface (at nominal radius)."""
34
34
 
35
+ working_velocity = Hook[float]()
36
+ """Tangential velocity of the roll surface (at working radius)."""
37
+
35
38
  contour_points = Hook[LineString]()
36
39
  """Points of the contour line in the z-y-plane."""
37
40
 
@@ -116,4 +116,4 @@ def contact_contour_angles(self: DeformationUnit.Profile):
116
116
 
117
117
  return angles
118
118
 
119
- return [calculate_angles(line) for line in self.contact_contour_lines]
119
+ return [calculate_angles(line) for line in self.contact_lines]
@@ -18,7 +18,7 @@ def out_cross_section3(rp: ThreeRollPass, width: float) -> Polygon:
18
18
  poly = Polygon(np.concatenate([cl.coords for cl in rp.contour_lines]))
19
19
 
20
20
  for _ in range(3):
21
- poly = clip_by_rect(poly, -math.inf, -width / 2, math.inf, math.inf)
21
+ poly = clip_by_rect(poly, -math.inf, -math.inf, math.inf, width / 2)
22
22
  poly = rotate(poly, angle=120, origin=(0, 0))
23
23
 
24
24
  return refine_cross_section(poly)
@@ -19,14 +19,14 @@ def exit_point(self: RollPass.OutProfile):
19
19
  return 0
20
20
 
21
21
 
22
- @RollPass.InProfile.x
23
- def entry_point(self: RollPass.InProfile):
24
- return -self.roll_pass.roll.contact_length
22
+ @RollPass.InProfile.longitudinal_angle
23
+ def longitudinal_angle(self: RollPass.InProfile):
24
+ return self.roll_pass.entry_angle
25
25
 
26
26
 
27
- @RollPass.OutProfile.x
28
- def exit_point(self: RollPass.OutProfile):
29
- return 0
27
+ @RollPass.OutProfile.longitudinal_angle
28
+ def longitudinal_angle(self: RollPass.OutProfile):
29
+ return self.roll_pass.exit_angle
30
30
 
31
31
 
32
32
  @RollPass.OutProfile.strain
@@ -78,7 +78,7 @@ def cross_section(self: RollPass.OutProfile) -> Polygon:
78
78
  @ThreeRollPass.OutProfile.cross_section
79
79
  def cross_section3(self: ThreeRollPass.OutProfile) -> Polygon:
80
80
  cs = helpers.out_cross_section3(self.roll_pass, self.width)
81
- if (-cs.bounds[1] + cs.centroid.y) * 2.02 < self.width:
81
+ if (cs.bounds[3] + cs.centroid.y) * 2.02 < self.width:
82
82
  raise ValueError(
83
83
  "Profile's width can not be larger than its contour lines."
84
84
  "May be caused by critical overfilling."
@@ -51,4 +51,4 @@ def surface_velocity(self: RollPass.Roll):
51
51
  if self.has_value("neutral_angle"):
52
52
  return self.roll_pass.velocity / np.cos(self.neutral_angle)
53
53
  else:
54
- return self.roll_pass.velocity / np.cos(self.roll_pass.exit_point)
54
+ return self.roll_pass.velocity / np.cos(self.roll_pass.exit_angle)
@@ -139,7 +139,7 @@ def height3(self):
139
139
  self.roll.groove.usable_width / 2,
140
140
  math.inf
141
141
  )
142
- return 2 * usable_contour.bounds[3]
142
+ return abs(2 * usable_contour.bounds[1])
143
143
 
144
144
 
145
145
  @RollPass.volume
@@ -167,9 +167,9 @@ def contact_area3(self: ThreeRollPass):
167
167
  @RollPass.velocity
168
168
  def velocity(self: RollPass):
169
169
  if self.roll.has_value("neutral_angle"):
170
- return self.roll.surface_velocity * np.cos(self.roll.neutral_angle)
170
+ return self.roll.working_velocity * np.cos(self.roll.neutral_angle)
171
171
  else:
172
- return self.roll.surface_velocity * np.cos(0)
172
+ return self.roll.rotational_frequency * self.roll.working_radius * 2 * np.pi
173
173
 
174
174
 
175
175
  @RollPass.duration
@@ -275,11 +275,4 @@ def exit_angle(self: RollPass):
275
275
  return np.arcsin(self.exit_point / self.roll.working_radius)
276
276
 
277
277
 
278
- @RollPass.InProfile.longitudinal_angle
279
- def longitudinal_angle(self: RollPass.InProfile):
280
- return self.roll_pass.entry_angle
281
278
 
282
-
283
- @RollPass.OutProfile.longitudinal_angle
284
- def longitudinal_angle(self: RollPass.OutProfile):
285
- return self.roll_pass.exit_angle
@@ -21,12 +21,13 @@ class ThreeRollPass(RollPass):
21
21
  return self._contour_lines
22
22
 
23
23
  shift = self.roll.groove.usable_width / 2 / np.sqrt(3) + self.gap / np.sqrt(3)
24
- upper = translate(self.roll.contour_line, yoff=shift)
25
- upper = LineString(upper.coords[::-1]) # get back coordinate order
26
- right = rotate(upper, angle=-120, origin=(0, 0))
27
- left = rotate(upper, angle=120, origin=(0, 0))
24
+ lower = translate(self.roll.contour_line, yoff=shift)
25
+ lower = LineString(lower.coords[::-1]) # get back coordinate order
26
+ right = rotate(lower, angle=-60, origin=(0, 0))
27
+ left = rotate(lower, angle=60, origin=(0, 0))
28
+ lower = rotate(lower, angle=180, origin=(0, 0))
28
29
 
29
- self._contour_lines = [right, upper, left]
30
+ self._contour_lines = [left, lower, right]
30
31
  return self._contour_lines
31
32
 
32
33
  @property
@@ -52,6 +52,12 @@ def box_diamond_45(self: Rotator):
52
52
  return 45
53
53
 
54
54
 
55
+ @Rotator.rotation
56
+ def box_flat_0(self: Rotator):
57
+ if "box" in self.in_profile.classifiers and "flat" in self.next_roll_pass.classifiers:
58
+ return 0
59
+
60
+
55
61
  @Rotator.rotation
56
62
  def square_flat_45(self: Rotator):
57
63
  if "square" in self.in_profile.classifiers and "flat" in self.next_roll_pass.classifiers:
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -19,13 +19,13 @@ def width(self: Profile):
19
19
  @Profile.height
20
20
  def height_3fold(self: Profile):
21
21
  if "3fold" in self.classifiers:
22
- return (self.cross_section.bounds[3] - self.cross_section.centroid.y) * 2
22
+ return (self.cross_section.centroid.y - self.cross_section.bounds[1]) * 2
23
23
 
24
24
 
25
25
  @Profile.width
26
26
  def width_3fold(self: Profile):
27
27
  if "3fold" in self.classifiers:
28
- return (self.cross_section.centroid.y - self.cross_section.bounds[1]) * 2
28
+ return (self.cross_section.bounds[3] - self.cross_section.centroid.y) * 2
29
29
 
30
30
 
31
31
  @Profile.equivalent_height