luminarycloud 0.15.3__py3-none-any.whl → 0.15.4__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_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 +33 -0
- 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/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 +82 -61
- luminarycloud/_proto/assistant/assistant_pb2.pyi +37 -0
- luminarycloud/_proto/assistant/assistant_pb2_grpc.py +34 -0
- luminarycloud/_proto/assistant/assistant_pb2_grpc.pyi +12 -0
- 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 +64 -64
- luminarycloud/_proto/namedvariableset/namedvariableset_pb2.py +49 -0
- luminarycloud/_proto/namedvariableset/namedvariableset_pb2.pyi +53 -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 +8 -9
- 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 +5 -6
- luminarycloud/params/simulation/physics/fluid_.py +7 -6
- 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 +3 -4
- luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +3 -4
- luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +3 -4
- 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 +183 -42
- 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.4.dist-info}/METADATA +2 -1
- {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.4.dist-info}/RECORD +234 -228
- luminarycloud/_proto/luminarycloud/luminarycloud_api.pb +0 -0
- {luminarycloud-0.15.3.dist-info → luminarycloud-0.15.4.dist-info}/WHEEL +0 -0
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,
|