luminarycloud 0.13.0__py3-none-any.whl → 0.14.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 (328) hide show
  1. luminarycloud/_helpers/cond.py +262 -165
  2. luminarycloud/_helpers/defaults.py +3 -3
  3. luminarycloud/_helpers/download.py +12 -1
  4. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +69 -47
  5. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +45 -1
  6. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +34 -0
  7. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +12 -0
  8. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py +86 -65
  9. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi +38 -1
  10. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2_grpc.py +33 -0
  11. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2_grpc.pyi +10 -0
  12. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +12 -12
  13. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +5 -1
  14. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.py +2 -1
  15. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.pyi +6 -2
  16. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.py +14 -14
  17. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.pyi +5 -1
  18. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +170 -85
  19. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +215 -10
  20. luminarycloud/_proto/assistant/assistant_pb2.py +177 -21
  21. luminarycloud/_proto/assistant/assistant_pb2.pyi +380 -7
  22. luminarycloud/_proto/client/simulation_pb2.py +705 -521
  23. luminarycloud/_proto/client/simulation_pb2.pyi +552 -35
  24. luminarycloud/_proto/geometry/geometry_pb2.py +74 -40
  25. luminarycloud/_proto/geometry/geometry_pb2.pyi +68 -4
  26. luminarycloud/_proto/hexmesh/hexmesh_pb2.py +321 -0
  27. luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +648 -0
  28. luminarycloud/_proto/options/options_pb2.py +9 -5
  29. luminarycloud/_proto/options/options_pb2.pyi +4 -0
  30. luminarycloud/_proto/output/reference_values_pb2.py +22 -5
  31. luminarycloud/_proto/output/reference_values_pb2.pyi +1 -1
  32. luminarycloud/_proto/quantity/quantity_options_pb2.py +28 -4
  33. luminarycloud/_proto/quantity/quantity_options_pb2.pyi +58 -1
  34. luminarycloud/_proto/quantity/quantity_pb2.py +162 -159
  35. luminarycloud/_proto/quantity/quantity_pb2.pyi +2 -0
  36. luminarycloud/enum/vis_enums.py +82 -2
  37. luminarycloud/geometry.py +22 -5
  38. luminarycloud/meshing/mesh_generation_params.py +8 -2
  39. luminarycloud/params/__init__.py +1 -2
  40. luminarycloud/params/enum/_enum_wrappers.py +1184 -3
  41. luminarycloud/params/outputs/output.py +1 -1
  42. luminarycloud/params/{param_wrappers/simulation_param → simulation}/__init__.py +15 -14
  43. luminarycloud/params/{param_wrappers → simulation}/_lib.py +2 -4
  44. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement/boundary_layer_profile_.py +2 -2
  45. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement_.py +4 -4
  46. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adjoint_.py +2 -2
  47. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/gravity_off_.py +4 -4
  48. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/gravity_on_.py +4 -4
  49. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity_.py +2 -2
  50. luminarycloud/params/{param_wrappers/simulation_param → simulation}/body_frame_.py +2 -2
  51. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/volume_material_relationship_.py +2 -2
  52. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/volume_physics_relationship_.py +2 -2
  53. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships_.py +6 -6
  54. luminarycloud/params/{param_wrappers/simulation_param → simulation}/general_.py +8 -10
  55. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/boussinesq_off_.py +4 -4
  56. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/boussinesq_on_.py +4 -4
  57. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation_.py +2 -2
  58. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/ideal_gas_.py +4 -6
  59. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/incompressible_fluid_.py +4 -6
  60. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/incompressible_fluid_with_energy_.py +4 -6
  61. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model_.py +2 -2
  62. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +4 -4
  63. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +4 -4
  64. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +4 -4
  65. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model_.py +2 -2
  66. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/prescribed_viscosity_.py +4 -6
  67. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/sutherland_.py +4 -6
  68. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +4 -6
  69. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model_.py +2 -2
  70. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/material_fluid_.py +32 -40
  71. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/material_solid_.py +2 -2
  72. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material_entity_.py +6 -10
  73. luminarycloud/params/{param_wrappers/simulation_param → simulation}/monitor_plane_.py +10 -5
  74. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/no_transform_.py +4 -6
  75. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/rotational_transform_.py +4 -6
  76. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/translational_transform_.py +4 -6
  77. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms_.py +2 -2
  78. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/constant_angular_motion_.py +4 -4
  79. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/constant_translation_motion_.py +4 -4
  80. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type_.py +2 -2
  81. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data_.py +16 -20
  82. luminarycloud/params/{param_wrappers/simulation_param → simulation}/multi_physics_coupling_options_.py +2 -2
  83. luminarycloud/params/{param_wrappers/simulation_param → simulation}/output_.py +2 -2
  84. 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
  85. 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
  86. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +2 -2
  87. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +49 -0
  88. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_line_.py +4 -6
  89. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/probe_points_.py +4 -6
  90. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/source_points_.py +4 -6
  91. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type_.py +2 -2
  92. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group_.py +20 -17
  93. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/adjoint_controls_fluid_.py +2 -2
  94. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/basic_fluid_.py +2 -2
  95. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/__init__.py +3 -4
  96. luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +111 -0
  97. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/__init__.py +4 -3
  98. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +4 -6
  99. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +55 -0
  100. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +4 -6
  101. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +4 -6
  102. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +8 -6
  103. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +8 -6
  104. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +104 -0
  105. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +4 -4
  106. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +4 -4
  107. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +4 -4
  108. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +4 -4
  109. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +2 -2
  110. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet_.py +14 -14
  111. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/symmetry_.py +4 -4
  112. luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +50 -0
  113. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +4 -4
  114. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +4 -4
  115. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +4 -4
  116. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/slip_.py +4 -4
  117. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +4 -4
  118. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/wall_energy_.py +2 -2
  119. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/wall_momentum_.py +2 -2
  120. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall_.py +18 -18
  121. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions_fluid_.py +9 -4
  122. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization/__init__.py +1 -2
  123. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization/fluid_existing_solution_.py +4 -6
  124. luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +65 -0
  125. luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +77 -0
  126. luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +44 -0
  127. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization_fluid_.py +2 -2
  128. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +12 -8
  129. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +6 -6
  130. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +4 -4
  131. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -4
  132. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +4 -4
  133. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +8 -6
  134. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +6 -6
  135. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +8 -6
  136. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +2 -2
  137. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +4 -4
  138. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -4
  139. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +8 -6
  140. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model_.py +2 -2
  141. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior_.py +34 -29
  142. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/porous_behavior_.py +14 -10
  143. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +4 -4
  144. 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
  145. 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
  146. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +2 -2
  147. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +16 -16
  148. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method_.py +2 -2
  149. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +4 -4
  150. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +4 -4
  151. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method_.py +2 -2
  152. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls_fluid_.py +14 -14
  153. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +4 -4
  154. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/fds_.py +4 -4
  155. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +6 -4
  156. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +4 -4
  157. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_.py +2 -2
  158. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +4 -4
  159. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +4 -4
  160. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order_.py +2 -2
  161. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization_fluid_.py +20 -18
  162. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/ddes_.py +4 -6
  163. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +4 -6
  164. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/iddes_.py +4 -6
  165. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation_.py +2 -2
  166. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +4 -4
  167. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +4 -4
  168. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +2 -2
  169. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst_.py +10 -12
  170. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +4 -4
  171. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +4 -4
  172. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +2 -2
  173. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras_.py +10 -12
  174. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +4 -4
  175. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +4 -4
  176. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +4 -4
  177. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +4 -4
  178. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +4 -4
  179. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model_.py +2 -2
  180. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence_.py +22 -32
  181. luminarycloud/params/simulation/physics/fluid_.py +233 -0
  182. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/adjoint_controls_heat_.py +2 -2
  183. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_convection_.py +4 -4
  184. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +4 -4
  185. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +4 -4
  186. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_symmetry_.py +4 -4
  187. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_temperature_.py +4 -4
  188. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions_heat_.py +9 -4
  189. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +4 -4
  190. 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
  191. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type_.py +2 -2
  192. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source_.py +20 -17
  193. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/heat_existing_solution_.py +4 -6
  194. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/heat_prescribed_values_.py +4 -6
  195. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization_heat_.py +2 -2
  196. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +10 -10
  197. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method_.py +2 -2
  198. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls_heat_.py +6 -6
  199. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/spatial_discretization_heat_.py +2 -2
  200. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat_.py +33 -42
  201. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +5 -7
  202. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/translational_periodicity_.py +4 -6
  203. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type_.py +2 -2
  204. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair_.py +8 -10
  205. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/gauss_seidel_.py +4 -4
  206. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/krylov_amg_.py +4 -4
  207. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type_.py +2 -2
  208. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics_.py +6 -6
  209. luminarycloud/params/{param_wrappers → simulation}/simulation_param_.py +34 -40
  210. luminarycloud/params/{param_wrappers/simulation_param → simulation}/sliding_interfaces_.py +10 -5
  211. luminarycloud/params/{param_wrappers/simulation_param → simulation}/surface_name_.py +2 -2
  212. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/compute_statistics_off_.py +4 -6
  213. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/compute_statistics_on_.py +4 -6
  214. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics_.py +2 -2
  215. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/time_explicit_.py +4 -4
  216. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/time_implicit_.py +4 -4
  217. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching_.py +2 -2
  218. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/time_step_ramp_off_.py +4 -4
  219. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/time_step_ramp_on_.py +4 -4
  220. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp_.py +2 -2
  221. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time_.py +20 -30
  222. luminarycloud/params/{param_wrappers/simulation_param → simulation}/volume_entity_.py +2 -2
  223. luminarycloud/project.py +63 -7
  224. luminarycloud/reference_values.py +1 -1
  225. luminarycloud/simulation.py +13 -2
  226. luminarycloud/simulation_param.py +8 -8
  227. luminarycloud/solution.py +7 -1
  228. luminarycloud/types/vector3.py +28 -2
  229. luminarycloud/vis/__init__.py +6 -1
  230. luminarycloud/vis/display.py +101 -51
  231. luminarycloud/vis/filters.py +384 -15
  232. luminarycloud/vis/interactive_scene.py +46 -23
  233. luminarycloud/vis/visualization.py +204 -58
  234. {luminarycloud-0.13.0.dist-info → luminarycloud-0.14.0.dist-info}/METADATA +1 -2
  235. luminarycloud-0.14.0.dist-info/RECORD +466 -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/params/param_wrappers/simulation_param/physics/fluid_.py +0 -438
  268. luminarycloud-0.13.0.dist-info/RECORD +0 -487
  269. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement/__init__.py +0 -0
  270. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/__init__.py +0 -0
  271. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/__init__.py +0 -0
  272. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/__init__.py +1 -1
  273. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/__init__.py +1 -1
  274. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/__init__.py +4 -4
  275. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/__init__.py +1 -1
  276. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/__init__.py +0 -0
  277. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/__init__.py +2 -2
  278. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/__init__.py +2 -2
  279. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/__init__.py +1 -1
  280. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/__init__.py +1 -1
  281. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/__init__.py +0 -0
  282. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/__init__.py +0 -0
  283. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/__init__.py +2 -2
  284. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/__init__.py +0 -0
  285. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/__init__.py +1 -1
  286. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/__init__.py +3 -3
  287. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/__init__.py +8 -8
  288. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/__init__.py +0 -0
  289. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/__init__.py +1 -1
  290. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/__init__.py +1 -1
  291. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/__init__.py +1 -1
  292. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/__init__.py +1 -1
  293. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/__init__.py +0 -0
  294. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/__init__.py +2 -2
  295. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/__init__.py +2 -2
  296. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/__init__.py +0 -0
  297. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/__init__.py +0 -0
  298. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/__init__.py +0 -0
  299. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/__init__.py +0 -0
  300. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/__init__.py +0 -0
  301. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/__init__.py +1 -1
  302. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/__init__.py +0 -0
  303. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/__init__.py +2 -2
  304. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/__init__.py +2 -2
  305. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/__init__.py +1 -1
  306. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/__init__.py +4 -4
  307. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/__init__.py +1 -1
  308. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/__init__.py +0 -0
  309. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/__init__.py +1 -1
  310. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/__init__.py +0 -0
  311. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/__init__.py +0 -0
  312. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/__init__.py +2 -2
  313. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/__init__.py +4 -4
  314. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/__init__.py +1 -1
  315. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/__init__.py +0 -0
  316. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type/__init__.py +0 -0
  317. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/__init__.py +1 -1
  318. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/__init__.py +0 -0
  319. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method/__init__.py +0 -0
  320. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/__init__.py +0 -0
  321. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/__init__.py +0 -0
  322. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/__init__.py +0 -0
  323. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/__init__.py +1 -1
  324. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/__init__.py +1 -1
  325. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/__init__.py +0 -0
  326. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/__init__.py +1 -1
  327. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/__init__.py +1 -1
  328. {luminarycloud-0.13.0.dist-info → luminarycloud-0.14.0.dist-info}/WHEEL +0 -0
@@ -1,16 +1,15 @@
1
+ from .display import DisplayAttributes
2
+ from .filters import SurfaceStreamlines, Filter
1
3
  from .._client import get_default_client
2
- from ..enum.vis_enums import EntityType
3
- from typing import TYPE_CHECKING
4
+ from ..enum.vis_enums import EntityType, SceneMode
5
+ from typing import TYPE_CHECKING, cast
4
6
 
5
- import luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2 as vispb
7
+ from .._proto.api.v0.luminarycloud.vis import vis_pb2
6
8
 
7
9
  if TYPE_CHECKING:
8
10
  from .visualization import Scene, LookAtCamera
9
- import requests
10
11
 
11
12
  try:
12
- # we need requests for downloading render data
13
- import requests
14
13
  import luminarycloud_jupyter as lcj
15
14
  except ImportError:
16
15
  lcj = None
@@ -26,16 +25,23 @@ class InteractiveScene:
26
25
 
27
26
  # Using the type causes a circular import error, not sure on best way to resolve.
28
27
  # I do want to keep this in a separate file
29
- def __init__(self, scene: "Scene") -> None:
30
- if not lcj or not requests:
28
+ def __init__(self, scene: "Scene", mode: SceneMode) -> None:
29
+ if not lcj:
31
30
  raise ImportError("InteractiveScene requires luminarycloud[jupyter] to be installed")
32
- # TODO (will): not sure on how to suppress the unbound var warnings from pyright
33
- # but we won't have this be unbound b/c of the decorator check
34
- self.widget = lcj.LCVisWidget()
31
+ self.widget = lcj.LCVisWidget(scene_mode=mode)
32
+ self.set_scene(scene)
35
33
 
34
+ def _ipython_display_(self) -> None:
35
+ """
36
+ When the InteractiveScene is shown in Jupyter we show the underlying widget
37
+ to run the widget's frontend code
38
+ """
39
+ self.widget._ipython_display_()
40
+
41
+ def set_scene(self, scene: "Scene") -> None:
36
42
  # Display the initial scene we've been given
37
43
  # Submit request for the render data URLs we need
38
- req = vispb.GetRenderDataUrlsRequest()
44
+ req = vis_pb2.GetRenderDataUrlsRequest()
39
45
  req.project_id = scene._project_id
40
46
  if scene._entity_type == EntityType.SIMULATION:
41
47
  req.entity.simulation.id = scene._solution.simulation_id
@@ -50,20 +56,34 @@ class InteractiveScene:
50
56
  f"Expected Solution, Mesh or Geometry in Scene, got {scene._entity_type}"
51
57
  )
52
58
 
53
- # TODO later make this a separate method to load the scene URLs
54
- # TODO: would be nice to report filter execution progress
59
+ # Validate filter connections and filter params.
60
+ # we don't care about validating anything else that the Scene checks in _create_request
61
+ # for now. We could unify this code more later.
62
+ scene._validate_filter_connections()
63
+ for filter in scene._filters:
64
+ if isinstance(filter, SurfaceStreamlines):
65
+ # Validate surfaces names
66
+ streamlines = cast(SurfaceStreamlines, filter)
67
+ bad_ids = scene._validate_surfaces_and_tags(streamlines._surface_names)
68
+ if len(bad_ids) != 0:
69
+ raise ValueError(f"SurfaceStreamlines has invalid surfaces: {bad_ids}")
70
+
71
+ if isinstance(filter, Filter):
72
+ vis_filter: vis_pb2.Filter = filter._to_proto()
73
+ req.filters.append(vis_filter)
74
+ else:
75
+ raise TypeError(f"Expected 'filter', got {type(filter).__name__}")
76
+ if filter.get_parent_id():
77
+ req.filter_connections[filter.get_parent_id()].children_id.append(filter.id)
78
+
79
+ # TODO: would be nice to show execution progress of the workspace here,
80
+ # some inline progress bar in the notebook
55
81
  resp = get_default_client().GetRenderDataUrls(req)
56
82
 
57
83
  # TODO: would be nice to print/report some download progress info
58
- render_data = requests.get(resp.urls.data_files[0].signed_url)
59
- self.widget.data = render_data.content
60
-
61
- def _ipython_display_(self) -> None:
62
- """
63
- When the InteractiveScene is shown in Jupyter we show the underlying widget
64
- to run the widget's frontend code
65
- """
66
- self.widget._ipython_display_()
84
+ # This can be done on the app frontend side now that the download
85
+ # is moved there.
86
+ self.widget.set_workspace_state(scene, resp)
67
87
 
68
88
  def set_surface_visibility(self, surface_id: str, visible: bool) -> None:
69
89
  self.widget.set_surface_visibility(surface_id, visible)
@@ -71,6 +91,9 @@ class InteractiveScene:
71
91
  def set_surface_color(self, surface_id: str, color: list[float]) -> None:
72
92
  self.widget.set_surface_color(surface_id, color)
73
93
 
94
+ def set_display_attributes(self, object_id: str, attrs: DisplayAttributes) -> None:
95
+ self.widget.set_display_attributes(object_id, attrs)
96
+
74
97
  def reset_camera(self) -> None:
75
98
  self.widget.reset_camera()
76
99
 
@@ -1,4 +1,5 @@
1
1
  from .._proto.api.v0.luminarycloud.vis import vis_pb2
2
+ import luminarycloud._proto.api.v0.luminarycloud.common.common_pb2 as common_pb2
2
3
  from .._client import get_default_client
3
4
  from ..solution import Solution
4
5
  from ..mesh import get_mesh_metadata, Mesh, get_mesh
@@ -6,8 +7,8 @@ from ..geometry import Geometry, get_geometry, Tag
6
7
  from ..enum.vis_enums import *
7
8
  from ..enum.quantity_type import QuantityType
8
9
  from ..simulation import get_simulation
9
- from .display import DisplayAttributes, ColorMap
10
- from .filters import Filter, PlaneClip, Slice, BoxClip
10
+ from .display import DisplayAttributes, ColorMap, Field, ColorMapAppearance
11
+ from .filters import Filter, PlaneClip, Slice, BoxClip, SurfaceStreamlines
11
12
  from luminarycloud.types import Vector3, Vector3Like
12
13
  from ..types.vector3 import _to_vector3
13
14
  from .._helpers._get_project_id import _get_project_id
@@ -16,7 +17,7 @@ from .interactive_scene import InteractiveScene
16
17
  import io
17
18
  import json
18
19
  from luminarycloud._proto.client import simulation_pb2 as clientpb
19
- from typing import List, Tuple, cast, Union
20
+ from typing import List, Tuple, cast, Union, Dict
20
21
  import requests
21
22
  from time import time, sleep
22
23
  import logging
@@ -25,6 +26,10 @@ import dataclasses as dc
25
26
  logger = logging.getLogger(__name__)
26
27
 
27
28
 
29
+ def _is_valid_color(obj: common_pb2.Vector3) -> bool:
30
+ return all(0 <= getattr(obj, attr) <= 1 for attr in ["x", "y", "z"])
31
+
32
+
28
33
  @dc.dataclass
29
34
  class DirectionalCamera:
30
35
  """
@@ -34,29 +39,20 @@ class DirectionalCamera:
34
39
 
35
40
  .. warning:: This feature is experimental and may change or be removed in the future.
36
41
 
37
- Attributes:
38
- -----------
39
- name : str
40
- A user defined name for the camera.
41
- direction : CameraDirection
42
- The orientation of the camera. Default: X_POSITIVE
43
- projection : CameraProjection
44
- The type of projection used for the camera. Default: ORTHOGRAPHIC
45
- label: str
46
- A user defined label to help distinguish between multiple images.
47
- Default: ""
48
- width: int
49
- The width of the output image in pixels. Default: 1024
50
- height: int
51
- The height of the output image in pixels. Default: 1024
52
42
  """
53
43
 
54
44
  name: str = "default directional camera"
45
+ """ A user defined name for the camera. """
55
46
  direction: CameraDirection = CameraDirection.X_POSITIVE
47
+ """ The orientation of the camera. Default: X_POSITIVE """
56
48
  projection: CameraProjection = CameraProjection.ORTHOGRAPHIC
49
+ """ The type of projection used for the camera. Default: ORTHOGRAPHIC """
57
50
  label: str = ""
51
+ """A user defined label to help distinguish between multiple images."""
58
52
  width: int = 1024
53
+ """The width of the output image in pixels. Default: 1024"""
59
54
  height: int = 1024
55
+ """The height of the output image in pixels. Default: 1024"""
60
56
 
61
57
 
62
58
  @dc.dataclass
@@ -68,39 +64,39 @@ class LookAtCamera:
68
64
 
69
65
  .. warning:: This feature is experimental and may change or be removed in the future.
70
66
 
71
- Attributes:
72
- -----------
73
- look_at: Vector3
74
- The point the camera is looking at. Default (0,0,0)
75
- position: Vector3
76
- The position of the camera. Default (0,1,0)
77
- up: Vector3
78
- The up vector for the camera. Default (0,0,1)
79
- projection : CameraProjection
80
- The type of projection used for the camera. Default: ORTHOGRAPHIC
81
- label: str
82
- A user defined label to help distinguish between multiple images. Default: ""
83
- width: int
84
- The width of the output image in pixels. Default: 1024
85
- height: int
86
- The height of the output image in pixels. Default: 1024
87
67
  """
88
68
 
89
69
  look_at: Vector3Like = dc.field(default_factory=lambda: Vector3(x=0, y=0, z=0))
70
+ """ The point the camera is looking at. Default (0,0,0) """
90
71
  position: Vector3Like = dc.field(default_factory=lambda: Vector3(x=0, y=1, z=0))
72
+ """ The position of the camera. Default (0,1,0) """
91
73
  up: Vector3Like = dc.field(default_factory=lambda: Vector3(x=0, y=0, z=1))
74
+ """ The up vector for the camera. Default (0,0,1) """
92
75
  projection: CameraProjection = CameraProjection.ORTHOGRAPHIC
76
+ """ The type of projection used for the camera. Default: ORTHOGRAPHIC """
93
77
  label: str = ""
78
+ """ A user defined label to help distinguish between multiple images. Default: "" """
94
79
  width: int = 1024
80
+ """ The width of the output image in pixels. Default: 1024 """
95
81
  height: int = 1024
82
+ """ The height of the output image in pixels. Default: 1024 """
83
+
84
+
85
+ class _InternalToken:
86
+ """Marker class to control instantiation access for RenderOutput."""
87
+
88
+ pass
96
89
 
97
90
 
98
91
  class RenderOutput:
99
92
  """
100
- The render output represents the request to render images from a geometry, mesh or
101
- solution. The operation exectutes asyncronously, so the caller must check
102
- the status of the image extract. If the status is completed, then the
103
- resuling image is available for download.
93
+ The render output represents the request to render images from a geometry,
94
+ mesh or solution, and is contructed by the Scene class. The operation
95
+ exectutes asyncronously, so the caller must check the status of the image
96
+ extract. If the status is completed, then the resuling image is available
97
+ for download.
98
+
99
+ .. warning:: This class should not be directly instantiated by users.
104
100
 
105
101
  .. warning:: This feature is experimental and may change or be removed in the future.
106
102
 
@@ -120,17 +116,27 @@ class RenderOutput:
120
116
  Internal flag to track if the extract has been deleted.
121
117
  """
122
118
 
123
- def __init__(
124
- self, extract_id: str, project_id: str, name: str, desciption: str, status: RenderStatusType
125
- ):
119
+ def __init__(self, factory_token: _InternalToken):
120
+ if not isinstance(factory_token, _InternalToken):
121
+ raise ValueError("This class can only be constructed through the Scene class")
122
+
126
123
  # TODO(matt): We could make all of these read only.
127
- self._extract_id: str = extract_id
128
- self._project_id: str = project_id
129
- self.status: RenderStatusType = status
130
- self.name: str = name
131
- self.description: str = desciption
124
+ self._extract_id: str = ""
125
+ self._project_id: str = ""
126
+ self.status: RenderStatusType = RenderStatusType.INVALID
127
+ self.name: str = ""
128
+ self.description: str = ""
132
129
  self._deleted = False
133
130
 
131
+ def _set_data(
132
+ self, extract_id: str, project_id: str, name: str, desciption: str, status: RenderStatusType
133
+ ) -> None:
134
+ self._extract_id = extract_id
135
+ self._project_id = project_id
136
+ self.status = status
137
+ self.name = name
138
+ self.description = desciption
139
+
134
140
  def __repr__(self) -> str:
135
141
  return f"RenderOutput(Id: {self._extract_id} status: {self.status})"
136
142
 
@@ -275,13 +281,13 @@ class Scene:
275
281
  with what "entity" you want to visualize: a solution, a mesh, or
276
282
  a geometry.
277
283
 
278
- global display attributes: The global display attributes control the default
284
+ Global display attributes: The global display attributes control the default
279
285
  appearance of all the surfaces (i.e. boundaries). Attributes include visibitiy,
280
286
  what fields are displayed on the surfaces (if applicable), and representation
281
287
  (e.g., surface, surface with edges, ...).
282
288
 
283
- Individaul surface visibities can be overidden to hide/show specific surfaces.
284
- Additionally, if the scene is contructed around a simulation, a helper method is
289
+ Individual surface visibilities can be overidden to hide/show specific surfaces.
290
+ Additionally, if the scene is constructed around a simulation, a helper method is
285
291
  provided to automatically hide surfaces associated with far fields.
286
292
 
287
293
  .. warning:: This feature is experimental and may change or be removed in the future.
@@ -292,9 +298,32 @@ class Scene:
292
298
  These attributes apply to all the surfaces in the
293
299
  geometry/mesh/solution. Individual surface visibilities can be
294
300
  overridden with the 'surface_visibility' function.
301
+ triad_visible: bool
302
+ This value controls whether the triad is visible or not in the rendered
303
+ images. Default: True
304
+ background_color: Vector3Like
305
+ This value controls then scene background color. These are rgb values in
306
+ the range [0,1] for each component. Default: [0,0,0]
307
+ axes_grid_visible: bool
308
+ This values controls whether the axes grid is visible or not in the
309
+ rendered images. Default: False
310
+ auto_color_map_annotations: bool
311
+ This values controls whether we automatically generate color map
312
+ annotations for all fields used in global and filter display attributes.
313
+ When False, only color maps explicitly added by the user appear in the
314
+ images. Default: True
315
+ supersampling: int
316
+ Supersampling controls anti-aliasing in output images. A value of 1 means no supersampling.
317
+ A value of 2 means we internally render at 2x the image resolution and downsample the image
318
+ to the requested resolution. Valid values are between 1 and 8. Default: 2
295
319
  """
296
320
 
297
321
  def __init__(self, entity: Geometry | Mesh | Solution):
322
+ self.triad_visible: bool = True
323
+ self.axes_grid_visible: bool = True
324
+ self.background_color: Vector3 = Vector3(x=0, y=0, z=0)
325
+ self.auto_color_map_annotations = True
326
+ self.supersampling: int = 2
298
327
  # Global display attrs
299
328
  self.global_display_attrs = DisplayAttributes()
300
329
  self._filters: List[Filter] = []
@@ -347,7 +376,7 @@ class Scene:
347
376
  elif self._entity_type == EntityType.MESH:
348
377
  mesh_meta = get_mesh_metadata(self._mesh.id)
349
378
  try:
350
- geom = get_geometry(self._mesh.geometry_version().id)
379
+ geom = get_geometry(self._mesh.geometry_version().geometry_id)
351
380
  except NotFoundError:
352
381
  self._has_tags = False
353
382
  except Exception as e:
@@ -469,6 +498,35 @@ class Scene:
469
498
  )
470
499
  self._cameras.append(camera)
471
500
 
501
+ def _validate_surfaces_and_tags(self, ids: List[str]) -> List[str]:
502
+ """
503
+ Validate a list of ids as either tags or ids. Returns a list of invalid ids. If the
504
+ length of the list is zero, the input list is valid.
505
+ """
506
+ bad_ids: List[str] = []
507
+ for id in ids:
508
+ if id in self._tag_ids:
509
+ continue
510
+ if id not in self._surface_ids:
511
+ bad_ids.append(id)
512
+ return bad_ids
513
+
514
+ def _validate_filter_connections(self) -> None:
515
+ """
516
+ Validate that the filters have valid connections.
517
+ """
518
+ filter_ids: List[str] = []
519
+ for filter in self._filters:
520
+ filter_ids.append(filter.id)
521
+
522
+ for filter in self._filters:
523
+ parent_id = filter.get_parent_id()
524
+ if not parent_id:
525
+ # Using the root when we have an empty string
526
+ continue
527
+ if parent_id not in filter_ids:
528
+ raise ValueError(f"Filter {filter.id} parent {parent_id} not present in filters")
529
+
472
530
  def _create_request(self, name: str, description: str) -> vis_pb2.CreateExtractRequest:
473
531
  req = vis_pb2.CreateExtractRequest()
474
532
  if len(self._cameras) == 0:
@@ -512,18 +570,104 @@ class Scene:
512
570
  attrs.field.quantity_typ = quantitypb.INVALID_QUANTITY_TYPE
513
571
  req.spec.display_attributes[id].CopyFrom(attrs)
514
572
 
573
+ self._validate_filter_connections()
574
+ cmap_fields: Dict[Field, bool] = {}
515
575
  for filter in self._filters:
576
+ if isinstance(filter, SurfaceStreamlines):
577
+ # Validate surfaces names
578
+ streamlines = cast(SurfaceStreamlines, filter)
579
+ bad_ids = self._validate_surfaces_and_tags(streamlines._surface_names)
580
+ if len(bad_ids) != 0:
581
+ raise ValueError(f"SurfaceStreamlines has invalid surfaces: {bad_ids}")
582
+
516
583
  if isinstance(filter, Filter):
517
584
  vis_filter: vis_pb2.Filter = filter._to_proto()
518
585
  req.spec.filters.append(vis_filter)
519
586
  req.spec.display_attributes[filter.id].CopyFrom(filter.display_attrs._to_proto())
520
587
  else:
521
588
  raise TypeError(f"Expected 'filter', got {type(filter).__name__}")
589
+ if filter.get_parent_id():
590
+ req.spec.filter_connections[filter.get_parent_id()].children_id.append(filter.id)
591
+ if (
592
+ self.auto_color_map_annotations
593
+ and filter.display_attrs.field.quantity != VisQuantity.NONE
594
+ and filter.display_attrs.visible
595
+ ):
596
+ cmap_fields[filter.display_attrs.field] = True
522
597
 
523
598
  for cmap in self._color_maps:
599
+ if self.auto_color_map_annotations and not cmap.appearance:
600
+ # Defer color map processing to the auto color annotation.
601
+ continue
524
602
  color_map: vis_pb2.ColorMap = cmap._to_proto()
525
603
  req.spec.color_maps.append(color_map)
526
604
 
605
+ # Add the automated color maps if enabled. If we don't specify them
606
+ # in the proto, the annotations will not appear in the image.
607
+ if self.auto_color_map_annotations:
608
+ auto_cmaps: List[ColorMap] = []
609
+ for field in cmap_fields:
610
+ found = False
611
+ # Make sure we don't have an explicit color map for this field.
612
+ for cmap in self._color_maps:
613
+ if field == cmap.field:
614
+ found = True
615
+ if not found:
616
+ default_cmap = ColorMap()
617
+ default_cmap.field = field
618
+ default_cmap.appearance = ColorMapAppearance()
619
+ auto_cmaps.append(default_cmap)
620
+ for cmap in self._color_maps:
621
+ if not cmap.appearance:
622
+ # Include any color maps with no appearance set. We skipped
623
+ # processing them above
624
+ cmap.appearance = ColorMapAppearance()
625
+ auto_cmaps.append(cmap)
626
+ if len(auto_cmaps) != 0:
627
+ # These are all default contructed, so they all have the same dimentions.
628
+ # All the coordinates are in normalized device space.
629
+ assert auto_cmaps[0].appearance != None
630
+ appearance = cast(ColorMapAppearance, auto_cmaps[0].appearance)
631
+ width = appearance.width
632
+ height = appearance.height
633
+ x_padding = 0.05
634
+ y_padding = 0.05
635
+ # Placing them on the right side.
636
+ lower_left_x = 1.0 - width - x_padding
637
+ lower_left_y = 1.0 - height - y_padding
638
+ for cmap in auto_cmaps:
639
+ assert cmap.appearance != None
640
+ cmap_appearance = cast(ColorMapAppearance, cmap.appearance)
641
+ cmap_appearance.lower_left_x = lower_left_x
642
+ cmap_appearance.lower_left_y = lower_left_y
643
+ lower_left_y = lower_left_y - height - y_padding
644
+ if lower_left_y < 0:
645
+ lower_left_y = 0
646
+ color_map_proto: vis_pb2.ColorMap = cmap._to_proto()
647
+ req.spec.color_maps.append(color_map_proto)
648
+
649
+ if not isinstance(self.triad_visible, bool):
650
+ raise TypeError(f"Expected 'bool', got {type(self.triad_visible).__name__}")
651
+ req.spec.triad_properties.visible = self.triad_visible
652
+
653
+ if not isinstance(self.axes_grid_visible, bool):
654
+ raise TypeError(f"Expected 'bool', got {type(self.axes_grid_visible).__name__}")
655
+ req.spec.axes_grid_properties.visible = self.axes_grid_visible
656
+
657
+ bg_color = _to_vector3(self.background_color)._to_proto()
658
+ if not _is_valid_color(bg_color):
659
+ raise ValueError(f"Background color is not in the range [0,1]: {bg_color}")
660
+ req.spec.background_properties.color.r = bg_color.x
661
+ req.spec.background_properties.color.g = bg_color.y
662
+ req.spec.background_properties.color.b = bg_color.z
663
+ req.spec.background_properties.color.a = 1
664
+
665
+ if not isinstance(self.supersampling, int):
666
+ raise TypeError(f"Expected 'int', got {type(self.supersampling).__name__}")
667
+ if self.supersampling < 1 or self.supersampling > 8:
668
+ raise ValueError(f"Supersampling value is not in the range [1,8]: {self.supersampling}")
669
+ req.spec.supersampling_ratio = self.supersampling
670
+
527
671
  req.project_id = self._project_id
528
672
  if self._entity_type == EntityType.SIMULATION:
529
673
  req.spec.entity_type.simulation.id = self._solution.simulation_id
@@ -552,22 +696,24 @@ class Scene:
552
696
  req: vis_pb2.CreateExtractRequest = self._create_request(name=name, description=description)
553
697
  res: vis_pb2.CreateExtractResponse = get_default_client().CreateExtract(req)
554
698
  logger.info("Successfully submitted 'render_images' request")
555
- return RenderOutput(
699
+ render_output = RenderOutput(_InternalToken())
700
+ render_output._set_data(
556
701
  extract_id=res.extract.extract_id,
557
702
  project_id=self._project_id,
558
703
  name=name,
559
704
  desciption=description,
560
705
  status=RenderStatusType(res.extract.status),
561
706
  )
707
+ return render_output
562
708
 
563
- def interact(self) -> InteractiveScene:
709
+ def interact(self, scene_mode: SceneMode = SceneMode.SIDE_PANEL) -> InteractiveScene:
564
710
  """
565
711
  Start an interactive display of the scene, when running inside LuminaryCloud's
566
712
  AI Notebook environment or Jupyter Lab. The returned object must be displayed
567
713
  in the notebook to display the interactive visualization. This requires that
568
714
  the luminarycloud package was installed with the optional jupyter feature.
569
715
  """
570
- self._interactive_scene = InteractiveScene(self)
716
+ self._interactive_scene = InteractiveScene(self, mode=scene_mode)
571
717
  return self._interactive_scene
572
718
 
573
719
 
@@ -589,14 +735,15 @@ def get_render(project_id: str, extract_id: str) -> RenderOutput:
589
735
  req.extract_id = extract_id
590
736
  req.project_id = project_id
591
737
  res: vis_pb2.GetExtractResponse = get_default_client().GetExtract(req)
592
- output = RenderOutput(
738
+ render_output = RenderOutput(_InternalToken())
739
+ render_output._set_data(
593
740
  extract_id=extract_id,
594
741
  project_id=project_id,
595
742
  name=res.extract.name,
596
743
  desciption=res.extract.description,
597
744
  status=RenderStatusType(res.extract.status),
598
745
  )
599
- return output
746
+ return render_output
600
747
 
601
748
 
602
749
  def list_quantities(solution: Solution) -> List[VisQuantity]:
@@ -677,15 +824,14 @@ def list_renders(entity: Geometry | Mesh | Solution) -> List[RenderOutput]:
677
824
 
678
825
  results: List[RenderOutput] = []
679
826
  for extract in res.extracts:
680
- result = RenderOutput(
827
+ result = RenderOutput(_InternalToken())
828
+ result._set_data(
681
829
  extract_id=extract.extract_id,
682
830
  project_id=extract.project_id,
683
831
  name=extract.name,
684
832
  desciption=extract.description,
685
833
  status=RenderStatusType(extract.status),
686
834
  )
687
-
688
- # TODO(matt): the List extracts request is giving us nil for the status.
689
835
  # This need to be fixed on the backend, but manually refreshing works for now.
690
836
  result.refresh()
691
837
  results.append(result)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luminarycloud
3
- Version: 0.13.0
3
+ Version: 0.14.0
4
4
  Summary: Luminary Cloud SDK
5
5
  Project-URL: Homepage, https://www.luminarycloud.com/
6
6
  Project-URL: Documentation, https://app.luminarycloud.com/docs/api/
@@ -29,7 +29,6 @@ Requires-Dist: waitress~=3.0.1
29
29
  Requires-Dist: werkzeug~=3.0.1
30
30
  Provides-Extra: jupyter
31
31
  Requires-Dist: luminarycloud-jupyter; extra == 'jupyter'
32
- Requires-Dist: requests; extra == 'jupyter'
33
32
  Description-Content-Type: text/markdown
34
33
 
35
34
  Luminary Cloud's Python Software Development Kit (SDK) allows you to access many of the features within our platform programmatically (i.e. without needing to go through the graphical user interface in your browser).