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.
Files changed (295) hide show
  1. luminarycloud/__init__.py +8 -1
  2. luminarycloud/_client/client.py +9 -0
  3. luminarycloud/_client/logging_interceptor.py +25 -0
  4. luminarycloud/_client/tracing.py +13 -8
  5. luminarycloud/_helpers/__init__.py +2 -0
  6. luminarycloud/_helpers/_code_representation.py +135 -0
  7. luminarycloud/_helpers/_simulation_params_from_json.py +5 -1
  8. luminarycloud/_helpers/download.py +16 -0
  9. luminarycloud/_helpers/named_variables.py +25 -0
  10. luminarycloud/_helpers/upload.py +31 -11
  11. luminarycloud/_helpers/warnings/deprecated.py +8 -10
  12. luminarycloud/_helpers/warnings/experimental.py +4 -4
  13. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +135 -110
  14. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +82 -10
  15. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +34 -0
  16. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +12 -0
  17. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py +40 -40
  18. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi +8 -2
  19. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.py +182 -0
  20. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2.pyi +260 -0
  21. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.py +204 -0
  22. luminarycloud/_proto/api/v0/luminarycloud/named_variable_set/named_variable_set_pb2_grpc.pyi +75 -0
  23. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +94 -0
  24. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +145 -0
  25. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +104 -0
  26. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +42 -0
  27. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +25 -25
  28. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +10 -3
  29. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.py +25 -3
  30. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.pyi +32 -0
  31. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2_grpc.py +34 -0
  32. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2_grpc.pyi +12 -0
  33. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py +162 -0
  34. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi +254 -0
  35. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py +203 -0
  36. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi +74 -0
  37. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +157 -141
  38. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +32 -4
  39. luminarycloud/_proto/cad/boolean_pb2.py +8 -8
  40. luminarycloud/_proto/cad/boolean_pb2.pyi +34 -4
  41. luminarycloud/_proto/client/simulation_pb2.py +304 -294
  42. luminarycloud/_proto/client/simulation_pb2.pyi +30 -1
  43. luminarycloud/_proto/geometry/geometry_pb2.py +58 -58
  44. luminarycloud/_proto/geometry/geometry_pb2.pyi +58 -11
  45. luminarycloud/_proto/hexmesh/hexmesh_pb2.py +42 -42
  46. luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +2 -2
  47. luminarycloud/_proto/output/reference_values_pb2.py +5 -5
  48. luminarycloud/_proto/parametricworker/parametricworker_pb2.py +31 -31
  49. luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi +6 -4
  50. luminarycloud/_proto/quantity/quantity_pb2.py +4 -4
  51. luminarycloud/_proto/table/table_pb2.py +9 -8
  52. luminarycloud/_proto/table/table_pb2.pyi +7 -1
  53. luminarycloud/enum/__init__.py +2 -0
  54. luminarycloud/enum/geometry_status.py +28 -0
  55. luminarycloud/geometry.py +64 -32
  56. luminarycloud/geometry_version.py +2 -2
  57. luminarycloud/mesh.py +11 -4
  58. luminarycloud/meshing/__init__.py +1 -0
  59. luminarycloud/meshing/metadata/__init__.py +6 -0
  60. luminarycloud/meshing/metadata/mesh_metadata.py +57 -0
  61. luminarycloud/named_variable_set.py +121 -0
  62. luminarycloud/outputs/output_definitions.py +11 -10
  63. luminarycloud/params/enum/_enum_wrappers.py +77 -968
  64. luminarycloud/params/outputs/output.py +2 -1
  65. luminarycloud/params/simulation/__init__.py +16 -16
  66. luminarycloud/params/simulation/_lib.py +1 -67
  67. luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +3 -2
  68. luminarycloud/params/simulation/adaptive_mesh_refinement_.py +3 -2
  69. luminarycloud/params/simulation/adjoint_.py +4 -3
  70. luminarycloud/params/simulation/basic/gravity/gravity_off_.py +3 -2
  71. luminarycloud/params/simulation/basic/gravity/gravity_on_.py +3 -2
  72. luminarycloud/params/simulation/basic/gravity_.py +3 -2
  73. luminarycloud/params/simulation/body_frame_.py +3 -2
  74. luminarycloud/params/simulation/entity_relationships/volume_material_relationship_.py +7 -6
  75. luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py +7 -6
  76. luminarycloud/params/simulation/entity_relationships_.py +3 -2
  77. luminarycloud/params/simulation/general_.py +4 -3
  78. luminarycloud/params/simulation/material/fluid/__init__.py +4 -4
  79. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_off_.py +3 -2
  80. luminarycloud/params/simulation/material/fluid/boussinesq_approximation/boussinesq_on_.py +3 -2
  81. luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py +3 -2
  82. luminarycloud/params/simulation/material/fluid/material_model/__init__.py +1 -1
  83. luminarycloud/params/simulation/material/fluid/material_model/ideal_gas_.py +3 -2
  84. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_.py +3 -2
  85. luminarycloud/params/simulation/material/fluid/material_model/incompressible_fluid_with_energy_.py +3 -2
  86. luminarycloud/params/simulation/material/fluid/material_model_.py +3 -2
  87. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/__init__.py +2 -2
  88. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +3 -2
  89. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +3 -2
  90. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +4 -3
  91. luminarycloud/params/simulation/material/fluid/thermal_conductivity_model_.py +3 -2
  92. luminarycloud/params/simulation/material/fluid/viscosity_model/__init__.py +1 -1
  93. luminarycloud/params/simulation/material/fluid/viscosity_model/prescribed_viscosity_.py +3 -2
  94. luminarycloud/params/simulation/material/fluid/viscosity_model/sutherland_.py +3 -2
  95. luminarycloud/params/simulation/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +4 -3
  96. luminarycloud/params/simulation/material/fluid/viscosity_model_.py +3 -2
  97. luminarycloud/params/simulation/material/material_fluid_.py +7 -6
  98. luminarycloud/params/simulation/material/material_solid_.py +4 -3
  99. luminarycloud/params/simulation/material_entity_.py +9 -8
  100. luminarycloud/params/simulation/monitor_plane_.py +5 -4
  101. luminarycloud/params/simulation/motion_data/__init__.py +1 -1
  102. luminarycloud/params/simulation/motion_data/frame_transforms/__init__.py +1 -1
  103. luminarycloud/params/simulation/motion_data/frame_transforms/no_transform_.py +5 -4
  104. luminarycloud/params/simulation/motion_data/frame_transforms/rotational_transform_.py +5 -4
  105. luminarycloud/params/simulation/motion_data/frame_transforms/translational_transform_.py +5 -4
  106. luminarycloud/params/simulation/motion_data/frame_transforms_.py +3 -2
  107. luminarycloud/params/simulation/motion_data/motion_type/__init__.py +1 -1
  108. luminarycloud/params/simulation/motion_data/motion_type/constant_angular_motion_.py +5 -4
  109. luminarycloud/params/simulation/motion_data/motion_type/constant_translation_motion_.py +5 -4
  110. luminarycloud/params/simulation/motion_data/motion_type_.py +3 -2
  111. luminarycloud/params/simulation/motion_data_.py +6 -5
  112. luminarycloud/params/simulation/multi_physics_coupling_options_.py +3 -2
  113. luminarycloud/params/simulation/output_.py +3 -2
  114. luminarycloud/params/simulation/particle_group/particle_group_type/__init__.py +1 -1
  115. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +4 -3
  116. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +4 -3
  117. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +3 -2
  118. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +7 -6
  119. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_line_.py +3 -2
  120. luminarycloud/params/simulation/particle_group/particle_group_type/probe_points_.py +5 -4
  121. luminarycloud/params/simulation/particle_group/particle_group_type/source_points_.py +5 -4
  122. luminarycloud/params/simulation/particle_group/particle_group_type_.py +3 -2
  123. luminarycloud/params/simulation/particle_group_.py +4 -3
  124. luminarycloud/params/simulation/physics/__init__.py +3 -3
  125. luminarycloud/params/simulation/physics/fluid/__init__.py +9 -9
  126. luminarycloud/params/simulation/physics/fluid/adjoint_controls_fluid_.py +3 -2
  127. luminarycloud/params/simulation/physics/fluid/basic_fluid_.py +3 -2
  128. luminarycloud/params/simulation/physics/fluid/boundary_conditions/__init__.py +5 -5
  129. luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +5 -4
  130. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/__init__.py +3 -3
  131. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +7 -6
  132. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +5 -4
  133. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +5 -4
  134. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +6 -5
  135. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +5 -4
  136. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +6 -5
  137. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +8 -7
  138. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/__init__.py +1 -1
  139. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +5 -4
  140. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +3 -2
  141. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +3 -2
  142. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +3 -2
  143. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +3 -2
  144. luminarycloud/params/simulation/physics/fluid/boundary_conditions/outlet_.py +6 -5
  145. luminarycloud/params/simulation/physics/fluid/boundary_conditions/symmetry_.py +5 -4
  146. luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +3 -2
  147. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/__init__.py +1 -1
  148. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +3 -2
  149. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +3 -2
  150. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/__init__.py +1 -1
  151. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +3 -2
  152. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/slip_.py +3 -2
  153. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +3 -2
  154. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_energy_.py +3 -2
  155. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall/wall_momentum_.py +3 -2
  156. luminarycloud/params/simulation/physics/fluid/boundary_conditions/wall_.py +7 -6
  157. luminarycloud/params/simulation/physics/fluid/boundary_conditions_fluid_.py +3 -2
  158. luminarycloud/params/simulation/physics/fluid/initialization/__init__.py +2 -2
  159. luminarycloud/params/simulation/physics/fluid/initialization/fluid_existing_solution_.py +5 -4
  160. luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +5 -4
  161. luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +5 -4
  162. luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +3 -2
  163. luminarycloud/params/simulation/physics/fluid/initialization_fluid_.py +3 -2
  164. luminarycloud/params/simulation/physics/fluid/physical_behavior/__init__.py +1 -1
  165. luminarycloud/params/simulation/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +8 -7
  166. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/__init__.py +1 -1
  167. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/__init__.py +2 -2
  168. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +3 -2
  169. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +8 -7
  170. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -3
  171. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +5 -4
  172. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +3 -2
  173. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +3 -2
  174. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +3 -2
  175. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +9 -8
  176. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +4 -3
  177. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -3
  178. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +3 -2
  179. luminarycloud/params/simulation/physics/fluid/physical_behavior/physical_behavior_model_.py +3 -2
  180. luminarycloud/params/simulation/physics/fluid/physical_behavior_.py +5 -4
  181. luminarycloud/params/simulation/physics/fluid/porous_behavior_.py +3 -2
  182. luminarycloud/params/simulation/physics/fluid/solution_controls/__init__.py +1 -1
  183. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +3 -2
  184. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +3 -2
  185. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +3 -2
  186. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +3 -2
  187. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +7 -6
  188. luminarycloud/params/simulation/physics/fluid/solution_controls/fluid_relaxation_method_.py +3 -2
  189. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/__init__.py +1 -1
  190. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +3 -2
  191. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +3 -2
  192. luminarycloud/params/simulation/physics/fluid/solution_controls/pseudo_time_step_method_.py +3 -2
  193. luminarycloud/params/simulation/physics/fluid/solution_controls_fluid_.py +5 -4
  194. luminarycloud/params/simulation/physics/fluid/spatial_discretization/__init__.py +1 -1
  195. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/__init__.py +1 -1
  196. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +3 -2
  197. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/fds_.py +3 -2
  198. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +3 -2
  199. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +3 -2
  200. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_.py +3 -2
  201. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +3 -2
  202. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +3 -2
  203. luminarycloud/params/simulation/physics/fluid/spatial_discretization/convective_scheme_order_.py +3 -2
  204. luminarycloud/params/simulation/physics/fluid/spatial_discretization_fluid_.py +5 -4
  205. luminarycloud/params/simulation/physics/fluid/turbulence/__init__.py +2 -2
  206. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/__init__.py +1 -1
  207. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_.py +3 -2
  208. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +3 -2
  209. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation/iddes_.py +3 -2
  210. luminarycloud/params/simulation/physics/fluid/turbulence/des_formulation_.py +3 -2
  211. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +3 -2
  212. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +3 -2
  213. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +3 -2
  214. luminarycloud/params/simulation/physics/fluid/turbulence/komega_sst_.py +6 -5
  215. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +3 -2
  216. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +3 -2
  217. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +3 -2
  218. luminarycloud/params/simulation/physics/fluid/turbulence/spalart_allmaras_.py +6 -5
  219. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/__init__.py +2 -2
  220. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +3 -2
  221. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +3 -2
  222. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +3 -2
  223. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +3 -2
  224. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +3 -2
  225. luminarycloud/params/simulation/physics/fluid/turbulence/sub_grid_scale_model_.py +3 -2
  226. luminarycloud/params/simulation/physics/fluid/turbulence_.py +6 -5
  227. luminarycloud/params/simulation/physics/fluid_.py +12 -13
  228. luminarycloud/params/simulation/physics/heat/__init__.py +4 -4
  229. luminarycloud/params/simulation/physics/heat/adjoint_controls_heat_.py +3 -2
  230. luminarycloud/params/simulation/physics/heat/boundary_conditions/__init__.py +2 -2
  231. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_convection_.py +5 -4
  232. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +5 -4
  233. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +5 -4
  234. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_symmetry_.py +5 -4
  235. luminarycloud/params/simulation/physics/heat/boundary_conditions/heat_bc_temperature_.py +5 -4
  236. luminarycloud/params/simulation/physics/heat/boundary_conditions_heat_.py +5 -4
  237. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/__init__.py +1 -1
  238. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +3 -2
  239. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +4 -3
  240. luminarycloud/params/simulation/physics/heat/heat_source/heat_source_type_.py +3 -2
  241. luminarycloud/params/simulation/physics/heat/heat_source_.py +6 -5
  242. luminarycloud/params/simulation/physics/heat/initialization/heat_existing_solution_.py +5 -4
  243. luminarycloud/params/simulation/physics/heat/initialization/heat_prescribed_values_.py +5 -4
  244. luminarycloud/params/simulation/physics/heat/initialization_heat_.py +3 -2
  245. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +4 -3
  246. luminarycloud/params/simulation/physics/heat/solution_controls/heat_relaxation_method_.py +3 -2
  247. luminarycloud/params/simulation/physics/heat/solution_controls_heat_.py +4 -3
  248. luminarycloud/params/simulation/physics/heat/spatial_discretization_heat_.py +3 -2
  249. luminarycloud/params/simulation/physics/heat_.py +9 -8
  250. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/__init__.py +1 -1
  251. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +3 -2
  252. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/translational_periodicity_.py +3 -2
  253. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type_.py +3 -2
  254. luminarycloud/params/simulation/physics/periodic_pair_.py +4 -3
  255. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/__init__.py +1 -1
  256. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/gauss_seidel_.py +3 -2
  257. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type/krylov_amg_.py +9 -8
  258. luminarycloud/params/simulation/physics/solution_controls/linear_solver_type_.py +3 -2
  259. luminarycloud/params/simulation/physics_.py +7 -6
  260. luminarycloud/params/simulation/simulation_param_.py +12 -13
  261. luminarycloud/params/simulation/sliding_interfaces_.py +8 -7
  262. luminarycloud/params/simulation/surface_name_.py +3 -2
  263. luminarycloud/params/simulation/time/__init__.py +2 -2
  264. luminarycloud/params/simulation/time/compute_statistics/__init__.py +1 -1
  265. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_off_.py +3 -2
  266. luminarycloud/params/simulation/time/compute_statistics/compute_statistics_on_.py +3 -2
  267. luminarycloud/params/simulation/time/compute_statistics_.py +3 -2
  268. luminarycloud/params/simulation/time/time_marching/time_explicit_.py +3 -2
  269. luminarycloud/params/simulation/time/time_marching/time_implicit_.py +3 -2
  270. luminarycloud/params/simulation/time/time_marching_.py +3 -2
  271. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py +3 -2
  272. luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py +3 -2
  273. luminarycloud/params/simulation/time/time_step_ramp_.py +3 -2
  274. luminarycloud/params/simulation/time_.py +6 -5
  275. luminarycloud/params/simulation/volume_entity_.py +5 -4
  276. luminarycloud/physics_ai/__init__.py +8 -0
  277. luminarycloud/physics_ai/architectures.py +38 -0
  278. luminarycloud/physics_ai/models.py +42 -0
  279. luminarycloud/project.py +73 -21
  280. luminarycloud/reference_values.py +20 -3
  281. luminarycloud/simulation.py +8 -3
  282. luminarycloud/simulation_param.py +136 -29
  283. luminarycloud/simulation_template.py +84 -13
  284. luminarycloud/solution.py +17 -2
  285. luminarycloud/types/__init__.py +1 -0
  286. luminarycloud/types/adfloat.py +49 -19
  287. luminarycloud/types/ids.py +3 -0
  288. luminarycloud/vis/__init__.py +0 -3
  289. luminarycloud/vis/display.py +1 -0
  290. luminarycloud/vis/interactive_scene.py +47 -1
  291. luminarycloud/vis/visualization.py +57 -23
  292. luminarycloud/volume_selection.py +31 -19
  293. {luminarycloud-0.14.0.dist-info → luminarycloud-0.15.0.dist-info}/METADATA +2 -2
  294. {luminarycloud-0.14.0.dist-info → luminarycloud-0.15.0.dist-info}/RECORD +295 -274
  295. {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-2024 Luminary Cloud, Inc. All Rights Reserved.
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")
@@ -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,
@@ -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=_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
+ }
@@ -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
- start_res: uploadpb.StartUploadReply = client.StartUpload(
88
- uploadpb.StartUploadRequest(upload_id=upload_id, method=uploadpb.METHOD_GCS_RESUMABLE)
89
- )
90
- logger.debug(f"started upload")
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
- gcs_resumable_upload(
93
- filepath=pathlib.Path(file_path),
94
- signed_url=start_res.upload.gcs_resumable.signed_url,
95
- http_headers=start_res.upload.gcs_resumable.http_headers,
96
- )
97
- logger.debug(f"successfully uploaded data")
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(f"finished upload")
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: Callable | type[C]) -> Callable | type[C]:
20
+ def decorator(f: C) -> C:
23
21
  if isinstance(f, type):
24
- return _deprecated_class(f, reason, version)
22
+ return _deprecated_class(f, reason)
25
23
  else:
26
- return _deprecated_function(f, reason, version)
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, version: str) -> type[C]:
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 after version {version}: {reason}",
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, version: str) -> Callable:
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 after version {version}: {reason}",
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: Callable | type[C]) -> Callable | type[C]:
10
+ def experimental(f: C) -> C:
11
11
  """Mark a function or class as experimental."""
12
- if isinstance(f, type):
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]: