luminarycloud 0.18.0__py3-none-any.whl → 0.18.1__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 (29) hide show
  1. luminarycloud/__init__.py +4 -0
  2. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +88 -55
  3. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +108 -1
  4. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.py +35 -0
  5. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.pyi +16 -0
  6. luminarycloud/_proto/client/simulation_pb2.py +234 -234
  7. luminarycloud/_proto/client/simulation_pb2.pyi +5 -1
  8. luminarycloud/_proto/output/output_pb2.py +43 -36
  9. luminarycloud/_proto/output/output_pb2.pyi +28 -1
  10. luminarycloud/_proto/quantity/quantity_options_pb2.py +5 -4
  11. luminarycloud/_proto/quantity/quantity_options_pb2.pyi +4 -0
  12. luminarycloud/_proto/quantity/quantity_pb2.py +8 -8
  13. luminarycloud/enum/__init__.py +1 -0
  14. luminarycloud/enum/moment_convention_type.py +19 -0
  15. luminarycloud/outputs/output_definitions.py +5 -0
  16. luminarycloud/params/simulation/monitor_plane_.py +1 -1
  17. luminarycloud/physics_ai/inference.py +14 -3
  18. luminarycloud/pipelines/operators.py +4 -4
  19. luminarycloud/project.py +1 -1
  20. luminarycloud/simulation.py +6 -0
  21. luminarycloud/simulation_param.py +4 -2
  22. luminarycloud/simulation_queue.py +130 -0
  23. luminarycloud/simulation_template.py +6 -1
  24. luminarycloud/types/adfloat.py +3 -0
  25. luminarycloud/vis/interactive_scene.py +14 -1
  26. luminarycloud/vis/visualization.py +16 -0
  27. {luminarycloud-0.18.0.dist-info → luminarycloud-0.18.1.dist-info}/METADATA +1 -1
  28. {luminarycloud-0.18.0.dist-info → luminarycloud-0.18.1.dist-info}/RECORD +29 -27
  29. {luminarycloud-0.18.0.dist-info → luminarycloud-0.18.1.dist-info}/WHEEL +0 -0
@@ -3,6 +3,7 @@ from .averaging_type import AveragingType
3
3
  from .calculation_type import CalculationType
4
4
  from .force_direction_type import ForceDirectionType
5
5
  from .geometry_status import GeometryStatus
6
+ from .moment_convention_type import MomentConventionType
6
7
  from .gpu_type import GPUType
7
8
  from .mesh_status import MeshStatus
8
9
  from .mesh_type import MeshType
@@ -0,0 +1,19 @@
1
+ # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
2
+ from enum import IntEnum
3
+ from .._proto.output import output_pb2 as outputpb
4
+
5
+
6
+ class MomentConventionType(IntEnum):
7
+ """
8
+ Whether the body frame or stability frame is used for pitch, roll and yaw moment calculations.
9
+
10
+ Attributes
11
+ ----------
12
+ BODY_FRAME
13
+ STABILITY_FRAME
14
+ """
15
+
16
+ UNSPECIFIED = outputpb.INVALID_MOMENT_CONVENTION_TYPE
17
+
18
+ BODY_FRAME = outputpb.MOMENT_CONVENTION_BODY_FRAME
19
+ STABILITY_FRAME = outputpb.MOMENT_CONVENTION_STABILITY_FRAME
@@ -9,6 +9,7 @@ from ..types import Vector3
9
9
  from typing import cast, overload
10
10
  from ..enum import (
11
11
  CalculationType,
12
+ MomentConventionType,
12
13
  OutputDefinitionIncludes,
13
14
  QuantityType,
14
15
  ResidualType,
@@ -185,6 +186,8 @@ class ForceOutputDefinition(CodeRepr):
185
186
  "Center point for moment calculations."
186
187
  porous: bool = False
187
188
  "Whether the surfaces involved are porous."
189
+ moment_convention_type: MomentConventionType = MomentConventionType.BODY_FRAME
190
+ "Frame type for moment calculations (body or stability frame)."
188
191
  # TODO: it seems clumsy to make the user set `porous` correctly. we could probably set it
189
192
  # automatically based on the set of surfaces selected.
190
193
 
@@ -201,6 +204,7 @@ class ForceOutputDefinition(CodeRepr):
201
204
  force_direction=self.force_direction._to_ad_proto(),
202
205
  moment_center=self.moment_center._to_ad_proto(),
203
206
  porous=self.porous,
207
+ moment_convention_type=self.moment_convention_type.value,
204
208
  ),
205
209
  ),
206
210
  )
@@ -220,6 +224,7 @@ class ForceOutputDefinition(CodeRepr):
220
224
  force_direction=Vector3.from_ad_proto(proto.force.props.force_direction),
221
225
  moment_center=Vector3.from_ad_proto(proto.force.props.moment_center),
222
226
  porous=proto.force.props.porous,
227
+ moment_convention_type=MomentConventionType(proto.force.props.moment_convention_type),
223
228
  )
224
229
 
225
230
 
@@ -40,7 +40,7 @@ class MonitorPlane(CodeRepr, ParamGroupWrapper[clientpb.MonitorPlane]):
40
40
  "Rotation vector of Euler angles (XYZ order) that transforms the box used to clip the monitor plane."
41
41
  enable_volume_clip: bool = False
42
42
  "Turn on or off the ability to constrain a monitor plane to specific volumes of the geometry."
43
- volumes: list[EntityIdentifier] = field(default_factory=_create_entity_identifier, init=True)
43
+ volumes: list[EntityIdentifier] = field(default_factory=list)
44
44
  "List of volumes used to clip the monitor plane."
45
45
 
46
46
  def _to_proto(self) -> clientpb.MonitorPlane:
@@ -53,6 +53,7 @@ def external_aero_inference(
53
53
  artifact_url: str,
54
54
  parameters: Optional[Dict[str, Any]] = None,
55
55
  stencil_size: int = 1,
56
+ write_visualization_data=False,
56
57
  ) -> ExtAeroInferenceResult:
57
58
  """Performs an inference job returning external aerodynamic results.
58
59
  Parameters
@@ -67,6 +68,9 @@ def external_aero_inference(
67
68
  Dictionary of parameters to be passed to the inference service (e.g., alpha, beta, etc.).
68
69
  stencil_size : int, optional
69
70
  Size of the stencil to be used for inference. Defaults to 1.
71
+ write_visualization_data : bool, optional
72
+ Whether to write LC visualization data for visualization by Luminary.
73
+
70
74
 
71
75
  Returns
72
76
  ExtAeroInferenceResult
@@ -75,7 +79,9 @@ def external_aero_inference(
75
79
  warning:: This feature is experimental and may change or be removed without notice.
76
80
  """
77
81
 
78
- result = perform_inference(project, stl_file, artifact_url, parameters, stencil_size)
82
+ result = perform_inference(
83
+ project, stl_file, artifact_url, parameters, stencil_size, write_visualization_data
84
+ )
79
85
  return ExtAeroInferenceResult(result)
80
86
 
81
87
 
@@ -85,6 +91,7 @@ def perform_inference(
85
91
  artifact_url: str,
86
92
  parameters: Optional[Dict[str, Any]] = None,
87
93
  stencil_size: int = 1,
94
+ write_visualization_data=False,
88
95
  ) -> dict[str, Any]:
89
96
  """Creates an inference service job.
90
97
  Parameters
@@ -99,6 +106,8 @@ def perform_inference(
99
106
  Dictionary of parameters to be passed to the inference service (e.g., alpha, beta, etc.).
100
107
  stencil_size : int, optional
101
108
  Size of the stencil to be used for inference. Defaults to 1.
109
+ write_visualization_data : bool, optional
110
+ Whether to write LC visualization data for visualization by Luminary.
102
111
 
103
112
 
104
113
  Returns
@@ -132,7 +141,9 @@ def perform_inference(
132
141
 
133
142
  stl_url = upload_if_file(stl_file)
134
143
 
135
- raw = start_inference_job(project, stl_url, artifact_url, parameters, stencil_size)
144
+ raw = start_inference_job(
145
+ project, stl_url, artifact_url, parameters, stencil_size, write_visualization_data
146
+ )
136
147
  currated: dict[str, Any] = {}
137
148
  for k, v in raw.items():
138
149
  if isinstance(v, str) and v.startswith("https://"):
@@ -170,7 +181,7 @@ def start_inference_job(
170
181
  stencil_size : int, optional
171
182
  Size of the stencil to be used for inference. Defaults to 1.
172
183
  write_visualization_data : bool, optional
173
- Whether to write LC render data for visualization by Luminary.
184
+ Whether to write LC visualization data for visualization by Luminary.
174
185
 
175
186
 
176
187
  Returns
@@ -124,8 +124,8 @@ class Mesh(Operator[MeshOutputs]):
124
124
 
125
125
  Parameters
126
126
  ----------
127
- max_cv_count : int
128
- The maximum number of control volumes to generate.
127
+ target_cv_count : int | None
128
+ The target number of control volumes to generate. If None, a minimal mesh will be generated.
129
129
  geometry : PipelineOutputGeometry
130
130
  The Geometry to mesh.
131
131
 
@@ -141,12 +141,12 @@ class Mesh(Operator[MeshOutputs]):
141
141
  self,
142
142
  *,
143
143
  task_name: str | None = None,
144
- max_cv_count: int,
144
+ target_cv_count: int | None,
145
145
  geometry: PipelineOutputGeometry,
146
146
  ):
147
147
  super().__init__(
148
148
  task_name,
149
- {"max_cv_count": max_cv_count},
149
+ {"target_cv_count": target_cv_count},
150
150
  OperatorInputs(self, geometry=(PipelineOutputGeometry, geometry)),
151
151
  MeshOutputs._instantiate_for(self),
152
152
  )
luminarycloud/project.py CHANGED
@@ -898,6 +898,6 @@ def iterate_projects(page_size: int = 50) -> ProjectIterator:
898
898
  Project(...)
899
899
  >>> next(my_projects) # second page of projects is fetched, third project is returned
900
900
  Project(...)
901
- >>> next(my_projects) # if there areno more projects, this call raises StopIteration
901
+ >>> next(my_projects) # if there are no more projects, this call raises StopIteration
902
902
  """
903
903
  return ProjectIterator(page_size)
@@ -18,6 +18,7 @@ from .enum import (
18
18
  CalculationType,
19
19
  QuantityType,
20
20
  ResidualNormalization,
21
+ MomentConventionType,
21
22
  SimulationStatus,
22
23
  Vector3Component,
23
24
  )
@@ -188,6 +189,7 @@ class Simulation(ProtoWrapperBase):
188
189
  moment_center: Optional[Vector3Like] = None,
189
190
  averaging_type: AveragingType = AveragingType.UNSPECIFIED,
190
191
  vector_component: Vector3Component = Vector3Component.UNSPECIFIED,
192
+ moment_convention_type: MomentConventionType = MomentConventionType.BODY_FRAME,
191
193
  ) -> _DownloadedTextFile:
192
194
  """
193
195
  Downloads surface outputs (e.g. lift, drag, ...) in csv format.
@@ -224,6 +226,9 @@ class Simulation(ProtoWrapperBase):
224
226
  vector_component : Vector3Component, optional
225
227
  For 3-vector quantity types (e.g. `QuantityType.VELOCITY`), the component of the vector to extract.
226
228
  Ignored for scalar quantity types.
229
+ moment_convention_type : MomentConventionType, optional
230
+ The frame type to use for "aerodynamic moment" quantity types.
231
+ Ignored for non-moment quantity types.
227
232
 
228
233
  Returns
229
234
  -------
@@ -261,6 +266,7 @@ class Simulation(ProtoWrapperBase):
261
266
  moment_center=_to_vector3_proto(moment_center) if moment_center else None,
262
267
  averaging_type=averaging_type.value,
263
268
  vector_component=vector_component.value,
269
+ moment_convention_type=moment_convention_type.value,
264
270
  )
265
271
  res = get_default_client().GetSimulationSurfaceQuantityOutput(req)
266
272
  return _DownloadedTextFile(res.csv_file)
@@ -14,7 +14,7 @@ from luminarycloud._proto.client import simulation_pb2 as clientpb
14
14
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._proto.output import output_pb2 as outputpb
16
16
  from luminarycloud._proto.quantity import quantity_options_pb2 as quantityoptspb
17
- from luminarycloud.enum import AveragingType, QuantityType, SpaceAveragingType
17
+ from luminarycloud.enum import AveragingType, MomentConventionType, QuantityType, SpaceAveragingType
18
18
  from luminarycloud.params.geometry import Volume
19
19
  from luminarycloud.params.simulation import (
20
20
  EntityRelationships,
@@ -265,6 +265,7 @@ class SimulationParam(_SimulationParam):
265
265
  frame_id: str = "",
266
266
  force_direction: Optional[Vector3Like] = None,
267
267
  moment_center: Optional[Vector3Like] = None,
268
+ moment_convention_type: MomentConventionType = MomentConventionType.BODY_FRAME,
268
269
  averaging_type: AveragingType = AveragingType.UNSPECIFIED,
269
270
  ) -> None:
270
271
  """
@@ -303,6 +304,7 @@ class SimulationParam(_SimulationParam):
303
304
  _to_vector3_ad_proto(force_direction) if force_direction else None
304
305
  ),
305
306
  moment_center=_to_vector3_ad_proto(moment_center) if moment_center else None,
307
+ moment_convention_type=moment_convention_type.value,
306
308
  )
307
309
  )
308
310
  else:
@@ -329,7 +331,7 @@ class SimulationParam(_SimulationParam):
329
331
  ## code that creates (from scratch) an identical object. As such, some parts do
330
332
  ## not match 1 to 1 with hand-written examples.
331
333
  import luminarycloud
332
- from luminarycloud.types import Vector3
334
+ from luminarycloud.types import Vector3, Expression
333
335
  from luminarycloud.tables import RectilinearTable
334
336
  from luminarycloud.enum import *
335
337
  from luminarycloud.params.enum import *
@@ -0,0 +1,130 @@
1
+ # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
2
+
3
+ """Simulation queue management functionality."""
4
+
5
+ from datetime import datetime
6
+ from typing import Optional
7
+
8
+ from ._client import get_default_client
9
+ from ._helpers._timestamp_to_datetime import timestamp_to_datetime
10
+ from ._proto.api.v0.luminarycloud.simulation import simulation_pb2 as simulationpb
11
+ from ._wrapper import ProtoWrapper, ProtoWrapperBase
12
+ from .types import ProjectID, SimulationID
13
+
14
+
15
+ @ProtoWrapper(simulationpb.SimulationQueueStatus)
16
+ class SimulationQueueStatus(ProtoWrapperBase):
17
+ """Represents the status of a queued simulation."""
18
+
19
+ project_id: ProjectID
20
+ """The ID of the project to which the simulation belongs."""
21
+ simulation_id: SimulationID
22
+ """The ID of the simulation."""
23
+ name: str
24
+ """The name of the simulation."""
25
+ is_lma: bool
26
+ """Whether this is an LMA simulation."""
27
+ priority: bool
28
+ """Whether this is a priority simulation."""
29
+
30
+ _proto: simulationpb.SimulationQueueStatus
31
+
32
+ @property
33
+ def creation_time(self) -> datetime:
34
+ """The time when the simulation was created."""
35
+ return timestamp_to_datetime(self._proto.creation_time)
36
+
37
+ @property
38
+ def started_time(self) -> Optional[datetime]:
39
+ """The time when the simulation started running, if it has started."""
40
+ if self._proto.HasField("started_time"):
41
+ return timestamp_to_datetime(self._proto.started_time)
42
+ return None
43
+
44
+
45
+ class SimulationStatusQueueIterator:
46
+ """Iterator class for simulation status queue that provides length hint."""
47
+
48
+ def __init__(self, page_size: int):
49
+ self._page_size: int = page_size
50
+ self._page_token: str = ""
51
+ self._total_count: Optional[int] = None
52
+ self._current_page: Optional[list[simulationpb.SimulationQueueStatus]] = None
53
+ self._client = get_default_client()
54
+ self._iterated_count: int = 0
55
+
56
+ def __iter__(self) -> "SimulationStatusQueueIterator":
57
+ return self
58
+
59
+ def __next__(self) -> SimulationQueueStatus:
60
+ if self._current_page is None:
61
+ self._fetch_next_page()
62
+
63
+ # _current_page really can't be None here, but this assertion is needed to appease mypy
64
+ assert self._current_page is not None
65
+
66
+ if len(self._current_page) == 0:
67
+ if not self._page_token:
68
+ raise StopIteration
69
+ self._fetch_next_page()
70
+
71
+ self._iterated_count += 1
72
+
73
+ return SimulationQueueStatus(self._current_page.pop(0))
74
+
75
+ def _fetch_next_page(self) -> None:
76
+ req = simulationpb.ListQueuedSimulationsRequest(
77
+ page_size=self._page_size, page_token=self._page_token
78
+ )
79
+ res = self._client.ListQueuedSimulations(req)
80
+
81
+ self._current_page = list(res.simulations)
82
+ self._page_token = res.next_page_token
83
+ if self._total_count is None:
84
+ self._total_count = res.total_count or 0
85
+
86
+ def __length_hint__(self) -> int:
87
+ if self._total_count is None:
88
+ # Fetch first page to get total size if not already fetched
89
+ if self._current_page is None:
90
+ self._fetch_next_page()
91
+ return max(0, (self._total_count or 0) - self._iterated_count)
92
+
93
+
94
+ def iterate_simulation_status_queue(page_size: int = 50) -> SimulationStatusQueueIterator:
95
+ """
96
+ Iterate over all simulations in the scheduling queue for the current account.
97
+
98
+ This function is only available for accounts with a Subscription Plan.
99
+
100
+ Parameters
101
+ ----------
102
+ page_size : int, optional
103
+ Number of simulations to fetch per page. Defaults to 50, max is 100.
104
+
105
+ Returns
106
+ -------
107
+ SimulationStatusQueueIterator
108
+ An iterator that yields SimulationQueueStatus objects one at a time.
109
+
110
+ Examples
111
+ --------
112
+ Fetch all queued simulations and filter them for LMA simulations.
113
+
114
+ >>> lma_sims = [sim for sim in iterate_simulation_status_queue() if sim.is_lma]
115
+ [SimulationQueueStatus(...), SimulationQueueStatus(...)]
116
+
117
+ Lazily fetch simulations.
118
+ (A batch size of 2 is a bad idea in real-world usage, but it helps demonstrate the lazy
119
+ fetching.)
120
+
121
+ >>> my_sims = iterate_simulation_status_queue(page_size=2)
122
+ >>> next(my_sims) # first page of simulations is fetched, first simulation is returned.
123
+ SimulationQueueStatus(...)
124
+ >>> next(my_sims) # second simulation is returned from memory.
125
+ SimulationQueueStatus(...)
126
+ >>> next(my_sims) # second page of simulations is fetched, third simulation is returned.
127
+ SimulationQueueStatus(...)
128
+ >>> next(my_sims) # if there are no more simulations, this call raises StopIteration.
129
+ """
130
+ return SimulationStatusQueueIterator(page_size)
@@ -518,6 +518,11 @@ class SimulationTemplate(ProtoWrapperBase):
518
518
  for i, definition in enumerate(output_definitions):
519
519
  if i == 0:
520
520
  code += "output_list = []\n"
521
+ if isinstance(definition, DerivedOutputDefinition):
522
+ code += "# WARNING: Output {i} - Custom outputs are not yet supported in the SDK.\n"
523
+ # This is to make the stopping condition ID logic work.
524
+ code += "output_list.append(None)\n\n"
525
+ continue
521
526
  output_code = definition._to_code_helper("new_output", hide_defaults)
522
527
  for line in output_code.split("\n"):
523
528
  # Omit ID because we are generating for create_output_definition.
@@ -535,7 +540,7 @@ class SimulationTemplate(ProtoWrapperBase):
535
540
  code += "\n# Output-based conditions require the ID of the associated output.\n"
536
541
  # Find the old output to use the new ID created by create_output_definition.
537
542
  for j, od in enumerate(output_definitions):
538
- if sc.output_definition_id == od.id:
543
+ if sc.output_definition_id == od.id and not isinstance(od, DerivedOutputDefinition):
539
544
  code += f"template.create_or_update_stopping_condition(output_list[{j}].id, "
540
545
  code += f"{sc.threshold}, {sc.start_at_iteration}, {sc.averaging_iterations}, "
541
546
  code += f"{sc.iterations_to_consider})\n"
@@ -145,6 +145,9 @@ class Expression:
145
145
  return False
146
146
  return self._value == other._value and self._expression == other._expression
147
147
 
148
+ def _to_code(self, *args) -> str:
149
+ return f"Expression({self._expression.__repr__()})"
150
+
148
151
 
149
152
  LcFloat = Union[float, FirstOrderAdFloat, SecondOrderAdFloat, Expression]
150
153
 
@@ -2,8 +2,9 @@
2
2
  from .display import DisplayAttributes
3
3
  from .filters import SurfaceStreamlines, Filter, SurfaceLIC
4
4
  from .._client import get_default_client
5
- from luminarycloud.enum.vis_enums import EntityType, SceneMode
5
+ from luminarycloud.enum.vis_enums import EntityType, SceneMode, FieldComponent
6
6
  from typing import TYPE_CHECKING, cast, Union
7
+ import luminarycloud.enum.quantity_type as quantity_type
7
8
 
8
9
  from .._proto.api.v0.luminarycloud.vis import vis_pb2
9
10
 
@@ -137,6 +138,12 @@ class InteractiveScene:
137
138
  self.widget.set_surface_color(surface_id, color)
138
139
 
139
140
  def set_display_attributes(self, object_id: str, attrs: DisplayAttributes) -> None:
141
+ # In the other parts of the code we ignore the field component for scalar. Since
142
+ # we are sending this directly to lcvis, we need to make sure that we use the x
143
+ # component.
144
+ if not quantity_type._is_vector(attrs.field.quantity):
145
+ # It won't matter if we change the object that is passed in.
146
+ attrs.field.component = FieldComponent.X
140
147
  self.widget.set_display_attributes(object_id, attrs)
141
148
 
142
149
  def reset_camera(self) -> None:
@@ -164,6 +171,12 @@ class InteractiveScene:
164
171
  self.widget.set_camera_orientation(camera.direction)
165
172
 
166
173
  def set_color_map(self, color_map: "ColorMap") -> None:
174
+ # In the other parts of the code we ignore the field component for
175
+ # scalar. Since we are sending this directly to lcvis, we need to make
176
+ # sure that we use the X comp.
177
+ if not quantity_type._is_vector(color_map.field.quantity):
178
+ # It won't matter if we change the object that is passed in.
179
+ color_map.field.component = FieldComponent.X
167
180
  self.widget.set_color_map(color_map)
168
181
 
169
182
  def get_camera(self) -> "LookAtCamera":
@@ -262,6 +262,22 @@ class RenderOutput:
262
262
  raise TimeoutError
263
263
  sleep(max(0, min(interval_seconds, deadline - time())))
264
264
 
265
+ def interact(self, scene_mode: SceneMode = SceneMode.SIDE_PANEL) -> InteractiveScene:
266
+ """
267
+ Start an interactive display of the scene used to create this output,
268
+ when running inside LuminaryCloud's AI Notebook environment or Jupyter
269
+ Lab. The returned object must be displayed in the notebook to display
270
+ the interactive visualization. This requires that the luminarycloud
271
+ package was installed with the optional jupyter feature.
272
+ """
273
+ self._fail_if_deleted()
274
+ self.refresh()
275
+ if self.status != RenderStatusType.COMPLETED:
276
+ raise Exception("interact: status not complete.")
277
+
278
+ scene = _reconstruct(self._extract_id, self._project_id)
279
+ return scene.interact(scene_mode=scene_mode)
280
+
265
281
  def download_images(self) -> List[Tuple[("io.BytesIO"), str]]:
266
282
  """
267
283
  Downloads the resulting jpeg images into binary buffers. This is useful
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luminarycloud
3
- Version: 0.18.0
3
+ Version: 0.18.1
4
4
  Summary: Luminary Cloud SDK
5
5
  Project-URL: Homepage, https://www.luminarycloud.com/
6
6
  Project-URL: Documentation, https://app.luminarycloud.com/docs/api/
@@ -1,4 +1,4 @@
1
- luminarycloud/__init__.py,sha256=bq5ooI4-k_TrbNFVB61VRE8-vAVMEmCyhY7rvSXuowY,3161
1
+ luminarycloud/__init__.py,sha256=mpNimnkWfQlpfQyo8Ugjx-gboUNug9hbsh-4m2A0JWY,3319
2
2
  luminarycloud/_patch.py,sha256=5m2_HUos6-NGPvrz-bOlVr5FsyJNJlCkmytyYJkj6Bc,1661
3
3
  luminarycloud/_version.py,sha256=lOdK2s5vnq1K8KND-J-wO2A2MuUTouiYRhJwRwb6mcA,178
4
4
  luminarycloud/_wrapper.py,sha256=PwTyxIVoYCF2z5arlV5UEgNfFDduxGE1KC2NaOpasWU,7796
@@ -8,11 +8,12 @@ luminarycloud/geometry.py,sha256=r8mQOUOeu1oKoRe4BWqN1ZH_HQIwjv5cgqTORyVDUE0,207
8
8
  luminarycloud/geometry_version.py,sha256=lP4oHotRpyt4fQkoYkwtfbNfpB0xSHFGEynFLCy7hiA,6004
9
9
  luminarycloud/mesh.py,sha256=ohEQty2M0oqUF5jBOHj59e4GXVo1GOi-bZuF31BpbtM,4819
10
10
  luminarycloud/named_variable_set.py,sha256=RsfGJDoZFajbJ2a2fWc-ZHRsZts5U7ZY6rIXSjXL7bY,4568
11
- luminarycloud/project.py,sha256=yE7SXYdqld5Uf3OJnKE0JlVYTg_l_bORszPzD9jSR8Y,32893
11
+ luminarycloud/project.py,sha256=LmgwRrYt7gRuMvFEZcxFVmKqBK4F5DffQ3-3RqoBDds,32894
12
12
  luminarycloud/reference_values.py,sha256=vWIX1VXMctspeQIjNtjmZdex55K0jHf1xz5gsGeMCfo,4357
13
- luminarycloud/simulation.py,sha256=Z7IfncUXCW7wcuYoGc-tG_JMVPDiMXYCqfeGT2cC4XA,12651
14
- luminarycloud/simulation_param.py,sha256=ekwyhhhiZCa2nlJU6dDzXSoA1OOIoqxsivtBYgjQuVg,16537
15
- luminarycloud/simulation_template.py,sha256=SQAWgNpTYpVtEMxMyefM-0gWtlACSpmn3vgw0IXIf9c,21083
13
+ luminarycloud/simulation.py,sha256=QKUgfRTCdkblP6XPtbcncHc6JSpxbinZ2OzEPNcq5q0,13020
14
+ luminarycloud/simulation_param.py,sha256=fKad0d0rCUL4EbdLvQS7WTK6_US3vQ2pbG8uaSrhxx4,16732
15
+ luminarycloud/simulation_queue.py,sha256=dbrxDxGROlxpCVaUmHItZ8uftfLQinCj53nYZ-CRleI,4702
16
+ luminarycloud/simulation_template.py,sha256=7cY_hoNQE1-3V0QPA8Dwdh-_PtIktj8gdt6X4L84Gow,21448
16
17
  luminarycloud/solution.py,sha256=xS04WDjoPenJaBxx9xm7t8A4YrNIcq_oQfl4WJ8gAic,6770
17
18
  luminarycloud/tables.py,sha256=f9QdwWc9O1FXnoSSoS7fxI_ffWG2JTiT2BqQPUIaUBI,6976
18
19
  luminarycloud/tag.py,sha256=aC1xnHFVOEk7V6tp16b0wdwuGAJoqq7u3tzuYwbkkY0,1384
@@ -96,10 +97,10 @@ luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2.
96
97
  luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2.pyi,sha256=-vtlNWPz2kbOPyD26lVOPI5YWsDc35ZWWdWHQV8H40g,3166
97
98
  luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2_grpc.py,sha256=5EC2wbMzDyXuFROZzH1ief__dT6x4N8qJwsPtSy16sA,8038
98
99
  luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2_grpc.pyi,sha256=hGkGk-DMn0Lo6QBtLALBF2HLLV6rgs6zMRmqmDzBZco,2513
99
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py,sha256=V-gSxq88NJPZYc623XrV6IIvqvbGl0hine24JOx9ELs,27909
100
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi,sha256=Nc6B169Y0OW-BS-gBT5otF_jFYfhbNCgMBQ12m7Sg4w,31478
101
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.py,sha256=ugl5Oa3d2VBlbwv1j_GxLX3AQXMBU10mEoLIX-3vE94,25338
102
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.pyi,sha256=SawwVVj5_PvSke4nOSP1QTQfDV2YdTa3vKRk9sBlIck,10798
100
+ luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py,sha256=xjJrl1qWAo6CAabukcvq8fN9Ow4pOtXqt9lOmpOEFNY,31311
101
+ luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi,sha256=lI-pLiUbIuaiWPsCVrRs1cu2Ou3RQPwo0zASAUg8g3A,36963
102
+ luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.py,sha256=09Mqc5yVuRwDEnV7oKd9zw0WZS0X7-IB0VVo5Lf3Vus,27538
103
+ luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.pyi,sha256=rzENHjHuDfNZ11S-_1YUcEfwhVJFk1qkBwHksgpqY1M,11699
103
104
  luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py,sha256=K0PmW_-cCzfQpykeHh9qqnlnItAZqnVQExHAOKPDVqc,17287
104
105
  luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi,sha256=KpX02T8qVg-GlT0_1OakQDh1-PTzhLNMaEuNsRhCbD8,13285
105
106
  luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.py,sha256=OCiFZq2MjnleiylsbKDYORBc7XqmlSnxmkg2xcqvMI0,17520
@@ -140,8 +141,8 @@ luminarycloud/_proto/cadmetadata/cadmetadata_pb2.py,sha256=bJoJXDLcAqmtHfgR6JKNZ
140
141
  luminarycloud/_proto/cadmetadata/cadmetadata_pb2.pyi,sha256=ilRDD1oOkFffy4bpgPblZHU2j_2PR_gqdL-_5tRBiU0,4463
141
142
  luminarycloud/_proto/client/entity_pb2.py,sha256=LmCbzEBTtsBnfgofVEsYFvVCvw-tDzU9o3eOn0-JqmY,1442
142
143
  luminarycloud/_proto/client/entity_pb2.pyi,sha256=nUZ93BId89hhsZhyzMoFohDRRYtKUza458dOLNJVENk,1111
143
- luminarycloud/_proto/client/simulation_pb2.py,sha256=ZS09QO630CE9-THa9k-msqwiQIe4qymJ_zESzzi4AXc,432829
144
- luminarycloud/_proto/client/simulation_pb2.pyi,sha256=_7FyMFq4GIeXHhM44ufX83bXRmhQT9Hm_ioJqRJh_ko,368363
144
+ luminarycloud/_proto/client/simulation_pb2.py,sha256=6NTpHJFntZucWUIgxCBiSpQ94aDZcHqza-nDiAZc1Mw,432882
145
+ luminarycloud/_proto/client/simulation_pb2.pyi,sha256=XfLhp2jHmcMBrtj9ExZipB7c3LllOYxLQ0zywrtiUKY,368645
145
146
  luminarycloud/_proto/condition/condition_pb2.py,sha256=0WWoUz2yYAJ8Ux9J7Yqap6UdvvzLxnF_tlBceqk76Us,5144
146
147
  luminarycloud/_proto/condition/condition_pb2.pyi,sha256=eZ6hTW0F9RDDCDni4IELnCHBSyPZmcw6aKayrKGuQSU,5914
147
148
  luminarycloud/_proto/entitygroup/entitygroup_pb2.py,sha256=tkyRcUY1HzMaV0u6_rhotd60iR8lkszoLNqiDVOK4b8,3877
@@ -188,17 +189,17 @@ luminarycloud/_proto/namedvariableset/namedvariableset_pb2.py,sha256=lmCnJ1PwK2c
188
189
  luminarycloud/_proto/namedvariableset/namedvariableset_pb2.pyi,sha256=V9gIDIp6H9shiKkCqdx1tFIO5wkZjCK-dn3PeWbNpCM,1972
189
190
  luminarycloud/_proto/options/options_pb2.py,sha256=1zBoOCJfOxeCU_r25iyOS4_lq8ORxdw-vasfBygDa50,5108
190
191
  luminarycloud/_proto/options/options_pb2.pyi,sha256=Tp5jjuGgBqNZsavq-2PvnNjlanktEjnbmYm_rEJE5Qw,4828
191
- luminarycloud/_proto/output/output_pb2.py,sha256=ywx4TE229q8BvfMcYLiffEcwpOCPsE4inOo_7EXPGeo,13959
192
- luminarycloud/_proto/output/output_pb2.pyi,sha256=ZjDKDfSPjquivHdwRKlekYl0CPB2t3bm9NNkeCOO0So,24790
192
+ luminarycloud/_proto/output/output_pb2.py,sha256=TqLUxrTk5Pqtxhd8uZFBIOE3vdH0tsnmUANyoEOWIFY,14595
193
+ luminarycloud/_proto/output/output_pb2.pyi,sha256=8EAeYNp0OArQ8-25UL1DdINzkL1dOycd_alcRDniajk,26405
193
194
  luminarycloud/_proto/output/reference_values_pb2.py,sha256=lNbv02XS6Yz0Q0z6Hd0RuTvOlTruUFvlTusYTUl9bYY,6841
194
195
  luminarycloud/_proto/output/reference_values_pb2.pyi,sha256=kPSKcLWUwZoYUAUtzBHqOAZDo36G7ysILCXZFclRCJk,5311
195
196
  luminarycloud/_proto/parametricworker/parametricworker_pb2.py,sha256=vldSHCCpEREsA9pK4e3zrz1nVUCF7oasyeJXd0rlKgQ,11112
196
197
  luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi,sha256=R1j0hXIlvccrdQ5Vf45xV6my7dzcPJ94igVZrZ2BjSg,10158
197
198
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.py,sha256=sxVIAGz_rFE52RMWGcLpm2o6Qs-lCcoSuDcJSv94f0M,10008
198
199
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.pyi,sha256=T8RFKXUxrTOGMpXpjAE-b43Nw8LJjetckFC_d-aDIu4,3378
199
- luminarycloud/_proto/quantity/quantity_options_pb2.py,sha256=x7mjevQEMY-sCnUcRG-Sn0lws9M-T-11bmzbiCZsnq0,7005
200
- luminarycloud/_proto/quantity/quantity_options_pb2.pyi,sha256=vc0UZFXVRIqkFq_2l0p5BxnawJnkgzr8CDxx6RtzmIQ,12912
201
- luminarycloud/_proto/quantity/quantity_pb2.py,sha256=BGwGlOh7lrCYDaHFekjT8WOwwmsyOziUTpvf4yxPdgE,135150
200
+ luminarycloud/_proto/quantity/quantity_options_pb2.py,sha256=TypSq4HRGXvh2UoDhXLpWnDsI6FMaL5vk2Z9tzTtYZw,7063
201
+ luminarycloud/_proto/quantity/quantity_options_pb2.pyi,sha256=oBJBtX4_N7omjABzrEIGgzlxgytK8GEwokpkb10bNfg,13065
202
+ luminarycloud/_proto/quantity/quantity_pb2.py,sha256=rHmcTfnAHkIafFzI5_37B9oMR2fYJgIMMb-gt6ds6BU,135198
202
203
  luminarycloud/_proto/quantity/quantity_pb2.pyi,sha256=KSVWKECIBXGpwrls9gqkYMRtfTjNPhoBT5qDCao7Ujo,17760
203
204
  luminarycloud/_proto/ratelimit/ratelimit_pb2.py,sha256=AfCGUbaiTuJ2aoXvfOtzVBitrTD_m41eS8RLjVvobgI,2025
204
205
  luminarycloud/_proto/ratelimit/ratelimit_pb2.pyi,sha256=hvaZ__zpz3cabrs4KGyKGIz4yHbkahoy39fTXvD_msA,1515
@@ -208,7 +209,7 @@ luminarycloud/_proto/table/table_pb2.py,sha256=zMOMa37Gw9HxSsqTp4QS2FfsmDe52ed5O
208
209
  luminarycloud/_proto/table/table_pb2.pyi,sha256=pKiMK-Gp9Z1FCEgxqzMcctr63Qjr1vuhZ5uJAVAZlrM,10666
209
210
  luminarycloud/_proto/upload/upload_pb2.py,sha256=-iTr8LBsTVP4WdzgiTSlWyC5iuVWgfQnipLROkc_qZ8,16764
210
211
  luminarycloud/_proto/upload/upload_pb2.pyi,sha256=hqdRBW7f-7UKAf0D1IW15O0Rje6iBP39HM5TNNy_Cio,20961
211
- luminarycloud/enum/__init__.py,sha256=NijeZyJdSDsNco0UV5Z4AyQ8BPSwctdE1O4hy_trVs8,1256
212
+ luminarycloud/enum/__init__.py,sha256=QxsdznY8ftjckSBB1t-li13xNaRk_qshvztGSfAZNNo,1313
212
213
  luminarycloud/enum/averaging_type.py,sha256=C_KlxVZavrQRgeIW1dwkSBOuppS2k9zEkSnXnvfMr6o,679
213
214
  luminarycloud/enum/calculation_type.py,sha256=3_5nFDYLw56794BTiRlVQYK0f74hXAFEbQHZgLGfibQ,1035
214
215
  luminarycloud/enum/force_direction_type.py,sha256=2Bwmj5oRzLuMGgJ6mUUuonNE4axeno2LObZSjaMVVZA,585
@@ -216,6 +217,7 @@ luminarycloud/enum/geometry_status.py,sha256=Svc_DYY85Emb127cZ8VubddDFokAiLmlaNL
216
217
  luminarycloud/enum/gpu_type.py,sha256=vzStOt4XG-Keb1xy86hC1GADIBc8M8Buz3UQSo7RwWk,361
217
218
  luminarycloud/enum/mesh_status.py,sha256=pBpfnA0xD4NPHo0Rclal7wkxdqvtzIz6Tl8TU2Bcmik,717
218
219
  luminarycloud/enum/mesh_type.py,sha256=9Fg10uszfLJ-TsKN0Z05YcNI2JYHv5tq8uQGLjdSM_w,593
220
+ luminarycloud/enum/moment_convention_type.py,sha256=f__VsPvZlzG8omsxyKM1VP_cEg0s45QtL_-L4XFdP1I,535
219
221
  luminarycloud/enum/output_definition_includes.py,sha256=gSE1SQbrLXi8Lt-D4MEKyaU3EEYhAu0f0n5TmlfBgOo,1065
220
222
  luminarycloud/enum/output_node_includes.py,sha256=xpTObKRhy3B5RbppzlyvW6lejs1JtWgjGKyNzptoZHY,821
221
223
  luminarycloud/enum/physics_ai_lifecycle_state.py,sha256=3WuvlEq0onV9SxRi3JboKAnrMUXa_UI9vXrMu4b3ijw,1056
@@ -238,7 +240,7 @@ luminarycloud/meshing/metadata/mesh_metadata.py,sha256=DZKPuyJk7S00bKJ-NALxzfoPp
238
240
  luminarycloud/meshing/sizing_strategy/__init__.py,sha256=Y1Q95QoWw3cQkp787ydwdrgHcfJuFZX22lswzLUTsvw,117
239
241
  luminarycloud/meshing/sizing_strategy/sizing_strategies.py,sha256=VPD0MyHAW63LVtshC8a-VR_Xe58tMF8qbLaDd2AYXSs,1528
240
242
  luminarycloud/outputs/__init__.py,sha256=CP2uRvwWEbJEPJlydWP9_pWdRO750ys9vfImNaG9BbU,1536
241
- luminarycloud/outputs/output_definitions.py,sha256=PwpouG8HLxx3C6i5w5Ohjz91jIoOPj6mkt4SxI03FW4,26295
243
+ luminarycloud/outputs/output_definitions.py,sha256=E85hRbAiCphGq-YTUjFYYz64vjg7z0X2kFq_oe0MPrA,26649
242
244
  luminarycloud/outputs/stopping_conditions.py,sha256=JSYEViCUaz3d1YiKEBvyCWPlY1z6CYrBLGrVYLDqjF4,8638
243
245
  luminarycloud/params/__init__.py,sha256=d9DXzEw3oV1iOMXWpmYYEg2mYndFcxYW3NxrW6x-EFs,175
244
246
  luminarycloud/params/enum/__init__.py,sha256=vNvQ8Q-2d7Vd2bbN0x-qlSeYMAxBfEEl3fUbcf1xWPQ,158
@@ -258,7 +260,7 @@ luminarycloud/params/simulation/body_frame_.py,sha256=UjAj71s39bEY35uxTUl2El_7bR
258
260
  luminarycloud/params/simulation/entity_relationships_.py,sha256=Xs_LWHBV1gOt97II-aOzl5jHOWE0uDoKjHTwG8ed23s,2689
259
261
  luminarycloud/params/simulation/general_.py,sha256=-xeYcbm0nTDlKkpL3hNtS4RnXL6-93ku3buUGYdEBq4,2863
260
262
  luminarycloud/params/simulation/material_entity_.py,sha256=lk9_j8p9tggPchPI59FPJi_S-Kmp1Vh9XK-dQU66cOc,2496
261
- luminarycloud/params/simulation/monitor_plane_.py,sha256=AbDvI_ASHd2UAR28xQCx6FjfcYImLSYAkP8dHwNuyfk,3751
263
+ luminarycloud/params/simulation/monitor_plane_.py,sha256=eiQTnVw9MAf285pVsydAdIQajn0Viart8RVr8znO9mo,3719
262
264
  luminarycloud/params/simulation/motion_data_.py,sha256=CP_krIOXrLiAFyWm5dTdkd_R9wRo9oNd-0Fr_iWjIsI,7146
263
265
  luminarycloud/params/simulation/multi_physics_coupling_options_.py,sha256=fLTTjUrUjokpPWqSkXocuFt_KYqcd36ekwlZLqg9x6E,1772
264
266
  luminarycloud/params/simulation/output_.py,sha256=35AnCnEk-44LTqb2IfH3QcTaPJL9PHSQWhocaUhV1aM,1625
@@ -493,7 +495,7 @@ luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py,sha25
493
495
  luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py,sha256=IYtJRE1urILLXfhCYcFhEExELObHgYzAeAmHDix_1Yc,1445
494
496
  luminarycloud/physics_ai/__init__.py,sha256=zSdYA5L3kqGsCfHZVvbYpXd25j8CyAjaHZQFCaQp8ps,478
495
497
  luminarycloud/physics_ai/architectures.py,sha256=1Fsnr0oc7kDWIZD6CeDFHcWetfbFF4TNj0JP2bMWH6E,2314
496
- luminarycloud/physics_ai/inference.py,sha256=ti8XCYFUWpTcxUsX7MdoNRpwtfcnDjny3yixUiKpHMY,6910
498
+ luminarycloud/physics_ai/inference.py,sha256=cehquduSxRSPOGZVSWEEbzCtb2qRPcXVLjucabcLew4,7318
497
499
  luminarycloud/physics_ai/models.py,sha256=USuz1LKbt4U3nRAYUYGQz7bRLhPIBnb3Q3xQwFam6Z0,2135
498
500
  luminarycloud/physics_ai/solution.py,sha256=IdQFEobvCAu0HJ4KwWvvpUGfRktC6thPhALpoDEIDF0,2423
499
501
  luminarycloud/pipeline_util/dictable.py,sha256=_YhxibnVCUqSpBH-IHBqvjiYlnAYMbuQv9dWK0eZn7Y,1073
@@ -502,12 +504,12 @@ luminarycloud/pipelines/__init__.py,sha256=bOu2XBDzOb5n9R5JwYFowLuLoSWXWW7I4mGm4
502
504
  luminarycloud/pipelines/api.py,sha256=Y5efDHyFYt0O8mrnbKxtR3j1zEDx7KToTBs8qqn9pgU,6717
503
505
  luminarycloud/pipelines/arguments.py,sha256=cFbVzOumOUMzO4yB0aWblMH78fZvT-RMZEO-12EBWOs,3787
504
506
  luminarycloud/pipelines/core.py,sha256=W_E8vLec2Sxi7LDGfEzkxFKrbDDnaxpD3BI3nBL4lpU,14754
505
- luminarycloud/pipelines/operators.py,sha256=Tgk6b5cDxiIYJAo-FvLm-vKddxKS5raJOeKndgQfrrI,5373
507
+ luminarycloud/pipelines/operators.py,sha256=yYJ6SZu00zo73sSv3Hn5yfagBIKF9Z9r0ujg5b9uC08,5441
506
508
  luminarycloud/pipelines/parameters.py,sha256=z7pcmETQ81V-CJfUp15L9ugJM0cZ71DFBDpRG-KrS7A,1607
507
509
  luminarycloud/thirdparty/__init__.py,sha256=7uX7_FjRCMed-OGo0xSY-BUGG3p8Q2XPdTsuJSc9Pr4,376
508
510
  luminarycloud/thirdparty/onshape.py,sha256=a_Srr7NNkCEls9YdaUaKdIMWIRTzRGmb-VA-4G4rK2A,4949
509
511
  luminarycloud/types/__init__.py,sha256=tIA724XA_cgqLfB48LThGj4NHNkl1PlR4rOl3nqX-gk,596
510
- luminarycloud/types/adfloat.py,sha256=Lo81x6UYbBy9Qbvih1aSosir70y8zyD1UpyS_4ZSWD0,6406
512
+ luminarycloud/types/adfloat.py,sha256=iSe08QPhQw-IK4j4GZcFM-OKlIHeLyKqUTLncIw2Izs,6505
511
513
  luminarycloud/types/ids.py,sha256=1N0K4xezmi2Dno8TH68tvBgZZCmqYUPbNKujudrzkNg,715
512
514
  luminarycloud/types/matrix3.py,sha256=7E2CyDZBGL_YPiPyOKve2fhr0COL-7y2yJqqW70W7d8,922
513
515
  luminarycloud/types/vector3.py,sha256=agzBz6_vBN6YzKQUlqB94BYOdOaFAbetJKqOtCthkDQ,3381
@@ -516,10 +518,10 @@ luminarycloud/vis/data_extraction.py,sha256=xi4KBV2oirx0Lzd2HCQ7TuljhLRbyI2yrqiQ
516
518
  luminarycloud/vis/display.py,sha256=VxnBtFTGjKINt2cMrJ_SbBI1y_csin9kMVqR5jsHpLo,10312
517
519
  luminarycloud/vis/filters.py,sha256=WARUNUlx_fnuepGubMwbSRPOt56RBjBUVTYeRkqGv2c,48746
518
520
  luminarycloud/vis/interactive_inference.py,sha256=5CyhmU4G2Iz6Ar8pczZVXivk_CniSQk8fmxCLb6BsCk,5943
519
- luminarycloud/vis/interactive_scene.py,sha256=ipFvWsVM9zYhAW-Tme1A4Fv-rae_s2THN6OoLBhFIRs,8698
521
+ luminarycloud/vis/interactive_scene.py,sha256=iczI7MifCVQHbSK9oeK2waZ5Nh2YwPrvSxG_xfWWux4,9548
520
522
  luminarycloud/vis/primitives.py,sha256=_EDSEAddSAFTRUU9at1Gxt-5chLO723f9c8V5atTeTg,4546
521
523
  luminarycloud/vis/vis_util.py,sha256=AWGmHcfYXGmfe5t5Jbb1Fqe2nxVdEQbBitCaWSeT89M,1821
522
- luminarycloud/vis/visualization.py,sha256=VM_ZDJo91jdOQoBLUo0HLvMISGhyKmgoxLXJXLBh7CA,55889
523
- luminarycloud-0.18.0.dist-info/METADATA,sha256=k5fOvaNt2XNQg4KTlGWFbTljxy7sf49PKOmhx8qb-RI,2574
524
- luminarycloud-0.18.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
525
- luminarycloud-0.18.0.dist-info/RECORD,,
524
+ luminarycloud/vis/visualization.py,sha256=BjWSX-xdUMCo4Yae6LSxdtm4OlMGMW3IwAPZXxxtxPY,56670
525
+ luminarycloud-0.18.1.dist-info/METADATA,sha256=C6nTUQ5ER3ox8wKSEee7RWzVm1MbrPsVVPYvt7_VR6Y,2574
526
+ luminarycloud-0.18.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
527
+ luminarycloud-0.18.1.dist-info/RECORD,,