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.
- luminarycloud/_client/authentication_plugin.py +49 -0
- luminarycloud/_client/client.py +33 -8
- luminarycloud/_client/http_client.py +1 -1
- luminarycloud/_client/retry_interceptor.py +64 -2
- luminarycloud/_helpers/download.py +11 -0
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +132 -132
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +36 -8
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +53 -23
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +54 -1
- luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2.py +195 -0
- luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2.pyi +361 -0
- luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2_grpc.py +172 -0
- luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2_grpc.pyi +66 -0
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py +88 -65
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi +42 -0
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py +34 -0
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi +12 -0
- luminarycloud/_proto/base/base_pb2.py +7 -6
- luminarycloud/_proto/base/base_pb2.pyi +4 -0
- luminarycloud/_proto/client/simulation_pb2.py +3 -3
- luminarycloud/_proto/physicsaiinferenceservice/physicsaiinferenceservice_pb2.py +30 -0
- luminarycloud/_proto/physicsaiinferenceservice/physicsaiinferenceservice_pb2.pyi +7 -0
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +2 -2
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +34 -0
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +12 -0
- luminarycloud/enum/vis_enums.py +6 -0
- luminarycloud/geometry.py +4 -0
- luminarycloud/geometry_version.py +4 -0
- luminarycloud/mesh.py +4 -0
- luminarycloud/meshing/mesh_generation_params.py +5 -6
- luminarycloud/meshing/sizing_strategy/sizing_strategies.py +1 -2
- luminarycloud/physics_ai/solution.py +4 -0
- luminarycloud/pipelines/api.py +99 -8
- luminarycloud/pipelines/core.py +1 -1
- luminarycloud/pipelines/stages.py +22 -9
- luminarycloud/project.py +5 -6
- luminarycloud/types/vector3.py +1 -2
- luminarycloud/vis/data_extraction.py +7 -7
- luminarycloud/vis/interactive_report.py +163 -7
- luminarycloud/vis/report.py +113 -1
- luminarycloud/volume_selection.py +10 -2
- {luminarycloud-0.22.0.dist-info → luminarycloud-0.22.1.dist-info}/METADATA +1 -1
- {luminarycloud-0.22.0.dist-info → luminarycloud-0.22.1.dist-info}/RECORD +44 -39
- {luminarycloud-0.22.0.dist-info → luminarycloud-0.22.1.dist-info}/WHEEL +1 -1
- 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(
|
|
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
|
-
|
|
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
|
-
|
|
251
|
+
name, # Use the same name for the plot title
|
|
98
252
|
all_axis_labels,
|
|
99
253
|
axis_data,
|
|
100
|
-
plot_name=
|
|
254
|
+
plot_name=name,
|
|
101
255
|
plot_mode="markers",
|
|
256
|
+
name=name,
|
|
257
|
+
description=description,
|
|
102
258
|
)
|
|
103
259
|
col += 1
|
|
104
260
|
|
luminarycloud/vis/report.py
CHANGED
|
@@ -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,
|
|
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:
|
|
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
|
|
|
@@ -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=
|
|
9
|
-
luminarycloud/geometry_version.py,sha256=
|
|
10
|
-
luminarycloud/mesh.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
31
|
-
luminarycloud/_client/client.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
68
|
-
luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi,sha256=
|
|
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=
|
|
92
|
-
luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi,sha256=
|
|
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=
|
|
120
|
-
luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi,sha256=
|
|
121
|
-
luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py,sha256=
|
|
122
|
-
luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi,sha256=
|
|
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=
|
|
136
|
-
luminarycloud/_proto/base/base_pb2.pyi,sha256=
|
|
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=
|
|
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/
|
|
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=
|
|
206
|
-
luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
530
|
-
luminarycloud-0.22.
|
|
531
|
-
luminarycloud-0.22.
|
|
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,,
|