luminarycloud 0.22.0__py3-none-any.whl → 0.22.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 (45) hide show
  1. luminarycloud/_client/authentication_plugin.py +49 -0
  2. luminarycloud/_client/client.py +33 -8
  3. luminarycloud/_client/http_client.py +1 -1
  4. luminarycloud/_client/retry_interceptor.py +64 -2
  5. luminarycloud/_helpers/download.py +11 -0
  6. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +132 -132
  7. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +36 -8
  8. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +53 -23
  9. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +54 -1
  10. luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2.py +195 -0
  11. luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2.pyi +361 -0
  12. luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2_grpc.py +172 -0
  13. luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2_grpc.pyi +66 -0
  14. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py +88 -65
  15. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi +42 -0
  16. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py +34 -0
  17. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi +12 -0
  18. luminarycloud/_proto/base/base_pb2.py +7 -6
  19. luminarycloud/_proto/base/base_pb2.pyi +4 -0
  20. luminarycloud/_proto/client/simulation_pb2.py +3 -3
  21. luminarycloud/_proto/physicsaiinferenceservice/physicsaiinferenceservice_pb2.py +30 -0
  22. luminarycloud/_proto/physicsaiinferenceservice/physicsaiinferenceservice_pb2.pyi +7 -0
  23. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +2 -2
  24. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +34 -0
  25. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +12 -0
  26. luminarycloud/enum/vis_enums.py +6 -0
  27. luminarycloud/geometry.py +4 -0
  28. luminarycloud/geometry_version.py +4 -0
  29. luminarycloud/mesh.py +4 -0
  30. luminarycloud/meshing/mesh_generation_params.py +5 -6
  31. luminarycloud/meshing/sizing_strategy/sizing_strategies.py +1 -2
  32. luminarycloud/physics_ai/solution.py +4 -0
  33. luminarycloud/pipelines/api.py +99 -8
  34. luminarycloud/pipelines/core.py +1 -1
  35. luminarycloud/pipelines/stages.py +22 -9
  36. luminarycloud/project.py +5 -6
  37. luminarycloud/types/vector3.py +1 -2
  38. luminarycloud/vis/data_extraction.py +7 -7
  39. luminarycloud/vis/interactive_report.py +163 -7
  40. luminarycloud/vis/report.py +113 -1
  41. luminarycloud/volume_selection.py +10 -2
  42. {luminarycloud-0.22.0.dist-info → luminarycloud-0.22.1.dist-info}/METADATA +1 -1
  43. {luminarycloud-0.22.0.dist-info → luminarycloud-0.22.1.dist-info}/RECORD +44 -39
  44. {luminarycloud-0.22.0.dist-info → luminarycloud-0.22.1.dist-info}/WHEEL +1 -1
  45. luminarycloud/pipeline_util/dictable.py +0 -27
@@ -1,6 +1,7 @@
1
1
  import io
2
+ import numpy as np
2
3
  from .visualization import RenderOutput
3
- from .report import ReportEntry
4
+ from .report import ReportEntry, ReportContext
4
5
 
5
6
  try:
6
7
  import luminarycloud_jupyter as lcj
@@ -8,6 +9,82 @@ except ImportError:
8
9
  lcj = None
9
10
 
10
11
 
12
+ def _detect_outliers(
13
+ metadata: list[dict[str, str | float]],
14
+ output_fields: list[str],
15
+ percentile_threshold: float = 95.0,
16
+ ) -> list[int] | None:
17
+ """
18
+ Detect outliers using Mahalanobis distance.
19
+
20
+ Parameters
21
+ ----------
22
+ metadata : list[dict[str, str | float]]
23
+ List of metadata dictionaries for each row
24
+ output_fields : list[str]
25
+ List of output field names to use for outlier detection
26
+ percentile_threshold : float, optional
27
+ Percentile threshold for outlier detection (default: 95.0)
28
+
29
+ Returns
30
+ -------
31
+ list[int] | None
32
+ List of row indices that are outliers, or None if detection fails
33
+ """
34
+ # Need at least 2 fields for meaningful multivariate analysis
35
+ if len(output_fields) < 2:
36
+ return None
37
+
38
+ # Extract data for the specified output fields
39
+ try:
40
+ data = []
41
+ for row_metadata in metadata:
42
+ row_data = []
43
+ for field in output_fields:
44
+ value = row_metadata.get(field)
45
+ if value is None or isinstance(value, str):
46
+ # Skip if field is missing or non-numeric
47
+ return None
48
+ row_data.append(float(value))
49
+ data.append(row_data)
50
+
51
+ data_array = np.array(data)
52
+
53
+ # Need at least as many samples as dimensions for covariance matrix
54
+ if len(data_array) < len(output_fields):
55
+ return None
56
+
57
+ # Calculate mean and covariance matrix
58
+ mean_vec = np.mean(data_array, axis=0)
59
+ cov_matrix = np.cov(data_array.T)
60
+
61
+ # Check if covariance matrix is singular
62
+ if np.linalg.det(cov_matrix) == 0:
63
+ return None
64
+
65
+ # Invert covariance matrix
66
+ inv_cov_matrix = np.linalg.inv(cov_matrix)
67
+
68
+ # Calculate Mahalanobis distance for each point
69
+ distances = []
70
+ for point in data_array:
71
+ diff = point - mean_vec
72
+ distance = np.sqrt(diff @ inv_cov_matrix @ diff)
73
+ distances.append(distance)
74
+
75
+ # Determine outlier threshold using percentile
76
+ threshold = np.percentile(distances, percentile_threshold)
77
+
78
+ # Find outlier indices
79
+ outlier_indices = [i for i, d in enumerate(distances) if d > threshold]
80
+
81
+ return outlier_indices
82
+
83
+ except Exception:
84
+ # If anything goes wrong, return None (no outliers detected)
85
+ return None
86
+
87
+
11
88
  class InteractiveReport:
12
89
  """
13
90
  Interactive report widget with lazy loading for large datasets.
@@ -29,7 +106,7 @@ class InteractiveReport:
29
106
  # TODO Will/Matt: this list of report entries could be how we store stuff in the DB
30
107
  # for interactive reports, to reference the post proc. extracts. A report is essentially
31
108
  # a bunch of extracts + metadata.
32
- def __init__(self, entries: list[ReportEntry]) -> None:
109
+ def __init__(self, entries: list[ReportEntry], context: ReportContext | None = None) -> None:
33
110
  if not lcj:
34
111
  raise ImportError("InteractiveScene requires luminarycloud[jupyter] to be installed")
35
112
 
@@ -37,6 +114,13 @@ class InteractiveReport:
37
114
  if len(self.entries) == 0:
38
115
  raise ValueError("Invalid number of entries, must be > 0")
39
116
 
117
+ # Validate and store context if provided
118
+ if context is not None:
119
+ self._validate_context(context)
120
+ self.context = context
121
+ else:
122
+ self.context = None
123
+
40
124
  # Determine grid dimensions by downloading first entry
41
125
  # to understand the structure (number of columns)
42
126
  first_entry = self.entries[0]
@@ -54,12 +138,55 @@ class InteractiveReport:
54
138
 
55
139
  nrows = len(self.entries)
56
140
 
141
+ # Prepare report context for the widget
142
+ context_dict = None
143
+ if self.context is not None:
144
+ context_dict = self.context.to_dict()
145
+
146
+ # Compute outlier indices if we have outputs
147
+ if self.context.outputs and len(self.context.outputs) >= 2:
148
+ outlier_indices = _detect_outliers(
149
+ [re._metadata for re in self.entries], self.context.outputs
150
+ )
151
+ if outlier_indices is not None:
152
+ context_dict["outlier_indices"] = outlier_indices
153
+
57
154
  # Create widget with metadata but without data
58
- self.widget = lcj.EnsembleWidget([re._metadata for re in self.entries], nrows, ncols)
155
+ self.widget = lcj.EnsembleWidget(
156
+ [re._metadata for re in self.entries], nrows, ncols, report_context=context_dict
157
+ )
59
158
 
60
159
  # Set the callback for lazy loading row data
61
160
  self.widget.set_row_data_callback(self._load_row_data)
62
161
 
162
+ def _validate_context(self, context: ReportContext) -> None:
163
+ """
164
+ Validate that all inputs and outputs from the ReportContext exist in the
165
+ first report entry's metadata.
166
+
167
+ Raises:
168
+ -------
169
+ ValueError
170
+ If any inputs or outputs are missing from the first entry's metadata.
171
+ """
172
+ first_entry = self.entries[0]
173
+ metadata_keys = set(first_entry._metadata.keys())
174
+
175
+ # Check for missing inputs
176
+ missing_inputs = [key for key in context.inputs if key not in metadata_keys]
177
+
178
+ # Check for missing outputs
179
+ missing_outputs = [key for key in context.outputs if key not in metadata_keys]
180
+
181
+ # Raise exception if any keys are missing
182
+ if missing_inputs or missing_outputs:
183
+ error_parts = []
184
+ if missing_inputs:
185
+ error_parts.append(f"Missing inputs: {missing_inputs}")
186
+ if missing_outputs:
187
+ error_parts.append(f"Missing outputs: {missing_outputs}")
188
+ raise ValueError(f"ReportContext validation failed. {', '.join(error_parts)}")
189
+
63
190
  def _load_row_data(self, row: int) -> None:
64
191
  """
65
192
  Load and send data for a specific row to the widget.
@@ -79,11 +206,29 @@ class InteractiveReport:
79
206
  image_and_label = extract.download_images()
80
207
  # Each image gets its own column
81
208
  for il in image_and_label:
82
- self.widget.set_cell_data(row, col, il[0].getvalue(), "jpg")
209
+ # il is a tuple of (BytesIO, label)
210
+ # Use camera label for the name, fallback to "image" if empty
211
+ camera_label = il[1]
212
+ name = camera_label if camera_label else "image"
213
+ # For description: prefer extract.description, then camera label, then fallback message
214
+ description = (
215
+ extract.description
216
+ if extract.description
217
+ else camera_label if camera_label else "no label or description provided"
218
+ )
219
+ self.widget.set_cell_data(
220
+ row,
221
+ col,
222
+ il[0].getvalue(),
223
+ "jpg",
224
+ name=name,
225
+ description=description,
226
+ )
83
227
  col += 1
84
228
  else:
85
229
  plot_data = extract.download_data()
86
- data = plot_data[0][0]
230
+ data = plot_data[0][0] # The CSV data (rows)
231
+ plot_label = plot_data[0][1] # The label from the extract
87
232
  all_axis_labels = data[0]
88
233
 
89
234
  axis_data = []
@@ -91,14 +236,25 @@ class InteractiveReport:
91
236
  axis_values = [row[axis_idx] for row in data[1:]]
92
237
  axis_data.append(axis_values)
93
238
 
239
+ # For plots: use extract.name, then plot_label, then "plot" as fallback
240
+ # For description: use extract.description, fallback to message if empty
241
+ name = extract.name if extract.name else (plot_label if plot_label else "plot")
242
+ description = (
243
+ extract.description
244
+ if extract.description
245
+ else "no label or description provided"
246
+ )
247
+
94
248
  self.widget.set_cell_scatter_plot(
95
249
  row,
96
250
  col,
97
- f"Row #{row} - Multi-axis Plot",
251
+ name, # Use the same name for the plot title
98
252
  all_axis_labels,
99
253
  axis_data,
100
- plot_name=f"plot-{row}",
254
+ plot_name=name,
101
255
  plot_mode="markers",
256
+ name=name,
257
+ description=description,
102
258
  )
103
259
  col += 1
104
260
 
@@ -1,3 +1,4 @@
1
+ import csv as csv_module
1
2
  import json
2
3
  import os
3
4
  from typing import TYPE_CHECKING
@@ -17,6 +18,79 @@ if TYPE_CHECKING:
17
18
  from .interactive_report import InteractiveReport
18
19
 
19
20
 
21
+ class ReportContext:
22
+ """
23
+ Context for interactive reports that defines input and output metadata keys.
24
+ Inputs define what the geometric and flow conditions are varied with running
25
+ data generation and the outputs define what quantities are extracted from
26
+ the simulations. For the report context to be valid we require that the both
27
+ the inputs and outputs are non-empty.
28
+
29
+ Attributes:
30
+ -----------
31
+ inputs : list[str]
32
+ List of metadata keys (column names) that represent inputs to the report.
33
+ outputs : list[str]
34
+ List of metadata keys (column names) that represent outputs from the report.
35
+ """
36
+
37
+ def __init__(self, inputs: list[str], outputs: list[str]) -> None:
38
+ self.inputs = inputs
39
+ self.outputs = outputs
40
+
41
+ def to_dict(self) -> dict:
42
+ """Convert ReportContext to a dictionary for serialization."""
43
+ return {
44
+ "inputs": self.inputs,
45
+ "outputs": self.outputs,
46
+ }
47
+
48
+ @classmethod
49
+ def from_dict(cls, data: dict) -> "ReportContext":
50
+ """Create a ReportContext from a dictionary.
51
+
52
+ Parameters:
53
+ -----------
54
+ data : dict
55
+ Dictionary containing 'inputs' and 'outputs' keys.
56
+
57
+ Raises:
58
+ -------
59
+ ValueError
60
+ If 'inputs' or 'outputs' keys are missing from the data.
61
+ """
62
+ if "inputs" not in data:
63
+ raise ValueError("ReportContext.from_dict: missing required key 'inputs'")
64
+ if "outputs" not in data:
65
+ raise ValueError("ReportContext.from_dict: missing required key 'outputs'")
66
+
67
+ inputs = data["inputs"]
68
+ outputs = data["outputs"]
69
+
70
+ if not isinstance(inputs, list):
71
+ raise ValueError(
72
+ f"ReportContext.from_dict: 'inputs' must be a list, got {type(inputs).__name__}"
73
+ )
74
+ if not isinstance(outputs, list):
75
+ raise ValueError(
76
+ f"ReportContext.from_dict: 'outputs' must be a list, got {type(outputs).__name__}"
77
+ )
78
+
79
+ if len(inputs) == 0:
80
+ raise ValueError("ReportContext.from_dict: 'inputs' must be non-empty")
81
+ if len(outputs) == 0:
82
+ raise ValueError("ReportContext.from_dict: 'outputs' must be non-empty")
83
+
84
+ return cls(inputs=inputs, outputs=outputs)
85
+
86
+
87
+ def load_report_context_from_json(filepath: str) -> ReportContext:
88
+ """Load a ReportContext object from a JSON file at the given file path."""
89
+ with open(filepath, "r") as f:
90
+ data = json.load(f)
91
+ return ReportContext.from_dict(data)
92
+
93
+
20
94
  # TODO Will/Matt: this could be something like what we store in the DB
21
95
  # A report can contain a list of report entries that reference post proc.
22
96
  # extracts + styling info for how they should be displayed
@@ -86,7 +160,7 @@ class ReportEntry:
86
160
  if res.HasField("line_data")
87
161
  else RenderOutput(_InternalToken())
88
162
  )
89
- extract._set_data(eid, self._project_id, eid, eid, status)
163
+ extract._set_data(eid, self._project_id, "", "", status)
90
164
  self._extracts.append(extract)
91
165
 
92
166
 
@@ -250,3 +324,41 @@ def load_report_from_json(filepath: str) -> "Report":
250
324
  with open(filepath, "r") as f:
251
325
  data = json.load(f)
252
326
  return Report.from_dict(data)
327
+
328
+
329
+ def load_report_from_csv(filepath: str) -> "Report":
330
+ """Load a Report object from a CSV file at the given file path.
331
+
332
+ Each row in the CSV corresponds to a ReportEntry. Each column is converted
333
+ to metadata. No extracts are created when loading from CSV.
334
+
335
+ Parameters
336
+ ----------
337
+ filepath : str
338
+ Path to the CSV file to load.
339
+
340
+ Returns
341
+ -------
342
+ Report
343
+ A Report object with entries populated from the CSV rows.
344
+ """
345
+ entries = []
346
+ with open(filepath, "r") as f:
347
+ reader = csv_module.DictReader(f)
348
+ for row in reader:
349
+ # Convert all columns to metadata
350
+ metadata: dict[str, str | float] = {}
351
+ for key, value in row.items():
352
+ # Try to convert to float, otherwise keep as string
353
+ try:
354
+ metadata[key] = float(value)
355
+ except (ValueError, TypeError):
356
+ metadata[key] = value
357
+
358
+ # Create ReportEntry with placeholder project_id and no extracts
359
+ # We only need the project id for loading extracts, so we can omit it for CSV
360
+ # imports.
361
+ entry = ReportEntry(project_id="p-placeholder", extract_ids=[], metadata=metadata)
362
+ entries.append(entry)
363
+
364
+ return Report(entries)
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
 
4
4
  import logging
5
5
  from os import PathLike
6
- from typing import TYPE_CHECKING, Iterable, Iterator, Optional
6
+ from typing import TYPE_CHECKING, Iterable, Iterator, Optional, Sequence
7
7
  from uuid import uuid4
8
8
 
9
9
  from luminarycloud._helpers import util
@@ -69,7 +69,7 @@ class VolumeSelection:
69
69
  >>> s.subtract(b)
70
70
  """
71
71
 
72
- def __init__(self, geometry: "Geometry", volumes: list[Volume | int]):
72
+ def __init__(self, geometry: "Geometry", volumes: Sequence[Volume | int]):
73
73
  self.__geometry = geometry
74
74
  self.__volume_ids = set()
75
75
  for v in volumes:
@@ -583,6 +583,7 @@ class VolumeSelection:
583
583
  self,
584
584
  vector: Vector3Like,
585
585
  quantity: int,
586
+ symmetric: bool = False,
586
587
  *,
587
588
  feature_name: str = "Linear Pattern",
588
589
  ) -> None:
@@ -595,6 +596,8 @@ class VolumeSelection:
595
596
  The vector to repeat the selected volumes along.
596
597
  quantity : int
597
598
  The number of times to repeat the selected volumes.
599
+ symmetric : bool, default False
600
+ Whether the pattern is symmetric.
598
601
  feature_name : str
599
602
  The name of the feature.
600
603
  """
@@ -608,6 +611,7 @@ class VolumeSelection:
608
611
  vector=_to_vector3_ad_proto(vector),
609
612
  ),
610
613
  quantity=quantity,
614
+ symmetric=symmetric,
611
615
  ),
612
616
  ),
613
617
  )
@@ -618,6 +622,7 @@ class VolumeSelection:
618
622
  vector: Vector3Like,
619
623
  magnitude: float,
620
624
  quantity: int,
625
+ symmetric: bool = False,
621
626
  *,
622
627
  feature_name: str = "Linear Pattern",
623
628
  ) -> None:
@@ -633,12 +638,15 @@ class VolumeSelection:
633
638
  The magnitude of the vector.
634
639
  quantity : int
635
640
  The number of times to repeat the selected volumes.
641
+ symmetric : bool, default False
642
+ Whether the pattern is symmetric.
636
643
  feature_name : str
637
644
  The name of the feature.
638
645
  """
639
646
  return self.linear_pattern(
640
647
  vector=[vector[i] * magnitude for i in range(3)],
641
648
  quantity=quantity,
649
+ symmetric=symmetric,
642
650
  feature_name=feature_name,
643
651
  )
644
652
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luminarycloud
3
- Version: 0.22.0
3
+ Version: 0.22.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/
@@ -5,11 +5,11 @@ luminarycloud/_version.py,sha256=lOdK2s5vnq1K8KND-J-wO2A2MuUTouiYRhJwRwb6mcA,178
5
5
  luminarycloud/_wrapper.py,sha256=PwTyxIVoYCF2z5arlV5UEgNfFDduxGE1KC2NaOpasWU,7796
6
6
  luminarycloud/exceptions.py,sha256=VVGtKREb8XcWea6TySVYh7dhGQpowafdhiTst1uN4EQ,1900
7
7
  luminarycloud/feature_modification.py,sha256=PuhR2UwzRscItKIcdfswto1QaW1U_0dYfd_x9frsUA8,30992
8
- luminarycloud/geometry.py,sha256=QEkrkRPIVSbY1PpvyHzXYlrhqin54zSdipagKPy96Vc,23845
9
- luminarycloud/geometry_version.py,sha256=Ka0vCNidoRynXLKd90yJav5tGQr-LMNUVb4DJBRAKrw,8001
10
- luminarycloud/mesh.py,sha256=6O4fTg8gWYLTrBsf0-MH6c7HL72iZbPUfGGk_II9PR4,4782
8
+ luminarycloud/geometry.py,sha256=rcz4Rv5ZUvZUmxulCD-yA89gylatZRlbLyqzNWqJIlY,23944
9
+ luminarycloud/geometry_version.py,sha256=IGVP4RCUnxSxt-X2rB4m9TUsdKelZ7hp-Tnpv4YKXCk,8100
10
+ luminarycloud/mesh.py,sha256=lwhcHzMhu0CWJnc3Cv-zesrEu9V0f0gZtQrKUS9_1ew,4877
11
11
  luminarycloud/named_variable_set.py,sha256=RsfGJDoZFajbJ2a2fWc-ZHRsZts5U7ZY6rIXSjXL7bY,4568
12
- luminarycloud/project.py,sha256=e9caPlGWI49nkkkJpUgGKjVESBLuKOchxGFux-4pfpU,31133
12
+ luminarycloud/project.py,sha256=CEMJb5hQ2b-Lbaic-th7eXdKkpSrWl4FIujdyGdwlKc,31163
13
13
  luminarycloud/reference_values.py,sha256=vWIX1VXMctspeQIjNtjmZdex55K0jHf1xz5gsGeMCfo,4357
14
14
  luminarycloud/simulation.py,sha256=75hE_Ftj4ObHqPMRG_ucKlWYKCgobPy4JgLKfmNDvbQ,15623
15
15
  luminarycloud/simulation_param.py,sha256=j_RIrP1j0ezbXA2MTLFpuFnXtaOHeGMwP_yocGn-a4Y,16269
@@ -18,7 +18,7 @@ luminarycloud/simulation_template.py,sha256=ZsvgsUjW2nAJQ_JnZCsVdaRoogjpBIRNwhdX
18
18
  luminarycloud/solution.py,sha256=xS04WDjoPenJaBxx9xm7t8A4YrNIcq_oQfl4WJ8gAic,6770
19
19
  luminarycloud/tables.py,sha256=i6KMjthjRbks4Vxv6Eu6VLulRC9U8fhkzwknR2Ax3Nc,6922
20
20
  luminarycloud/tag.py,sha256=aC1xnHFVOEk7V6tp16b0wdwuGAJoqq7u3tzuYwbkkY0,1384
21
- luminarycloud/volume_selection.py,sha256=QQ4JVjTzvvwu7Zd-94B4b1ibOvlMpxVJa6hj9dP3mT8,25572
21
+ luminarycloud/volume_selection.py,sha256=G7twZ0xHwHEOaZbKKtTYPxkcabwt4RjQM3dHbPz_KIQ,25902
22
22
  luminarycloud/_auth/__init__.py,sha256=nfdTjXQONhMBVOWOGAglb1cP-4kaABJ6HxrGIW-hj6U,89
23
23
  luminarycloud/_auth/auth.py,sha256=ytDmlAOqj34LiaHElxUo3r4hTFu07F2wEIOGR4mdlXs,11118
24
24
  luminarycloud/_auth/callback_listener.py,sha256=A14Qur9_XJHi-dW6a8ENmpC5ifrBP03frm6vaODcpHU,4163
@@ -27,12 +27,12 @@ luminarycloud/_auth/credentials_store.py,sha256=Hm_ASTQRhGLyCOhyBOfEzCyetXaH2Knz
27
27
  luminarycloud/_auth/exceptions.py,sha256=XsjA6xxFGnufP5V7BOxnq_syuSRrLa-HWntncW5qCk0,671
28
28
  luminarycloud/_auth/util.py,sha256=EmDl9BBV0SuKVyyq7PyYXPyOEkWBJRIqPN46l2srjEg,1040
29
29
  luminarycloud/_client/__init__.py,sha256=q-q1lnJE9EirX5p_O15FnanUoSYdEOD5zP1XrUedKMU,681
30
- luminarycloud/_client/authentication_plugin.py,sha256=eJXs0b8pYih12fBU1vgJ8gGpAdtjfbqCuxSprjR-p9E,1351
31
- luminarycloud/_client/client.py,sha256=8v9uzgY5_EB2YY8AN_k0EQa1slcmp2n6Jk3nmqEbI-E,11505
30
+ luminarycloud/_client/authentication_plugin.py,sha256=irRtAk-4vy4PoRNHNxeGS9cs6vDMpnG63tqL6SUSMjE,3547
31
+ luminarycloud/_client/client.py,sha256=6erYfy2D4Mnd-i66ZZrodmLWOk77hUxl7DTifOK1BEE,12729
32
32
  luminarycloud/_client/config.py,sha256=o_HJsmPOLaeorYToR9_wzNhJYRoFnmeqcxCRAoUAqZk,236
33
- luminarycloud/_client/http_client.py,sha256=d_Yqxa6BMoq44ikF5uWVERucIhCQ9ISH7WmsqMSNFbM,6702
33
+ luminarycloud/_client/http_client.py,sha256=qK9dYt7c0ekMogJZYyq5Q9Pc3wFGkFZu5A2n7B8W0zg,6710
34
34
  luminarycloud/_client/logging_interceptor.py,sha256=I7xJzTQoV5O_Ioi7OjWXI2mQWxdpbagu7QnzbJSFcHg,2593
35
- luminarycloud/_client/retry_interceptor.py,sha256=EnswA3e7v8je2AqNCIcOoBVd1yKg6gLn_3nuUtwW8Mo,2908
35
+ luminarycloud/_client/retry_interceptor.py,sha256=njNxpPy7eS5-fw9K8FURzcukx9JdcS0mCOps4gm1nT8,5116
36
36
  luminarycloud/_client/rpc_error.py,sha256=SgOYyLs5YYAuODFfyHMgJeJ3j2R7SJ8lUiqywvNRTfg,1250
37
37
  luminarycloud/_client/tracing.py,sha256=JRmwZGDrhFMqniQB9neNxC2UElBO5YPszA2p6q8amSk,8064
38
38
  luminarycloud/_helpers/__init__.py,sha256=YcoXEa67nN7Kx1wxoELk4tGXcnKqt2v0bWZrYx8yjs4,1547
@@ -49,7 +49,7 @@ luminarycloud/_helpers/_wait_for_mesh.py,sha256=p7Zp6ulifpZDAfRcN0kOPVjOU2e9oWut
49
49
  luminarycloud/_helpers/_wait_for_simulation.py,sha256=DusHJLmLi7NvLu3K7cfrb2ZSbPBrySK8t7TLS22oTms,3520
50
50
  luminarycloud/_helpers/cond.py,sha256=BZ0MDBxy2lvcVQyaj0x_qLqJFlsu-X_n9r_Gw1Ppk-c,16752
51
51
  luminarycloud/_helpers/defaults.py,sha256=jj6J3F2cjqO1CR5_F4ICxr44hTLC1GypD9Q4YQJRw68,1550
52
- luminarycloud/_helpers/download.py,sha256=10S2hHha6Bo5AUWvpqm9jsoKjkeX9KzRLUM0ibDaBy8,9605
52
+ luminarycloud/_helpers/download.py,sha256=UmrxDRa9Iz3JRxHPeG66aL2_fkSUB9CEF08HucRvmts,10137
53
53
  luminarycloud/_helpers/file_chunk_stream.py,sha256=Z5dfuGWZMZ3JDhZH9jgxSqgkFu_e8g57epUBOT3lKpY,2371
54
54
  luminarycloud/_helpers/named_variables.py,sha256=GLjBEQxf0SwfzLemY6_hnNbReD2gTcX0N9Hfvrk3-xc,481
55
55
  luminarycloud/_helpers/pagination.py,sha256=MYBuFvxYWe4U2QQ9UyZt-TvTTo69Qv2bXREiD6f5i5E,2076
@@ -64,8 +64,8 @@ luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2.py,sha25
64
64
  luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2.pyi,sha256=6f9zoQywZnnhvbM8F-awVFBdzDFIi4CnXLKc-3LDY84,1791
65
65
  luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2_grpc.py,sha256=F-lP5Eu_21BAzQYkZ4hOLspgf1A9c5lvR3lQZizpAA8,3176
66
66
  luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2_grpc.pyi,sha256=QCtaYQ_3QbainyyW71zjrB3N3xvmUP3Oc_vqBFpv3rA,1372
67
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py,sha256=6m8jGaMmtg_GzsisSYwn7xFf8bRDbrb9T7WlJ_4jcw8,63294
68
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi,sha256=XbYTsxhca06eldWPMADB56LLCHx0EG1F_z8Q5luGUDI,62959
67
+ luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py,sha256=ilPUGvSk8Lps_1UT2ZMC_d-U56491M2WcJ0H5UWJSDc,63767
68
+ luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi,sha256=vso-HCNaVxhwany9rhaJvytdJJ3d_ZxieEkVtzBWoWA,64619
69
69
  luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py,sha256=q9oWtzhNfBO0RSp0GuFePvub3g8GsGOsQwXk_3atKDc,54250
70
70
  luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi,sha256=nkyGyiDDXbJLP7vmYkB1XfVfhoRaG-xCOgRtz9vXtxw,19465
71
71
  luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.py,sha256=zv2em_XlAGMhNaLcX5l05K2Z0XF5aM0bhWpBHSlA9FE,4339
@@ -88,10 +88,14 @@ luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2.py,sha256=
88
88
  luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2.pyi,sha256=H2K7EGKLHOe5xNunVkFuY4sHN3LTVjZHLlnTwYqFk-A,7654
89
89
  luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2_grpc.py,sha256=lLpk0zvSn4XsvE5JEJVF7V2x2ZAX6rCHTgIzjVN9xU0,11209
90
90
  luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2_grpc.pyi,sha256=N7KiftsEfElduhrGpevNqC7Ri3FGpYsiZ1LQJ4RwDrw,3738
91
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py,sha256=vcIN1qKy7Fg1g2aXVSzPTMMkT_aGyUhn70daMMF9A1s,19165
92
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi,sha256=y98wRzMoRIg9N7ogKQD7eN6vFcUlRfxFlMFEMDYaOJA,24578
91
+ luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py,sha256=cmP3HbXjhFittYXhvkHHx0pINAfESF8fwnYNMfcY_IQ,21184
92
+ luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi,sha256=rHVctA077GmElsp30Y_ar0DnkdvK6aR3KrM1MkH-Jx0,26602
93
93
  luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py,sha256=WMjycj2H85rdfZ9_JOe1BZhg3k3x9UamYJm5N2LO_5U,9498
94
94
  luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi,sha256=xynVc9ide5kxdAwOs9XYL8cQU3BrZaiHLMTKTk5uNPQ,3400
95
+ luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2.py,sha256=PKSmby0cR6jKMfUv2-YRNBB2MfA17NWsg5D__9HYQBM,16435
96
+ luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2.pyi,sha256=0RATTbvE1njW_P-i7RVBAmocbCKziPEo0CCLtmDAHcs,15917
97
+ luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2_grpc.py,sha256=89uQ64NVLJnEf5H0XJEcCO5BYaF3-pzZ_gblkfkr-4E,10364
98
+ luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2_grpc.pyi,sha256=6c-KN6ZojWEKyNI-bEtyYn4Yck_tQWI-rIV5v4tGWdQ,3930
95
99
  luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2.py,sha256=QoXaFdrpKDqla7n7sOCKXjxEXlDk2BAS4dvSsyOaPLc,17258
96
100
  luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2.pyi,sha256=XDwB0GdcMqk3jgwzTWH2OtoH6_juPcXHm_4N1g2_DCY,15228
97
101
  luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2_grpc.py,sha256=pmYkibMi49G82r9Dh4f83IiNaAWFOqKp6-TbBRA3Llo,20258
@@ -116,10 +120,10 @@ luminarycloud/_proto/api/v0/luminarycloud/stopping_condition/stopping_condition_
116
120
  luminarycloud/_proto/api/v0/luminarycloud/stopping_condition/stopping_condition_pb2.pyi,sha256=1jRrt1G8BAoQ45weCEgkptoI2TNKct2XdTJet0KT8HM,17317
117
121
  luminarycloud/_proto/api/v0/luminarycloud/stopping_condition/stopping_condition_pb2_grpc.py,sha256=5XtL97RYR6tmJrnF0OAd9DVupkTeI2doZvPRnYV7XpA,15408
118
122
  luminarycloud/_proto/api/v0/luminarycloud/stopping_condition/stopping_condition_pb2_grpc.pyi,sha256=XvnTtTBaisI7_EHkgfYbhKAwJM2ISaZunr9wadyS-4o,6188
119
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py,sha256=gxRIcaaJ_JmN46qm3h1Yhx2122rqLlQHlrPRlJPExQc,31559
120
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi,sha256=NCYZrCQK9XP6JfusWX6rEt3cE-cJu7KAWDjBbkut47Q,26318
121
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py,sha256=cMmisovqmE5qFmRda3PNy9rxGNnm4TWGbTFVfzEl1d8,22144
122
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi,sha256=zic2uAB-MqmsTeGjJARXgHWooMQg7QE9HW8e1812Qpw,8457
123
+ luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py,sha256=AiFnDiJ2HepTqYFGPOh5Y1R0gTSzjEAmhgFPMMqK2ZM,33998
124
+ luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi,sha256=sdtSVlNSttPIqzu-D7AsAjU6p9havOLzqxjVrjbia1I,28509
125
+ luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py,sha256=qp4eVZSAL5DhNetSvqnanXvQgcJlhGwU2TlCJLGEpG0,24316
126
+ luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi,sha256=ZxIXOQHdr8agB7lvnVlaPysUeJNvZCkP18_GRiznRX4,9244
123
127
  luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2.py,sha256=GSBDw-gXRDjwY82uWrw7IoPsJFJuD4C1yo4VyeTflQ4,3871
124
128
  luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
125
129
  luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2_grpc.py,sha256=eyC9tE7Rid-6OvRiSohEim8mkORz-cVa-ml4T3S8qBU,12767
@@ -132,8 +136,8 @@ luminarycloud/_proto/assistant/assistant_pb2.py,sha256=B5Jm87AjEMIWWaLLKEf0ccYST
132
136
  luminarycloud/_proto/assistant/assistant_pb2.pyi,sha256=mKHAmiZpWA0RtDxFJYfo3Roh5DCvTPpsbKbjZmG7gBU,29795
133
137
  luminarycloud/_proto/assistant/assistant_pb2_grpc.py,sha256=LdhDENiXExqvZpHofl4wduSs7_4hQwQEVIPxkSyY4dA,15007
134
138
  luminarycloud/_proto/assistant/assistant_pb2_grpc.pyi,sha256=Z5ABVLgrKHaxAlBxJXKWg-In9qFCiHqlV1uBQMbVHyE,4605
135
- luminarycloud/_proto/base/base_pb2.py,sha256=IR2jOEOoyGjygHXSad_cjWv091EYiZ9ZxzP4HEv_gpM,14477
136
- luminarycloud/_proto/base/base_pb2.pyi,sha256=HS_7DBnXv5Bp_Ri6kRRfFAIuux3P3OBlRiD-1g2sktg,25150
139
+ luminarycloud/_proto/base/base_pb2.py,sha256=XyL0ljtbnWdbsgkrIMV3CQYmzFDNcg7NsqjXEeZSa_8,14543
140
+ luminarycloud/_proto/base/base_pb2.pyi,sha256=JTPYDYVgSV3y7FaENJTPhjeaBCTtkndPjSNhBBcv1dI,25335
137
141
  luminarycloud/_proto/cad/boolean_pb2.py,sha256=q_6ttv2pZVDpuJB1LmSzQxZ-eja6LqndcZN44G1xiIM,3652
138
142
  luminarycloud/_proto/cad/boolean_pb2.pyi,sha256=UcDRXfejwXptwjrIpyzDfKmlK_m79tVjJEvCYvrGRbQ,7427
139
143
  luminarycloud/_proto/cad/shape_pb2.py,sha256=kjxIomvD14rD59GdUSxjrW4ZSBGFLaiatDf3c9wsE_0,13959
@@ -144,7 +148,7 @@ luminarycloud/_proto/cadmetadata/cadmetadata_pb2.py,sha256=bJoJXDLcAqmtHfgR6JKNZ
144
148
  luminarycloud/_proto/cadmetadata/cadmetadata_pb2.pyi,sha256=ilRDD1oOkFffy4bpgPblZHU2j_2PR_gqdL-_5tRBiU0,4463
145
149
  luminarycloud/_proto/client/entity_pb2.py,sha256=LmCbzEBTtsBnfgofVEsYFvVCvw-tDzU9o3eOn0-JqmY,1442
146
150
  luminarycloud/_proto/client/entity_pb2.pyi,sha256=nUZ93BId89hhsZhyzMoFohDRRYtKUza458dOLNJVENk,1111
147
- luminarycloud/_proto/client/simulation_pb2.py,sha256=45eqEotL_CxFkSIISOUlpIM3rEuzH0PH4Xc_BqUX4MA,452966
151
+ luminarycloud/_proto/client/simulation_pb2.py,sha256=eVKddAdUI3bh5nxFCxg6pwp52RXWC4FedCfexNDNeUY,452942
148
152
  luminarycloud/_proto/client/simulation_pb2.pyi,sha256=HoeVmwvHQlfE8RCNXrqbRacuPvYC05T5sSp4Oboecos,394286
149
153
  luminarycloud/_proto/condition/condition_pb2.py,sha256=0WWoUz2yYAJ8Ux9J7Yqap6UdvvzLxnF_tlBceqk76Us,5144
150
154
  luminarycloud/_proto/condition/condition_pb2.pyi,sha256=eZ6hTW0F9RDDCDni4IELnCHBSyPZmcw6aKayrKGuQSU,5914
@@ -200,10 +204,12 @@ luminarycloud/_proto/parametricworker/parametricworker_pb2.py,sha256=vldSHCCpERE
200
204
  luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi,sha256=R1j0hXIlvccrdQ5Vf45xV6my7dzcPJ94igVZrZ2BjSg,10158
201
205
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.py,sha256=sxVIAGz_rFE52RMWGcLpm2o6Qs-lCcoSuDcJSv94f0M,10008
202
206
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.pyi,sha256=T8RFKXUxrTOGMpXpjAE-b43Nw8LJjetckFC_d-aDIu4,3378
203
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py,sha256=ulfXXYAKvBK6RPLT8JXeEDtH7UxtmPnzJbx5_ty2kPU,1651
207
+ luminarycloud/_proto/physicsaiinferenceservice/physicsaiinferenceservice_pb2.py,sha256=L3eD4VbMDorhigFZvb0SeJYY7fM7TYDt-rj8xyeft0U,2528
208
+ luminarycloud/_proto/physicsaiinferenceservice/physicsaiinferenceservice_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
209
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py,sha256=atLF7Nd_HgeyLZ-pVkFs2yI2HwFnnscBBhCPpMwk58I,1853
204
210
  luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.pyi,sha256=VbmaLisaneVcvS68mWV2faJnoF4vrS4wYBvDZezwPpk,221
205
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py,sha256=6VYOuVOIegaK5c3qrNEx9Etk9Gd52PdZ6RKMSSNkRZ8,3271
206
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi,sha256=Weofl41CRNCGP-fX2cmKCr9k9r6wvQjnel0sJH31U8s,1359
211
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py,sha256=78WDf66Bme0cqS6ALWu-K8m5e-vKIpe_N8kpJYM-ufY,5334
212
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi,sha256=QKO8kNZADB8YuM4PORTe8OClkbg242_WeTz1uJIvJdI,2032
207
213
  luminarycloud/_proto/quantity/quantity_options_pb2.py,sha256=6XoZZp_SVLQE7WpjWJxvzCZ1NJy-vXsDV67SOaxLXDs,7108
208
214
  luminarycloud/_proto/quantity/quantity_options_pb2.pyi,sha256=cQcraCIE1O5pXpP0bFoe4rkG9du8D9MtaIIxcj-gd98,13525
209
215
  luminarycloud/_proto/quantity/quantity_pb2.py,sha256=jPYCDHWGmcEGGX3MZOofYFM1dWcAjjZajIAUrjbS1uo,148567
@@ -236,15 +242,15 @@ luminarycloud/enum/simulation_status.py,sha256=5XZYw2M-pEAkD0L4ajNv9unz7oibCEe4k
236
242
  luminarycloud/enum/space_averaging_type.py,sha256=v8u-9_1tqgRsgiXqAcl_Z64Mat9jmTrcFAjJxKr6aaA,510
237
243
  luminarycloud/enum/tables.py,sha256=KZXpkkHzwlati9qwZHktBzABmlwwNKg18sFH0hZL1_4,1415
238
244
  luminarycloud/enum/vector3_component.py,sha256=T-neR4J5pSn96JxbWf303mzcC4fdjurCjvYh5TQWq5U,437
239
- luminarycloud/enum/vis_enums.py,sha256=lw0_z4QwKe2XIoFojHHrzcljAcquzTScrn4miAq_w4s,10433
245
+ luminarycloud/enum/vis_enums.py,sha256=Z_hfX0Ln5IVPVlMC2ao4CaRFvbQQm7bjd9oHRzJYe2w,10819
240
246
  luminarycloud/enum/volume_reduction_type.py,sha256=DGXXTImKxfwPgGXO4NQghbYAJwrzAtgsyMjrJVAQ6TI,491
241
247
  luminarycloud/meshing/__init__.py,sha256=zBGkoe3NhuEskotHwRTuRlbEccPW3EFfEtaPRqV7czk,441
242
248
  luminarycloud/meshing/mesh_adaptation_params.py,sha256=tZUymzgo0dcECCXuEPfvx9jRICetiEnvgmCVqRGR5w4,1535
243
- luminarycloud/meshing/mesh_generation_params.py,sha256=1lK_cSbFU-9GBvzyxHyxi9ZcuSHh7YIlpEWvCvLgw58,9652
249
+ luminarycloud/meshing/mesh_generation_params.py,sha256=ek4odz-IUW4Ovl2LlhAclWBLIL4jk6YYVX8G55K9bFc,9508
244
250
  luminarycloud/meshing/metadata/__init__.py,sha256=6fUDEaxhbCxX76BZS4Sqfp1Xtv5p7XBEiissaeAAcrg,169
245
251
  luminarycloud/meshing/metadata/mesh_metadata.py,sha256=DZKPuyJk7S00bKJ-NALxzfoPpCjGdqjbrczllRVI328,1412
246
252
  luminarycloud/meshing/sizing_strategy/__init__.py,sha256=Y1Q95QoWw3cQkp787ydwdrgHcfJuFZX22lswzLUTsvw,117
247
- luminarycloud/meshing/sizing_strategy/sizing_strategies.py,sha256=VPD0MyHAW63LVtshC8a-VR_Xe58tMF8qbLaDd2AYXSs,1528
253
+ luminarycloud/meshing/sizing_strategy/sizing_strategies.py,sha256=IenJNwSkPzraEViqRpYHjdsi2f90tWKGOdpxrfFPJaA,1455
248
254
  luminarycloud/outputs/__init__.py,sha256=CP2uRvwWEbJEPJlydWP9_pWdRO750ys9vfImNaG9BbU,1536
249
255
  luminarycloud/outputs/output_definitions.py,sha256=E85hRbAiCphGq-YTUjFYYz64vjg7z0X2kFq_oe0MPrA,26649
250
256
  luminarycloud/outputs/stopping_conditions.py,sha256=JSYEViCUaz3d1YiKEBvyCWPlY1z6CYrBLGrVYLDqjF4,8638
@@ -498,34 +504,33 @@ luminarycloud/physics_ai/__init__.py,sha256=zSdYA5L3kqGsCfHZVvbYpXd25j8CyAjaHZQF
498
504
  luminarycloud/physics_ai/architectures.py,sha256=AOXuoNuj1ZiaOUCc3NvCn7QvTRsrYTblCJA2kQhG_eU,4389
499
505
  luminarycloud/physics_ai/inference.py,sha256=pXx3dFfbvB6RCV4knfFb4nKxTZ3k5A5qgUuadCobe9Q,7787
500
506
  luminarycloud/physics_ai/models.py,sha256=USuz1LKbt4U3nRAYUYGQz7bRLhPIBnb3Q3xQwFam6Z0,2135
501
- luminarycloud/physics_ai/solution.py,sha256=b8Ej_adu54LPZ6SK9h7c6yfmaYVxHectg1ST3pzFY9U,2527
507
+ luminarycloud/physics_ai/solution.py,sha256=9r7Jcn00Ghubtkig3pj4VaZ1zgcbR94ykuvfK5u-8vY,2802
502
508
  luminarycloud/physics_ai/training_jobs.py,sha256=e00WETgMqAps6N_PM8C3LmIcrUx3a-6UcwtfPbv1trs,1242
503
- luminarycloud/pipeline_util/dictable.py,sha256=_YhxibnVCUqSpBH-IHBqvjiYlnAYMbuQv9dWK0eZn7Y,1073
504
509
  luminarycloud/pipeline_util/yaml.py,sha256=RG3Gqv4ORaYX4lTyRVBsGVGE138zsxJIYzoWr4Aczrs,1883
505
510
  luminarycloud/pipelines/__init__.py,sha256=aeTj2qfkLvcqwZcggSRaQw8Lidvexrul7hNKkIXs_QM,1646
506
- luminarycloud/pipelines/api.py,sha256=iROvETGklhaXy15DwXUZr-RFrwysL1B57K789nDWO2I,12228
511
+ luminarycloud/pipelines/api.py,sha256=nyIEYa95Ztwlph0oRWsDTP5neWp0BTpWlZQKddyz2vo,15438
507
512
  luminarycloud/pipelines/arguments.py,sha256=HexqMqr_c3vB_qMSwAqW4EGx1Z9sfJnbswxfk3jU4FA,4366
508
- luminarycloud/pipelines/core.py,sha256=UAFwlPxsK9AgS-XlOh41lhbxx6Sfmkj7ZC7uiPtW1f8,15869
513
+ luminarycloud/pipelines/core.py,sha256=ZLxLv6j9Y_mOnr_TgjXhYgmhakgPcv9eFHwoL9b385w,15868
509
514
  luminarycloud/pipelines/parameters.py,sha256=z7pcmETQ81V-CJfUp15L9ugJM0cZ71DFBDpRG-KrS7A,1607
510
- luminarycloud/pipelines/stages.py,sha256=SBnML0DdpqojqE4iCF7lxCr_tngqvsA66s37LqXlgTM,7222
515
+ luminarycloud/pipelines/stages.py,sha256=Mqf_cjpjmW4IRMtRpBaOjRzUsQfX77MTUy2MYtha0vY,8293
511
516
  luminarycloud/thirdparty/__init__.py,sha256=7uX7_FjRCMed-OGo0xSY-BUGG3p8Q2XPdTsuJSc9Pr4,376
512
517
  luminarycloud/thirdparty/onshape.py,sha256=a_Srr7NNkCEls9YdaUaKdIMWIRTzRGmb-VA-4G4rK2A,4949
513
518
  luminarycloud/types/__init__.py,sha256=tIA724XA_cgqLfB48LThGj4NHNkl1PlR4rOl3nqX-gk,596
514
519
  luminarycloud/types/adfloat.py,sha256=iSe08QPhQw-IK4j4GZcFM-OKlIHeLyKqUTLncIw2Izs,6505
515
520
  luminarycloud/types/ids.py,sha256=1N0K4xezmi2Dno8TH68tvBgZZCmqYUPbNKujudrzkNg,715
516
521
  luminarycloud/types/matrix3.py,sha256=2_6gvalzh43_aE1DkXgNJZDTzVRofSGlYXthCSlpZQM,1333
517
- luminarycloud/types/vector3.py,sha256=agzBz6_vBN6YzKQUlqB94BYOdOaFAbetJKqOtCthkDQ,3381
522
+ luminarycloud/types/vector3.py,sha256=fkLfpvDHt_4JWqNW4OnHnBNGYnSfjyCw6Rxv2JqxlIQ,3309
518
523
  luminarycloud/vis/__init__.py,sha256=sx9aMRXl7qrN_D1ivaSk40Co82nhY4bNqg1XU8NETLg,1794
519
- luminarycloud/vis/data_extraction.py,sha256=HSc4gSjXoH4jP_Fdot_qNCIuWA8D25hD_GkORy0xFfw,29599
524
+ luminarycloud/vis/data_extraction.py,sha256=tAAzbjTKEgMTdrcxFAmCxBpjaej8yBDJYQVvkj0DS5Y,29618
520
525
  luminarycloud/vis/display.py,sha256=VxnBtFTGjKINt2cMrJ_SbBI1y_csin9kMVqR5jsHpLo,10312
521
526
  luminarycloud/vis/filters.py,sha256=WARUNUlx_fnuepGubMwbSRPOt56RBjBUVTYeRkqGv2c,48746
522
527
  luminarycloud/vis/interactive_inference.py,sha256=5CyhmU4G2Iz6Ar8pczZVXivk_CniSQk8fmxCLb6BsCk,5943
523
- luminarycloud/vis/interactive_report.py,sha256=nI4pCj_61b-PW8b81pZryqSe3Yceoxvpzg6Qy7rRUq4,4078
528
+ luminarycloud/vis/interactive_report.py,sha256=5YbgZrjSdxMENPCJKjvWKiEmeGDq27CVnwI5WEML2RI,9945
524
529
  luminarycloud/vis/interactive_scene.py,sha256=RVQEvXcjKo-9kLlFAO-oASoYYjLEqDQF7WPyTPocEzo,10425
525
530
  luminarycloud/vis/primitives.py,sha256=_EDSEAddSAFTRUU9at1Gxt-5chLO723f9c8V5atTeTg,4546
526
- luminarycloud/vis/report.py,sha256=wlRT-zj8MoVYfa9E5vUyZLYi_STBsShExN-TZtN0LlU,10552
531
+ luminarycloud/vis/report.py,sha256=PgODi9GYzoFopnzeMuG-13DH7G2YltcxI2pzDBd5vqQ,14452
527
532
  luminarycloud/vis/vis_util.py,sha256=AWGmHcfYXGmfe5t5Jbb1Fqe2nxVdEQbBitCaWSeT89M,1821
528
533
  luminarycloud/vis/visualization.py,sha256=pZSscRSCcwe8a0Z4-nRkL5kJ2btqLtkaUyQ76o1_AbA,61003
529
- luminarycloud-0.22.0.dist-info/METADATA,sha256=QdPDJEBguh0RsH_WNCXB545hhHC1IjMKi2rHuWaVTLs,2574
530
- luminarycloud-0.22.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
531
- luminarycloud-0.22.0.dist-info/RECORD,,
534
+ luminarycloud-0.22.1.dist-info/METADATA,sha256=HxDbPVGOuj593mzKLhvyIAB_K4h3xzuQ0gWnDpNrdGQ,2574
535
+ luminarycloud-0.22.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
536
+ luminarycloud-0.22.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any