luminarycloud 0.15.3__py3-none-any.whl → 0.15.4__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 (235) hide show
  1. luminarycloud/__init__.py +1 -0
  2. luminarycloud/_helpers/_create_simulation.py +2 -0
  3. luminarycloud/_helpers/_entity_identifier.py +6 -0
  4. luminarycloud/_helpers/named_variables.py +6 -15
  5. luminarycloud/_helpers/warnings/experimental.py +6 -2
  6. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +77 -55
  7. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +33 -0
  8. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +33 -0
  9. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +10 -0
  10. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +45 -15
  11. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +104 -22
  12. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +12 -12
  13. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +10 -2
  14. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +221 -143
  15. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +154 -7
  16. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py +33 -0
  17. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi +10 -0
  18. luminarycloud/_proto/assistant/assistant_pb2.py +82 -61
  19. luminarycloud/_proto/assistant/assistant_pb2.pyi +37 -0
  20. luminarycloud/_proto/assistant/assistant_pb2_grpc.py +34 -0
  21. luminarycloud/_proto/assistant/assistant_pb2_grpc.pyi +12 -0
  22. luminarycloud/_proto/client/simulation_pb2.py +349 -309
  23. luminarycloud/_proto/client/simulation_pb2.pyi +97 -2
  24. luminarycloud/_proto/fvm/solver_results_pb2.py +25 -11
  25. luminarycloud/_proto/fvm/solver_results_pb2.pyi +24 -1
  26. luminarycloud/_proto/geometry/geometry_pb2.py +64 -64
  27. luminarycloud/_proto/namedvariableset/namedvariableset_pb2.py +49 -0
  28. luminarycloud/_proto/namedvariableset/namedvariableset_pb2.pyi +53 -0
  29. luminarycloud/_wrapper.py +26 -7
  30. luminarycloud/enum/__init__.py +2 -0
  31. luminarycloud/enum/physics_ai_lifecycle_state.py +30 -0
  32. luminarycloud/enum/quantity_type.py +43 -0
  33. luminarycloud/enum/vis_enums.py +6 -2
  34. luminarycloud/geometry.py +46 -2
  35. luminarycloud/named_variable_set.py +10 -5
  36. luminarycloud/params/enum/_enum_wrappers.py +68 -0
  37. luminarycloud/params/simulation/_lib.py +1 -1
  38. luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +5 -6
  39. luminarycloud/params/simulation/adaptive_mesh_refinement_.py +6 -7
  40. luminarycloud/params/simulation/adjoint_.py +3 -4
  41. luminarycloud/params/simulation/basic/gravity/gravity_off_.py +3 -4
  42. luminarycloud/params/simulation/basic/gravity/gravity_on_.py +3 -4
  43. luminarycloud/params/simulation/basic/gravity_.py +3 -4
  44. luminarycloud/params/simulation/body_frame_.py +3 -4
  45. luminarycloud/params/simulation/entity_relationships/volume_material_relationship_.py +9 -6
  46. luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py +9 -6
  47. luminarycloud/params/simulation/entity_relationships_.py +3 -4
  48. luminarycloud/params/simulation/general_.py +3 -4
  49. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_off_.py +3 -4
  50. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_on_.py +5 -6
  51. luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py +3 -4
  52. luminarycloud/params/simulation/material/fluid/material_model/ideal_gas_.py +5 -6
  53. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_.py +4 -5
  54. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_with_energy_.py +5 -6
  55. luminarycloud/params/simulation/material/fluid/material_model_.py +3 -4
  56. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +4 -5
  57. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +4 -5
  58. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +3 -4
  59. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model_.py +3 -4
  60. luminarycloud/params/simulation/material/fluid/viscosity_model/prescribed_viscosity_.py +4 -5
  61. luminarycloud/params/simulation/material/fluid/viscosity_model/sutherland_.py +6 -7
  62. luminarycloud/params/simulation/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +3 -4
  63. luminarycloud/params/simulation/material/fluid/viscosity_model_.py +3 -4
  64. luminarycloud/params/simulation/material/material_fluid_.py +4 -5
  65. luminarycloud/params/simulation/material/material_solid_.py +6 -7
  66. luminarycloud/params/simulation/material_entity_.py +6 -5
  67. luminarycloud/params/simulation/monitor_plane_.py +4 -5
  68. luminarycloud/params/simulation/motion_data/frame_transforms/no_transform_.py +3 -4
  69. luminarycloud/params/simulation/motion_data/frame_transforms/rotational_transform_.py +3 -4
  70. luminarycloud/params/simulation/motion_data/frame_transforms/translational_transform_.py +3 -4
  71. luminarycloud/params/simulation/motion_data/frame_transforms_.py +3 -4
  72. luminarycloud/params/simulation/motion_data/motion_type/constant_angular_motion_.py +3 -4
  73. luminarycloud/params/simulation/motion_data/motion_type/constant_translation_motion_.py +3 -4
  74. luminarycloud/params/simulation/motion_data/motion_type_.py +3 -4
  75. luminarycloud/params/simulation/motion_data_.py +3 -4
  76. luminarycloud/params/simulation/multi_physics_coupling_options_.py +3 -4
  77. luminarycloud/params/simulation/output_.py +3 -4
  78. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +3 -4
  79. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +3 -4
  80. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +3 -4
  81. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +5 -6
  82. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_line_.py +3 -4
  83. luminarycloud/params/simulation/particle_group/particle_group_type/probe_points_.py +3 -4
  84. luminarycloud/params/simulation/particle_group/particle_group_type/source_points_.py +3 -4
  85. luminarycloud/params/simulation/particle_group/particle_group_type_.py +3 -4
  86. luminarycloud/params/simulation/particle_group_.py +3 -4
  87. luminarycloud/params/simulation/physics/fluid/adjoint_controls_fluid_.py +4 -5
  88. luminarycloud/params/simulation/physics/fluid/basic_fluid_.py +3 -4
  89. luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +9 -10
  90. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +5 -6
  91. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +5 -6
  92. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +4 -5
  93. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +4 -5
  94. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +4 -5
  95. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +5 -6
  96. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +4 -5
  97. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +5 -6
  98. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +4 -5
  99. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +7 -8
  100. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +5 -6
  101. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +3 -4
  102. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet_.py +3 -4
  103. luminarycloud/params/simulation/physics/fluid/boundary_conditions/symmetry_.py +3 -4
  104. luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +9 -10
  105. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +4 -5
  106. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +4 -5
  107. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +4 -5
  108. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/slip_.py +3 -4
  109. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +4 -5
  110. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_energy_.py +3 -4
  111. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_momentum_.py +3 -4
  112. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall_.py +3 -4
  113. luminarycloud/params/simulation/physics/fluid/boundary_conditions_fluid_.py +3 -4
  114. luminarycloud/params/simulation/physics/fluid/initialization/fluid_existing_solution_.py +3 -4
  115. luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +3 -4
  116. luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +5 -6
  117. luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +9 -10
  118. luminarycloud/params/simulation/physics/fluid/initialization_fluid_.py +3 -4
  119. luminarycloud/params/simulation/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +4 -5
  120. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +3 -4
  121. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +6 -7
  122. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -5
  123. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +4 -5
  124. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +3 -4
  125. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +3 -4
  126. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +3 -4
  127. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +5 -6
  128. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +3 -4
  129. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -5
  130. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +3 -4
  131. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model_.py +3 -4
  132. luminarycloud/params/simulation/physics/fluid/physical_behavior_.py +3 -4
  133. luminarycloud/params/simulation/physics/fluid/porous_behavior_.py +4 -5
  134. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +3 -4
  135. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +3 -4
  136. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +4 -5
  137. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +3 -4
  138. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +8 -9
  139. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method_.py +3 -4
  140. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +4 -5
  141. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +4 -5
  142. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method_.py +3 -4
  143. luminarycloud/params/simulation/physics/fluid/solution_controls_fluid_.py +3 -4
  144. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +3 -4
  145. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/fds_.py +5 -6
  146. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +5 -6
  147. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +4 -5
  148. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_.py +3 -4
  149. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +3 -4
  150. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +8 -9
  151. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order_.py +3 -4
  152. luminarycloud/params/simulation/physics/fluid/spatial_discretization_fluid_.py +4 -5
  153. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_.py +3 -4
  154. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +3 -4
  155. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/iddes_.py +3 -4
  156. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation_.py +3 -4
  157. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +16 -17
  158. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +3 -4
  159. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +3 -4
  160. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst_.py +3 -4
  161. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +15 -16
  162. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +3 -4
  163. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +3 -4
  164. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras_.py +3 -4
  165. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +4 -5
  166. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +4 -5
  167. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +4 -5
  168. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +4 -5
  169. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +4 -5
  170. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model_.py +3 -4
  171. luminarycloud/params/simulation/physics/fluid/turbulence_.py +5 -6
  172. luminarycloud/params/simulation/physics/fluid_.py +7 -6
  173. luminarycloud/params/simulation/physics/heat/adjoint_controls_heat_.py +3 -4
  174. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_convection_.py +5 -6
  175. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +4 -5
  176. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +4 -5
  177. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_symmetry_.py +3 -4
  178. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_temperature_.py +4 -5
  179. luminarycloud/params/simulation/physics/heat/boundary_conditions_heat_.py +3 -4
  180. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +4 -5
  181. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +4 -5
  182. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type_.py +3 -4
  183. luminarycloud/params/simulation/physics/heat/heat_source_.py +3 -4
  184. luminarycloud/params/simulation/physics/heat/initialization/heat_existing_solution_.py +3 -4
  185. luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values_.py +4 -5
  186. luminarycloud/params/simulation/physics/heat/initialization_heat_.py +3 -4
  187. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +3 -4
  188. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +3 -4
  189. luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +3 -4
  190. luminarycloud/params/simulation/physics/heat/spatial_discretization_heat_.py +5 -6
  191. luminarycloud/params/simulation/physics/heat_.py +5 -5
  192. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +3 -4
  193. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/translational_periodicity_.py +3 -4
  194. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type_.py +3 -4
  195. luminarycloud/params/simulation/physics/periodic_pair_.py +3 -4
  196. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py +3 -4
  197. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/krylov_amg_.py +4 -5
  198. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type_.py +4 -5
  199. luminarycloud/params/simulation/physics_.py +6 -5
  200. luminarycloud/params/simulation/simulation_param_.py +3 -4
  201. luminarycloud/params/simulation/sliding_interfaces_.py +3 -4
  202. luminarycloud/params/simulation/surface_name_.py +3 -4
  203. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_off_.py +3 -4
  204. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_on_.py +3 -4
  205. luminarycloud/params/simulation/time/compute_statistics_.py +3 -4
  206. luminarycloud/params/simulation/time/time_marching/time_explicit_.py +3 -4
  207. luminarycloud/params/simulation/time/time_marching/time_implicit_.py +3 -4
  208. luminarycloud/params/simulation/time/time_marching_.py +3 -4
  209. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py +3 -4
  210. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py +4 -5
  211. luminarycloud/params/simulation/time/time_step_ramp_.py +3 -4
  212. luminarycloud/params/simulation/time_.py +4 -5
  213. luminarycloud/params/simulation/volume_entity_.py +6 -5
  214. luminarycloud/physics_ai/__init__.py +2 -0
  215. luminarycloud/physics_ai/architectures.py +42 -8
  216. luminarycloud/physics_ai/inference.py +0 -2
  217. luminarycloud/physics_ai/models.py +44 -15
  218. luminarycloud/project.py +54 -3
  219. luminarycloud/simulation_template.py +21 -6
  220. luminarycloud/solution.py +1 -1
  221. luminarycloud/types/__init__.py +2 -0
  222. luminarycloud/types/adfloat.py +50 -8
  223. luminarycloud/types/ids.py +2 -0
  224. luminarycloud/vis/__init__.py +12 -2
  225. luminarycloud/vis/data_extraction.py +546 -0
  226. luminarycloud/vis/display.py +61 -6
  227. luminarycloud/vis/filters.py +183 -42
  228. luminarycloud/vis/interactive_scene.py +1 -0
  229. luminarycloud/vis/primitives.py +38 -0
  230. luminarycloud/vis/vis_util.py +56 -0
  231. luminarycloud/vis/visualization.py +224 -70
  232. {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.4.dist-info}/METADATA +2 -1
  233. {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.4.dist-info}/RECORD +234 -228
  234. luminarycloud/_proto/luminarycloud/luminarycloud_api.pb +0 -0
  235. {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.4.dist-info}/WHEEL +0 -0
@@ -1,3 +1,4 @@
1
+ # Copyright 2023-2024 Luminary Cloud, Inc. All Rights Reserved.
1
2
  import dataclasses as dc
2
3
  import io
3
4
  import json
@@ -7,7 +8,6 @@ from time import sleep, time
7
8
  from typing import Dict, List, Tuple, cast
8
9
 
9
10
  import luminarycloud._proto.api.v0.luminarycloud.common.common_pb2 as common_pb2
10
- import requests
11
11
  from luminarycloud.params.simulation.physics.fluid.boundary_conditions import Farfield
12
12
  from luminarycloud.types import Vector3, Vector3Like
13
13
 
@@ -15,6 +15,7 @@ from .._client import get_default_client
15
15
  from .._helpers._get_project_id import _get_project_id
16
16
  from .._proto.quantity import quantity_pb2 as quantitypb
17
17
  from .._proto.api.v0.luminarycloud.vis import vis_pb2
18
+ from ..types import SimulationID, MeshID
18
19
  from luminarycloud.enum import (
19
20
  CameraDirection,
20
21
  CameraProjection,
@@ -22,6 +23,9 @@ from luminarycloud.enum import (
22
23
  EntityType,
23
24
  SceneMode,
24
25
  VisQuantity,
26
+ FieldComponent,
27
+ Representation,
28
+ ColorMapPreset,
25
29
  )
26
30
  from ..exceptions import NotFoundError
27
31
  from ..geometry import Geometry, get_geometry
@@ -29,9 +33,22 @@ from ..mesh import Mesh, get_mesh, get_mesh_metadata
29
33
  from ..simulation import get_simulation
30
34
  from ..solution import Solution
31
35
  from ..types.vector3 import _to_vector3
32
- from .display import ColorMap, ColorMapAppearance, DisplayAttributes, Field
33
- from .filters import BoxClip, Filter, PlaneClip, Slice, SurfaceStreamlines, SurfaceLIC
36
+ from .display import ColorMap, ColorMapAppearance, DisplayAttributes, Field, DataRange
37
+ from .filters import (
38
+ BoxClip,
39
+ Filter,
40
+ PlaneClip,
41
+ Slice,
42
+ SurfaceStreamlines,
43
+ SurfaceLIC,
44
+ Threshold,
45
+ RakeStreamlines,
46
+ ScaledVectorGlyphs,
47
+ FixedSizeVectorGlyphs,
48
+ Isosurface,
49
+ )
34
50
  from .interactive_scene import InteractiveScene
51
+ from .vis_util import _InternalToken, _download_file, _get_status
35
52
 
36
53
  logger = logging.getLogger(__name__)
37
54
 
@@ -71,6 +88,18 @@ class DirectionalCamera:
71
88
  1.0
72
89
  """
73
90
 
91
+ def _from_proto(self, static_ani: vis_pb2.AnimationSettingsStatic) -> None:
92
+ """Populate this DirectionalCamera from a proto static animation property."""
93
+ c_typ = static_ani.camera.WhichOneof("specification")
94
+ if c_typ != "direction":
95
+ raise TypeError(f"Expected 'direction' camera type, got {c_typ}. ")
96
+ self.label = static_ani.label if static_ani.label else ""
97
+ self.direction = CameraDirection(static_ani.camera.direction)
98
+ self.zoom_in = static_ani.camera.zoom
99
+ self.width = static_ani.resolution.width
100
+ self.height = static_ani.resolution.height
101
+ self.projection = CameraProjection(static_ani.camera.projection)
102
+
74
103
 
75
104
  @dc.dataclass
76
105
  class LookAtCamera:
@@ -112,11 +141,23 @@ class LookAtCamera:
112
141
  scene where pan is used (i.e., control + middle mouse).
113
142
  """
114
143
 
115
-
116
- class _InternalToken:
117
- """Marker class to control instantiation access for RenderOutput."""
118
-
119
- pass
144
+ def _from_proto(self, static_ani: vis_pb2.AnimationSettingsStatic) -> None:
145
+ """Populate this LookAtCamera from a proto static animation property."""
146
+ c_typ = static_ani.camera.WhichOneof("specification")
147
+ if c_typ != "look_at":
148
+ raise TypeError(f"Expected 'look_at' camera type, got {c_typ}. ")
149
+ self.label = static_ani.label if static_ani.label else ""
150
+ self.position = Vector3()
151
+ self.position._from_proto(static_ani.camera.look_at.position)
152
+ self.up = Vector3()
153
+ self.up._from_proto(static_ani.camera.look_at.up)
154
+ self.look_at = Vector3()
155
+ self.look_at._from_proto(static_ani.camera.look_at.look_at)
156
+ self.pan_x = static_ani.camera.look_at.pan.x
157
+ self.pan_y = static_ani.camera.look_at.pan.y
158
+ self.width = static_ani.resolution.width
159
+ self.height = static_ani.resolution.height
160
+ self.projection = CameraProjection(static_ani.camera.projection)
120
161
 
121
162
 
122
163
  class RenderOutput:
@@ -180,8 +221,7 @@ class RenderOutput:
180
221
  self
181
222
  """
182
223
  self._fail_if_deleted()
183
- render = get_render(self._project_id, self._extract_id)
184
- self.status = render.status
224
+ self.status = _get_status(self._project_id, self._extract_id)
185
225
  return self
186
226
 
187
227
  def wait(
@@ -239,23 +279,12 @@ class RenderOutput:
239
279
  req.project_id = self._project_id
240
280
  res: vis_pb2.DownloadExtractResponse = get_default_client().DownloadExtract(req)
241
281
 
242
- buffers: List[Tuple["io.BytesIO", str]] = []
243
- assert len(res.files) == len(res.labels)
244
- for output, label in zip(res.files, res.labels):
245
- buffer = io.BytesIO()
246
- if output.signed_url:
247
- response = requests.get(output.signed_url, stream=True)
248
- response.raise_for_status()
249
- for chunk in response.iter_content(chunk_size=8192):
250
- buffer.write(chunk)
251
- elif output.full_contents:
252
- buffer.write(output.full_contents)
253
- else:
254
- raise Exception("download_image respose contains no data.")
255
- # Reset buffer position to the beginning for reading
256
- buffer.seek(0)
257
- buffers.append((buffer, label))
258
- return buffers
282
+ image_buffers: List[Tuple["io.BytesIO", str]] = []
283
+ assert len(res.images.files) == len(res.images.labels)
284
+ for output, label in zip(res.images.files, res.images.labels):
285
+ buffer = _download_file(output)
286
+ image_buffers.append((buffer, label))
287
+ return image_buffers
259
288
 
260
289
  def save_images(self, file_prefix: str, write_labels: bool = False) -> None:
261
290
  """
@@ -445,12 +474,26 @@ class Scene:
445
474
 
446
475
  def hide_far_field(self) -> None:
447
476
  """
448
- Hide all far fields surfaces based on simulation parameters. Will work
449
- if the entity is a simulation.
477
+ Hide all far fields surfaces based on simulation parameters. Will only work
478
+ if the entity is a simulation, otherwise it will raise an error.
450
479
  """
451
480
 
481
+ if self._entity_type != EntityType.SIMULATION:
482
+ raise ValueError(
483
+ "hide_far_field: This method only works with solutions, not meshes or geometries."
484
+ )
485
+
452
486
  for boundary_id in self._far_field_boundary_ids:
453
- self.surface_visibility(boundary_id, False)
487
+ if boundary_id in self._surface_ids:
488
+ self.surface_visibility(boundary_id, False)
489
+ elif boundary_id in self._tag_ids:
490
+ self.tag_visibility(boundary_id, False)
491
+ else:
492
+ # This should not happen, but if it does, we raise an error.
493
+ raise ValueError(
494
+ f"Internal Error: Boundary id {boundary_id} not found in surface ids {self._surface_ids} "
495
+ f"or tag ids {self._tag_ids}"
496
+ )
454
497
 
455
498
  def surface_ids(self) -> List[str]:
456
499
  """Get a list of all the surface ids associated with the mesh."""
@@ -484,6 +527,7 @@ class Scene:
484
527
  if not tag_id in self._tag_ids:
485
528
  raise ValueError(f"Id {tag_id} not a known tag id {self._tag_ids}")
486
529
  self._surface_visibilities[tag_id] = visible
530
+ # TODO(matt): unroll the tags for the interactive scene.
487
531
 
488
532
  def add_filter(self, filter: Filter) -> None:
489
533
  """
@@ -588,16 +632,7 @@ class Scene:
588
632
  static.resolution.height = camera.height
589
633
  req.spec.animation_properties.statics.items.append(static)
590
634
 
591
- req.spec.global_display_attributes.visible = self.global_display_attrs.visible
592
- req.spec.global_display_attributes.representation = (
593
- self.global_display_attrs.representation.value
594
- )
595
- req.spec.global_display_attributes.field.component = (
596
- self.global_display_attrs.field.component.value
597
- )
598
- req.spec.global_display_attributes.field.quantity_typ = (
599
- self.global_display_attrs.field.quantity.value
600
- )
635
+ req.spec.global_display_attributes.CopyFrom(self.global_display_attrs._to_proto())
601
636
 
602
637
  for id, visible in self._surface_visibilities.items():
603
638
  attrs = vis_pb2.DisplayAttributes()
@@ -654,7 +689,7 @@ class Scene:
654
689
 
655
690
  # Add the automated color maps if enabled. If we don't specify them
656
691
  # in the proto, the annotations will not appear in the image.
657
- if self.auto_color_map_annotations:
692
+ if self.auto_color_map_annotations and self._entity_type == EntityType.SIMULATION:
658
693
  auto_cmaps: List[ColorMap] = []
659
694
  for field in cmap_fields:
660
695
  found = False
@@ -824,35 +859,6 @@ class Scene:
824
859
  return cloned
825
860
 
826
861
 
827
- def get_render(project_id: str, extract_id: str) -> RenderOutput:
828
- """
829
- Get a previously created set of render outputs by project and extract id.
830
-
831
- .. warning:: This feature is experimental and may change or be removed in the future.
832
-
833
- Parameters
834
- ----------
835
- project_id : str
836
- The project id to of the extract.
837
- extract_id: str
838
- The id to of the extract.
839
-
840
- """
841
- req = vis_pb2.GetExtractRequest()
842
- req.extract_id = extract_id
843
- req.project_id = project_id
844
- res: vis_pb2.GetExtractResponse = get_default_client().GetExtract(req)
845
- render_output = RenderOutput(_InternalToken())
846
- render_output._set_data(
847
- extract_id=extract_id,
848
- project_id=project_id,
849
- name=res.extract.name,
850
- desciption=res.extract.description,
851
- status=RenderStatusType(res.extract.status),
852
- )
853
- return render_output
854
-
855
-
856
862
  def list_quantities(solution: Solution) -> List[VisQuantity]:
857
863
  """
858
864
  List the quantity types, including derived quantities, that are available in
@@ -927,6 +933,8 @@ def list_renders(entity: Geometry | Mesh | Solution) -> List[RenderOutput]:
927
933
  else:
928
934
  raise ValueError(f"Unknown entity type: '{entity_type}' ")
929
935
 
936
+ # We are requesting images not data
937
+ req.data_only = False
930
938
  res: vis_pb2.ListExtractsResponse = get_default_client().ListExtracts(req)
931
939
 
932
940
  results: List[RenderOutput] = []
@@ -944,3 +952,149 @@ def list_renders(entity: Geometry | Mesh | Solution) -> List[RenderOutput]:
944
952
  results.append(result)
945
953
 
946
954
  return results
955
+
956
+
957
+ def _reconstruct(extract_id: str, project_id: str) -> Scene:
958
+ """
959
+ This function reconstructs a scene from an extract id and project id. The
960
+ resulting scene should produce an identical image to the one that was
961
+ originally rendered. The main use case for this function is to support code
962
+ generation. Note: the scene will render the same image, but the might not
963
+ contain the exact same settings. For example, we auto-generate color maps
964
+ for all fields used in the global and filter display attributes by default.
965
+ When we get the extract back, we don't know if it was auto-generated or not.
966
+ Thus, the resulting color maps will be much more verbose than the original.
967
+ """
968
+ req = vis_pb2.GetExtractRequest()
969
+ req.extract_id = extract_id
970
+ req.project_id = project_id
971
+ res: vis_pb2.GetExtractSpecResponse = get_default_client().GetExtractSpec(req)
972
+ if res.spec.data_only:
973
+ raise ValueError("Error: cannot reconstruct a scene from a data only extract")
974
+
975
+ entity = res.spec.entity_type.WhichOneof("entity")
976
+ if entity == "geometry":
977
+ geom = get_geometry(res.spec.entity_type.geometry.id)
978
+ scene = Scene(geom)
979
+ elif entity == "mesh":
980
+ mesh_id = MeshID(res.spec.entity_type.mesh.id)
981
+ mesh = get_mesh(mesh_id)
982
+ scene = Scene(mesh)
983
+ elif entity == "simulation":
984
+ sim_id = SimulationID(res.spec.entity_type.simulation.id)
985
+ sim = get_simulation(sim_id)
986
+ sols = sim.list_solutions()
987
+ found = False
988
+ for sol in sols:
989
+ if sol.id == res.spec.entity_type.simulation.solution_id:
990
+ scene = Scene(sol)
991
+ found = True
992
+ break
993
+ if not found:
994
+ raise ValueError(f"Error: could not find the solution")
995
+ else:
996
+ raise ValueError(f"Error: could not resolve entity type")
997
+
998
+ try:
999
+ _ = scene # check to see if this is bound
1000
+ except NameError:
1001
+ raise ValueError(f"Error: could not create scene from entity")
1002
+
1003
+ # keep track of filter ids so we connect them later and keep track of
1004
+ # surface and tag visibilties.
1005
+ filter_ids: List[str] = []
1006
+ for filter in res.spec.filters:
1007
+ filter_ids.append(filter.id)
1008
+ typ = filter.WhichOneof("value")
1009
+ pfilter: Filter | None = None
1010
+ if typ == "clip":
1011
+ c_typ = filter.clip.WhichOneof("clip_function")
1012
+ if c_typ == "box":
1013
+ pfilter = BoxClip("")
1014
+ else:
1015
+ pfilter = PlaneClip("")
1016
+ elif typ == "slice":
1017
+ pfilter = Slice("")
1018
+ elif typ == "streamlines":
1019
+ s_typ = filter.streamlines.WhichOneof("seed_type")
1020
+ if s_typ == "surface":
1021
+ pfilter = SurfaceStreamlines("")
1022
+ elif s_typ == "rake":
1023
+ pfilter = RakeStreamlines("")
1024
+ else:
1025
+ raise ValueError(f"Error: unsupported streamlines seed type {s_typ}")
1026
+ elif typ == "glyph":
1027
+ g_typ = filter.glyph.WhichOneof("glyph_size")
1028
+ if g_typ == "fixed_size_glyphs":
1029
+ pfilter = FixedSizeVectorGlyphs("")
1030
+ else:
1031
+ pfilter = ScaledVectorGlyphs("")
1032
+ elif typ == "surface_lic":
1033
+ pfilter = SurfaceLIC("")
1034
+ elif typ == "threshold":
1035
+ pfilter = Threshold("")
1036
+ elif typ == "contour":
1037
+ pfilter = Isosurface("")
1038
+ else:
1039
+ raise ValueError(f"Error: unknown filter type {typ}")
1040
+
1041
+ assert pfilter is not None, "Internal error: filter type not set"
1042
+ pfilter._from_proto(filter)
1043
+ # Set the display attributes
1044
+ pattrs = DisplayAttributes()
1045
+ attrs = res.spec.display_attributes[pfilter.id]
1046
+ assert attrs is not None, "Internal error: display attributes not set"
1047
+ pfilter.display_attrs._from_proto(attrs)
1048
+ scene.add_filter(pfilter)
1049
+
1050
+ # Connect filters to their parents.
1051
+ for parent_id, children in res.spec.filter_connections.items():
1052
+ parent_filter = next((f for f in scene._filters if f.id == parent_id), None)
1053
+ if parent_filter is not None:
1054
+ for child_id in children.children_id:
1055
+ child_filter = next((f for f in scene._filters if f.id == child_id), None)
1056
+ if child_filter is not None:
1057
+ child_filter.set_parent(parent_filter)
1058
+ else:
1059
+ raise ValueError(
1060
+ f"Error: child filter {child_id} not found in the scene filters"
1061
+ )
1062
+ else:
1063
+ raise ValueError(f"Error: parent filter {parent_id} not found in the scene filters")
1064
+
1065
+ # scene attributes
1066
+ scene.supersampling = res.spec.supersampling_ratio
1067
+ scene.triad_visible = res.spec.triad_properties.visible
1068
+ scene.axes_grid_visible = res.spec.axes_grid_properties.visible
1069
+ scene.background_color = Vector3(
1070
+ x=res.spec.background_properties.color.r,
1071
+ y=res.spec.background_properties.color.g,
1072
+ z=res.spec.background_properties.color.b,
1073
+ )
1074
+ scene.global_display_attrs._from_proto(res.spec.global_display_attributes)
1075
+
1076
+ for id, attrs in res.spec.display_attributes.items():
1077
+ if id in filter_ids:
1078
+ continue # Skip filters, we already processed them.
1079
+ if id in scene._surface_ids or id in scene._tag_ids:
1080
+ # We only use visible or not for surfaces. The rest of the
1081
+ # attributes are set in the global display attributes.
1082
+ scene._surface_visibilities[id] = attrs.visible
1083
+
1084
+ for static_ani in res.spec.animation_properties.statics.items:
1085
+ cam_typ = static_ani.camera.WhichOneof("specification")
1086
+ if cam_typ == "direction":
1087
+ cam = DirectionalCamera()
1088
+ cam._from_proto(static_ani)
1089
+ scene.add_camera(cam)
1090
+ else:
1091
+ l_cam = LookAtCamera()
1092
+ l_cam._from_proto(static_ani)
1093
+ scene.add_camera(l_cam)
1094
+
1095
+ # Add color maps
1096
+ for color_map in res.spec.color_maps:
1097
+ cmap = ColorMap()
1098
+ cmap._from_proto(color_map)
1099
+ scene.add_color_map(cmap)
1100
+ return scene
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luminarycloud
3
- Version: 0.15.3
3
+ Version: 0.15.4
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/
@@ -28,6 +28,7 @@ Requires-Dist: pyyaml~=6.0.2
28
28
  Requires-Dist: requests~=2.28
29
29
  Requires-Dist: waitress~=3.0.1
30
30
  Requires-Dist: werkzeug~=3.0.1
31
+ Requires-Dist: zstandard
31
32
  Provides-Extra: jupyter
32
33
  Requires-Dist: luminarycloud-jupyter; extra == 'jupyter'
33
34
  Description-Content-Type: text/markdown