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
luminarycloud/project.py CHANGED
@@ -1,6 +1,7 @@
1
1
  # Copyright 2023-2024 Luminary Cloud, Inc. All Rights Reserved.
2
2
  from __future__ import annotations
3
3
 
4
+ import logging
4
5
  import re
5
6
  import uuid
6
7
  from datetime import datetime
@@ -45,7 +46,8 @@ from .enum import GPUType, MeshType, TableType
45
46
  from .meshing import MeshAdaptationParams, MeshGenerationParams
46
47
  from .simulation_param import SimulationParam
47
48
  from .tables import RectilinearTable, create_rectilinear_table
48
- from .types import MeshID, ProjectID, SimulationTemplateID
49
+ from .types import MeshID, ProjectID, SimulationTemplateID, NamedVariableSetID, Expression, LcFloat
50
+ from .named_variable_set import get_named_variable_set
49
51
 
50
52
  if TYPE_CHECKING:
51
53
  from .geometry import Geometry
@@ -482,6 +484,7 @@ class Project(ProtoWrapperBase):
482
484
  name: str,
483
485
  simulation_template_id: str,
484
486
  *,
487
+ _named_variable_set_id: Optional[NamedVariableSetID] = None,
485
488
  description: str = "",
486
489
  batch_processing: bool = True,
487
490
  gpu_type: Optional[GPUType] = None,
@@ -514,12 +517,19 @@ class Project(ProtoWrapperBase):
514
517
  Number of GPUs to use for the simulation. Must be specified to a
515
518
  positive value if `gpu_type` is specified.
516
519
  """
520
+
521
+ named_variable_set_version_id: Optional[str] = None
522
+ if _named_variable_set_id is not None:
523
+ named_variable_set = get_named_variable_set(_named_variable_set_id)
524
+ named_variable_set_version_id = named_variable_set._version_id
525
+
517
526
  _simulation = create_simulation(
518
527
  get_default_client(),
519
528
  self.id,
520
529
  mesh_id,
521
530
  name,
522
531
  simulation_template_id,
532
+ named_variable_set_version_id=named_variable_set_version_id,
523
533
  description=description,
524
534
  batch_processing=batch_processing,
525
535
  gpu_type=gpu_type,
@@ -550,7 +560,7 @@ class Project(ProtoWrapperBase):
550
560
  *,
551
561
  parameters: Optional[SimulationParam] = None,
552
562
  params_json_path: Optional[PathLike | str] = None,
553
- copy_from: Optional["SimulationTemplate" | SimulationTemplateID | str] = None,
563
+ copy_from: "Optional[SimulationTemplate | SimulationTemplateID | str]" = None,
554
564
  ) -> "SimulationTemplate":
555
565
  """
556
566
  Create a new simulation template object.
@@ -600,7 +610,7 @@ class Project(ProtoWrapperBase):
600
610
 
601
611
  @experimental
602
612
  def create_named_variable_set(
603
- self, name: str, named_variables: dict[str, float | str]
613
+ self, name: str, named_variables: dict[str, LcFloat]
604
614
  ) -> NamedVariableSet:
605
615
  """
606
616
  Create a new named variable set.
@@ -626,6 +636,47 @@ class Project(ProtoWrapperBase):
626
636
  return [lc.NamedVariableSet(n) for n in res.named_variable_sets]
627
637
 
628
638
 
639
+ @experimental
640
+ def add_named_variables_from_csv(project: Project, csv_path: str) -> list[NamedVariableSet]:
641
+ """
642
+ This function reads named variables from a CSV file and creates corresponding NamedVariableSets in the given project.
643
+ The CSV file should have the following format:
644
+ name, var1, var2, ...
645
+ name1, val1, val2, ...
646
+ name2, val1, val2, ...
647
+ """
648
+ import csv
649
+
650
+ def is_float(s: str) -> bool:
651
+ try:
652
+ float(s)
653
+ return True
654
+ except ValueError:
655
+ return False
656
+
657
+ named_variable_sets = []
658
+ with open(csv_path) as csvfile:
659
+ reader = csv.reader(csvfile)
660
+ header = next(reader)
661
+ keys = [k.strip() for k in header[1:]]
662
+ for row in reader:
663
+ if len(row) != len(keys) + 1:
664
+ logging.warning(
665
+ f"Skipping row {row} because it has the wrong number of columns ({len(row)} instead of {len(keys) + 1})"
666
+ )
667
+ continue
668
+ name = row[0]
669
+ named_variables: dict[str, LcFloat] = {
670
+ k: float(v.strip()) if is_float(v.strip()) else Expression(v.strip())
671
+ for k, v in zip(keys, row[1:])
672
+ }
673
+ named_variable_sets.append(
674
+ project.create_named_variable_set(name=name, named_variables=named_variables)
675
+ )
676
+ logging.info(f"Created named variable set {name} with {len(named_variables)} variables")
677
+ return named_variable_sets
678
+
679
+
629
680
  def create_project(
630
681
  name: str,
631
682
  description: str = "",
@@ -2,7 +2,7 @@
2
2
  from datetime import datetime
3
3
  from os import PathLike
4
4
  from copy import deepcopy
5
- from typing import Optional, Union, overload
5
+ from typing import Optional, overload
6
6
  from difflib import Differ
7
7
 
8
8
  from .enum import (
@@ -76,6 +76,7 @@ class SimulationTemplate(ProtoWrapperBase):
76
76
  *,
77
77
  name: Optional[str] = None,
78
78
  parameters: Optional[SimulationParam | PathLike] = None,
79
+ copy_from: "Optional[SimulationTemplate | SimulationTemplateID | str]" = None,
79
80
  ) -> None:
80
81
  """
81
82
  Update simulation template.
@@ -84,19 +85,23 @@ class SimulationTemplate(ProtoWrapperBase):
84
85
  ----------
85
86
  name : str, optional
86
87
  New project name.
87
- parameters : SimulationParam or PathLike
88
+ parameters : SimulationParam or PathLike, optional
88
89
  New complete simulation parameters object or path to local JSON file containing
89
90
  simulation parameters. In the former case, the input argument is modified to reflect
90
91
  changes applied by the backend (server), for example due to presets. Any differences
91
92
  between input and result are printed on screen.
93
+ copy_from : SimulationTemplate or SimulationTemplateID or str, optional
94
+ Simulation template to copy. If provided, it will be deep-copied into this simulation
95
+ template. Can pass a SimulationTemplate object or an ID of the template to copy.
92
96
  """
93
- return self._update(name=name, parameters=parameters)
97
+ return self._update(name=name, parameters=parameters, copy_from=copy_from)
94
98
 
95
99
  def _update(
96
100
  self,
97
101
  *,
98
102
  name: Optional[str] = None,
99
103
  parameters: Optional[SimulationParam | clientpb.SimulationParam | PathLike] = None,
104
+ copy_from: "Optional[SimulationTemplate | SimulationTemplateID | str]" = None,
100
105
  ) -> None:
101
106
  """
102
107
  Update simulation template. See `update()` for more details.
@@ -124,21 +129,31 @@ class SimulationTemplate(ProtoWrapperBase):
124
129
 
125
130
  req.parameters.CopyFrom(param_proto)
126
131
 
132
+ if copy_from is not None:
133
+ if isinstance(copy_from, SimulationTemplate):
134
+ req.copy_from = copy_from.id
135
+ elif isinstance(copy_from, str):
136
+ req.copy_from = copy_from
137
+ else:
138
+ raise ValueError(f"Invalid copy_from argument: {copy_from}")
139
+
127
140
  res: simtemplatepb.UpdateSimulationTemplateResponse = (
128
141
  get_default_client().UpdateSimulationTemplate(req)
129
142
  )
130
143
  self._proto = res.simulation_template
131
144
 
132
145
  def print_diff(
133
- old: Union[clientpb.SimulationParam, SimulationParam],
134
- new: Union[clientpb.SimulationParam, SimulationParam],
146
+ old: clientpb.SimulationParam | SimulationParam,
147
+ new: clientpb.SimulationParam | SimulationParam,
135
148
  ) -> None:
136
149
  diffs = list(Differ().compare(str(old).split("\n"), str(new).split("\n")))
137
150
  has_diffs = False
138
151
  for diff in diffs:
139
152
  if diff.startswith("-") or diff.startswith("+"):
140
153
  if not has_diffs:
141
- print("The input parameters have been modified:\n")
154
+ print(
155
+ "The given parameters have been modified, both in memory and server-side, due to presets. The modifications:\n"
156
+ )
142
157
  has_diffs = True
143
158
  print(diff)
144
159
 
luminarycloud/solution.py CHANGED
@@ -38,7 +38,7 @@ class Solution(ProtoWrapperBase):
38
38
  "Solution ID."
39
39
  simulation_id: SimulationID
40
40
  "Simulation ID of parent"
41
- iteration: str
41
+ iteration: int
42
42
  "Iteration index of the solution."
43
43
  physical_time: float
44
44
  "The physical time, in seconds, of the solution iteration (for transient simulations)."
@@ -12,6 +12,8 @@ from .ids import (
12
12
  from .adfloat import (
13
13
  FirstOrderAdFloat as FirstOrderAdFloat,
14
14
  SecondOrderAdFloat as SecondOrderAdFloat,
15
+ Expression as Expression,
16
+ LcFloat as LcFloat,
15
17
  )
16
18
  from .vector3 import (
17
19
  Vector3 as Vector3,
@@ -1,10 +1,10 @@
1
1
  from abc import ABCMeta
2
- from typing import Any
3
- from .._proto.base.base_pb2 import AdFloatType, FirstOrderAdType, SecondOrderAdType
2
+ from typing import Any, Union
3
+ from .._proto.base.base_pb2 import AdFloatType, ExpressionType, FirstOrderAdType, SecondOrderAdType
4
4
 
5
5
 
6
6
  class AdFloat(float, metaclass=ABCMeta):
7
- """An immutable float with adjoints/tangents"""
7
+ """An immutable float with adjoints/tangents or an expression"""
8
8
 
9
9
  pass
10
10
 
@@ -110,8 +110,47 @@ class SecondOrderAdFloat(AdFloat):
110
110
  )
111
111
 
112
112
 
113
- def _to_ad_proto(value: float) -> AdFloatType:
114
- """Convert a float to an AdFloatType proto."""
113
+ class Expression:
114
+ """An expression or value that can be evaluated or used in evaluations."""
115
+
116
+ _value: float
117
+ _expression: str
118
+
119
+ def __init__(self, expression: str):
120
+ if not expression:
121
+ raise ValueError("Expression cannot be empty")
122
+ self._value = 0.0
123
+ self._expression = expression
124
+
125
+ @property
126
+ def expression(self) -> str:
127
+ return self._expression
128
+
129
+ @property
130
+ def value(self) -> float:
131
+ return self._value
132
+
133
+ def _to_proto(self) -> AdFloatType:
134
+ return AdFloatType(variable=ExpressionType(value=self.value, expression=self.expression))
135
+
136
+ @staticmethod
137
+ def _from_proto(proto: AdFloatType) -> "Expression":
138
+ expr = object.__new__(Expression) # Create a new instance without calling __init__
139
+ expr._value = proto.variable.value
140
+ expr._expression = proto.variable.expression
141
+ return expr
142
+
143
+ def __eq__(self, other: Any) -> bool:
144
+ if not isinstance(other, Expression):
145
+ return False
146
+ return self._value == other._value and self._expression == other._expression
147
+
148
+
149
+ LcFloat = Union[float, FirstOrderAdFloat, SecondOrderAdFloat, Expression]
150
+
151
+
152
+ def _to_ad_proto(value: LcFloat) -> AdFloatType:
153
+ """Convert an LcFloat to an AdFloatType proto."""
115
154
  if isinstance(value, FirstOrderAdFloat):
116
155
  return AdFloatType(
117
156
  first_order=FirstOrderAdType(
@@ -128,18 +167,21 @@ def _to_ad_proto(value: float) -> AdFloatType:
128
167
  adjoint=[_to_ad_proto(a).first_order for a in value.adjoint],
129
168
  )
130
169
  )
170
+ elif isinstance(value, Expression):
171
+ return value._to_proto()
131
172
  return AdFloatType(value=float(value))
132
173
 
133
174
 
134
- def _from_ad_proto(proto: AdFloatType) -> float:
135
- """Convert an AdFloatType proto to a float."""
175
+ def _from_ad_proto(proto: AdFloatType) -> LcFloat:
176
+ """Convert an AdFloatType proto to an LcFloat."""
136
177
  if proto.HasField("first_order"):
137
178
  return FirstOrderAdFloat._from_proto(proto.first_order)
138
179
  elif proto.HasField("second_order"):
139
180
  return SecondOrderAdFloat._from_proto(proto.second_order)
140
181
  elif proto.HasField("value"):
141
182
  return float(proto.value)
142
-
183
+ elif proto.HasField("variable"):
184
+ return Expression._from_proto(proto)
143
185
  # An empty proto evaluates to 0.0
144
186
  if not proto.ListFields():
145
187
  return 0.0
@@ -10,4 +10,6 @@ SimulationTemplateID = NewType("SimulationTemplateID", str)
10
10
  GeometryFeatureID = NewType("GeometryFeatureID", str)
11
11
  NamedVariableSetID = NewType("NamedVariableSetID", str)
12
12
  PhysicsAiArchitectureID = NewType("PhysicsAiArchitectureID", str)
13
+ PhysicsAiArchitectureVersionID = NewType("PhysicsAiArchitectureVersionID", str)
13
14
  PhysicsAiModelID = NewType("PhysicsAiModelID", str)
15
+ PhysicsAiModelVersionID = NewType("PhysicsAiModelVersionID", str)
@@ -8,12 +8,15 @@ from .visualization import (
8
8
  LookAtCamera as LookAtCamera,
9
9
  )
10
10
 
11
+ from .primitives import (
12
+ Plane as Plane,
13
+ Box as Box,
14
+ )
15
+
11
16
  from .filters import (
12
17
  Slice as Slice,
13
18
  PlaneClip as PlaneClip,
14
19
  BoxClip as BoxClip,
15
- Plane as Plane,
16
- Box as Box,
17
20
  FixedSizeVectorGlyphs as FixedSizeVectorGlyphs,
18
21
  ScaledVectorGlyphs as ScaledVectorGlyphs,
19
22
  RakeStreamlines as RakeStreamlines,
@@ -23,6 +26,13 @@ from .filters import (
23
26
  Isosurface as Isosurface,
24
27
  )
25
28
 
29
+ from .data_extraction import (
30
+ IntersectionCurve as IntersectionCurve,
31
+ DataExtractor as DataExtractor,
32
+ ExtractOutput as ExtractOutput,
33
+ list_data_extracts as list_data_extracts,
34
+ )
35
+
26
36
  from .display import (
27
37
  Field as Field,
28
38
  DataRange as DataRange,