luminarycloud 0.13.1__py3-none-any.whl → 0.14.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 (327) hide show
  1. luminarycloud/__init__.py +3 -0
  2. luminarycloud/_client/client.py +4 -0
  3. luminarycloud/_client/logging_interceptor.py +25 -0
  4. luminarycloud/_client/tracing.py +13 -8
  5. luminarycloud/_helpers/__init__.py +1 -0
  6. luminarycloud/_helpers/download.py +28 -1
  7. luminarycloud/_helpers/named_variables.py +25 -0
  8. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py +40 -40
  9. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi +8 -2
  10. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.py +182 -0
  11. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.pyi +260 -0
  12. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.py +204 -0
  13. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.pyi +75 -0
  14. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +12 -12
  15. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +5 -1
  16. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.py +2 -1
  17. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.pyi +6 -2
  18. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.py +36 -14
  19. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.pyi +37 -1
  20. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2_grpc.py +34 -0
  21. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2_grpc.pyi +12 -0
  22. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +156 -132
  23. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +65 -7
  24. luminarycloud/_proto/assistant/assistant_pb2.py +172 -23
  25. luminarycloud/_proto/assistant/assistant_pb2.pyi +358 -4
  26. luminarycloud/_proto/client/simulation_pb2.py +284 -283
  27. luminarycloud/_proto/client/simulation_pb2.pyi +37 -32
  28. luminarycloud/_proto/geometry/geometry_pb2.py +46 -46
  29. luminarycloud/_proto/geometry/geometry_pb2.pyi +6 -1
  30. luminarycloud/_proto/hexmesh/hexmesh_pb2.py +138 -37
  31. luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +218 -37
  32. luminarycloud/_proto/quantity/quantity_pb2.py +4 -4
  33. luminarycloud/enum/vis_enums.py +26 -11
  34. luminarycloud/named_variable_set.py +121 -0
  35. luminarycloud/params/__init__.py +1 -2
  36. luminarycloud/params/enum/_enum_wrappers.py +861 -4
  37. luminarycloud/params/outputs/output.py +1 -1
  38. luminarycloud/params/{param_wrappers/simulation_param → simulation}/__init__.py +1 -0
  39. luminarycloud/params/{param_wrappers → simulation}/_lib.py +2 -4
  40. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement/boundary_layer_profile_.py +2 -2
  41. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement_.py +4 -4
  42. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adjoint_.py +2 -2
  43. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/gravity_off_.py +4 -4
  44. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/gravity_on_.py +4 -4
  45. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity_.py +2 -2
  46. luminarycloud/params/{param_wrappers/simulation_param → simulation}/body_frame_.py +2 -2
  47. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/volume_material_relationship_.py +2 -2
  48. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/volume_physics_relationship_.py +2 -2
  49. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships_.py +6 -6
  50. luminarycloud/params/{param_wrappers/simulation_param → simulation}/general_.py +8 -10
  51. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/boussinesq_off_.py +4 -4
  52. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/boussinesq_on_.py +4 -4
  53. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation_.py +2 -2
  54. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/ideal_gas_.py +4 -6
  55. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/incompressible_fluid_.py +4 -6
  56. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/incompressible_fluid_with_energy_.py +4 -6
  57. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model_.py +2 -2
  58. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +4 -4
  59. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +4 -4
  60. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +4 -4
  61. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model_.py +2 -2
  62. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/prescribed_viscosity_.py +4 -6
  63. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/sutherland_.py +4 -6
  64. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +4 -6
  65. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model_.py +2 -2
  66. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/material_fluid_.py +32 -40
  67. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/material_solid_.py +2 -2
  68. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material_entity_.py +6 -10
  69. luminarycloud/params/{param_wrappers/simulation_param → simulation}/monitor_plane_.py +10 -5
  70. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/no_transform_.py +4 -6
  71. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/rotational_transform_.py +4 -6
  72. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/translational_transform_.py +4 -6
  73. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms_.py +2 -2
  74. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/constant_angular_motion_.py +4 -4
  75. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/constant_translation_motion_.py +4 -4
  76. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type_.py +2 -2
  77. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data_.py +16 -20
  78. luminarycloud/params/{param_wrappers/simulation_param → simulation}/multi_physics_coupling_options_.py +2 -2
  79. luminarycloud/params/{param_wrappers/simulation_param → simulation}/output_.py +2 -2
  80. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +4 -4
  81. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +4 -4
  82. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +2 -2
  83. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +49 -0
  84. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_line_.py +4 -6
  85. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/probe_points_.py +4 -6
  86. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/source_points_.py +4 -6
  87. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type_.py +2 -2
  88. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group_.py +20 -17
  89. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/adjoint_controls_fluid_.py +2 -2
  90. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/basic_fluid_.py +2 -2
  91. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/__init__.py +0 -1
  92. luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +111 -0
  93. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/__init__.py +1 -0
  94. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +4 -6
  95. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +55 -0
  96. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +4 -6
  97. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +4 -6
  98. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +8 -6
  99. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +8 -6
  100. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +104 -0
  101. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +4 -4
  102. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +4 -4
  103. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +4 -4
  104. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +4 -4
  105. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +2 -2
  106. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet_.py +14 -14
  107. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/symmetry_.py +4 -4
  108. luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +50 -0
  109. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +4 -4
  110. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +4 -4
  111. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +4 -4
  112. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/slip_.py +4 -4
  113. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +4 -4
  114. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/wall_energy_.py +2 -2
  115. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/wall_momentum_.py +2 -2
  116. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall_.py +18 -18
  117. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions_fluid_.py +9 -4
  118. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization/__init__.py +0 -1
  119. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization/fluid_existing_solution_.py +4 -6
  120. luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +65 -0
  121. luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +77 -0
  122. luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +44 -0
  123. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization_fluid_.py +2 -2
  124. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +10 -5
  125. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +6 -6
  126. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +4 -4
  127. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -4
  128. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +4 -4
  129. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +8 -6
  130. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +6 -6
  131. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +8 -6
  132. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +2 -2
  133. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +4 -4
  134. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -4
  135. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +8 -6
  136. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model_.py +2 -2
  137. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior_.py +34 -29
  138. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/porous_behavior_.py +10 -5
  139. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +4 -4
  140. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +4 -4
  141. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +4 -4
  142. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +2 -2
  143. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +16 -16
  144. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method_.py +2 -2
  145. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +4 -4
  146. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +4 -4
  147. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method_.py +2 -2
  148. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls_fluid_.py +14 -14
  149. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +4 -4
  150. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/fds_.py +4 -4
  151. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +6 -4
  152. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +4 -4
  153. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_.py +2 -2
  154. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +4 -4
  155. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +4 -4
  156. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order_.py +2 -2
  157. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization_fluid_.py +20 -18
  158. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/ddes_.py +4 -6
  159. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +4 -6
  160. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/iddes_.py +4 -6
  161. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation_.py +2 -2
  162. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +4 -4
  163. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +4 -4
  164. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +2 -2
  165. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst_.py +10 -12
  166. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +4 -4
  167. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +4 -4
  168. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +2 -2
  169. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras_.py +10 -12
  170. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +4 -4
  171. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +4 -4
  172. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +4 -4
  173. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +4 -4
  174. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +4 -4
  175. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model_.py +2 -2
  176. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence_.py +22 -32
  177. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid_.py +60 -78
  178. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/adjoint_controls_heat_.py +2 -2
  179. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_convection_.py +4 -4
  180. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +4 -4
  181. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +4 -4
  182. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_symmetry_.py +4 -4
  183. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_temperature_.py +4 -4
  184. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions_heat_.py +9 -4
  185. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +4 -4
  186. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +4 -4
  187. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type_.py +2 -2
  188. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source_.py +16 -11
  189. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/heat_existing_solution_.py +4 -6
  190. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/heat_prescribed_values_.py +4 -6
  191. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization_heat_.py +2 -2
  192. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +10 -10
  193. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method_.py +2 -2
  194. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls_heat_.py +6 -6
  195. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/spatial_discretization_heat_.py +2 -2
  196. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat_.py +32 -40
  197. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +4 -6
  198. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/translational_periodicity_.py +4 -6
  199. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type_.py +2 -2
  200. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair_.py +8 -10
  201. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/gauss_seidel_.py +4 -4
  202. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/krylov_amg_.py +4 -4
  203. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type_.py +2 -2
  204. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics_.py +6 -6
  205. luminarycloud/params/{param_wrappers → simulation}/simulation_param_.py +34 -40
  206. luminarycloud/params/{param_wrappers/simulation_param → simulation}/sliding_interfaces_.py +10 -5
  207. luminarycloud/params/{param_wrappers/simulation_param → simulation}/surface_name_.py +2 -2
  208. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/compute_statistics_off_.py +4 -6
  209. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/compute_statistics_on_.py +4 -6
  210. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics_.py +2 -2
  211. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/time_explicit_.py +4 -4
  212. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/time_implicit_.py +4 -4
  213. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching_.py +2 -2
  214. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/time_step_ramp_off_.py +4 -4
  215. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/time_step_ramp_on_.py +4 -4
  216. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp_.py +2 -2
  217. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time_.py +20 -30
  218. luminarycloud/params/{param_wrappers/simulation_param → simulation}/volume_entity_.py +2 -2
  219. luminarycloud/project.py +83 -20
  220. luminarycloud/reference_values.py +1 -1
  221. luminarycloud/simulation.py +13 -2
  222. luminarycloud/simulation_param.py +94 -10
  223. luminarycloud/solution.py +24 -3
  224. luminarycloud/types/__init__.py +1 -0
  225. luminarycloud/types/adfloat.py +49 -19
  226. luminarycloud/types/ids.py +1 -0
  227. luminarycloud/types/vector3.py +28 -2
  228. luminarycloud/vis/__init__.py +2 -1
  229. luminarycloud/vis/display.py +57 -67
  230. luminarycloud/vis/filters.py +97 -16
  231. luminarycloud/vis/interactive_scene.py +40 -3
  232. luminarycloud/vis/visualization.py +84 -58
  233. luminarycloud/volume_selection.py +27 -15
  234. {luminarycloud-0.13.1.dist-info → luminarycloud-0.14.1.dist-info}/METADATA +1 -1
  235. luminarycloud-0.14.1.dist-info/RECORD +472 -0
  236. luminarycloud/params/param_wrappers/__init__.py +0 -2
  237. luminarycloud/params/param_wrappers/simulation_param/particle_group/particle_group_type/actuator_disk_.py +0 -51
  238. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/farfield_.py +0 -197
  239. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/inlet_.py +0 -189
  240. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/__init__.py +0 -4
  241. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/__init__.py +0 -5
  242. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/bc_komega_variables_.py +0 -37
  243. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/bc_turbulent_viscosity_and_intensity_komega_.py +0 -33
  244. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/bc_turbulent_viscosity_ratio_and_intensity_komega_.py +0 -33
  245. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega_boundary_conditions_.py +0 -25
  246. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/__init__.py +0 -3
  247. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/bc_sa_variable_.py +0 -33
  248. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/bc_turbulent_viscosity_ratio_sa_.py +0 -31
  249. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/bc_turbulent_viscosity_sa_.py +0 -31
  250. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras_boundary_conditions_.py +0 -25
  251. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +0 -65
  252. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/fluid_farfield_values_.py +0 -173
  253. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/fluid_prescribed_values_.py +0 -185
  254. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/__init__.py +0 -4
  255. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/__init__.py +0 -5
  256. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/init_farfield_values_komega_.py +0 -30
  257. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/init_turbulent_viscosity_and_intensity_komega_.py +0 -33
  258. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/init_turbulent_viscosity_ratio_and_intensity_komega_.py +0 -33
  259. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega_initialization_.py +0 -25
  260. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/__init__.py +0 -4
  261. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_farfield_values_sa_.py +0 -30
  262. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_sa_variable_.py +0 -31
  263. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_turbulent_viscosity_ratio_sa_.py +0 -31
  264. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_turbulent_viscosity_sa_.py +0 -31
  265. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras_initialization_.py +0 -25
  266. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence_initialization_.py +0 -69
  267. luminarycloud-0.13.1.dist-info/RECORD +0 -489
  268. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement/__init__.py +0 -0
  269. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/__init__.py +0 -0
  270. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/__init__.py +0 -0
  271. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/__init__.py +0 -0
  272. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/__init__.py +0 -0
  273. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/__init__.py +0 -0
  274. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/__init__.py +0 -0
  275. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/__init__.py +0 -0
  276. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/__init__.py +0 -0
  277. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/__init__.py +0 -0
  278. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/__init__.py +0 -0
  279. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/__init__.py +0 -0
  280. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/__init__.py +0 -0
  281. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/__init__.py +0 -0
  282. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/__init__.py +0 -0
  283. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/__init__.py +0 -0
  284. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/__init__.py +0 -0
  285. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/__init__.py +0 -0
  286. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/__init__.py +0 -0
  287. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/__init__.py +0 -0
  288. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/__init__.py +0 -0
  289. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/__init__.py +0 -0
  290. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/__init__.py +0 -0
  291. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/__init__.py +0 -0
  292. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/__init__.py +0 -0
  293. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/__init__.py +0 -0
  294. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/__init__.py +0 -0
  295. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/__init__.py +0 -0
  296. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/__init__.py +0 -0
  297. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/__init__.py +0 -0
  298. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/__init__.py +0 -0
  299. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/__init__.py +0 -0
  300. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/__init__.py +0 -0
  301. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/__init__.py +0 -0
  302. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/__init__.py +0 -0
  303. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/__init__.py +0 -0
  304. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/__init__.py +0 -0
  305. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/__init__.py +0 -0
  306. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/__init__.py +0 -0
  307. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/__init__.py +0 -0
  308. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/__init__.py +0 -0
  309. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/__init__.py +0 -0
  310. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/__init__.py +0 -0
  311. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/__init__.py +0 -0
  312. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/__init__.py +0 -0
  313. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/__init__.py +0 -0
  314. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/__init__.py +0 -0
  315. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type/__init__.py +0 -0
  316. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/__init__.py +0 -0
  317. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/__init__.py +0 -0
  318. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method/__init__.py +0 -0
  319. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/__init__.py +0 -0
  320. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/__init__.py +0 -0
  321. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/__init__.py +0 -0
  322. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/__init__.py +0 -0
  323. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/__init__.py +0 -0
  324. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/__init__.py +0 -0
  325. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/__init__.py +0 -0
  326. /luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/__init__.py +0 -0
  327. {luminarycloud-0.13.1.dist-info → luminarycloud-0.14.1.dist-info}/WHEEL +0 -0
@@ -1,19 +1,40 @@
1
+ from abc import ABCMeta
1
2
  from typing import Any
2
3
  from .._proto.base.base_pb2 import AdFloatType, FirstOrderAdType, SecondOrderAdType
3
4
 
4
5
 
5
- class FirstOrderAdFloat(float):
6
+ class AdFloat(float, metaclass=ABCMeta):
7
+ """An immutable float with adjoints/tangents"""
8
+
9
+ pass
10
+
11
+
12
+ class FirstOrderAdFloat(AdFloat):
6
13
  """An immutable float with first order adjoints/tangents attached."""
7
14
 
8
- tangent: tuple[float, ...]
9
- adjoint: tuple[float, ...]
15
+ _tangent: tuple[float, ...]
16
+ _adjoint: tuple[float, ...]
10
17
 
11
18
  def __new__(cls: type["FirstOrderAdFloat"], value: float, *_: Any) -> "FirstOrderAdFloat":
12
19
  return super().__new__(cls, value)
13
20
 
14
21
  def __init__(self, value: float, tangent: tuple[float, ...], adjoint: tuple[float, ...]):
15
- self.tangent = tuple(float(t) for t in tangent)
16
- self.adjoint = tuple(float(a) for a in adjoint)
22
+ if isinstance(value, AdFloat):
23
+ raise ValueError("Value cannot be an AdFloat")
24
+ if any(isinstance(t, AdFloat) for t in tangent):
25
+ raise ValueError("Tangent cannot be an AdFloat")
26
+ if any(isinstance(a, AdFloat) for a in adjoint):
27
+ raise ValueError("Adjoint cannot be an AdFloat")
28
+ self._tangent = tuple(float(t) for t in tangent)
29
+ self._adjoint = tuple(float(a) for a in adjoint)
30
+
31
+ @property
32
+ def tangent(self) -> tuple[float, ...]:
33
+ return self._tangent
34
+
35
+ @property
36
+ def adjoint(self) -> tuple[float, ...]:
37
+ return self._adjoint
17
38
 
18
39
  @staticmethod
19
40
  def _from_proto(proto: FirstOrderAdType) -> "FirstOrderAdFloat":
@@ -24,12 +45,12 @@ class FirstOrderAdFloat(float):
24
45
  )
25
46
 
26
47
 
27
- class SecondOrderAdFloat(float):
48
+ class SecondOrderAdFloat(AdFloat):
28
49
  """An immutable float with second order adjoints/tangents attached."""
29
50
 
30
- value: FirstOrderAdFloat
31
- tangent: tuple[FirstOrderAdFloat, ...]
32
- adjoint: tuple[FirstOrderAdFloat, ...]
51
+ _value: FirstOrderAdFloat
52
+ _tangent: tuple[FirstOrderAdFloat, ...]
53
+ _adjoint: tuple[FirstOrderAdFloat, ...]
33
54
 
34
55
  def __new__(cls, value: FirstOrderAdFloat, *_: Any) -> "SecondOrderAdFloat":
35
56
  return super().__new__(cls, value)
@@ -42,16 +63,25 @@ class SecondOrderAdFloat(float):
42
63
  ):
43
64
  if not isinstance(value, FirstOrderAdFloat):
44
65
  raise TypeError("Value must be a FirstOrderAdFloat")
45
- for t in tangent:
46
- if not isinstance(t, FirstOrderAdFloat):
47
- raise TypeError("Tangent must be a tuple of FirstOrderAdFloat")
48
- for a in adjoint:
49
- if not isinstance(a, FirstOrderAdFloat):
50
- raise TypeError("Adjoint must be a tuple of FirstOrderAdFloat")
51
-
52
- self.value = value
53
- self.tangent = tangent
54
- self.adjoint = adjoint
66
+ if any(not isinstance(t, FirstOrderAdFloat) for t in tangent):
67
+ raise TypeError("Tangent must be a tuple of FirstOrderAdFloat")
68
+ if any(not isinstance(a, FirstOrderAdFloat) for a in adjoint):
69
+ raise TypeError("Adjoint must be a tuple of FirstOrderAdFloat")
70
+ self._value = value
71
+ self._tangent = tangent
72
+ self._adjoint = adjoint
73
+
74
+ @property
75
+ def value(self) -> FirstOrderAdFloat:
76
+ return self._value
77
+
78
+ @property
79
+ def tangent(self) -> tuple[FirstOrderAdFloat, ...]:
80
+ return self._tangent
81
+
82
+ @property
83
+ def adjoint(self) -> tuple[FirstOrderAdFloat, ...]:
84
+ return self._adjoint
55
85
 
56
86
  @staticmethod
57
87
  def _from_proto(proto: SecondOrderAdType) -> "SecondOrderAdFloat":
@@ -8,3 +8,4 @@ SimulationID = NewType("SimulationID", str)
8
8
  SolutionID = NewType("SolutionID", str)
9
9
  SimulationTemplateID = NewType("SimulationTemplateID", str)
10
10
  GeometryFeatureID = NewType("GeometryFeatureID", str)
11
+ NamedVariableSetID = NewType("NamedVariableSetID", str)
@@ -1,6 +1,6 @@
1
1
  # Copyright 2023-2024 Luminary Cloud, Inc. All Rights Reserved.
2
2
  from dataclasses import dataclass
3
- from typing import TypeAlias
3
+ from typing import TypeAlias, Iterator
4
4
 
5
5
  from .._proto.api.v0.luminarycloud.common import common_pb2 as commonpb
6
6
  from .._proto.base.base_pb2 import AdVector3, Vector3 as Vector3Proto
@@ -12,7 +12,23 @@ from .adfloat import (
12
12
 
13
13
  @dataclass
14
14
  class Vector3:
15
- """Represents a 3-dimensional vector."""
15
+ """Represents a 3-dimensional vector.
16
+
17
+ Supports direct component access, indexing, iteration, and conversion to numpy arrays.
18
+
19
+ Examples:
20
+ >>> from luminarycloud.types import Vector3
21
+ >>> v = Vector3(1.0, 2.0, 3.0)
22
+ >>> v.x, v.y, v.z # Direct component access
23
+ (1.0, 2.0, 3.0)
24
+ >>> v[0] # Access by index
25
+ 1.0
26
+ >>> list(v) # Iterate over components
27
+ [1.0, 2.0, 3.0]
28
+ >>> import numpy as np
29
+ >>> np.array(v) # Convert to numpy array
30
+ array([1., 2., 3.])
31
+ """
16
32
 
17
33
  x: float = 0.0
18
34
  y: float = 0.0
@@ -60,6 +76,16 @@ class Vector3:
60
76
  else:
61
77
  raise IndexError(f"Index {index} out of bounds for Vector3")
62
78
 
79
+ def __iter__(self) -> Iterator[float]:
80
+ """Enable iteration over the vector components."""
81
+ yield self.x
82
+ yield self.y
83
+ yield self.z
84
+
85
+ def __len__(self) -> int:
86
+ """Return the number of components in the vector."""
87
+ return 3
88
+
63
89
 
64
90
  Vector3Like: TypeAlias = Vector3 | list[float] | tuple[float, float, float] # type: ignore
65
91
 
@@ -1,5 +1,5 @@
1
1
  from .visualization import (
2
- RenderOutput as RenderOuptut,
2
+ RenderOutput as RenderOutput,
3
3
  Scene as Scene,
4
4
  ColorMapPreset as ColorMapPreset,
5
5
  EntityType as EntityType,
@@ -19,6 +19,7 @@ from .filters import (
19
19
  ScaledVectorGlyphs as ScaledVectorGlyphs,
20
20
  RakeStreamlines as RakeStreamlines,
21
21
  SurfaceStreamlines as SurfaceStreamlines,
22
+ SurfaceLIC as SurfaceLIC,
22
23
  Threshold as Threshold,
23
24
  Isosurface as Isosurface,
24
25
  )
@@ -11,19 +11,17 @@ class Field:
11
11
 
12
12
  .. warning:: This feature is experimental and may change or be removed in the future.
13
13
 
14
- Attribues:
15
- ----------
16
- quantity : VisQuantity
17
- The quantity to color by.
18
- component : FieldComponent
19
- The component of the field to use, applicable to vector fields. If the field is a
20
- scalar, use the default X component.
21
14
  """
22
15
 
23
16
  quantity: VisQuantity = VisQuantity.ABSOLUTE_PRESSURE
17
+ """The quantity to color by."""
24
18
  component: FieldComponent = FieldComponent.X
19
+ """
20
+ The component of the field to use, applicable to vector fields. If the field is a
21
+ scalar, use the default X component.
22
+ """
25
23
 
26
- def __hash__(self):
24
+ def __hash__(self) -> int:
27
25
  return hash((self.quantity, self.component))
28
26
 
29
27
 
@@ -35,25 +33,23 @@ class DisplayAttributes:
35
33
 
36
34
  .. warning:: This feature is experimental and may change or be removed in the future.
37
35
 
38
- Attributes:
39
- ----------
40
- visible : bool
41
- If the object is visible or not. Default: True
42
- opacity : float
43
- How opaque the object is. This is a normalized number between
44
- 0 (i.e., fully transparent) and 1 (i.e., fully opaque). Default: 1
45
- field : Field
46
- What field quantity/component to color by, if applicable.
47
- representation : Representation
48
- how the object is represented in the scene (e.g., surface, surface with
49
- edges, wireframe or points). Default: surface.
50
36
  """
51
37
 
52
38
  visible: bool = True
39
+ """If the object is visible or not. Default: True"""
53
40
  # TODO(matt): opacity not hooked up yet.
54
41
  opacity: float = 1.0
42
+ """
43
+ How opaque the object is. This is a normalized number between
44
+ 0 (i.e., fully transparent) and 1 (i.e., fully opaque). Default: 1
45
+ """
55
46
  field: Field = dc.field(default_factory=Field)
47
+ """What field quantity/component to color by, if applicable."""
56
48
  representation: Representation = Representation.SURFACE
49
+ """
50
+ how the object is represented in the scene (e.g., surface, surface with
51
+ edges, wireframe or points). Default: surface.
52
+ """
57
53
 
58
54
  def _to_proto(self) -> vis_pb2.DisplayAttributes:
59
55
  attrs = vis_pb2.DisplayAttributes()
@@ -73,16 +69,12 @@ class DataRange:
73
69
 
74
70
  .. warning:: This feature is experimental and may change or be removed in the future.
75
71
 
76
- Attributes:
77
- -----------
78
- min_value : float
79
- The minimum value of the range.
80
- max_value : float
81
- The maximum value of the range.
82
72
  """
83
73
 
84
74
  min_value: float = float("inf")
75
+ """The minimum value of the range."""
85
76
  max_value: float = float("-inf")
77
+ """The maximum value of the range."""
86
78
 
87
79
  def is_valid(self) -> bool:
88
80
  return self.max_value >= self.min_value
@@ -101,30 +93,26 @@ class ColorMapAppearance:
101
93
 
102
94
  .. warning:: This feature is experimental and may change or be removed in the future.
103
95
 
104
- Attributes
105
- ----------
106
- visible: bool
107
- Controls if the color map is displayed or not. Default: True
108
- width: float
109
- The width of the color map in normalized device coordinates. Default: 0.034
110
- height: float
111
- The height of the color map in normalized device coordinates. Default: 0.146
112
- text_size: int
113
- The text size for the color map legend in pixels. Default: 36
114
- lower_left_x: float
115
- The lower left x position of the color map in normalized device
116
- coordinates. Default: 0.8
117
- lower_left_y: float
118
- The lower left y position of the color map in normalized device
119
- coordinates. Default: 0.8
120
96
  """
121
97
 
122
98
  visible: bool = True
99
+ """Controls if the color map is displayed or not. Default: True"""
123
100
  width: float = 0.034
101
+ """The width of the color map in normalized device coordinates. Default: 0.034"""
124
102
  height: float = 0.146
103
+ """The height of the color map in normalized device coordinates. Default: 0.146"""
125
104
  text_size: int = 36
105
+ """The text size for the color map legend in pixels. Default: 36"""
126
106
  lower_left_x: float = 0.8
107
+ """
108
+ The lower left x position of the color map in normalized device
109
+ coordinates. Default: 0.8
110
+ """
127
111
  lower_left_y: float = 0.8
112
+ """
113
+ The lower left y position of the color map in normalized device
114
+ coordinates. Default: 0.8
115
+ """
128
116
 
129
117
 
130
118
  @dc.dataclass
@@ -140,39 +128,41 @@ class ColorMap:
140
128
 
141
129
  .. warning:: This feature is experimental and may change or be removed in the future.
142
130
 
143
- Attributes
144
- ----------
145
- field : Field
146
- The field and component this color map applies to.
147
- preset : ColorMapPreset
148
- The color map preset to use. This defines the colors used in the color
149
- map. Default is 'JET'.
150
- data_range : DataRange
151
- An optional data range to use for the color map. The user must explicity
152
- set the data ranges. If not set explicitly, the fields global data range
153
- is used. For comparing multiple results, either with different solutions
154
- in the same simulation or with different simulations, its highly
155
- recommended that a range is provided so the color scales are the same
156
- between the resulting images. Default: is an invalid data range.
157
- discretize : bool
158
- Use discrete color bins instead of a continuous range. When True,
159
- 'n_colors' indicates how many discrete bins to use. Default: False.
160
- n_colors : int
161
- How many discrete bins to use when discretize is True. Valid n_colors
162
- values are [1, 256]. Default: 8.
163
- appearance: Optional[ColorMapAppearance]
164
- This attribute controls how the color map annotation appears in the image, including
165
- location, size, and visibility. When the scene is set to automatic color maps, these
166
- attributes are automatically populated unless overridden. When setting the appearance,
167
- the user is responsible for setting all values.
168
131
  """
169
132
 
170
133
  field: Field = dc.field(default_factory=Field)
134
+ """The field and component this color map applies to."""
171
135
  preset: ColorMapPreset = ColorMapPreset.JET
136
+ """
137
+ The color map preset to use. This defines the colors used in the color
138
+ map. Default is 'JET'.
139
+ """
172
140
  data_range: DataRange = dc.field(default_factory=DataRange)
141
+ """
142
+ An optional data range to use for the color map. The user must explicity
143
+ set the data ranges. If not set explicitly, the fields global data range
144
+ is used. For comparing multiple results, either with different solutions
145
+ in the same simulation or with different simulations, its highly
146
+ recommended that a range is provided so the color scales are the same
147
+ between the resulting images. Default: is an invalid data range.
148
+ """
173
149
  discretize: bool = False
150
+ """
151
+ Use discrete color bins instead of a continuous range. When True,
152
+ 'n_colors' indicates how many discrete bins to use. Default: False.
153
+ """
174
154
  n_colors: int = 8
155
+ """
156
+ How many discrete bins to use when discretize is True. Valid n_colors
157
+ values are [1, 256]. Default: 8.
158
+ """
175
159
  appearance: Optional[ColorMapAppearance] = None
160
+ """
161
+ This attribute controls how the color map annotation appears in the image, including
162
+ location, size, and visibility. When the scene is set to automatic color maps, these
163
+ attributes are automatically populated unless overridden. When setting the appearance,
164
+ the user is responsible for setting all values.
165
+ """
176
166
 
177
167
  def _to_proto(self) -> vis_pb2.ColorMap:
178
168
  res: vis_pb2.ColorMap = vis_pb2.ColorMap()
@@ -21,38 +21,32 @@ class Plane:
21
21
 
22
22
  .. warning:: This feature is experimental and may change or be removed in the future.
23
23
 
24
- Attributes:
25
- -----------
26
- origin : Vector3
27
- A point defined on the plane. Default: [0,0,0].
28
- normal : Vector3
29
- The vector orthogonal to the plane. Default: [0,1,0]
30
24
  """
31
25
 
32
26
  origin: Vector3Like = dc.field(default_factory=lambda: Vector3(x=0, y=0, z=0))
27
+ """A point defined on the plane. Default: [0,0,0]."""
33
28
  normal: Vector3Like = dc.field(default_factory=lambda: Vector3(x=1, y=0, z=0))
29
+ """The vector orthogonal to the plane. Default: [0,1,0]"""
34
30
 
35
31
 
36
32
  @dc.dataclass
37
33
  class Box:
38
34
  """
39
35
  This class defines a box used for filter such as box clip.
36
+
40
37
  .. warning:: This feature is experimental and may change or be removed in the future.
41
38
 
42
- Attributes:
43
- -----------
44
- center: Vector3
45
- A point defined at the center of the box. Default: [0,0,0].
46
- lengths: Vector3
47
- The the legnths of each side of the box. Default: [1,1,1]
48
- angles: Vector3
49
- The rotation of the box specified in Euler angles (degrees) and applied
50
- in XYZ ordering. Default: [0,0,0]
51
39
  """
52
40
 
53
41
  center: Vector3Like = dc.field(default_factory=lambda: Vector3(x=0, y=0, z=0))
42
+ """A point defined at the center of the box. Default: [0,0,0]."""
54
43
  lengths: Vector3Like = dc.field(default_factory=lambda: Vector3(x=1, y=1, z=1))
44
+ """The the legnths of each side of the box. Default: [1,1,1]"""
55
45
  angles: Vector3Like = dc.field(default_factory=lambda: Vector3(x=0, y=0, z=0))
46
+ """
47
+ The rotation of the box specified in Euler angles (degrees) and applied
48
+ in XYZ ordering. Default: [0,0,0]
49
+ """
56
50
 
57
51
 
58
52
  class Filter(ABC):
@@ -201,7 +195,7 @@ class Isosurface(Filter):
201
195
  if len(self.isovalues) == 0:
202
196
  raise ValueError("Isosurface: isovalue must be non-empty")
203
197
 
204
- if self.field == VisQuantity.NONE:
198
+ if self.field.quantity == VisQuantity.NONE:
205
199
  raise ValueError("Isosurface: field can't be None")
206
200
 
207
201
  vis_filter = vis_pb2.Filter()
@@ -654,6 +648,8 @@ class SurfaceStreamlines(Streamlines):
654
648
  id: str
655
649
  A surface id or a tag id.
656
650
  """
651
+ if not isinstance(id, str):
652
+ raise TypeError(f"Expected 'str', got {type(id).__name__}")
657
653
  self._surface_names.append(id)
658
654
 
659
655
  def _surfaces(self) -> List[str]:
@@ -700,3 +696,88 @@ class SurfaceStreamlines(Streamlines):
700
696
  vis_filter.streamlines.surface.surface_names.append(id)
701
697
  vis_filter.streamlines.field.quantity_typ = self.field.quantity.value
702
698
  return vis_filter
699
+
700
+
701
+ class SurfaceLIC(Filter):
702
+ """
703
+ A Surface Line Integral Convolution (LIC) filter is used to depict the flow
704
+ direction and structure of vector fields (such as velocity) on surfaces. It
705
+ enhances the perception of complex flow patterns by convolving noise
706
+ textures along streamlines, making it easier to visually interpret the
707
+ behavior of fluid flow on boundaries or surfaces in a simulation.
708
+
709
+ The input is a list of surfaces. If none are specified, all are used. The
710
+ surface LIC outputs grey scale colors on the specified surfaces. When the
711
+ display attributes quantity is not None, the field colors are blended with
712
+ the grey scale colors.
713
+
714
+ Note: surface LIC computes on the same surfaces of the solution. If the surfaces in
715
+ the global display attributes are not hidden, the surface LIC will not be visible since
716
+ the existing surfaces are occluding it.
717
+
718
+ .. warning:: This feature is experimental and may change or be removed in the future.
719
+
720
+ Attributes:
721
+ -----------
722
+ field: Field
723
+ Specifies the field used to advect particles for the surface LIC.
724
+ Default: WALL_SHEER_STRESS
725
+ contrast: float
726
+ Contrast controls the contrast of the resuting surface LIC. Valid values
727
+ are in the [0.2, 3.0] range. Lower values means less contrast and
728
+ higher values mean more contrast. Default: 1
729
+ """
730
+
731
+ def __init__(self, name: str) -> None:
732
+ super().__init__(generate_id("surface-lic-"))
733
+ self.name = name
734
+ self.contrast: float = 1.0
735
+ self._surface_names: List[str] = []
736
+ self.field: Field = Field()
737
+ self.field.quantity = VisQuantity.WALL_SHEAR_STRESS
738
+
739
+ def add_surface(self, id: str) -> None:
740
+ """
741
+ Add a surface to generate compute the surface LIC on. Adding no
742
+ surfaces indicates that all surfaces will be used.
743
+
744
+ Parameters
745
+ ----------
746
+ id: str
747
+ A surface id or a tag id.
748
+ """
749
+ if not isinstance(id, str):
750
+ raise TypeError(f"Expected 'str', got {type(id).__name__}")
751
+ self._surface_names.append(id)
752
+
753
+ def _surfaces(self) -> List[str]:
754
+ """
755
+ Returns the current list of surfaces.
756
+ """
757
+ return self._surface_names
758
+
759
+ def _to_proto(self) -> vis_pb2.Filter:
760
+ vis_filter = vis_pb2.Filter()
761
+ vis_filter.id = self.id
762
+ vis_filter.name = self.name
763
+ # Prevent common mistakes that cause confusion. The only current option
764
+ # is to be on a surface, so no velocity.
765
+ if not isinstance(self.field, Field):
766
+ raise TypeError(f"Expected 'Field', got {type(self.field).__name__}")
767
+ if self.field.quantity == VisQuantity.VELOCITY:
768
+ raise ValueError("SurfaceLIC: velocity is 0 on surfaces and will produce no data")
769
+ if not isinstance(self.contrast, (int, float)):
770
+ raise TypeError(f"Expected 'int or float', got {type(self.contrast).__name__}")
771
+ if self.contrast < 0.2 or self.contrast > 3.0:
772
+ raise ValueError("SurfaceLIC: contrast must be between 0.2 and 3.0")
773
+
774
+ for id in self._surface_names:
775
+ vis_filter.surface_lic.geometry.surface_names.append(id)
776
+ if len(self._surface_names) == 0:
777
+ # we need to make sure that the geometry is populated.
778
+ geometry = vis_pb2.SurfaceLICGeomtery()
779
+ vis_filter.surface_lic.geometry.CopyFrom(geometry)
780
+
781
+ vis_filter.surface_lic.field.quantity_typ = self.field.quantity.value
782
+ vis_filter.surface_lic.contrast = self.contrast
783
+ return vis_filter
@@ -1,7 +1,7 @@
1
1
  from .display import DisplayAttributes
2
2
  from .filters import SurfaceStreamlines, Filter
3
3
  from .._client import get_default_client
4
- from ..enum.vis_enums import EntityType
4
+ from ..enum.vis_enums import EntityType, SceneMode
5
5
  from typing import TYPE_CHECKING, cast
6
6
 
7
7
  from .._proto.api.v0.luminarycloud.vis import vis_pb2
@@ -15,6 +15,9 @@ except ImportError:
15
15
  lcj = None
16
16
 
17
17
 
18
+ _SOURCE_FILTER_ID = "___LC_SOURCE_FILTER___"
19
+
20
+
18
21
  class InteractiveScene:
19
22
  """
20
23
  The InteractiveScene acts as the bridge between the the Scene and
@@ -25,10 +28,10 @@ class InteractiveScene:
25
28
 
26
29
  # Using the type causes a circular import error, not sure on best way to resolve.
27
30
  # I do want to keep this in a separate file
28
- def __init__(self, scene: "Scene") -> None:
31
+ def __init__(self, scene: "Scene", mode: SceneMode) -> None:
29
32
  if not lcj:
30
33
  raise ImportError("InteractiveScene requires luminarycloud[jupyter] to be installed")
31
- self.widget = lcj.LCVisWidget()
34
+ self.widget = lcj.LCVisWidget(scene_mode=mode)
32
35
  self.set_scene(scene)
33
36
 
34
37
  def _ipython_display_(self) -> None:
@@ -39,6 +42,9 @@ class InteractiveScene:
39
42
  self.widget._ipython_display_()
40
43
 
41
44
  def set_scene(self, scene: "Scene") -> None:
45
+ # Import here to avoid circular import issue
46
+ from .visualization import LookAtCamera
47
+
42
48
  # Display the initial scene we've been given
43
49
  # Submit request for the render data URLs we need
44
50
  req = vis_pb2.GetRenderDataUrlsRequest()
@@ -85,6 +91,27 @@ class InteractiveScene:
85
91
  # is moved there.
86
92
  self.widget.set_workspace_state(scene, resp)
87
93
 
94
+ # Sync display attributes and visibilities for surfaces
95
+ self.set_display_attributes(_SOURCE_FILTER_ID, scene.global_display_attrs)
96
+ for s, v in scene._surface_visibilities.items():
97
+ self.set_surface_visibility(s, v)
98
+
99
+ for f in scene._filters:
100
+ self.set_display_attributes(f.id, f.display_attrs)
101
+
102
+ # Find and apply the first look at camera, if any, in the scene
103
+ set_camera = False
104
+ for c in scene._cameras:
105
+ if not isinstance(c, LookAtCamera):
106
+ continue
107
+ set_camera = True
108
+ self.set_camera(c)
109
+
110
+ # If we don't have an initial camera to use, reset the camera after loading
111
+ # the workspace state
112
+ if not set_camera:
113
+ self.reset_camera()
114
+
88
115
  def set_surface_visibility(self, surface_id: str, visible: bool) -> None:
89
116
  self.widget.set_surface_visibility(surface_id, visible)
90
117
 
@@ -97,6 +124,13 @@ class InteractiveScene:
97
124
  def reset_camera(self) -> None:
98
125
  self.widget.reset_camera()
99
126
 
127
+ def set_camera(self, camera: "LookAtCamera") -> None:
128
+ # Clear the camera pan, we should add this to the SDK later
129
+ self.widget.camera_pan = [0, 0]
130
+ self.widget.camera_position = [camera.position[0], camera.position[1], camera.position[2]]
131
+ self.widget.camera_look_at = [camera.look_at[0], camera.look_at[1], camera.look_at[2]]
132
+ self.widget.camera_up = [camera.up[0], camera.up[1], camera.up[2]]
133
+
100
134
  def get_camera(self) -> "LookAtCamera":
101
135
  # Import here to avoid circular import issue
102
136
  from .visualization import LookAtCamera
@@ -106,3 +140,6 @@ class InteractiveScene:
106
140
  camera.look_at = self.widget.camera_look_at
107
141
  camera.up = self.widget.camera_up
108
142
  return camera
143
+
144
+ def set_triad_visible(self, visible: bool) -> None:
145
+ self.widget.set_triad_visible(visible)