luminarycloud 0.15.0__py3-none-any.whl → 0.15.2__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 (35) hide show
  1. luminarycloud/_client/client.py +4 -0
  2. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +81 -81
  3. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +4 -1
  4. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.py +61 -0
  5. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.pyi +76 -0
  6. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2_grpc.py +67 -0
  7. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2_grpc.pyi +26 -0
  8. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py +29 -27
  9. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi +5 -1
  10. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.py +50 -28
  11. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.pyi +38 -2
  12. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.py +34 -0
  13. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.pyi +12 -0
  14. luminarycloud/_proto/assistant/assistant_pb2.py +74 -74
  15. luminarycloud/_proto/assistant/assistant_pb2.pyi +22 -30
  16. luminarycloud/_proto/geometry/geometry_pb2.py +8 -1
  17. luminarycloud/_proto/geometry/geometry_pb2.pyi +19 -0
  18. luminarycloud/_proto/hexmesh/hexmesh_pb2.py +37 -37
  19. luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +4 -4
  20. luminarycloud/_proto/inferenceservice/inferenceservice_pb2.py +69 -0
  21. luminarycloud/_proto/inferenceservice/inferenceservice_pb2.pyi +80 -0
  22. luminarycloud/_proto/parametricworker/parametricworker_pb2.py +59 -26
  23. luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi +58 -3
  24. luminarycloud/feature_modification.py +909 -0
  25. luminarycloud/meshing/mesh_generation_params.py +1 -1
  26. luminarycloud/meshing/sizing_strategy/sizing_strategies.py +2 -2
  27. luminarycloud/named_variable_set.py +10 -4
  28. luminarycloud/physics_ai/inference.py +55 -0
  29. luminarycloud/simulation_template.py +4 -4
  30. luminarycloud/types/adfloat.py +19 -1
  31. luminarycloud/vis/interactive_scene.py +30 -6
  32. luminarycloud/vis/visualization.py +57 -0
  33. {luminarycloud-0.15.0.dist-info → luminarycloud-0.15.2.dist-info}/METADATA +1 -1
  34. {luminarycloud-0.15.0.dist-info → luminarycloud-0.15.2.dist-info}/RECORD +35 -27
  35. {luminarycloud-0.15.0.dist-info → luminarycloud-0.15.2.dist-info}/WHEEL +0 -0
@@ -142,7 +142,7 @@ class MeshGenerationParams:
142
142
 
143
143
  geometry_id: str
144
144
  "The ID of the geometry to generate a mesh for"
145
- sizing_strategy: SizingStrategy
145
+ sizing_strategy: SizingStrategy = field(default_factory=MaxCount)
146
146
  "The sizing strategy to use"
147
147
 
148
148
  # Defaults copied from ts/frontend/src/lib/paramDefaults/meshGenerationState.ts
@@ -48,7 +48,7 @@ class TargetCount(SizingStrategy):
48
48
  throughout the mesh. Requested boundary layer profiles will be maintained.
49
49
  """
50
50
 
51
- target_count: int
51
+ target_count: int = 10000000
52
52
  "The target number of cells in the mesh"
53
53
 
54
54
 
@@ -61,5 +61,5 @@ class MaxCount(SizingStrategy):
61
61
  Requested boundary layer profiles will be maintained.
62
62
  """
63
63
 
64
- max_count: int
64
+ max_count: int = 10000000
65
65
  "The maximum number of cells in the mesh"
@@ -3,7 +3,7 @@ from datetime import datetime
3
3
 
4
4
  from ._client import get_default_client
5
5
  from ._helpers._timestamp_to_datetime import timestamp_to_datetime
6
- from ._helpers.named_variables import _named_variables_from_proto
6
+ from ._helpers.named_variables import _named_variables_from_proto, _named_variables_to_proto
7
7
  from ._helpers.warnings import experimental
8
8
  from ._proto.api.v0.luminarycloud.named_variable_set import (
9
9
  named_variable_set_pb2 as namedvariablepb,
@@ -48,6 +48,7 @@ class NamedVariableSet(ProtoWrapperBase):
48
48
  "ID of the project containing this simulation."
49
49
 
50
50
  _proto: namedvariablepb.NamedVariableSet
51
+ _named_variables: dict[str, float | str] | None
51
52
 
52
53
  @property
53
54
  def name(self) -> str:
@@ -71,7 +72,7 @@ class NamedVariableSet(ProtoWrapperBase):
71
72
  req = namedvariablepb.UpdateNamedVariableSetRequest(
72
73
  id=self.id,
73
74
  name=self._proto.name,
74
- named_variables=self._get_named_variables(),
75
+ named_variables=_named_variables_to_proto(self._get_named_variables()),
75
76
  )
76
77
  res: namedvariablepb.UpdateNamedVariableSetResponse = (
77
78
  get_default_client().UpdateNamedVariableSet(req)
@@ -101,9 +102,14 @@ class NamedVariableSet(ProtoWrapperBase):
101
102
  def __contains__(self, key: str) -> bool:
102
103
  return key in self._get_named_variables()
103
104
 
105
+ def __len__(self) -> int:
106
+ return len(self._get_named_variables())
107
+
104
108
  def _get_named_variables(self) -> dict[str, float | str]:
105
- if self._named_variables is None:
106
- self._named_variables = _named_variables_from_proto(self._proto.named_variables)
109
+ if getattr(self, "_named_variables", None) is None:
110
+ named_variables_dict = dict(self._proto.named_variables)
111
+ self._named_variables = _named_variables_from_proto(named_variables_dict)
112
+ assert self._named_variables is not None
107
113
  return self._named_variables
108
114
 
109
115
 
@@ -0,0 +1,55 @@
1
+ # File: python/sdk/luminarycloud/inference/inference.py
2
+ # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
3
+ from __future__ import annotations
4
+
5
+ from datetime import datetime
6
+ from typing import Any
7
+ from json import loads as json_loads
8
+
9
+ from .._client import get_default_client
10
+ from .._helpers._timestamp_to_datetime import timestamp_to_datetime
11
+ from .._proto.api.v0.luminarycloud.inference import inference_pb2 as inferencepb
12
+ from .._proto.inferenceservice import inferenceservice_pb2 as inferenceservicepb
13
+ from .._wrapper import ProtoWrapper, ProtoWrapperBase
14
+ from .._helpers.warnings import experimental
15
+
16
+
17
+ @experimental
18
+ def start_inference_job(
19
+ stl_url: str,
20
+ model_url: str,
21
+ config_name: str,
22
+ stencil_size: int,
23
+ ) -> dict[str, Any]:
24
+ """Creates an inference service job.
25
+ Parameters
26
+ ----------
27
+ stl_url : str
28
+ URL of the STL file to be used for inference.
29
+ model_url : str
30
+ URL of the model to be used for inference.
31
+ config_name :str
32
+ Name of the configuration to be used for inference.
33
+ stencil_size :int
34
+ Size of the stencil to be used for inference.
35
+
36
+
37
+ Returns
38
+ dict[str, Any]
39
+ Response from the server as key-value pairs.
40
+
41
+ warning:: This feature is experimental and may change or be removed without notice.
42
+ """
43
+
44
+ req = inferencepb.CreateInferenceServiceJobRequest(
45
+ stl_url=stl_url,
46
+ model_url=model_url,
47
+ config_name=config_name,
48
+ stencil_size=stencil_size,
49
+ )
50
+
51
+ res: inferencepb.CreateInferenceServiceJobResponse = (
52
+ get_default_client().CreateInferenceServiceJob(req)
53
+ )
54
+
55
+ return json_loads(str(res.response, encoding="utf-8"))
@@ -373,7 +373,7 @@ class SimulationTemplate(ProtoWrapperBase):
373
373
  iterations_to_consider: int | None = None,
374
374
  ) -> StoppingCondition:
375
375
  """
376
- Create a stopping condition on an output definition, or update it if the stopping condition
376
+ Create a stopping condition on an output definition, or update it if the output definition
377
377
  already has one.
378
378
 
379
379
  While this API will prevent the creation of multiple stopping conditions on the same output
@@ -487,13 +487,13 @@ class SimulationTemplate(ProtoWrapperBase):
487
487
  output_definitions = self.list_output_definitions()
488
488
  for i, definition in enumerate(output_definitions):
489
489
  if i == 0:
490
- code += "outputs = []\n"
490
+ code += "output_list = []\n"
491
491
  output_code = definition._to_code_helper("new_output", hide_defaults)
492
492
  for line in output_code.split("\n"):
493
493
  # Omit ID because we are generating for create_output_definition.
494
494
  if line and not line.startswith("new_output.id"):
495
495
  code += f"{line}\n"
496
- code += "outputs.append(template.create_output_definition(new_output))\n\n"
496
+ code += "output_list.append(template.create_output_definition(new_output))\n\n"
497
497
 
498
498
  code += "# Define the basic and output-based stopping conditions.\n"
499
499
  gsc = self.get_general_stopping_conditions()
@@ -506,7 +506,7 @@ class SimulationTemplate(ProtoWrapperBase):
506
506
  # Find the old output to use the new ID created by create_output_definition.
507
507
  for j, od in enumerate(output_definitions):
508
508
  if sc.output_definition_id == od.id:
509
- code += f"template.create_or_update_stopping_condition(outputs[{j}].id, "
509
+ code += f"template.create_or_update_stopping_condition(output_list[{j}].id, "
510
510
  code += f"{sc.threshold}, {sc.start_at_iteration}, {sc.averaging_iterations}, "
511
511
  code += f"{sc.iterations_to_consider})\n"
512
512
  break
@@ -36,6 +36,15 @@ class FirstOrderAdFloat(AdFloat):
36
36
  def adjoint(self) -> tuple[float, ...]:
37
37
  return self._adjoint
38
38
 
39
+ def __eq__(self, other: Any) -> bool:
40
+ if not isinstance(other, FirstOrderAdFloat):
41
+ return False
42
+ return (
43
+ float(self) == float(other)
44
+ and self.tangent == other.tangent
45
+ and self.adjoint == other.adjoint
46
+ )
47
+
39
48
  @staticmethod
40
49
  def _from_proto(proto: FirstOrderAdType) -> "FirstOrderAdFloat":
41
50
  return FirstOrderAdFloat(
@@ -53,7 +62,7 @@ class SecondOrderAdFloat(AdFloat):
53
62
  _adjoint: tuple[FirstOrderAdFloat, ...]
54
63
 
55
64
  def __new__(cls, value: FirstOrderAdFloat, *_: Any) -> "SecondOrderAdFloat":
56
- return super().__new__(cls, value)
65
+ return super().__new__(cls, float(value))
57
66
 
58
67
  def __init__(
59
68
  self,
@@ -83,6 +92,15 @@ class SecondOrderAdFloat(AdFloat):
83
92
  def adjoint(self) -> tuple[FirstOrderAdFloat, ...]:
84
93
  return self._adjoint
85
94
 
95
+ def __eq__(self, other: Any) -> bool:
96
+ if not isinstance(other, SecondOrderAdFloat):
97
+ return False
98
+ return (
99
+ self._value == other._value
100
+ and self._tangent == other._tangent
101
+ and self._adjoint == other._adjoint
102
+ )
103
+
86
104
  @staticmethod
87
105
  def _from_proto(proto: SecondOrderAdType) -> "SecondOrderAdFloat":
88
106
  return SecondOrderAdFloat(
@@ -2,12 +2,15 @@ from .display import DisplayAttributes
2
2
  from .filters import SurfaceStreamlines, Filter, SurfaceLIC
3
3
  from .._client import get_default_client
4
4
  from ..enum.vis_enums import EntityType, SceneMode
5
- from typing import TYPE_CHECKING, cast
5
+ from typing import TYPE_CHECKING, cast, Union
6
6
 
7
7
  from .._proto.api.v0.luminarycloud.vis import vis_pb2
8
8
 
9
9
  if TYPE_CHECKING:
10
- from .visualization import Scene, LookAtCamera
10
+ from .visualization import Scene, LookAtCamera, ColorMap
11
+ from ..geometry import Geometry
12
+ from ..mesh import Mesh
13
+ from ..solution import Solution
11
14
 
12
15
  try:
13
16
  import luminarycloud_jupyter as lcj
@@ -32,7 +35,8 @@ class InteractiveScene:
32
35
  if not lcj:
33
36
  raise ImportError("InteractiveScene requires luminarycloud[jupyter] to be installed")
34
37
  self.widget = lcj.LCVisWidget(scene_mode=mode)
35
- self.set_scene(scene)
38
+ self._scene = scene
39
+ self.set_scene(scene, False)
36
40
 
37
41
  def _ipython_display_(self) -> None:
38
42
  """
@@ -41,7 +45,10 @@ class InteractiveScene:
41
45
  """
42
46
  self.widget._ipython_display_()
43
47
 
44
- def set_scene(self, scene: "Scene") -> None:
48
+ def set_scene(self, scene: "Scene", isComparator: bool) -> None:
49
+ # TODO(matt): we could make isCompartor and index so we could compare
50
+ # more than two scenes at once.
51
+
45
52
  # Import here to avoid circular import issue
46
53
  from .visualization import LookAtCamera
47
54
 
@@ -94,8 +101,10 @@ class InteractiveScene:
94
101
 
95
102
  # TODO: would be nice to print/report some download progress info
96
103
  # This can be done on the app frontend side now that the download
97
- # is moved there.
98
- self.widget.set_workspace_state(scene, resp)
104
+ # is moved there. Matt: this would be a lot of work. The current vis service
105
+ # call used in the backend doesn't use the streaming version. Further, there is
106
+ # a lot of extra code to manage the streaming callbacks.
107
+ self.widget.set_workspace_state(scene, resp, isComparator)
99
108
 
100
109
  # Sync display attributes and visibilities for surfaces
101
110
  self.set_display_attributes(_SOURCE_FILTER_ID, scene.global_display_attrs)
@@ -113,6 +122,10 @@ class InteractiveScene:
113
122
  set_camera = True
114
123
  self.set_camera(c)
115
124
 
125
+ # Set any color maps we have. TODO(matt): only a few attributes are connected atm.
126
+ for color_map in scene._color_maps:
127
+ self.set_color_map(color_map)
128
+
116
129
  # If we don't have an initial camera to use, reset the camera after loading
117
130
  # the workspace state
118
131
  if not set_camera:
@@ -136,6 +149,9 @@ class InteractiveScene:
136
149
  self.widget.camera_look_at = [camera.look_at[0], camera.look_at[1], camera.look_at[2]]
137
150
  self.widget.camera_up = [camera.up[0], camera.up[1], camera.up[2]]
138
151
 
152
+ def set_color_map(self, color_map: "ColorMap") -> None:
153
+ self.widget.set_color_map(color_map)
154
+
139
155
  def get_camera(self) -> "LookAtCamera":
140
156
  # Import here to avoid circular import issue
141
157
  from .visualization import LookAtCamera
@@ -152,3 +168,11 @@ class InteractiveScene:
152
168
 
153
169
  def set_triad_visible(self, visible: bool) -> None:
154
170
  self.widget.set_triad_visible(visible)
171
+
172
+ def compare(self, entity: Union["Geometry", "Mesh", "Solution"]) -> None:
173
+ # The entity can be a Geometry, Mesh, or Solution and is checked by the
174
+ # clone method. This can raise error if the scenes are incompatiable.
175
+ # This happens when tags or surface ids aren't shared or if we try to
176
+ # compare two different types of entities.
177
+ comparison_scene = self._scene.clone(entity)
178
+ self.set_scene(comparison_scene, True)
@@ -2,6 +2,7 @@ import dataclasses as dc
2
2
  import io
3
3
  import json
4
4
  import logging
5
+ import copy
5
6
  from time import sleep, time
6
7
  from typing import Dict, List, Tuple, cast
7
8
 
@@ -750,6 +751,62 @@ class Scene:
750
751
  self._interactive_scene = InteractiveScene(self, mode=scene_mode)
751
752
  return self._interactive_scene
752
753
 
754
+ def clone(self, entity: Geometry | Mesh | Solution) -> "Scene":
755
+ """
756
+ Clone this scene is based on a new entity. The new entity must be of
757
+ the same type as the previous one. For example, you can't swap a scene
758
+ based on a geometry with a solution. This is a deep copy operation.
759
+ Both entities must be compatible with one another, meaning they share tags
760
+ or surfaces ids used for setting surface visibilities and some filters like
761
+ surface streamlines and surface LIC.
762
+ """
763
+
764
+ entity_type: EntityType
765
+ if isinstance(entity, Solution):
766
+ entity_type = EntityType.SIMULATION
767
+ elif isinstance(entity, Mesh):
768
+ entity_type = EntityType.MESH
769
+ elif isinstance(entity, Geometry):
770
+ entity_type = EntityType.GEOMETRY
771
+ else:
772
+ raise TypeError(
773
+ f"Swap expected Solution, Mesh or Geometry, got {type(entity).__name__}"
774
+ )
775
+
776
+ if entity_type != self._entity_type:
777
+ raise TypeError(
778
+ f"Swap entity type mismatch expected {self._entity_type} got {entity_type}"
779
+ )
780
+
781
+ cloned = Scene(entity)
782
+ cloned.global_display_attrs = copy.deepcopy(self.global_display_attrs)
783
+ cloned.triad_visible = self.triad_visible
784
+ cloned.axes_grid_visible = self.axes_grid_visible
785
+ cloned.auto_color_map_annotations = self.auto_color_map_annotations
786
+ cloned.background_color = copy.deepcopy(self.background_color)
787
+ cloned.supersampling = self.supersampling
788
+ # TODO(matt): This is really meant for interactive case comparison. The label field in each
789
+ # camera could contain information specific to the previous scene. We could skip this and force
790
+ # the user to add more cameras.
791
+ cloned._cameras = copy.deepcopy(self._cameras)
792
+ # TODO(matt): for filters we could do some validation here to make sure that anything with
793
+ # surfaces (e.g., LIC and surface streamlines) have valid ids in them.
794
+ cloned._filters = copy.deepcopy(self._filters)
795
+
796
+ cloned._color_maps = copy.deepcopy(self._color_maps)
797
+ # TODO(matt): depending on what we want to do here, we could have a flag
798
+ # to ignore incompatible visibilitites. Filter surfaces are validated
799
+ # when the request is made. We could also skip these checks if they are
800
+ # based on the same geometry or mesh.
801
+ # Now loop through the surface visibilies and make sure they are compatible with the new
802
+ # scene based on the entity.
803
+ for id, visible in self._surface_visibilities.items():
804
+ if id in cloned._surface_ids or id in cloned._tag_ids:
805
+ cloned._surface_visibilities[id] = visible
806
+ else:
807
+ raise ValueError(f"Scene.clone: id {id} not present in tags or surface ids")
808
+ return cloned
809
+
753
810
 
754
811
  def get_render(project_id: str, extract_id: str) -> RenderOutput:
755
812
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luminarycloud
3
- Version: 0.15.0
3
+ Version: 0.15.2
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/
@@ -3,15 +3,16 @@ 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=_A4-9CXcG5cU598f1QHih2lxhPSS8d_acCKRZfadg04,6984
5
5
  luminarycloud/exceptions.py,sha256=gerI_d6lkribrQ4mcgJrpO_1CebHvxEP8XQHo-CNWhI,1617
6
+ luminarycloud/feature_modification.py,sha256=-XG0LNHeMWkgoTvZLIaSDGADWdP0rsvCt7y9IQKQmuo,30754
6
7
  luminarycloud/geometry.py,sha256=944U6ALq1zEd1Yi5PUnYbX9rOFKKEtYVZmnqUJrF9YI,17083
7
8
  luminarycloud/geometry_version.py,sha256=y2mlAq-vLPvSxQpS9g3R5argS9qz-qalUMEMS6Q0E-0,4487
8
9
  luminarycloud/mesh.py,sha256=Y2aYLjdI3BqAH0xsnkI7q5mxHvngRW82xQRfL5KnH4o,4082
9
- luminarycloud/named_variable_set.py,sha256=WtUBwaADzEvK2nzl0NNQakX9DWO1GIhboVy3B5tH7tE,4017
10
+ luminarycloud/named_variable_set.py,sha256=mlNhIJEaNR43ogNRbqb2Eo_AmkJisqwZSUzmN-HBGNY,4331
10
11
  luminarycloud/project.py,sha256=m7wKNDTTUchwUFckdv5X-rva1eX8M-RcYF3yJpWdFMY,26881
11
12
  luminarycloud/reference_values.py,sha256=vWIX1VXMctspeQIjNtjmZdex55K0jHf1xz5gsGeMCfo,4357
12
13
  luminarycloud/simulation.py,sha256=H8PPExAc6wxgFCKW7DMuXkSNDjSoODPKv_fD5Hh-KVA,11264
13
14
  luminarycloud/simulation_param.py,sha256=Un8MEWPvUIHDPuy8Xm4dzhIlKUiZ4yTRkiblTybMliw,15915
14
- luminarycloud/simulation_template.py,sha256=N9t-cRuT_8iqPfig7foXsD5gDvie3APBKyJtrwheFWw,19327
15
+ luminarycloud/simulation_template.py,sha256=NUjIM_rfblClTYjCWIf2Ord7_KRC0I5ijSx9IR7Fx38,19338
15
16
  luminarycloud/solution.py,sha256=IlBAl8Rf-_oHOoE-TlAEpYpRMo9BLbXnNqFCAZN49EE,6825
16
17
  luminarycloud/tables.py,sha256=pnaP3gApDHbTPbp8FmoUurFm7NHFQtxWolrKMrEcW7g,7004
17
18
  luminarycloud/tag.py,sha256=aC1xnHFVOEk7V6tp16b0wdwuGAJoqq7u3tzuYwbkkY0,1384
@@ -25,7 +26,7 @@ luminarycloud/_auth/exceptions.py,sha256=XsjA6xxFGnufP5V7BOxnq_syuSRrLa-HWntncW5
25
26
  luminarycloud/_auth/util.py,sha256=EmDl9BBV0SuKVyyq7PyYXPyOEkWBJRIqPN46l2srjEg,1040
26
27
  luminarycloud/_client/__init__.py,sha256=q-q1lnJE9EirX5p_O15FnanUoSYdEOD5zP1XrUedKMU,681
27
28
  luminarycloud/_client/authentication_plugin.py,sha256=eJXs0b8pYih12fBU1vgJ8gGpAdtjfbqCuxSprjR-p9E,1351
28
- luminarycloud/_client/client.py,sha256=q5bRmLVXxX51p1jXf8Zmmehohi7FXbTwESLlKZNv3Fg,9099
29
+ luminarycloud/_client/client.py,sha256=zQWEc_5fqPVdmXl9guHF4EzWKcBmH64-afU34OMe0HQ,9342
29
30
  luminarycloud/_client/config.py,sha256=o_HJsmPOLaeorYToR9_wzNhJYRoFnmeqcxCRAoUAqZk,236
30
31
  luminarycloud/_client/logging_interceptor.py,sha256=I7xJzTQoV5O_Ioi7OjWXI2mQWxdpbagu7QnzbJSFcHg,2593
31
32
  luminarycloud/_client/retry_interceptor.py,sha256=XrgBXAbFK53lu2m7JILQ0WAR-KwSIH-FnwoS8oqo98U,2470
@@ -55,18 +56,22 @@ luminarycloud/_helpers/warnings/deprecated.py,sha256=1SnhBAUqntgxHRMFG4Gzy_yqOMn
55
56
  luminarycloud/_helpers/warnings/experimental.py,sha256=pT9xY50DZloLMTihcGzbZd3_sDrrjEmPHFkZbw9ovRs,1115
56
57
  luminarycloud/_proto/api/v0/luminarycloud/common/common_pb2.py,sha256=KhSuLqqLRCv1rRKP0mwNmneITQsZwLSs2uD23_ehJbQ,4176
57
58
  luminarycloud/_proto/api/v0/luminarycloud/common/common_pb2.pyi,sha256=49g0e_2FuSdbmcfkdXRgnB0Refnn9Tzl6M0V-V_IpI4,5674
58
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py,sha256=5f5NyKWneD_dUpUrJ_qMA19xTZgT9qHFE3HBcWSuIzo,54244
59
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi,sha256=WZSXTrqyzcWF1nn_4vmQ4hpkZfuUegety7N8S4KSvFI,51403
59
+ luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py,sha256=jWWQLu6wcvLALanjcF0LIlRWBWcYxZbWvEwPiiRYbO4,54325
60
+ luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi,sha256=rD57ej_1Jr8zLNCTD1jxS-VzjUo6wDC294Qs3U2Cg0o,51662
60
61
  luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py,sha256=zNBFKEbXidHnH2ohOoDclOUAOjZmnrCmHVNi79smj8s,45970
61
62
  luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi,sha256=9wNhHoV2YxF5syg0XgpVOASIaF6v6Etgwpi5Dk-VRLM,16977
62
- luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py,sha256=eg6EwM0VIxRUH3i5thH-g1J9rSRazc1fG2umWozlHrA,29763
63
- luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi,sha256=_zzjFRqz4uPQMhK_m0q6I2vTmuB4vZtdPix0xpcnlRU,39800
63
+ luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.py,sha256=CznjzMa-1L2mPm7FtlFQL1iwiKgfYdm18hYIZbT9uEI,4219
64
+ luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.pyi,sha256=Z5O30zhcJ5eZpp3JUgchA8h9QH_Zr-nnJlDKCP1gHMw,2889
65
+ luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2_grpc.py,sha256=kPfG5fIgEWRghcAf0UPk_LsRFBS4IDxiZ6JEx4fTsjc,3259
66
+ luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2_grpc.pyi,sha256=w7uRtY0S39MDkOQC75pdGplIzoVxE7EyielgLZpvpvE,1167
67
+ luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py,sha256=6y0lLj1YsQ_xIJlB3_H4-BQ-YhmfA7ozgxYEcNlPxcg,29997
68
+ luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi,sha256=rLmi6-XdZrfuRQxlP0xpmiVwg2w4HnsEqVhVVgDfmZI,40111
64
69
  luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2_grpc.py,sha256=klRUtId5bbK5ysQZm3pqpa7HW721GTgcif2kAVPDh_s,16036
65
70
  luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2_grpc.pyi,sha256=0RAGudvtIY4sxoRzqWhdZ8HGtg5rzXJJum947TzxQeY,5269
66
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.py,sha256=_HNhOCXI-QUFnLHAnLZOXBmSLavNSmnhajWSQMwOQso,16123
67
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.pyi,sha256=389N3EgsKdPjl8_3YA_3UEZEH1wPoN-h0L-vIxiZCtE,11006
68
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.py,sha256=N2ems-fSv6O4IFIBGAP4ImqHBQhiVqrBmIUMc6PdvAU,12280
69
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.pyi,sha256=T_araRGMv3_78YJN4DKeiA_s4ppoy5tvJnHFfZsD83Q,4146
71
+ luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.py,sha256=nL1JlSvz7SMzOsPnkws9lKwP6FtQ9riOgsLihQY_P1g,18398
72
+ luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.pyi,sha256=eoGT1jdm45kBeRJcH7C6FmMtnj9wGQ4n4MqbgXnzMPk,12460
73
+ luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.py,sha256=5UTrgh-W0dzFYw-CcNSE8X9JWPomjIeP1zkY3dY9Tv0,14597
74
+ luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.pyi,sha256=rZncNVrqwhvMtz5u5X1-QAL4SPjNqQSjaVYlVa6B-wE,4939
70
75
  luminarycloud/_proto/api/v0/luminarycloud/output_definition/output_definition_pb2.py,sha256=SWuml14PtDLqHW33gy2N3daf62iNQXjY6wC1eWghshg,12423
71
76
  luminarycloud/_proto/api/v0/luminarycloud/output_definition/output_definition_pb2.pyi,sha256=OPJsL8iByJg0OflOOLqbb9WKbSP--PG0e6pwMwleA7w,8782
72
77
  luminarycloud/_proto/api/v0/luminarycloud/output_definition/output_definition_pb2_grpc.py,sha256=UXJMxuFieweWYXRIfvRMfPRg-VqrzJAvXscUt6mmy1o,12345
@@ -111,8 +116,8 @@ luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py,sha256=PbzwjnzqV2x4R0oA
111
116
  luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi,sha256=PnILt1A2s8I2hqcTASChQIdPkt6Zn3IiZ64KC2mtVf4,81906
112
117
  luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py,sha256=KwtYIm6fEQ39TeS2XkzQ0xgHyJMkyiyDorw90wGBfqE,14501
113
118
  luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi,sha256=79w7KSqcuajgO9klxROMmeRwCecn58NSFWQRJWQrt0o,3991
114
- luminarycloud/_proto/assistant/assistant_pb2.py,sha256=dnTGai9W-lc57M12yMHWNk28BfYuJOTvcop6gjgFMVY,20032
115
- luminarycloud/_proto/assistant/assistant_pb2.pyi,sha256=x8x3oN8AWjm4J5unXqyCSZyn_b2sU-bRA09htVOY8-o,25268
119
+ luminarycloud/_proto/assistant/assistant_pb2.py,sha256=14w2vbqN41V8xPryb7B_VzmKtuwkjd69erVqaQEJMHI,19942
120
+ luminarycloud/_proto/assistant/assistant_pb2.pyi,sha256=lxIwrrb4pnraCJ1C5DM8pKmGOTbKnwckauMKUKjdqEs,24921
116
121
  luminarycloud/_proto/assistant/assistant_pb2_grpc.py,sha256=wBh1LMszzZqNYjpIlCjsEbQjAWG4SN9aHjBf7E3OPk4,11508
117
122
  luminarycloud/_proto/assistant/assistant_pb2_grpc.pyi,sha256=0YY4Alr_llagoErEJ76Ca98WDhpoO5X36BZh4Q3Sp3A,3484
118
123
  luminarycloud/_proto/base/base_pb2.py,sha256=88kXZEhuZB-xdc_8jJ27vH0TkIjqlJYg355jZFxhJJM,13520
@@ -147,10 +152,12 @@ luminarycloud/_proto/fvm/solver_results_pb2.py,sha256=eP6iV92nfV4YcNOocn7Y3Y9uU4
147
152
  luminarycloud/_proto/fvm/solver_results_pb2.pyi,sha256=HCy3N9rOnDwDN_2y-eYmMzWJv5TIClSo_XpanNVCYqs,6665
148
153
  luminarycloud/_proto/fvm/vof_initialization_pb2.py,sha256=sojYSJKPETIecEc1uQYQAto0d1mvrvnNFqlAIPIsiU4,5483
149
154
  luminarycloud/_proto/fvm/vof_initialization_pb2.pyi,sha256=Lz18bv9OvARqs5IN78OL51J9HQh3wrnwulFBF04-ChY,8650
150
- luminarycloud/_proto/geometry/geometry_pb2.py,sha256=_Zgu7wXcWU44YndkPbdcphBOTLfdkEqLsXu2TH34D0A,21825
151
- luminarycloud/_proto/geometry/geometry_pb2.pyi,sha256=ctD-E3aON2YGuGYZ-Rhtw2L2kKFYFiRaUs0Q0lUmKOY,42307
152
- luminarycloud/_proto/hexmesh/hexmesh_pb2.py,sha256=84VJ1NZmmpW9vKAVXurca9640vaCXsTAFTfn3y6lDRw,28525
153
- luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi,sha256=OYubRwOoWfGMNbPFXr_4tqHJuShoeRp13PVxWiOI3mw,39461
155
+ luminarycloud/_proto/geometry/geometry_pb2.py,sha256=V0IKZgSKF9qwgIlkH43C0B7FGHWZKACs4trheEjzc8g,22163
156
+ luminarycloud/_proto/geometry/geometry_pb2.pyi,sha256=k--qGcF7Cdvt1_uaeYxr3j4UnPNJB6-k1ZxLQ1RfGmw,43027
157
+ luminarycloud/_proto/hexmesh/hexmesh_pb2.py,sha256=2U07p9s9TLCVCGOtz7Q41K3CZb7mFtx0WKGdxC1mb-Y,28461
158
+ luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi,sha256=znpCjOA48AwQf2Z52SlExMbhJlvWa6jZwbd4V-Q9kdA,39453
159
+ luminarycloud/_proto/inferenceservice/inferenceservice_pb2.py,sha256=7A7A18Prph0KyVl4zpZkFTZEMjG-kJQzTydzVhiThCE,4510
160
+ luminarycloud/_proto/inferenceservice/inferenceservice_pb2.pyi,sha256=3XjVG_T0YRRp-SByimDFUuTemhE0KLmDZAb155I_zMg,2588
154
161
  luminarycloud/_proto/lcn/lcmesh_pb2.py,sha256=Wezvq8djXrRv9luuNU7FYj3Pm5gjt4YBM7-wnwJaF6E,7479
155
162
  luminarycloud/_proto/lcn/lcmesh_pb2.pyi,sha256=CFplaZIMsA-txXrU5HcsTkja9OxtLHj2ZEF_qN7jhuY,21738
156
163
  luminarycloud/_proto/lcn/lcmeshcheckpoint_pb2.py,sha256=8hZnavu4HEBXhjNqQBAS0kAwjJmqvhSHzCp4NYqJ7aM,3887
@@ -173,8 +180,8 @@ luminarycloud/_proto/output/output_pb2.py,sha256=ywx4TE229q8BvfMcYLiffEcwpOCPsE4
173
180
  luminarycloud/_proto/output/output_pb2.pyi,sha256=ZjDKDfSPjquivHdwRKlekYl0CPB2t3bm9NNkeCOO0So,24790
174
181
  luminarycloud/_proto/output/reference_values_pb2.py,sha256=lNbv02XS6Yz0Q0z6Hd0RuTvOlTruUFvlTusYTUl9bYY,6841
175
182
  luminarycloud/_proto/output/reference_values_pb2.pyi,sha256=kPSKcLWUwZoYUAUtzBHqOAZDo36G7ysILCXZFclRCJk,5311
176
- luminarycloud/_proto/parametricworker/parametricworker_pb2.py,sha256=MtsdDP0Y29aob6Q_WhRFkZMq70nahNJa2kXp9jyBZ0w,8859
177
- luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi,sha256=KslkJpgj9lmGyNbFZw0pCHq-rW5epMDbjy7uX9WXTug,7177
183
+ luminarycloud/_proto/parametricworker/parametricworker_pb2.py,sha256=vldSHCCpEREsA9pK4e3zrz1nVUCF7oasyeJXd0rlKgQ,11112
184
+ luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi,sha256=R1j0hXIlvccrdQ5Vf45xV6my7dzcPJ94igVZrZ2BjSg,10158
178
185
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.py,sha256=sxVIAGz_rFE52RMWGcLpm2o6Qs-lCcoSuDcJSv94f0M,10008
179
186
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.pyi,sha256=T8RFKXUxrTOGMpXpjAE-b43Nw8LJjetckFC_d-aDIu4,3378
180
187
  luminarycloud/_proto/quantity/quantity_options_pb2.py,sha256=x7mjevQEMY-sCnUcRG-Sn0lws9M-T-11bmzbiCZsnq0,7005
@@ -211,11 +218,11 @@ luminarycloud/enum/vis_enums.py,sha256=S7O9Tvs_4DsqmebqE1RBchzgVCdXv3BtRfGVpx3L_
211
218
  luminarycloud/enum/volume_reduction_type.py,sha256=DGXXTImKxfwPgGXO4NQghbYAJwrzAtgsyMjrJVAQ6TI,491
212
219
  luminarycloud/meshing/__init__.py,sha256=zBGkoe3NhuEskotHwRTuRlbEccPW3EFfEtaPRqV7czk,441
213
220
  luminarycloud/meshing/mesh_adaptation_params.py,sha256=tZUymzgo0dcECCXuEPfvx9jRICetiEnvgmCVqRGR5w4,1535
214
- luminarycloud/meshing/mesh_generation_params.py,sha256=2ldWKakVcUSe4FDA5OFKRBHUsDpCpQxigwbmlEXLxTs,9433
221
+ luminarycloud/meshing/mesh_generation_params.py,sha256=uLqbCaXcCwNn2_nhTaaMsEqKzXci2Jlg2iXzrL_fNKI,9467
215
222
  luminarycloud/meshing/metadata/__init__.py,sha256=6fUDEaxhbCxX76BZS4Sqfp1Xtv5p7XBEiissaeAAcrg,169
216
223
  luminarycloud/meshing/metadata/mesh_metadata.py,sha256=DZKPuyJk7S00bKJ-NALxzfoPpCjGdqjbrczllRVI328,1412
217
224
  luminarycloud/meshing/sizing_strategy/__init__.py,sha256=Y1Q95QoWw3cQkp787ydwdrgHcfJuFZX22lswzLUTsvw,117
218
- luminarycloud/meshing/sizing_strategy/sizing_strategies.py,sha256=QBJ3WSAS7unUqonALEjYQedi3liqqOGPpzgQodLGTjw,1433
225
+ luminarycloud/meshing/sizing_strategy/sizing_strategies.py,sha256=IenJNwSkPzraEViqRpYHjdsi2f90tWKGOdpxrfFPJaA,1455
219
226
  luminarycloud/outputs/__init__.py,sha256=CP2uRvwWEbJEPJlydWP9_pWdRO750ys9vfImNaG9BbU,1536
220
227
  luminarycloud/outputs/output_definitions.py,sha256=PwpouG8HLxx3C6i5w5Ohjz91jIoOPj6mkt4SxI03FW4,26295
221
228
  luminarycloud/outputs/stopping_conditions.py,sha256=By3AoZ_0kONWJnF4VPkyGUmyHrGyJad0kNBtORDhvvU,8711
@@ -471,17 +478,18 @@ luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py,sha25
471
478
  luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py,sha256=jYkSbXNhyTNFw7SbocJgLw2caQYWQd5U3XFSxHv1iw4,1405
472
479
  luminarycloud/physics_ai/__init__.py,sha256=vN6lSE7_fle5sJoYhD0zYiQ_lHx2pDJs00Rr3nUGrIA,245
473
480
  luminarycloud/physics_ai/architectures.py,sha256=o1vP0_Ajd42FZBsBO9_4KHpmyoPBhO0ChN4KHZOO-p8,1185
481
+ luminarycloud/physics_ai/inference.py,sha256=CpI8HJoLuAZt_2OTG-_V2gZE2K0sOmBOrsxRHKjpAGs,1682
474
482
  luminarycloud/physics_ai/models.py,sha256=Zkf5V2KsXbmZswcFHCMDxvgcISIHwhV5dUFq6Y1gaM4,1241
475
483
  luminarycloud/types/__init__.py,sha256=Ka0ppKcdPcUg7yZ3djZLP6Dl4ghPRmJsNtX6D4wVcu4,542
476
- luminarycloud/types/adfloat.py,sha256=VadG9hu2dcVutZUOeLx9RUkgDot_s6lpSf3xmFv4Azg,4449
484
+ luminarycloud/types/adfloat.py,sha256=4tSzTUetW8483kd-Q5DKTWLTOwU6rYsSVqXxOOkB1cc,5021
477
485
  luminarycloud/types/ids.py,sha256=_6ZHZuOueK6b7XCEeazxSNK2_ZHPti6R9HG_jjHfroE,569
478
486
  luminarycloud/types/matrix3.py,sha256=7E2CyDZBGL_YPiPyOKve2fhr0COL-7y2yJqqW70W7d8,922
479
487
  luminarycloud/types/vector3.py,sha256=fkLfpvDHt_4JWqNW4OnHnBNGYnSfjyCw6Rxv2JqxlIQ,3309
480
488
  luminarycloud/vis/__init__.py,sha256=hFmhMT-ScBB9gl4DcG6GYeTpNSjfiBz1wgqsPT1nN8s,1055
481
489
  luminarycloud/vis/display.py,sha256=4nwDbueAKhlzfrzgr6HhdgIoZNqg1RnOtiJY6SaPE24,6992
482
490
  luminarycloud/vis/filters.py,sha256=Q2swtQRlHim1zQdD3Ih9qhPbrhraN3c0fXFJCzWG9O0,31114
483
- luminarycloud/vis/interactive_scene.py,sha256=Hw08fs2KV38Dx8r_JUZ32VND_5MbzuNH3r_vJGH7274,6646
484
- luminarycloud/vis/visualization.py,sha256=CEwHkKgiUZiiVbzCdMkRJqjOURDacR7zO4nbBIZwAxk,36570
485
- luminarycloud-0.15.0.dist-info/METADATA,sha256=PoGm1L-Pnqg3bASm2DQ0VYZiwgSz-5vyAq_qbjQS4Tg,2535
486
- luminarycloud-0.15.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
487
- luminarycloud-0.15.0.dist-info/RECORD,,
491
+ luminarycloud/vis/interactive_scene.py,sha256=Y_2_wITPqYA945aARfUQBBcA5ypekBhZZK7010Jr0mI,7913
492
+ luminarycloud/vis/visualization.py,sha256=BguMQhd5k9CEsf2XB7RzwgYXZKvFBDDvv1sAVaCwbfk,39489
493
+ luminarycloud-0.15.2.dist-info/METADATA,sha256=86OxtvZuMe853dL2bXO3H3Y7PtFbsE-GnC2Nh_MJpmw,2535
494
+ luminarycloud-0.15.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
495
+ luminarycloud-0.15.2.dist-info/RECORD,,