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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# Copyright 2023-2024 Luminary Cloud, Inc. All Rights Reserved.
|
|
1
2
|
import dataclasses as dc
|
|
2
3
|
import io
|
|
3
4
|
import json
|
|
@@ -7,7 +8,6 @@ from time import sleep, time
|
|
|
7
8
|
from typing import Dict, List, Tuple, cast
|
|
8
9
|
|
|
9
10
|
import luminarycloud._proto.api.v0.luminarycloud.common.common_pb2 as common_pb2
|
|
10
|
-
import requests
|
|
11
11
|
from luminarycloud.params.simulation.physics.fluid.boundary_conditions import Farfield
|
|
12
12
|
from luminarycloud.types import Vector3, Vector3Like
|
|
13
13
|
|
|
@@ -15,6 +15,7 @@ from .._client import get_default_client
|
|
|
15
15
|
from .._helpers._get_project_id import _get_project_id
|
|
16
16
|
from .._proto.quantity import quantity_pb2 as quantitypb
|
|
17
17
|
from .._proto.api.v0.luminarycloud.vis import vis_pb2
|
|
18
|
+
from ..types import SimulationID, MeshID
|
|
18
19
|
from luminarycloud.enum import (
|
|
19
20
|
CameraDirection,
|
|
20
21
|
CameraProjection,
|
|
@@ -22,6 +23,9 @@ from luminarycloud.enum import (
|
|
|
22
23
|
EntityType,
|
|
23
24
|
SceneMode,
|
|
24
25
|
VisQuantity,
|
|
26
|
+
FieldComponent,
|
|
27
|
+
Representation,
|
|
28
|
+
ColorMapPreset,
|
|
25
29
|
)
|
|
26
30
|
from ..exceptions import NotFoundError
|
|
27
31
|
from ..geometry import Geometry, get_geometry
|
|
@@ -29,9 +33,22 @@ from ..mesh import Mesh, get_mesh, get_mesh_metadata
|
|
|
29
33
|
from ..simulation import get_simulation
|
|
30
34
|
from ..solution import Solution
|
|
31
35
|
from ..types.vector3 import _to_vector3
|
|
32
|
-
from .display import ColorMap, ColorMapAppearance, DisplayAttributes, Field
|
|
33
|
-
from .filters import
|
|
36
|
+
from .display import ColorMap, ColorMapAppearance, DisplayAttributes, Field, DataRange
|
|
37
|
+
from .filters import (
|
|
38
|
+
BoxClip,
|
|
39
|
+
Filter,
|
|
40
|
+
PlaneClip,
|
|
41
|
+
Slice,
|
|
42
|
+
SurfaceStreamlines,
|
|
43
|
+
SurfaceLIC,
|
|
44
|
+
Threshold,
|
|
45
|
+
RakeStreamlines,
|
|
46
|
+
ScaledVectorGlyphs,
|
|
47
|
+
FixedSizeVectorGlyphs,
|
|
48
|
+
Isosurface,
|
|
49
|
+
)
|
|
34
50
|
from .interactive_scene import InteractiveScene
|
|
51
|
+
from .vis_util import _InternalToken, _download_file, _get_status
|
|
35
52
|
|
|
36
53
|
logger = logging.getLogger(__name__)
|
|
37
54
|
|
|
@@ -71,6 +88,18 @@ class DirectionalCamera:
|
|
|
71
88
|
1.0
|
|
72
89
|
"""
|
|
73
90
|
|
|
91
|
+
def _from_proto(self, static_ani: vis_pb2.AnimationSettingsStatic) -> None:
|
|
92
|
+
"""Populate this DirectionalCamera from a proto static animation property."""
|
|
93
|
+
c_typ = static_ani.camera.WhichOneof("specification")
|
|
94
|
+
if c_typ != "direction":
|
|
95
|
+
raise TypeError(f"Expected 'direction' camera type, got {c_typ}. ")
|
|
96
|
+
self.label = static_ani.label if static_ani.label else ""
|
|
97
|
+
self.direction = CameraDirection(static_ani.camera.direction)
|
|
98
|
+
self.zoom_in = static_ani.camera.zoom
|
|
99
|
+
self.width = static_ani.resolution.width
|
|
100
|
+
self.height = static_ani.resolution.height
|
|
101
|
+
self.projection = CameraProjection(static_ani.camera.projection)
|
|
102
|
+
|
|
74
103
|
|
|
75
104
|
@dc.dataclass
|
|
76
105
|
class LookAtCamera:
|
|
@@ -112,11 +141,23 @@ class LookAtCamera:
|
|
|
112
141
|
scene where pan is used (i.e., control + middle mouse).
|
|
113
142
|
"""
|
|
114
143
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
144
|
+
def _from_proto(self, static_ani: vis_pb2.AnimationSettingsStatic) -> None:
|
|
145
|
+
"""Populate this LookAtCamera from a proto static animation property."""
|
|
146
|
+
c_typ = static_ani.camera.WhichOneof("specification")
|
|
147
|
+
if c_typ != "look_at":
|
|
148
|
+
raise TypeError(f"Expected 'look_at' camera type, got {c_typ}. ")
|
|
149
|
+
self.label = static_ani.label if static_ani.label else ""
|
|
150
|
+
self.position = Vector3()
|
|
151
|
+
self.position._from_proto(static_ani.camera.look_at.position)
|
|
152
|
+
self.up = Vector3()
|
|
153
|
+
self.up._from_proto(static_ani.camera.look_at.up)
|
|
154
|
+
self.look_at = Vector3()
|
|
155
|
+
self.look_at._from_proto(static_ani.camera.look_at.look_at)
|
|
156
|
+
self.pan_x = static_ani.camera.look_at.pan.x
|
|
157
|
+
self.pan_y = static_ani.camera.look_at.pan.y
|
|
158
|
+
self.width = static_ani.resolution.width
|
|
159
|
+
self.height = static_ani.resolution.height
|
|
160
|
+
self.projection = CameraProjection(static_ani.camera.projection)
|
|
120
161
|
|
|
121
162
|
|
|
122
163
|
class RenderOutput:
|
|
@@ -180,8 +221,7 @@ class RenderOutput:
|
|
|
180
221
|
self
|
|
181
222
|
"""
|
|
182
223
|
self._fail_if_deleted()
|
|
183
|
-
|
|
184
|
-
self.status = render.status
|
|
224
|
+
self.status = _get_status(self._project_id, self._extract_id)
|
|
185
225
|
return self
|
|
186
226
|
|
|
187
227
|
def wait(
|
|
@@ -239,23 +279,12 @@ class RenderOutput:
|
|
|
239
279
|
req.project_id = self._project_id
|
|
240
280
|
res: vis_pb2.DownloadExtractResponse = get_default_client().DownloadExtract(req)
|
|
241
281
|
|
|
242
|
-
|
|
243
|
-
assert len(res.files) == len(res.labels)
|
|
244
|
-
for output, label in zip(res.files, res.labels):
|
|
245
|
-
buffer =
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
response.raise_for_status()
|
|
249
|
-
for chunk in response.iter_content(chunk_size=8192):
|
|
250
|
-
buffer.write(chunk)
|
|
251
|
-
elif output.full_contents:
|
|
252
|
-
buffer.write(output.full_contents)
|
|
253
|
-
else:
|
|
254
|
-
raise Exception("download_image respose contains no data.")
|
|
255
|
-
# Reset buffer position to the beginning for reading
|
|
256
|
-
buffer.seek(0)
|
|
257
|
-
buffers.append((buffer, label))
|
|
258
|
-
return buffers
|
|
282
|
+
image_buffers: List[Tuple["io.BytesIO", str]] = []
|
|
283
|
+
assert len(res.images.files) == len(res.images.labels)
|
|
284
|
+
for output, label in zip(res.images.files, res.images.labels):
|
|
285
|
+
buffer = _download_file(output)
|
|
286
|
+
image_buffers.append((buffer, label))
|
|
287
|
+
return image_buffers
|
|
259
288
|
|
|
260
289
|
def save_images(self, file_prefix: str, write_labels: bool = False) -> None:
|
|
261
290
|
"""
|
|
@@ -445,12 +474,26 @@ class Scene:
|
|
|
445
474
|
|
|
446
475
|
def hide_far_field(self) -> None:
|
|
447
476
|
"""
|
|
448
|
-
Hide all far fields surfaces based on simulation parameters. Will work
|
|
449
|
-
if the entity is a simulation.
|
|
477
|
+
Hide all far fields surfaces based on simulation parameters. Will only work
|
|
478
|
+
if the entity is a simulation, otherwise it will raise an error.
|
|
450
479
|
"""
|
|
451
480
|
|
|
481
|
+
if self._entity_type != EntityType.SIMULATION:
|
|
482
|
+
raise ValueError(
|
|
483
|
+
"hide_far_field: This method only works with solutions, not meshes or geometries."
|
|
484
|
+
)
|
|
485
|
+
|
|
452
486
|
for boundary_id in self._far_field_boundary_ids:
|
|
453
|
-
self.
|
|
487
|
+
if boundary_id in self._surface_ids:
|
|
488
|
+
self.surface_visibility(boundary_id, False)
|
|
489
|
+
elif boundary_id in self._tag_ids:
|
|
490
|
+
self.tag_visibility(boundary_id, False)
|
|
491
|
+
else:
|
|
492
|
+
# This should not happen, but if it does, we raise an error.
|
|
493
|
+
raise ValueError(
|
|
494
|
+
f"Internal Error: Boundary id {boundary_id} not found in surface ids {self._surface_ids} "
|
|
495
|
+
f"or tag ids {self._tag_ids}"
|
|
496
|
+
)
|
|
454
497
|
|
|
455
498
|
def surface_ids(self) -> List[str]:
|
|
456
499
|
"""Get a list of all the surface ids associated with the mesh."""
|
|
@@ -484,6 +527,7 @@ class Scene:
|
|
|
484
527
|
if not tag_id in self._tag_ids:
|
|
485
528
|
raise ValueError(f"Id {tag_id} not a known tag id {self._tag_ids}")
|
|
486
529
|
self._surface_visibilities[tag_id] = visible
|
|
530
|
+
# TODO(matt): unroll the tags for the interactive scene.
|
|
487
531
|
|
|
488
532
|
def add_filter(self, filter: Filter) -> None:
|
|
489
533
|
"""
|
|
@@ -588,16 +632,7 @@ class Scene:
|
|
|
588
632
|
static.resolution.height = camera.height
|
|
589
633
|
req.spec.animation_properties.statics.items.append(static)
|
|
590
634
|
|
|
591
|
-
req.spec.global_display_attributes.
|
|
592
|
-
req.spec.global_display_attributes.representation = (
|
|
593
|
-
self.global_display_attrs.representation.value
|
|
594
|
-
)
|
|
595
|
-
req.spec.global_display_attributes.field.component = (
|
|
596
|
-
self.global_display_attrs.field.component.value
|
|
597
|
-
)
|
|
598
|
-
req.spec.global_display_attributes.field.quantity_typ = (
|
|
599
|
-
self.global_display_attrs.field.quantity.value
|
|
600
|
-
)
|
|
635
|
+
req.spec.global_display_attributes.CopyFrom(self.global_display_attrs._to_proto())
|
|
601
636
|
|
|
602
637
|
for id, visible in self._surface_visibilities.items():
|
|
603
638
|
attrs = vis_pb2.DisplayAttributes()
|
|
@@ -654,7 +689,7 @@ class Scene:
|
|
|
654
689
|
|
|
655
690
|
# Add the automated color maps if enabled. If we don't specify them
|
|
656
691
|
# in the proto, the annotations will not appear in the image.
|
|
657
|
-
if self.auto_color_map_annotations:
|
|
692
|
+
if self.auto_color_map_annotations and self._entity_type == EntityType.SIMULATION:
|
|
658
693
|
auto_cmaps: List[ColorMap] = []
|
|
659
694
|
for field in cmap_fields:
|
|
660
695
|
found = False
|
|
@@ -824,35 +859,6 @@ class Scene:
|
|
|
824
859
|
return cloned
|
|
825
860
|
|
|
826
861
|
|
|
827
|
-
def get_render(project_id: str, extract_id: str) -> RenderOutput:
|
|
828
|
-
"""
|
|
829
|
-
Get a previously created set of render outputs by project and extract id.
|
|
830
|
-
|
|
831
|
-
.. warning:: This feature is experimental and may change or be removed in the future.
|
|
832
|
-
|
|
833
|
-
Parameters
|
|
834
|
-
----------
|
|
835
|
-
project_id : str
|
|
836
|
-
The project id to of the extract.
|
|
837
|
-
extract_id: str
|
|
838
|
-
The id to of the extract.
|
|
839
|
-
|
|
840
|
-
"""
|
|
841
|
-
req = vis_pb2.GetExtractRequest()
|
|
842
|
-
req.extract_id = extract_id
|
|
843
|
-
req.project_id = project_id
|
|
844
|
-
res: vis_pb2.GetExtractResponse = get_default_client().GetExtract(req)
|
|
845
|
-
render_output = RenderOutput(_InternalToken())
|
|
846
|
-
render_output._set_data(
|
|
847
|
-
extract_id=extract_id,
|
|
848
|
-
project_id=project_id,
|
|
849
|
-
name=res.extract.name,
|
|
850
|
-
desciption=res.extract.description,
|
|
851
|
-
status=RenderStatusType(res.extract.status),
|
|
852
|
-
)
|
|
853
|
-
return render_output
|
|
854
|
-
|
|
855
|
-
|
|
856
862
|
def list_quantities(solution: Solution) -> List[VisQuantity]:
|
|
857
863
|
"""
|
|
858
864
|
List the quantity types, including derived quantities, that are available in
|
|
@@ -927,6 +933,8 @@ def list_renders(entity: Geometry | Mesh | Solution) -> List[RenderOutput]:
|
|
|
927
933
|
else:
|
|
928
934
|
raise ValueError(f"Unknown entity type: '{entity_type}' ")
|
|
929
935
|
|
|
936
|
+
# We are requesting images not data
|
|
937
|
+
req.data_only = False
|
|
930
938
|
res: vis_pb2.ListExtractsResponse = get_default_client().ListExtracts(req)
|
|
931
939
|
|
|
932
940
|
results: List[RenderOutput] = []
|
|
@@ -944,3 +952,149 @@ def list_renders(entity: Geometry | Mesh | Solution) -> List[RenderOutput]:
|
|
|
944
952
|
results.append(result)
|
|
945
953
|
|
|
946
954
|
return results
|
|
955
|
+
|
|
956
|
+
|
|
957
|
+
def _reconstruct(extract_id: str, project_id: str) -> Scene:
|
|
958
|
+
"""
|
|
959
|
+
This function reconstructs a scene from an extract id and project id. The
|
|
960
|
+
resulting scene should produce an identical image to the one that was
|
|
961
|
+
originally rendered. The main use case for this function is to support code
|
|
962
|
+
generation. Note: the scene will render the same image, but the might not
|
|
963
|
+
contain the exact same settings. For example, we auto-generate color maps
|
|
964
|
+
for all fields used in the global and filter display attributes by default.
|
|
965
|
+
When we get the extract back, we don't know if it was auto-generated or not.
|
|
966
|
+
Thus, the resulting color maps will be much more verbose than the original.
|
|
967
|
+
"""
|
|
968
|
+
req = vis_pb2.GetExtractRequest()
|
|
969
|
+
req.extract_id = extract_id
|
|
970
|
+
req.project_id = project_id
|
|
971
|
+
res: vis_pb2.GetExtractSpecResponse = get_default_client().GetExtractSpec(req)
|
|
972
|
+
if res.spec.data_only:
|
|
973
|
+
raise ValueError("Error: cannot reconstruct a scene from a data only extract")
|
|
974
|
+
|
|
975
|
+
entity = res.spec.entity_type.WhichOneof("entity")
|
|
976
|
+
if entity == "geometry":
|
|
977
|
+
geom = get_geometry(res.spec.entity_type.geometry.id)
|
|
978
|
+
scene = Scene(geom)
|
|
979
|
+
elif entity == "mesh":
|
|
980
|
+
mesh_id = MeshID(res.spec.entity_type.mesh.id)
|
|
981
|
+
mesh = get_mesh(mesh_id)
|
|
982
|
+
scene = Scene(mesh)
|
|
983
|
+
elif entity == "simulation":
|
|
984
|
+
sim_id = SimulationID(res.spec.entity_type.simulation.id)
|
|
985
|
+
sim = get_simulation(sim_id)
|
|
986
|
+
sols = sim.list_solutions()
|
|
987
|
+
found = False
|
|
988
|
+
for sol in sols:
|
|
989
|
+
if sol.id == res.spec.entity_type.simulation.solution_id:
|
|
990
|
+
scene = Scene(sol)
|
|
991
|
+
found = True
|
|
992
|
+
break
|
|
993
|
+
if not found:
|
|
994
|
+
raise ValueError(f"Error: could not find the solution")
|
|
995
|
+
else:
|
|
996
|
+
raise ValueError(f"Error: could not resolve entity type")
|
|
997
|
+
|
|
998
|
+
try:
|
|
999
|
+
_ = scene # check to see if this is bound
|
|
1000
|
+
except NameError:
|
|
1001
|
+
raise ValueError(f"Error: could not create scene from entity")
|
|
1002
|
+
|
|
1003
|
+
# keep track of filter ids so we connect them later and keep track of
|
|
1004
|
+
# surface and tag visibilties.
|
|
1005
|
+
filter_ids: List[str] = []
|
|
1006
|
+
for filter in res.spec.filters:
|
|
1007
|
+
filter_ids.append(filter.id)
|
|
1008
|
+
typ = filter.WhichOneof("value")
|
|
1009
|
+
pfilter: Filter | None = None
|
|
1010
|
+
if typ == "clip":
|
|
1011
|
+
c_typ = filter.clip.WhichOneof("clip_function")
|
|
1012
|
+
if c_typ == "box":
|
|
1013
|
+
pfilter = BoxClip("")
|
|
1014
|
+
else:
|
|
1015
|
+
pfilter = PlaneClip("")
|
|
1016
|
+
elif typ == "slice":
|
|
1017
|
+
pfilter = Slice("")
|
|
1018
|
+
elif typ == "streamlines":
|
|
1019
|
+
s_typ = filter.streamlines.WhichOneof("seed_type")
|
|
1020
|
+
if s_typ == "surface":
|
|
1021
|
+
pfilter = SurfaceStreamlines("")
|
|
1022
|
+
elif s_typ == "rake":
|
|
1023
|
+
pfilter = RakeStreamlines("")
|
|
1024
|
+
else:
|
|
1025
|
+
raise ValueError(f"Error: unsupported streamlines seed type {s_typ}")
|
|
1026
|
+
elif typ == "glyph":
|
|
1027
|
+
g_typ = filter.glyph.WhichOneof("glyph_size")
|
|
1028
|
+
if g_typ == "fixed_size_glyphs":
|
|
1029
|
+
pfilter = FixedSizeVectorGlyphs("")
|
|
1030
|
+
else:
|
|
1031
|
+
pfilter = ScaledVectorGlyphs("")
|
|
1032
|
+
elif typ == "surface_lic":
|
|
1033
|
+
pfilter = SurfaceLIC("")
|
|
1034
|
+
elif typ == "threshold":
|
|
1035
|
+
pfilter = Threshold("")
|
|
1036
|
+
elif typ == "contour":
|
|
1037
|
+
pfilter = Isosurface("")
|
|
1038
|
+
else:
|
|
1039
|
+
raise ValueError(f"Error: unknown filter type {typ}")
|
|
1040
|
+
|
|
1041
|
+
assert pfilter is not None, "Internal error: filter type not set"
|
|
1042
|
+
pfilter._from_proto(filter)
|
|
1043
|
+
# Set the display attributes
|
|
1044
|
+
pattrs = DisplayAttributes()
|
|
1045
|
+
attrs = res.spec.display_attributes[pfilter.id]
|
|
1046
|
+
assert attrs is not None, "Internal error: display attributes not set"
|
|
1047
|
+
pfilter.display_attrs._from_proto(attrs)
|
|
1048
|
+
scene.add_filter(pfilter)
|
|
1049
|
+
|
|
1050
|
+
# Connect filters to their parents.
|
|
1051
|
+
for parent_id, children in res.spec.filter_connections.items():
|
|
1052
|
+
parent_filter = next((f for f in scene._filters if f.id == parent_id), None)
|
|
1053
|
+
if parent_filter is not None:
|
|
1054
|
+
for child_id in children.children_id:
|
|
1055
|
+
child_filter = next((f for f in scene._filters if f.id == child_id), None)
|
|
1056
|
+
if child_filter is not None:
|
|
1057
|
+
child_filter.set_parent(parent_filter)
|
|
1058
|
+
else:
|
|
1059
|
+
raise ValueError(
|
|
1060
|
+
f"Error: child filter {child_id} not found in the scene filters"
|
|
1061
|
+
)
|
|
1062
|
+
else:
|
|
1063
|
+
raise ValueError(f"Error: parent filter {parent_id} not found in the scene filters")
|
|
1064
|
+
|
|
1065
|
+
# scene attributes
|
|
1066
|
+
scene.supersampling = res.spec.supersampling_ratio
|
|
1067
|
+
scene.triad_visible = res.spec.triad_properties.visible
|
|
1068
|
+
scene.axes_grid_visible = res.spec.axes_grid_properties.visible
|
|
1069
|
+
scene.background_color = Vector3(
|
|
1070
|
+
x=res.spec.background_properties.color.r,
|
|
1071
|
+
y=res.spec.background_properties.color.g,
|
|
1072
|
+
z=res.spec.background_properties.color.b,
|
|
1073
|
+
)
|
|
1074
|
+
scene.global_display_attrs._from_proto(res.spec.global_display_attributes)
|
|
1075
|
+
|
|
1076
|
+
for id, attrs in res.spec.display_attributes.items():
|
|
1077
|
+
if id in filter_ids:
|
|
1078
|
+
continue # Skip filters, we already processed them.
|
|
1079
|
+
if id in scene._surface_ids or id in scene._tag_ids:
|
|
1080
|
+
# We only use visible or not for surfaces. The rest of the
|
|
1081
|
+
# attributes are set in the global display attributes.
|
|
1082
|
+
scene._surface_visibilities[id] = attrs.visible
|
|
1083
|
+
|
|
1084
|
+
for static_ani in res.spec.animation_properties.statics.items:
|
|
1085
|
+
cam_typ = static_ani.camera.WhichOneof("specification")
|
|
1086
|
+
if cam_typ == "direction":
|
|
1087
|
+
cam = DirectionalCamera()
|
|
1088
|
+
cam._from_proto(static_ani)
|
|
1089
|
+
scene.add_camera(cam)
|
|
1090
|
+
else:
|
|
1091
|
+
l_cam = LookAtCamera()
|
|
1092
|
+
l_cam._from_proto(static_ani)
|
|
1093
|
+
scene.add_camera(l_cam)
|
|
1094
|
+
|
|
1095
|
+
# Add color maps
|
|
1096
|
+
for color_map in res.spec.color_maps:
|
|
1097
|
+
cmap = ColorMap()
|
|
1098
|
+
cmap._from_proto(color_map)
|
|
1099
|
+
scene.add_color_map(cmap)
|
|
1100
|
+
return scene
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: luminarycloud
|
|
3
|
-
Version: 0.15.
|
|
3
|
+
Version: 0.15.5
|
|
4
4
|
Summary: Luminary Cloud SDK
|
|
5
5
|
Project-URL: Homepage, https://www.luminarycloud.com/
|
|
6
6
|
Project-URL: Documentation, https://app.luminarycloud.com/docs/api/
|
|
@@ -28,6 +28,7 @@ Requires-Dist: pyyaml~=6.0.2
|
|
|
28
28
|
Requires-Dist: requests~=2.28
|
|
29
29
|
Requires-Dist: waitress~=3.0.1
|
|
30
30
|
Requires-Dist: werkzeug~=3.0.1
|
|
31
|
+
Requires-Dist: zstandard
|
|
31
32
|
Provides-Extra: jupyter
|
|
32
33
|
Requires-Dist: luminarycloud-jupyter; extra == 'jupyter'
|
|
33
34
|
Description-Content-Type: text/markdown
|