luminarycloud 0.14.1__py3-none-any.whl → 0.15.1__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 (287) hide show
  1. luminarycloud/__init__.py +5 -1
  2. luminarycloud/_client/client.py +6 -0
  3. luminarycloud/_helpers/__init__.py +1 -0
  4. luminarycloud/_helpers/_code_representation.py +135 -0
  5. luminarycloud/_helpers/_simulation_params_from_json.py +5 -1
  6. luminarycloud/_helpers/upload.py +31 -11
  7. luminarycloud/_helpers/warnings/deprecated.py +8 -10
  8. luminarycloud/_helpers/warnings/experimental.py +4 -4
  9. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +135 -110
  10. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +82 -10
  11. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +34 -0
  12. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +12 -0
  13. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.py +50 -28
  14. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.pyi +38 -2
  15. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.py +34 -0
  16. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.pyi +12 -0
  17. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +94 -0
  18. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +145 -0
  19. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +104 -0
  20. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +42 -0
  21. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +25 -25
  22. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +10 -3
  23. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py +162 -0
  24. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi +254 -0
  25. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py +203 -0
  26. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi +74 -0
  27. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +155 -141
  28. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +24 -2
  29. luminarycloud/_proto/assistant/assistant_pb2.py +74 -74
  30. luminarycloud/_proto/assistant/assistant_pb2.pyi +22 -30
  31. luminarycloud/_proto/cad/boolean_pb2.py +8 -8
  32. luminarycloud/_proto/cad/boolean_pb2.pyi +34 -4
  33. luminarycloud/_proto/client/simulation_pb2.py +303 -294
  34. luminarycloud/_proto/client/simulation_pb2.pyi +26 -1
  35. luminarycloud/_proto/geometry/geometry_pb2.py +58 -58
  36. luminarycloud/_proto/geometry/geometry_pb2.pyi +58 -11
  37. luminarycloud/_proto/hexmesh/hexmesh_pb2.py +42 -42
  38. luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +2 -2
  39. luminarycloud/_proto/output/reference_values_pb2.py +5 -5
  40. luminarycloud/_proto/parametricworker/parametricworker_pb2.py +64 -31
  41. luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi +64 -7
  42. luminarycloud/_proto/table/table_pb2.py +9 -8
  43. luminarycloud/_proto/table/table_pb2.pyi +7 -1
  44. luminarycloud/enum/__init__.py +2 -0
  45. luminarycloud/enum/geometry_status.py +28 -0
  46. luminarycloud/feature_modification.py +909 -0
  47. luminarycloud/geometry.py +64 -32
  48. luminarycloud/geometry_version.py +2 -2
  49. luminarycloud/mesh.py +11 -4
  50. luminarycloud/meshing/__init__.py +1 -0
  51. luminarycloud/meshing/mesh_generation_params.py +1 -1
  52. luminarycloud/meshing/metadata/__init__.py +6 -0
  53. luminarycloud/meshing/metadata/mesh_metadata.py +57 -0
  54. luminarycloud/meshing/sizing_strategy/sizing_strategies.py +2 -2
  55. luminarycloud/named_variable_set.py +10 -4
  56. luminarycloud/outputs/output_definitions.py +11 -10
  57. luminarycloud/params/enum/_enum_wrappers.py +77 -968
  58. luminarycloud/params/outputs/output.py +2 -1
  59. luminarycloud/params/simulation/__init__.py +16 -16
  60. luminarycloud/params/simulation/_lib.py +1 -67
  61. luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +3 -2
  62. luminarycloud/params/simulation/adaptive_mesh_refinement_.py +3 -2
  63. luminarycloud/params/simulation/adjoint_.py +4 -3
  64. luminarycloud/params/simulation/basic/gravity/gravity_off_.py +3 -2
  65. luminarycloud/params/simulation/basic/gravity/gravity_on_.py +3 -2
  66. luminarycloud/params/simulation/basic/gravity_.py +3 -2
  67. luminarycloud/params/simulation/body_frame_.py +3 -2
  68. luminarycloud/params/simulation/entity_relationships/volume_material_relationship_.py +7 -6
  69. luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py +7 -6
  70. luminarycloud/params/simulation/entity_relationships_.py +3 -2
  71. luminarycloud/params/simulation/general_.py +4 -3
  72. luminarycloud/params/simulation/material/fluid/__init__.py +4 -4
  73. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_off_.py +3 -2
  74. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_on_.py +3 -2
  75. luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py +3 -2
  76. luminarycloud/params/simulation/material/fluid/material_model/__init__.py +1 -1
  77. luminarycloud/params/simulation/material/fluid/material_model/ideal_gas_.py +3 -2
  78. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_.py +3 -2
  79. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_with_energy_.py +3 -2
  80. luminarycloud/params/simulation/material/fluid/material_model_.py +3 -2
  81. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/__init__.py +2 -2
  82. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +3 -2
  83. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +3 -2
  84. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +4 -3
  85. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model_.py +3 -2
  86. luminarycloud/params/simulation/material/fluid/viscosity_model/__init__.py +1 -1
  87. luminarycloud/params/simulation/material/fluid/viscosity_model/prescribed_viscosity_.py +3 -2
  88. luminarycloud/params/simulation/material/fluid/viscosity_model/sutherland_.py +3 -2
  89. luminarycloud/params/simulation/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +4 -3
  90. luminarycloud/params/simulation/material/fluid/viscosity_model_.py +3 -2
  91. luminarycloud/params/simulation/material/material_fluid_.py +7 -6
  92. luminarycloud/params/simulation/material/material_solid_.py +4 -3
  93. luminarycloud/params/simulation/material_entity_.py +9 -8
  94. luminarycloud/params/simulation/monitor_plane_.py +5 -4
  95. luminarycloud/params/simulation/motion_data/__init__.py +1 -1
  96. luminarycloud/params/simulation/motion_data/frame_transforms/__init__.py +1 -1
  97. luminarycloud/params/simulation/motion_data/frame_transforms/no_transform_.py +5 -4
  98. luminarycloud/params/simulation/motion_data/frame_transforms/rotational_transform_.py +5 -4
  99. luminarycloud/params/simulation/motion_data/frame_transforms/translational_transform_.py +5 -4
  100. luminarycloud/params/simulation/motion_data/frame_transforms_.py +3 -2
  101. luminarycloud/params/simulation/motion_data/motion_type/__init__.py +1 -1
  102. luminarycloud/params/simulation/motion_data/motion_type/constant_angular_motion_.py +5 -4
  103. luminarycloud/params/simulation/motion_data/motion_type/constant_translation_motion_.py +5 -4
  104. luminarycloud/params/simulation/motion_data/motion_type_.py +3 -2
  105. luminarycloud/params/simulation/motion_data_.py +6 -5
  106. luminarycloud/params/simulation/multi_physics_coupling_options_.py +3 -2
  107. luminarycloud/params/simulation/output_.py +3 -2
  108. luminarycloud/params/simulation/particle_group/particle_group_type/__init__.py +1 -1
  109. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +4 -3
  110. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +4 -3
  111. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +3 -2
  112. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +7 -6
  113. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_line_.py +3 -2
  114. luminarycloud/params/simulation/particle_group/particle_group_type/probe_points_.py +5 -4
  115. luminarycloud/params/simulation/particle_group/particle_group_type/source_points_.py +5 -4
  116. luminarycloud/params/simulation/particle_group/particle_group_type_.py +3 -2
  117. luminarycloud/params/simulation/particle_group_.py +4 -3
  118. luminarycloud/params/simulation/physics/__init__.py +3 -3
  119. luminarycloud/params/simulation/physics/fluid/__init__.py +9 -9
  120. luminarycloud/params/simulation/physics/fluid/adjoint_controls_fluid_.py +3 -2
  121. luminarycloud/params/simulation/physics/fluid/basic_fluid_.py +3 -2
  122. luminarycloud/params/simulation/physics/fluid/boundary_conditions/__init__.py +5 -5
  123. luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +5 -4
  124. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/__init__.py +3 -3
  125. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +7 -6
  126. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +5 -4
  127. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +5 -4
  128. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +6 -5
  129. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +5 -4
  130. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +6 -5
  131. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +8 -7
  132. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/__init__.py +1 -1
  133. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +5 -4
  134. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +3 -2
  135. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +3 -2
  136. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +3 -2
  137. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +3 -2
  138. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet_.py +6 -5
  139. luminarycloud/params/simulation/physics/fluid/boundary_conditions/symmetry_.py +5 -4
  140. luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +3 -2
  141. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/__init__.py +1 -1
  142. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +3 -2
  143. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +3 -2
  144. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/__init__.py +1 -1
  145. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +3 -2
  146. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/slip_.py +3 -2
  147. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +3 -2
  148. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_energy_.py +3 -2
  149. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_momentum_.py +3 -2
  150. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall_.py +7 -6
  151. luminarycloud/params/simulation/physics/fluid/boundary_conditions_fluid_.py +3 -2
  152. luminarycloud/params/simulation/physics/fluid/initialization/__init__.py +2 -2
  153. luminarycloud/params/simulation/physics/fluid/initialization/fluid_existing_solution_.py +5 -4
  154. luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +5 -4
  155. luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +5 -4
  156. luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +3 -2
  157. luminarycloud/params/simulation/physics/fluid/initialization_fluid_.py +3 -2
  158. luminarycloud/params/simulation/physics/fluid/physical_behavior/__init__.py +1 -1
  159. luminarycloud/params/simulation/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +8 -7
  160. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/__init__.py +1 -1
  161. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/__init__.py +2 -2
  162. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +3 -2
  163. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +8 -7
  164. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -3
  165. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +5 -4
  166. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +3 -2
  167. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +3 -2
  168. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +3 -2
  169. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +9 -8
  170. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +4 -3
  171. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -3
  172. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +3 -2
  173. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model_.py +3 -2
  174. luminarycloud/params/simulation/physics/fluid/physical_behavior_.py +5 -4
  175. luminarycloud/params/simulation/physics/fluid/porous_behavior_.py +3 -2
  176. luminarycloud/params/simulation/physics/fluid/solution_controls/__init__.py +1 -1
  177. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +3 -2
  178. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +3 -2
  179. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +3 -2
  180. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +3 -2
  181. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +7 -6
  182. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method_.py +3 -2
  183. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/__init__.py +1 -1
  184. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +3 -2
  185. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +3 -2
  186. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method_.py +3 -2
  187. luminarycloud/params/simulation/physics/fluid/solution_controls_fluid_.py +5 -4
  188. luminarycloud/params/simulation/physics/fluid/spatial_discretization/__init__.py +1 -1
  189. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/__init__.py +1 -1
  190. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +3 -2
  191. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/fds_.py +3 -2
  192. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +3 -2
  193. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +3 -2
  194. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_.py +3 -2
  195. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +3 -2
  196. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +3 -2
  197. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order_.py +3 -2
  198. luminarycloud/params/simulation/physics/fluid/spatial_discretization_fluid_.py +5 -4
  199. luminarycloud/params/simulation/physics/fluid/turbulence/__init__.py +2 -2
  200. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/__init__.py +1 -1
  201. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_.py +3 -2
  202. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +3 -2
  203. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/iddes_.py +3 -2
  204. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation_.py +3 -2
  205. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +3 -2
  206. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +3 -2
  207. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +3 -2
  208. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst_.py +6 -5
  209. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +3 -2
  210. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +3 -2
  211. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +3 -2
  212. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras_.py +6 -5
  213. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/__init__.py +2 -2
  214. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +3 -2
  215. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +3 -2
  216. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +3 -2
  217. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +3 -2
  218. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +3 -2
  219. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model_.py +3 -2
  220. luminarycloud/params/simulation/physics/fluid/turbulence_.py +6 -5
  221. luminarycloud/params/simulation/physics/fluid_.py +12 -13
  222. luminarycloud/params/simulation/physics/heat/__init__.py +4 -4
  223. luminarycloud/params/simulation/physics/heat/adjoint_controls_heat_.py +3 -2
  224. luminarycloud/params/simulation/physics/heat/boundary_conditions/__init__.py +2 -2
  225. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_convection_.py +5 -4
  226. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +5 -4
  227. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +5 -4
  228. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_symmetry_.py +5 -4
  229. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_temperature_.py +5 -4
  230. luminarycloud/params/simulation/physics/heat/boundary_conditions_heat_.py +5 -4
  231. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/__init__.py +1 -1
  232. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +3 -2
  233. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +4 -3
  234. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type_.py +3 -2
  235. luminarycloud/params/simulation/physics/heat/heat_source_.py +6 -5
  236. luminarycloud/params/simulation/physics/heat/initialization/heat_existing_solution_.py +5 -4
  237. luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values_.py +5 -4
  238. luminarycloud/params/simulation/physics/heat/initialization_heat_.py +3 -2
  239. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +4 -3
  240. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +3 -2
  241. luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +4 -3
  242. luminarycloud/params/simulation/physics/heat/spatial_discretization_heat_.py +3 -2
  243. luminarycloud/params/simulation/physics/heat_.py +9 -8
  244. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/__init__.py +1 -1
  245. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +3 -2
  246. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/translational_periodicity_.py +3 -2
  247. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type_.py +3 -2
  248. luminarycloud/params/simulation/physics/periodic_pair_.py +4 -3
  249. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/__init__.py +1 -1
  250. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py +3 -2
  251. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/krylov_amg_.py +9 -8
  252. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type_.py +3 -2
  253. luminarycloud/params/simulation/physics_.py +7 -6
  254. luminarycloud/params/simulation/simulation_param_.py +12 -13
  255. luminarycloud/params/simulation/sliding_interfaces_.py +8 -7
  256. luminarycloud/params/simulation/surface_name_.py +3 -2
  257. luminarycloud/params/simulation/time/__init__.py +2 -2
  258. luminarycloud/params/simulation/time/compute_statistics/__init__.py +1 -1
  259. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_off_.py +3 -2
  260. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_on_.py +3 -2
  261. luminarycloud/params/simulation/time/compute_statistics_.py +3 -2
  262. luminarycloud/params/simulation/time/time_marching/time_explicit_.py +3 -2
  263. luminarycloud/params/simulation/time/time_marching/time_implicit_.py +3 -2
  264. luminarycloud/params/simulation/time/time_marching_.py +3 -2
  265. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py +3 -2
  266. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py +3 -2
  267. luminarycloud/params/simulation/time/time_step_ramp_.py +3 -2
  268. luminarycloud/params/simulation/time_.py +6 -5
  269. luminarycloud/params/simulation/volume_entity_.py +5 -4
  270. luminarycloud/physics_ai/__init__.py +8 -0
  271. luminarycloud/physics_ai/architectures.py +38 -0
  272. luminarycloud/physics_ai/models.py +42 -0
  273. luminarycloud/project.py +39 -19
  274. luminarycloud/reference_values.py +20 -3
  275. luminarycloud/simulation.py +8 -3
  276. luminarycloud/simulation_param.py +50 -27
  277. luminarycloud/simulation_template.py +85 -14
  278. luminarycloud/types/adfloat.py +19 -1
  279. luminarycloud/types/ids.py +2 -0
  280. luminarycloud/vis/__init__.py +0 -3
  281. luminarycloud/vis/display.py +1 -0
  282. luminarycloud/vis/interactive_scene.py +42 -9
  283. luminarycloud/vis/visualization.py +101 -20
  284. luminarycloud/volume_selection.py +5 -5
  285. {luminarycloud-0.14.1.dist-info → luminarycloud-0.15.1.dist-info}/METADATA +2 -2
  286. {luminarycloud-0.14.1.dist-info → luminarycloud-0.15.1.dist-info}/RECORD +287 -271
  287. {luminarycloud-0.14.1.dist-info → luminarycloud-0.15.1.dist-info}/WHEEL +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import ABC, ABCMeta
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
8
  from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
@@ -13,9 +13,10 @@ from luminarycloud.types import Vector3
13
13
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
14
14
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
15
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
+ from luminarycloud._helpers import CodeRepr
16
17
  import luminarycloud.params.enum._enum_wrappers as enum
17
18
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, CodeRepr, create_unique_id
19
+ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
19
20
 
20
21
  from luminarycloud.params.simulation.time.compute_statistics_ import ComputeStatistics
21
22
  from luminarycloud.params.simulation.time.compute_statistics_ import *
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import ABC, ABCMeta
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
8
  from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
@@ -13,9 +13,10 @@ from luminarycloud.types import Vector3
13
13
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
14
14
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
15
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
+ from luminarycloud._helpers import CodeRepr
16
17
  import luminarycloud.params.enum._enum_wrappers as enum
17
18
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, CodeRepr, create_unique_id
19
+ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
19
20
 
20
21
 
21
22
  @dataclass(kw_only=True)
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import ABC, ABCMeta
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
8
  from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
@@ -13,9 +13,10 @@ from luminarycloud.types import Vector3
13
13
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
14
14
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
15
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
+ from luminarycloud._helpers import CodeRepr
16
17
  import luminarycloud.params.enum._enum_wrappers as enum
17
18
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, CodeRepr, create_unique_id
19
+ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
19
20
 
20
21
  from luminarycloud.params.simulation.time.time_marching_ import TimeMarching
21
22
  from luminarycloud.params.simulation.time.time_marching_ import *
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import ABC, ABCMeta
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
8
  from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
@@ -13,9 +13,10 @@ from luminarycloud.types import Vector3
13
13
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
14
14
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
15
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
+ from luminarycloud._helpers import CodeRepr
16
17
  import luminarycloud.params.enum._enum_wrappers as enum
17
18
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, CodeRepr, create_unique_id
19
+ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
19
20
 
20
21
  from luminarycloud.params.simulation.time.time_marching_ import TimeMarching
21
22
  from luminarycloud.params.simulation.time.time_marching_ import *
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import ABC, ABCMeta
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
8
  from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
@@ -13,9 +13,10 @@ from luminarycloud.types import Vector3
13
13
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
14
14
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
15
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
+ from luminarycloud._helpers import CodeRepr
16
17
  import luminarycloud.params.enum._enum_wrappers as enum
17
18
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, CodeRepr, create_unique_id
19
+ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
19
20
 
20
21
 
21
22
  @dataclass(kw_only=True)
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import ABC, ABCMeta
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
8
  from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
@@ -13,9 +13,10 @@ from luminarycloud.types import Vector3
13
13
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
14
14
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
15
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
+ from luminarycloud._helpers import CodeRepr
16
17
  import luminarycloud.params.enum._enum_wrappers as enum
17
18
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, CodeRepr, create_unique_id
19
+ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
19
20
 
20
21
  from luminarycloud.params.simulation.time.time_step_ramp_ import TimeStepRamp
21
22
  from luminarycloud.params.simulation.time.time_step_ramp_ import *
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import ABC, ABCMeta
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
8
  from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
@@ -13,9 +13,10 @@ from luminarycloud.types import Vector3
13
13
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
14
14
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
15
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
+ from luminarycloud._helpers import CodeRepr
16
17
  import luminarycloud.params.enum._enum_wrappers as enum
17
18
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, CodeRepr, create_unique_id
19
+ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
19
20
 
20
21
  from luminarycloud.params.simulation.time.time_step_ramp_ import TimeStepRamp
21
22
  from luminarycloud.params.simulation.time.time_step_ramp_ import *
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import ABC, ABCMeta
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
8
  from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
@@ -13,9 +13,10 @@ from luminarycloud.types import Vector3
13
13
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
14
14
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
15
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
+ from luminarycloud._helpers import CodeRepr
16
17
  import luminarycloud.params.enum._enum_wrappers as enum
17
18
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, CodeRepr, create_unique_id
19
+ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
19
20
 
20
21
 
21
22
  @dataclass(kw_only=True)
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import ABC, ABCMeta
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
8
  from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
@@ -13,9 +13,10 @@ from luminarycloud.types import Vector3
13
13
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
14
14
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
15
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
+ from luminarycloud._helpers import CodeRepr
16
17
  import luminarycloud.params.enum._enum_wrappers as enum
17
18
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, CodeRepr, create_unique_id
19
+ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
19
20
 
20
21
  from luminarycloud.params.simulation.time.compute_statistics_ import ComputeStatistics
21
22
  from luminarycloud.params.simulation.time.compute_statistics_ import *
@@ -46,13 +47,13 @@ class Time(CodeRepr, ParamGroupWrapper[clientpb.Time]):
46
47
  """Time parameters used by a transient solution (required if flow_behavior = transient)."""
47
48
 
48
49
  time_marching: TimeMarching = field(default_factory=TimeImplicit)
49
- "Scheme for time-accurate integration."
50
+ "Scheme for time-accurate integration. Possible types: ``TimeImplicit``, ``TimeExplicit`` from the ``time_marching`` module."
50
51
  time_step: float = 0.0001
51
52
  "The fixed physical time step."
52
53
  time_step_ramp: TimeStepRamp = field(default_factory=TimeStepRampOff)
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)."
54
+ "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."
54
55
  compute_statistics: ComputeStatistics = field(default_factory=ComputeStatisticsOff)
55
- "Compute time-averaged values of flow variables (e.g. Velocity)."
56
+ "Compute time-averaged values of flow variables (e.g. Velocity). Possible types: ``ComputeStatisticsOff``, ``ComputeStatisticsOn`` from the ``compute_statistics`` module."
56
57
 
57
58
  def _to_proto(self) -> clientpb.Time:
58
59
  _proto = clientpb.Time()
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import ABC, ABCMeta
4
4
  from dataclasses import dataclass, field
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
  from uuid import uuid4
7
7
 
8
8
  from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
@@ -13,17 +13,18 @@ from luminarycloud.types import Vector3
13
13
  from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
14
14
  from luminarycloud._proto.client import simulation_pb2 as clientpb
15
15
  from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
16
+ from luminarycloud._helpers import CodeRepr
16
17
  import luminarycloud.params.enum._enum_wrappers as enum
17
18
 
18
- from luminarycloud.params.simulation._lib import ParamGroupWrapper, CodeRepr, create_unique_id
19
+ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_unique_id
19
20
 
20
21
 
21
22
  @dataclass(kw_only=True)
22
23
  class VolumeEntity(CodeRepr, ParamGroupWrapper[clientpb.VolumeEntity]):
23
24
  """Volume entity."""
24
25
 
25
- volume_identifier: Optional[EntityIdentifier] = None
26
- "Unique identifier for a volume entity"
26
+ volume_identifier: EntityIdentifier | None = None
27
+ "Unique identifier for a volume entity."
27
28
 
28
29
  def _to_proto(self) -> clientpb.VolumeEntity:
29
30
  _proto = clientpb.VolumeEntity()
@@ -0,0 +1,8 @@
1
+ from .architectures import (
2
+ list_architectures as list_architectures,
3
+ PhysicsAiArchitecture as PhysicsAiArchitecture,
4
+ )
5
+ from .models import (
6
+ list_pretrained_models as list_pretrained_models,
7
+ PhysicsAiModel as PhysicsAiModel,
8
+ )
@@ -0,0 +1,38 @@
1
+ # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
2
+ from __future__ import annotations
3
+
4
+ from typing import List
5
+
6
+ from .._client import get_default_client
7
+ from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
8
+ from .._wrapper import ProtoWrapper, ProtoWrapperBase
9
+ from .._helpers.warnings import experimental
10
+ from ..types.ids import PhysicsAiArchitectureID
11
+
12
+
13
+ @experimental
14
+ @ProtoWrapper(physaipb.PhysicsAiArchitecture)
15
+ class PhysicsAiArchitecture(ProtoWrapperBase):
16
+ """
17
+ Represents a Physics AI architecture.
18
+
19
+ warning:: This feature is experimental and may change or be removed without notice.
20
+ """
21
+
22
+ id: PhysicsAiArchitectureID
23
+ name: str
24
+ description: str
25
+ version: str
26
+ _proto: physaipb.PhysicsAiArchitecture
27
+
28
+
29
+ @experimental
30
+ def list_architectures() -> List[PhysicsAiArchitecture]:
31
+ """
32
+ List available Physics AI architectures for model training.
33
+
34
+ warning:: This feature is experimental and may change or be removed without notice.
35
+ """
36
+ req = physaipb.ListArchitecturesRequest()
37
+ res = get_default_client().ListArchitectures(req)
38
+ return [PhysicsAiArchitecture(arch) for arch in res.architectures]
@@ -0,0 +1,42 @@
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
6
+
7
+ from .._client import get_default_client
8
+ from .._helpers._timestamp_to_datetime import timestamp_to_datetime
9
+ from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
10
+ from .._wrapper import ProtoWrapper, ProtoWrapperBase
11
+ from .._helpers.warnings import experimental
12
+ from ..types.ids import PhysicsAiModelID
13
+
14
+
15
+ @experimental
16
+ @ProtoWrapper(physaipb.PhysicsAiModel)
17
+ class PhysicsAiModel(ProtoWrapperBase):
18
+ """Represents a Physics AI model."""
19
+
20
+ id: PhysicsAiModelID
21
+ name: str
22
+ version: str
23
+
24
+ _proto: physaipb.PhysicsAiModel
25
+
26
+ @property
27
+ def create_time(self) -> datetime:
28
+ return timestamp_to_datetime(self._proto.create_time)
29
+
30
+ @property
31
+ def update_time(self) -> datetime:
32
+ return timestamp_to_datetime(self._proto.update_time)
33
+
34
+
35
+ @experimental
36
+ def list_pretrained_models() -> List[PhysicsAiModel]:
37
+ """
38
+ List available pretrained Physics AI models.
39
+ """
40
+ req = physaipb.ListPretrainedModelsRequest()
41
+ res = get_default_client().ListPretrainedModels(req)
42
+ return [PhysicsAiModel(model) for model in res.models]
luminarycloud/project.py CHANGED
@@ -45,7 +45,7 @@ from .enum import GPUType, MeshType, TableType
45
45
  from .meshing import MeshAdaptationParams, MeshGenerationParams
46
46
  from .simulation_param import SimulationParam
47
47
  from .tables import RectilinearTable, create_rectilinear_table
48
- from .types import MeshID, ProjectID
48
+ from .types import MeshID, ProjectID, SimulationTemplateID
49
49
 
50
50
  if TYPE_CHECKING:
51
51
  from .geometry import Geometry
@@ -109,6 +109,10 @@ class Project(ProtoWrapperBase):
109
109
  )
110
110
  get_default_client().DeleteProject(req)
111
111
 
112
+ @property
113
+ def url(self) -> str:
114
+ return f"https://{get_default_client().primary_domain}/project/{self.id}"
115
+
112
116
  def create_geometry(
113
117
  self,
114
118
  cad_file_path: PathLike | str,
@@ -257,7 +261,7 @@ class Project(ProtoWrapperBase):
257
261
  @deprecated("Use create_or_get_mesh() instead", "0.10.0")
258
262
  def create_mesh(
259
263
  self,
260
- params: meshpb.MeshGenerationParams | MeshAdaptationParams | MeshGenerationParams,
264
+ params: MeshAdaptationParams | MeshGenerationParams,
261
265
  *,
262
266
  name: str,
263
267
  ) -> "Mesh":
@@ -312,7 +316,7 @@ class Project(ProtoWrapperBase):
312
316
 
313
317
  def create_or_get_mesh(
314
318
  self,
315
- params: meshpb.MeshGenerationParams | MeshAdaptationParams | MeshGenerationParams,
319
+ params: MeshAdaptationParams | MeshGenerationParams,
316
320
  *,
317
321
  name: str,
318
322
  ) -> "Mesh":
@@ -344,7 +348,7 @@ class Project(ProtoWrapperBase):
344
348
  return lc.Mesh(res.mesh)
345
349
  raise
346
350
 
347
- def create_hex_mesh(
351
+ def _create_hex_mesh(
348
352
  self,
349
353
  names_to_file_paths: Dict[str, Union[PathLike[Any], str]],
350
354
  params: hexmeshpb.HexMeshSpec,
@@ -432,12 +436,11 @@ class Project(ProtoWrapperBase):
432
436
  raise RuntimeError("The table upload failed.")
433
437
 
434
438
  # Update the simulation template with the new table reference.
435
- simulation_template.parameters.table_references[name].url = url
436
- simulation_template.parameters.table_references[name].table_type = table_type.value
437
- simulation_template.parameters.table_references[name].uploaded_filename = uploaded_filename
438
- simulation_template.update(
439
- name=simulation_template.name, parameters=simulation_template.parameters
440
- )
439
+ params: clientpb.SimulationParam = simulation_template._proto.parameters
440
+ params.table_references[name].url = url
441
+ params.table_references[name].table_type = table_type.value
442
+ params.table_references[name].uploaded_filename = uploaded_filename
443
+ simulation_template._update(name=simulation_template.name, parameters=params)
441
444
 
442
445
  return RectilinearTable(id=name, name=uploaded_filename, table_type=table_type)
443
446
 
@@ -543,8 +546,9 @@ class Project(ProtoWrapperBase):
543
546
  self,
544
547
  name: str,
545
548
  *,
546
- parameters: Optional[Union[clientpb.SimulationParam, SimulationParam]] = None,
549
+ parameters: Optional[SimulationParam] = None,
547
550
  params_json_path: Optional[PathLike | str] = None,
551
+ copy_from: Optional["SimulationTemplate" | SimulationTemplateID | str] = None,
548
552
  ) -> "SimulationTemplate":
549
553
  """
550
554
  Create a new simulation template object.
@@ -561,19 +565,35 @@ class Project(ProtoWrapperBase):
561
565
  Complete simulation parameters. Ignored if `params_json_path` is set.
562
566
  params_json_path : PathLike or str, optional
563
567
  Path to local JSON file containing simulation params.
564
- """
568
+ copy_from : SimulationTemplate or str, optional
569
+ Simulation template to copy. If provided, the new template will be a copy of this one.
570
+ Can pass a SimulationTemplate object or an ID of the template to copy.
571
+ """
572
+ if (
573
+ int(params_json_path is not None)
574
+ + int(parameters is not None)
575
+ + int(copy_from is not None)
576
+ != 1
577
+ ):
578
+ raise ValueError(
579
+ "Exactly one of parameters, params_json_path, or copy_from must be set"
580
+ )
581
+
582
+ param_proto: clientpb.SimulationParam | None = None
583
+ copy_from_id: str | None = None
584
+
565
585
  if params_json_path is not None:
566
586
  param_proto = simulation_params_from_json_path(params_json_path)
567
587
  elif parameters is not None:
568
- if isinstance(parameters, SimulationParam):
569
- param_proto = parameters._to_proto()
588
+ param_proto = parameters._to_proto()
589
+ elif copy_from is not None:
590
+ if isinstance(copy_from, lc.SimulationTemplate):
591
+ copy_from_id = copy_from.id
570
592
  else:
571
- param_proto = clientpb.SimulationParam()
572
- param_proto.CopyFrom(parameters)
573
- else:
574
- raise Exception("Either parameters or params_json_path must be set")
593
+ copy_from_id = copy_from
594
+
575
595
  req = simtemplatepb.CreateSimulationTemplateRequest(
576
- project_id=self.id, name=name, parameters=param_proto
596
+ project_id=self.id, name=name, parameters=param_proto, copy_from=copy_from_id
577
597
  )
578
598
  res = get_default_client().CreateSimulationTemplate(req)
579
599
  return lc.SimulationTemplate(res.simulation_template)
@@ -3,10 +3,10 @@ from dataclasses import dataclass
3
3
  from typing import Any
4
4
  from ._proto.base.base_pb2 import AdFloatType
5
5
  from ._proto.output import reference_values_pb2 as refvalpb
6
+ from ._proto.client import simulation_pb2 as clientpb
7
+ from ._helpers import CodeRepr
6
8
  from .enum import ReferenceValuesType
7
9
 
8
- from .params.simulation._lib import CodeRepr
9
-
10
10
 
11
11
  @dataclass(kw_only=True)
12
12
  class ReferenceValues(CodeRepr):
@@ -75,7 +75,24 @@ class ReferenceValues(CodeRepr):
75
75
  self._to_proto_common(proto)
76
76
  return proto
77
77
 
78
- def _from_proto_common(self, proto: Any) -> None:
78
+ def _to_client_proto(self) -> clientpb.ReferenceValues:
79
+ proto = clientpb.ReferenceValues()
80
+ if self.reference_value_type == ReferenceValuesType.PRESCRIBE_VALUES:
81
+ proto.reference_type = clientpb.PRESCRIBE_VALUES
82
+ elif self.reference_value_type == ReferenceValuesType.FARFIELD_VALUES:
83
+ proto.reference_type = clientpb.REFERENCE_FARFIELD_VALUES
84
+ else:
85
+ proto.reference_type = clientpb.INVALID_REFERENCE_TYPE
86
+ self._to_proto_common(proto)
87
+ return proto
88
+
89
+ def _from_client_proto(self, proto: clientpb.ReferenceValues) -> None:
90
+ if proto.reference_type == clientpb.PRESCRIBE_VALUES:
91
+ self.reference_value_type = ReferenceValuesType.PRESCRIBE_VALUES
92
+ elif proto.reference_type == clientpb.REFERENCE_FARFIELD_VALUES:
93
+ self.reference_value_type = ReferenceValuesType.FARFIELD_VALUES
94
+ else:
95
+ self.reference_value_type = ReferenceValuesType.UNSPECIFIED
79
96
  self.area_ref = proto.area_ref.value
80
97
  self.length_ref = proto.length_ref.value
81
98
  self.use_aero_moment_ref_lengths = proto.use_aero_moment_ref_lengths
@@ -6,6 +6,7 @@ from typing import Optional
6
6
  from ._client import get_default_client
7
7
  from ._helpers._timestamp_to_datetime import timestamp_to_datetime
8
8
  from ._helpers._wait_for_simulation import wait_for_simulation
9
+ from ._helpers.warnings import deprecated
9
10
  from ._proto.api.v0.luminarycloud.common import common_pb2 as commonpb
10
11
  from ._proto.api.v0.luminarycloud.simulation import simulation_pb2 as simulationpb
11
12
  from ._proto.api.v0.luminarycloud.solution import solution_pb2 as solutionpb
@@ -22,6 +23,7 @@ from .enum import (
22
23
  )
23
24
  from .simulation_param import SimulationParam
24
25
  from .reference_values import ReferenceValues
26
+ from .simulation_param import SimulationParam
25
27
  from .solution import Solution
26
28
  from .types import MeshID, ProjectID, SimulationID, Vector3Like
27
29
  from .types.vector3 import _to_vector3_proto
@@ -288,16 +290,19 @@ class Simulation(ProtoWrapperBase):
288
290
  res = get_default_client().ListSolutions(req)
289
291
  return [Solution(s) for s in res.solutions]
290
292
 
291
- def get_parameters(self) -> clientpb.SimulationParam:
293
+ def get_parameters(self) -> SimulationParam:
292
294
  req = simulationpb.GetSimulationParametersRequest(id=self.id)
293
- return get_default_client().GetSimulationParameters(req)
295
+ return SimulationParam.from_proto(get_default_client().GetSimulationParameters(req))
294
296
 
297
+ @deprecated(
298
+ "Use get_parameters() instead. This method will be removed in a future release.",
299
+ )
295
300
  def get_simulation_param(self) -> SimulationParam:
296
301
  """
297
302
  Returns the simulation parameters associated with this template to allow customization of
298
303
  the parameters.
299
304
  """
300
- return SimulationParam.from_proto(self.get_parameters())
305
+ return self.get_parameters()
301
306
 
302
307
 
303
308
  def get_simulation(id: SimulationID) -> Simulation:
@@ -9,6 +9,7 @@ from typing import Optional, TypeVar, cast
9
9
  import luminarycloud.params.enum._enum_wrappers as enum
10
10
  from luminarycloud._helpers._simulation_params_from_json import (
11
11
  simulation_params_from_json_path,
12
+ simulation_params_from_json_dict,
12
13
  )
13
14
  from luminarycloud._helpers.warnings import experimental
14
15
  from luminarycloud._proto.client import simulation_pb2 as clientpb
@@ -46,7 +47,29 @@ logger = getLogger(__name__)
46
47
 
47
48
  @dataclass(kw_only=True, repr=False)
48
49
  class SimulationParam(_SimulationParam):
49
- """Simulation configuration that supports multiple physics."""
50
+ """
51
+ Solver configuration parameters that support multi-physics simulations.
52
+
53
+ The structure of these parameters is related to the decision tree of selecting different models,
54
+ boundary conditions, etc. for the simulation.
55
+ Most of these choices are made by picking one class for a given field over a number of
56
+ alternatives. For example:
57
+
58
+ >>> import luminarycloud.params.simulation as sim_params
59
+ >>> params = SimulationParam()
60
+ >>> params.physics[0].fluid.turbulence = sim_params.physics.fluid.turbulence.KomegaSst()
61
+ >>> params.physics[0].fluid.turbulence = sim_params.physics.fluid.turbulence.SpalartAllmaras()
62
+
63
+ The alternatives are listed in the documentation of each field (turbulence in this case), and
64
+ the (sub)module that provides them is always named after the field.
65
+ Therefore, even without consulting the documentation, it is possible to list the alternatives
66
+ using Python's ``dir`` function, in this case:
67
+
68
+ >>> dir(sim_params.physics.fluid.turbulence)
69
+
70
+ The alternative classes have different fields, which may again have their own alternative
71
+ classes thereby repeating the pattern and creating the tree structure.
72
+ """
50
73
 
51
74
  reference_values: ReferenceValues = field(default_factory=ReferenceValues)
52
75
  "Reference values for outputs and stopping conditions."
@@ -56,26 +79,21 @@ class SimulationParam(_SimulationParam):
56
79
 
57
80
  def _to_proto(self) -> clientpb.SimulationParam:
58
81
  _proto = super()._to_proto()
59
- transient = self.basic is not None and self.basic.time == enum.FlowBehavior.TRANSIENT
60
- if self.reference_values.reference_value_type == ReferenceValuesType.FARFIELD_VALUES:
61
- raise ValueError(
62
- "ReferenceValuesType.FARFIELD_VALUES cannot be used in SimulationParam yet."
63
- )
64
- self.reference_values._to_proto_common(_proto.reference_values)
82
+ _proto.reference_values.CopyFrom(self.reference_values._to_client_proto())
65
83
  return _proto
66
84
 
67
85
  @classmethod
68
86
  def from_proto(self, proto: clientpb.SimulationParam) -> "SimulationParam":
69
87
  _wrapper = cast(SimulationParam, super().from_proto(proto))
70
- transient = (
71
- _wrapper.basic is not None and _wrapper.basic.time == enum.FlowBehavior.TRANSIENT
72
- )
73
- _wrapper.reference_values._from_proto_common(proto.reference_values)
88
+ _wrapper.reference_values._from_client_proto(proto.reference_values)
74
89
  return _wrapper
75
90
 
76
91
  @classmethod
77
- def from_json(cls, path: PathLike) -> "SimulationParam":
78
- return cls.from_proto(simulation_params_from_json_path(path))
92
+ def from_json(cls, source: PathLike | dict) -> "SimulationParam":
93
+ if isinstance(source, PathLike):
94
+ return cls.from_proto(simulation_params_from_json_path(source))
95
+ else:
96
+ return cls.from_proto(simulation_params_from_json_dict(source))
79
97
 
80
98
  def assign_material(self, material: MaterialEntity, volume: Volume | str) -> None:
81
99
  """
@@ -290,16 +308,17 @@ class SimulationParam(_SimulationParam):
290
308
  def __repr__(self) -> str:
291
309
  return pformat(vars(self), compact=True, sort_dicts=True)
292
310
 
293
- def to_code(self) -> str:
311
+ def to_code(self, hide_defaults: bool = True) -> str:
294
312
  """
295
313
  Returns the python code that generates an identical SimulationParam object.
296
- This is a verbose representation where every parameter is set, even if its value
297
- corresponds to the default, or a preset would override the value.
314
+ This is a verbose representation that does not make use of helper functions like
315
+ assign_material and assign_physics.
316
+ Parameters with default values are omitted by default, with hide_defaults=False, code will
317
+ also be generated for those parameters.
298
318
  """
299
319
  code = """## NOTE: This is a verbose representation of a SimulationParam object as the
300
320
  ## code that creates an identical object. The verbosity is intended to facilitate
301
- ## the discovery of available parameters. However, note that when presets are used
302
- ## (e.g. for material properties) some lines of this representation become redundant.
321
+ ## the discovery of available parameters.
303
322
  import luminarycloud
304
323
  from luminarycloud import *
305
324
  from luminarycloud.types import Vector3
@@ -308,16 +327,20 @@ from luminarycloud.params.enum import *
308
327
  from luminarycloud.params import simulation as params
309
328
 
310
329
 
311
- obj = SimulationParam()
312
330
  """
313
- for line in _SimulationParam.to_code(self).split("\n")[1:]:
314
- if line.startswith("new_") or line.startswith("#"):
315
- code += f"{line}\n"
316
- elif line.startswith(".new_"):
317
- code += f"{line[1:]}\n"
318
- elif line:
319
- code += f"obj{line}\n"
320
- return code
331
+ return code + self._to_code_helper("obj", hide_defaults).replace(
332
+ "luminarycloud.simulation_param.SimulationParam()", "SimulationParam()", 1
333
+ )
334
+
335
+ def find_parameter(self, parameter: str) -> None:
336
+ """
337
+ Searches the full output of "to_code()" for occurrences of "parameter" and prints the lines
338
+ with matches. This is a helper function to assist users in finding, for example, how to
339
+ change farfield conditions, material properties, etc.
340
+ """
341
+ for i, line in enumerate(self.to_code(False).split("\n")):
342
+ if parameter.lower() in line.lower():
343
+ print(f"line {i}: {line}")
321
344
 
322
345
 
323
346
  T = TypeVar("T")