luminarycloud 0.19.0__py3-none-any.whl → 0.22.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.
Files changed (110) hide show
  1. luminarycloud/__init__.py +5 -1
  2. luminarycloud/_client/client.py +7 -0
  3. luminarycloud/_client/http_client.py +10 -8
  4. luminarycloud/_feature_flag.py +22 -0
  5. luminarycloud/_helpers/_create_simulation.py +7 -2
  6. luminarycloud/_helpers/_upload_mesh.py +1 -0
  7. luminarycloud/_helpers/_wait_for_mesh.py +6 -5
  8. luminarycloud/_helpers/_wait_for_simulation.py +3 -3
  9. luminarycloud/_helpers/download.py +3 -1
  10. luminarycloud/_helpers/pagination.py +62 -0
  11. luminarycloud/_helpers/proto_decorator.py +13 -5
  12. luminarycloud/_helpers/upload.py +18 -12
  13. luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2.py +55 -0
  14. luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2.pyi +52 -0
  15. luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2_grpc.py +72 -0
  16. luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2_grpc.pyi +35 -0
  17. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +168 -124
  18. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +133 -4
  19. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +66 -0
  20. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +20 -0
  21. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.py +8 -8
  22. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.pyi +5 -5
  23. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py +74 -73
  24. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi +17 -3
  25. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +96 -25
  26. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +235 -1
  27. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +34 -0
  28. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +12 -0
  29. luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2.py +16 -16
  30. luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2.pyi +7 -3
  31. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +97 -61
  32. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +77 -4
  33. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.py +34 -0
  34. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.pyi +12 -0
  35. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +33 -31
  36. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +23 -2
  37. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +126 -27
  38. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +183 -0
  39. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py +99 -0
  40. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi +30 -0
  41. luminarycloud/_proto/assistant/assistant_pb2.py +74 -41
  42. luminarycloud/_proto/assistant/assistant_pb2.pyi +64 -2
  43. luminarycloud/_proto/assistant/assistant_pb2_grpc.py +33 -0
  44. luminarycloud/_proto/assistant/assistant_pb2_grpc.pyi +10 -0
  45. luminarycloud/_proto/base/base_pb2.py +20 -7
  46. luminarycloud/_proto/base/base_pb2.pyi +38 -0
  47. luminarycloud/_proto/cad/shape_pb2.py +39 -19
  48. luminarycloud/_proto/cad/shape_pb2.pyi +86 -34
  49. luminarycloud/_proto/cad/transformation_pb2.py +60 -16
  50. luminarycloud/_proto/cad/transformation_pb2.pyi +138 -32
  51. luminarycloud/_proto/client/simulation_pb2.py +501 -348
  52. luminarycloud/_proto/client/simulation_pb2.pyi +607 -11
  53. luminarycloud/_proto/geometry/geometry_pb2.py +77 -63
  54. luminarycloud/_proto/geometry/geometry_pb2.pyi +42 -3
  55. luminarycloud/_proto/hexmesh/hexmesh_pb2.py +24 -18
  56. luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +23 -2
  57. luminarycloud/_proto/inferenceservice/inferenceservice_pb2.py +10 -10
  58. luminarycloud/_proto/inferenceservice/inferenceservice_pb2.pyi +5 -5
  59. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +29 -0
  60. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.pyi +7 -0
  61. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +70 -0
  62. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +30 -0
  63. luminarycloud/_proto/quantity/quantity_options_pb2.py +6 -6
  64. luminarycloud/_proto/quantity/quantity_options_pb2.pyi +10 -1
  65. luminarycloud/_proto/quantity/quantity_pb2.py +176 -167
  66. luminarycloud/_proto/quantity/quantity_pb2.pyi +11 -5
  67. luminarycloud/enum/__init__.py +1 -0
  68. luminarycloud/enum/gpu_type.py +2 -0
  69. luminarycloud/enum/quantity_type.py +9 -0
  70. luminarycloud/enum/vis_enums.py +23 -3
  71. luminarycloud/exceptions.py +7 -1
  72. luminarycloud/feature_modification.py +45 -35
  73. luminarycloud/geometry.py +107 -9
  74. luminarycloud/geometry_version.py +57 -3
  75. luminarycloud/mesh.py +1 -2
  76. luminarycloud/meshing/mesh_generation_params.py +8 -8
  77. luminarycloud/params/enum/_enum_wrappers.py +562 -30
  78. luminarycloud/params/simulation/adaptive_mesh_refinement_.py +4 -0
  79. luminarycloud/params/simulation/material/material_solid_.py +15 -1
  80. luminarycloud/params/simulation/physics/__init__.py +0 -1
  81. luminarycloud/params/simulation/physics/periodic_pair_.py +12 -31
  82. luminarycloud/physics_ai/architectures.py +58 -0
  83. luminarycloud/physics_ai/inference.py +13 -13
  84. luminarycloud/physics_ai/solution.py +3 -1
  85. luminarycloud/physics_ai/training_jobs.py +37 -0
  86. luminarycloud/pipelines/__init__.py +11 -3
  87. luminarycloud/pipelines/api.py +248 -16
  88. luminarycloud/pipelines/arguments.py +15 -0
  89. luminarycloud/pipelines/core.py +113 -96
  90. luminarycloud/pipelines/{operators.py → stages.py} +96 -39
  91. luminarycloud/project.py +15 -47
  92. luminarycloud/simulation.py +69 -5
  93. luminarycloud/simulation_param.py +0 -9
  94. luminarycloud/simulation_template.py +2 -1
  95. luminarycloud/types/matrix3.py +12 -0
  96. luminarycloud/vis/__init__.py +17 -0
  97. luminarycloud/vis/data_extraction.py +20 -4
  98. luminarycloud/vis/interactive_report.py +110 -0
  99. luminarycloud/vis/interactive_scene.py +29 -2
  100. luminarycloud/vis/report.py +252 -0
  101. luminarycloud/vis/visualization.py +127 -5
  102. luminarycloud/volume_selection.py +132 -69
  103. {luminarycloud-0.19.0.dist-info → luminarycloud-0.22.0.dist-info}/METADATA +1 -1
  104. {luminarycloud-0.19.0.dist-info → luminarycloud-0.22.0.dist-info}/RECORD +105 -97
  105. luminarycloud/params/simulation/physics/periodic_pair/__init__.py +0 -2
  106. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/__init__.py +0 -2
  107. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +0 -31
  108. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/translational_periodicity_.py +0 -29
  109. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type_.py +0 -25
  110. {luminarycloud-0.19.0.dist-info → luminarycloud-0.22.0.dist-info}/WHEEL +0 -0
@@ -3,6 +3,7 @@ from datetime import datetime
3
3
 
4
4
  from ._client import get_default_client
5
5
  from ._helpers._timestamp_to_datetime import timestamp_to_datetime
6
+ from ._helpers.pagination import PaginationIterator
6
7
  from ._proto.api.v0.luminarycloud.geometry import geometry_pb2 as geometrypb
7
8
  from ._proto.geometry import geometry_pb2 as gpb
8
9
  from ._wrapper import ProtoWrapper, ProtoWrapperBase
@@ -87,7 +88,7 @@ class GeometryVersion(ProtoWrapperBase):
87
88
  ]
88
89
  return surfaces, volumes
89
90
 
90
- def copy_to_new_geometry(self, name: str = "") -> Geometry:
91
+ def copy_to_new_geometry(self, name: str = "", request_id: str = "") -> Geometry:
91
92
  """
92
93
  Copy this GeometryVersion and create a new Geometry containing only that newly copied version.
93
94
 
@@ -95,6 +96,11 @@ class GeometryVersion(ProtoWrapperBase):
95
96
  ----------
96
97
  name : str, optional
97
98
  The name of the new Geometry. If not provided, a default name will be used.
99
+ request_id : str, optional
100
+ A deduplication key, useful for idempotency. The first time copy_to_new_geometry() is
101
+ called with a given request_id, a new geometry will be created. Subsequent calls with
102
+ the same request_id will return the same geometry. If not provided, no deduplication is
103
+ done. Max length: 256 characters.
98
104
 
99
105
  Returns
100
106
  -------
@@ -104,6 +110,7 @@ class GeometryVersion(ProtoWrapperBase):
104
110
  req = geometrypb.CopyGeometryFromVersionRequest(
105
111
  geometry_version_id=self.id,
106
112
  name=name,
113
+ request_id=request_id,
107
114
  )
108
115
  res: geometrypb.CopyGeometryFromVersionResponse = (
109
116
  get_default_client().CopyGeometryFromVersion(req)
@@ -173,14 +180,39 @@ class GeometryVersion(ProtoWrapperBase):
173
180
  return res.sdk_code
174
181
 
175
182
 
183
+ class GeometryVersionIterator(PaginationIterator[GeometryVersion]):
184
+ """Iterator class for geometry versions that provides length hint."""
185
+
186
+ def __init__(self, geometry_id: str, unfiltered: bool, page_size: int):
187
+ super().__init__(page_size)
188
+ self._geometry_id: str = geometry_id
189
+ self._unfiltered: bool = unfiltered
190
+
191
+ def _fetch_page(
192
+ self, page_size: int, page_token: str
193
+ ) -> tuple[list[GeometryVersion], str, int]:
194
+ req = geometrypb.ListGeometryVersionsRequest(
195
+ page_size=page_size,
196
+ page_token=page_token,
197
+ geometry_id=self._geometry_id,
198
+ unfiltered=self._unfiltered,
199
+ )
200
+ res = self._client.ListGeometryVersions(req)
201
+ return (
202
+ [GeometryVersion(gv) for gv in res.geometry_versions],
203
+ res.next_page_token,
204
+ res.total_count,
205
+ )
206
+
207
+
176
208
  def get_geometry_version(id: str) -> GeometryVersion:
177
209
  """
178
- Get a specific geometry version with the given ID.
210
+ Get a geometry version by its ID.
179
211
 
180
212
  Parameters
181
213
  ----------
182
214
  id : str
183
- Geometry version ID.
215
+ ID of the geometry version to get.
184
216
 
185
217
  Returns
186
218
  -------
@@ -191,3 +223,25 @@ def get_geometry_version(id: str) -> GeometryVersion:
191
223
  req = geometrypb.GetGeometryVersionRequest(geometry_version_id=id)
192
224
  res: geometrypb.GetGeometryVersionResponse = get_default_client().GetGeometryVersion(req)
193
225
  return GeometryVersion(res.geometry_version)
226
+
227
+
228
+ def update_geometry_version(id: str, name: str) -> GeometryVersion:
229
+ """
230
+ Update a geometry version.
231
+
232
+ Parameters
233
+ ----------
234
+ id : str
235
+ ID of the geometry version to update.
236
+ name : str
237
+ The new name for the geometry version. Pass an empty string to clear the name.
238
+
239
+ Returns
240
+ -------
241
+ GeometryVersion
242
+ The updated GeometryVersion.
243
+ """
244
+
245
+ req = geometrypb.UpdateGeometryVersionRequest(geometry_version_id=id, name=name)
246
+ res: geometrypb.UpdateGeometryVersionResponse = get_default_client().UpdateGeometryVersion(req)
247
+ return GeometryVersion(res.geometry_version)
luminarycloud/mesh.py CHANGED
@@ -106,8 +106,7 @@ class Mesh(ProtoWrapperBase):
106
106
  interval_seconds=interval_seconds,
107
107
  timeout_seconds=timeout_seconds,
108
108
  )
109
- self._proto = get_mesh(self.id)._proto
110
- return self.status
109
+ return self.refresh().status
111
110
 
112
111
  def refresh(self) -> "Mesh":
113
112
  """
@@ -108,15 +108,15 @@ class RefinementRegion(PipelineDictable):
108
108
  proto.name = self.name
109
109
  proto.h_limit = self.h_limit
110
110
  if isinstance(self.shape, Sphere):
111
- proto.sphere.center.CopyFrom(self.shape.center._to_base_proto())
112
- proto.sphere.radius = self.shape.radius
111
+ proto.sphere.center_float.CopyFrom(self.shape.center._to_base_proto())
112
+ proto.sphere.radius_float = self.shape.radius
113
113
  elif isinstance(self.shape, SphereShell):
114
114
  proto.sphere_shell.center.CopyFrom(self.shape.center._to_base_proto())
115
115
  proto.sphere_shell.radius = self.shape.radius
116
116
  proto.sphere_shell.radius_inner = self.shape.radius_inner
117
117
  elif isinstance(self.shape, Cube):
118
- proto.cube.min.CopyFrom(self.shape.min._to_base_proto())
119
- proto.cube.max.CopyFrom(self.shape.max._to_base_proto())
118
+ proto.cube.min_float.CopyFrom(self.shape.min._to_base_proto())
119
+ proto.cube.max_float.CopyFrom(self.shape.max._to_base_proto())
120
120
  elif isinstance(self.shape, OrientedCube):
121
121
  proto.oriented_cube.min.CopyFrom(self.shape.min._to_base_proto())
122
122
  proto.oriented_cube.max.CopyFrom(self.shape.max._to_base_proto())
@@ -124,9 +124,9 @@ class RefinementRegion(PipelineDictable):
124
124
  proto.oriented_cube.x_axis.CopyFrom(self.shape.x_axis._to_base_proto())
125
125
  proto.oriented_cube.y_axis.CopyFrom(self.shape.y_axis._to_base_proto())
126
126
  elif isinstance(self.shape, Cylinder):
127
- proto.cylinder.start.CopyFrom(self.shape.start._to_base_proto())
128
- proto.cylinder.end.CopyFrom(self.shape.end._to_base_proto())
129
- proto.cylinder.radius = self.shape.radius
127
+ proto.cylinder.start_float.CopyFrom(self.shape.start._to_base_proto())
128
+ proto.cylinder.end_float.CopyFrom(self.shape.end._to_base_proto())
129
+ proto.cylinder.radius_float = self.shape.radius
130
130
  elif isinstance(self.shape, AnnularCylinder):
131
131
  proto.annular_cylinder.start.CopyFrom(self.shape.start._to_base_proto())
132
132
  proto.annular_cylinder.end.CopyFrom(self.shape.end._to_base_proto())
@@ -143,7 +143,7 @@ class MeshGenerationParams(PipelineDictable):
143
143
 
144
144
  geometry_id: str
145
145
  "The ID of the geometry to generate a mesh for"
146
- sizing_strategy: SizingStrategy = field(default_factory=MaxCount)
146
+ sizing_strategy: SizingStrategy = field(default_factory=Minimal)
147
147
  "The sizing strategy to use"
148
148
 
149
149
  # Defaults copied from ts/frontend/src/lib/paramDefaults/meshGenerationState.ts