luminarycloud 0.22.3__py3-none-any.whl → 0.23.0__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 (258) hide show
  1. luminarycloud/__init__.py +9 -3
  2. luminarycloud/_client/client.py +1 -1
  3. luminarycloud/_helpers/_code_representation.py +1 -0
  4. luminarycloud/_helpers/_create_simulation.py +5 -1
  5. luminarycloud/_helpers/proto_decorator.py +46 -38
  6. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +214 -137
  7. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +152 -0
  8. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +103 -0
  9. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +40 -0
  10. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +137 -63
  11. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +166 -6
  12. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +68 -0
  13. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +24 -0
  14. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +94 -71
  15. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +46 -0
  16. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.py +35 -0
  17. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.pyi +16 -0
  18. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +25 -3
  19. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +32 -0
  20. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.py +34 -0
  21. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.pyi +12 -0
  22. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +68 -21
  23. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +119 -0
  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/client/simulation_pb2.py +405 -346
  27. luminarycloud/_proto/client/simulation_pb2.pyi +175 -21
  28. luminarycloud/_proto/clusterconfig/clusterconfig_pb2.py +273 -0
  29. luminarycloud/_proto/clusterconfig/clusterconfig_pb2.pyi +808 -0
  30. luminarycloud/_proto/geometry/geometry_pb2.pyi +1 -1
  31. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +2 -2
  32. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +68 -0
  33. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +24 -0
  34. luminarycloud/enum/__init__.py +1 -0
  35. luminarycloud/enum/gpu_type.py +42 -7
  36. luminarycloud/enum/vis_enums.py +18 -0
  37. luminarycloud/geometry.py +81 -0
  38. luminarycloud/geometry_contacts.py +222 -0
  39. luminarycloud/meshing/mesh_generation_params.py +4 -4
  40. luminarycloud/meshing/sizing_strategy/__init__.py +0 -1
  41. luminarycloud/meshing/sizing_strategy/sizing_strategies.py +0 -20
  42. luminarycloud/params/geometry/shapes.py +137 -31
  43. luminarycloud/params/outputs/__init__.py +0 -2
  44. luminarycloud/params/outputs/output.py +17 -5
  45. luminarycloud/params/simulation/__init__.py +2 -0
  46. luminarycloud/params/simulation/adaptive_mesh_refinement/active_region_.py +1 -1
  47. luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +1 -1
  48. luminarycloud/params/simulation/adaptive_mesh_refinement_.py +1 -1
  49. luminarycloud/params/simulation/adjoint_.py +8 -5
  50. luminarycloud/params/simulation/basic/gravity/gravity_off_.py +1 -1
  51. luminarycloud/params/simulation/basic/gravity/gravity_on_.py +1 -1
  52. luminarycloud/params/simulation/basic/gravity_.py +1 -1
  53. luminarycloud/params/simulation/body_frame_.py +1 -1
  54. luminarycloud/params/simulation/entity_relationships/volume_material_relationship_.py +1 -1
  55. luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py +1 -1
  56. luminarycloud/params/simulation/entity_relationships_.py +1 -1
  57. luminarycloud/params/simulation/general_.py +1 -1
  58. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_off_.py +1 -1
  59. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_on_.py +1 -1
  60. luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py +1 -1
  61. luminarycloud/params/simulation/material/fluid/material_model/__init__.py +2 -0
  62. luminarycloud/params/simulation/material/fluid/material_model/ideal_gas_.py +1 -1
  63. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_.py +1 -1
  64. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_with_energy_.py +1 -1
  65. luminarycloud/params/simulation/material/fluid/material_model/real_gas_backend/__init__.py +2 -0
  66. luminarycloud/params/simulation/material/fluid/material_model/real_gas_backend/real_gas_coolprop_.py +43 -0
  67. luminarycloud/params/simulation/material/fluid/material_model/real_gas_backend/real_gas_polynomial_.py +53 -0
  68. luminarycloud/params/simulation/material/fluid/material_model/real_gas_backend_.py +29 -0
  69. luminarycloud/params/simulation/material/fluid/material_model_.py +1 -1
  70. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +1 -1
  71. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +1 -1
  72. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +1 -1
  73. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model_.py +1 -1
  74. luminarycloud/params/simulation/material/fluid/viscosity_model/prescribed_viscosity_.py +1 -1
  75. luminarycloud/params/simulation/material/fluid/viscosity_model/sutherland_.py +1 -1
  76. luminarycloud/params/simulation/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +1 -1
  77. luminarycloud/params/simulation/material/fluid/viscosity_model_.py +1 -1
  78. luminarycloud/params/simulation/material/material_fluid_.py +78 -2
  79. luminarycloud/params/simulation/material/material_solid_.py +1 -1
  80. luminarycloud/params/simulation/material_entity_.py +1 -1
  81. luminarycloud/params/simulation/monitor_plane_.py +1 -1
  82. luminarycloud/params/simulation/motion_data/frame_transforms/no_transform_.py +1 -1
  83. luminarycloud/params/simulation/motion_data/frame_transforms/rotational_transform_.py +1 -1
  84. luminarycloud/params/simulation/motion_data/frame_transforms/translational_transform_.py +1 -1
  85. luminarycloud/params/simulation/motion_data/frame_transforms_.py +1 -1
  86. luminarycloud/params/simulation/motion_data/motion_type/constant_angular_motion_.py +1 -1
  87. luminarycloud/params/simulation/motion_data/motion_type/constant_translation_motion_.py +1 -1
  88. luminarycloud/params/simulation/motion_data/motion_type_.py +1 -1
  89. luminarycloud/params/simulation/motion_data_.py +1 -1
  90. luminarycloud/params/simulation/multi_physics_coupling_options_.py +1 -1
  91. luminarycloud/params/simulation/nonlinear_control/__init__.py +1 -0
  92. luminarycloud/params/simulation/nonlinear_control/nonlinear_control_system_.py +48 -0
  93. luminarycloud/params/simulation/nonlinear_control_.py +61 -0
  94. luminarycloud/params/simulation/output_.py +1 -1
  95. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +1 -1
  96. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +1 -1
  97. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +1 -1
  98. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +1 -1
  99. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_line_.py +1 -1
  100. luminarycloud/params/simulation/particle_group/particle_group_type/probe_points_.py +1 -1
  101. luminarycloud/params/simulation/particle_group/particle_group_type/source_points_.py +1 -1
  102. luminarycloud/params/simulation/particle_group/particle_group_type_.py +1 -1
  103. luminarycloud/params/simulation/particle_group_.py +1 -1
  104. luminarycloud/params/simulation/physics/fluid/adjoint_controls_fluid_.py +1 -1
  105. luminarycloud/params/simulation/physics/fluid/basic_fluid_.py +1 -1
  106. luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +1 -1
  107. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +1 -1
  108. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +1 -1
  109. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +1 -1
  110. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +1 -1
  111. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +1 -1
  112. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +1 -1
  113. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +1 -1
  114. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +1 -1
  115. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +1 -1
  116. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +1 -1
  117. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +1 -1
  118. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +1 -1
  119. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet_.py +1 -1
  120. luminarycloud/params/simulation/physics/fluid/boundary_conditions/symmetry_.py +1 -1
  121. luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +1 -1
  122. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +1 -1
  123. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +1 -1
  124. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +1 -1
  125. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/slip_.py +1 -1
  126. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +1 -1
  127. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_energy_.py +1 -1
  128. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_momentum_.py +1 -1
  129. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall_.py +1 -1
  130. luminarycloud/params/simulation/physics/fluid/boundary_conditions_fluid_.py +1 -1
  131. luminarycloud/params/simulation/physics/fluid/initialization/__init__.py +1 -0
  132. luminarycloud/params/simulation/physics/fluid/initialization/fluid_existing_solution_.py +1 -1
  133. luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +14 -1
  134. luminarycloud/params/simulation/physics/fluid/initialization/fluid_initialization_per_zone_.py +48 -0
  135. luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +14 -1
  136. luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +1 -1
  137. luminarycloud/params/simulation/physics/fluid/initialization_fluid_.py +1 -1
  138. luminarycloud/params/simulation/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +1 -1
  139. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +1 -1
  140. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +1 -1
  141. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +1 -1
  142. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +1 -1
  143. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +1 -1
  144. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +1 -1
  145. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +1 -1
  146. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +1 -1
  147. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +1 -1
  148. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +1 -1
  149. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +1 -1
  150. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model_.py +1 -1
  151. luminarycloud/params/simulation/physics/fluid/physical_behavior_.py +1 -1
  152. luminarycloud/params/simulation/physics/fluid/porous_behavior_.py +1 -1
  153. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +1 -1
  154. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_auto_.py +1 -1
  155. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +1 -1
  156. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +1 -1
  157. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +1 -1
  158. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +1 -1
  159. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method_.py +1 -1
  160. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +1 -1
  161. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +1 -1
  162. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method_.py +1 -1
  163. luminarycloud/params/simulation/physics/fluid/solution_controls_fluid_.py +1 -1
  164. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +1 -1
  165. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/fds_.py +1 -1
  166. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +1 -1
  167. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +1 -1
  168. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_.py +1 -1
  169. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +1 -1
  170. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +1 -1
  171. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order_.py +1 -1
  172. luminarycloud/params/simulation/physics/fluid/spatial_discretization_fluid_.py +1 -1
  173. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_.py +1 -1
  174. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +1 -1
  175. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/iddes_.py +1 -1
  176. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation_.py +1 -1
  177. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +1 -1
  178. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +1 -1
  179. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +1 -1
  180. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst_.py +1 -1
  181. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +1 -1
  182. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +1 -1
  183. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +1 -1
  184. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras_.py +1 -1
  185. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +1 -1
  186. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +1 -1
  187. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +1 -1
  188. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +1 -1
  189. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +1 -1
  190. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model_.py +1 -1
  191. luminarycloud/params/simulation/physics/fluid/turbulence_.py +1 -1
  192. luminarycloud/params/simulation/physics/fluid_.py +1 -1
  193. luminarycloud/params/simulation/physics/heat/adjoint_controls_heat_.py +1 -1
  194. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_convection_.py +1 -1
  195. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +1 -1
  196. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +1 -1
  197. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_symmetry_.py +1 -1
  198. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_temperature_.py +1 -1
  199. luminarycloud/params/simulation/physics/heat/boundary_conditions_heat_.py +1 -1
  200. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +1 -1
  201. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +1 -1
  202. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type_.py +1 -1
  203. luminarycloud/params/simulation/physics/heat/heat_source_.py +1 -1
  204. luminarycloud/params/simulation/physics/heat/initialization/__init__.py +1 -0
  205. luminarycloud/params/simulation/physics/heat/initialization/heat_existing_solution_.py +1 -1
  206. luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values/__init__.py +1 -0
  207. luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values/heat_initialization_per_zone_.py +40 -0
  208. luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values_.py +14 -1
  209. luminarycloud/params/simulation/physics/heat/initialization_heat_.py +1 -1
  210. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +1 -1
  211. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +1 -1
  212. luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +1 -1
  213. luminarycloud/params/simulation/physics/heat/spatial_discretization_heat_.py +1 -1
  214. luminarycloud/params/simulation/physics/heat_.py +1 -1
  215. luminarycloud/params/simulation/physics/periodic_pair_.py +5 -1
  216. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py +1 -1
  217. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/krylov_amg_.py +1 -1
  218. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type_.py +1 -1
  219. luminarycloud/params/simulation/physics_.py +1 -1
  220. luminarycloud/params/simulation/simulation_param_.py +8 -1
  221. luminarycloud/params/simulation/sliding_interfaces_.py +1 -1
  222. luminarycloud/params/simulation/surface_name_.py +1 -1
  223. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_off_.py +1 -1
  224. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_on_.py +1 -1
  225. luminarycloud/params/simulation/time/compute_statistics_.py +1 -1
  226. luminarycloud/params/simulation/time/time_marching/time_explicit_.py +1 -1
  227. luminarycloud/params/simulation/time/time_marching/time_implicit_.py +1 -1
  228. luminarycloud/params/simulation/time/time_marching_.py +1 -1
  229. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py +1 -1
  230. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py +1 -1
  231. luminarycloud/params/simulation/time/time_step_ramp_.py +1 -1
  232. luminarycloud/params/simulation/time_.py +1 -1
  233. luminarycloud/params/simulation/volume_entity_.py +1 -1
  234. luminarycloud/physics_ai/__init__.py +9 -0
  235. luminarycloud/physics_ai/architectures.py +129 -17
  236. luminarycloud/physics_ai/datasets.py +66 -11
  237. luminarycloud/physics_ai/training_jobs.py +50 -4
  238. luminarycloud/pipelines/__init__.py +5 -4
  239. luminarycloud/pipelines/api.py +148 -34
  240. luminarycloud/pipelines/arguments.py +8 -3
  241. luminarycloud/pipelines/core.py +10 -72
  242. luminarycloud/pipelines/stages.py +28 -25
  243. luminarycloud/pipelines/user_code_validation.py +122 -0
  244. luminarycloud/project.py +0 -14
  245. luminarycloud/simulation.py +42 -11
  246. luminarycloud/simulation_param.py +0 -62
  247. luminarycloud/simulation_template.py +1 -11
  248. luminarycloud/types/adfloat.py +48 -4
  249. luminarycloud/types/matrix3.py +9 -9
  250. luminarycloud/types/vector3.py +52 -23
  251. luminarycloud/vis/__init__.py +3 -0
  252. luminarycloud/vis/visualization.py +88 -0
  253. luminarycloud/volume_selection.py +29 -17
  254. {luminarycloud-0.22.3.dist-info → luminarycloud-0.23.0.dist-info}/METADATA +1 -1
  255. {luminarycloud-0.22.3.dist-info → luminarycloud-0.23.0.dist-info}/RECORD +257 -244
  256. luminarycloud/params/outputs/residual_output.py +0 -24
  257. /luminarycloud/params/{simulation/_lib.py → _lib.py} +0 -0
  258. {luminarycloud-0.22.3.dist-info → luminarycloud-0.23.0.dist-info}/WHEEL +0 -0
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
  from luminarycloud.params.simulation.physics.solution_controls.linear_solver_type_ import (
21
21
  LinearSolverType,
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
 
21
21
  @dataclass(kw_only=True)
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
  from luminarycloud.params.simulation.physics.fluid_ import Fluid
21
21
  from luminarycloud.params.simulation.physics.fluid_ import *
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
  from luminarycloud.params.simulation.adaptive_mesh_refinement_ import AdaptiveMeshRefinement
21
21
  from luminarycloud.params.simulation.adaptive_mesh_refinement_ import *
@@ -37,6 +37,8 @@ from luminarycloud.params.simulation.multi_physics_coupling_options_ import (
37
37
  MultiPhysicsCouplingOptions,
38
38
  )
39
39
  from luminarycloud.params.simulation.multi_physics_coupling_options_ import *
40
+ from luminarycloud.params.simulation.nonlinear_control_ import NonlinearControl
41
+ from luminarycloud.params.simulation.nonlinear_control_ import *
40
42
  from luminarycloud.params.simulation.output_ import Output
41
43
  from luminarycloud.params.simulation.output_ import *
42
44
  from luminarycloud.params.simulation.particle_group_ import ParticleGroup
@@ -65,6 +67,8 @@ class SimulationParam(CodeRepr, ParamGroupWrapper[clientpb.SimulationParam]):
65
67
  "Basic parameters used by a solution."
66
68
  adjoint: Adjoint = field(default_factory=Adjoint)
67
69
  "Settings for adjoint sensitivity analysis."
70
+ nonlinear_control: NonlinearControl = field(default_factory=NonlinearControl)
71
+ "Determine input values such that target output values are met."
68
72
  time: Time = field(default_factory=Time)
69
73
  "Time parameters used by a transient solution (required if flow_behavior = transient)."
70
74
  motion_data: list[MotionData] = field(default_factory=list)
@@ -104,6 +108,8 @@ class SimulationParam(CodeRepr, ParamGroupWrapper[clientpb.SimulationParam]):
104
108
  _proto.general.CopyFrom(self.basic._to_proto())
105
109
  if self.adjoint is not None:
106
110
  _proto.adjoint.CopyFrom(self.adjoint._to_proto())
111
+ if self.nonlinear_control is not None:
112
+ _proto.nonlinear_control.CopyFrom(self.nonlinear_control._to_proto())
107
113
  if self.time is not None:
108
114
  _proto.time.CopyFrom(self.time._to_proto())
109
115
  if self.motion_data is not None:
@@ -139,6 +145,7 @@ class SimulationParam(CodeRepr, ParamGroupWrapper[clientpb.SimulationParam]):
139
145
  self.volume_entity = [VolumeEntity.from_proto(v) for v in proto.volume_entity]
140
146
  self.basic = General.from_proto(proto.general)
141
147
  self.adjoint = Adjoint.from_proto(proto.adjoint)
148
+ self.nonlinear_control = NonlinearControl.from_proto(proto.nonlinear_control)
142
149
  self.time = Time.from_proto(proto.time)
143
150
  self.motion_data = [MotionData.from_proto(v) for v in proto.motion_data]
144
151
  self.particle_group = [ParticleGroup.from_proto(v) for v in proto.particle_group]
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
 
21
21
  @dataclass(kw_only=True)
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
 
21
21
  @dataclass(kw_only=True)
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
  from luminarycloud.params.simulation.time.compute_statistics_ import ComputeStatistics
21
21
  from luminarycloud.params.simulation.time.compute_statistics_ import *
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
  from luminarycloud.params.simulation.time.compute_statistics_ import ComputeStatistics
21
21
  from luminarycloud.params.simulation.time.compute_statistics_ import *
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
 
21
21
  @dataclass(kw_only=True)
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
  from luminarycloud.params.simulation.time.time_marching_ import TimeMarching
21
21
  from luminarycloud.params.simulation.time.time_marching_ import *
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
  from luminarycloud.params.simulation.time.time_marching_ import TimeMarching
21
21
  from luminarycloud.params.simulation.time.time_marching_ import *
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
 
21
21
  @dataclass(kw_only=True)
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
  from luminarycloud.params.simulation.time.time_step_ramp_ import TimeStepRamp
21
21
  from luminarycloud.params.simulation.time.time_step_ramp_ import *
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
  from luminarycloud.params.simulation.time.time_step_ramp_ import TimeStepRamp
21
21
  from luminarycloud.params.simulation.time.time_step_ramp_ import *
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
 
21
21
  @dataclass(kw_only=True)
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
  from luminarycloud.params.simulation.time.compute_statistics_ import ComputeStatistics
21
21
  from luminarycloud.params.simulation.time.compute_statistics_ import *
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
15
15
  from luminarycloud._helpers import CodeRepr
16
16
  import luminarycloud.params.enum._enum_wrappers as enum
17
17
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
18
+ from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
19
19
 
20
20
 
21
21
  @dataclass(kw_only=True)
@@ -2,6 +2,8 @@ from .architectures import (
2
2
  list_architectures as list_architectures,
3
3
  PhysicsAiArchitecture as PhysicsAiArchitecture,
4
4
  PhysicsAiArchitectureVersion as PhysicsAiArchitectureVersion,
5
+ ModelOutputs as ModelOutputs,
6
+ InputParameter as InputParameter,
5
7
  )
6
8
  from .models import (
7
9
  list_pretrained_models as list_pretrained_models,
@@ -26,4 +28,11 @@ from .datasets import (
26
28
  DatasetCaseInput as DatasetCaseInput,
27
29
  ExportConfig as ExportConfig,
28
30
  PhysicsAiDataset as PhysicsAiDataset,
31
+ ParameterDefinition as ParameterDefinition,
32
+ )
33
+
34
+ from .training_jobs import (
35
+ get_training_job as get_training_job,
36
+ list_training_jobs as list_training_jobs,
37
+ PhysicsAiTrainingJob as PhysicsAiTrainingJob,
29
38
  )
@@ -1,16 +1,68 @@
1
1
  # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
2
- from typing import List, Optional
2
+ import copy
3
+ from dataclasses import dataclass, field
3
4
  import json
4
5
 
5
6
  from .._client import get_default_client
6
7
  from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
8
+ from .._proto.quantity import quantity_pb2 as quantitypb
7
9
  from .._wrapper import ProtoWrapper, ProtoWrapperBase
8
10
  from ..types.ids import PhysicsAiArchitectureID, PhysicsAiArchitectureVersionID
9
11
  from ..enum.physics_ai_lifecycle_state import PhysicsAiLifecycleState
12
+ from ..enum.quantity_type import QuantityType
10
13
 
11
14
  from .training_jobs import PhysicsAiTrainingJob
12
15
 
13
16
 
17
+ @dataclass
18
+ class ModelOutputs:
19
+ """
20
+ Defines the output variables for the model.
21
+
22
+ Parameters
23
+ ----------
24
+ surface : list[QuantityType], optional
25
+ Surface outputs to predict (e.g., PRESSURE, WALL_SHEAR_STRESS)
26
+ volume : list[QuantityType], optional
27
+ Volume outputs to predict (e.g., VELOCITY, PRESSURE)
28
+ """
29
+
30
+ surface: list[QuantityType] | None = None
31
+ volume: list[QuantityType] | None = None
32
+
33
+
34
+ @dataclass
35
+ class InputParameter:
36
+ """
37
+ Defines an input parameter for the model with reference values for normalization.
38
+
39
+ Type is inherited from the dataset's ParameterSchema, so only the name and
40
+ optional reference values need to be specified here.
41
+
42
+ Parameters
43
+ ----------
44
+ name : str
45
+ Parameter name (must exist in the dataset's ParameterSchema)
46
+ reference : list[float], optional
47
+ Reference value(s) for normalization. If not provided, falls back to
48
+ the default_reference from the dataset's ParameterSchema. For scalars,
49
+ a single-element list. For vectors, the number of elements must match
50
+ the dimension from the schema.
51
+
52
+ Examples
53
+ --------
54
+ >>> # Use schema defaults (no reference specified)
55
+ >>> air_density = InputParameter(name="air_density")
56
+ >>> # Override with custom reference values
57
+ >>> velocity = InputParameter(name="inlet_velocity", reference=[30.0, 0.0, 0.0])
58
+ >>> # Scalar parameter with explicit reference
59
+ >>> stream_velocity = InputParameter(name="stream_velocity", reference=[148.28])
60
+ """
61
+
62
+ name: str
63
+ reference: list[float] = field(default_factory=list)
64
+
65
+
14
66
  @ProtoWrapper(physaipb.PhysicsAiArchitectureVersion)
15
67
  class PhysicsAiArchitectureVersion(ProtoWrapperBase):
16
68
  """
@@ -26,30 +78,87 @@ class PhysicsAiArchitectureVersion(ProtoWrapperBase):
26
78
  lifecycle_state: PhysicsAiLifecycleState
27
79
  _proto: physaipb.PhysicsAiArchitectureVersion
28
80
 
29
- def get_training_description(self, config: dict) -> str:
30
- if config.get("description"):
31
- return config["description"]
81
+ def get_training_description(self, _internal: dict | None) -> str:
82
+ if _internal and _internal.get("description"):
83
+ return _internal["description"]
32
84
 
33
85
  desc = f"Training job for architecture {self.name}"
34
- if config.get("custom_args"):
35
- desc += f" with custom args: {config['custom_args']}"
86
+ if _internal and _internal.get("custom_args"):
87
+ desc += f" with custom args: {_internal['custom_args']}"
36
88
  return desc
37
89
 
38
- def train(self, config: dict) -> PhysicsAiTrainingJob:
90
+ def train(
91
+ self,
92
+ dataset_id: str | None = None,
93
+ outputs: ModelOutputs | None = None,
94
+ inputs: list[InputParameter] | None = None,
95
+ _internal: dict | None = None,
96
+ ) -> PhysicsAiTrainingJob:
39
97
  """
40
98
  Submit a training job for this architecture version.
41
99
 
42
100
  Parameters
43
101
  ----------
44
- config : dict, optional
45
- Training configuration dictionary
102
+ dataset_id : str, optional
103
+ ID of a managed dataset to train on. If provided, uses session-based
104
+ GCS authentication.
105
+ outputs : ModelOutputs, optional
106
+ Output variables for the model (surface and/or volume quantities).
107
+ inputs : list[InputParameter], optional
108
+ Input parameters for the model with reference values for normalization.
109
+ Parameter names must exist in the dataset's ParameterSchema.
110
+ _internal : dict, optional
111
+ Internal configuration (resources, priority_class, custom_args, etc.).
112
+ This is for internal use only and may change without notice.
46
113
 
47
114
  Returns
48
115
  -------
49
116
  PhysicsAiTrainingJob
50
117
  The submitted training job object
51
- """
52
118
 
119
+ Examples
120
+ --------
121
+ >>> from luminarycloud.enum.quantity_type import QuantityType
122
+ >>> from luminarycloud.physics_ai.architectures import ModelOutputs, InputParameter
123
+ >>>
124
+ >>> job = arch_version.train(
125
+ ... dataset_id="dataset-abc123",
126
+ ... outputs=ModelOutputs(
127
+ ... surface=[QuantityType.PRESSURE_TIME_AVERAGE, QuantityType.WALL_SHEAR_STRESS_TIME_AVERAGE],
128
+ ... volume=[QuantityType.VELOCITY_TIME_AVERAGE],
129
+ ... ),
130
+ ... inputs=[
131
+ ... InputParameter(name="stream_velocity", reference=[148.28]),
132
+ ... InputParameter(name="air_density", reference=[0.38]),
133
+ ... ],
134
+ ... )
135
+ """
136
+ # Build typed proto fields for outputs
137
+ surface_outputs: list[quantitypb.QuantityType] = []
138
+ volume_outputs: list[quantitypb.QuantityType] = []
139
+
140
+ if outputs:
141
+ if outputs.surface:
142
+ surface_outputs = [quantitypb.QuantityType.Value(q.name) for q in outputs.surface]
143
+ if outputs.volume:
144
+ volume_outputs = [quantitypb.QuantityType.Value(q.name) for q in outputs.volume]
145
+
146
+ # Build typed proto fields for input parameters
147
+ # Type is inherited from the dataset's ParameterSchema at HydraConfig generation time
148
+ input_parameters: list[physaipb.TrainingInputParameter] = []
149
+ if inputs:
150
+ for param in inputs:
151
+ input_parameters.append(
152
+ physaipb.TrainingInputParameter(
153
+ name=param.name,
154
+ reference=param.reference,
155
+ )
156
+ )
157
+
158
+ # Build training_config JSON for internal fields only (resources, priority_class, etc.)
159
+ config: dict = copy.deepcopy(_internal) if _internal else {}
160
+
161
+ # Apply defaults for _internal fields
53
162
  if "custom_args" not in config:
54
163
  config["custom_args"] = ""
55
164
  if "priority_class" not in config:
@@ -66,14 +175,17 @@ class PhysicsAiArchitectureVersion(ProtoWrapperBase):
66
175
  config["mode"] = "full"
67
176
 
68
177
  training_config_json = json.dumps(config, indent=2)
69
- external_dataset_uri = f"gs://training-data/architecture-{self.id}"
178
+
70
179
  req = physaipb.SubmitTrainingJobRequest(
71
180
  architecture_version_id=self.id,
72
- training_description=self.get_training_description(config),
73
- external_dataset_uri=external_dataset_uri,
181
+ training_description=self.get_training_description(_internal),
74
182
  training_config=training_config_json,
75
183
  initialization_type=physaipb.MODEL_INITIALIZATION_TYPE_RANDOM,
76
184
  base_model_version_id="",
185
+ dataset_id=dataset_id if dataset_id else "",
186
+ surface_outputs=surface_outputs,
187
+ volume_outputs=volume_outputs,
188
+ input_parameters=input_parameters,
77
189
  )
78
190
 
79
191
  response = get_default_client().SubmitTrainingJob(req)
@@ -92,10 +204,10 @@ class PhysicsAiArchitecture(ProtoWrapperBase):
92
204
  id: PhysicsAiArchitectureID
93
205
  name: str
94
206
  description: str
95
- versions: List[PhysicsAiArchitectureVersion]
207
+ versions: list[PhysicsAiArchitectureVersion]
96
208
  _proto: physaipb.PhysicsAiArchitecture
97
209
 
98
- def get_latest_version(self) -> Optional[PhysicsAiArchitectureVersion]:
210
+ def get_latest_version(self) -> PhysicsAiArchitectureVersion | None:
99
211
  """
100
212
  Get the latest version of this architecture based on name.
101
213
 
@@ -107,10 +219,10 @@ class PhysicsAiArchitecture(ProtoWrapperBase):
107
219
  """
108
220
  if not self.versions:
109
221
  return None
110
- return self.versions[0] if self.versions else None
222
+ return self.versions[0]
111
223
 
112
224
 
113
- def list_architectures() -> List[PhysicsAiArchitecture]:
225
+ def list_architectures() -> list[PhysicsAiArchitecture]:
114
226
  """
115
227
  List available Physics AI architectures for model training.
116
228
 
@@ -1,20 +1,57 @@
1
1
  # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
2
2
  from dataclasses import dataclass, field
3
- from typing import List, Optional, Union, TYPE_CHECKING
4
3
  from datetime import datetime
4
+ from typing import TYPE_CHECKING, List, Optional, Union
5
5
 
6
- from google.protobuf.struct_pb2 import Struct
7
6
  from google.protobuf.json_format import ParseDict
7
+ from google.protobuf.struct_pb2 import Struct
8
8
 
9
- from ..enum import QuantityType
10
9
  from .._client import get_default_client
11
10
  from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
12
11
  from .._wrapper import ProtoWrapper, ProtoWrapperBase
12
+ from ..enum import QuantityType
13
13
 
14
14
  if TYPE_CHECKING:
15
15
  from ..solution import Solution
16
16
 
17
17
 
18
+ @dataclass
19
+ class ParameterDefinition:
20
+ """
21
+ Defines a parameter in a dataset's parameter schema.
22
+
23
+ .. warning:: This feature is experimental and may change or be removed without notice.
24
+
25
+ Parameters
26
+ ----------
27
+ name : str
28
+ Parameter name (e.g., "stream_velocity", "air_density").
29
+ type : str
30
+ Parameter type: "scalar" for single values, "vector" for multi-dimensional values.
31
+ dimension : int
32
+ Number of dimensions: 1 for scalar, N for N-dimensional vector.
33
+ default_reference : list[float], optional
34
+ Default reference value(s) for normalization. Length must match dimension if provided.
35
+ description : str, optional
36
+ Description of the parameter.
37
+
38
+ Examples
39
+ --------
40
+ >>> # Scalar parameter
41
+ >>> air_density = ParameterDefinition(name="air_density", type="scalar", dimension=1, default_reference=[1.225])
42
+ >>> # Vector parameter (3D velocity)
43
+ >>> velocity = ParameterDefinition(name="inlet_velocity", type="vector", dimension=3, default_reference=[30.0, 0.0, 0.0])
44
+ >>> # 1D velocity (stream velocity magnitude)
45
+ >>> stream_velocity = ParameterDefinition(name="stream_velocity", type="vector", dimension=1, default_reference=[148.28])
46
+ """
47
+
48
+ name: str
49
+ type: str # "scalar" or "vector"
50
+ dimension: int = 1
51
+ default_reference: List[float] = field(default_factory=list)
52
+ description: str = ""
53
+
54
+
18
55
  @dataclass(kw_only=True)
19
56
  class ExportConfig:
20
57
  """
@@ -107,7 +144,7 @@ def create_dataset(
107
144
  cases: List[Union["Solution", DatasetCaseInput]],
108
145
  export_config: Optional[ExportConfig] = None,
109
146
  description: str = "",
110
- parameter_schema: Optional[dict] = None,
147
+ parameter_schema: Optional[List[ParameterDefinition]] = None,
111
148
  ) -> PhysicsAiDataset:
112
149
  """
113
150
  Create a Physics AI dataset from simulation solutions.
@@ -126,8 +163,9 @@ def create_dataset(
126
163
  Export configuration. If not provided, uses defaults (single_precision=True).
127
164
  description : str, optional
128
165
  Description of the dataset
129
- parameter_schema : dict, optional
130
- JSON schema for case parameters
166
+ parameter_schema : List[ParameterDefinition], optional
167
+ List of parameter definitions for this dataset. Each parameter defines
168
+ the type, dimension, and optional default reference value.
131
169
 
132
170
  Returns
133
171
  -------
@@ -141,6 +179,9 @@ def create_dataset(
141
179
  >>> dataset = create_dataset(
142
180
  ... name="my-dataset",
143
181
  ... cases=[solution1, solution2, solution3],
182
+ ... parameter_schema=[
183
+ ... ParameterDefinition(name="stream_velocity", type="vector", dimension=1),
184
+ ... ],
144
185
  ... )
145
186
 
146
187
  With custom export config:
@@ -152,6 +193,10 @@ def create_dataset(
152
193
  ... exclude_tags=["Farfield", "Symmetry"],
153
194
  ... surface_fields_to_keep=[QuantityType.PRESSURE, QuantityType.WALL_SHEAR_STRESS],
154
195
  ... ),
196
+ ... parameter_schema=[
197
+ ... ParameterDefinition(name="stream_velocity", type="vector", dimension=1, default_reference=[148.28]),
198
+ ... ParameterDefinition(name="air_density", type="scalar", dimension=1, default_reference=[0.38]),
199
+ ... ],
155
200
  ... )
156
201
 
157
202
  With physics parameters:
@@ -163,6 +208,9 @@ def create_dataset(
163
208
  ... DatasetCaseInput(solution2, params={"alpha": 10.0}),
164
209
  ... ],
165
210
  ... export_config=ExportConfig(process_volume=True),
211
+ ... parameter_schema=[
212
+ ... ParameterDefinition(name="alpha", type="scalar", dimension=1),
213
+ ... ],
166
214
  ... )
167
215
  """
168
216
  # Use default export config if not provided
@@ -201,12 +249,19 @@ def create_dataset(
201
249
  if export_config.volume_fields_to_keep:
202
250
  export_config_proto.volume_fields_to_keep.extend(export_config.volume_fields_to_keep)
203
251
 
204
- # Build parameter schema
252
+ # Build parameter schema from list of ParameterDefinition
253
+ param_schema_proto = physaipb.ParameterSchema()
205
254
  if parameter_schema:
206
- param_schema_proto = ParseDict(parameter_schema, Struct())
207
- else:
208
- # Default empty schema
209
- param_schema_proto = Struct()
255
+ for param_def in parameter_schema:
256
+ param_schema_proto.parameters.append(
257
+ physaipb.ParameterDefinition(
258
+ name=param_def.name,
259
+ type=param_def.type,
260
+ dimension=param_def.dimension,
261
+ default_reference=param_def.default_reference,
262
+ description=param_def.description,
263
+ )
264
+ )
210
265
 
211
266
  req = physaipb.CreateDatasetRequest(
212
267
  name=name,
@@ -1,20 +1,33 @@
1
1
  # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
2
- from typing import List, Optional
2
+ from typing import List
3
3
  from datetime import datetime
4
4
 
5
5
  from .._client import get_default_client
6
6
  from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
7
7
  from .._proto.base import base_pb2 as basepb
8
8
  from .._wrapper import ProtoWrapper, ProtoWrapperBase
9
- from ..types.ids import PhysicsAiArchitectureVersionID
9
+ from ..types.ids import PhysicsAiArchitectureVersionID, PhysicsAiTrainingJobID
10
+
11
+
12
+ def get_training_job(training_job_id: PhysicsAiTrainingJobID) -> "PhysicsAiTrainingJob":
13
+ """
14
+ Get a Physics AI training job by ID.
15
+
16
+ Args:
17
+ training_job_id: The ID of the training job to retrieve.
18
+
19
+ Returns:
20
+ The training job.
21
+ """
22
+ req = physaipb.GetTrainingJobRequest(training_job_id=training_job_id)
23
+ resp = get_default_client().GetTrainingJob(req)
24
+ return PhysicsAiTrainingJob(resp.training_job)
10
25
 
11
26
 
12
27
  @ProtoWrapper(physaipb.PhysicsAiTrainingJob)
13
28
  class PhysicsAiTrainingJob(ProtoWrapperBase):
14
29
  """
15
30
  Represents a Physics AI training job.
16
-
17
- .. warning:: This feature is experimental and may change or be removed without notice.
18
31
  """
19
32
 
20
33
  id: str
@@ -24,6 +37,7 @@ class PhysicsAiTrainingJob(ProtoWrapperBase):
24
37
  training_data_source_type: physaipb.TrainingDataSourceType
25
38
  training_description: str
26
39
  external_dataset_uri: str
40
+ dataset_id: str
27
41
  initialization_type: physaipb.ModelInitializationType
28
42
  base_model_version_id: str
29
43
  status: basepb.JobStatus
@@ -35,3 +49,35 @@ class PhysicsAiTrainingJob(ProtoWrapperBase):
35
49
 
36
50
  def get_status(self) -> str:
37
51
  return basepb.JobStatusType.Name(self.status.typ)
52
+
53
+ def cancel(self) -> None:
54
+ """
55
+ Cancel this training job.
56
+
57
+ This method requests cancellation of the training job. If the job is already
58
+ suspended or suspending, this is a no-op.
59
+ """
60
+ req = physaipb.CancelTrainingJobRequest(training_job_id=self.id)
61
+ get_default_client().CancelTrainingJob(req)
62
+
63
+
64
+ def list_training_jobs() -> List[PhysicsAiTrainingJob]:
65
+ """
66
+ List Physics AI training jobs for the current user.
67
+
68
+ Returns
69
+ -------
70
+ List[PhysicsAiTrainingJob]
71
+ A list of training jobs, ordered by creation time (newest first).
72
+
73
+ Examples
74
+ --------
75
+ List all training jobs:
76
+
77
+ >>> jobs = list_training_jobs()
78
+ >>> for job in jobs:
79
+ ... print(f"{job.id}: {job.get_status()}")
80
+ """
81
+ req = physaipb.ListTrainingJobsRequest()
82
+ response = get_default_client().ListTrainingJobs(req)
83
+ return [PhysicsAiTrainingJob(job) for job in response.training_jobs]