luminarycloud 0.15.3__py3-none-any.whl → 0.15.5__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 (242) hide show
  1. luminarycloud/__init__.py +1 -0
  2. luminarycloud/_helpers/_create_geometry.py +36 -17
  3. luminarycloud/_helpers/_create_simulation.py +2 -0
  4. luminarycloud/_helpers/_entity_identifier.py +6 -0
  5. luminarycloud/_helpers/named_variables.py +6 -15
  6. luminarycloud/_helpers/warnings/experimental.py +6 -2
  7. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +77 -55
  8. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +34 -2
  9. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +33 -0
  10. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +10 -0
  11. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +45 -15
  12. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +104 -22
  13. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +12 -12
  14. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +10 -2
  15. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py +27 -105
  16. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi +24 -173
  17. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py +17 -113
  18. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi +16 -44
  19. luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2.py +4 -2
  20. luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2_grpc.py +37 -0
  21. luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2_grpc.pyi +20 -0
  22. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +221 -143
  23. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +154 -7
  24. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py +33 -0
  25. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi +10 -0
  26. luminarycloud/_proto/assistant/assistant_pb2.py +62 -61
  27. luminarycloud/_proto/client/simulation_pb2.py +349 -309
  28. luminarycloud/_proto/client/simulation_pb2.pyi +97 -2
  29. luminarycloud/_proto/fvm/solver_results_pb2.py +25 -11
  30. luminarycloud/_proto/fvm/solver_results_pb2.pyi +24 -1
  31. luminarycloud/_proto/geometry/geometry_pb2.py +63 -64
  32. luminarycloud/_proto/namedvariableset/namedvariableset_pb2.py +49 -0
  33. luminarycloud/_proto/namedvariableset/namedvariableset_pb2.pyi +53 -0
  34. luminarycloud/_proto/upload/upload_pb2.py +27 -7
  35. luminarycloud/_proto/upload/upload_pb2.pyi +31 -0
  36. luminarycloud/_wrapper.py +26 -7
  37. luminarycloud/enum/__init__.py +2 -0
  38. luminarycloud/enum/physics_ai_lifecycle_state.py +30 -0
  39. luminarycloud/enum/quantity_type.py +43 -0
  40. luminarycloud/enum/vis_enums.py +6 -2
  41. luminarycloud/geometry.py +46 -2
  42. luminarycloud/named_variable_set.py +10 -5
  43. luminarycloud/params/enum/_enum_wrappers.py +68 -0
  44. luminarycloud/params/simulation/_lib.py +1 -1
  45. luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +5 -6
  46. luminarycloud/params/simulation/adaptive_mesh_refinement_.py +6 -7
  47. luminarycloud/params/simulation/adjoint_.py +3 -4
  48. luminarycloud/params/simulation/basic/gravity/gravity_off_.py +3 -4
  49. luminarycloud/params/simulation/basic/gravity/gravity_on_.py +3 -4
  50. luminarycloud/params/simulation/basic/gravity_.py +3 -4
  51. luminarycloud/params/simulation/body_frame_.py +3 -4
  52. luminarycloud/params/simulation/entity_relationships/volume_material_relationship_.py +9 -6
  53. luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py +9 -6
  54. luminarycloud/params/simulation/entity_relationships_.py +3 -4
  55. luminarycloud/params/simulation/general_.py +3 -4
  56. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_off_.py +3 -4
  57. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_on_.py +5 -6
  58. luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py +3 -4
  59. luminarycloud/params/simulation/material/fluid/material_model/ideal_gas_.py +5 -6
  60. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_.py +4 -5
  61. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_with_energy_.py +5 -6
  62. luminarycloud/params/simulation/material/fluid/material_model_.py +3 -4
  63. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +4 -5
  64. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +4 -5
  65. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +3 -4
  66. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model_.py +3 -4
  67. luminarycloud/params/simulation/material/fluid/viscosity_model/prescribed_viscosity_.py +4 -5
  68. luminarycloud/params/simulation/material/fluid/viscosity_model/sutherland_.py +6 -7
  69. luminarycloud/params/simulation/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +3 -4
  70. luminarycloud/params/simulation/material/fluid/viscosity_model_.py +3 -4
  71. luminarycloud/params/simulation/material/material_fluid_.py +4 -5
  72. luminarycloud/params/simulation/material/material_solid_.py +6 -7
  73. luminarycloud/params/simulation/material_entity_.py +6 -5
  74. luminarycloud/params/simulation/monitor_plane_.py +4 -5
  75. luminarycloud/params/simulation/motion_data/frame_transforms/no_transform_.py +3 -4
  76. luminarycloud/params/simulation/motion_data/frame_transforms/rotational_transform_.py +3 -4
  77. luminarycloud/params/simulation/motion_data/frame_transforms/translational_transform_.py +3 -4
  78. luminarycloud/params/simulation/motion_data/frame_transforms_.py +3 -4
  79. luminarycloud/params/simulation/motion_data/motion_type/constant_angular_motion_.py +3 -4
  80. luminarycloud/params/simulation/motion_data/motion_type/constant_translation_motion_.py +3 -4
  81. luminarycloud/params/simulation/motion_data/motion_type_.py +3 -4
  82. luminarycloud/params/simulation/motion_data_.py +3 -4
  83. luminarycloud/params/simulation/multi_physics_coupling_options_.py +3 -4
  84. luminarycloud/params/simulation/output_.py +3 -4
  85. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +3 -4
  86. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +3 -4
  87. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +3 -4
  88. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +5 -6
  89. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_line_.py +3 -4
  90. luminarycloud/params/simulation/particle_group/particle_group_type/probe_points_.py +3 -4
  91. luminarycloud/params/simulation/particle_group/particle_group_type/source_points_.py +3 -4
  92. luminarycloud/params/simulation/particle_group/particle_group_type_.py +3 -4
  93. luminarycloud/params/simulation/particle_group_.py +3 -4
  94. luminarycloud/params/simulation/physics/fluid/adjoint_controls_fluid_.py +4 -5
  95. luminarycloud/params/simulation/physics/fluid/basic_fluid_.py +3 -4
  96. luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +9 -10
  97. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +5 -6
  98. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +5 -6
  99. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +4 -5
  100. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +4 -5
  101. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +4 -5
  102. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +5 -6
  103. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +4 -5
  104. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +5 -6
  105. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +4 -5
  106. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +7 -8
  107. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +5 -6
  108. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +3 -4
  109. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet_.py +3 -4
  110. luminarycloud/params/simulation/physics/fluid/boundary_conditions/symmetry_.py +3 -4
  111. luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +9 -10
  112. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +4 -5
  113. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +4 -5
  114. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +4 -5
  115. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/slip_.py +3 -4
  116. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +4 -5
  117. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_energy_.py +3 -4
  118. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_momentum_.py +3 -4
  119. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall_.py +3 -4
  120. luminarycloud/params/simulation/physics/fluid/boundary_conditions_fluid_.py +3 -4
  121. luminarycloud/params/simulation/physics/fluid/initialization/fluid_existing_solution_.py +3 -4
  122. luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +3 -4
  123. luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +5 -6
  124. luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +9 -10
  125. luminarycloud/params/simulation/physics/fluid/initialization_fluid_.py +3 -4
  126. luminarycloud/params/simulation/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +4 -5
  127. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +3 -4
  128. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +6 -7
  129. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -5
  130. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +4 -5
  131. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +3 -4
  132. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +3 -4
  133. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +3 -4
  134. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +5 -6
  135. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +3 -4
  136. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -5
  137. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +3 -4
  138. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model_.py +3 -4
  139. luminarycloud/params/simulation/physics/fluid/physical_behavior_.py +3 -4
  140. luminarycloud/params/simulation/physics/fluid/porous_behavior_.py +4 -5
  141. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +3 -4
  142. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +3 -4
  143. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +4 -5
  144. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +3 -4
  145. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +9 -10
  146. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method_.py +3 -4
  147. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +4 -5
  148. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +4 -5
  149. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method_.py +3 -4
  150. luminarycloud/params/simulation/physics/fluid/solution_controls_fluid_.py +3 -4
  151. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +3 -4
  152. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/fds_.py +5 -6
  153. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +5 -6
  154. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +4 -5
  155. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_.py +3 -4
  156. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +3 -4
  157. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +8 -9
  158. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order_.py +3 -4
  159. luminarycloud/params/simulation/physics/fluid/spatial_discretization_fluid_.py +4 -5
  160. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_.py +3 -4
  161. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +3 -4
  162. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/iddes_.py +3 -4
  163. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation_.py +3 -4
  164. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +16 -17
  165. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +3 -4
  166. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +3 -4
  167. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst_.py +3 -4
  168. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +15 -16
  169. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +3 -4
  170. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +3 -4
  171. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras_.py +3 -4
  172. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +4 -5
  173. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +4 -5
  174. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +4 -5
  175. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +4 -5
  176. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +4 -5
  177. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model_.py +3 -4
  178. luminarycloud/params/simulation/physics/fluid/turbulence_.py +6 -7
  179. luminarycloud/params/simulation/physics/fluid_.py +8 -7
  180. luminarycloud/params/simulation/physics/heat/adjoint_controls_heat_.py +3 -4
  181. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_convection_.py +5 -6
  182. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +4 -5
  183. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +4 -5
  184. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_symmetry_.py +3 -4
  185. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_temperature_.py +4 -5
  186. luminarycloud/params/simulation/physics/heat/boundary_conditions_heat_.py +3 -4
  187. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +4 -5
  188. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +4 -5
  189. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type_.py +3 -4
  190. luminarycloud/params/simulation/physics/heat/heat_source_.py +3 -4
  191. luminarycloud/params/simulation/physics/heat/initialization/heat_existing_solution_.py +3 -4
  192. luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values_.py +4 -5
  193. luminarycloud/params/simulation/physics/heat/initialization_heat_.py +3 -4
  194. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +4 -5
  195. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +3 -4
  196. luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +4 -5
  197. luminarycloud/params/simulation/physics/heat/spatial_discretization_heat_.py +5 -6
  198. luminarycloud/params/simulation/physics/heat_.py +5 -5
  199. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +3 -4
  200. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/translational_periodicity_.py +3 -4
  201. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type_.py +3 -4
  202. luminarycloud/params/simulation/physics/periodic_pair_.py +3 -4
  203. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py +3 -4
  204. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/krylov_amg_.py +4 -5
  205. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type_.py +4 -5
  206. luminarycloud/params/simulation/physics_.py +6 -5
  207. luminarycloud/params/simulation/simulation_param_.py +3 -4
  208. luminarycloud/params/simulation/sliding_interfaces_.py +3 -4
  209. luminarycloud/params/simulation/surface_name_.py +3 -4
  210. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_off_.py +3 -4
  211. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_on_.py +3 -4
  212. luminarycloud/params/simulation/time/compute_statistics_.py +3 -4
  213. luminarycloud/params/simulation/time/time_marching/time_explicit_.py +3 -4
  214. luminarycloud/params/simulation/time/time_marching/time_implicit_.py +3 -4
  215. luminarycloud/params/simulation/time/time_marching_.py +3 -4
  216. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py +3 -4
  217. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py +4 -5
  218. luminarycloud/params/simulation/time/time_step_ramp_.py +3 -4
  219. luminarycloud/params/simulation/time_.py +4 -5
  220. luminarycloud/params/simulation/volume_entity_.py +6 -5
  221. luminarycloud/physics_ai/__init__.py +2 -0
  222. luminarycloud/physics_ai/architectures.py +42 -8
  223. luminarycloud/physics_ai/inference.py +0 -2
  224. luminarycloud/physics_ai/models.py +44 -15
  225. luminarycloud/project.py +54 -3
  226. luminarycloud/simulation_template.py +21 -6
  227. luminarycloud/solution.py +1 -1
  228. luminarycloud/types/__init__.py +2 -0
  229. luminarycloud/types/adfloat.py +50 -8
  230. luminarycloud/types/ids.py +2 -0
  231. luminarycloud/vis/__init__.py +12 -2
  232. luminarycloud/vis/data_extraction.py +546 -0
  233. luminarycloud/vis/display.py +61 -6
  234. luminarycloud/vis/filters.py +199 -43
  235. luminarycloud/vis/interactive_scene.py +1 -0
  236. luminarycloud/vis/primitives.py +38 -0
  237. luminarycloud/vis/vis_util.py +56 -0
  238. luminarycloud/vis/visualization.py +224 -70
  239. {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.5.dist-info}/METADATA +2 -1
  240. {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.5.dist-info}/RECORD +241 -235
  241. luminarycloud/_proto/luminarycloud/luminarycloud_api.pb +0 -0
  242. {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.5.dist-info}/WHEEL +0 -0
@@ -5,12 +5,11 @@ from dataclasses import dataclass, field
5
5
  from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
- from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
9
8
  from google.protobuf.message import Message as _Message
10
-
11
- from luminarycloud.tables import RectilinearTable
12
- from luminarycloud.types import Vector3
9
+ from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
10
+ from luminarycloud.types import Vector3, LcFloat
13
11
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
12
+ from luminarycloud._helpers._entity_identifier import _create_entity_identifier
14
13
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
14
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
15
  from luminarycloud._helpers import CodeRepr
@@ -5,12 +5,11 @@ from dataclasses import dataclass, field
5
5
  from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
- from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
9
8
  from google.protobuf.message import Message as _Message
10
-
11
- from luminarycloud.tables import RectilinearTable
12
- from luminarycloud.types import Vector3
9
+ from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
10
+ from luminarycloud.types import Vector3, LcFloat
13
11
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
12
+ from luminarycloud._helpers._entity_identifier import _create_entity_identifier
14
13
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
14
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
15
  from luminarycloud._helpers import CodeRepr
@@ -48,7 +47,7 @@ class Time(CodeRepr, ParamGroupWrapper[clientpb.Time]):
48
47
 
49
48
  time_marching: TimeMarching = field(default_factory=TimeImplicit)
50
49
  "Scheme for time-accurate integration. Possible types: ``TimeImplicit``, ``TimeExplicit`` from the ``time_marching`` module."
51
- time_step: float = 0.0001
50
+ time_step: LcFloat = 0.0001
52
51
  "The fixed physical time step."
53
52
  time_step_ramp: TimeStepRamp = field(default_factory=TimeStepRampOff)
54
53
  "Use a larger time step value during the initial transients of a simulation and then ramp linearly towards the target value, to accelerate statistical convergence. Only applicable to transient problems with time implicit integration (dual time stepping). Possible types: ``TimeStepRampOff``, ``TimeStepRampOn`` from the ``time_step_ramp`` module."
@@ -5,12 +5,11 @@ from dataclasses import dataclass, field
5
5
  from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
- from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
9
8
  from google.protobuf.message import Message as _Message
10
-
11
- from luminarycloud.tables import RectilinearTable
12
- from luminarycloud.types import Vector3
9
+ from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
10
+ from luminarycloud.types import Vector3, LcFloat
13
11
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
12
+ from luminarycloud._helpers._entity_identifier import _create_entity_identifier
14
13
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
14
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
15
  from luminarycloud._helpers import CodeRepr
@@ -23,7 +22,9 @@ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_uniqu
23
22
  class VolumeEntity(CodeRepr, ParamGroupWrapper[clientpb.VolumeEntity]):
24
23
  """Volume entity."""
25
24
 
26
- volume_identifier: EntityIdentifier | None = None
25
+ volume_identifier: EntityIdentifier = field(
26
+ default_factory=_create_entity_identifier, init=True
27
+ )
27
28
  "Unique identifier for a volume entity."
28
29
 
29
30
  def _to_proto(self) -> clientpb.VolumeEntity:
@@ -1,8 +1,10 @@
1
1
  from .architectures import (
2
2
  list_architectures as list_architectures,
3
3
  PhysicsAiArchitecture as PhysicsAiArchitecture,
4
+ PhysicsAiArchitectureVersion as PhysicsAiArchitectureVersion,
4
5
  )
5
6
  from .models import (
6
7
  list_pretrained_models as list_pretrained_models,
7
8
  PhysicsAiModel as PhysicsAiModel,
9
+ PhysicsAiModelVersion as PhysicsAiModelVersion,
8
10
  )
@@ -1,37 +1,71 @@
1
1
  # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
2
- from __future__ import annotations
3
-
4
- from typing import List
2
+ from typing import List, Optional
5
3
 
6
4
  from .._client import get_default_client
7
5
  from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
8
6
  from .._wrapper import ProtoWrapper, ProtoWrapperBase
9
7
  from .._helpers.warnings import experimental
10
- from ..types.ids import PhysicsAiArchitectureID
8
+ from ..types.ids import PhysicsAiArchitectureID, PhysicsAiArchitectureVersionID
9
+ from ..enum.physics_ai_lifecycle_state import PhysicsAiLifecycleState
10
+
11
+
12
+ @experimental
13
+ @ProtoWrapper(physaipb.PhysicsAiArchitectureVersion)
14
+ class PhysicsAiArchitectureVersion(ProtoWrapperBase):
15
+ """
16
+ Represents a specific version of a Physics AI architecture.
17
+
18
+ .. warning:: This feature is experimental and may change or be removed without notice.
19
+ """
20
+
21
+ id: PhysicsAiArchitectureVersionID
22
+ name: str
23
+ changelog: str
24
+ lifecycle_state: PhysicsAiLifecycleState
25
+ _proto: physaipb.PhysicsAiArchitectureVersion
11
26
 
12
27
 
13
28
  @experimental
14
29
  @ProtoWrapper(physaipb.PhysicsAiArchitecture)
15
30
  class PhysicsAiArchitecture(ProtoWrapperBase):
16
31
  """
17
- Represents a Physics AI architecture.
32
+ Represents a Physics AI architecture with all its versions.
18
33
 
19
- warning:: This feature is experimental and may change or be removed without notice.
34
+ .. warning:: This feature is experimental and may change or be removed without notice.
20
35
  """
21
36
 
22
37
  id: PhysicsAiArchitectureID
23
38
  name: str
24
39
  description: str
25
- version: str
40
+ versions: List[PhysicsAiArchitectureVersion]
26
41
  _proto: physaipb.PhysicsAiArchitecture
27
42
 
43
+ def get_latest_version(self) -> Optional[PhysicsAiArchitectureVersion]:
44
+ """
45
+ Get the latest version of this architecture based on name.
46
+
47
+ Returns
48
+ -------
49
+ PhysicsAiArchitectureVersion or None
50
+ The first architecture version, or None if no versions exist.
51
+ Note: Version ordering is now determined by the backend.
52
+ """
53
+ if not self.versions:
54
+ return None
55
+ return self.versions[0] if self.versions else None
56
+
28
57
 
29
58
  @experimental
30
59
  def list_architectures() -> List[PhysicsAiArchitecture]:
31
60
  """
32
61
  List available Physics AI architectures for model training.
33
62
 
34
- warning:: This feature is experimental and may change or be removed without notice.
63
+ .. warning:: This feature is experimental and may change or be removed without notice.
64
+
65
+ Returns
66
+ -------
67
+ list[PhysicsAiArchitecture]
68
+ A list of all available Physics AI architectures.
35
69
  """
36
70
  req = physaipb.ListArchitecturesRequest()
37
71
  res = get_default_client().ListArchitectures(req)
@@ -1,7 +1,5 @@
1
1
  # File: python/sdk/luminarycloud/inference/inference.py
2
2
  # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
3
- from __future__ import annotations
4
-
5
3
  from datetime import datetime
6
4
  from typing import Any
7
5
  from json import loads as json_loads
@@ -1,41 +1,70 @@
1
1
  # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
2
- from __future__ import annotations
3
-
4
- from datetime import datetime
5
- from typing import List
2
+ from typing import List, Optional
6
3
 
7
4
  from .._client import get_default_client
8
- from .._helpers._timestamp_to_datetime import timestamp_to_datetime
9
5
  from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
10
6
  from .._wrapper import ProtoWrapper, ProtoWrapperBase
11
7
  from .._helpers.warnings import experimental
12
- from ..types.ids import PhysicsAiModelID
8
+ from ..types.ids import PhysicsAiModelID, PhysicsAiModelVersionID
9
+ from ..enum.physics_ai_lifecycle_state import PhysicsAiLifecycleState
10
+
11
+
12
+ @experimental
13
+ @ProtoWrapper(physaipb.PhysicsAiModelVersion)
14
+ class PhysicsAiModelVersion(ProtoWrapperBase):
15
+ """
16
+ Represents a specific version of a Physics AI model.
17
+
18
+ .. warning:: This feature is experimental and may change or be removed without notice.
19
+ """
20
+
21
+ id: PhysicsAiModelVersionID
22
+ name: str
23
+ lifecycle_state: PhysicsAiLifecycleState
24
+ _proto: physaipb.PhysicsAiModelVersion
13
25
 
14
26
 
15
27
  @experimental
16
28
  @ProtoWrapper(physaipb.PhysicsAiModel)
17
29
  class PhysicsAiModel(ProtoWrapperBase):
18
- """Represents a Physics AI model."""
30
+ """
31
+ Represents a Physics AI model with all its versions.
32
+
33
+ .. warning:: This feature is experimental and may change or be removed without notice.
34
+ """
19
35
 
20
36
  id: PhysicsAiModelID
21
37
  name: str
22
- version: str
23
-
38
+ description: str
39
+ versions: List[PhysicsAiModelVersion]
24
40
  _proto: physaipb.PhysicsAiModel
25
41
 
26
- @property
27
- def create_time(self) -> datetime:
28
- return timestamp_to_datetime(self._proto.create_time)
42
+ def get_latest_version(self) -> Optional[PhysicsAiModelVersion]:
43
+ """
44
+ Get the latest version of this model.
29
45
 
30
- @property
31
- def update_time(self) -> datetime:
32
- return timestamp_to_datetime(self._proto.update_time)
46
+ Returns
47
+ -------
48
+ PhysicsAiModelVersion or None
49
+ The first model version, or None if no versions exist.
50
+ Note: Version ordering is now determined by the backend.
51
+ """
52
+ if not self.versions:
53
+ return None
54
+ return self.versions[0] if self.versions else None
33
55
 
34
56
 
35
57
  @experimental
36
58
  def list_pretrained_models() -> List[PhysicsAiModel]:
37
59
  """
38
60
  List available pretrained Physics AI models.
61
+
62
+ .. warning:: This feature is experimental and may change or be removed without notice.
63
+
64
+ Returns
65
+ -------
66
+ list[PhysicsAiModel]
67
+ A list of all available pretrained Physics AI models.
39
68
  """
40
69
  req = physaipb.ListPretrainedModelsRequest()
41
70
  res = get_default_client().ListPretrainedModels(req)
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,