luminarycloud 0.19.0__py3-none-any.whl → 0.20.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 (38) hide show
  1. luminarycloud/_client/client.py +2 -0
  2. luminarycloud/_helpers/_wait_for_mesh.py +6 -5
  3. luminarycloud/_helpers/_wait_for_simulation.py +3 -3
  4. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +83 -25
  5. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +214 -0
  6. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +34 -0
  7. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +12 -0
  8. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +60 -60
  9. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +5 -1
  10. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +77 -27
  11. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +85 -0
  12. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py +66 -0
  13. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi +20 -0
  14. luminarycloud/_proto/client/simulation_pb2.py +342 -331
  15. luminarycloud/_proto/client/simulation_pb2.pyi +37 -3
  16. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +29 -0
  17. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.pyi +7 -0
  18. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +70 -0
  19. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +30 -0
  20. luminarycloud/exceptions.py +7 -1
  21. luminarycloud/geometry.py +3 -1
  22. luminarycloud/mesh.py +1 -2
  23. luminarycloud/params/enum/_enum_wrappers.py +25 -0
  24. luminarycloud/params/simulation/material/material_solid_.py +15 -1
  25. luminarycloud/physics_ai/architectures.py +58 -0
  26. luminarycloud/physics_ai/training_jobs.py +37 -0
  27. luminarycloud/pipelines/api.py +8 -12
  28. luminarycloud/simulation.py +3 -2
  29. luminarycloud/simulation_template.py +2 -1
  30. luminarycloud/vis/__init__.py +15 -0
  31. luminarycloud/vis/data_extraction.py +20 -4
  32. luminarycloud/vis/interactive_report.py +124 -0
  33. luminarycloud/vis/interactive_scene.py +29 -2
  34. luminarycloud/vis/report.py +98 -0
  35. luminarycloud/vis/visualization.py +67 -5
  36. {luminarycloud-0.19.0.dist-info → luminarycloud-0.20.0.dist-info}/METADATA +1 -1
  37. {luminarycloud-0.19.0.dist-info → luminarycloud-0.20.0.dist-info}/RECORD +38 -31
  38. {luminarycloud-0.19.0.dist-info → luminarycloud-0.20.0.dist-info}/WHEEL +0 -0
@@ -22,6 +22,7 @@ from luminarycloud.params.simulation.physics.fluid.boundary_conditions import Fa
22
22
  from .._helpers._code_representation import CodeRepr
23
23
  from ..types import SimulationID
24
24
  from collections import defaultdict
25
+ import copy
25
26
 
26
27
 
27
28
  logger = logging.getLogger(__name__)
@@ -227,14 +228,14 @@ class ExtractOutput:
227
228
  extract_id: str,
228
229
  project_id: str,
229
230
  name: str,
230
- desciption: str,
231
+ description: str,
231
232
  status: ExtractStatusType,
232
233
  ) -> None:
233
234
  self._extract_id = extract_id
234
235
  self._project_id = project_id
235
236
  self.status = status
236
237
  self.name = name
237
- self.description = desciption
238
+ self.description = description
238
239
 
239
240
  def __repr__(self) -> str:
240
241
  return f"ExtractOutput (Id: {self._extract_id} status: {self.status})"
@@ -563,7 +564,7 @@ class DataExtractor:
563
564
  extract_id=res.extract.extract_id,
564
565
  project_id=self._project_id,
565
566
  name=name,
566
- desciption=description,
567
+ description=description,
567
568
  status=ExtractStatusType(res.extract.status),
568
569
  )
569
570
  return extract_output
@@ -657,6 +658,21 @@ class DataExtractor:
657
658
 
658
659
  return imports + code
659
660
 
661
+ def clone(self, solution: Solution) -> "DataExtractor":
662
+ """
663
+ Clone this extract based on a new solution. This is a deep copy
664
+ operation. Both solution must be compatible with one another, meaning
665
+ they share tags or surfaces ids for extractors such as
666
+ IntersectionCurve.
667
+ """
668
+ if not isinstance(solution, Solution):
669
+ raise TypeError("Expected a Solution object.")
670
+ cloned = DataExtractor(solution)
671
+ for extract in self._extracts:
672
+ copied_extract = copy.deepcopy(extract)
673
+ cloned.add_data_extract(copied_extract)
674
+ return cloned
675
+
660
676
 
661
677
  def list_data_extracts(solution: Solution) -> list[ExtractOutput]:
662
678
  """
@@ -700,7 +716,7 @@ def list_data_extracts(solution: Solution) -> list[ExtractOutput]:
700
716
  extract_id=extract.extract_id,
701
717
  project_id=extract.project_id,
702
718
  name=extract.name,
703
- desciption=extract.description,
719
+ description=extract.description,
704
720
  status=ExtractStatusType(extract.status),
705
721
  )
706
722
  # This need to be fixed on the backend, but manually refreshing works for now.
@@ -0,0 +1,124 @@
1
+ import io
2
+ from . import ExtractOutput
3
+ from .vis_util import _InternalToken, _get_status
4
+ from .visualization import RenderOutput
5
+ from ..enum import ExtractStatusType
6
+ from .._client import get_default_client
7
+ from .._proto.api.v0.luminarycloud.vis import vis_pb2
8
+
9
+ try:
10
+ import luminarycloud_jupyter as lcj
11
+ except ImportError:
12
+ lcj = None
13
+
14
+
15
+ # TODO Will/Matt: this could be something like what we store in the DB
16
+ # A report can contain a list of report entries that reference post proc.
17
+ # extracts + styling info for how they should be displayed
18
+ class ReportEntry:
19
+ def __init__(
20
+ self, project_id: str, extract_ids: list[str] = [], metadata: dict[str, str | float] = {}
21
+ ) -> None:
22
+ self._project_id = project_id
23
+ self._extract_ids = extract_ids
24
+ self._extracts: list[ExtractOutput | RenderOutput] = []
25
+ self._metadata = metadata
26
+
27
+ # Download all extracts for this report entry
28
+ def download_extracts(self) -> None:
29
+ self._extracts = []
30
+ for eid in self._extract_ids:
31
+ status = _get_status(self._project_id, eid)
32
+ if status != ExtractStatusType.COMPLETED:
33
+ raise Exception(f"Extract {eid} is not complete")
34
+ req = vis_pb2.DownloadExtractRequest()
35
+ req.extract_id = eid
36
+ req.project_id = self._project_id
37
+ # TODO: This is a bit awkward in that we download the extract to figure out what type
38
+ # it is, but this is just a temporary thing, later we'll have a report DB table that
39
+ # stores the extracts for a report and their types, etc.
40
+ res: vis_pb2.DownloadExtractResponse = get_default_client().DownloadExtract(req)
41
+ extract = (
42
+ ExtractOutput(_InternalToken())
43
+ if res.HasField("line_data")
44
+ else RenderOutput(_InternalToken())
45
+ )
46
+ extract._set_data(eid, self._project_id, eid, eid, status)
47
+ self._extracts.append(extract)
48
+
49
+
50
+ class InteractiveReport:
51
+ # TODO Will/Matt: this list of report entries could be how we store stuff in the DB
52
+ # for interactive reports, to reference the post proc. extracts. A report is essentially
53
+ # a bunch of extracts + metadata.
54
+ def __init__(self, entries: list[ReportEntry]) -> None:
55
+ if not lcj:
56
+ raise ImportError("InteractiveScene requires luminarycloud[jupyter] to be installed")
57
+
58
+ self.entries = entries
59
+ if len(self.entries) == 0:
60
+ raise ValueError("Invalid number of entries, must be > 0")
61
+
62
+ report_data = []
63
+ for row, re in enumerate(self.entries):
64
+ row_data = []
65
+ re.download_extracts()
66
+ for extract in re._extracts:
67
+ if isinstance(extract, RenderOutput):
68
+ image_and_label = extract.download_images()
69
+ row_data.extend([il[0] for il in image_and_label])
70
+ else:
71
+ plot_data = extract.download_data()
72
+ # Plot absolute pressure for each intersection curve we have
73
+ # TODO will: make these params of the extract/report entry
74
+ # We'll pick the first item that's not x/y/z coordinates to be the data we plot
75
+ x_axis = "x"
76
+ y_axis = [n for n in plot_data[0][0][0] if n != "x" and n != "y" and n != "z"][
77
+ 0
78
+ ]
79
+ scatter_plots = []
80
+ for p in plot_data:
81
+ data = p[0]
82
+ x_idx = data[0].index(x_axis)
83
+ y_idx = data[0].index(y_axis)
84
+
85
+ scatter_data = lcj.ScatterPlotData()
86
+ scatter_data.name = f"plot-{row}"
87
+ for r in data[1:]:
88
+ scatter_data.x.append(r[x_idx])
89
+ scatter_data.y.append(r[y_idx])
90
+ scatter_plots.append(scatter_data)
91
+ row_data.append(scatter_plots)
92
+
93
+ report_data.append(row_data)
94
+
95
+ # TODO Validate the grid configuration is valid, all report entries should have the
96
+ # same # of extract IDs and metadata keys
97
+ # maybe not needed, b/c this is something we'd control internally later?
98
+ nrows = len(report_data)
99
+ ncols = len(report_data[0]) if len(report_data) > 0 else 0
100
+
101
+ for i, r in enumerate(report_data):
102
+ if len(r) != ncols:
103
+ raise ValueError(
104
+ f"Invalid report configuration: row {i} does not have {ncols} columns"
105
+ )
106
+
107
+ self.widget = lcj.EnsembleWidget([re._metadata for re in self.entries], nrows, ncols)
108
+ for row, row_data in enumerate(report_data):
109
+ for col, col_data in enumerate(row_data):
110
+ if isinstance(col_data, list) and isinstance(col_data[0], lcj.ScatterPlotData):
111
+ x_axis = "x"
112
+ y_axis = "Absolute Pressure (Pa)"
113
+ self.widget.set_cell_scatter_plot(
114
+ row, col, f"{row} {y_axis} v {x_axis}", x_axis, y_axis, col_data
115
+ )
116
+ elif isinstance(col_data, io.BytesIO):
117
+ self.widget.set_cell_data(row, col, col_data.getvalue(), "jpg")
118
+
119
+ def _ipython_display_(self) -> None:
120
+ """
121
+ When the InteractiveReport is shown in Jupyter we show the underlying widget
122
+ to run the widget's frontend code
123
+ """
124
+ self.widget._ipython_display_()
@@ -18,7 +18,16 @@ try:
18
18
  import luminarycloud_jupyter as lcj
19
19
 
20
20
  if TYPE_CHECKING:
21
- from luminarycloud_jupyter import InteractiveLCVisWidget, LCVisPlaneWidget
21
+ from luminarycloud_jupyter import (
22
+ InteractiveLCVisWidget,
23
+ LCVisPlaneWidget,
24
+ LCVisLineWidget,
25
+ LCVisBoxWidget,
26
+ LCVisCylinderWidget,
27
+ LCVisHalfSphereWidget,
28
+ LCVisSphereWidget,
29
+ LCVisFinitePlaneWidget,
30
+ )
22
31
  except ImportError:
23
32
  lcj = None
24
33
 
@@ -134,7 +143,7 @@ class InteractiveScene:
134
143
  def set_surface_visibility(self, surface_id: str, visible: bool) -> None:
135
144
  self.widget.set_surface_visibility(surface_id, visible)
136
145
 
137
- def set_surface_color(self, surface_id: str, color: list[float]) -> None:
146
+ def set_surface_color(self, surface_id: str, color: "list[float]") -> None:
138
147
  self.widget.set_surface_color(surface_id, color)
139
148
 
140
149
  def set_display_attributes(self, object_id: str, attrs: DisplayAttributes) -> None:
@@ -199,6 +208,24 @@ class InteractiveScene:
199
208
  def add_plane_widget(self) -> "LCVisPlaneWidget":
200
209
  return self.widget.add_plane_widget()
201
210
 
211
+ def add_line_widget(self) -> "LCVisLineWidget":
212
+ return self.widget.add_line_widget()
213
+
214
+ def add_box_widget(self) -> "LCVisBoxWidget":
215
+ return self.widget.add_box_widget()
216
+
217
+ def add_cylinder_widget(self) -> "LCVisCylinderWidget":
218
+ return self.widget.add_cylinder_widget()
219
+
220
+ def add_half_sphere_widget(self) -> "LCVisHalfSphereWidget":
221
+ return self.widget.add_half_sphere_widget()
222
+
223
+ def add_finite_plane_widget(self) -> "LCVisFinitePlaneWidget":
224
+ return self.widget.add_finite_plane_widget()
225
+
226
+ def add_sphere_widget(self) -> "LCVisSphereWidget":
227
+ return self.widget.add_sphere_widget()
228
+
202
229
  def delete_widget(self, widget: "InteractiveLCVisWidget") -> None:
203
230
  self.widget.delete_widget(widget)
204
231
 
@@ -0,0 +1,98 @@
1
+ from .visualization import Scene, RenderOutput
2
+ from .data_extraction import DataExtractor, ExtractOutput
3
+ from ..enum import RenderStatusType, ExtractStatusType
4
+ from ..solution import Solution
5
+ from time import sleep
6
+
7
+
8
+ # Notes(matt): we need a good way to pass "legend" information to the report.
9
+ # The legend is list of scalar values that are associated with each solution in
10
+ # the report. Examples include outputs like lift or drag, scalar ranges in the
11
+ # solutions, or any user provided data. We could add a helper class to auto-produce
12
+ # the legend data for common use cases or the user could provide their own. The data
13
+ # would look like a csv file or a dictionary keyed on the solution/sim id, where each
14
+ # entry is a list of scalar values. We would also need a header to describe what the values
15
+ # are.
16
+ class Report:
17
+ def __init__(self, solutions: list[Solution]):
18
+ self._scenes: list[Scene] = []
19
+ self._data_extractors: list[DataExtractor] = []
20
+ self._solution: list[Solution] = solutions
21
+ # When we fire off requests we use these objects to track the progress.
22
+ self._extract_outputs: list[ExtractOutput] = []
23
+ self._render_outputs: list[RenderOutput] = []
24
+ for solution in solutions:
25
+ if not isinstance(solution, Solution):
26
+ raise TypeError("Expected a list of Solution objects.")
27
+
28
+ def add_scene(self, scene: Scene):
29
+ if not isinstance(scene, Scene):
30
+ raise TypeError("Expected a Scene object.")
31
+ self._scenes.append(scene)
32
+
33
+ def add_data_extractor(self, data_extractor: DataExtractor):
34
+ if not isinstance(data_extractor, DataExtractor):
35
+ raise TypeError("Expected a DataExtractor object.")
36
+ self._data_extractors.append(data_extractor)
37
+
38
+ def _check_status(self) -> bool:
39
+ """Check the status of all render outputs and extract outputs."""
40
+ still_pending = False
41
+ print("\n" + "=" * 60)
42
+ print("STATUS CHECK".center(60))
43
+ print("=" * 60)
44
+
45
+ if not self._render_outputs and not self._extract_outputs:
46
+ raise RuntimeError("No render outputs or extract outputs to check status.")
47
+
48
+ # Check render outputs
49
+ if self._render_outputs:
50
+ print(f"{'Type':<8} | {'ID':<20} | {'Status':<15}")
51
+ print("-" * 60)
52
+
53
+ for output in self._render_outputs:
54
+ if (
55
+ output.status != RenderStatusType.COMPLETED
56
+ and output.status != RenderStatusType.FAILED
57
+ ):
58
+ output.refresh()
59
+ still_pending = True
60
+ print(f"{'Render':<8} | {str(output._extract_id):<20} | {output.status.name:<15}")
61
+
62
+ # Check extract outputs
63
+ for output in self._extract_outputs:
64
+ if (
65
+ output.status != ExtractStatusType.COMPLETED
66
+ and output.status != ExtractStatusType.FAILED
67
+ ):
68
+ output.refresh()
69
+ still_pending = True
70
+ print(f"{'Extract':<8} | {str(output._extract_id):<20} | {output.status.name:<15}")
71
+
72
+ print("=" * 60)
73
+ return still_pending
74
+
75
+ def create_report_data(self):
76
+ for solution in self._solution:
77
+ for scene in self._scenes:
78
+ sol_scene = scene.clone(solution)
79
+ self._render_outputs.append(
80
+ sol_scene.render_images(
81
+ name="Report Scene", description="Generated Report Scene"
82
+ )
83
+ )
84
+ for extractor in self._data_extractors:
85
+ sol_extractor = extractor.clone(solution)
86
+ self._extract_outputs.append(
87
+ sol_extractor.create_extracts(
88
+ name="Report Extract", description="Generated Report Extract"
89
+ )
90
+ )
91
+
92
+ def wait_for_completion(self):
93
+ """Wait for all render and extract outputs to complete."""
94
+ if not self._render_outputs and not self._extract_outputs:
95
+ raise RuntimeError("No render outputs or extract outputs to wait for.")
96
+ while self._check_status():
97
+ sleep(5)
98
+ print("All render and extract outputs have completed.")
@@ -162,7 +162,7 @@ class LookAtCamera(CodeRepr):
162
162
  self.projection = CameraProjection(static_ani.camera.projection)
163
163
 
164
164
  def __repr__(self) -> str:
165
- return self._to_code_helper(obj_name="camera")
165
+ return self._to_code_helper(obj_name="camera", hide_defaults=False)
166
166
 
167
167
 
168
168
  class RenderOutput:
@@ -206,13 +206,18 @@ class RenderOutput:
206
206
  self._deleted = False
207
207
 
208
208
  def _set_data(
209
- self, extract_id: str, project_id: str, name: str, desciption: str, status: RenderStatusType
209
+ self,
210
+ extract_id: str,
211
+ project_id: str,
212
+ name: str,
213
+ description: str,
214
+ status: RenderStatusType,
210
215
  ) -> None:
211
216
  self._extract_id = extract_id
212
217
  self._project_id = project_id
213
218
  self.status = status
214
219
  self.name = name
215
- self.description = desciption
220
+ self.description = description
216
221
 
217
222
  def __repr__(self) -> str:
218
223
  return f"RenderOutput(Id: {self._extract_id} status: {self.status})"
@@ -806,7 +811,7 @@ class Scene(CodeRepr):
806
811
  extract_id=res.extract.extract_id,
807
812
  project_id=self._project_id,
808
813
  name=name,
809
- desciption=description,
814
+ description=description,
810
815
  status=RenderStatusType(res.extract.status),
811
816
  )
812
817
  return render_output
@@ -1145,7 +1150,7 @@ def list_renders(entity: Geometry | Mesh | Solution) -> List[RenderOutput]:
1145
1150
  extract_id=extract.extract_id,
1146
1151
  project_id=extract.project_id,
1147
1152
  name=extract.name,
1148
- desciption=extract.description,
1153
+ description=extract.description,
1149
1154
  status=RenderStatusType(extract.status),
1150
1155
  )
1151
1156
  # This need to be fixed on the backend, but manually refreshing works for now.
@@ -1315,3 +1320,60 @@ def _reconstruct(extract_id: str, project_id: str) -> Scene:
1315
1320
  req.project_id = project_id
1316
1321
  res: vis_pb2.GetExtractSpecResponse = get_default_client().GetExtractSpec(req)
1317
1322
  return _spec_to_scene(res.spec)
1323
+
1324
+
1325
+ @dc.dataclass
1326
+ class CameraEntry:
1327
+ camera_id: int
1328
+ name: str
1329
+
1330
+
1331
+ def list_cameras(project_id: str = "") -> List[CameraEntry]:
1332
+ """
1333
+ List all cameras in the specified project. If no project id is provided,
1334
+ global cameras are returned.
1335
+ """
1336
+ req = vis_pb2.ListCamerasRequest()
1337
+ req.project_id = project_id
1338
+ res: vis_pb2.ListCamerasReply = get_default_client().ListCameras(req)
1339
+ return [CameraEntry(camera_id=c.camera_id, name=c.name) for c in res.camera]
1340
+
1341
+
1342
+ def get_camera(entry: CameraEntry, width: int, height: int) -> LookAtCamera:
1343
+ """
1344
+ Instantiate a LookAt camera by its entry returned from list_cameras. The
1345
+ width and the height impact orthographic cameras. Most screens have a 16:9
1346
+ aspect ratio, so using the width = 1920 and height = 1080 is a good default
1347
+ to match cameras created in the UI, otherwise parts of the scene may be
1348
+ clipped.
1349
+
1350
+ .. warning:: This feature is experimental and may change or be removed in the future.
1351
+
1352
+ Parameters
1353
+ ----------
1354
+ entry: CameraEntry, required
1355
+ A camera entry returned from list_cameras.
1356
+ width: int, required
1357
+ The target width of the camera.
1358
+ height: int, required
1359
+ The target height of the camera.
1360
+ """
1361
+ req = vis_pb2.GetCameraRequest()
1362
+ req.camera_id = entry.camera_id
1363
+ req.resolution.width = width
1364
+ req.resolution.height = height
1365
+ res: vis_pb2.GetCameraReply = get_default_client().GetCamera(req)
1366
+ cam = LookAtCamera()
1367
+ cam.width = width
1368
+ cam.height = height
1369
+ cam.label = entry.name
1370
+ cam.up = Vector3()
1371
+ cam.up._from_proto(res.camera.look_at.up)
1372
+ cam.look_at = Vector3()
1373
+ cam.look_at._from_proto(res.camera.look_at.look_at)
1374
+ cam.position = Vector3()
1375
+ cam.position._from_proto(res.camera.look_at.position)
1376
+ cam.projection = CameraProjection(res.camera.projection)
1377
+ cam.pan_x = res.camera.look_at.pan.x
1378
+ cam.pan_y = res.camera.look_at.pan.y
1379
+ return cam
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luminarycloud
3
- Version: 0.19.0
3
+ Version: 0.20.0
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/
@@ -2,18 +2,18 @@ luminarycloud/__init__.py,sha256=mpNimnkWfQlpfQyo8Ugjx-gboUNug9hbsh-4m2A0JWY,331
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
5
- luminarycloud/exceptions.py,sha256=SNEoC5Lu4li8x08doqPPiJ5V7pFskUyoASdlENj7Twk,1768
5
+ luminarycloud/exceptions.py,sha256=VVGtKREb8XcWea6TySVYh7dhGQpowafdhiTst1uN4EQ,1900
6
6
  luminarycloud/feature_modification.py,sha256=Pe5bw8SlaNdd36az_OTFXKWEQI-0_wUIy5sRIqp9itM,30684
7
- luminarycloud/geometry.py,sha256=r8mQOUOeu1oKoRe4BWqN1ZH_HQIwjv5cgqTORyVDUE0,20728
7
+ luminarycloud/geometry.py,sha256=tRPrdehQxFmST73BbpAnHHsvbK7kqe1gRYCgN3LpZTM,20790
8
8
  luminarycloud/geometry_version.py,sha256=lP4oHotRpyt4fQkoYkwtfbNfpB0xSHFGEynFLCy7hiA,6004
9
- luminarycloud/mesh.py,sha256=ohEQty2M0oqUF5jBOHj59e4GXVo1GOi-bZuF31BpbtM,4819
9
+ luminarycloud/mesh.py,sha256=6O4fTg8gWYLTrBsf0-MH6c7HL72iZbPUfGGk_II9PR4,4782
10
10
  luminarycloud/named_variable_set.py,sha256=RsfGJDoZFajbJ2a2fWc-ZHRsZts5U7ZY6rIXSjXL7bY,4568
11
11
  luminarycloud/project.py,sha256=fizJxgQ9PhHmPUfQ4vR0DVv90Rw_tlpAXlulVeg0708,32194
12
12
  luminarycloud/reference_values.py,sha256=vWIX1VXMctspeQIjNtjmZdex55K0jHf1xz5gsGeMCfo,4357
13
- luminarycloud/simulation.py,sha256=QKUgfRTCdkblP6XPtbcncHc6JSpxbinZ2OzEPNcq5q0,13020
13
+ luminarycloud/simulation.py,sha256=lvcKGRQ8-8cBtETaY7kkDN1w_AHoFzgLahxFjpatNwI,13065
14
14
  luminarycloud/simulation_param.py,sha256=fKad0d0rCUL4EbdLvQS7WTK6_US3vQ2pbG8uaSrhxx4,16732
15
15
  luminarycloud/simulation_queue.py,sha256=dbrxDxGROlxpCVaUmHItZ8uftfLQinCj53nYZ-CRleI,4702
16
- luminarycloud/simulation_template.py,sha256=7cY_hoNQE1-3V0QPA8Dwdh-_PtIktj8gdt6X4L84Gow,21448
16
+ luminarycloud/simulation_template.py,sha256=ZsvgsUjW2nAJQ_JnZCsVdaRoogjpBIRNwhdXRxTmcSI,21526
17
17
  luminarycloud/solution.py,sha256=xS04WDjoPenJaBxx9xm7t8A4YrNIcq_oQfl4WJ8gAic,6770
18
18
  luminarycloud/tables.py,sha256=i6KMjthjRbks4Vxv6Eu6VLulRC9U8fhkzwknR2Ax3Nc,6922
19
19
  luminarycloud/tag.py,sha256=aC1xnHFVOEk7V6tp16b0wdwuGAJoqq7u3tzuYwbkkY0,1384
@@ -27,7 +27,7 @@ luminarycloud/_auth/exceptions.py,sha256=XsjA6xxFGnufP5V7BOxnq_syuSRrLa-HWntncW5
27
27
  luminarycloud/_auth/util.py,sha256=EmDl9BBV0SuKVyyq7PyYXPyOEkWBJRIqPN46l2srjEg,1040
28
28
  luminarycloud/_client/__init__.py,sha256=q-q1lnJE9EirX5p_O15FnanUoSYdEOD5zP1XrUedKMU,681
29
29
  luminarycloud/_client/authentication_plugin.py,sha256=eJXs0b8pYih12fBU1vgJ8gGpAdtjfbqCuxSprjR-p9E,1351
30
- luminarycloud/_client/client.py,sha256=IDa_BS9LRN7tVSKch6B3AgrFkwakojw_etQJsYCHMGU,11176
30
+ luminarycloud/_client/client.py,sha256=KiugyhRBcWIQY61bS22HjTz0-beRdBms3NGkgC36388,11307
31
31
  luminarycloud/_client/config.py,sha256=o_HJsmPOLaeorYToR9_wzNhJYRoFnmeqcxCRAoUAqZk,236
32
32
  luminarycloud/_client/http_client.py,sha256=yWx6BJ5C40PRI6Y5qo7b4abUecME_QGcWu1IQVwMHDU,6423
33
33
  luminarycloud/_client/logging_interceptor.py,sha256=I7xJzTQoV5O_Ioi7OjWXI2mQWxdpbagu7QnzbJSFcHg,2593
@@ -44,8 +44,8 @@ luminarycloud/_helpers/_simulation_params_from_json.py,sha256=Iq7S8XUqh3Y-6cZ2rv
44
44
  luminarycloud/_helpers/_timestamp_to_datetime.py,sha256=Vh2-e7MRrxG8z7CMA-DRIIAhqGSUGYuIhW9csoh9pBw,299
45
45
  luminarycloud/_helpers/_upload_mesh.py,sha256=eiWBSheNNdejfH3gkE7UohPXLRT3COOPPTN-yn2OU24,11955
46
46
  luminarycloud/_helpers/_upload_table.py,sha256=B7Svu97Dr6UYt8pubD99kGvXkR0oKUtKSi3Ppj_qUMI,2211
47
- luminarycloud/_helpers/_wait_for_mesh.py,sha256=n5bwWpa398qcNh4CPcUfQEPPjk6dnxAGNY1VgaUGvRs,1779
48
- luminarycloud/_helpers/_wait_for_simulation.py,sha256=Hj_p1C4xl9ixUVhahUOLYaDn4Ox4lnBZNCDG_Q6y_t8,3500
47
+ luminarycloud/_helpers/_wait_for_mesh.py,sha256=p7Zp6ulifpZDAfRcN0kOPVjOU2e9oWutSrPIbMcsreg,1871
48
+ luminarycloud/_helpers/_wait_for_simulation.py,sha256=DusHJLmLi7NvLu3K7cfrb2ZSbPBrySK8t7TLS22oTms,3520
49
49
  luminarycloud/_helpers/cond.py,sha256=BZ0MDBxy2lvcVQyaj0x_qLqJFlsu-X_n9r_Gw1Ppk-c,16752
50
50
  luminarycloud/_helpers/defaults.py,sha256=jj6J3F2cjqO1CR5_F4ICxr44hTLC1GypD9Q4YQJRw68,1550
51
51
  luminarycloud/_helpers/download.py,sha256=R1wWWgzZsaC7tnPHeu8pZvim0bS-o_DHc_yKUzXNC6g,9495
@@ -82,10 +82,10 @@ luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2.py,sha256=
82
82
  luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2.pyi,sha256=H2K7EGKLHOe5xNunVkFuY4sHN3LTVjZHLlnTwYqFk-A,7654
83
83
  luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2_grpc.py,sha256=lLpk0zvSn4XsvE5JEJVF7V2x2ZAX6rCHTgIzjVN9xU0,11209
84
84
  luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2_grpc.pyi,sha256=N7KiftsEfElduhrGpevNqC7Ri3FGpYsiZ1LQJ4RwDrw,3738
85
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py,sha256=9c3pC4Lj7rr8IFS2nHb4a2KwuZuM8rsiI52LK8Qg93Y,11983
86
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi,sha256=CmQcr9PXicj2YKYUfcUjxZlK_WkjBCaZvEFnP87_vEM,12616
87
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py,sha256=hO3M3nhh84q91TewVWM-PQVGsB7jzwjRpyLUq5WsurU,7417
88
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi,sha256=ujiijRqdZHjXEjNHjJsZloDyMuQUSjO886PCVbhT5ik,2687
85
+ luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py,sha256=X0g0D6gWEntJNlC2n_1QxDpmvUe0zCHHagaEfMQqQo8,17953
86
+ luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi,sha256=2-Fw6lmbiU072BpR-gDnORHk9YJPGYGbjWoegBNpLO0,23657
87
+ luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py,sha256=WMjycj2H85rdfZ9_JOe1BZhg3k3x9UamYJm5N2LO_5U,9498
88
+ luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi,sha256=xynVc9ide5kxdAwOs9XYL8cQU3BrZaiHLMTKTk5uNPQ,3400
89
89
  luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2.py,sha256=INzCXfjQQyzuBrbnqs6Uvle_kpEnotrEhhgHIx8ZeV0,17209
90
90
  luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2.pyi,sha256=HaHlJdQlPHccQOpaS7t6JW7M9I4RGSZXB12zImp_qGk,14982
91
91
  luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2_grpc.py,sha256=pmYkibMi49G82r9Dh4f83IiNaAWFOqKp6-TbBRA3Llo,20258
@@ -94,8 +94,8 @@ luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2.
94
94
  luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2.pyi,sha256=-vtlNWPz2kbOPyD26lVOPI5YWsDc35ZWWdWHQV8H40g,3166
95
95
  luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2_grpc.py,sha256=5EC2wbMzDyXuFROZzH1ief__dT6x4N8qJwsPtSy16sA,8038
96
96
  luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2_grpc.pyi,sha256=hGkGk-DMn0Lo6QBtLALBF2HLLV6rgs6zMRmqmDzBZco,2513
97
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py,sha256=xjJrl1qWAo6CAabukcvq8fN9Ow4pOtXqt9lOmpOEFNY,31311
98
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi,sha256=lI-pLiUbIuaiWPsCVrRs1cu2Ou3RQPwo0zASAUg8g3A,36963
97
+ luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py,sha256=B-RmO5ezNyk8rTkj4V1lfOoHIl9zhE34gb1ig9UOMYE,31350
98
+ luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi,sha256=H8t7i8Tmw2RzTeWoF4T2YCXxItKi9IXDZBSglsVFZbA,37149
99
99
  luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.py,sha256=09Mqc5yVuRwDEnV7oKd9zw0WZS0X7-IB0VVo5Lf3Vus,27538
100
100
  luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.pyi,sha256=rzENHjHuDfNZ11S-_1YUcEfwhVJFk1qkBwHksgpqY1M,11699
101
101
  luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py,sha256=K0PmW_-cCzfQpykeHh9qqnlnItAZqnVQExHAOKPDVqc,17287
@@ -118,10 +118,10 @@ luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2.py,sha256=GSBDw-gXRD
118
118
  luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
119
119
  luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2_grpc.py,sha256=eyC9tE7Rid-6OvRiSohEim8mkORz-cVa-ml4T3S8qBU,12767
120
120
  luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2_grpc.pyi,sha256=Xknd7R7907K_Sv4rtixxvcBnyz5lA_RzgbHcrwM7qLo,6431
121
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py,sha256=F9GcQmdVcM7AMv0OkhYUvRgBmD2529zcujrHYGstwqU,73350
122
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi,sha256=tNAPKhNrKQfOM-6wGqvN539yscHWs4dzXEGl01OCGh8,92462
123
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py,sha256=PULOpPrMZzNEC7IiCqjiIvddOGZVRr5K4vEK2z5mqtA,16410
124
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi,sha256=8ArvZODsOVFgSTxDnpa_t3enWP13WROfP_UDZMqq8qs,4496
121
+ luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py,sha256=kaCgXHbnc9--biNbEXYnNpsW8Vv9ERJKnlB1BalFZ_o,76714
122
+ luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi,sha256=Uz_NEPpCc-aV80Q2-tm15Eamj6CklaUuEBIt3gCKaN0,95469
123
+ luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py,sha256=aKoPboT8HQV4prwYV15B80C8o2j1TpSTGREG2aea2Uw,20130
124
+ luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi,sha256=faJ8c5BRLeHBtAhMrzayo3VQ4pI0ZcgOup8w322-ngA,5462
125
125
  luminarycloud/_proto/assistant/assistant_pb2.py,sha256=zG3T15gNuEZE5yajkWfMUjl_nSdTJ6C-Mbd90_H_Svo,21590
126
126
  luminarycloud/_proto/assistant/assistant_pb2.pyi,sha256=-IwjZXxwyMtts9T3yiCWszonhfoD8t5U5SuIQHb2SKs,26829
127
127
  luminarycloud/_proto/assistant/assistant_pb2_grpc.py,sha256=jFKPYswcJ7jQaZFb1R3meXMDxmwUZyWwaj5tIOBfQ_U,13195
@@ -138,8 +138,8 @@ luminarycloud/_proto/cadmetadata/cadmetadata_pb2.py,sha256=bJoJXDLcAqmtHfgR6JKNZ
138
138
  luminarycloud/_proto/cadmetadata/cadmetadata_pb2.pyi,sha256=ilRDD1oOkFffy4bpgPblZHU2j_2PR_gqdL-_5tRBiU0,4463
139
139
  luminarycloud/_proto/client/entity_pb2.py,sha256=LmCbzEBTtsBnfgofVEsYFvVCvw-tDzU9o3eOn0-JqmY,1442
140
140
  luminarycloud/_proto/client/entity_pb2.pyi,sha256=nUZ93BId89hhsZhyzMoFohDRRYtKUza458dOLNJVENk,1111
141
- luminarycloud/_proto/client/simulation_pb2.py,sha256=f9Oq4W-AyNVhecS3HVs_kSCJQzyskjvvcOMcv9f9CjU,434390
142
- luminarycloud/_proto/client/simulation_pb2.pyi,sha256=w7bbTcEJeNDgZtHlBRcmRM6bRmhYHmzxPq52G1CxMps,369879
141
+ luminarycloud/_proto/client/simulation_pb2.py,sha256=9LlqhXvoIsKqURxjnXAWh9ENucl6TZsWeQ2GRqdJgxk,436868
142
+ luminarycloud/_proto/client/simulation_pb2.pyi,sha256=cE211nn96MhVg9x-357scg8nsJzb4zDgAO2X1_sPynE,372215
143
143
  luminarycloud/_proto/condition/condition_pb2.py,sha256=0WWoUz2yYAJ8Ux9J7Yqap6UdvvzLxnF_tlBceqk76Us,5144
144
144
  luminarycloud/_proto/condition/condition_pb2.pyi,sha256=eZ6hTW0F9RDDCDni4IELnCHBSyPZmcw6aKayrKGuQSU,5914
145
145
  luminarycloud/_proto/entitygroup/entitygroup_pb2.py,sha256=tkyRcUY1HzMaV0u6_rhotd60iR8lkszoLNqiDVOK4b8,3877
@@ -194,6 +194,10 @@ luminarycloud/_proto/parametricworker/parametricworker_pb2.py,sha256=vldSHCCpERE
194
194
  luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi,sha256=R1j0hXIlvccrdQ5Vf45xV6my7dzcPJ94igVZrZ2BjSg,10158
195
195
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.py,sha256=sxVIAGz_rFE52RMWGcLpm2o6Qs-lCcoSuDcJSv94f0M,10008
196
196
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.pyi,sha256=T8RFKXUxrTOGMpXpjAE-b43Nw8LJjetckFC_d-aDIu4,3378
197
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py,sha256=ulfXXYAKvBK6RPLT8JXeEDtH7UxtmPnzJbx5_ty2kPU,1651
198
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.pyi,sha256=VbmaLisaneVcvS68mWV2faJnoF4vrS4wYBvDZezwPpk,221
199
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py,sha256=6VYOuVOIegaK5c3qrNEx9Etk9Gd52PdZ6RKMSSNkRZ8,3271
200
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi,sha256=Weofl41CRNCGP-fX2cmKCr9k9r6wvQjnel0sJH31U8s,1359
197
201
  luminarycloud/_proto/quantity/quantity_options_pb2.py,sha256=TypSq4HRGXvh2UoDhXLpWnDsI6FMaL5vk2Z9tzTtYZw,7063
198
202
  luminarycloud/_proto/quantity/quantity_options_pb2.pyi,sha256=oBJBtX4_N7omjABzrEIGgzlxgytK8GEwokpkb10bNfg,13065
199
203
  luminarycloud/_proto/quantity/quantity_pb2.py,sha256=rHmcTfnAHkIafFzI5_37B9oMR2fYJgIMMb-gt6ds6BU,135198
@@ -240,7 +244,7 @@ luminarycloud/outputs/output_definitions.py,sha256=E85hRbAiCphGq-YTUjFYYz64vjg7z
240
244
  luminarycloud/outputs/stopping_conditions.py,sha256=JSYEViCUaz3d1YiKEBvyCWPlY1z6CYrBLGrVYLDqjF4,8638
241
245
  luminarycloud/params/__init__.py,sha256=d9DXzEw3oV1iOMXWpmYYEg2mYndFcxYW3NxrW6x-EFs,175
242
246
  luminarycloud/params/enum/__init__.py,sha256=vNvQ8Q-2d7Vd2bbN0x-qlSeYMAxBfEEl3fUbcf1xWPQ,158
243
- luminarycloud/params/enum/_enum_wrappers.py,sha256=mAN6lndLR3E3PoieMbJ4QEwl_99395rgN0np0ggeqaU,62243
247
+ luminarycloud/params/enum/_enum_wrappers.py,sha256=jF65YFpX3VOH0kwAk9fkS7xZsrd6r2M6HP63bgMzxkA,63072
244
248
  luminarycloud/params/enum/residual_output.py,sha256=wRYCRbvDk-1hJWVFzRyz4Ndr1FagB4-h_JSE9sENszw,1520
245
249
  luminarycloud/params/geometry/__init__.py,sha256=X_XNImpQcZ3LaVsXab5jVI5R_0Ep6jyIDtCyok8GgOE,454
246
250
  luminarycloud/params/geometry/geometry.py,sha256=MVKaHnIQ-iK04Mr69LwW08NQ909r-mMpr4J93URpWmw,629
@@ -279,7 +283,7 @@ luminarycloud/params/simulation/entity_relationships/volume_material_relationshi
279
283
  luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py,sha256=yFf7BchW_OYyiXp7KcMaEv2DH1nY5fj3ZXACphGxLvM,2076
280
284
  luminarycloud/params/simulation/material/__init__.py,sha256=_wXdstxqZYBo4bopH00rl0wJJ_ltRnO3Kyzy9hGoKWs,106
281
285
  luminarycloud/params/simulation/material/material_fluid_.py,sha256=AGBCnCt5-64giB7HeklEFegd1kW7iL1a4-zV2QbQ1Lw,15311
282
- luminarycloud/params/simulation/material/material_solid_.py,sha256=_HCeR9LO7gXufACGdwPfNi_mE8I9VFHPnUnAIznp9iI,3060
286
+ luminarycloud/params/simulation/material/material_solid_.py,sha256=0DyP_b7asi4gqwS99cL4I9NlnhGrZe2cunrB2EorJAY,3833
283
287
  luminarycloud/params/simulation/material/fluid/__init__.py,sha256=_JggccSu5o-OUlthHLyDrR_mtb9O7fXv3gBAxxQ5mc8,356
284
288
  luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py,sha256=Zj-jDu7pmB98SSOo0KGmlpMLjgsR76gtjj38HbK4yoo,1018
285
289
  luminarycloud/params/simulation/material/fluid/material_model_.py,sha256=iaTNTnykmP8AWYvZyG4pXJ5f05BFpZFFUrLCULArV80,936
@@ -490,14 +494,15 @@ luminarycloud/params/simulation/time/time_step_ramp/__init__.py,sha256=fBLjMyx7n
490
494
  luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py,sha256=K91Qd0rlNS8XvUF96et38VRbw_aCN-CSE8m8Ff17DIQ,1089
491
495
  luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py,sha256=IYtJRE1urILLXfhCYcFhEExELObHgYzAeAmHDix_1Yc,1445
492
496
  luminarycloud/physics_ai/__init__.py,sha256=zSdYA5L3kqGsCfHZVvbYpXd25j8CyAjaHZQFCaQp8ps,478
493
- luminarycloud/physics_ai/architectures.py,sha256=1Fsnr0oc7kDWIZD6CeDFHcWetfbFF4TNj0JP2bMWH6E,2314
497
+ luminarycloud/physics_ai/architectures.py,sha256=hfU9F0qxfOOh3G85Bs3fABDJESHAtREK1RTuOkPZPQA,4393
494
498
  luminarycloud/physics_ai/inference.py,sha256=Q9k1GAKio5GVLM0jMqvEWTfkA872V-8BfvGP1n_A4a4,7597
495
499
  luminarycloud/physics_ai/models.py,sha256=USuz1LKbt4U3nRAYUYGQz7bRLhPIBnb3Q3xQwFam6Z0,2135
496
500
  luminarycloud/physics_ai/solution.py,sha256=IdQFEobvCAu0HJ4KwWvvpUGfRktC6thPhALpoDEIDF0,2423
501
+ luminarycloud/physics_ai/training_jobs.py,sha256=e00WETgMqAps6N_PM8C3LmIcrUx3a-6UcwtfPbv1trs,1242
497
502
  luminarycloud/pipeline_util/dictable.py,sha256=_YhxibnVCUqSpBH-IHBqvjiYlnAYMbuQv9dWK0eZn7Y,1073
498
503
  luminarycloud/pipeline_util/yaml.py,sha256=RG3Gqv4ORaYX4lTyRVBsGVGE138zsxJIYzoWr4Aczrs,1883
499
504
  luminarycloud/pipelines/__init__.py,sha256=bOu2XBDzOb5n9R5JwYFowLuLoSWXWW7I4mGm43cXdSs,1348
500
- luminarycloud/pipelines/api.py,sha256=GWmwRAvbcbdFtq4APxgcH1IUKBZTFgZQAVi7cmqE9zo,4559
505
+ luminarycloud/pipelines/api.py,sha256=ZA36tmDbOD--WqZP_aqKMew026SASfwn-RmqhtqUbX8,4454
501
506
  luminarycloud/pipelines/arguments.py,sha256=cFbVzOumOUMzO4yB0aWblMH78fZvT-RMZEO-12EBWOs,3787
502
507
  luminarycloud/pipelines/core.py,sha256=W_E8vLec2Sxi7LDGfEzkxFKrbDDnaxpD3BI3nBL4lpU,14754
503
508
  luminarycloud/pipelines/operators.py,sha256=yYJ6SZu00zo73sSv3Hn5yfagBIKF9Z9r0ujg5b9uC08,5441
@@ -509,15 +514,17 @@ luminarycloud/types/adfloat.py,sha256=iSe08QPhQw-IK4j4GZcFM-OKlIHeLyKqUTLncIw2Iz
509
514
  luminarycloud/types/ids.py,sha256=1N0K4xezmi2Dno8TH68tvBgZZCmqYUPbNKujudrzkNg,715
510
515
  luminarycloud/types/matrix3.py,sha256=7E2CyDZBGL_YPiPyOKve2fhr0COL-7y2yJqqW70W7d8,922
511
516
  luminarycloud/types/vector3.py,sha256=agzBz6_vBN6YzKQUlqB94BYOdOaFAbetJKqOtCthkDQ,3381
512
- luminarycloud/vis/__init__.py,sha256=Ne9N8qvWufzMjXMy7JBRF6Oa_wByVEciyZK5o8xWwGk,1384
513
- luminarycloud/vis/data_extraction.py,sha256=xi4KBV2oirx0Lzd2HCQ7TuljhLRbyI2yrqiQyW3mWsw,28946
517
+ luminarycloud/vis/__init__.py,sha256=U-wbXLZn0pBmQaqLAMzyn0e-KJnWIe4UlvY25Hc9xys,1730
518
+ luminarycloud/vis/data_extraction.py,sha256=HSc4gSjXoH4jP_Fdot_qNCIuWA8D25hD_GkORy0xFfw,29599
514
519
  luminarycloud/vis/display.py,sha256=VxnBtFTGjKINt2cMrJ_SbBI1y_csin9kMVqR5jsHpLo,10312
515
520
  luminarycloud/vis/filters.py,sha256=WARUNUlx_fnuepGubMwbSRPOt56RBjBUVTYeRkqGv2c,48746
516
521
  luminarycloud/vis/interactive_inference.py,sha256=5CyhmU4G2Iz6Ar8pczZVXivk_CniSQk8fmxCLb6BsCk,5943
517
- luminarycloud/vis/interactive_scene.py,sha256=iczI7MifCVQHbSK9oeK2waZ5Nh2YwPrvSxG_xfWWux4,9548
522
+ luminarycloud/vis/interactive_report.py,sha256=HmQgkxVx_4iiPrPFc3xMVbNmvOQjzf6pBY2To3TzirQ,5562
523
+ luminarycloud/vis/interactive_scene.py,sha256=RVQEvXcjKo-9kLlFAO-oASoYYjLEqDQF7WPyTPocEzo,10425
518
524
  luminarycloud/vis/primitives.py,sha256=_EDSEAddSAFTRUU9at1Gxt-5chLO723f9c8V5atTeTg,4546
525
+ luminarycloud/vis/report.py,sha256=6CWDrwxs8oGKWh1RxzGfKLoxiv8AYHMOVx1bVc4W-zs,4231
519
526
  luminarycloud/vis/vis_util.py,sha256=AWGmHcfYXGmfe5t5Jbb1Fqe2nxVdEQbBitCaWSeT89M,1821
520
- luminarycloud/vis/visualization.py,sha256=vbjQGCZrCdM63_tseDNttMopZMSpN6FNO1icMgkl7Tc,56629
521
- luminarycloud-0.19.0.dist-info/METADATA,sha256=j_xhIsmKjuou7zktwpkZcBfiWazhNyqE1zpGc20XlaY,2574
522
- luminarycloud-0.19.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
523
- luminarycloud-0.19.0.dist-info/RECORD,,
527
+ luminarycloud/vis/visualization.py,sha256=88egJE4-9hucD9VGZ79q38WSBIaSnwKg9Z8iHNP2nSQ,58643
528
+ luminarycloud-0.20.0.dist-info/METADATA,sha256=W86HkKKXtkJ_tm620JHAc3ytT6FLe-FCH61ebrBfeJQ,2574
529
+ luminarycloud-0.20.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
530
+ luminarycloud-0.20.0.dist-info/RECORD,,