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