luminarycloud 0.15.2__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 (255) hide show
  1. luminarycloud/__init__.py +1 -0
  2. luminarycloud/_helpers/_code_representation.py +44 -19
  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 +103 -81
  8. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +37 -1
  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/simulation_pb2.py +46 -46
  14. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +7 -1
  15. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +12 -12
  16. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +10 -2
  17. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +221 -143
  18. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +154 -7
  19. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py +33 -0
  20. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi +10 -0
  21. luminarycloud/_proto/assistant/assistant_pb2.py +92 -71
  22. luminarycloud/_proto/assistant/assistant_pb2.pyi +58 -11
  23. luminarycloud/_proto/assistant/assistant_pb2_grpc.py +47 -13
  24. luminarycloud/_proto/assistant/assistant_pb2_grpc.pyi +18 -6
  25. luminarycloud/_proto/client/simulation_pb2.py +373 -324
  26. luminarycloud/_proto/client/simulation_pb2.pyi +123 -3
  27. luminarycloud/_proto/fvm/solver_results_pb2.py +25 -11
  28. luminarycloud/_proto/fvm/solver_results_pb2.pyi +24 -1
  29. luminarycloud/_proto/geometry/geometry_pb2.py +64 -63
  30. luminarycloud/_proto/geometry/geometry_pb2.pyi +11 -3
  31. luminarycloud/_proto/hexmesh/hexmesh_pb2.py +18 -14
  32. luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +14 -4
  33. luminarycloud/_proto/named_variable_set/named_variable_set_pb2.py +49 -0
  34. luminarycloud/_proto/named_variable_set/named_variable_set_pb2.pyi +53 -0
  35. luminarycloud/_proto/namedvariableset/namedvariableset_pb2.py +49 -0
  36. luminarycloud/_proto/namedvariableset/namedvariableset_pb2.pyi +53 -0
  37. luminarycloud/_proto/quantity/quantity_pb2.py +8 -5
  38. luminarycloud/_proto/quantity/quantity_pb2.pyi +2 -0
  39. luminarycloud/_wrapper.py +26 -7
  40. luminarycloud/enum/__init__.py +5 -0
  41. luminarycloud/enum/physics_ai_lifecycle_state.py +30 -0
  42. luminarycloud/enum/quantity_type.py +43 -0
  43. luminarycloud/enum/vis_enums.py +6 -2
  44. luminarycloud/geometry.py +46 -2
  45. luminarycloud/meshing/mesh_generation_params.py +6 -5
  46. luminarycloud/meshing/sizing_strategy/sizing_strategies.py +2 -1
  47. luminarycloud/named_variable_set.py +13 -6
  48. luminarycloud/params/enum/_enum_wrappers.py +68 -0
  49. luminarycloud/params/simulation/_lib.py +1 -1
  50. luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +5 -6
  51. luminarycloud/params/simulation/adaptive_mesh_refinement_.py +6 -7
  52. luminarycloud/params/simulation/adjoint_.py +3 -4
  53. luminarycloud/params/simulation/basic/gravity/gravity_off_.py +3 -4
  54. luminarycloud/params/simulation/basic/gravity/gravity_on_.py +3 -4
  55. luminarycloud/params/simulation/basic/gravity_.py +3 -4
  56. luminarycloud/params/simulation/body_frame_.py +3 -4
  57. luminarycloud/params/simulation/entity_relationships/volume_material_relationship_.py +9 -6
  58. luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py +9 -6
  59. luminarycloud/params/simulation/entity_relationships_.py +3 -4
  60. luminarycloud/params/simulation/general_.py +3 -4
  61. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_off_.py +3 -4
  62. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_on_.py +5 -6
  63. luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py +3 -4
  64. luminarycloud/params/simulation/material/fluid/material_model/ideal_gas_.py +5 -6
  65. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_.py +4 -5
  66. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_with_energy_.py +5 -6
  67. luminarycloud/params/simulation/material/fluid/material_model_.py +3 -4
  68. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +4 -5
  69. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +4 -5
  70. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +3 -4
  71. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model_.py +3 -4
  72. luminarycloud/params/simulation/material/fluid/viscosity_model/prescribed_viscosity_.py +4 -5
  73. luminarycloud/params/simulation/material/fluid/viscosity_model/sutherland_.py +6 -7
  74. luminarycloud/params/simulation/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +3 -4
  75. luminarycloud/params/simulation/material/fluid/viscosity_model_.py +3 -4
  76. luminarycloud/params/simulation/material/material_fluid_.py +4 -5
  77. luminarycloud/params/simulation/material/material_solid_.py +6 -7
  78. luminarycloud/params/simulation/material_entity_.py +6 -5
  79. luminarycloud/params/simulation/monitor_plane_.py +4 -5
  80. luminarycloud/params/simulation/motion_data/frame_transforms/no_transform_.py +3 -4
  81. luminarycloud/params/simulation/motion_data/frame_transforms/rotational_transform_.py +3 -4
  82. luminarycloud/params/simulation/motion_data/frame_transforms/translational_transform_.py +3 -4
  83. luminarycloud/params/simulation/motion_data/frame_transforms_.py +3 -4
  84. luminarycloud/params/simulation/motion_data/motion_type/constant_angular_motion_.py +3 -4
  85. luminarycloud/params/simulation/motion_data/motion_type/constant_translation_motion_.py +3 -4
  86. luminarycloud/params/simulation/motion_data/motion_type_.py +3 -4
  87. luminarycloud/params/simulation/motion_data_.py +3 -4
  88. luminarycloud/params/simulation/multi_physics_coupling_options_.py +3 -4
  89. luminarycloud/params/simulation/output_.py +3 -4
  90. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +3 -4
  91. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +3 -4
  92. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +3 -4
  93. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +5 -6
  94. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_line_.py +3 -4
  95. luminarycloud/params/simulation/particle_group/particle_group_type/probe_points_.py +3 -4
  96. luminarycloud/params/simulation/particle_group/particle_group_type/source_points_.py +3 -4
  97. luminarycloud/params/simulation/particle_group/particle_group_type_.py +3 -4
  98. luminarycloud/params/simulation/particle_group_.py +3 -4
  99. luminarycloud/params/simulation/physics/fluid/adjoint_controls_fluid_.py +4 -5
  100. luminarycloud/params/simulation/physics/fluid/basic_fluid_.py +3 -4
  101. luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +9 -10
  102. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +5 -6
  103. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +5 -6
  104. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +4 -5
  105. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +4 -5
  106. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +4 -5
  107. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +5 -6
  108. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +4 -5
  109. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +5 -6
  110. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +4 -5
  111. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +7 -8
  112. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +5 -6
  113. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +3 -4
  114. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet_.py +3 -4
  115. luminarycloud/params/simulation/physics/fluid/boundary_conditions/symmetry_.py +3 -4
  116. luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +9 -10
  117. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +4 -5
  118. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +4 -5
  119. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +4 -5
  120. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/slip_.py +3 -4
  121. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +4 -5
  122. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_energy_.py +3 -4
  123. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_momentum_.py +3 -4
  124. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall_.py +3 -4
  125. luminarycloud/params/simulation/physics/fluid/boundary_conditions_fluid_.py +3 -4
  126. luminarycloud/params/simulation/physics/fluid/initialization/fluid_existing_solution_.py +3 -4
  127. luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +3 -4
  128. luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +5 -6
  129. luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +9 -10
  130. luminarycloud/params/simulation/physics/fluid/initialization_fluid_.py +3 -4
  131. luminarycloud/params/simulation/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +4 -5
  132. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +3 -4
  133. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +6 -7
  134. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -5
  135. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +4 -5
  136. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +3 -4
  137. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +3 -4
  138. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +3 -4
  139. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +5 -6
  140. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +3 -4
  141. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -5
  142. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +3 -4
  143. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model_.py +3 -4
  144. luminarycloud/params/simulation/physics/fluid/physical_behavior_.py +3 -4
  145. luminarycloud/params/simulation/physics/fluid/porous_behavior_.py +4 -5
  146. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +3 -4
  147. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +3 -4
  148. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +4 -5
  149. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +3 -4
  150. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +8 -9
  151. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method_.py +3 -4
  152. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +4 -5
  153. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +4 -5
  154. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method_.py +3 -4
  155. luminarycloud/params/simulation/physics/fluid/solution_controls_fluid_.py +3 -4
  156. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +3 -4
  157. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/fds_.py +5 -6
  158. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +5 -6
  159. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +4 -5
  160. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_.py +3 -4
  161. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +3 -4
  162. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +8 -9
  163. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order_.py +3 -4
  164. luminarycloud/params/simulation/physics/fluid/spatial_discretization_fluid_.py +4 -5
  165. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_.py +3 -4
  166. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +3 -4
  167. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/iddes_.py +3 -4
  168. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation_.py +3 -4
  169. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +16 -17
  170. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +3 -4
  171. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +3 -4
  172. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst_.py +3 -4
  173. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +15 -16
  174. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +3 -4
  175. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +3 -4
  176. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras_.py +3 -4
  177. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +4 -5
  178. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +4 -5
  179. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +4 -5
  180. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +4 -5
  181. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +4 -5
  182. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model_.py +3 -4
  183. luminarycloud/params/simulation/physics/fluid/turbulence_.py +5 -6
  184. luminarycloud/params/simulation/physics/fluid_.py +7 -6
  185. luminarycloud/params/simulation/physics/heat/adjoint_controls_heat_.py +3 -4
  186. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_convection_.py +5 -6
  187. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +4 -5
  188. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +4 -5
  189. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_symmetry_.py +3 -4
  190. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_temperature_.py +4 -5
  191. luminarycloud/params/simulation/physics/heat/boundary_conditions_heat_.py +3 -4
  192. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +4 -5
  193. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +4 -5
  194. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type_.py +3 -4
  195. luminarycloud/params/simulation/physics/heat/heat_source_.py +3 -4
  196. luminarycloud/params/simulation/physics/heat/initialization/heat_existing_solution_.py +3 -4
  197. luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values_.py +4 -5
  198. luminarycloud/params/simulation/physics/heat/initialization_heat_.py +3 -4
  199. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +3 -4
  200. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +3 -4
  201. luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +3 -4
  202. luminarycloud/params/simulation/physics/heat/spatial_discretization_heat_.py +5 -6
  203. luminarycloud/params/simulation/physics/heat_.py +5 -5
  204. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +3 -4
  205. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/translational_periodicity_.py +3 -4
  206. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type_.py +3 -4
  207. luminarycloud/params/simulation/physics/periodic_pair_.py +3 -4
  208. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py +3 -4
  209. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/krylov_amg_.py +4 -5
  210. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type_.py +4 -5
  211. luminarycloud/params/simulation/physics_.py +6 -5
  212. luminarycloud/params/simulation/simulation_param_.py +3 -4
  213. luminarycloud/params/simulation/sliding_interfaces_.py +3 -4
  214. luminarycloud/params/simulation/surface_name_.py +3 -4
  215. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_off_.py +3 -4
  216. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_on_.py +3 -4
  217. luminarycloud/params/simulation/time/compute_statistics_.py +3 -4
  218. luminarycloud/params/simulation/time/time_marching/time_explicit_.py +3 -4
  219. luminarycloud/params/simulation/time/time_marching/time_implicit_.py +3 -4
  220. luminarycloud/params/simulation/time/time_marching_.py +3 -4
  221. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py +3 -4
  222. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py +4 -5
  223. luminarycloud/params/simulation/time/time_step_ramp_.py +3 -4
  224. luminarycloud/params/simulation/time_.py +4 -5
  225. luminarycloud/params/simulation/volume_entity_.py +6 -5
  226. luminarycloud/physics_ai/__init__.py +2 -0
  227. luminarycloud/physics_ai/architectures.py +42 -8
  228. luminarycloud/physics_ai/inference.py +0 -2
  229. luminarycloud/physics_ai/models.py +44 -15
  230. luminarycloud/pipeline_util/dictable.py +27 -0
  231. luminarycloud/pipeline_util/yaml.py +55 -0
  232. luminarycloud/pipelines/__init__.py +29 -0
  233. luminarycloud/pipelines/core.py +225 -0
  234. luminarycloud/pipelines/operators.py +197 -0
  235. luminarycloud/pipelines/parameters.py +42 -0
  236. luminarycloud/project.py +60 -9
  237. luminarycloud/simulation.py +35 -4
  238. luminarycloud/simulation_param.py +16 -12
  239. luminarycloud/simulation_template.py +31 -12
  240. luminarycloud/solution.py +1 -1
  241. luminarycloud/types/__init__.py +2 -0
  242. luminarycloud/types/adfloat.py +50 -8
  243. luminarycloud/types/ids.py +2 -0
  244. luminarycloud/types/vector3.py +2 -1
  245. luminarycloud/vis/__init__.py +12 -5
  246. luminarycloud/vis/data_extraction.py +546 -0
  247. luminarycloud/vis/display.py +64 -8
  248. luminarycloud/vis/filters.py +183 -43
  249. luminarycloud/vis/interactive_scene.py +2 -1
  250. luminarycloud/vis/primitives.py +38 -0
  251. luminarycloud/vis/vis_util.py +56 -0
  252. luminarycloud/vis/visualization.py +241 -71
  253. {luminarycloud-0.15.2.dist-info → luminarycloud-0.15.4.dist-info}/METADATA +3 -1
  254. {luminarycloud-0.15.2.dist-info → luminarycloud-0.15.4.dist-info}/RECORD +255 -240
  255. {luminarycloud-0.15.2.dist-info → luminarycloud-0.15.4.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
@@ -36,7 +35,7 @@ class KrylovAmg(LinearSolverType):
36
35
  "Linear Solver AMG Coarsening Sizing."
37
36
  levels: int = 20
38
37
  "Linear Solver AMG Level."
39
- relaxation: float = 0.75
38
+ relaxation: LcFloat = 0.75
40
39
  "Linear Solver AMG Relaxation applied to the smoother."
41
40
  multigrid_cycle: enum.LinsolAmgCycleType = enum.LinsolAmgCycleType.LINSOL_AMG_CYCLE_TYPE_V
42
41
  "AMG cycle type."
@@ -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
@@ -25,5 +24,5 @@ class LinearSolverType(CodeRepr, metaclass=ABCMeta):
25
24
 
26
25
  iterations: int = 15
27
26
  "Maximum number of linear solver iterations per nonlinear solution update. The linear solver terminates if the maximum is reached."
28
- tolerance: float = 0.05
27
+ tolerance: LcFloat = 0.05
29
28
  "Relative reduction target in the linear solver residual from an initial value of 1.0 per nonlinear solution update. The linear solver terminates if the tolerance is met."
@@ -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
@@ -28,7 +27,9 @@ from luminarycloud.params.simulation.physics.heat_ import *
28
27
  class Physics(CodeRepr, ParamGroupWrapper[clientpb.Physics]):
29
28
  """Single physics solver entity."""
30
29
 
31
- physics_identifier: EntityIdentifier | None = None
30
+ physics_identifier: EntityIdentifier = field(
31
+ default_factory=_create_entity_identifier, init=True
32
+ )
32
33
  "Unique identifier for a physics entity."
33
34
  heat: Heat | None = None
34
35
  "Configuration for a heat transfer physics solver - simulates heat transfer in solid media."
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -26,7 +25,7 @@ from luminarycloud.params.simulation.time.time_step_ramp_ import *
26
25
  class TimeStepRampOn(TimeStepRamp):
27
26
  """Enable physical time step ramping."""
28
27
 
29
- initial_time_step: float = 0.001
28
+ initial_time_step: LcFloat = 0.001
30
29
  "Initial physical time step for time step ramping. The physical time step is ramped toward the target for the duration of the ramp."
31
30
  start_iteration: int = 500
32
31
  "Time step iteration to start the time step ramping process."
@@ -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)
@@ -0,0 +1,27 @@
1
+ from dataclasses import fields, is_dataclass
2
+ from typing import TYPE_CHECKING
3
+
4
+ if TYPE_CHECKING:
5
+ from luminarycloud.pipelines.parameters import PipelineParameter
6
+
7
+
8
+ class PipelineDictable:
9
+ """
10
+ A mixin for dataclasses that can contain PipelineParameters and/or other PipelineDictables
11
+ (i.e. it's recursive). Used to construct a dictionary that can be serialized to YAML for a
12
+ Pipeline definition, and collects all PipelineParameters encountered along the way.
13
+ """
14
+
15
+ def _to_pipeline_dict(self) -> tuple[dict, list["PipelineParameter"]]:
16
+ if not is_dataclass(self):
17
+ raise ValueError("PipelineDictable can only be used on dataclasses")
18
+ result = {}
19
+ params = []
20
+ for field in fields(self):
21
+ value = getattr(self, field.name)
22
+ if hasattr(value, "_to_pipeline_dict"):
23
+ result[field.name], downstream_params = value._to_pipeline_dict()
24
+ params.extend(downstream_params)
25
+ else:
26
+ result[field.name] = value
27
+ return result, params
@@ -0,0 +1,55 @@
1
+ from dataclasses import dataclass
2
+ from typing import Any
3
+ import yaml
4
+
5
+
6
+ @dataclass
7
+ class YamlProblem:
8
+ path: str
9
+ problem: str
10
+
11
+ def __str__(self) -> str:
12
+ return f"{self.path}: {self.problem}"
13
+
14
+
15
+ def find_yaml_problems(
16
+ data: Any, path: str = "", problems: list[YamlProblem] | None = None
17
+ ) -> list[YamlProblem]:
18
+ """
19
+ Find any problems with the given data that would prevent it from being serialized to "standard"
20
+ YAML, i.e. it's all dicts, lists, and primitives.
21
+
22
+ Returns a list of YamlProblem instances, which will be empty if there are no problems.
23
+ """
24
+ if problems is None:
25
+ problems = []
26
+ if isinstance(data, (str, int, float, bool, type(None))):
27
+ return problems
28
+ elif isinstance(data, list):
29
+ for i, item in enumerate(data):
30
+ find_yaml_problems(item, f"{path}[{i}]", problems)
31
+ elif isinstance(data, dict):
32
+ for k, v in data.items():
33
+ if not isinstance(k, str):
34
+ problems.append(YamlProblem(path, f"Invalid dict key: {type(k).__name__}"))
35
+ return problems
36
+ find_yaml_problems(v, f"{path}.{k}", problems)
37
+ else:
38
+ problems.append(YamlProblem(path, f"Invalid type: {type(data).__name__}"))
39
+ return problems
40
+
41
+
42
+ def ensure_yamlizable(data: Any, data_description: str) -> None:
43
+ """
44
+ Ensure that the given data is serializable to YAML without any non-standard tags. I.e. it's all
45
+ dicts, lists, and primitives.
46
+
47
+ Raises a TypeError with a very descriptive error message if the data is not serializable.
48
+ """
49
+ problems = find_yaml_problems(data)
50
+ if problems:
51
+ bad_yaml = yaml.dump(data)
52
+ problems_str = " - " + "\n - ".join(str(p) for p in problems)
53
+ raise TypeError(
54
+ f"Failed to serialize {data_description} to safe YAML:\n\n{bad_yaml}\nProblems:\n{problems_str}"
55
+ )