luminarycloud 0.22.2__py3-none-any.whl → 0.23.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- luminarycloud/__init__.py +9 -3
- luminarycloud/_client/client.py +1 -1
- luminarycloud/_client/retry_interceptor.py +13 -2
- luminarycloud/_helpers/_code_representation.py +1 -0
- luminarycloud/_helpers/_create_simulation.py +5 -1
- luminarycloud/_helpers/proto_decorator.py +46 -38
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +214 -137
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +152 -0
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +103 -0
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +40 -0
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.py +25 -3
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.pyi +30 -0
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.py +34 -0
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.pyi +12 -0
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +155 -59
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +252 -22
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +102 -0
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +36 -0
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +94 -71
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +46 -0
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.py +35 -0
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.pyi +16 -0
- luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +25 -3
- luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +32 -0
- luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.py +34 -0
- luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.pyi +12 -0
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +68 -21
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +119 -0
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py +33 -0
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi +10 -0
- luminarycloud/_proto/client/simulation_pb2.py +405 -346
- luminarycloud/_proto/client/simulation_pb2.pyi +175 -21
- luminarycloud/_proto/clusterconfig/clusterconfig_pb2.py +273 -0
- luminarycloud/_proto/clusterconfig/clusterconfig_pb2.pyi +808 -0
- luminarycloud/_proto/geometry/geometry_pb2.pyi +1 -1
- luminarycloud/_proto/lcstatus/details/geometry/geometry_pb2.py +256 -0
- luminarycloud/_proto/lcstatus/details/geometry/geometry_pb2.pyi +472 -0
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +2 -2
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +102 -0
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +36 -0
- luminarycloud/_proto/quantity/quantity_pb2.pyi +1 -1
- luminarycloud/enum/__init__.py +1 -0
- luminarycloud/enum/gpu_type.py +42 -7
- luminarycloud/enum/vis_enums.py +18 -0
- luminarycloud/geometry.py +81 -0
- luminarycloud/geometry_contacts.py +222 -0
- luminarycloud/meshing/mesh_generation_params.py +4 -4
- luminarycloud/meshing/sizing_strategy/__init__.py +0 -1
- luminarycloud/meshing/sizing_strategy/sizing_strategies.py +0 -20
- luminarycloud/params/geometry/shapes.py +137 -31
- luminarycloud/params/outputs/__init__.py +0 -2
- luminarycloud/params/outputs/output.py +17 -5
- luminarycloud/params/simulation/__init__.py +2 -0
- luminarycloud/params/simulation/adaptive_mesh_refinement/active_region_.py +1 -1
- luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +1 -1
- luminarycloud/params/simulation/adaptive_mesh_refinement_.py +1 -1
- luminarycloud/params/simulation/adjoint_.py +8 -5
- luminarycloud/params/simulation/basic/gravity/gravity_off_.py +1 -1
- luminarycloud/params/simulation/basic/gravity/gravity_on_.py +1 -1
- luminarycloud/params/simulation/basic/gravity_.py +1 -1
- luminarycloud/params/simulation/body_frame_.py +1 -1
- luminarycloud/params/simulation/entity_relationships/volume_material_relationship_.py +1 -1
- luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py +1 -1
- luminarycloud/params/simulation/entity_relationships_.py +1 -1
- luminarycloud/params/simulation/general_.py +1 -1
- luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_off_.py +1 -1
- luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_on_.py +1 -1
- luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py +1 -1
- luminarycloud/params/simulation/material/fluid/material_model/__init__.py +2 -0
- luminarycloud/params/simulation/material/fluid/material_model/ideal_gas_.py +1 -1
- luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_.py +1 -1
- luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_with_energy_.py +1 -1
- luminarycloud/params/simulation/material/fluid/material_model/real_gas_backend/__init__.py +2 -0
- luminarycloud/params/simulation/material/fluid/material_model/real_gas_backend/real_gas_coolprop_.py +43 -0
- luminarycloud/params/simulation/material/fluid/material_model/real_gas_backend/real_gas_polynomial_.py +53 -0
- luminarycloud/params/simulation/material/fluid/material_model/real_gas_backend_.py +29 -0
- luminarycloud/params/simulation/material/fluid/material_model_.py +1 -1
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +1 -1
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +1 -1
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +1 -1
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model_.py +1 -1
- luminarycloud/params/simulation/material/fluid/viscosity_model/prescribed_viscosity_.py +1 -1
- luminarycloud/params/simulation/material/fluid/viscosity_model/sutherland_.py +1 -1
- luminarycloud/params/simulation/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +1 -1
- luminarycloud/params/simulation/material/fluid/viscosity_model_.py +1 -1
- luminarycloud/params/simulation/material/material_fluid_.py +78 -2
- luminarycloud/params/simulation/material/material_solid_.py +1 -1
- luminarycloud/params/simulation/material_entity_.py +1 -1
- luminarycloud/params/simulation/monitor_plane_.py +1 -1
- luminarycloud/params/simulation/motion_data/frame_transforms/no_transform_.py +1 -1
- luminarycloud/params/simulation/motion_data/frame_transforms/rotational_transform_.py +1 -1
- luminarycloud/params/simulation/motion_data/frame_transforms/translational_transform_.py +1 -1
- luminarycloud/params/simulation/motion_data/frame_transforms_.py +1 -1
- luminarycloud/params/simulation/motion_data/motion_type/constant_angular_motion_.py +1 -1
- luminarycloud/params/simulation/motion_data/motion_type/constant_translation_motion_.py +1 -1
- luminarycloud/params/simulation/motion_data/motion_type_.py +1 -1
- luminarycloud/params/simulation/motion_data_.py +1 -1
- luminarycloud/params/simulation/multi_physics_coupling_options_.py +1 -1
- luminarycloud/params/simulation/nonlinear_control/__init__.py +1 -0
- luminarycloud/params/simulation/nonlinear_control/nonlinear_control_system_.py +48 -0
- luminarycloud/params/simulation/nonlinear_control_.py +61 -0
- luminarycloud/params/simulation/output_.py +1 -1
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +1 -1
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +1 -1
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +1 -1
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +1 -1
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_line_.py +1 -1
- luminarycloud/params/simulation/particle_group/particle_group_type/probe_points_.py +1 -1
- luminarycloud/params/simulation/particle_group/particle_group_type/source_points_.py +1 -1
- luminarycloud/params/simulation/particle_group/particle_group_type_.py +1 -1
- luminarycloud/params/simulation/particle_group_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/adjoint_controls_fluid_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/basic_fluid_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/symmetry_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/slip_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_energy_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_momentum_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions_fluid_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/initialization/__init__.py +1 -0
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_existing_solution_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +14 -1
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_initialization_per_zone_.py +48 -0
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +14 -1
- luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/initialization_fluid_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/porous_behavior_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_auto_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls_fluid_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/fds_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization_fluid_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/iddes_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model_.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence_.py +1 -1
- luminarycloud/params/simulation/physics/fluid_.py +1 -1
- luminarycloud/params/simulation/physics/heat/adjoint_controls_heat_.py +1 -1
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_convection_.py +1 -1
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +1 -1
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +1 -1
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_symmetry_.py +1 -1
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_temperature_.py +1 -1
- luminarycloud/params/simulation/physics/heat/boundary_conditions_heat_.py +1 -1
- luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +1 -1
- luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +1 -1
- luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type_.py +1 -1
- luminarycloud/params/simulation/physics/heat/heat_source_.py +1 -1
- luminarycloud/params/simulation/physics/heat/initialization/__init__.py +1 -0
- luminarycloud/params/simulation/physics/heat/initialization/heat_existing_solution_.py +1 -1
- luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values/__init__.py +1 -0
- luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values/heat_initialization_per_zone_.py +40 -0
- luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values_.py +14 -1
- luminarycloud/params/simulation/physics/heat/initialization_heat_.py +1 -1
- luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +1 -1
- luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +1 -1
- luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +1 -1
- luminarycloud/params/simulation/physics/heat/spatial_discretization_heat_.py +1 -1
- luminarycloud/params/simulation/physics/heat_.py +1 -1
- luminarycloud/params/simulation/physics/periodic_pair_.py +5 -1
- luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py +1 -1
- luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/krylov_amg_.py +1 -1
- luminarycloud/params/simulation/physics/solution_controls/linear_solver_type_.py +1 -1
- luminarycloud/params/simulation/physics_.py +1 -1
- luminarycloud/params/simulation/simulation_param_.py +8 -1
- luminarycloud/params/simulation/sliding_interfaces_.py +1 -1
- luminarycloud/params/simulation/surface_name_.py +1 -1
- luminarycloud/params/simulation/time/compute_statistics/compute_statistics_off_.py +1 -1
- luminarycloud/params/simulation/time/compute_statistics/compute_statistics_on_.py +1 -1
- luminarycloud/params/simulation/time/compute_statistics_.py +1 -1
- luminarycloud/params/simulation/time/time_marching/time_explicit_.py +1 -1
- luminarycloud/params/simulation/time/time_marching/time_implicit_.py +1 -1
- luminarycloud/params/simulation/time/time_marching_.py +1 -1
- luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py +1 -1
- luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py +1 -1
- luminarycloud/params/simulation/time/time_step_ramp_.py +1 -1
- luminarycloud/params/simulation/time_.py +1 -1
- luminarycloud/params/simulation/volume_entity_.py +1 -1
- luminarycloud/physics_ai/__init__.py +17 -0
- luminarycloud/physics_ai/architectures.py +130 -18
- luminarycloud/physics_ai/datasets.py +301 -0
- luminarycloud/physics_ai/training_jobs.py +50 -4
- luminarycloud/pipelines/__init__.py +16 -4
- luminarycloud/pipelines/api.py +192 -17
- luminarycloud/pipelines/arguments.py +8 -3
- luminarycloud/pipelines/core.py +296 -45
- luminarycloud/pipelines/flowables.py +138 -0
- luminarycloud/pipelines/stages.py +34 -55
- luminarycloud/pipelines/user_code_validation.py +122 -0
- luminarycloud/project.py +0 -14
- luminarycloud/simulation.py +42 -11
- luminarycloud/simulation_param.py +0 -62
- luminarycloud/simulation_template.py +1 -11
- luminarycloud/types/adfloat.py +48 -4
- luminarycloud/types/matrix3.py +9 -9
- luminarycloud/types/vector3.py +52 -23
- luminarycloud/vis/__init__.py +3 -0
- luminarycloud/vis/visualization.py +88 -0
- luminarycloud/volume_selection.py +29 -17
- {luminarycloud-0.22.2.dist-info → luminarycloud-0.23.0.dist-info}/METADATA +1 -1
- {luminarycloud-0.22.2.dist-info → luminarycloud-0.23.0.dist-info}/RECORD +266 -249
- luminarycloud/params/outputs/residual_output.py +0 -24
- /luminarycloud/params/{simulation/_lib.py → _lib.py} +0 -0
- {luminarycloud-0.22.2.dist-info → luminarycloud-0.23.0.dist-info}/WHEEL +0 -0
|
@@ -15,6 +15,11 @@ class PhysicsAiTrainingServiceStub:
|
|
|
15
15
|
luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.CreateDatasetResponse,
|
|
16
16
|
]
|
|
17
17
|
"""Create a Physics AI dataset"""
|
|
18
|
+
ListDatasets: grpc.UnaryUnaryMultiCallable[
|
|
19
|
+
luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.ListDatasetsRequest,
|
|
20
|
+
luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.ListDatasetsResponse,
|
|
21
|
+
]
|
|
22
|
+
"""List Physics AI datasets for the current user"""
|
|
18
23
|
SubmitTrainingJob: grpc.UnaryUnaryMultiCallable[
|
|
19
24
|
luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobRequest,
|
|
20
25
|
luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobResponse,
|
|
@@ -25,6 +30,16 @@ class PhysicsAiTrainingServiceStub:
|
|
|
25
30
|
luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.CancelTrainingJobResponse,
|
|
26
31
|
]
|
|
27
32
|
"""Cancel a physics AI training job"""
|
|
33
|
+
GetTrainingJob: grpc.UnaryUnaryMultiCallable[
|
|
34
|
+
luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.GetTrainingJobRequest,
|
|
35
|
+
luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.GetTrainingJobResponse,
|
|
36
|
+
]
|
|
37
|
+
"""Get a physics AI training job by ID"""
|
|
38
|
+
ListTrainingJobs: grpc.UnaryUnaryMultiCallable[
|
|
39
|
+
luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.ListTrainingJobsRequest,
|
|
40
|
+
luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.ListTrainingJobsResponse,
|
|
41
|
+
]
|
|
42
|
+
"""List physics AI training jobs for the current user"""
|
|
28
43
|
|
|
29
44
|
class PhysicsAiTrainingServiceServicer(metaclass=abc.ABCMeta):
|
|
30
45
|
"""PhysicsAiTrainingService provides training functionality for Physics AI"""
|
|
@@ -37,6 +52,13 @@ class PhysicsAiTrainingServiceServicer(metaclass=abc.ABCMeta):
|
|
|
37
52
|
) -> luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.CreateDatasetResponse:
|
|
38
53
|
"""Create a Physics AI dataset"""
|
|
39
54
|
@abc.abstractmethod
|
|
55
|
+
def ListDatasets(
|
|
56
|
+
self,
|
|
57
|
+
request: luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.ListDatasetsRequest,
|
|
58
|
+
context: grpc.ServicerContext,
|
|
59
|
+
) -> luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.ListDatasetsResponse:
|
|
60
|
+
"""List Physics AI datasets for the current user"""
|
|
61
|
+
@abc.abstractmethod
|
|
40
62
|
def SubmitTrainingJob(
|
|
41
63
|
self,
|
|
42
64
|
request: luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobRequest,
|
|
@@ -50,5 +72,19 @@ class PhysicsAiTrainingServiceServicer(metaclass=abc.ABCMeta):
|
|
|
50
72
|
context: grpc.ServicerContext,
|
|
51
73
|
) -> luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.CancelTrainingJobResponse:
|
|
52
74
|
"""Cancel a physics AI training job"""
|
|
75
|
+
@abc.abstractmethod
|
|
76
|
+
def GetTrainingJob(
|
|
77
|
+
self,
|
|
78
|
+
request: luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.GetTrainingJobRequest,
|
|
79
|
+
context: grpc.ServicerContext,
|
|
80
|
+
) -> luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.GetTrainingJobResponse:
|
|
81
|
+
"""Get a physics AI training job by ID"""
|
|
82
|
+
@abc.abstractmethod
|
|
83
|
+
def ListTrainingJobs(
|
|
84
|
+
self,
|
|
85
|
+
request: luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.ListTrainingJobsRequest,
|
|
86
|
+
context: grpc.ServicerContext,
|
|
87
|
+
) -> luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.ListTrainingJobsResponse:
|
|
88
|
+
"""List physics AI training jobs for the current user"""
|
|
53
89
|
|
|
54
90
|
def add_PhysicsAiTrainingServiceServicer_to_server(servicer: PhysicsAiTrainingServiceServicer, server: grpc.Server) -> None: ...
|
luminarycloud/enum/__init__.py
CHANGED
luminarycloud/enum/gpu_type.py
CHANGED
|
@@ -1,14 +1,49 @@
|
|
|
1
|
-
from enum import
|
|
1
|
+
from enum import StrEnum
|
|
2
2
|
from .._proto.api.v0.luminarycloud.simulation import simulation_pb2 as simulationpb
|
|
3
|
+
from .._proto.clusterconfig import clusterconfig_pb2 as clusterconfigpb
|
|
3
4
|
|
|
4
5
|
|
|
5
|
-
class GPUType(
|
|
6
|
+
class GPUType(StrEnum):
|
|
6
7
|
"""
|
|
7
8
|
Represents a GPU type.
|
|
8
9
|
"""
|
|
9
10
|
|
|
10
|
-
UNSPECIFIED =
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
UNSPECIFIED = "unspecified"
|
|
12
|
+
CPU = "cpu"
|
|
13
|
+
T4 = "t4"
|
|
14
|
+
V100 = "v100"
|
|
15
|
+
A100 = "a100"
|
|
16
|
+
A100_80 = "a100_80"
|
|
17
|
+
H100 = "h100"
|
|
18
|
+
|
|
19
|
+
def _to_sim_options_gpu_type(self) -> int:
|
|
20
|
+
if self == GPUType.UNSPECIFIED:
|
|
21
|
+
return simulationpb.SimulationOptions.GPU_TYPE_UNSPECIFIED
|
|
22
|
+
elif self == GPUType.T4:
|
|
23
|
+
return simulationpb.SimulationOptions.GPU_TYPE_T4
|
|
24
|
+
elif self == GPUType.V100:
|
|
25
|
+
return simulationpb.SimulationOptions.GPU_TYPE_V100
|
|
26
|
+
elif self == GPUType.A100:
|
|
27
|
+
return simulationpb.SimulationOptions.GPU_TYPE_A100
|
|
28
|
+
elif self == GPUType.H100:
|
|
29
|
+
return simulationpb.SimulationOptions.GPU_TYPE_H100
|
|
30
|
+
else:
|
|
31
|
+
raise ValueError(f"Invalid GPU type: {self.value}")
|
|
32
|
+
|
|
33
|
+
def _to_clusterconfig_gpu_type(self) -> int:
|
|
34
|
+
if self == GPUType.UNSPECIFIED:
|
|
35
|
+
return clusterconfigpb.GPUType.UNSPECIFIED
|
|
36
|
+
elif self == GPUType.CPU:
|
|
37
|
+
return clusterconfigpb.GPUType.CPU
|
|
38
|
+
elif self == GPUType.T4:
|
|
39
|
+
return clusterconfigpb.GPUType.T4
|
|
40
|
+
elif self == GPUType.V100:
|
|
41
|
+
return clusterconfigpb.GPUType.V100
|
|
42
|
+
elif self == GPUType.A100:
|
|
43
|
+
return clusterconfigpb.GPUType.A100
|
|
44
|
+
elif self == GPUType.A100_80:
|
|
45
|
+
return clusterconfigpb.GPUType.A100_80
|
|
46
|
+
elif self == GPUType.H100:
|
|
47
|
+
return clusterconfigpb.GPUType.H100
|
|
48
|
+
else:
|
|
49
|
+
raise ValueError(f"Invalid GPU type: {self.value}")
|
luminarycloud/enum/vis_enums.py
CHANGED
|
@@ -332,3 +332,21 @@ class FieldAssociation(IntEnum):
|
|
|
332
332
|
|
|
333
333
|
POINTS = 0
|
|
334
334
|
CELLS = 1
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
class ExtremaType(IntEnum):
|
|
338
|
+
"""
|
|
339
|
+
An enum to specify whether to find minimum or maximum values in an extrema query.
|
|
340
|
+
|
|
341
|
+
.. warning:: This feature is experimental and may change or be removed in the future.
|
|
342
|
+
|
|
343
|
+
Attributes
|
|
344
|
+
----------
|
|
345
|
+
MIN
|
|
346
|
+
Find the minimum values.
|
|
347
|
+
MAX
|
|
348
|
+
Find the maximum values.
|
|
349
|
+
"""
|
|
350
|
+
|
|
351
|
+
MIN = vis_pb2.EXTREMA_TYPE_MIN
|
|
352
|
+
MAX = vis_pb2.EXTREMA_TYPE_MAX
|
luminarycloud/geometry.py
CHANGED
|
@@ -10,6 +10,8 @@ from typing import Union, Sequence
|
|
|
10
10
|
from typing_extensions import TYPE_CHECKING
|
|
11
11
|
|
|
12
12
|
import luminarycloud as lc
|
|
13
|
+
from luminarycloud.exceptions import NotFoundError
|
|
14
|
+
from luminarycloud.geometry_contacts import get_geometry_contacts
|
|
13
15
|
|
|
14
16
|
from ._client import get_default_client
|
|
15
17
|
from ._helpers._timestamp_to_datetime import timestamp_to_datetime
|
|
@@ -30,6 +32,7 @@ from .named_variable_set import NamedVariableSet, get_named_variable_set
|
|
|
30
32
|
if TYPE_CHECKING:
|
|
31
33
|
from .project import Project
|
|
32
34
|
from .geometry_version import GeometryVersion, GeometryVersionIterator
|
|
35
|
+
from .geometry_contacts import GeometryContacts
|
|
33
36
|
|
|
34
37
|
|
|
35
38
|
@ProtoWrapper(geometrypb.Geometry)
|
|
@@ -681,6 +684,84 @@ class Geometry(ProtoWrapperBase):
|
|
|
681
684
|
res: geometrypb.GetGeometryResponse = get_default_client().GetGeometry(req)
|
|
682
685
|
self._proto = res.geometry
|
|
683
686
|
|
|
687
|
+
def compute_contacts(self) -> "GeometryContacts":
|
|
688
|
+
"""
|
|
689
|
+
Compute geometry contacts for this geometry.
|
|
690
|
+
|
|
691
|
+
This initiates an asynchronous computation to identify contact surfaces
|
|
692
|
+
between bodies in the geometry. Returns a GeometryContacts object immediately,
|
|
693
|
+
which can be used to wait for completion or check status.
|
|
694
|
+
|
|
695
|
+
Returns
|
|
696
|
+
-------
|
|
697
|
+
GeometryContacts
|
|
698
|
+
The contacts object. Initially found=False. Use .wait() to block until
|
|
699
|
+
computation completes, or .refresh() to check current status.
|
|
700
|
+
|
|
701
|
+
Examples
|
|
702
|
+
--------
|
|
703
|
+
>>> geometry = lc.get_geometry("geo-123")
|
|
704
|
+
>>> contacts = geometry.compute_contacts()
|
|
705
|
+
>>> contacts.wait() # Block until computation completes
|
|
706
|
+
>>> if not contacts.operation_error:
|
|
707
|
+
... for contact in contacts.contacts:
|
|
708
|
+
... print(f"Contact {contact.id}: faces {contact.side_a} vs {contact.side_b}")
|
|
709
|
+
|
|
710
|
+
Or poll asynchronously:
|
|
711
|
+
>>> contacts = geometry.compute_contacts()
|
|
712
|
+
>>> # Do other work...
|
|
713
|
+
>>> contacts.refresh()
|
|
714
|
+
>>> if contacts.found and not contacts.operation_error:
|
|
715
|
+
... print(f"Found {len(contacts.contacts)} contacts")
|
|
716
|
+
"""
|
|
717
|
+
|
|
718
|
+
latest_geometry_version = self.latest_version()
|
|
719
|
+
|
|
720
|
+
req = geometrypb.StartComputeGeometryContactsRequest(
|
|
721
|
+
geometry_id=self.id,
|
|
722
|
+
geometry_version_id=latest_geometry_version.id,
|
|
723
|
+
project_id=self.project_id,
|
|
724
|
+
)
|
|
725
|
+
get_default_client().StartComputeGeometryContacts(req)
|
|
726
|
+
|
|
727
|
+
# Return the GeometryContacts object immediately (found=False initially)
|
|
728
|
+
contacts = get_geometry_contacts(self.id, latest_geometry_version.id, self.project_id)
|
|
729
|
+
return contacts
|
|
730
|
+
|
|
731
|
+
def get_contacts(self) -> "GeometryContacts | None":
|
|
732
|
+
"""
|
|
733
|
+
Get the computed contacts for this geometry, if available.
|
|
734
|
+
|
|
735
|
+
Returns None if contacts have not been computed yet or not found.
|
|
736
|
+
|
|
737
|
+
Returns
|
|
738
|
+
-------
|
|
739
|
+
GeometryContacts | None
|
|
740
|
+
The computed contacts, or None if not found.
|
|
741
|
+
|
|
742
|
+
Raises
|
|
743
|
+
------
|
|
744
|
+
RpcError
|
|
745
|
+
If there is an error communicating with the API (other than NotFoundError).
|
|
746
|
+
|
|
747
|
+
Examples
|
|
748
|
+
--------
|
|
749
|
+
>>> geometry = lc.get_geometry("geo-123")
|
|
750
|
+
>>> contacts = geometry.get_contacts()
|
|
751
|
+
>>> if contacts and contacts.found and not contacts.operation_error:
|
|
752
|
+
... print(f"Found {len(contacts.contacts)} contacts")
|
|
753
|
+
"""
|
|
754
|
+
latest_geometry_version = self.latest_version()
|
|
755
|
+
|
|
756
|
+
try:
|
|
757
|
+
contacts = get_geometry_contacts(self.id, latest_geometry_version.id, self.project_id)
|
|
758
|
+
if contacts.found:
|
|
759
|
+
return contacts
|
|
760
|
+
return None
|
|
761
|
+
except NotFoundError:
|
|
762
|
+
# Contacts haven't been computed yet
|
|
763
|
+
return None
|
|
764
|
+
|
|
684
765
|
def to_code(self) -> str:
|
|
685
766
|
"""
|
|
686
767
|
Returns the python code that creates (from scratch) an identical geometry.
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Copyright 2026 Luminary Cloud, Inc. All Rights Reserved.
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import logging
|
|
5
|
+
from time import sleep, time
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
7
|
+
|
|
8
|
+
import luminarycloud as lc
|
|
9
|
+
from luminarycloud.exceptions import SDKException, Timeout
|
|
10
|
+
|
|
11
|
+
from ._client import get_default_client
|
|
12
|
+
from ._proto.api.v0.luminarycloud.geometry import geometry_pb2 as geometrypb
|
|
13
|
+
from ._wrapper import ProtoWrapperBase
|
|
14
|
+
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from .geometry import Geometry
|
|
17
|
+
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class GeometryContactsError(SDKException):
|
|
22
|
+
"""Raised when geometry contacts computation fails."""
|
|
23
|
+
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def wait_for_geometry_contacts(
|
|
28
|
+
geometry_id: str,
|
|
29
|
+
geometry_version_id: str,
|
|
30
|
+
project_id: str,
|
|
31
|
+
*,
|
|
32
|
+
interval_seconds: float = 2,
|
|
33
|
+
timeout_seconds: float = float("inf"),
|
|
34
|
+
) -> GeometryContacts:
|
|
35
|
+
"""
|
|
36
|
+
Waits for geometry contacts computation to complete.
|
|
37
|
+
|
|
38
|
+
Polls the GetGeometryContacts RPC until the computation is found
|
|
39
|
+
and either succeeds or fails.
|
|
40
|
+
|
|
41
|
+
Parameters
|
|
42
|
+
----------
|
|
43
|
+
geometry_id: str
|
|
44
|
+
The geometry ID
|
|
45
|
+
geometry_version_id: str
|
|
46
|
+
The geometry version ID
|
|
47
|
+
project_id: str
|
|
48
|
+
The project ID
|
|
49
|
+
interval_seconds: float
|
|
50
|
+
Number of seconds between polls. Default is 2 seconds.
|
|
51
|
+
timeout_seconds: float
|
|
52
|
+
Number of seconds before the operation times out.
|
|
53
|
+
Default is infinity.
|
|
54
|
+
|
|
55
|
+
Returns
|
|
56
|
+
-------
|
|
57
|
+
GeometryContacts
|
|
58
|
+
The computed geometry contacts.
|
|
59
|
+
|
|
60
|
+
Raises
|
|
61
|
+
------
|
|
62
|
+
Timeout
|
|
63
|
+
If the operation times out before completion.
|
|
64
|
+
"""
|
|
65
|
+
deadline = time() + timeout_seconds
|
|
66
|
+
while True:
|
|
67
|
+
if time() >= deadline:
|
|
68
|
+
raise Timeout("Timed out waiting for geometry contacts to be computed.")
|
|
69
|
+
|
|
70
|
+
response = get_geometry_contacts(geometry_id, geometry_version_id, project_id)
|
|
71
|
+
|
|
72
|
+
if response.found:
|
|
73
|
+
if response.operation_error:
|
|
74
|
+
raise GeometryContactsError(
|
|
75
|
+
f"Geometry contacts computation failed with error. Issues: {response.issues}"
|
|
76
|
+
)
|
|
77
|
+
return response
|
|
78
|
+
|
|
79
|
+
# not yet found/complete, continue polling
|
|
80
|
+
sleep(max(0, min(interval_seconds, deadline - time())))
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class Contact:
|
|
84
|
+
"""Represents a single contact between two surfaces."""
|
|
85
|
+
|
|
86
|
+
def __init__(self, id: str, side_a: list[str], side_b: list[str]):
|
|
87
|
+
self.id = id
|
|
88
|
+
self.side_a = side_a
|
|
89
|
+
self.side_b = side_b
|
|
90
|
+
|
|
91
|
+
def __repr__(self) -> str:
|
|
92
|
+
return f"Contact(id={self.id}, " f"side_a={self.side_a}, " f"side_b={self.side_b})"
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class GeometryContacts(ProtoWrapperBase):
|
|
96
|
+
_proto: "geometrypb.GetGeometryContactsResponse"
|
|
97
|
+
|
|
98
|
+
def __init__(self, proto: "geometrypb.GetGeometryContactsResponse"):
|
|
99
|
+
self._proto = proto
|
|
100
|
+
self.geometry_id: str = ""
|
|
101
|
+
self.geometry_version_id: str = ""
|
|
102
|
+
self.project_id: str = ""
|
|
103
|
+
|
|
104
|
+
@property
|
|
105
|
+
def found(self) -> bool:
|
|
106
|
+
"""Whether the contacts computation was found."""
|
|
107
|
+
return self._proto.contacts.found
|
|
108
|
+
|
|
109
|
+
@property
|
|
110
|
+
def operation_error(self) -> bool:
|
|
111
|
+
"""Whether the contacts computation encountered an error."""
|
|
112
|
+
return self._proto.contacts.operation_error
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
def contacts(self) -> list[Contact]:
|
|
116
|
+
"""List of computed contacts."""
|
|
117
|
+
return [
|
|
118
|
+
Contact(
|
|
119
|
+
id=c.id,
|
|
120
|
+
side_a=list(c.side_a),
|
|
121
|
+
side_b=list(c.side_b),
|
|
122
|
+
)
|
|
123
|
+
for c in self._proto.contacts.contacts
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
@property
|
|
127
|
+
def issues(self) -> list:
|
|
128
|
+
"""List of issues/warnings from the computation."""
|
|
129
|
+
return list(self._proto.contacts.issues)
|
|
130
|
+
|
|
131
|
+
def geometry(self) -> "Geometry":
|
|
132
|
+
"""Get the geometry these contacts are for."""
|
|
133
|
+
return lc.get_geometry(self.geometry_id)
|
|
134
|
+
|
|
135
|
+
def refresh(self) -> "GeometryContacts":
|
|
136
|
+
"""
|
|
137
|
+
Sync the GeometryContacts object with the backend.
|
|
138
|
+
|
|
139
|
+
Returns
|
|
140
|
+
-------
|
|
141
|
+
GeometryContacts
|
|
142
|
+
Updated contacts consistent with the backend.
|
|
143
|
+
"""
|
|
144
|
+
self._proto = get_geometry_contacts(
|
|
145
|
+
self.geometry_id, self.geometry_version_id, self.project_id
|
|
146
|
+
)._proto
|
|
147
|
+
return self
|
|
148
|
+
|
|
149
|
+
def wait(
|
|
150
|
+
self,
|
|
151
|
+
*,
|
|
152
|
+
interval_seconds: float = 2,
|
|
153
|
+
timeout_seconds: float = float("inf"),
|
|
154
|
+
) -> bool:
|
|
155
|
+
"""
|
|
156
|
+
Wait until the geometry contacts computation has either completed or failed.
|
|
157
|
+
|
|
158
|
+
Mutates self with the final status and results.
|
|
159
|
+
|
|
160
|
+
Parameters
|
|
161
|
+
----------
|
|
162
|
+
interval_seconds : float, optional
|
|
163
|
+
Number of seconds between polls. Default is 2 seconds.
|
|
164
|
+
timeout_seconds : float, optional
|
|
165
|
+
Number of seconds before timeout.
|
|
166
|
+
|
|
167
|
+
Returns
|
|
168
|
+
-------
|
|
169
|
+
bool
|
|
170
|
+
True if computation completed without error, False if operation_error is True.
|
|
171
|
+
"""
|
|
172
|
+
computed_contacts = wait_for_geometry_contacts(
|
|
173
|
+
self.geometry_id,
|
|
174
|
+
self.geometry_version_id,
|
|
175
|
+
self.project_id,
|
|
176
|
+
interval_seconds=interval_seconds,
|
|
177
|
+
timeout_seconds=timeout_seconds,
|
|
178
|
+
)
|
|
179
|
+
# Update self with the final results
|
|
180
|
+
self._proto = computed_contacts._proto
|
|
181
|
+
return self.operation_error is False
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def get_geometry_contacts(
|
|
185
|
+
geometry_id: str,
|
|
186
|
+
geometry_version_id: str,
|
|
187
|
+
project_id: str,
|
|
188
|
+
) -> GeometryContacts:
|
|
189
|
+
"""
|
|
190
|
+
Get computed contacts for a specific geometry version.
|
|
191
|
+
|
|
192
|
+
Parameters
|
|
193
|
+
----------
|
|
194
|
+
geometry_id : str
|
|
195
|
+
The geometry ID
|
|
196
|
+
geometry_version_id : str
|
|
197
|
+
The geometry version ID
|
|
198
|
+
project_id : str
|
|
199
|
+
The project ID
|
|
200
|
+
|
|
201
|
+
Returns
|
|
202
|
+
-------
|
|
203
|
+
GeometryContacts
|
|
204
|
+
The contacts information (may indicate not found if not yet computed)
|
|
205
|
+
|
|
206
|
+
Examples
|
|
207
|
+
--------
|
|
208
|
+
>>> contacts = lc.get_geometry_contacts("geo-123", "gv-456")
|
|
209
|
+
>>> if contacts.found:
|
|
210
|
+
... print(f"Found {len(contacts.contacts)} contacts")
|
|
211
|
+
"""
|
|
212
|
+
req = geometrypb.GetGeometryContactsRequest(
|
|
213
|
+
geometry_id=geometry_id,
|
|
214
|
+
geometry_version_id=geometry_version_id,
|
|
215
|
+
project_id=project_id,
|
|
216
|
+
)
|
|
217
|
+
res = get_default_client().GetGeometryContacts(req)
|
|
218
|
+
contacts = GeometryContacts(res)
|
|
219
|
+
contacts.geometry_id = geometry_id
|
|
220
|
+
contacts.geometry_version_id = geometry_version_id
|
|
221
|
+
contacts.project_id = project_id
|
|
222
|
+
return contacts
|
|
@@ -15,7 +15,7 @@ from ..params.geometry import (
|
|
|
15
15
|
Volume,
|
|
16
16
|
)
|
|
17
17
|
from ..types import Vector3
|
|
18
|
-
from .sizing_strategy import MaxCount, Minimal,
|
|
18
|
+
from .sizing_strategy import MaxCount, Minimal, SizingStrategy, TargetCount
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass(kw_only=True)
|
|
@@ -108,7 +108,7 @@ class RefinementRegion:
|
|
|
108
108
|
proto.h_limit = self.h_limit
|
|
109
109
|
if isinstance(self.shape, Sphere):
|
|
110
110
|
proto.sphere.center_float.CopyFrom(self.shape.center._to_base_proto())
|
|
111
|
-
proto.sphere.radius_float = self.shape.radius
|
|
111
|
+
proto.sphere.radius_float = float(self.shape.radius)
|
|
112
112
|
elif isinstance(self.shape, SphereShell):
|
|
113
113
|
proto.sphere_shell.center.CopyFrom(self.shape.center._to_base_proto())
|
|
114
114
|
proto.sphere_shell.radius = self.shape.radius
|
|
@@ -125,7 +125,7 @@ class RefinementRegion:
|
|
|
125
125
|
elif isinstance(self.shape, Cylinder):
|
|
126
126
|
proto.cylinder.start_float.CopyFrom(self.shape.start._to_base_proto())
|
|
127
127
|
proto.cylinder.end_float.CopyFrom(self.shape.end._to_base_proto())
|
|
128
|
-
proto.cylinder.radius_float = self.shape.radius
|
|
128
|
+
proto.cylinder.radius_float = float(self.shape.radius)
|
|
129
129
|
elif isinstance(self.shape, AnnularCylinder):
|
|
130
130
|
proto.annular_cylinder.start.CopyFrom(self.shape.start._to_base_proto())
|
|
131
131
|
proto.annular_cylinder.end.CopyFrom(self.shape.end._to_base_proto())
|
|
@@ -178,7 +178,7 @@ class MeshGenerationParams:
|
|
|
178
178
|
)
|
|
179
179
|
)
|
|
180
180
|
|
|
181
|
-
if isinstance(self.sizing_strategy,
|
|
181
|
+
if isinstance(self.sizing_strategy, Minimal):
|
|
182
182
|
proto.mesh_complexity_params.type = (
|
|
183
183
|
meshpb.MeshGenerationParams.MeshComplexityParams.ComplexityType.MIN
|
|
184
184
|
)
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
2
|
|
|
3
|
-
from luminarycloud._helpers.warnings.deprecated import deprecated
|
|
4
|
-
|
|
5
3
|
|
|
6
4
|
@dataclass
|
|
7
5
|
class SizingStrategy:
|
|
@@ -10,24 +8,6 @@ class SizingStrategy:
|
|
|
10
8
|
pass
|
|
11
9
|
|
|
12
10
|
|
|
13
|
-
@deprecated(
|
|
14
|
-
"Use luminarycloud.meshing.sizing_strategy.Minimal instead.",
|
|
15
|
-
"0.10.2",
|
|
16
|
-
)
|
|
17
|
-
@dataclass
|
|
18
|
-
class MinimalCount(SizingStrategy):
|
|
19
|
-
"""
|
|
20
|
-
Minimal sizing strategy parameters.
|
|
21
|
-
|
|
22
|
-
If this is used, all other meshing parameters are ignored.
|
|
23
|
-
|
|
24
|
-
.. deprecated:: 0.10.2
|
|
25
|
-
Use [`Minimal()`](#luminarycloud.meshing.sizing_strategy.Minimal) instead.
|
|
26
|
-
"""
|
|
27
|
-
|
|
28
|
-
pass
|
|
29
|
-
|
|
30
|
-
|
|
31
11
|
@dataclass
|
|
32
12
|
class Minimal(SizingStrategy):
|
|
33
13
|
"""
|