luminarycloud 0.15.0__py3-none-any.whl → 0.15.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.
@@ -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
 
@@ -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.1
4
4
  Summary: Luminary Cloud SDK
5
5
  Project-URL: Homepage, https://www.luminarycloud.com/
6
6
  Project-URL: Documentation, https://app.luminarycloud.com/docs/api/
@@ -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=tj-b_RI_eo9ToZTXwQfbcnr_K3Re-e1fPdYzHkB2l58,9165
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
@@ -63,10 +64,10 @@ luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py,sha256=eg6EwM0VIxRUH3
63
64
  luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi,sha256=_zzjFRqz4uPQMhK_m0q6I2vTmuB4vZtdPix0xpcnlRU,39800
64
65
  luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2_grpc.py,sha256=klRUtId5bbK5ysQZm3pqpa7HW721GTgcif2kAVPDh_s,16036
65
66
  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
67
+ luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.py,sha256=nL1JlSvz7SMzOsPnkws9lKwP6FtQ9riOgsLihQY_P1g,18398
68
+ luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.pyi,sha256=eoGT1jdm45kBeRJcH7C6FmMtnj9wGQ4n4MqbgXnzMPk,12460
69
+ luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.py,sha256=5UTrgh-W0dzFYw-CcNSE8X9JWPomjIeP1zkY3dY9Tv0,14597
70
+ luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.pyi,sha256=rZncNVrqwhvMtz5u5X1-QAL4SPjNqQSjaVYlVa6B-wE,4939
70
71
  luminarycloud/_proto/api/v0/luminarycloud/output_definition/output_definition_pb2.py,sha256=SWuml14PtDLqHW33gy2N3daf62iNQXjY6wC1eWghshg,12423
71
72
  luminarycloud/_proto/api/v0/luminarycloud/output_definition/output_definition_pb2.pyi,sha256=OPJsL8iByJg0OflOOLqbb9WKbSP--PG0e6pwMwleA7w,8782
72
73
  luminarycloud/_proto/api/v0/luminarycloud/output_definition/output_definition_pb2_grpc.py,sha256=UXJMxuFieweWYXRIfvRMfPRg-VqrzJAvXscUt6mmy1o,12345
@@ -111,8 +112,8 @@ luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py,sha256=PbzwjnzqV2x4R0oA
111
112
  luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi,sha256=PnILt1A2s8I2hqcTASChQIdPkt6Zn3IiZ64KC2mtVf4,81906
112
113
  luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py,sha256=KwtYIm6fEQ39TeS2XkzQ0xgHyJMkyiyDorw90wGBfqE,14501
113
114
  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
115
+ luminarycloud/_proto/assistant/assistant_pb2.py,sha256=14w2vbqN41V8xPryb7B_VzmKtuwkjd69erVqaQEJMHI,19942
116
+ luminarycloud/_proto/assistant/assistant_pb2.pyi,sha256=lxIwrrb4pnraCJ1C5DM8pKmGOTbKnwckauMKUKjdqEs,24921
116
117
  luminarycloud/_proto/assistant/assistant_pb2_grpc.py,sha256=wBh1LMszzZqNYjpIlCjsEbQjAWG4SN9aHjBf7E3OPk4,11508
117
118
  luminarycloud/_proto/assistant/assistant_pb2_grpc.pyi,sha256=0YY4Alr_llagoErEJ76Ca98WDhpoO5X36BZh4Q3Sp3A,3484
118
119
  luminarycloud/_proto/base/base_pb2.py,sha256=88kXZEhuZB-xdc_8jJ27vH0TkIjqlJYg355jZFxhJJM,13520
@@ -173,8 +174,8 @@ luminarycloud/_proto/output/output_pb2.py,sha256=ywx4TE229q8BvfMcYLiffEcwpOCPsE4
173
174
  luminarycloud/_proto/output/output_pb2.pyi,sha256=ZjDKDfSPjquivHdwRKlekYl0CPB2t3bm9NNkeCOO0So,24790
174
175
  luminarycloud/_proto/output/reference_values_pb2.py,sha256=lNbv02XS6Yz0Q0z6Hd0RuTvOlTruUFvlTusYTUl9bYY,6841
175
176
  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
177
+ luminarycloud/_proto/parametricworker/parametricworker_pb2.py,sha256=vldSHCCpEREsA9pK4e3zrz1nVUCF7oasyeJXd0rlKgQ,11112
178
+ luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi,sha256=R1j0hXIlvccrdQ5Vf45xV6my7dzcPJ94igVZrZ2BjSg,10158
178
179
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.py,sha256=sxVIAGz_rFE52RMWGcLpm2o6Qs-lCcoSuDcJSv94f0M,10008
179
180
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.pyi,sha256=T8RFKXUxrTOGMpXpjAE-b43Nw8LJjetckFC_d-aDIu4,3378
180
181
  luminarycloud/_proto/quantity/quantity_options_pb2.py,sha256=x7mjevQEMY-sCnUcRG-Sn0lws9M-T-11bmzbiCZsnq0,7005
@@ -211,11 +212,11 @@ luminarycloud/enum/vis_enums.py,sha256=S7O9Tvs_4DsqmebqE1RBchzgVCdXv3BtRfGVpx3L_
211
212
  luminarycloud/enum/volume_reduction_type.py,sha256=DGXXTImKxfwPgGXO4NQghbYAJwrzAtgsyMjrJVAQ6TI,491
212
213
  luminarycloud/meshing/__init__.py,sha256=zBGkoe3NhuEskotHwRTuRlbEccPW3EFfEtaPRqV7czk,441
213
214
  luminarycloud/meshing/mesh_adaptation_params.py,sha256=tZUymzgo0dcECCXuEPfvx9jRICetiEnvgmCVqRGR5w4,1535
214
- luminarycloud/meshing/mesh_generation_params.py,sha256=2ldWKakVcUSe4FDA5OFKRBHUsDpCpQxigwbmlEXLxTs,9433
215
+ luminarycloud/meshing/mesh_generation_params.py,sha256=uLqbCaXcCwNn2_nhTaaMsEqKzXci2Jlg2iXzrL_fNKI,9467
215
216
  luminarycloud/meshing/metadata/__init__.py,sha256=6fUDEaxhbCxX76BZS4Sqfp1Xtv5p7XBEiissaeAAcrg,169
216
217
  luminarycloud/meshing/metadata/mesh_metadata.py,sha256=DZKPuyJk7S00bKJ-NALxzfoPpCjGdqjbrczllRVI328,1412
217
218
  luminarycloud/meshing/sizing_strategy/__init__.py,sha256=Y1Q95QoWw3cQkp787ydwdrgHcfJuFZX22lswzLUTsvw,117
218
- luminarycloud/meshing/sizing_strategy/sizing_strategies.py,sha256=QBJ3WSAS7unUqonALEjYQedi3liqqOGPpzgQodLGTjw,1433
219
+ luminarycloud/meshing/sizing_strategy/sizing_strategies.py,sha256=IenJNwSkPzraEViqRpYHjdsi2f90tWKGOdpxrfFPJaA,1455
219
220
  luminarycloud/outputs/__init__.py,sha256=CP2uRvwWEbJEPJlydWP9_pWdRO750ys9vfImNaG9BbU,1536
220
221
  luminarycloud/outputs/output_definitions.py,sha256=PwpouG8HLxx3C6i5w5Ohjz91jIoOPj6mkt4SxI03FW4,26295
221
222
  luminarycloud/outputs/stopping_conditions.py,sha256=By3AoZ_0kONWJnF4VPkyGUmyHrGyJad0kNBtORDhvvU,8711
@@ -473,15 +474,15 @@ luminarycloud/physics_ai/__init__.py,sha256=vN6lSE7_fle5sJoYhD0zYiQ_lHx2pDJs00Rr
473
474
  luminarycloud/physics_ai/architectures.py,sha256=o1vP0_Ajd42FZBsBO9_4KHpmyoPBhO0ChN4KHZOO-p8,1185
474
475
  luminarycloud/physics_ai/models.py,sha256=Zkf5V2KsXbmZswcFHCMDxvgcISIHwhV5dUFq6Y1gaM4,1241
475
476
  luminarycloud/types/__init__.py,sha256=Ka0ppKcdPcUg7yZ3djZLP6Dl4ghPRmJsNtX6D4wVcu4,542
476
- luminarycloud/types/adfloat.py,sha256=VadG9hu2dcVutZUOeLx9RUkgDot_s6lpSf3xmFv4Azg,4449
477
+ luminarycloud/types/adfloat.py,sha256=4tSzTUetW8483kd-Q5DKTWLTOwU6rYsSVqXxOOkB1cc,5021
477
478
  luminarycloud/types/ids.py,sha256=_6ZHZuOueK6b7XCEeazxSNK2_ZHPti6R9HG_jjHfroE,569
478
479
  luminarycloud/types/matrix3.py,sha256=7E2CyDZBGL_YPiPyOKve2fhr0COL-7y2yJqqW70W7d8,922
479
480
  luminarycloud/types/vector3.py,sha256=fkLfpvDHt_4JWqNW4OnHnBNGYnSfjyCw6Rxv2JqxlIQ,3309
480
481
  luminarycloud/vis/__init__.py,sha256=hFmhMT-ScBB9gl4DcG6GYeTpNSjfiBz1wgqsPT1nN8s,1055
481
482
  luminarycloud/vis/display.py,sha256=4nwDbueAKhlzfrzgr6HhdgIoZNqg1RnOtiJY6SaPE24,6992
482
483
  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,,
484
+ luminarycloud/vis/interactive_scene.py,sha256=Y_2_wITPqYA945aARfUQBBcA5ypekBhZZK7010Jr0mI,7913
485
+ luminarycloud/vis/visualization.py,sha256=BguMQhd5k9CEsf2XB7RzwgYXZKvFBDDvv1sAVaCwbfk,39489
486
+ luminarycloud-0.15.1.dist-info/METADATA,sha256=62FCQifKhEHHNGm6klD9JMoip0sQa6amKzwDA0hWnVs,2535
487
+ luminarycloud-0.15.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
488
+ luminarycloud-0.15.1.dist-info/RECORD,,