luminarycloud 0.22.3__py3-none-any.whl → 0.23.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- luminarycloud/__init__.py +9 -3
- luminarycloud/_client/client.py +1 -1
- 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/physics_ai/physics_ai_pb2.py +137 -63
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +166 -6
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +68 -0
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +24 -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 +409 -348
- luminarycloud/_proto/client/simulation_pb2.pyi +188 -27
- 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/physicsaitrainingservice/physicsaitrainingservice_pb2.py +2 -2
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +68 -0
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +24 -0
- luminarycloud/enum/__init__.py +1 -0
- luminarycloud/enum/gpu_type.py +47 -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 +3 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +3 -3
- 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 +5 -3
- 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 +9 -0
- luminarycloud/physics_ai/architectures.py +129 -17
- luminarycloud/physics_ai/datasets.py +66 -11
- luminarycloud/physics_ai/training_jobs.py +50 -4
- luminarycloud/pipelines/__init__.py +5 -4
- luminarycloud/pipelines/api.py +148 -34
- luminarycloud/pipelines/arguments.py +8 -3
- luminarycloud/pipelines/core.py +10 -72
- luminarycloud/pipelines/stages.py +28 -25
- 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.3.dist-info → luminarycloud-0.23.1.dist-info}/METADATA +1 -1
- {luminarycloud-0.22.3.dist-info → luminarycloud-0.23.1.dist-info}/RECORD +257 -244
- luminarycloud/params/outputs/residual_output.py +0 -24
- /luminarycloud/params/{simulation/_lib.py → _lib.py} +0 -0
- {luminarycloud-0.22.3.dist-info → luminarycloud-0.23.1.dist-info}/WHEEL +0 -0
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.physics.heat.adjoint_controls_heat_ import AdjointControlsHeat
|
|
21
21
|
from luminarycloud.params.simulation.physics.heat.adjoint_controls_heat_ import *
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass(kw_only=True)
|
|
@@ -28,6 +28,8 @@ class PeriodicPair(CodeRepr, ParamGroupWrapper[clientpb.PeriodicPair]):
|
|
|
28
28
|
""
|
|
29
29
|
surfaces_side_b: list[str] = field(default_factory=list)
|
|
30
30
|
""
|
|
31
|
+
automatic_deduction: bool = False
|
|
32
|
+
"Deduce the sign and magnitude of the rotation or translation automatically. When this is enabled the translation and rotation vectors only provide the direction or axis. Note that for rotational periodicity this option works best if the full circle is evenly divisible by the angle. The center of rotation is not deduced."
|
|
31
33
|
translation: Vector3 = field(default_factory=lambda: Vector3(0.0, 0.0, 0.0))
|
|
32
34
|
"Holds the translation vector in the x,y,z directions from each point on the first periodic boundary to its matching point on the second periodic boundary."
|
|
33
35
|
center: Vector3 = field(default_factory=lambda: Vector3(0.0, 0.0, 0.0))
|
|
@@ -43,6 +45,7 @@ class PeriodicPair(CodeRepr, ParamGroupWrapper[clientpb.PeriodicPair]):
|
|
|
43
45
|
_proto.bound_a.extend(self.surfaces_side_a)
|
|
44
46
|
if self.surfaces_side_b is not None:
|
|
45
47
|
_proto.bound_b.extend(self.surfaces_side_b)
|
|
48
|
+
_proto.periodic_automatic_deduction = self.automatic_deduction
|
|
46
49
|
_proto.periodic_translation.CopyFrom(self.translation._to_ad_proto())
|
|
47
50
|
_proto.periodic_center_of_rotation.CopyFrom(self.center._to_ad_proto())
|
|
48
51
|
_proto.periodic_rotation_angles.CopyFrom(self.rotation_vector._to_ad_proto())
|
|
@@ -52,6 +55,7 @@ class PeriodicPair(CodeRepr, ParamGroupWrapper[clientpb.PeriodicPair]):
|
|
|
52
55
|
self.name = proto.periodic_pair_name
|
|
53
56
|
self.surfaces_side_a.extend(proto.bound_a)
|
|
54
57
|
self.surfaces_side_b.extend(proto.bound_b)
|
|
58
|
+
self.automatic_deduction = proto.periodic_automatic_deduction
|
|
55
59
|
self.translation._from_ad_proto(proto.periodic_translation)
|
|
56
60
|
self.center._from_ad_proto(proto.periodic_center_of_rotation)
|
|
57
61
|
self.rotation_vector._from_ad_proto(proto.periodic_rotation_angles)
|
luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py
CHANGED
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.physics.solution_controls.linear_solver_type_ import (
|
|
21
21
|
LinearSolverType,
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.physics.solution_controls.linear_solver_type_ import (
|
|
21
21
|
LinearSolverType,
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass(kw_only=True)
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.physics.fluid_ import Fluid
|
|
21
21
|
from luminarycloud.params.simulation.physics.fluid_ import *
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.adaptive_mesh_refinement_ import AdaptiveMeshRefinement
|
|
21
21
|
from luminarycloud.params.simulation.adaptive_mesh_refinement_ import *
|
|
@@ -37,6 +37,8 @@ from luminarycloud.params.simulation.multi_physics_coupling_options_ import (
|
|
|
37
37
|
MultiPhysicsCouplingOptions,
|
|
38
38
|
)
|
|
39
39
|
from luminarycloud.params.simulation.multi_physics_coupling_options_ import *
|
|
40
|
+
from luminarycloud.params.simulation.nonlinear_control_ import NonlinearControl
|
|
41
|
+
from luminarycloud.params.simulation.nonlinear_control_ import *
|
|
40
42
|
from luminarycloud.params.simulation.output_ import Output
|
|
41
43
|
from luminarycloud.params.simulation.output_ import *
|
|
42
44
|
from luminarycloud.params.simulation.particle_group_ import ParticleGroup
|
|
@@ -65,6 +67,8 @@ class SimulationParam(CodeRepr, ParamGroupWrapper[clientpb.SimulationParam]):
|
|
|
65
67
|
"Basic parameters used by a solution."
|
|
66
68
|
adjoint: Adjoint = field(default_factory=Adjoint)
|
|
67
69
|
"Settings for adjoint sensitivity analysis."
|
|
70
|
+
nonlinear_control: NonlinearControl = field(default_factory=NonlinearControl)
|
|
71
|
+
"Determine input values such that target output values are met."
|
|
68
72
|
time: Time = field(default_factory=Time)
|
|
69
73
|
"Time parameters used by a transient solution (required if flow_behavior = transient)."
|
|
70
74
|
motion_data: list[MotionData] = field(default_factory=list)
|
|
@@ -104,6 +108,8 @@ class SimulationParam(CodeRepr, ParamGroupWrapper[clientpb.SimulationParam]):
|
|
|
104
108
|
_proto.general.CopyFrom(self.basic._to_proto())
|
|
105
109
|
if self.adjoint is not None:
|
|
106
110
|
_proto.adjoint.CopyFrom(self.adjoint._to_proto())
|
|
111
|
+
if self.nonlinear_control is not None:
|
|
112
|
+
_proto.nonlinear_control.CopyFrom(self.nonlinear_control._to_proto())
|
|
107
113
|
if self.time is not None:
|
|
108
114
|
_proto.time.CopyFrom(self.time._to_proto())
|
|
109
115
|
if self.motion_data is not None:
|
|
@@ -139,6 +145,7 @@ class SimulationParam(CodeRepr, ParamGroupWrapper[clientpb.SimulationParam]):
|
|
|
139
145
|
self.volume_entity = [VolumeEntity.from_proto(v) for v in proto.volume_entity]
|
|
140
146
|
self.basic = General.from_proto(proto.general)
|
|
141
147
|
self.adjoint = Adjoint.from_proto(proto.adjoint)
|
|
148
|
+
self.nonlinear_control = NonlinearControl.from_proto(proto.nonlinear_control)
|
|
142
149
|
self.time = Time.from_proto(proto.time)
|
|
143
150
|
self.motion_data = [MotionData.from_proto(v) for v in proto.motion_data]
|
|
144
151
|
self.particle_group = [ParticleGroup.from_proto(v) for v in proto.particle_group]
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass(kw_only=True)
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass(kw_only=True)
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.time.compute_statistics_ import ComputeStatistics
|
|
21
21
|
from luminarycloud.params.simulation.time.compute_statistics_ import *
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.time.compute_statistics_ import ComputeStatistics
|
|
21
21
|
from luminarycloud.params.simulation.time.compute_statistics_ import *
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass(kw_only=True)
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.time.time_marching_ import TimeMarching
|
|
21
21
|
from luminarycloud.params.simulation.time.time_marching_ import *
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.time.time_marching_ import TimeMarching
|
|
21
21
|
from luminarycloud.params.simulation.time.time_marching_ import *
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass(kw_only=True)
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.time.time_step_ramp_ import TimeStepRamp
|
|
21
21
|
from luminarycloud.params.simulation.time.time_step_ramp_ import *
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.time.time_step_ramp_ import TimeStepRamp
|
|
21
21
|
from luminarycloud.params.simulation.time.time_step_ramp_ import *
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass(kw_only=True)
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
from luminarycloud.params.simulation.time.compute_statistics_ import ComputeStatistics
|
|
21
21
|
from luminarycloud.params.simulation.time.compute_statistics_ import *
|
|
@@ -15,7 +15,7 @@ from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
|
15
15
|
from luminarycloud._helpers import CodeRepr
|
|
16
16
|
import luminarycloud.params.enum._enum_wrappers as enum
|
|
17
17
|
|
|
18
|
-
from luminarycloud.params.
|
|
18
|
+
from luminarycloud.params._lib import ParamGroupWrapper, create_unique_id
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass(kw_only=True)
|
|
@@ -2,6 +2,8 @@ from .architectures import (
|
|
|
2
2
|
list_architectures as list_architectures,
|
|
3
3
|
PhysicsAiArchitecture as PhysicsAiArchitecture,
|
|
4
4
|
PhysicsAiArchitectureVersion as PhysicsAiArchitectureVersion,
|
|
5
|
+
ModelOutputs as ModelOutputs,
|
|
6
|
+
InputParameter as InputParameter,
|
|
5
7
|
)
|
|
6
8
|
from .models import (
|
|
7
9
|
list_pretrained_models as list_pretrained_models,
|
|
@@ -26,4 +28,11 @@ from .datasets import (
|
|
|
26
28
|
DatasetCaseInput as DatasetCaseInput,
|
|
27
29
|
ExportConfig as ExportConfig,
|
|
28
30
|
PhysicsAiDataset as PhysicsAiDataset,
|
|
31
|
+
ParameterDefinition as ParameterDefinition,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
from .training_jobs import (
|
|
35
|
+
get_training_job as get_training_job,
|
|
36
|
+
list_training_jobs as list_training_jobs,
|
|
37
|
+
PhysicsAiTrainingJob as PhysicsAiTrainingJob,
|
|
29
38
|
)
|
|
@@ -1,16 +1,68 @@
|
|
|
1
1
|
# Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
|
|
2
|
-
|
|
2
|
+
import copy
|
|
3
|
+
from dataclasses import dataclass, field
|
|
3
4
|
import json
|
|
4
5
|
|
|
5
6
|
from .._client import get_default_client
|
|
6
7
|
from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
|
|
8
|
+
from .._proto.quantity import quantity_pb2 as quantitypb
|
|
7
9
|
from .._wrapper import ProtoWrapper, ProtoWrapperBase
|
|
8
10
|
from ..types.ids import PhysicsAiArchitectureID, PhysicsAiArchitectureVersionID
|
|
9
11
|
from ..enum.physics_ai_lifecycle_state import PhysicsAiLifecycleState
|
|
12
|
+
from ..enum.quantity_type import QuantityType
|
|
10
13
|
|
|
11
14
|
from .training_jobs import PhysicsAiTrainingJob
|
|
12
15
|
|
|
13
16
|
|
|
17
|
+
@dataclass
|
|
18
|
+
class ModelOutputs:
|
|
19
|
+
"""
|
|
20
|
+
Defines the output variables for the model.
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
surface : list[QuantityType], optional
|
|
25
|
+
Surface outputs to predict (e.g., PRESSURE, WALL_SHEAR_STRESS)
|
|
26
|
+
volume : list[QuantityType], optional
|
|
27
|
+
Volume outputs to predict (e.g., VELOCITY, PRESSURE)
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
surface: list[QuantityType] | None = None
|
|
31
|
+
volume: list[QuantityType] | None = None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dataclass
|
|
35
|
+
class InputParameter:
|
|
36
|
+
"""
|
|
37
|
+
Defines an input parameter for the model with reference values for normalization.
|
|
38
|
+
|
|
39
|
+
Type is inherited from the dataset's ParameterSchema, so only the name and
|
|
40
|
+
optional reference values need to be specified here.
|
|
41
|
+
|
|
42
|
+
Parameters
|
|
43
|
+
----------
|
|
44
|
+
name : str
|
|
45
|
+
Parameter name (must exist in the dataset's ParameterSchema)
|
|
46
|
+
reference : list[float], optional
|
|
47
|
+
Reference value(s) for normalization. If not provided, falls back to
|
|
48
|
+
the default_reference from the dataset's ParameterSchema. For scalars,
|
|
49
|
+
a single-element list. For vectors, the number of elements must match
|
|
50
|
+
the dimension from the schema.
|
|
51
|
+
|
|
52
|
+
Examples
|
|
53
|
+
--------
|
|
54
|
+
>>> # Use schema defaults (no reference specified)
|
|
55
|
+
>>> air_density = InputParameter(name="air_density")
|
|
56
|
+
>>> # Override with custom reference values
|
|
57
|
+
>>> velocity = InputParameter(name="inlet_velocity", reference=[30.0, 0.0, 0.0])
|
|
58
|
+
>>> # Scalar parameter with explicit reference
|
|
59
|
+
>>> stream_velocity = InputParameter(name="stream_velocity", reference=[148.28])
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
name: str
|
|
63
|
+
reference: list[float] = field(default_factory=list)
|
|
64
|
+
|
|
65
|
+
|
|
14
66
|
@ProtoWrapper(physaipb.PhysicsAiArchitectureVersion)
|
|
15
67
|
class PhysicsAiArchitectureVersion(ProtoWrapperBase):
|
|
16
68
|
"""
|
|
@@ -26,30 +78,87 @@ class PhysicsAiArchitectureVersion(ProtoWrapperBase):
|
|
|
26
78
|
lifecycle_state: PhysicsAiLifecycleState
|
|
27
79
|
_proto: physaipb.PhysicsAiArchitectureVersion
|
|
28
80
|
|
|
29
|
-
def get_training_description(self,
|
|
30
|
-
if
|
|
31
|
-
return
|
|
81
|
+
def get_training_description(self, _internal: dict | None) -> str:
|
|
82
|
+
if _internal and _internal.get("description"):
|
|
83
|
+
return _internal["description"]
|
|
32
84
|
|
|
33
85
|
desc = f"Training job for architecture {self.name}"
|
|
34
|
-
if
|
|
35
|
-
desc += f" with custom args: {
|
|
86
|
+
if _internal and _internal.get("custom_args"):
|
|
87
|
+
desc += f" with custom args: {_internal['custom_args']}"
|
|
36
88
|
return desc
|
|
37
89
|
|
|
38
|
-
def train(
|
|
90
|
+
def train(
|
|
91
|
+
self,
|
|
92
|
+
dataset_id: str | None = None,
|
|
93
|
+
outputs: ModelOutputs | None = None,
|
|
94
|
+
inputs: list[InputParameter] | None = None,
|
|
95
|
+
_internal: dict | None = None,
|
|
96
|
+
) -> PhysicsAiTrainingJob:
|
|
39
97
|
"""
|
|
40
98
|
Submit a training job for this architecture version.
|
|
41
99
|
|
|
42
100
|
Parameters
|
|
43
101
|
----------
|
|
44
|
-
|
|
45
|
-
|
|
102
|
+
dataset_id : str, optional
|
|
103
|
+
ID of a managed dataset to train on. If provided, uses session-based
|
|
104
|
+
GCS authentication.
|
|
105
|
+
outputs : ModelOutputs, optional
|
|
106
|
+
Output variables for the model (surface and/or volume quantities).
|
|
107
|
+
inputs : list[InputParameter], optional
|
|
108
|
+
Input parameters for the model with reference values for normalization.
|
|
109
|
+
Parameter names must exist in the dataset's ParameterSchema.
|
|
110
|
+
_internal : dict, optional
|
|
111
|
+
Internal configuration (resources, priority_class, custom_args, etc.).
|
|
112
|
+
This is for internal use only and may change without notice.
|
|
46
113
|
|
|
47
114
|
Returns
|
|
48
115
|
-------
|
|
49
116
|
PhysicsAiTrainingJob
|
|
50
117
|
The submitted training job object
|
|
51
|
-
"""
|
|
52
118
|
|
|
119
|
+
Examples
|
|
120
|
+
--------
|
|
121
|
+
>>> from luminarycloud.enum.quantity_type import QuantityType
|
|
122
|
+
>>> from luminarycloud.physics_ai.architectures import ModelOutputs, InputParameter
|
|
123
|
+
>>>
|
|
124
|
+
>>> job = arch_version.train(
|
|
125
|
+
... dataset_id="dataset-abc123",
|
|
126
|
+
... outputs=ModelOutputs(
|
|
127
|
+
... surface=[QuantityType.PRESSURE_TIME_AVERAGE, QuantityType.WALL_SHEAR_STRESS_TIME_AVERAGE],
|
|
128
|
+
... volume=[QuantityType.VELOCITY_TIME_AVERAGE],
|
|
129
|
+
... ),
|
|
130
|
+
... inputs=[
|
|
131
|
+
... InputParameter(name="stream_velocity", reference=[148.28]),
|
|
132
|
+
... InputParameter(name="air_density", reference=[0.38]),
|
|
133
|
+
... ],
|
|
134
|
+
... )
|
|
135
|
+
"""
|
|
136
|
+
# Build typed proto fields for outputs
|
|
137
|
+
surface_outputs: list[quantitypb.QuantityType] = []
|
|
138
|
+
volume_outputs: list[quantitypb.QuantityType] = []
|
|
139
|
+
|
|
140
|
+
if outputs:
|
|
141
|
+
if outputs.surface:
|
|
142
|
+
surface_outputs = [quantitypb.QuantityType.Value(q.name) for q in outputs.surface]
|
|
143
|
+
if outputs.volume:
|
|
144
|
+
volume_outputs = [quantitypb.QuantityType.Value(q.name) for q in outputs.volume]
|
|
145
|
+
|
|
146
|
+
# Build typed proto fields for input parameters
|
|
147
|
+
# Type is inherited from the dataset's ParameterSchema at HydraConfig generation time
|
|
148
|
+
input_parameters: list[physaipb.TrainingInputParameter] = []
|
|
149
|
+
if inputs:
|
|
150
|
+
for param in inputs:
|
|
151
|
+
input_parameters.append(
|
|
152
|
+
physaipb.TrainingInputParameter(
|
|
153
|
+
name=param.name,
|
|
154
|
+
reference=param.reference,
|
|
155
|
+
)
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
# Build training_config JSON for internal fields only (resources, priority_class, etc.)
|
|
159
|
+
config: dict = copy.deepcopy(_internal) if _internal else {}
|
|
160
|
+
|
|
161
|
+
# Apply defaults for _internal fields
|
|
53
162
|
if "custom_args" not in config:
|
|
54
163
|
config["custom_args"] = ""
|
|
55
164
|
if "priority_class" not in config:
|
|
@@ -66,14 +175,17 @@ class PhysicsAiArchitectureVersion(ProtoWrapperBase):
|
|
|
66
175
|
config["mode"] = "full"
|
|
67
176
|
|
|
68
177
|
training_config_json = json.dumps(config, indent=2)
|
|
69
|
-
|
|
178
|
+
|
|
70
179
|
req = physaipb.SubmitTrainingJobRequest(
|
|
71
180
|
architecture_version_id=self.id,
|
|
72
|
-
training_description=self.get_training_description(
|
|
73
|
-
external_dataset_uri=external_dataset_uri,
|
|
181
|
+
training_description=self.get_training_description(_internal),
|
|
74
182
|
training_config=training_config_json,
|
|
75
183
|
initialization_type=physaipb.MODEL_INITIALIZATION_TYPE_RANDOM,
|
|
76
184
|
base_model_version_id="",
|
|
185
|
+
dataset_id=dataset_id if dataset_id else "",
|
|
186
|
+
surface_outputs=surface_outputs,
|
|
187
|
+
volume_outputs=volume_outputs,
|
|
188
|
+
input_parameters=input_parameters,
|
|
77
189
|
)
|
|
78
190
|
|
|
79
191
|
response = get_default_client().SubmitTrainingJob(req)
|
|
@@ -92,10 +204,10 @@ class PhysicsAiArchitecture(ProtoWrapperBase):
|
|
|
92
204
|
id: PhysicsAiArchitectureID
|
|
93
205
|
name: str
|
|
94
206
|
description: str
|
|
95
|
-
versions:
|
|
207
|
+
versions: list[PhysicsAiArchitectureVersion]
|
|
96
208
|
_proto: physaipb.PhysicsAiArchitecture
|
|
97
209
|
|
|
98
|
-
def get_latest_version(self) ->
|
|
210
|
+
def get_latest_version(self) -> PhysicsAiArchitectureVersion | None:
|
|
99
211
|
"""
|
|
100
212
|
Get the latest version of this architecture based on name.
|
|
101
213
|
|
|
@@ -107,10 +219,10 @@ class PhysicsAiArchitecture(ProtoWrapperBase):
|
|
|
107
219
|
"""
|
|
108
220
|
if not self.versions:
|
|
109
221
|
return None
|
|
110
|
-
return self.versions[0]
|
|
222
|
+
return self.versions[0]
|
|
111
223
|
|
|
112
224
|
|
|
113
|
-
def list_architectures() ->
|
|
225
|
+
def list_architectures() -> list[PhysicsAiArchitecture]:
|
|
114
226
|
"""
|
|
115
227
|
List available Physics AI architectures for model training.
|
|
116
228
|
|
|
@@ -1,20 +1,57 @@
|
|
|
1
1
|
# Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
|
|
2
2
|
from dataclasses import dataclass, field
|
|
3
|
-
from typing import List, Optional, Union, TYPE_CHECKING
|
|
4
3
|
from datetime import datetime
|
|
4
|
+
from typing import TYPE_CHECKING, List, Optional, Union
|
|
5
5
|
|
|
6
|
-
from google.protobuf.struct_pb2 import Struct
|
|
7
6
|
from google.protobuf.json_format import ParseDict
|
|
7
|
+
from google.protobuf.struct_pb2 import Struct
|
|
8
8
|
|
|
9
|
-
from ..enum import QuantityType
|
|
10
9
|
from .._client import get_default_client
|
|
11
10
|
from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
|
|
12
11
|
from .._wrapper import ProtoWrapper, ProtoWrapperBase
|
|
12
|
+
from ..enum import QuantityType
|
|
13
13
|
|
|
14
14
|
if TYPE_CHECKING:
|
|
15
15
|
from ..solution import Solution
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
@dataclass
|
|
19
|
+
class ParameterDefinition:
|
|
20
|
+
"""
|
|
21
|
+
Defines a parameter in a dataset's parameter schema.
|
|
22
|
+
|
|
23
|
+
.. warning:: This feature is experimental and may change or be removed without notice.
|
|
24
|
+
|
|
25
|
+
Parameters
|
|
26
|
+
----------
|
|
27
|
+
name : str
|
|
28
|
+
Parameter name (e.g., "stream_velocity", "air_density").
|
|
29
|
+
type : str
|
|
30
|
+
Parameter type: "scalar" for single values, "vector" for multi-dimensional values.
|
|
31
|
+
dimension : int
|
|
32
|
+
Number of dimensions: 1 for scalar, N for N-dimensional vector.
|
|
33
|
+
default_reference : list[float], optional
|
|
34
|
+
Default reference value(s) for normalization. Length must match dimension if provided.
|
|
35
|
+
description : str, optional
|
|
36
|
+
Description of the parameter.
|
|
37
|
+
|
|
38
|
+
Examples
|
|
39
|
+
--------
|
|
40
|
+
>>> # Scalar parameter
|
|
41
|
+
>>> air_density = ParameterDefinition(name="air_density", type="scalar", dimension=1, default_reference=[1.225])
|
|
42
|
+
>>> # Vector parameter (3D velocity)
|
|
43
|
+
>>> velocity = ParameterDefinition(name="inlet_velocity", type="vector", dimension=3, default_reference=[30.0, 0.0, 0.0])
|
|
44
|
+
>>> # 1D velocity (stream velocity magnitude)
|
|
45
|
+
>>> stream_velocity = ParameterDefinition(name="stream_velocity", type="vector", dimension=1, default_reference=[148.28])
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
name: str
|
|
49
|
+
type: str # "scalar" or "vector"
|
|
50
|
+
dimension: int = 1
|
|
51
|
+
default_reference: List[float] = field(default_factory=list)
|
|
52
|
+
description: str = ""
|
|
53
|
+
|
|
54
|
+
|
|
18
55
|
@dataclass(kw_only=True)
|
|
19
56
|
class ExportConfig:
|
|
20
57
|
"""
|
|
@@ -107,7 +144,7 @@ def create_dataset(
|
|
|
107
144
|
cases: List[Union["Solution", DatasetCaseInput]],
|
|
108
145
|
export_config: Optional[ExportConfig] = None,
|
|
109
146
|
description: str = "",
|
|
110
|
-
parameter_schema: Optional[
|
|
147
|
+
parameter_schema: Optional[List[ParameterDefinition]] = None,
|
|
111
148
|
) -> PhysicsAiDataset:
|
|
112
149
|
"""
|
|
113
150
|
Create a Physics AI dataset from simulation solutions.
|
|
@@ -126,8 +163,9 @@ def create_dataset(
|
|
|
126
163
|
Export configuration. If not provided, uses defaults (single_precision=True).
|
|
127
164
|
description : str, optional
|
|
128
165
|
Description of the dataset
|
|
129
|
-
parameter_schema :
|
|
130
|
-
|
|
166
|
+
parameter_schema : List[ParameterDefinition], optional
|
|
167
|
+
List of parameter definitions for this dataset. Each parameter defines
|
|
168
|
+
the type, dimension, and optional default reference value.
|
|
131
169
|
|
|
132
170
|
Returns
|
|
133
171
|
-------
|
|
@@ -141,6 +179,9 @@ def create_dataset(
|
|
|
141
179
|
>>> dataset = create_dataset(
|
|
142
180
|
... name="my-dataset",
|
|
143
181
|
... cases=[solution1, solution2, solution3],
|
|
182
|
+
... parameter_schema=[
|
|
183
|
+
... ParameterDefinition(name="stream_velocity", type="vector", dimension=1),
|
|
184
|
+
... ],
|
|
144
185
|
... )
|
|
145
186
|
|
|
146
187
|
With custom export config:
|
|
@@ -152,6 +193,10 @@ def create_dataset(
|
|
|
152
193
|
... exclude_tags=["Farfield", "Symmetry"],
|
|
153
194
|
... surface_fields_to_keep=[QuantityType.PRESSURE, QuantityType.WALL_SHEAR_STRESS],
|
|
154
195
|
... ),
|
|
196
|
+
... parameter_schema=[
|
|
197
|
+
... ParameterDefinition(name="stream_velocity", type="vector", dimension=1, default_reference=[148.28]),
|
|
198
|
+
... ParameterDefinition(name="air_density", type="scalar", dimension=1, default_reference=[0.38]),
|
|
199
|
+
... ],
|
|
155
200
|
... )
|
|
156
201
|
|
|
157
202
|
With physics parameters:
|
|
@@ -163,6 +208,9 @@ def create_dataset(
|
|
|
163
208
|
... DatasetCaseInput(solution2, params={"alpha": 10.0}),
|
|
164
209
|
... ],
|
|
165
210
|
... export_config=ExportConfig(process_volume=True),
|
|
211
|
+
... parameter_schema=[
|
|
212
|
+
... ParameterDefinition(name="alpha", type="scalar", dimension=1),
|
|
213
|
+
... ],
|
|
166
214
|
... )
|
|
167
215
|
"""
|
|
168
216
|
# Use default export config if not provided
|
|
@@ -201,12 +249,19 @@ def create_dataset(
|
|
|
201
249
|
if export_config.volume_fields_to_keep:
|
|
202
250
|
export_config_proto.volume_fields_to_keep.extend(export_config.volume_fields_to_keep)
|
|
203
251
|
|
|
204
|
-
# Build parameter schema
|
|
252
|
+
# Build parameter schema from list of ParameterDefinition
|
|
253
|
+
param_schema_proto = physaipb.ParameterSchema()
|
|
205
254
|
if parameter_schema:
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
255
|
+
for param_def in parameter_schema:
|
|
256
|
+
param_schema_proto.parameters.append(
|
|
257
|
+
physaipb.ParameterDefinition(
|
|
258
|
+
name=param_def.name,
|
|
259
|
+
type=param_def.type,
|
|
260
|
+
dimension=param_def.dimension,
|
|
261
|
+
default_reference=param_def.default_reference,
|
|
262
|
+
description=param_def.description,
|
|
263
|
+
)
|
|
264
|
+
)
|
|
210
265
|
|
|
211
266
|
req = physaipb.CreateDatasetRequest(
|
|
212
267
|
name=name,
|