luminarycloud 0.14.0__py3-none-any.whl → 0.15.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- luminarycloud/__init__.py +8 -1
- luminarycloud/_client/client.py +9 -0
- luminarycloud/_client/logging_interceptor.py +25 -0
- luminarycloud/_client/tracing.py +13 -8
- luminarycloud/_helpers/__init__.py +2 -0
- luminarycloud/_helpers/_code_representation.py +135 -0
- luminarycloud/_helpers/_simulation_params_from_json.py +5 -1
- luminarycloud/_helpers/download.py +16 -0
- luminarycloud/_helpers/named_variables.py +25 -0
- luminarycloud/_helpers/upload.py +31 -11
- luminarycloud/_helpers/warnings/deprecated.py +8 -10
- luminarycloud/_helpers/warnings/experimental.py +4 -4
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +135 -110
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +82 -10
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +34 -0
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +12 -0
- luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py +40 -40
- luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi +8 -2
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.py +182 -0
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.pyi +260 -0
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.py +204 -0
- luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.pyi +75 -0
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +94 -0
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +145 -0
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +104 -0
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +42 -0
- luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +25 -25
- luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +10 -3
- luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.py +25 -3
- luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.pyi +32 -0
- luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2_grpc.py +34 -0
- luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2_grpc.pyi +12 -0
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py +162 -0
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi +254 -0
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py +203 -0
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi +74 -0
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +157 -141
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +32 -4
- luminarycloud/_proto/cad/boolean_pb2.py +8 -8
- luminarycloud/_proto/cad/boolean_pb2.pyi +34 -4
- luminarycloud/_proto/client/simulation_pb2.py +304 -294
- luminarycloud/_proto/client/simulation_pb2.pyi +30 -1
- luminarycloud/_proto/geometry/geometry_pb2.py +58 -58
- luminarycloud/_proto/geometry/geometry_pb2.pyi +58 -11
- luminarycloud/_proto/hexmesh/hexmesh_pb2.py +42 -42
- luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +2 -2
- luminarycloud/_proto/output/reference_values_pb2.py +5 -5
- luminarycloud/_proto/parametricworker/parametricworker_pb2.py +31 -31
- luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi +6 -4
- luminarycloud/_proto/quantity/quantity_pb2.py +4 -4
- luminarycloud/_proto/table/table_pb2.py +9 -8
- luminarycloud/_proto/table/table_pb2.pyi +7 -1
- luminarycloud/enum/__init__.py +2 -0
- luminarycloud/enum/geometry_status.py +28 -0
- luminarycloud/geometry.py +64 -32
- luminarycloud/geometry_version.py +2 -2
- luminarycloud/mesh.py +11 -4
- luminarycloud/meshing/__init__.py +1 -0
- luminarycloud/meshing/metadata/__init__.py +6 -0
- luminarycloud/meshing/metadata/mesh_metadata.py +57 -0
- luminarycloud/named_variable_set.py +121 -0
- luminarycloud/outputs/output_definitions.py +11 -10
- luminarycloud/params/enum/_enum_wrappers.py +77 -968
- luminarycloud/params/outputs/output.py +2 -1
- luminarycloud/params/simulation/__init__.py +16 -16
- luminarycloud/params/simulation/_lib.py +1 -67
- luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +3 -2
- luminarycloud/params/simulation/adaptive_mesh_refinement_.py +3 -2
- luminarycloud/params/simulation/adjoint_.py +4 -3
- luminarycloud/params/simulation/basic/gravity/gravity_off_.py +3 -2
- luminarycloud/params/simulation/basic/gravity/gravity_on_.py +3 -2
- luminarycloud/params/simulation/basic/gravity_.py +3 -2
- luminarycloud/params/simulation/body_frame_.py +3 -2
- luminarycloud/params/simulation/entity_relationships/volume_material_relationship_.py +7 -6
- luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py +7 -6
- luminarycloud/params/simulation/entity_relationships_.py +3 -2
- luminarycloud/params/simulation/general_.py +4 -3
- luminarycloud/params/simulation/material/fluid/__init__.py +4 -4
- luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_off_.py +3 -2
- luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_on_.py +3 -2
- luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py +3 -2
- luminarycloud/params/simulation/material/fluid/material_model/__init__.py +1 -1
- luminarycloud/params/simulation/material/fluid/material_model/ideal_gas_.py +3 -2
- luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_.py +3 -2
- luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_with_energy_.py +3 -2
- luminarycloud/params/simulation/material/fluid/material_model_.py +3 -2
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/__init__.py +2 -2
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +3 -2
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +3 -2
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +4 -3
- luminarycloud/params/simulation/material/fluid/thermal_conductivity_model_.py +3 -2
- luminarycloud/params/simulation/material/fluid/viscosity_model/__init__.py +1 -1
- luminarycloud/params/simulation/material/fluid/viscosity_model/prescribed_viscosity_.py +3 -2
- luminarycloud/params/simulation/material/fluid/viscosity_model/sutherland_.py +3 -2
- luminarycloud/params/simulation/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +4 -3
- luminarycloud/params/simulation/material/fluid/viscosity_model_.py +3 -2
- luminarycloud/params/simulation/material/material_fluid_.py +7 -6
- luminarycloud/params/simulation/material/material_solid_.py +4 -3
- luminarycloud/params/simulation/material_entity_.py +9 -8
- luminarycloud/params/simulation/monitor_plane_.py +5 -4
- luminarycloud/params/simulation/motion_data/__init__.py +1 -1
- luminarycloud/params/simulation/motion_data/frame_transforms/__init__.py +1 -1
- luminarycloud/params/simulation/motion_data/frame_transforms/no_transform_.py +5 -4
- luminarycloud/params/simulation/motion_data/frame_transforms/rotational_transform_.py +5 -4
- luminarycloud/params/simulation/motion_data/frame_transforms/translational_transform_.py +5 -4
- luminarycloud/params/simulation/motion_data/frame_transforms_.py +3 -2
- luminarycloud/params/simulation/motion_data/motion_type/__init__.py +1 -1
- luminarycloud/params/simulation/motion_data/motion_type/constant_angular_motion_.py +5 -4
- luminarycloud/params/simulation/motion_data/motion_type/constant_translation_motion_.py +5 -4
- luminarycloud/params/simulation/motion_data/motion_type_.py +3 -2
- luminarycloud/params/simulation/motion_data_.py +6 -5
- luminarycloud/params/simulation/multi_physics_coupling_options_.py +3 -2
- luminarycloud/params/simulation/output_.py +3 -2
- luminarycloud/params/simulation/particle_group/particle_group_type/__init__.py +1 -1
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +4 -3
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +4 -3
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +3 -2
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +7 -6
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_line_.py +3 -2
- luminarycloud/params/simulation/particle_group/particle_group_type/probe_points_.py +5 -4
- luminarycloud/params/simulation/particle_group/particle_group_type/source_points_.py +5 -4
- luminarycloud/params/simulation/particle_group/particle_group_type_.py +3 -2
- luminarycloud/params/simulation/particle_group_.py +4 -3
- luminarycloud/params/simulation/physics/__init__.py +3 -3
- luminarycloud/params/simulation/physics/fluid/__init__.py +9 -9
- luminarycloud/params/simulation/physics/fluid/adjoint_controls_fluid_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/basic_fluid_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/__init__.py +5 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/__init__.py +3 -3
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +7 -6
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +6 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +6 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +8 -7
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/__init__.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet_.py +6 -5
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/symmetry_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/__init__.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/__init__.py +1 -1
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/slip_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_energy_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_momentum_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall_.py +7 -6
- luminarycloud/params/simulation/physics/fluid/boundary_conditions_fluid_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/initialization/__init__.py +2 -2
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_existing_solution_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/initialization_fluid_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/physical_behavior/__init__.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +8 -7
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/__init__.py +1 -1
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/__init__.py +2 -2
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +8 -7
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -3
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +9 -8
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +4 -3
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -3
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/physical_behavior_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/porous_behavior_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/solution_controls/__init__.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +7 -6
- luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/__init__.py +1 -1
- luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/solution_controls_fluid_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/__init__.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/__init__.py +1 -1
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/fds_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/spatial_discretization_fluid_.py +5 -4
- luminarycloud/params/simulation/physics/fluid/turbulence/__init__.py +2 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/__init__.py +1 -1
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/iddes_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst_.py +6 -5
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras_.py +6 -5
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/__init__.py +2 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model_.py +3 -2
- luminarycloud/params/simulation/physics/fluid/turbulence_.py +6 -5
- luminarycloud/params/simulation/physics/fluid_.py +12 -13
- luminarycloud/params/simulation/physics/heat/__init__.py +4 -4
- luminarycloud/params/simulation/physics/heat/adjoint_controls_heat_.py +3 -2
- luminarycloud/params/simulation/physics/heat/boundary_conditions/__init__.py +2 -2
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_convection_.py +5 -4
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +5 -4
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +5 -4
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_symmetry_.py +5 -4
- luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_temperature_.py +5 -4
- luminarycloud/params/simulation/physics/heat/boundary_conditions_heat_.py +5 -4
- luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/__init__.py +1 -1
- luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +3 -2
- luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +4 -3
- luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type_.py +3 -2
- luminarycloud/params/simulation/physics/heat/heat_source_.py +6 -5
- luminarycloud/params/simulation/physics/heat/initialization/heat_existing_solution_.py +5 -4
- luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values_.py +5 -4
- luminarycloud/params/simulation/physics/heat/initialization_heat_.py +3 -2
- luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +4 -3
- luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +3 -2
- luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +4 -3
- luminarycloud/params/simulation/physics/heat/spatial_discretization_heat_.py +3 -2
- luminarycloud/params/simulation/physics/heat_.py +9 -8
- luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/__init__.py +1 -1
- luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +3 -2
- luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/translational_periodicity_.py +3 -2
- luminarycloud/params/simulation/physics/periodic_pair/periodicity_type_.py +3 -2
- luminarycloud/params/simulation/physics/periodic_pair_.py +4 -3
- luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/__init__.py +1 -1
- luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py +3 -2
- luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/krylov_amg_.py +9 -8
- luminarycloud/params/simulation/physics/solution_controls/linear_solver_type_.py +3 -2
- luminarycloud/params/simulation/physics_.py +7 -6
- luminarycloud/params/simulation/simulation_param_.py +12 -13
- luminarycloud/params/simulation/sliding_interfaces_.py +8 -7
- luminarycloud/params/simulation/surface_name_.py +3 -2
- luminarycloud/params/simulation/time/__init__.py +2 -2
- luminarycloud/params/simulation/time/compute_statistics/__init__.py +1 -1
- luminarycloud/params/simulation/time/compute_statistics/compute_statistics_off_.py +3 -2
- luminarycloud/params/simulation/time/compute_statistics/compute_statistics_on_.py +3 -2
- luminarycloud/params/simulation/time/compute_statistics_.py +3 -2
- luminarycloud/params/simulation/time/time_marching/time_explicit_.py +3 -2
- luminarycloud/params/simulation/time/time_marching/time_implicit_.py +3 -2
- luminarycloud/params/simulation/time/time_marching_.py +3 -2
- luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py +3 -2
- luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py +3 -2
- luminarycloud/params/simulation/time/time_step_ramp_.py +3 -2
- luminarycloud/params/simulation/time_.py +6 -5
- luminarycloud/params/simulation/volume_entity_.py +5 -4
- luminarycloud/physics_ai/__init__.py +8 -0
- luminarycloud/physics_ai/architectures.py +38 -0
- luminarycloud/physics_ai/models.py +42 -0
- luminarycloud/project.py +73 -21
- luminarycloud/reference_values.py +20 -3
- luminarycloud/simulation.py +8 -3
- luminarycloud/simulation_param.py +136 -29
- luminarycloud/simulation_template.py +84 -13
- luminarycloud/solution.py +17 -2
- luminarycloud/types/__init__.py +1 -0
- luminarycloud/types/adfloat.py +49 -19
- luminarycloud/types/ids.py +3 -0
- luminarycloud/vis/__init__.py +0 -3
- luminarycloud/vis/display.py +1 -0
- luminarycloud/vis/interactive_scene.py +47 -1
- luminarycloud/vis/visualization.py +57 -23
- luminarycloud/volume_selection.py +31 -19
- {luminarycloud-0.14.0.dist-info → luminarycloud-0.15.0.dist-info}/METADATA +2 -2
- {luminarycloud-0.14.0.dist-info → luminarycloud-0.15.0.dist-info}/RECORD +295 -274
- {luminarycloud-0.14.0.dist-info → luminarycloud-0.15.0.dist-info}/WHEEL +0 -0
luminarycloud/__init__.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
# Copyright 2023-
|
|
1
|
+
# Copyright 2023-2025 Luminary Cloud, Inc. All Rights Reserved.
|
|
2
2
|
import logging as _logging
|
|
3
3
|
|
|
4
4
|
from ._version import __version__
|
|
5
5
|
|
|
6
6
|
from . import (
|
|
7
7
|
_patch as _patch,
|
|
8
|
+
enum as enum,
|
|
8
9
|
exceptions as exceptions,
|
|
9
10
|
meshing as meshing,
|
|
10
11
|
outputs as outputs,
|
|
@@ -22,6 +23,9 @@ from .geometry import (
|
|
|
22
23
|
get_geometry as get_geometry,
|
|
23
24
|
Geometry as Geometry,
|
|
24
25
|
)
|
|
26
|
+
from .geometry_version import (
|
|
27
|
+
GeometryVersion as GeometryVersion,
|
|
28
|
+
)
|
|
25
29
|
from .mesh import (
|
|
26
30
|
get_mesh as get_mesh,
|
|
27
31
|
get_mesh_metadata as get_mesh_metadata,
|
|
@@ -55,6 +59,9 @@ from .reference_values import (
|
|
|
55
59
|
from .volume_selection import (
|
|
56
60
|
VolumeSelection as VolumeSelection,
|
|
57
61
|
)
|
|
62
|
+
from .named_variable_set import (
|
|
63
|
+
NamedVariableSet as NamedVariableSet,
|
|
64
|
+
)
|
|
58
65
|
|
|
59
66
|
# Log SDK version number
|
|
60
67
|
logger = _logging.getLogger("luminarycloud")
|
luminarycloud/_client/client.py
CHANGED
|
@@ -25,6 +25,12 @@ from .._proto.api.v0.luminarycloud.simulation.simulation_pb2_grpc import (
|
|
|
25
25
|
from .._proto.api.v0.luminarycloud.simulation_template.simulation_template_pb2_grpc import (
|
|
26
26
|
SimulationTemplateServiceStub,
|
|
27
27
|
)
|
|
28
|
+
from .._proto.api.v0.luminarycloud.named_variable_set.named_variable_set_pb2_grpc import (
|
|
29
|
+
NamedVariableSetServiceStub,
|
|
30
|
+
)
|
|
31
|
+
from .._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2_grpc import (
|
|
32
|
+
PhysicsAiServiceStub,
|
|
33
|
+
)
|
|
28
34
|
from .._proto.api.v0.luminarycloud.solution.solution_pb2_grpc import SolutionServiceStub
|
|
29
35
|
from .._proto.api.v0.luminarycloud.upload.upload_pb2_grpc import UploadServiceStub
|
|
30
36
|
from .._proto.api.v0.luminarycloud.vis.vis_pb2_grpc import VisAPIServiceStub
|
|
@@ -50,6 +56,8 @@ class Client(
|
|
|
50
56
|
OutputNodeServiceStub,
|
|
51
57
|
OutputDefinitionServiceStub,
|
|
52
58
|
StoppingConditionServiceStub,
|
|
59
|
+
NamedVariableSetServiceStub,
|
|
60
|
+
PhysicsAiServiceStub,
|
|
53
61
|
):
|
|
54
62
|
"""
|
|
55
63
|
Creates a Luminary API client.
|
|
@@ -193,6 +201,7 @@ class Client(
|
|
|
193
201
|
OutputNodeServiceStub.__init__(self, self._channel)
|
|
194
202
|
OutputDefinitionServiceStub.__init__(self, self._channel)
|
|
195
203
|
StoppingConditionServiceStub.__init__(self, self._channel)
|
|
204
|
+
PhysicsAiServiceStub.__init__(self, self._channel)
|
|
196
205
|
for name, value in self.__dict__.items():
|
|
197
206
|
if isinstance(value, grpc.UnaryUnaryMultiCallable):
|
|
198
207
|
setattr(self, name, rpc_error(value))
|
|
@@ -16,12 +16,33 @@ from .._version import __version__
|
|
|
16
16
|
logger = logging.getLogger(__name__)
|
|
17
17
|
|
|
18
18
|
|
|
19
|
+
def _get_ai_notebook_id() -> str:
|
|
20
|
+
# This needs to match the file name in frodo/src/use-jupyter-temp-files
|
|
21
|
+
ai_notebook_active_file = "lc-ai-nb-active-nb"
|
|
22
|
+
# Check if we're in the AI notebook env and read the notebook ID file
|
|
23
|
+
# if we are
|
|
24
|
+
notebook_id = ""
|
|
25
|
+
try:
|
|
26
|
+
with open(ai_notebook_active_file, "r") as f:
|
|
27
|
+
notebook_id = f.read()
|
|
28
|
+
except:
|
|
29
|
+
# Just suppress any errors in loading the notebook ID and don't include
|
|
30
|
+
# the invalid/missing ID. Either we're not in the AI notebook or the ID
|
|
31
|
+
# isn't in the file
|
|
32
|
+
pass
|
|
33
|
+
return notebook_id
|
|
34
|
+
|
|
35
|
+
|
|
19
36
|
class LoggingInterceptor(UnaryUnaryClientInterceptor):
|
|
20
37
|
"""
|
|
21
38
|
A client interceptor that logs gRPC method calls and appends the SDK version
|
|
22
39
|
to the request metadata.
|
|
23
40
|
"""
|
|
24
41
|
|
|
42
|
+
def __init__(self) -> None:
|
|
43
|
+
super().__init__()
|
|
44
|
+
self._notebook_id = _get_ai_notebook_id()
|
|
45
|
+
|
|
25
46
|
def intercept_unary_unary(
|
|
26
47
|
self,
|
|
27
48
|
continuation: Callable[[ClientCallDetails, Any], grpc.Call],
|
|
@@ -35,6 +56,10 @@ class LoggingInterceptor(UnaryUnaryClientInterceptor):
|
|
|
35
56
|
# will look like: x-client-version: python-sdk-v0.1.0
|
|
36
57
|
metadata.append(("x-client-version", f"python-sdk-v{__version__}"))
|
|
37
58
|
|
|
59
|
+
if self._notebook_id != "":
|
|
60
|
+
# will look like: x-ai-notebook-id: <id>
|
|
61
|
+
metadata.append(("x-ai-notebook-id", self._notebook_id))
|
|
62
|
+
|
|
38
63
|
client_call_details = _ClientCallDetails(
|
|
39
64
|
client_call_details.method,
|
|
40
65
|
client_call_details.timeout,
|
luminarycloud/_client/tracing.py
CHANGED
|
@@ -14,6 +14,7 @@ from opentelemetry.sdk.trace.export import (
|
|
|
14
14
|
SpanExportResult,
|
|
15
15
|
)
|
|
16
16
|
|
|
17
|
+
from .logging_interceptor import _get_ai_notebook_id
|
|
17
18
|
from .. import __version__
|
|
18
19
|
from .._auth import Auth0Client
|
|
19
20
|
from .._version import __version__
|
|
@@ -23,13 +24,6 @@ logger = logging.getLogger(__name__)
|
|
|
23
24
|
# By default, OpenTelemetry Python uses W3C Trace Context and W3C Baggage for propagation:
|
|
24
25
|
# https://opentelemetry.io/docs/instrumentation/python/manual/#change-the-default-propagation-format
|
|
25
26
|
|
|
26
|
-
_resource = Resource(
|
|
27
|
-
attributes={
|
|
28
|
-
SERVICE_NAME: "python/sdk",
|
|
29
|
-
SERVICE_VERSION: __version__,
|
|
30
|
-
}
|
|
31
|
-
)
|
|
32
|
-
|
|
33
27
|
|
|
34
28
|
# This is a hack to get opentelemetry to skip SSL verification when exporting traces.
|
|
35
29
|
# We do it this way because opentelemetry overrides the `verify` option in their code when they make
|
|
@@ -104,6 +98,17 @@ def _get_collector_endpoint(primary_domain: str) -> str:
|
|
|
104
98
|
return f"https://{primary_domain}/v1/traces"
|
|
105
99
|
|
|
106
100
|
|
|
101
|
+
def _get_trace_resource() -> Resource:
|
|
102
|
+
resource = Resource(
|
|
103
|
+
attributes={
|
|
104
|
+
SERVICE_NAME: "python/sdk",
|
|
105
|
+
SERVICE_VERSION: __version__,
|
|
106
|
+
"notebook_id": _get_ai_notebook_id(),
|
|
107
|
+
}
|
|
108
|
+
)
|
|
109
|
+
return resource
|
|
110
|
+
|
|
111
|
+
|
|
107
112
|
def _add_instrumentation(
|
|
108
113
|
channel: Channel,
|
|
109
114
|
endpoint: str,
|
|
@@ -111,7 +116,7 @@ def _add_instrumentation(
|
|
|
111
116
|
api_key: Optional[str],
|
|
112
117
|
verify_ssl: bool = True,
|
|
113
118
|
) -> Channel:
|
|
114
|
-
provider = TracerProvider(resource=
|
|
119
|
+
provider = TracerProvider(resource=_get_trace_resource())
|
|
115
120
|
if api_key:
|
|
116
121
|
processor = BatchSpanProcessor(
|
|
117
122
|
ApiKeySpanExporter(
|
|
@@ -10,6 +10,7 @@ from .download import (
|
|
|
10
10
|
download_volume_solution as download_volume_solution,
|
|
11
11
|
download_surface_deformation_template as download_surface_deformation_template,
|
|
12
12
|
download_surface_sensitivity_data as download_surface_sensitivity_data,
|
|
13
|
+
download_parameter_sensitivity_data as download_parameter_sensitivity_data,
|
|
13
14
|
save_file as save_file,
|
|
14
15
|
)
|
|
15
16
|
from .file_chunk_stream import (
|
|
@@ -37,3 +38,4 @@ from ._upload_table import (
|
|
|
37
38
|
from ._wait_for_simulation import (
|
|
38
39
|
wait_for_simulation as wait_for_simulation,
|
|
39
40
|
)
|
|
41
|
+
from ._code_representation import CodeRepr as CodeRepr
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
|
|
2
|
+
from typing import Any
|
|
3
|
+
from google.protobuf.message import Message as _ProtoMessage
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Gives derived classes the ability to generate the code that would set the values of their members.
|
|
7
|
+
# Evidently this is most suited for dataclasses.
|
|
8
|
+
# Note that to allow recursion, the lines generated by this class DO NOT contain the name of the
|
|
9
|
+
# object being generated, e.g. they will be of the form " = Type()", ".field = val".
|
|
10
|
+
# Derived classes can use _to_code_helper to insert an adequate object name.
|
|
11
|
+
class CodeRepr:
|
|
12
|
+
def to_code(self, hide_defaults: bool = True) -> str:
|
|
13
|
+
# Returns the code representation of a value with special cases for enums and classes
|
|
14
|
+
# that also implement "to_code" (thus triggering recursion), otherwise uses the default
|
|
15
|
+
# conversion to string.
|
|
16
|
+
def to_string(val: Any) -> str:
|
|
17
|
+
if "<enum " in str(type(val)):
|
|
18
|
+
str_val = val.__repr__()
|
|
19
|
+
return str_val.split(": ")[0][1:]
|
|
20
|
+
try:
|
|
21
|
+
return val.to_code(hide_defaults)
|
|
22
|
+
except:
|
|
23
|
+
return str(val)
|
|
24
|
+
|
|
25
|
+
# Returns the code to set the value of a given field of the class.
|
|
26
|
+
def generate(field: str, val: Any) -> str:
|
|
27
|
+
str_val = to_string(val)
|
|
28
|
+
code = ""
|
|
29
|
+
if issubclass(type(val), _ProtoMessage):
|
|
30
|
+
# Special case for protos.
|
|
31
|
+
# TODO(pedro): This is not working 100%.
|
|
32
|
+
code += "# NOTE: Google protobuf types are not fully supported yet.\n"
|
|
33
|
+
code += f".{field} = {type(val).__name__}()\n"
|
|
34
|
+
for line in str_val.split("\n"):
|
|
35
|
+
if ":" in line:
|
|
36
|
+
mod_line = line.replace(":", " =")
|
|
37
|
+
code += f".{field}.{mod_line}\n"
|
|
38
|
+
elif str_val.endswith("\n"):
|
|
39
|
+
# Special case for fields with their own "to_code".
|
|
40
|
+
for line in str_val.split("\n"):
|
|
41
|
+
if line.startswith("new_") or line.startswith("#"):
|
|
42
|
+
code += f"{line}\n"
|
|
43
|
+
elif line.startswith(".new_"):
|
|
44
|
+
code += f"{line[1:]}\n"
|
|
45
|
+
elif line:
|
|
46
|
+
code += f".{field}{line}\n"
|
|
47
|
+
elif isinstance(val, str):
|
|
48
|
+
code += f'.{field} = "{str_val}"\n'
|
|
49
|
+
else:
|
|
50
|
+
code += f".{field} = {str_val}\n"
|
|
51
|
+
return code
|
|
52
|
+
|
|
53
|
+
# Returns the code representation of map keys, with special cases for enums and strings.
|
|
54
|
+
def map_key(key: Any) -> str:
|
|
55
|
+
if isinstance(key, str):
|
|
56
|
+
return f'"{key}"'
|
|
57
|
+
if "<enum " in str(type(key)):
|
|
58
|
+
str_key = key.__repr__()
|
|
59
|
+
return str_key.split(": ")[0][1:]
|
|
60
|
+
return str(key)
|
|
61
|
+
|
|
62
|
+
# Helper to generate short names for temporary objects that are built and inserted into
|
|
63
|
+
# containers.
|
|
64
|
+
def short_name(field: str) -> str:
|
|
65
|
+
if not "_" in field:
|
|
66
|
+
return field
|
|
67
|
+
return "".join([word[0] for word in field.split("_")])
|
|
68
|
+
|
|
69
|
+
# Create the top level object (default constructed), we do some manipulation of module paths
|
|
70
|
+
# (extracted from the type info) to make them consistent with the aliased imports in some
|
|
71
|
+
# __init__ files.
|
|
72
|
+
if "luminarycloud" in str(type(self)):
|
|
73
|
+
path = (
|
|
74
|
+
str(type(self))
|
|
75
|
+
.split("'")[1]
|
|
76
|
+
.replace("luminarycloud.params.simulation", "params")
|
|
77
|
+
.replace("luminarycloud.outputs.output_definitions", "outputs")
|
|
78
|
+
)
|
|
79
|
+
names = path.split(".")
|
|
80
|
+
if names[-2].endswith("_"):
|
|
81
|
+
path = path.replace(names[-2] + ".", "")
|
|
82
|
+
code = f" = {path}()\n"
|
|
83
|
+
else:
|
|
84
|
+
code = f" = {type(self).__name__}()\n"
|
|
85
|
+
|
|
86
|
+
default = type(self)()
|
|
87
|
+
for field, val in vars(self).items():
|
|
88
|
+
# Skip default values.
|
|
89
|
+
if hide_defaults and val == vars(default).get(field):
|
|
90
|
+
continue
|
|
91
|
+
field_short_name = short_name(field)
|
|
92
|
+
if isinstance(val, dict):
|
|
93
|
+
code += "# Clear the map and insert new items.\n"
|
|
94
|
+
code += f".{field} = {{}}\n"
|
|
95
|
+
for key, value in val.items():
|
|
96
|
+
# Simplify the code for maps of built-in types by not creating a temporary
|
|
97
|
+
# instance.
|
|
98
|
+
if isinstance(value, (bool, int, float)):
|
|
99
|
+
code += f".{field}[{map_key(key)}] = {value}\n"
|
|
100
|
+
elif isinstance(value, str):
|
|
101
|
+
code += f'.{field}[{map_key(key)}] = "{value}"\n'
|
|
102
|
+
else:
|
|
103
|
+
code += f"# Create a new {type(value).__name__} instance and insert it.\n"
|
|
104
|
+
code += generate(f"new_{field_short_name}", value)
|
|
105
|
+
code += f".{field}[{map_key(key)}] = new_{field_short_name}\n"
|
|
106
|
+
elif isinstance(val, list):
|
|
107
|
+
# Similar to maps, for classes with more complex representations create temporaries
|
|
108
|
+
# and append, otherwise use the default list representation (which also covers
|
|
109
|
+
# empty lists).
|
|
110
|
+
if len(val) > 0 and to_string(val[0]).endswith("\n"):
|
|
111
|
+
code += f"# Clear the list of {type(val[0]).__name__} and append new items.\n"
|
|
112
|
+
code += f".{field} = []\n"
|
|
113
|
+
for value in val:
|
|
114
|
+
code += f"# Create a new {type(value).__name__} instance and append it.\n"
|
|
115
|
+
code += generate(f"new_{field_short_name}", value)
|
|
116
|
+
code += f".{field}.append(new_{field_short_name})\n"
|
|
117
|
+
else:
|
|
118
|
+
code += f".{field} = {to_string(val)}\n"
|
|
119
|
+
else:
|
|
120
|
+
code += generate(field, val)
|
|
121
|
+
return code
|
|
122
|
+
|
|
123
|
+
# See the class description.
|
|
124
|
+
def _to_code_helper(self, obj_name: str = "obj", hide_defaults: bool = True) -> str:
|
|
125
|
+
code = ""
|
|
126
|
+
for line in CodeRepr.to_code(self, hide_defaults).split("\n"):
|
|
127
|
+
if line:
|
|
128
|
+
if line.startswith(".new_"):
|
|
129
|
+
code += f"{line[1:]}\n"
|
|
130
|
+
elif line[0] == "." or line.startswith(" = "):
|
|
131
|
+
code += f"{obj_name}{line}\n"
|
|
132
|
+
else:
|
|
133
|
+
# Handles comments and temporary objects.
|
|
134
|
+
code += f"{line}\n"
|
|
135
|
+
return code
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
from os import PathLike
|
|
3
3
|
from typing import Union
|
|
4
4
|
|
|
5
|
-
from google.protobuf.json_format import Parse
|
|
5
|
+
from google.protobuf.json_format import Parse, ParseDict
|
|
6
6
|
|
|
7
7
|
from .._proto.client.simulation_pb2 import SimulationParam
|
|
8
8
|
|
|
@@ -11,6 +11,10 @@ def simulation_params_from_json(text: Union[str, bytes]) -> SimulationParam:
|
|
|
11
11
|
return Parse(text, SimulationParam(), ignore_unknown_fields=True)
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
def simulation_params_from_json_dict(data: dict) -> SimulationParam:
|
|
15
|
+
return ParseDict(data, SimulationParam(), ignore_unknown_fields=True)
|
|
16
|
+
|
|
17
|
+
|
|
14
18
|
def simulation_params_from_json_path(json_path: PathLike | str) -> SimulationParam:
|
|
15
19
|
with open(json_path, "rb") as fp:
|
|
16
20
|
json_bytes = fp.read()
|
|
@@ -13,6 +13,7 @@ from .._proto.api.v0.luminarycloud.solution.solution_pb2 import (
|
|
|
13
13
|
GetSolutionVolumeDataRequest,
|
|
14
14
|
GetSurfaceDeformationTemplateRequest,
|
|
15
15
|
GetSurfaceSensitivityDataRequest,
|
|
16
|
+
GetParameterSensitivityDataRequest,
|
|
16
17
|
)
|
|
17
18
|
from .._client import Client
|
|
18
19
|
|
|
@@ -152,6 +153,21 @@ def download_surface_sensitivity_data(
|
|
|
152
153
|
return _create_file_chunk_stream(client, solution_id, "surface sensitivity data", response.file)
|
|
153
154
|
|
|
154
155
|
|
|
156
|
+
def download_parameter_sensitivity_data(
|
|
157
|
+
client: Client,
|
|
158
|
+
solution_id: str,
|
|
159
|
+
) -> FileChunkStream:
|
|
160
|
+
"""
|
|
161
|
+
Similar to download_surface_solution.
|
|
162
|
+
"""
|
|
163
|
+
|
|
164
|
+
request = GetParameterSensitivityDataRequest(id=solution_id)
|
|
165
|
+
response = client.GetParameterSensitivityData(request)
|
|
166
|
+
return _create_file_chunk_stream(
|
|
167
|
+
client, solution_id, "parameter sensitivity data", response.file
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
|
|
155
171
|
def save_file(
|
|
156
172
|
file_proto: commonpb.File,
|
|
157
173
|
dest_dir: Union[os.PathLike, str],
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from .._proto.base.base_pb2 import AdFloatType, ExpressionType
|
|
2
|
+
|
|
3
|
+
from ..types.adfloat import _to_ad_proto, _from_ad_proto
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def _named_variables_to_proto(
|
|
7
|
+
named_variables: dict[str, float | str],
|
|
8
|
+
) -> dict[str, AdFloatType]:
|
|
9
|
+
return {
|
|
10
|
+
k: (
|
|
11
|
+
_to_ad_proto(v)
|
|
12
|
+
if isinstance(v, float)
|
|
13
|
+
else AdFloatType(expression=ExpressionType(expression=v))
|
|
14
|
+
)
|
|
15
|
+
for k, v in named_variables.items()
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _named_variables_from_proto(
|
|
20
|
+
named_variables: dict[str, AdFloatType],
|
|
21
|
+
) -> dict[str, float | str]:
|
|
22
|
+
return {
|
|
23
|
+
k: v.variable.expression if v.HasField("variable") else _from_ad_proto(v)
|
|
24
|
+
for k, v in named_variables.items()
|
|
25
|
+
}
|
luminarycloud/_helpers/upload.py
CHANGED
|
@@ -5,6 +5,7 @@ import pathlib
|
|
|
5
5
|
from typing import Mapping
|
|
6
6
|
import requests
|
|
7
7
|
import logging
|
|
8
|
+
import grpc
|
|
8
9
|
|
|
9
10
|
from . import util
|
|
10
11
|
from .._client import Client
|
|
@@ -84,21 +85,40 @@ def upload_file(
|
|
|
84
85
|
upload_id = create_upload_res.upload.id
|
|
85
86
|
logger.debug(f"created upload: {upload_id}")
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
try:
|
|
89
|
+
start_res = client.StartUpload(
|
|
90
|
+
uploadpb.StartUploadRequest(upload_id=upload_id, method=uploadpb.METHOD_GCS_RESUMABLE)
|
|
91
|
+
)
|
|
92
|
+
logger.debug("started gcs upload")
|
|
91
93
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
gcs_resumable_upload(
|
|
95
|
+
filepath=pathlib.Path(file_path),
|
|
96
|
+
signed_url=start_res.upload.gcs_resumable.signed_url,
|
|
97
|
+
http_headers=start_res.upload.gcs_resumable.http_headers,
|
|
98
|
+
)
|
|
99
|
+
logger.debug("successfully uploaded gcs data")
|
|
100
|
+
except grpc.RpcError as e:
|
|
101
|
+
if e.code() != grpc.StatusCode.UNIMPLEMENTED:
|
|
102
|
+
raise e
|
|
103
|
+
start_res = client.StartUpload(
|
|
104
|
+
uploadpb.StartUploadRequest(upload_id=upload_id, method=uploadpb.METHOD_SIMPLE)
|
|
105
|
+
)
|
|
106
|
+
logger.debug("started simple upload")
|
|
107
|
+
|
|
108
|
+
# Simple non-chunked upload
|
|
109
|
+
with open(file_path, "rb") as fp:
|
|
110
|
+
client.UploadData(
|
|
111
|
+
uploadpb.UploadDataRequest(
|
|
112
|
+
upload_id=upload_id,
|
|
113
|
+
offset=0,
|
|
114
|
+
data=fp.read(),
|
|
115
|
+
)
|
|
116
|
+
)
|
|
117
|
+
logger.debug("successfully uploaded simple data")
|
|
98
118
|
|
|
99
119
|
finish_res: uploadpb.FinishUploadReply = client.FinishUpload(
|
|
100
120
|
uploadpb.FinishUploadRequest(upload_id=upload_id)
|
|
101
121
|
)
|
|
102
|
-
logger.debug(
|
|
122
|
+
logger.debug("finished upload")
|
|
103
123
|
|
|
104
124
|
return upload_id, finish_res
|
|
@@ -7,7 +7,7 @@ from typing import Callable, TypeVar
|
|
|
7
7
|
C = TypeVar("C")
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
def deprecated(reason: str, version: str) -> Callable[[C], C]:
|
|
10
|
+
def deprecated(reason: str, version: str = "") -> Callable[[C], C]:
|
|
11
11
|
"""
|
|
12
12
|
Mark a class or function as deprecated.
|
|
13
13
|
|
|
@@ -15,26 +15,24 @@ def deprecated(reason: str, version: str) -> Callable[[C], C]:
|
|
|
15
15
|
----------
|
|
16
16
|
reason : str
|
|
17
17
|
The reason for deprecation.
|
|
18
|
-
version : str
|
|
19
|
-
The version in which the class or function was deprecated.
|
|
20
18
|
"""
|
|
21
19
|
|
|
22
|
-
def decorator(f:
|
|
20
|
+
def decorator(f: C) -> C:
|
|
23
21
|
if isinstance(f, type):
|
|
24
|
-
return _deprecated_class(f, reason
|
|
22
|
+
return _deprecated_class(f, reason)
|
|
25
23
|
else:
|
|
26
|
-
return _deprecated_function(f, reason
|
|
24
|
+
return _deprecated_function(f, reason)
|
|
27
25
|
|
|
28
26
|
return decorator
|
|
29
27
|
|
|
30
28
|
|
|
31
|
-
def _deprecated_class(cls: type[C], reason: str
|
|
29
|
+
def _deprecated_class(cls: type[C], reason: str) -> type[C]:
|
|
32
30
|
old_init = cls.__init__
|
|
33
31
|
|
|
34
32
|
@wraps(old_init)
|
|
35
33
|
def new_init(self, *args, **kwargs):
|
|
36
34
|
warnings.warn(
|
|
37
|
-
f"{cls.__name__} is deprecated
|
|
35
|
+
f"{cls.__name__} is deprecated: {reason}",
|
|
38
36
|
category=DeprecationWarning,
|
|
39
37
|
stacklevel=2,
|
|
40
38
|
)
|
|
@@ -44,11 +42,11 @@ def _deprecated_class(cls: type[C], reason: str, version: str) -> type[C]:
|
|
|
44
42
|
return cls
|
|
45
43
|
|
|
46
44
|
|
|
47
|
-
def _deprecated_function(f: Callable, reason: str
|
|
45
|
+
def _deprecated_function(f: Callable, reason: str) -> Callable:
|
|
48
46
|
@wraps(f)
|
|
49
47
|
def new_func(*args, **kwargs):
|
|
50
48
|
warnings.warn(
|
|
51
|
-
f"{f.__name__}() is deprecated
|
|
49
|
+
f"{f.__name__}() is deprecated: {reason}",
|
|
52
50
|
category=DeprecationWarning,
|
|
53
51
|
stacklevel=2,
|
|
54
52
|
)
|
|
@@ -7,12 +7,12 @@ from typing import Callable, TypeVar
|
|
|
7
7
|
C = TypeVar("C")
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
def experimental(f:
|
|
10
|
+
def experimental(f: C) -> C:
|
|
11
11
|
"""Mark a function or class as experimental."""
|
|
12
|
-
if isinstance(f,
|
|
13
|
-
return _experimental_class(f)
|
|
14
|
-
else:
|
|
12
|
+
if isinstance(f, Callable):
|
|
15
13
|
return _experimental_function(f)
|
|
14
|
+
else:
|
|
15
|
+
return _experimental_class(f)
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def _experimental_class(cls: type[C]) -> type[C]:
|