luminarycloud 0.14.0__py3-none-any.whl → 0.15.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 (295) hide show
  1. luminarycloud/__init__.py +8 -1
  2. luminarycloud/_client/client.py +9 -0
  3. luminarycloud/_client/logging_interceptor.py +25 -0
  4. luminarycloud/_client/tracing.py +13 -8
  5. luminarycloud/_helpers/__init__.py +2 -0
  6. luminarycloud/_helpers/_code_representation.py +135 -0
  7. luminarycloud/_helpers/_simulation_params_from_json.py +5 -1
  8. luminarycloud/_helpers/download.py +16 -0
  9. luminarycloud/_helpers/named_variables.py +25 -0
  10. luminarycloud/_helpers/upload.py +31 -11
  11. luminarycloud/_helpers/warnings/deprecated.py +8 -10
  12. luminarycloud/_helpers/warnings/experimental.py +4 -4
  13. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +135 -110
  14. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +82 -10
  15. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +34 -0
  16. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +12 -0
  17. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py +40 -40
  18. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi +8 -2
  19. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.py +182 -0
  20. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.pyi +260 -0
  21. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.py +204 -0
  22. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.pyi +75 -0
  23. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +94 -0
  24. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +145 -0
  25. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +104 -0
  26. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +42 -0
  27. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +25 -25
  28. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +10 -3
  29. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.py +25 -3
  30. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.pyi +32 -0
  31. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2_grpc.py +34 -0
  32. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2_grpc.pyi +12 -0
  33. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py +162 -0
  34. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi +254 -0
  35. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py +203 -0
  36. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi +74 -0
  37. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +157 -141
  38. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +32 -4
  39. luminarycloud/_proto/cad/boolean_pb2.py +8 -8
  40. luminarycloud/_proto/cad/boolean_pb2.pyi +34 -4
  41. luminarycloud/_proto/client/simulation_pb2.py +304 -294
  42. luminarycloud/_proto/client/simulation_pb2.pyi +30 -1
  43. luminarycloud/_proto/geometry/geometry_pb2.py +58 -58
  44. luminarycloud/_proto/geometry/geometry_pb2.pyi +58 -11
  45. luminarycloud/_proto/hexmesh/hexmesh_pb2.py +42 -42
  46. luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +2 -2
  47. luminarycloud/_proto/output/reference_values_pb2.py +5 -5
  48. luminarycloud/_proto/parametricworker/parametricworker_pb2.py +31 -31
  49. luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi +6 -4
  50. luminarycloud/_proto/quantity/quantity_pb2.py +4 -4
  51. luminarycloud/_proto/table/table_pb2.py +9 -8
  52. luminarycloud/_proto/table/table_pb2.pyi +7 -1
  53. luminarycloud/enum/__init__.py +2 -0
  54. luminarycloud/enum/geometry_status.py +28 -0
  55. luminarycloud/geometry.py +64 -32
  56. luminarycloud/geometry_version.py +2 -2
  57. luminarycloud/mesh.py +11 -4
  58. luminarycloud/meshing/__init__.py +1 -0
  59. luminarycloud/meshing/metadata/__init__.py +6 -0
  60. luminarycloud/meshing/metadata/mesh_metadata.py +57 -0
  61. luminarycloud/named_variable_set.py +121 -0
  62. luminarycloud/outputs/output_definitions.py +11 -10
  63. luminarycloud/params/enum/_enum_wrappers.py +77 -968
  64. luminarycloud/params/outputs/output.py +2 -1
  65. luminarycloud/params/simulation/__init__.py +16 -16
  66. luminarycloud/params/simulation/_lib.py +1 -67
  67. luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +3 -2
  68. luminarycloud/params/simulation/adaptive_mesh_refinement_.py +3 -2
  69. luminarycloud/params/simulation/adjoint_.py +4 -3
  70. luminarycloud/params/simulation/basic/gravity/gravity_off_.py +3 -2
  71. luminarycloud/params/simulation/basic/gravity/gravity_on_.py +3 -2
  72. luminarycloud/params/simulation/basic/gravity_.py +3 -2
  73. luminarycloud/params/simulation/body_frame_.py +3 -2
  74. luminarycloud/params/simulation/entity_relationships/volume_material_relationship_.py +7 -6
  75. luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py +7 -6
  76. luminarycloud/params/simulation/entity_relationships_.py +3 -2
  77. luminarycloud/params/simulation/general_.py +4 -3
  78. luminarycloud/params/simulation/material/fluid/__init__.py +4 -4
  79. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_off_.py +3 -2
  80. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_on_.py +3 -2
  81. luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py +3 -2
  82. luminarycloud/params/simulation/material/fluid/material_model/__init__.py +1 -1
  83. luminarycloud/params/simulation/material/fluid/material_model/ideal_gas_.py +3 -2
  84. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_.py +3 -2
  85. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_with_energy_.py +3 -2
  86. luminarycloud/params/simulation/material/fluid/material_model_.py +3 -2
  87. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/__init__.py +2 -2
  88. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +3 -2
  89. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +3 -2
  90. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +4 -3
  91. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model_.py +3 -2
  92. luminarycloud/params/simulation/material/fluid/viscosity_model/__init__.py +1 -1
  93. luminarycloud/params/simulation/material/fluid/viscosity_model/prescribed_viscosity_.py +3 -2
  94. luminarycloud/params/simulation/material/fluid/viscosity_model/sutherland_.py +3 -2
  95. luminarycloud/params/simulation/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +4 -3
  96. luminarycloud/params/simulation/material/fluid/viscosity_model_.py +3 -2
  97. luminarycloud/params/simulation/material/material_fluid_.py +7 -6
  98. luminarycloud/params/simulation/material/material_solid_.py +4 -3
  99. luminarycloud/params/simulation/material_entity_.py +9 -8
  100. luminarycloud/params/simulation/monitor_plane_.py +5 -4
  101. luminarycloud/params/simulation/motion_data/__init__.py +1 -1
  102. luminarycloud/params/simulation/motion_data/frame_transforms/__init__.py +1 -1
  103. luminarycloud/params/simulation/motion_data/frame_transforms/no_transform_.py +5 -4
  104. luminarycloud/params/simulation/motion_data/frame_transforms/rotational_transform_.py +5 -4
  105. luminarycloud/params/simulation/motion_data/frame_transforms/translational_transform_.py +5 -4
  106. luminarycloud/params/simulation/motion_data/frame_transforms_.py +3 -2
  107. luminarycloud/params/simulation/motion_data/motion_type/__init__.py +1 -1
  108. luminarycloud/params/simulation/motion_data/motion_type/constant_angular_motion_.py +5 -4
  109. luminarycloud/params/simulation/motion_data/motion_type/constant_translation_motion_.py +5 -4
  110. luminarycloud/params/simulation/motion_data/motion_type_.py +3 -2
  111. luminarycloud/params/simulation/motion_data_.py +6 -5
  112. luminarycloud/params/simulation/multi_physics_coupling_options_.py +3 -2
  113. luminarycloud/params/simulation/output_.py +3 -2
  114. luminarycloud/params/simulation/particle_group/particle_group_type/__init__.py +1 -1
  115. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +4 -3
  116. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +4 -3
  117. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +3 -2
  118. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +7 -6
  119. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_line_.py +3 -2
  120. luminarycloud/params/simulation/particle_group/particle_group_type/probe_points_.py +5 -4
  121. luminarycloud/params/simulation/particle_group/particle_group_type/source_points_.py +5 -4
  122. luminarycloud/params/simulation/particle_group/particle_group_type_.py +3 -2
  123. luminarycloud/params/simulation/particle_group_.py +4 -3
  124. luminarycloud/params/simulation/physics/__init__.py +3 -3
  125. luminarycloud/params/simulation/physics/fluid/__init__.py +9 -9
  126. luminarycloud/params/simulation/physics/fluid/adjoint_controls_fluid_.py +3 -2
  127. luminarycloud/params/simulation/physics/fluid/basic_fluid_.py +3 -2
  128. luminarycloud/params/simulation/physics/fluid/boundary_conditions/__init__.py +5 -5
  129. luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +5 -4
  130. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/__init__.py +3 -3
  131. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +7 -6
  132. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +5 -4
  133. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +5 -4
  134. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +6 -5
  135. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +5 -4
  136. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +6 -5
  137. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +8 -7
  138. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/__init__.py +1 -1
  139. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +5 -4
  140. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +3 -2
  141. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +3 -2
  142. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +3 -2
  143. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +3 -2
  144. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet_.py +6 -5
  145. luminarycloud/params/simulation/physics/fluid/boundary_conditions/symmetry_.py +5 -4
  146. luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +3 -2
  147. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/__init__.py +1 -1
  148. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +3 -2
  149. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +3 -2
  150. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/__init__.py +1 -1
  151. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +3 -2
  152. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/slip_.py +3 -2
  153. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +3 -2
  154. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_energy_.py +3 -2
  155. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_momentum_.py +3 -2
  156. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall_.py +7 -6
  157. luminarycloud/params/simulation/physics/fluid/boundary_conditions_fluid_.py +3 -2
  158. luminarycloud/params/simulation/physics/fluid/initialization/__init__.py +2 -2
  159. luminarycloud/params/simulation/physics/fluid/initialization/fluid_existing_solution_.py +5 -4
  160. luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +5 -4
  161. luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +5 -4
  162. luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +3 -2
  163. luminarycloud/params/simulation/physics/fluid/initialization_fluid_.py +3 -2
  164. luminarycloud/params/simulation/physics/fluid/physical_behavior/__init__.py +1 -1
  165. luminarycloud/params/simulation/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +8 -7
  166. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/__init__.py +1 -1
  167. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/__init__.py +2 -2
  168. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +3 -2
  169. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +8 -7
  170. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -3
  171. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +5 -4
  172. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +3 -2
  173. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +3 -2
  174. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +3 -2
  175. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +9 -8
  176. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +4 -3
  177. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -3
  178. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +3 -2
  179. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model_.py +3 -2
  180. luminarycloud/params/simulation/physics/fluid/physical_behavior_.py +5 -4
  181. luminarycloud/params/simulation/physics/fluid/porous_behavior_.py +3 -2
  182. luminarycloud/params/simulation/physics/fluid/solution_controls/__init__.py +1 -1
  183. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +3 -2
  184. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +3 -2
  185. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +3 -2
  186. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +3 -2
  187. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +7 -6
  188. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method_.py +3 -2
  189. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/__init__.py +1 -1
  190. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +3 -2
  191. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +3 -2
  192. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method_.py +3 -2
  193. luminarycloud/params/simulation/physics/fluid/solution_controls_fluid_.py +5 -4
  194. luminarycloud/params/simulation/physics/fluid/spatial_discretization/__init__.py +1 -1
  195. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/__init__.py +1 -1
  196. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +3 -2
  197. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/fds_.py +3 -2
  198. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +3 -2
  199. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +3 -2
  200. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_.py +3 -2
  201. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +3 -2
  202. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +3 -2
  203. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order_.py +3 -2
  204. luminarycloud/params/simulation/physics/fluid/spatial_discretization_fluid_.py +5 -4
  205. luminarycloud/params/simulation/physics/fluid/turbulence/__init__.py +2 -2
  206. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/__init__.py +1 -1
  207. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_.py +3 -2
  208. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +3 -2
  209. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/iddes_.py +3 -2
  210. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation_.py +3 -2
  211. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +3 -2
  212. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +3 -2
  213. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +3 -2
  214. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst_.py +6 -5
  215. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +3 -2
  216. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +3 -2
  217. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +3 -2
  218. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras_.py +6 -5
  219. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/__init__.py +2 -2
  220. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +3 -2
  221. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +3 -2
  222. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +3 -2
  223. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +3 -2
  224. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +3 -2
  225. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model_.py +3 -2
  226. luminarycloud/params/simulation/physics/fluid/turbulence_.py +6 -5
  227. luminarycloud/params/simulation/physics/fluid_.py +12 -13
  228. luminarycloud/params/simulation/physics/heat/__init__.py +4 -4
  229. luminarycloud/params/simulation/physics/heat/adjoint_controls_heat_.py +3 -2
  230. luminarycloud/params/simulation/physics/heat/boundary_conditions/__init__.py +2 -2
  231. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_convection_.py +5 -4
  232. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +5 -4
  233. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +5 -4
  234. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_symmetry_.py +5 -4
  235. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_temperature_.py +5 -4
  236. luminarycloud/params/simulation/physics/heat/boundary_conditions_heat_.py +5 -4
  237. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/__init__.py +1 -1
  238. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +3 -2
  239. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +4 -3
  240. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type_.py +3 -2
  241. luminarycloud/params/simulation/physics/heat/heat_source_.py +6 -5
  242. luminarycloud/params/simulation/physics/heat/initialization/heat_existing_solution_.py +5 -4
  243. luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values_.py +5 -4
  244. luminarycloud/params/simulation/physics/heat/initialization_heat_.py +3 -2
  245. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +4 -3
  246. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +3 -2
  247. luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +4 -3
  248. luminarycloud/params/simulation/physics/heat/spatial_discretization_heat_.py +3 -2
  249. luminarycloud/params/simulation/physics/heat_.py +9 -8
  250. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/__init__.py +1 -1
  251. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +3 -2
  252. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/translational_periodicity_.py +3 -2
  253. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type_.py +3 -2
  254. luminarycloud/params/simulation/physics/periodic_pair_.py +4 -3
  255. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/__init__.py +1 -1
  256. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py +3 -2
  257. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/krylov_amg_.py +9 -8
  258. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type_.py +3 -2
  259. luminarycloud/params/simulation/physics_.py +7 -6
  260. luminarycloud/params/simulation/simulation_param_.py +12 -13
  261. luminarycloud/params/simulation/sliding_interfaces_.py +8 -7
  262. luminarycloud/params/simulation/surface_name_.py +3 -2
  263. luminarycloud/params/simulation/time/__init__.py +2 -2
  264. luminarycloud/params/simulation/time/compute_statistics/__init__.py +1 -1
  265. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_off_.py +3 -2
  266. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_on_.py +3 -2
  267. luminarycloud/params/simulation/time/compute_statistics_.py +3 -2
  268. luminarycloud/params/simulation/time/time_marching/time_explicit_.py +3 -2
  269. luminarycloud/params/simulation/time/time_marching/time_implicit_.py +3 -2
  270. luminarycloud/params/simulation/time/time_marching_.py +3 -2
  271. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py +3 -2
  272. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py +3 -2
  273. luminarycloud/params/simulation/time/time_step_ramp_.py +3 -2
  274. luminarycloud/params/simulation/time_.py +6 -5
  275. luminarycloud/params/simulation/volume_entity_.py +5 -4
  276. luminarycloud/physics_ai/__init__.py +8 -0
  277. luminarycloud/physics_ai/architectures.py +38 -0
  278. luminarycloud/physics_ai/models.py +42 -0
  279. luminarycloud/project.py +73 -21
  280. luminarycloud/reference_values.py +20 -3
  281. luminarycloud/simulation.py +8 -3
  282. luminarycloud/simulation_param.py +136 -29
  283. luminarycloud/simulation_template.py +84 -13
  284. luminarycloud/solution.py +17 -2
  285. luminarycloud/types/__init__.py +1 -0
  286. luminarycloud/types/adfloat.py +49 -19
  287. luminarycloud/types/ids.py +3 -0
  288. luminarycloud/vis/__init__.py +0 -3
  289. luminarycloud/vis/display.py +1 -0
  290. luminarycloud/vis/interactive_scene.py +47 -1
  291. luminarycloud/vis/visualization.py +57 -23
  292. luminarycloud/volume_selection.py +31 -19
  293. {luminarycloud-0.14.0.dist-info → luminarycloud-0.15.0.dist-info}/METADATA +2 -2
  294. {luminarycloud-0.14.0.dist-info → luminarycloud-0.15.0.dist-info}/RECORD +295 -274
  295. {luminarycloud-0.14.0.dist-info → luminarycloud-0.15.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,28 @@
1
+ # Copyright 2023-2024 Luminary Cloud, Inc. All Rights Reserved.
2
+ from enum import IntEnum
3
+ from .._proto.api.v0.luminarycloud.geometry import geometry_pb2
4
+
5
+
6
+ class GeometryStatus(IntEnum):
7
+ """
8
+ Represents the status of a geometry.
9
+
10
+ Attributes
11
+ ----------
12
+ UNKNOWN
13
+ Status is unknown.
14
+ IMPORTING
15
+ Geometry is still being processed.
16
+ NEEDS_CHECK
17
+ Geometry was created but has not yet been checked.
18
+ FAILED_CHECK
19
+ Geometry is not well-formed and cannot be used.
20
+ READY
21
+ Geometry is ready to use.
22
+ """
23
+
24
+ UNKNOWN = geometry_pb2.Geometry.UNKNOWN
25
+ IMPORTING = geometry_pb2.Geometry.IMPORTING
26
+ NEEDS_CHECK = geometry_pb2.Geometry.NEEDS_CHECK
27
+ FAILED_CHECK = geometry_pb2.Geometry.FAILED_CHECK
28
+ READY = geometry_pb2.Geometry.READY
luminarycloud/geometry.py CHANGED
@@ -5,8 +5,9 @@ from datetime import datetime
5
5
  import random
6
6
  from uuid import uuid4
7
7
  import time
8
+ from typing import Sequence
8
9
 
9
- from typing_extensions import TYPE_CHECKING, Sequence
10
+ from typing_extensions import TYPE_CHECKING
10
11
 
11
12
  import luminarycloud as lc
12
13
 
@@ -14,7 +15,7 @@ from ._client import get_default_client
14
15
  from ._helpers._timestamp_to_datetime import timestamp_to_datetime
15
16
  from ._proto.api.v0.luminarycloud.geometry import geometry_pb2 as geometrypb
16
17
  from ._proto.geometry import geometry_pb2 as gpb
17
-
18
+ from .enum import GeometryStatus
18
19
  from .params.geometry import Surface, Volume
19
20
  from .tag import Tag
20
21
  from ._wrapper import ProtoWrapper, ProtoWrapperBase
@@ -37,6 +38,8 @@ class Geometry(ProtoWrapperBase):
37
38
  "Geometry ID."
38
39
  name: str
39
40
  "Geometry name."
41
+ status: GeometryStatus
42
+ "The status of the geometry."
40
43
 
41
44
  _proto: geometrypb.Geometry
42
45
 
@@ -47,29 +50,18 @@ class Geometry(ProtoWrapperBase):
47
50
  """
48
51
  return timestamp_to_datetime(self._proto.create_time)
49
52
 
50
- def project(self) -> "Project":
53
+ @property
54
+ def update_time(self) -> datetime:
51
55
  """
52
- Get the project this geometry belongs to.
56
+ The time the geometry was last updated.
53
57
  """
54
- return lc.get_project(ProjectID(self._proto.project_id))
58
+ return timestamp_to_datetime(self._proto.update_time)
55
59
 
56
- def modify(self, modification: gpb.Modification) -> None:
60
+ def project(self) -> "Project":
57
61
  """
58
- Apply a modification to the geometry.
59
-
60
- Parameters
61
- ----------
62
- modification : Modification
63
- The modification to apply to the geometry. If the modification type is
64
- `MODIFICATION_TYPE_CREATE_FEATURE`, and the feature is a `farfield`, the
65
- geometry will be automatically subtracted from the farfield.
62
+ Get the project this geometry belongs to.
66
63
  """
67
- req = geometrypb.ModifyGeometryRequest(
68
- geometry_id=self.id,
69
- modification=modification,
70
- request_id=str(uuid4()),
71
- )
72
- get_default_client().ModifyGeometry(req)
64
+ return lc.get_project(ProjectID(self._proto.project_id))
73
65
 
74
66
  def copy(self, name: str = "") -> "Geometry":
75
67
  """
@@ -136,7 +128,7 @@ class Geometry(ProtoWrapperBase):
136
128
  create_proto.half_sphere.CopyFrom(shape._to_proto()) # type: ignore
137
129
  else:
138
130
  raise TypeError(f"Unsupported shape for farfield: {type(shape)}")
139
- self.modify(
131
+ self._modify(
140
132
  modification=gpb.Modification(
141
133
  mod_type=gpb.Modification.MODIFICATION_TYPE_CREATE_FEATURE,
142
134
  feature=gpb.Feature(
@@ -153,8 +145,21 @@ class Geometry(ProtoWrapperBase):
153
145
  def undo(self) -> None:
154
146
  """
155
147
  Undo the last modification to the geometry.
156
- """
157
- self.modify(
148
+
149
+ Examples
150
+ --------
151
+ >>> # Initialize create a farfield
152
+ >>> geometry.add_farfield(
153
+ ... lc.params.geometry.shapes.Sphere(radius=2.0, center=Vector3(0.0, 0.0, 0.0))
154
+ ... )
155
+ >>> # Undo the last modification
156
+ >>> geometry.undo()
157
+ >>> # Re-create a bigger farfield with a different center
158
+ >>> geometry.add_farfield(
159
+ ... lc.params.geometry.shapes.Sphere(radius=3.0, center=Vector3(1.0, 1.0, 1.0))
160
+ ... )
161
+ """
162
+ self._modify(
158
163
  modification=gpb.Modification(
159
164
  mod_type=gpb.Modification.MODIFICATION_TYPE_UNDO,
160
165
  )
@@ -164,7 +169,7 @@ class Geometry(ProtoWrapperBase):
164
169
  """
165
170
  Redo the last modification to the geometry.
166
171
  """
167
- self.modify(
172
+ self._modify(
168
173
  modification=gpb.Modification(
169
174
  mod_type=gpb.Modification.MODIFICATION_TYPE_REDO,
170
175
  )
@@ -181,7 +186,7 @@ class Geometry(ProtoWrapperBase):
181
186
  new_name : str
182
187
  The new name for the feature.
183
188
  """
184
- self.modify(
189
+ self._modify(
185
190
  modification=gpb.Modification(
186
191
  mod_type=gpb.Modification.MODIFICATION_TYPE_RENAME_FEATURE,
187
192
  feature=gpb.Feature(
@@ -200,7 +205,7 @@ class Geometry(ProtoWrapperBase):
200
205
  feature_id : str
201
206
  The ID of the feature to delete.
202
207
  """
203
- self.modify(
208
+ self._modify(
204
209
  modification=gpb.Modification(
205
210
  mod_type=gpb.Modification.MODIFICATION_TYPE_DELETE_FEATURE,
206
211
  feature=gpb.Feature(
@@ -218,7 +223,7 @@ class Geometry(ProtoWrapperBase):
218
223
  tag_names : list[str]
219
224
  The names of the tags to delete.
220
225
  """
221
- self.modify(
226
+ self._modify(
222
227
  modification=gpb.Modification(
223
228
  mod_type=gpb.Modification.MODIFICATION_TYPE_DELETE_TAGS,
224
229
  delete_tags=gpb.DeleteTags(
@@ -265,6 +270,7 @@ class Geometry(ProtoWrapperBase):
265
270
  )
266
271
  )
267
272
  if res.finished:
273
+ self.refresh()
268
274
  return res.ok, list(res.issues)
269
275
  jitter = random.uniform(0.5, 1.5)
270
276
  time.sleep(2 + jitter)
@@ -314,7 +320,7 @@ class Geometry(ProtoWrapperBase):
314
320
  new_name : str
315
321
  The new name for the tag.
316
322
  """
317
- self.modify(
323
+ self._modify(
318
324
  modification=gpb.Modification(
319
325
  mod_type=gpb.Modification.MODIFICATION_TYPE_RENAME_TAG,
320
326
  rename_tag=gpb.RenameTag(
@@ -346,7 +352,7 @@ class Geometry(ProtoWrapperBase):
346
352
  else:
347
353
  raise TypeError("entities must be of type Volume or Surface")
348
354
 
349
- self.modify(
355
+ self._modify(
350
356
  modification=gpb.Modification(
351
357
  mod_type=gpb.Modification.MODIFICATION_TYPE_DELETE_TAG,
352
358
  delete_tag=gpb.DeleteTag(
@@ -377,7 +383,7 @@ class Geometry(ProtoWrapperBase):
377
383
  else:
378
384
  raise TypeError("entities must be of type Volume or Surface")
379
385
 
380
- self.modify(
386
+ self._modify(
381
387
  modification=gpb.Modification(
382
388
  mod_type=gpb.Modification.MODIFICATION_TYPE_UPDATE_TAG,
383
389
  create_or_update_tag=gpb.CreateOrUpdateTag(
@@ -439,7 +445,25 @@ class Geometry(ProtoWrapperBase):
439
445
  ]
440
446
  return surfaces, volumes
441
447
 
442
- def list_features(
448
+ def _modify(self, modification: gpb.Modification) -> None:
449
+ """
450
+ Apply a modification to the geometry.
451
+
452
+ Parameters
453
+ ----------
454
+ modification : Modification
455
+ The modification to apply to the geometry. If the modification type is
456
+ `MODIFICATION_TYPE_CREATE_FEATURE`, and the feature is a `farfield`, the
457
+ geometry will be automatically subtracted from the farfield.
458
+ """
459
+ req = geometrypb.ModifyGeometryRequest(
460
+ geometry_id=self.id,
461
+ modification=modification,
462
+ request_id=str(uuid4()),
463
+ )
464
+ get_default_client().ModifyGeometry(req)
465
+
466
+ def _list_features(
443
467
  self,
444
468
  ) -> list[gpb.Feature]:
445
469
  """
@@ -458,7 +482,7 @@ class Geometry(ProtoWrapperBase):
458
482
  )
459
483
  return list(res.features)
460
484
 
461
- def list_feature_issues(
485
+ def _list_feature_issues(
462
486
  self,
463
487
  ) -> list[gpb.FeatureIssues]:
464
488
  """
@@ -478,6 +502,14 @@ class Geometry(ProtoWrapperBase):
478
502
  )
479
503
  return list(res.features_issues)
480
504
 
505
+ def refresh(self) -> None:
506
+ """
507
+ Refresh the geometry status.
508
+ """
509
+ req = geometrypb.GetGeometryRequest(geometry_id=self.id)
510
+ res: geometrypb.GetGeometryResponse = get_default_client().GetGeometry(req)
511
+ self._proto = res.geometry
512
+
481
513
 
482
514
  def get_geometry(id: str) -> Geometry:
483
515
  """
@@ -87,7 +87,7 @@ class GeometryVersion(ProtoWrapperBase):
87
87
  ]
88
88
  return surfaces, volumes
89
89
 
90
- def list_features(
90
+ def _list_features(
91
91
  self,
92
92
  ) -> list[gpb.Feature]:
93
93
  """
@@ -106,7 +106,7 @@ class GeometryVersion(ProtoWrapperBase):
106
106
  )
107
107
  return list(res.features)
108
108
 
109
- def list_feature_issues(
109
+ def _list_feature_issues(
110
110
  self,
111
111
  ) -> list[gpb.FeatureIssues]:
112
112
  """
luminarycloud/mesh.py CHANGED
@@ -11,8 +11,9 @@ from ._helpers._wait_for_mesh import wait_for_mesh
11
11
  from ._proto.api.v0.luminarycloud.mesh import mesh_pb2 as meshpb
12
12
  from ._wrapper import ProtoWrapper, ProtoWrapperBase
13
13
  from .enum import MeshStatus
14
- from .types import MeshID, ProjectID
15
14
  from .geometry_version import GeometryVersion, get_geometry_version
15
+ from .meshing.metadata import MeshMetadata
16
+ from .types import MeshID, ProjectID
16
17
 
17
18
  if TYPE_CHECKING:
18
19
  from .project import Project
@@ -122,6 +123,12 @@ class Mesh(ProtoWrapperBase):
122
123
  )
123
124
  get_default_client().DeleteMesh(req)
124
125
 
126
+ def get_metadata(self) -> MeshMetadata:
127
+ """
128
+ Get the metadata for this mesh.
129
+ """
130
+ return get_mesh_metadata(self.id)
131
+
125
132
 
126
133
  def get_mesh(id: MeshID) -> Mesh:
127
134
  """
@@ -137,9 +144,9 @@ def get_mesh(id: MeshID) -> Mesh:
137
144
  return Mesh(res.mesh)
138
145
 
139
146
 
140
- def get_mesh_metadata(id: MeshID) -> meshpb.MeshMetadata:
147
+ def get_mesh_metadata(id: MeshID) -> MeshMetadata:
141
148
  """
142
- Returns the mesh metadata of a specific mesh with the given ID.
149
+ Returns the mesh metadata for the mesh with the given ID.
143
150
 
144
151
  Parameters
145
152
  ----------
@@ -149,4 +156,4 @@ def get_mesh_metadata(id: MeshID) -> meshpb.MeshMetadata:
149
156
  res: meshpb.GetMeshMetadataResponse = get_default_client().GetMeshMetadata(
150
157
  meshpb.GetMeshMetadataRequest(id=id)
151
158
  )
152
- return res.mesh_metadata
159
+ return MeshMetadata(res.mesh_metadata)
@@ -1,3 +1,4 @@
1
+ from . import metadata as metadata
1
2
  from . import sizing_strategy as sizing_strategy
2
3
 
3
4
  from .mesh_generation_params import (
@@ -0,0 +1,6 @@
1
+ from .mesh_metadata import (
2
+ BoundaryMetadata as BoundaryMetadata,
3
+ MeshMetadata as MeshMetadata,
4
+ MeshStats as MeshStats,
5
+ ZoneMetadata as ZoneMetadata,
6
+ )
@@ -0,0 +1,57 @@
1
+ from ..._proto.api.v0.luminarycloud.mesh import mesh_pb2 as meshpb
2
+ from ..._wrapper import ProtoWrapper, ProtoWrapperBase
3
+ from ...types import Vector3
4
+
5
+
6
+ @ProtoWrapper(meshpb.MeshMetadata.MeshStats)
7
+ class MeshStats(ProtoWrapperBase):
8
+ """Contains stats about a part of a mesh."""
9
+
10
+ n_points: int
11
+ "The number of points."
12
+ n_faces: int
13
+ "The number of faces."
14
+ n_cvs: int
15
+ "The number of control volumes."
16
+ min_coord: Vector3
17
+ "The minimum coordinate."
18
+ max_coord: Vector3
19
+ "The maximum coordinate."
20
+
21
+ _proto: meshpb.MeshMetadata.MeshStats
22
+
23
+
24
+ @ProtoWrapper(meshpb.MeshMetadata.Boundary)
25
+ class BoundaryMetadata(ProtoWrapperBase):
26
+ """Represents a Mesh object."""
27
+
28
+ name: str
29
+ "The name of this mesh boundary."
30
+ stats: MeshStats
31
+ "The stats for this mesh boundary."
32
+
33
+ _proto: meshpb.MeshMetadata.Boundary
34
+
35
+
36
+ @ProtoWrapper(meshpb.MeshMetadata.Zone)
37
+ class ZoneMetadata(ProtoWrapperBase):
38
+ """Contains info about a zone in a mesh."""
39
+
40
+ name: str
41
+ "The name of this mesh zone."
42
+ stats: MeshStats
43
+ "The stats for this mesh zone."
44
+ boundaries: list[BoundaryMetadata]
45
+ "The boundaries in this mesh zone."
46
+
47
+ _proto: meshpb.MeshMetadata.Zone
48
+
49
+
50
+ @ProtoWrapper(meshpb.MeshMetadata)
51
+ class MeshMetadata(ProtoWrapperBase):
52
+ """Contains info about a Mesh."""
53
+
54
+ zones: list[ZoneMetadata]
55
+ "The zones in this mesh."
56
+
57
+ _proto: meshpb.MeshMetadata
@@ -0,0 +1,121 @@
1
+ # Copyright 2023-2024 Luminary Cloud, Inc. All Rights Reserved.
2
+ from datetime import datetime
3
+
4
+ from ._client import get_default_client
5
+ from ._helpers._timestamp_to_datetime import timestamp_to_datetime
6
+ from ._helpers.named_variables import _named_variables_from_proto
7
+ from ._helpers.warnings import experimental
8
+ from ._proto.api.v0.luminarycloud.named_variable_set import (
9
+ named_variable_set_pb2 as namedvariablepb,
10
+ )
11
+ from ._wrapper import ProtoWrapper, ProtoWrapperBase
12
+ from .types import ProjectID, NamedVariableSetID
13
+
14
+
15
+ @experimental
16
+ @ProtoWrapper(namedvariablepb.NamedVariableSet)
17
+ class NamedVariableSet(ProtoWrapperBase):
18
+ """
19
+ Represents a named variable set object.
20
+
21
+ Note: This class is experimental and may change in the future.
22
+
23
+ Attributes
24
+ ----------
25
+ id : NamedVariableSetID
26
+ Named variable set ID.
27
+ project_id : ProjectID
28
+ ID of the project containing this named variable set.
29
+ name : str
30
+ Name of the named variable set.
31
+ create_time : datetime
32
+ Time the named variable set was created.
33
+ update_time : datetime
34
+ Time the named variable set was last updated.
35
+
36
+ Examples
37
+ --------
38
+ >>> named_variable_set = lc.get_named_variable_set(NamedVariableSetID("123"))
39
+ >>> named_variable_set.name = "My Named Variable Set"
40
+ >>> named_variable_set["x"] = 1.0
41
+ >>> named_variable_set["custom_expression"] = "x + 1"
42
+ >>> named_variable_set.save()
43
+ """
44
+
45
+ id: NamedVariableSetID
46
+ "Named variable set ID."
47
+ project_id: ProjectID
48
+ "ID of the project containing this simulation."
49
+
50
+ _proto: namedvariablepb.NamedVariableSet
51
+
52
+ @property
53
+ def name(self) -> str:
54
+ """Name of the named variable set."""
55
+ return self._proto.name
56
+
57
+ @name.setter
58
+ def name(self, value: str) -> None:
59
+ self._proto.name = value
60
+
61
+ @property
62
+ def create_time(self) -> datetime:
63
+ return timestamp_to_datetime(self._proto.create_time)
64
+
65
+ @property
66
+ def update_time(self) -> datetime:
67
+ return timestamp_to_datetime(self._proto.update_time)
68
+
69
+ def save(self) -> None:
70
+ """Save the named variable set."""
71
+ req = namedvariablepb.UpdateNamedVariableSetRequest(
72
+ id=self.id,
73
+ name=self._proto.name,
74
+ named_variables=self._get_named_variables(),
75
+ )
76
+ res: namedvariablepb.UpdateNamedVariableSetResponse = (
77
+ get_default_client().UpdateNamedVariableSet(req)
78
+ )
79
+ self._proto = res.named_variable_set
80
+ self._named_variables = None
81
+
82
+ def refresh(self) -> None:
83
+ """Refresh the named variable set."""
84
+ self._proto = get_named_variable_set(self.id)._proto
85
+ self._named_variables = None
86
+
87
+ def delete(self) -> None:
88
+ """Delete the named variable set. This is irreversible."""
89
+ req = namedvariablepb.DeleteNamedVariableSetRequest(id=self.id)
90
+ get_default_client().DeleteNamedVariableSet(req)
91
+
92
+ def __getitem__(self, key: str) -> float | str:
93
+ return self._get_named_variables()[key]
94
+
95
+ def __setitem__(self, key: str, value: float | str) -> None:
96
+ self._get_named_variables()[key] = value
97
+
98
+ def __delitem__(self, key: str) -> None:
99
+ del self._get_named_variables()[key]
100
+
101
+ def __contains__(self, key: str) -> bool:
102
+ return key in self._get_named_variables()
103
+
104
+ def _get_named_variables(self) -> dict[str, float | str]:
105
+ if self._named_variables is None:
106
+ self._named_variables = _named_variables_from_proto(self._proto.named_variables)
107
+ return self._named_variables
108
+
109
+
110
+ def get_named_variable_set(id: NamedVariableSetID) -> NamedVariableSet:
111
+ """
112
+ Retrieve a specific named variable set by ID.
113
+
114
+ Parameters
115
+ ----------
116
+ id : str
117
+ Named variable set ID.
118
+ """
119
+ req = namedvariablepb.GetNamedVariableSetRequest(id=id)
120
+ res: namedvariablepb.GetNamedVariableSetResponse = get_default_client().GetNamedVariableSet(req)
121
+ return NamedVariableSet(res.named_variable_set)
@@ -16,6 +16,7 @@ from ..enum import (
16
16
  Vector3Component,
17
17
  VolumeReductionType,
18
18
  )
19
+ from .._helpers import CodeRepr
19
20
 
20
21
 
21
22
  # CalculationType enum comes from the simulation protobuf, but that's just a copy-paste of the
@@ -29,7 +30,7 @@ def _proto_calc_type(calc_type: CalculationType) -> feoutputpb.CalculationType.V
29
30
 
30
31
 
31
32
  @dataclass
32
- class TrailingAverageConfig:
33
+ class TrailingAverageConfig(CodeRepr):
33
34
  """Configuration for a trailing average calculation of an OutputDefinition."""
34
35
 
35
36
  averaging_iterations: int = 0
@@ -37,7 +38,7 @@ class TrailingAverageConfig:
37
38
 
38
39
 
39
40
  @dataclass
40
- class ConvergenceMonitoringConfig:
41
+ class ConvergenceMonitoringConfig(CodeRepr):
41
42
  """Configuration for a convergence monitoring calculation of an OutputDefinition."""
42
43
 
43
44
  averaging_iterations: int = 0
@@ -47,7 +48,7 @@ class ConvergenceMonitoringConfig:
47
48
 
48
49
 
49
50
  @dataclass
50
- class OutputDefinitionInclusions:
51
+ class OutputDefinitionInclusions(CodeRepr):
51
52
  """Specifies which values should be calculated for an OutputDefinition."""
52
53
 
53
54
  base_value: bool = True
@@ -101,7 +102,7 @@ class OutputDefinitionInclusions:
101
102
 
102
103
 
103
104
  @dataclass
104
- class SurfaceAverageOutputDefinition:
105
+ class SurfaceAverageOutputDefinition(CodeRepr):
105
106
  """An output that is calculated as an average over surfaces."""
106
107
 
107
108
  id: str = ""
@@ -161,7 +162,7 @@ class SurfaceAverageOutputDefinition:
161
162
 
162
163
 
163
164
  @dataclass
164
- class ForceOutputDefinition:
165
+ class ForceOutputDefinition(CodeRepr):
165
166
  """A force or moment output."""
166
167
 
167
168
  id: str = ""
@@ -223,7 +224,7 @@ class ForceOutputDefinition:
223
224
 
224
225
 
225
226
  @dataclass
226
- class ResidualOutputDefinition:
227
+ class ResidualOutputDefinition(CodeRepr):
227
228
  """Configuration of simulation residuals."""
228
229
 
229
230
  id: str = ""
@@ -262,7 +263,7 @@ class ResidualOutputDefinition:
262
263
 
263
264
 
264
265
  @dataclass
265
- class InnerIterationOutputDefinition:
266
+ class InnerIterationOutputDefinition(CodeRepr):
266
267
  """The presence of this definition enables reporting of inner iteration counts for transient simulations."""
267
268
 
268
269
  id: str = ""
@@ -289,7 +290,7 @@ class InnerIterationOutputDefinition:
289
290
 
290
291
 
291
292
  @dataclass
292
- class PointProbeOutputDefinition:
293
+ class PointProbeOutputDefinition(CodeRepr):
293
294
  """An output that is calculated at specific points in the domain."""
294
295
 
295
296
  id: str = ""
@@ -332,7 +333,7 @@ class PointProbeOutputDefinition:
332
333
 
333
334
 
334
335
  @dataclass
335
- class VolumeReductionOutputDefinition:
336
+ class VolumeReductionOutputDefinition(CodeRepr):
336
337
  """An output that is calculated as an aggregation over volumes."""
337
338
 
338
339
  id: str = ""
@@ -384,7 +385,7 @@ class VolumeReductionOutputDefinition:
384
385
 
385
386
 
386
387
  @dataclass
387
- class DerivedOutputDefinition:
388
+ class DerivedOutputDefinition(CodeRepr):
388
389
  """An output that is expressed as a function of other output definitions."""
389
390
 
390
391
  @dataclass