luminarycloud 0.15.3__py3-none-any.whl → 0.15.5__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 +1 -0
- luminarycloud/_helpers/_create_geometry.py +36 -17
- luminarycloud/_helpers/_create_simulation.py +2 -0
- luminarycloud/_helpers/_entity_identifier.py +6 -0
- luminarycloud/_helpers/named_variables.py +6 -15
- luminarycloud/_helpers/warnings/experimental.py +6 -2
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +77 -55
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +34 -2
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +33 -0
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +10 -0
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +45 -15
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +104 -22
- luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +12 -12
- luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +10 -2
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py +27 -105
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi +24 -173
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py +17 -113
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi +16 -44
- luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2.py +4 -2
- luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2_grpc.py +37 -0
- luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2_grpc.pyi +20 -0
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +221 -143
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +154 -7
- 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/assistant/assistant_pb2.py +62 -61
- luminarycloud/_proto/client/simulation_pb2.py +349 -309
- luminarycloud/_proto/client/simulation_pb2.pyi +97 -2
- luminarycloud/_proto/fvm/solver_results_pb2.py +25 -11
- luminarycloud/_proto/fvm/solver_results_pb2.pyi +24 -1
- luminarycloud/_proto/geometry/geometry_pb2.py +63 -64
- luminarycloud/_proto/namedvariableset/namedvariableset_pb2.py +49 -0
- luminarycloud/_proto/namedvariableset/namedvariableset_pb2.pyi +53 -0
- luminarycloud/_proto/upload/upload_pb2.py +27 -7
- luminarycloud/_proto/upload/upload_pb2.pyi +31 -0
- luminarycloud/_wrapper.py +26 -7
- luminarycloud/enum/__init__.py +2 -0
- luminarycloud/enum/physics_ai_lifecycle_state.py +30 -0
- luminarycloud/enum/quantity_type.py +43 -0
- luminarycloud/enum/vis_enums.py +6 -2
- luminarycloud/geometry.py +46 -2
- luminarycloud/named_variable_set.py +10 -5
- luminarycloud/params/enum/_enum_wrappers.py +68 -0
- luminarycloud/params/simulation/_lib.py +1 -1
- luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +5 -6
- luminarycloud/params/simulation/adaptive_mesh_refinement_.py +6 -7
- luminarycloud/params/simulation/adjoint_.py +3 -4
- luminarycloud/params/simulation/basic/gravity/gravity_off_.py +3 -4
- luminarycloud/params/simulation/basic/gravity/gravity_on_.py +3 -4
- luminarycloud/params/simulation/basic/gravity_.py +3 -4
- luminarycloud/params/simulation/body_frame_.py +3 -4
- luminarycloud/params/simulation/entity_relationships/volume_material_relationship_.py +9 -6
- luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py +9 -6
- luminarycloud/params/simulation/entity_relationships_.py +3 -4
- luminarycloud/params/simulation/general_.py +3 -4
- luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_off_.py +3 -4
- luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_on_.py +5 -6
- luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py +3 -4
- luminarycloud/params/simulation/material/fluid/material_model/ideal_gas_.py +5 -6
- luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_.py +4 -5
- luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_with_energy_.py +5 -6
- luminarycloud/params/simulation/material/fluid/material_model_.py +3 -4
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +4 -5
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +4 -5
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +3 -4
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model_.py +3 -4
- luminarycloud/params/simulation/material/fluid/viscosity_model/prescribed_viscosity_.py +4 -5
- luminarycloud/params/simulation/material/fluid/viscosity_model/sutherland_.py +6 -7
- luminarycloud/params/simulation/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +3 -4
- luminarycloud/params/simulation/material/fluid/viscosity_model_.py +3 -4
- luminarycloud/params/simulation/material/material_fluid_.py +4 -5
- luminarycloud/params/simulation/material/material_solid_.py +6 -7
- luminarycloud/params/simulation/material_entity_.py +6 -5
- luminarycloud/params/simulation/monitor_plane_.py +4 -5
- luminarycloud/params/simulation/motion_data/frame_transforms/no_transform_.py +3 -4
- luminarycloud/params/simulation/motion_data/frame_transforms/rotational_transform_.py +3 -4
- luminarycloud/params/simulation/motion_data/frame_transforms/translational_transform_.py +3 -4
- luminarycloud/params/simulation/motion_data/frame_transforms_.py +3 -4
- luminarycloud/params/simulation/motion_data/motion_type/constant_angular_motion_.py +3 -4
- luminarycloud/params/simulation/motion_data/motion_type/constant_translation_motion_.py +3 -4
- luminarycloud/params/simulation/motion_data/motion_type_.py +3 -4
- luminarycloud/params/simulation/motion_data_.py +3 -4
- luminarycloud/params/simulation/multi_physics_coupling_options_.py +3 -4
- luminarycloud/params/simulation/output_.py +3 -4
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +3 -4
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +3 -4
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +3 -4
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +5 -6
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_line_.py +3 -4
- luminarycloud/params/simulation/particle_group/particle_group_type/probe_points_.py +3 -4
- luminarycloud/params/simulation/particle_group/particle_group_type/source_points_.py +3 -4
- luminarycloud/params/simulation/particle_group/particle_group_type_.py +3 -4
- luminarycloud/params/simulation/particle_group_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/adjoint_controls_fluid_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/basic_fluid_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +9 -10
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +5 -6
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +5 -6
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +5 -6
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +5 -6
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +7 -8
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +5 -6
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/symmetry_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +9 -10
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/slip_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_energy_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_momentum_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions_fluid_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_existing_solution_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +5 -6
- luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +9 -10
- luminarycloud/params/simulation/physics/fluid/initialization_fluid_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +6 -7
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +5 -6
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/physical_behavior_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/porous_behavior_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +9 -10
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/solution_controls_fluid_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/fds_.py +5 -6
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +5 -6
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +8 -9
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/spatial_discretization_fluid_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/iddes_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +16 -17
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +15 -16
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +4 -5
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model_.py +3 -4
- luminarycloud/params/simulation/physics/fluid/turbulence_.py +6 -7
- luminarycloud/params/simulation/physics/fluid_.py +8 -7
- luminarycloud/params/simulation/physics/heat/adjoint_controls_heat_.py +3 -4
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_convection_.py +5 -6
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +4 -5
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +4 -5
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_symmetry_.py +3 -4
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_temperature_.py +4 -5
- luminarycloud/params/simulation/physics/heat/boundary_conditions_heat_.py +3 -4
- luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +4 -5
- luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +4 -5
- luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type_.py +3 -4
- luminarycloud/params/simulation/physics/heat/heat_source_.py +3 -4
- luminarycloud/params/simulation/physics/heat/initialization/heat_existing_solution_.py +3 -4
- luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values_.py +4 -5
- luminarycloud/params/simulation/physics/heat/initialization_heat_.py +3 -4
- luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +4 -5
- luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +3 -4
- luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +4 -5
- luminarycloud/params/simulation/physics/heat/spatial_discretization_heat_.py +5 -6
- luminarycloud/params/simulation/physics/heat_.py +5 -5
- luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +3 -4
- luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/translational_periodicity_.py +3 -4
- luminarycloud/params/simulation/physics/periodic_pair/periodicity_type_.py +3 -4
- luminarycloud/params/simulation/physics/periodic_pair_.py +3 -4
- luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py +3 -4
- luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/krylov_amg_.py +4 -5
- luminarycloud/params/simulation/physics/solution_controls/linear_solver_type_.py +4 -5
- luminarycloud/params/simulation/physics_.py +6 -5
- luminarycloud/params/simulation/simulation_param_.py +3 -4
- luminarycloud/params/simulation/sliding_interfaces_.py +3 -4
- luminarycloud/params/simulation/surface_name_.py +3 -4
- luminarycloud/params/simulation/time/compute_statistics/compute_statistics_off_.py +3 -4
- luminarycloud/params/simulation/time/compute_statistics/compute_statistics_on_.py +3 -4
- luminarycloud/params/simulation/time/compute_statistics_.py +3 -4
- luminarycloud/params/simulation/time/time_marching/time_explicit_.py +3 -4
- luminarycloud/params/simulation/time/time_marching/time_implicit_.py +3 -4
- luminarycloud/params/simulation/time/time_marching_.py +3 -4
- luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py +3 -4
- luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py +4 -5
- luminarycloud/params/simulation/time/time_step_ramp_.py +3 -4
- luminarycloud/params/simulation/time_.py +4 -5
- luminarycloud/params/simulation/volume_entity_.py +6 -5
- luminarycloud/physics_ai/__init__.py +2 -0
- luminarycloud/physics_ai/architectures.py +42 -8
- luminarycloud/physics_ai/inference.py +0 -2
- luminarycloud/physics_ai/models.py +44 -15
- luminarycloud/project.py +54 -3
- luminarycloud/simulation_template.py +21 -6
- luminarycloud/solution.py +1 -1
- luminarycloud/types/__init__.py +2 -0
- luminarycloud/types/adfloat.py +50 -8
- luminarycloud/types/ids.py +2 -0
- luminarycloud/vis/__init__.py +12 -2
- luminarycloud/vis/data_extraction.py +546 -0
- luminarycloud/vis/display.py +61 -6
- luminarycloud/vis/filters.py +199 -43
- luminarycloud/vis/interactive_scene.py +1 -0
- luminarycloud/vis/primitives.py +38 -0
- luminarycloud/vis/vis_util.py +56 -0
- luminarycloud/vis/visualization.py +224 -70
- {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.5.dist-info}/METADATA +2 -1
- {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.5.dist-info}/RECORD +241 -235
- luminarycloud/_proto/luminarycloud/luminarycloud_api.pb +0 -0
- {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.5.dist-info}/WHEEL +0 -0
|
@@ -5,12 +5,11 @@ from dataclasses import dataclass, field
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
from uuid import uuid4
|
|
7
7
|
|
|
8
|
-
from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
|
|
9
8
|
from google.protobuf.message import Message as _Message
|
|
10
|
-
|
|
11
|
-
from luminarycloud.
|
|
12
|
-
from luminarycloud.types import Vector3
|
|
9
|
+
from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
|
|
10
|
+
from luminarycloud.types import Vector3, LcFloat
|
|
13
11
|
from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
|
|
12
|
+
from luminarycloud._helpers._entity_identifier import _create_entity_identifier
|
|
14
13
|
from luminarycloud._proto.client import simulation_pb2 as clientpb
|
|
15
14
|
from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
16
15
|
from luminarycloud._helpers import CodeRepr
|
|
@@ -5,12 +5,11 @@ from dataclasses import dataclass, field
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
from uuid import uuid4
|
|
7
7
|
|
|
8
|
-
from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
|
|
9
8
|
from google.protobuf.message import Message as _Message
|
|
10
|
-
|
|
11
|
-
from luminarycloud.
|
|
12
|
-
from luminarycloud.types import Vector3
|
|
9
|
+
from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
|
|
10
|
+
from luminarycloud.types import Vector3, LcFloat
|
|
13
11
|
from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
|
|
12
|
+
from luminarycloud._helpers._entity_identifier import _create_entity_identifier
|
|
14
13
|
from luminarycloud._proto.client import simulation_pb2 as clientpb
|
|
15
14
|
from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
16
15
|
from luminarycloud._helpers import CodeRepr
|
|
@@ -48,7 +47,7 @@ class Time(CodeRepr, ParamGroupWrapper[clientpb.Time]):
|
|
|
48
47
|
|
|
49
48
|
time_marching: TimeMarching = field(default_factory=TimeImplicit)
|
|
50
49
|
"Scheme for time-accurate integration. Possible types: ``TimeImplicit``, ``TimeExplicit`` from the ``time_marching`` module."
|
|
51
|
-
time_step:
|
|
50
|
+
time_step: LcFloat = 0.0001
|
|
52
51
|
"The fixed physical time step."
|
|
53
52
|
time_step_ramp: TimeStepRamp = field(default_factory=TimeStepRampOff)
|
|
54
53
|
"Use a larger time step value during the initial transients of a simulation and then ramp linearly towards the target value, to accelerate statistical convergence. Only applicable to transient problems with time implicit integration (dual time stepping). Possible types: ``TimeStepRampOff``, ``TimeStepRampOn`` from the ``time_step_ramp`` module."
|
|
@@ -5,12 +5,11 @@ from dataclasses import dataclass, field
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
from uuid import uuid4
|
|
7
7
|
|
|
8
|
-
from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
|
|
9
8
|
from google.protobuf.message import Message as _Message
|
|
10
|
-
|
|
11
|
-
from luminarycloud.
|
|
12
|
-
from luminarycloud.types import Vector3
|
|
9
|
+
from luminarycloud.tables import RectilinearTable, _param_name_to_table_type
|
|
10
|
+
from luminarycloud.types import Vector3, LcFloat
|
|
13
11
|
from luminarycloud.types.adfloat import _to_ad_proto, _from_ad_proto
|
|
12
|
+
from luminarycloud._helpers._entity_identifier import _create_entity_identifier
|
|
14
13
|
from luminarycloud._proto.client import simulation_pb2 as clientpb
|
|
15
14
|
from luminarycloud._proto.client.entity_pb2 import EntityIdentifier
|
|
16
15
|
from luminarycloud._helpers import CodeRepr
|
|
@@ -23,7 +22,9 @@ from luminarycloud.params.simulation._lib import ParamGroupWrapper, create_uniqu
|
|
|
23
22
|
class VolumeEntity(CodeRepr, ParamGroupWrapper[clientpb.VolumeEntity]):
|
|
24
23
|
"""Volume entity."""
|
|
25
24
|
|
|
26
|
-
volume_identifier: EntityIdentifier
|
|
25
|
+
volume_identifier: EntityIdentifier = field(
|
|
26
|
+
default_factory=_create_entity_identifier, init=True
|
|
27
|
+
)
|
|
27
28
|
"Unique identifier for a volume entity."
|
|
28
29
|
|
|
29
30
|
def _to_proto(self) -> clientpb.VolumeEntity:
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
from .architectures import (
|
|
2
2
|
list_architectures as list_architectures,
|
|
3
3
|
PhysicsAiArchitecture as PhysicsAiArchitecture,
|
|
4
|
+
PhysicsAiArchitectureVersion as PhysicsAiArchitectureVersion,
|
|
4
5
|
)
|
|
5
6
|
from .models import (
|
|
6
7
|
list_pretrained_models as list_pretrained_models,
|
|
7
8
|
PhysicsAiModel as PhysicsAiModel,
|
|
9
|
+
PhysicsAiModelVersion as PhysicsAiModelVersion,
|
|
8
10
|
)
|
|
@@ -1,37 +1,71 @@
|
|
|
1
1
|
# Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
|
|
2
|
-
from
|
|
3
|
-
|
|
4
|
-
from typing import List
|
|
2
|
+
from typing import List, Optional
|
|
5
3
|
|
|
6
4
|
from .._client import get_default_client
|
|
7
5
|
from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
|
|
8
6
|
from .._wrapper import ProtoWrapper, ProtoWrapperBase
|
|
9
7
|
from .._helpers.warnings import experimental
|
|
10
|
-
from ..types.ids import PhysicsAiArchitectureID
|
|
8
|
+
from ..types.ids import PhysicsAiArchitectureID, PhysicsAiArchitectureVersionID
|
|
9
|
+
from ..enum.physics_ai_lifecycle_state import PhysicsAiLifecycleState
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@experimental
|
|
13
|
+
@ProtoWrapper(physaipb.PhysicsAiArchitectureVersion)
|
|
14
|
+
class PhysicsAiArchitectureVersion(ProtoWrapperBase):
|
|
15
|
+
"""
|
|
16
|
+
Represents a specific version of a Physics AI architecture.
|
|
17
|
+
|
|
18
|
+
.. warning:: This feature is experimental and may change or be removed without notice.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
id: PhysicsAiArchitectureVersionID
|
|
22
|
+
name: str
|
|
23
|
+
changelog: str
|
|
24
|
+
lifecycle_state: PhysicsAiLifecycleState
|
|
25
|
+
_proto: physaipb.PhysicsAiArchitectureVersion
|
|
11
26
|
|
|
12
27
|
|
|
13
28
|
@experimental
|
|
14
29
|
@ProtoWrapper(physaipb.PhysicsAiArchitecture)
|
|
15
30
|
class PhysicsAiArchitecture(ProtoWrapperBase):
|
|
16
31
|
"""
|
|
17
|
-
Represents a Physics AI architecture.
|
|
32
|
+
Represents a Physics AI architecture with all its versions.
|
|
18
33
|
|
|
19
|
-
warning:: This feature is experimental and may change or be removed without notice.
|
|
34
|
+
.. warning:: This feature is experimental and may change or be removed without notice.
|
|
20
35
|
"""
|
|
21
36
|
|
|
22
37
|
id: PhysicsAiArchitectureID
|
|
23
38
|
name: str
|
|
24
39
|
description: str
|
|
25
|
-
|
|
40
|
+
versions: List[PhysicsAiArchitectureVersion]
|
|
26
41
|
_proto: physaipb.PhysicsAiArchitecture
|
|
27
42
|
|
|
43
|
+
def get_latest_version(self) -> Optional[PhysicsAiArchitectureVersion]:
|
|
44
|
+
"""
|
|
45
|
+
Get the latest version of this architecture based on name.
|
|
46
|
+
|
|
47
|
+
Returns
|
|
48
|
+
-------
|
|
49
|
+
PhysicsAiArchitectureVersion or None
|
|
50
|
+
The first architecture version, or None if no versions exist.
|
|
51
|
+
Note: Version ordering is now determined by the backend.
|
|
52
|
+
"""
|
|
53
|
+
if not self.versions:
|
|
54
|
+
return None
|
|
55
|
+
return self.versions[0] if self.versions else None
|
|
56
|
+
|
|
28
57
|
|
|
29
58
|
@experimental
|
|
30
59
|
def list_architectures() -> List[PhysicsAiArchitecture]:
|
|
31
60
|
"""
|
|
32
61
|
List available Physics AI architectures for model training.
|
|
33
62
|
|
|
34
|
-
warning:: This feature is experimental and may change or be removed without notice.
|
|
63
|
+
.. warning:: This feature is experimental and may change or be removed without notice.
|
|
64
|
+
|
|
65
|
+
Returns
|
|
66
|
+
-------
|
|
67
|
+
list[PhysicsAiArchitecture]
|
|
68
|
+
A list of all available Physics AI architectures.
|
|
35
69
|
"""
|
|
36
70
|
req = physaipb.ListArchitecturesRequest()
|
|
37
71
|
res = get_default_client().ListArchitectures(req)
|
|
@@ -1,41 +1,70 @@
|
|
|
1
1
|
# Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
|
|
2
|
-
from
|
|
3
|
-
|
|
4
|
-
from datetime import datetime
|
|
5
|
-
from typing import List
|
|
2
|
+
from typing import List, Optional
|
|
6
3
|
|
|
7
4
|
from .._client import get_default_client
|
|
8
|
-
from .._helpers._timestamp_to_datetime import timestamp_to_datetime
|
|
9
5
|
from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
|
|
10
6
|
from .._wrapper import ProtoWrapper, ProtoWrapperBase
|
|
11
7
|
from .._helpers.warnings import experimental
|
|
12
|
-
from ..types.ids import PhysicsAiModelID
|
|
8
|
+
from ..types.ids import PhysicsAiModelID, PhysicsAiModelVersionID
|
|
9
|
+
from ..enum.physics_ai_lifecycle_state import PhysicsAiLifecycleState
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@experimental
|
|
13
|
+
@ProtoWrapper(physaipb.PhysicsAiModelVersion)
|
|
14
|
+
class PhysicsAiModelVersion(ProtoWrapperBase):
|
|
15
|
+
"""
|
|
16
|
+
Represents a specific version of a Physics AI model.
|
|
17
|
+
|
|
18
|
+
.. warning:: This feature is experimental and may change or be removed without notice.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
id: PhysicsAiModelVersionID
|
|
22
|
+
name: str
|
|
23
|
+
lifecycle_state: PhysicsAiLifecycleState
|
|
24
|
+
_proto: physaipb.PhysicsAiModelVersion
|
|
13
25
|
|
|
14
26
|
|
|
15
27
|
@experimental
|
|
16
28
|
@ProtoWrapper(physaipb.PhysicsAiModel)
|
|
17
29
|
class PhysicsAiModel(ProtoWrapperBase):
|
|
18
|
-
"""
|
|
30
|
+
"""
|
|
31
|
+
Represents a Physics AI model with all its versions.
|
|
32
|
+
|
|
33
|
+
.. warning:: This feature is experimental and may change or be removed without notice.
|
|
34
|
+
"""
|
|
19
35
|
|
|
20
36
|
id: PhysicsAiModelID
|
|
21
37
|
name: str
|
|
22
|
-
|
|
23
|
-
|
|
38
|
+
description: str
|
|
39
|
+
versions: List[PhysicsAiModelVersion]
|
|
24
40
|
_proto: physaipb.PhysicsAiModel
|
|
25
41
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
42
|
+
def get_latest_version(self) -> Optional[PhysicsAiModelVersion]:
|
|
43
|
+
"""
|
|
44
|
+
Get the latest version of this model.
|
|
29
45
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
46
|
+
Returns
|
|
47
|
+
-------
|
|
48
|
+
PhysicsAiModelVersion or None
|
|
49
|
+
The first model version, or None if no versions exist.
|
|
50
|
+
Note: Version ordering is now determined by the backend.
|
|
51
|
+
"""
|
|
52
|
+
if not self.versions:
|
|
53
|
+
return None
|
|
54
|
+
return self.versions[0] if self.versions else None
|
|
33
55
|
|
|
34
56
|
|
|
35
57
|
@experimental
|
|
36
58
|
def list_pretrained_models() -> List[PhysicsAiModel]:
|
|
37
59
|
"""
|
|
38
60
|
List available pretrained Physics AI models.
|
|
61
|
+
|
|
62
|
+
.. warning:: This feature is experimental and may change or be removed without notice.
|
|
63
|
+
|
|
64
|
+
Returns
|
|
65
|
+
-------
|
|
66
|
+
list[PhysicsAiModel]
|
|
67
|
+
A list of all available pretrained Physics AI models.
|
|
39
68
|
"""
|
|
40
69
|
req = physaipb.ListPretrainedModelsRequest()
|
|
41
70
|
res = get_default_client().ListPretrainedModels(req)
|
luminarycloud/project.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Copyright 2023-2024 Luminary Cloud, Inc. All Rights Reserved.
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
|
+
import logging
|
|
4
5
|
import re
|
|
5
6
|
import uuid
|
|
6
7
|
from datetime import datetime
|
|
@@ -45,7 +46,8 @@ from .enum import GPUType, MeshType, TableType
|
|
|
45
46
|
from .meshing import MeshAdaptationParams, MeshGenerationParams
|
|
46
47
|
from .simulation_param import SimulationParam
|
|
47
48
|
from .tables import RectilinearTable, create_rectilinear_table
|
|
48
|
-
from .types import MeshID, ProjectID, SimulationTemplateID
|
|
49
|
+
from .types import MeshID, ProjectID, SimulationTemplateID, NamedVariableSetID, Expression, LcFloat
|
|
50
|
+
from .named_variable_set import get_named_variable_set
|
|
49
51
|
|
|
50
52
|
if TYPE_CHECKING:
|
|
51
53
|
from .geometry import Geometry
|
|
@@ -482,6 +484,7 @@ class Project(ProtoWrapperBase):
|
|
|
482
484
|
name: str,
|
|
483
485
|
simulation_template_id: str,
|
|
484
486
|
*,
|
|
487
|
+
_named_variable_set_id: Optional[NamedVariableSetID] = None,
|
|
485
488
|
description: str = "",
|
|
486
489
|
batch_processing: bool = True,
|
|
487
490
|
gpu_type: Optional[GPUType] = None,
|
|
@@ -514,12 +517,19 @@ class Project(ProtoWrapperBase):
|
|
|
514
517
|
Number of GPUs to use for the simulation. Must be specified to a
|
|
515
518
|
positive value if `gpu_type` is specified.
|
|
516
519
|
"""
|
|
520
|
+
|
|
521
|
+
named_variable_set_version_id: Optional[str] = None
|
|
522
|
+
if _named_variable_set_id is not None:
|
|
523
|
+
named_variable_set = get_named_variable_set(_named_variable_set_id)
|
|
524
|
+
named_variable_set_version_id = named_variable_set._version_id
|
|
525
|
+
|
|
517
526
|
_simulation = create_simulation(
|
|
518
527
|
get_default_client(),
|
|
519
528
|
self.id,
|
|
520
529
|
mesh_id,
|
|
521
530
|
name,
|
|
522
531
|
simulation_template_id,
|
|
532
|
+
named_variable_set_version_id=named_variable_set_version_id,
|
|
523
533
|
description=description,
|
|
524
534
|
batch_processing=batch_processing,
|
|
525
535
|
gpu_type=gpu_type,
|
|
@@ -550,7 +560,7 @@ class Project(ProtoWrapperBase):
|
|
|
550
560
|
*,
|
|
551
561
|
parameters: Optional[SimulationParam] = None,
|
|
552
562
|
params_json_path: Optional[PathLike | str] = None,
|
|
553
|
-
copy_from: Optional[
|
|
563
|
+
copy_from: "Optional[SimulationTemplate | SimulationTemplateID | str]" = None,
|
|
554
564
|
) -> "SimulationTemplate":
|
|
555
565
|
"""
|
|
556
566
|
Create a new simulation template object.
|
|
@@ -600,7 +610,7 @@ class Project(ProtoWrapperBase):
|
|
|
600
610
|
|
|
601
611
|
@experimental
|
|
602
612
|
def create_named_variable_set(
|
|
603
|
-
self, name: str, named_variables: dict[str,
|
|
613
|
+
self, name: str, named_variables: dict[str, LcFloat]
|
|
604
614
|
) -> NamedVariableSet:
|
|
605
615
|
"""
|
|
606
616
|
Create a new named variable set.
|
|
@@ -626,6 +636,47 @@ class Project(ProtoWrapperBase):
|
|
|
626
636
|
return [lc.NamedVariableSet(n) for n in res.named_variable_sets]
|
|
627
637
|
|
|
628
638
|
|
|
639
|
+
@experimental
|
|
640
|
+
def add_named_variables_from_csv(project: Project, csv_path: str) -> list[NamedVariableSet]:
|
|
641
|
+
"""
|
|
642
|
+
This function reads named variables from a CSV file and creates corresponding NamedVariableSets in the given project.
|
|
643
|
+
The CSV file should have the following format:
|
|
644
|
+
name, var1, var2, ...
|
|
645
|
+
name1, val1, val2, ...
|
|
646
|
+
name2, val1, val2, ...
|
|
647
|
+
"""
|
|
648
|
+
import csv
|
|
649
|
+
|
|
650
|
+
def is_float(s: str) -> bool:
|
|
651
|
+
try:
|
|
652
|
+
float(s)
|
|
653
|
+
return True
|
|
654
|
+
except ValueError:
|
|
655
|
+
return False
|
|
656
|
+
|
|
657
|
+
named_variable_sets = []
|
|
658
|
+
with open(csv_path) as csvfile:
|
|
659
|
+
reader = csv.reader(csvfile)
|
|
660
|
+
header = next(reader)
|
|
661
|
+
keys = [k.strip() for k in header[1:]]
|
|
662
|
+
for row in reader:
|
|
663
|
+
if len(row) != len(keys) + 1:
|
|
664
|
+
logging.warning(
|
|
665
|
+
f"Skipping row {row} because it has the wrong number of columns ({len(row)} instead of {len(keys) + 1})"
|
|
666
|
+
)
|
|
667
|
+
continue
|
|
668
|
+
name = row[0]
|
|
669
|
+
named_variables: dict[str, LcFloat] = {
|
|
670
|
+
k: float(v.strip()) if is_float(v.strip()) else Expression(v.strip())
|
|
671
|
+
for k, v in zip(keys, row[1:])
|
|
672
|
+
}
|
|
673
|
+
named_variable_sets.append(
|
|
674
|
+
project.create_named_variable_set(name=name, named_variables=named_variables)
|
|
675
|
+
)
|
|
676
|
+
logging.info(f"Created named variable set {name} with {len(named_variables)} variables")
|
|
677
|
+
return named_variable_sets
|
|
678
|
+
|
|
679
|
+
|
|
629
680
|
def create_project(
|
|
630
681
|
name: str,
|
|
631
682
|
description: str = "",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
from datetime import datetime
|
|
3
3
|
from os import PathLike
|
|
4
4
|
from copy import deepcopy
|
|
5
|
-
from typing import Optional,
|
|
5
|
+
from typing import Optional, overload
|
|
6
6
|
from difflib import Differ
|
|
7
7
|
|
|
8
8
|
from .enum import (
|
|
@@ -76,6 +76,7 @@ class SimulationTemplate(ProtoWrapperBase):
|
|
|
76
76
|
*,
|
|
77
77
|
name: Optional[str] = None,
|
|
78
78
|
parameters: Optional[SimulationParam | PathLike] = None,
|
|
79
|
+
copy_from: "Optional[SimulationTemplate | SimulationTemplateID | str]" = None,
|
|
79
80
|
) -> None:
|
|
80
81
|
"""
|
|
81
82
|
Update simulation template.
|
|
@@ -84,19 +85,23 @@ class SimulationTemplate(ProtoWrapperBase):
|
|
|
84
85
|
----------
|
|
85
86
|
name : str, optional
|
|
86
87
|
New project name.
|
|
87
|
-
parameters : SimulationParam or PathLike
|
|
88
|
+
parameters : SimulationParam or PathLike, optional
|
|
88
89
|
New complete simulation parameters object or path to local JSON file containing
|
|
89
90
|
simulation parameters. In the former case, the input argument is modified to reflect
|
|
90
91
|
changes applied by the backend (server), for example due to presets. Any differences
|
|
91
92
|
between input and result are printed on screen.
|
|
93
|
+
copy_from : SimulationTemplate or SimulationTemplateID or str, optional
|
|
94
|
+
Simulation template to copy. If provided, it will be deep-copied into this simulation
|
|
95
|
+
template. Can pass a SimulationTemplate object or an ID of the template to copy.
|
|
92
96
|
"""
|
|
93
|
-
return self._update(name=name, parameters=parameters)
|
|
97
|
+
return self._update(name=name, parameters=parameters, copy_from=copy_from)
|
|
94
98
|
|
|
95
99
|
def _update(
|
|
96
100
|
self,
|
|
97
101
|
*,
|
|
98
102
|
name: Optional[str] = None,
|
|
99
103
|
parameters: Optional[SimulationParam | clientpb.SimulationParam | PathLike] = None,
|
|
104
|
+
copy_from: "Optional[SimulationTemplate | SimulationTemplateID | str]" = None,
|
|
100
105
|
) -> None:
|
|
101
106
|
"""
|
|
102
107
|
Update simulation template. See `update()` for more details.
|
|
@@ -124,21 +129,31 @@ class SimulationTemplate(ProtoWrapperBase):
|
|
|
124
129
|
|
|
125
130
|
req.parameters.CopyFrom(param_proto)
|
|
126
131
|
|
|
132
|
+
if copy_from is not None:
|
|
133
|
+
if isinstance(copy_from, SimulationTemplate):
|
|
134
|
+
req.copy_from = copy_from.id
|
|
135
|
+
elif isinstance(copy_from, str):
|
|
136
|
+
req.copy_from = copy_from
|
|
137
|
+
else:
|
|
138
|
+
raise ValueError(f"Invalid copy_from argument: {copy_from}")
|
|
139
|
+
|
|
127
140
|
res: simtemplatepb.UpdateSimulationTemplateResponse = (
|
|
128
141
|
get_default_client().UpdateSimulationTemplate(req)
|
|
129
142
|
)
|
|
130
143
|
self._proto = res.simulation_template
|
|
131
144
|
|
|
132
145
|
def print_diff(
|
|
133
|
-
old:
|
|
134
|
-
new:
|
|
146
|
+
old: clientpb.SimulationParam | SimulationParam,
|
|
147
|
+
new: clientpb.SimulationParam | SimulationParam,
|
|
135
148
|
) -> None:
|
|
136
149
|
diffs = list(Differ().compare(str(old).split("\n"), str(new).split("\n")))
|
|
137
150
|
has_diffs = False
|
|
138
151
|
for diff in diffs:
|
|
139
152
|
if diff.startswith("-") or diff.startswith("+"):
|
|
140
153
|
if not has_diffs:
|
|
141
|
-
print(
|
|
154
|
+
print(
|
|
155
|
+
"The given parameters have been modified, both in memory and server-side, due to presets. The modifications:\n"
|
|
156
|
+
)
|
|
142
157
|
has_diffs = True
|
|
143
158
|
print(diff)
|
|
144
159
|
|
luminarycloud/solution.py
CHANGED
|
@@ -38,7 +38,7 @@ class Solution(ProtoWrapperBase):
|
|
|
38
38
|
"Solution ID."
|
|
39
39
|
simulation_id: SimulationID
|
|
40
40
|
"Simulation ID of parent"
|
|
41
|
-
iteration:
|
|
41
|
+
iteration: int
|
|
42
42
|
"Iteration index of the solution."
|
|
43
43
|
physical_time: float
|
|
44
44
|
"The physical time, in seconds, of the solution iteration (for transient simulations)."
|
luminarycloud/types/__init__.py
CHANGED
luminarycloud/types/adfloat.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
from abc import ABCMeta
|
|
2
|
-
from typing import Any
|
|
3
|
-
from .._proto.base.base_pb2 import AdFloatType, FirstOrderAdType, SecondOrderAdType
|
|
2
|
+
from typing import Any, Union
|
|
3
|
+
from .._proto.base.base_pb2 import AdFloatType, ExpressionType, FirstOrderAdType, SecondOrderAdType
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class AdFloat(float, metaclass=ABCMeta):
|
|
7
|
-
"""An immutable float with adjoints/tangents"""
|
|
7
|
+
"""An immutable float with adjoints/tangents or an expression"""
|
|
8
8
|
|
|
9
9
|
pass
|
|
10
10
|
|
|
@@ -110,8 +110,47 @@ class SecondOrderAdFloat(AdFloat):
|
|
|
110
110
|
)
|
|
111
111
|
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
"""
|
|
113
|
+
class Expression:
|
|
114
|
+
"""An expression or value that can be evaluated or used in evaluations."""
|
|
115
|
+
|
|
116
|
+
_value: float
|
|
117
|
+
_expression: str
|
|
118
|
+
|
|
119
|
+
def __init__(self, expression: str):
|
|
120
|
+
if not expression:
|
|
121
|
+
raise ValueError("Expression cannot be empty")
|
|
122
|
+
self._value = 0.0
|
|
123
|
+
self._expression = expression
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def expression(self) -> str:
|
|
127
|
+
return self._expression
|
|
128
|
+
|
|
129
|
+
@property
|
|
130
|
+
def value(self) -> float:
|
|
131
|
+
return self._value
|
|
132
|
+
|
|
133
|
+
def _to_proto(self) -> AdFloatType:
|
|
134
|
+
return AdFloatType(variable=ExpressionType(value=self.value, expression=self.expression))
|
|
135
|
+
|
|
136
|
+
@staticmethod
|
|
137
|
+
def _from_proto(proto: AdFloatType) -> "Expression":
|
|
138
|
+
expr = object.__new__(Expression) # Create a new instance without calling __init__
|
|
139
|
+
expr._value = proto.variable.value
|
|
140
|
+
expr._expression = proto.variable.expression
|
|
141
|
+
return expr
|
|
142
|
+
|
|
143
|
+
def __eq__(self, other: Any) -> bool:
|
|
144
|
+
if not isinstance(other, Expression):
|
|
145
|
+
return False
|
|
146
|
+
return self._value == other._value and self._expression == other._expression
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
LcFloat = Union[float, FirstOrderAdFloat, SecondOrderAdFloat, Expression]
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def _to_ad_proto(value: LcFloat) -> AdFloatType:
|
|
153
|
+
"""Convert an LcFloat to an AdFloatType proto."""
|
|
115
154
|
if isinstance(value, FirstOrderAdFloat):
|
|
116
155
|
return AdFloatType(
|
|
117
156
|
first_order=FirstOrderAdType(
|
|
@@ -128,18 +167,21 @@ def _to_ad_proto(value: float) -> AdFloatType:
|
|
|
128
167
|
adjoint=[_to_ad_proto(a).first_order for a in value.adjoint],
|
|
129
168
|
)
|
|
130
169
|
)
|
|
170
|
+
elif isinstance(value, Expression):
|
|
171
|
+
return value._to_proto()
|
|
131
172
|
return AdFloatType(value=float(value))
|
|
132
173
|
|
|
133
174
|
|
|
134
|
-
def _from_ad_proto(proto: AdFloatType) ->
|
|
135
|
-
"""Convert an AdFloatType proto to
|
|
175
|
+
def _from_ad_proto(proto: AdFloatType) -> LcFloat:
|
|
176
|
+
"""Convert an AdFloatType proto to an LcFloat."""
|
|
136
177
|
if proto.HasField("first_order"):
|
|
137
178
|
return FirstOrderAdFloat._from_proto(proto.first_order)
|
|
138
179
|
elif proto.HasField("second_order"):
|
|
139
180
|
return SecondOrderAdFloat._from_proto(proto.second_order)
|
|
140
181
|
elif proto.HasField("value"):
|
|
141
182
|
return float(proto.value)
|
|
142
|
-
|
|
183
|
+
elif proto.HasField("variable"):
|
|
184
|
+
return Expression._from_proto(proto)
|
|
143
185
|
# An empty proto evaluates to 0.0
|
|
144
186
|
if not proto.ListFields():
|
|
145
187
|
return 0.0
|
luminarycloud/types/ids.py
CHANGED
|
@@ -10,4 +10,6 @@ SimulationTemplateID = NewType("SimulationTemplateID", str)
|
|
|
10
10
|
GeometryFeatureID = NewType("GeometryFeatureID", str)
|
|
11
11
|
NamedVariableSetID = NewType("NamedVariableSetID", str)
|
|
12
12
|
PhysicsAiArchitectureID = NewType("PhysicsAiArchitectureID", str)
|
|
13
|
+
PhysicsAiArchitectureVersionID = NewType("PhysicsAiArchitectureVersionID", str)
|
|
13
14
|
PhysicsAiModelID = NewType("PhysicsAiModelID", str)
|
|
15
|
+
PhysicsAiModelVersionID = NewType("PhysicsAiModelVersionID", str)
|
luminarycloud/vis/__init__.py
CHANGED
|
@@ -8,12 +8,15 @@ from .visualization import (
|
|
|
8
8
|
LookAtCamera as LookAtCamera,
|
|
9
9
|
)
|
|
10
10
|
|
|
11
|
+
from .primitives import (
|
|
12
|
+
Plane as Plane,
|
|
13
|
+
Box as Box,
|
|
14
|
+
)
|
|
15
|
+
|
|
11
16
|
from .filters import (
|
|
12
17
|
Slice as Slice,
|
|
13
18
|
PlaneClip as PlaneClip,
|
|
14
19
|
BoxClip as BoxClip,
|
|
15
|
-
Plane as Plane,
|
|
16
|
-
Box as Box,
|
|
17
20
|
FixedSizeVectorGlyphs as FixedSizeVectorGlyphs,
|
|
18
21
|
ScaledVectorGlyphs as ScaledVectorGlyphs,
|
|
19
22
|
RakeStreamlines as RakeStreamlines,
|
|
@@ -23,6 +26,13 @@ from .filters import (
|
|
|
23
26
|
Isosurface as Isosurface,
|
|
24
27
|
)
|
|
25
28
|
|
|
29
|
+
from .data_extraction import (
|
|
30
|
+
IntersectionCurve as IntersectionCurve,
|
|
31
|
+
DataExtractor as DataExtractor,
|
|
32
|
+
ExtractOutput as ExtractOutput,
|
|
33
|
+
list_data_extracts as list_data_extracts,
|
|
34
|
+
)
|
|
35
|
+
|
|
26
36
|
from .display import (
|
|
27
37
|
Field as Field,
|
|
28
38
|
DataRange as DataRange,
|