luminarycloud 0.19.0__py3-none-any.whl → 0.22.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 (110) hide show
  1. luminarycloud/__init__.py +5 -1
  2. luminarycloud/_client/client.py +7 -0
  3. luminarycloud/_client/http_client.py +10 -8
  4. luminarycloud/_feature_flag.py +22 -0
  5. luminarycloud/_helpers/_create_simulation.py +7 -2
  6. luminarycloud/_helpers/_upload_mesh.py +1 -0
  7. luminarycloud/_helpers/_wait_for_mesh.py +6 -5
  8. luminarycloud/_helpers/_wait_for_simulation.py +3 -3
  9. luminarycloud/_helpers/download.py +3 -1
  10. luminarycloud/_helpers/pagination.py +62 -0
  11. luminarycloud/_helpers/proto_decorator.py +13 -5
  12. luminarycloud/_helpers/upload.py +18 -12
  13. luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2.py +55 -0
  14. luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2.pyi +52 -0
  15. luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2_grpc.py +72 -0
  16. luminarycloud/_proto/api/v0/luminarycloud/feature_flag/feature_flag_pb2_grpc.pyi +35 -0
  17. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +168 -124
  18. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +133 -4
  19. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +66 -0
  20. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +20 -0
  21. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.py +8 -8
  22. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.pyi +5 -5
  23. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py +74 -73
  24. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi +17 -3
  25. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +96 -25
  26. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +235 -1
  27. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +34 -0
  28. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +12 -0
  29. luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2.py +16 -16
  30. luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2.pyi +7 -3
  31. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +97 -61
  32. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +77 -4
  33. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.py +34 -0
  34. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.pyi +12 -0
  35. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py +33 -31
  36. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.pyi +23 -2
  37. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +126 -27
  38. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +183 -0
  39. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py +99 -0
  40. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi +30 -0
  41. luminarycloud/_proto/assistant/assistant_pb2.py +74 -41
  42. luminarycloud/_proto/assistant/assistant_pb2.pyi +64 -2
  43. luminarycloud/_proto/assistant/assistant_pb2_grpc.py +33 -0
  44. luminarycloud/_proto/assistant/assistant_pb2_grpc.pyi +10 -0
  45. luminarycloud/_proto/base/base_pb2.py +20 -7
  46. luminarycloud/_proto/base/base_pb2.pyi +38 -0
  47. luminarycloud/_proto/cad/shape_pb2.py +39 -19
  48. luminarycloud/_proto/cad/shape_pb2.pyi +86 -34
  49. luminarycloud/_proto/cad/transformation_pb2.py +60 -16
  50. luminarycloud/_proto/cad/transformation_pb2.pyi +138 -32
  51. luminarycloud/_proto/client/simulation_pb2.py +501 -348
  52. luminarycloud/_proto/client/simulation_pb2.pyi +607 -11
  53. luminarycloud/_proto/geometry/geometry_pb2.py +77 -63
  54. luminarycloud/_proto/geometry/geometry_pb2.pyi +42 -3
  55. luminarycloud/_proto/hexmesh/hexmesh_pb2.py +24 -18
  56. luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +23 -2
  57. luminarycloud/_proto/inferenceservice/inferenceservice_pb2.py +10 -10
  58. luminarycloud/_proto/inferenceservice/inferenceservice_pb2.pyi +5 -5
  59. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +29 -0
  60. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.pyi +7 -0
  61. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +70 -0
  62. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +30 -0
  63. luminarycloud/_proto/quantity/quantity_options_pb2.py +6 -6
  64. luminarycloud/_proto/quantity/quantity_options_pb2.pyi +10 -1
  65. luminarycloud/_proto/quantity/quantity_pb2.py +176 -167
  66. luminarycloud/_proto/quantity/quantity_pb2.pyi +11 -5
  67. luminarycloud/enum/__init__.py +1 -0
  68. luminarycloud/enum/gpu_type.py +2 -0
  69. luminarycloud/enum/quantity_type.py +9 -0
  70. luminarycloud/enum/vis_enums.py +23 -3
  71. luminarycloud/exceptions.py +7 -1
  72. luminarycloud/feature_modification.py +45 -35
  73. luminarycloud/geometry.py +107 -9
  74. luminarycloud/geometry_version.py +57 -3
  75. luminarycloud/mesh.py +1 -2
  76. luminarycloud/meshing/mesh_generation_params.py +8 -8
  77. luminarycloud/params/enum/_enum_wrappers.py +562 -30
  78. luminarycloud/params/simulation/adaptive_mesh_refinement_.py +4 -0
  79. luminarycloud/params/simulation/material/material_solid_.py +15 -1
  80. luminarycloud/params/simulation/physics/__init__.py +0 -1
  81. luminarycloud/params/simulation/physics/periodic_pair_.py +12 -31
  82. luminarycloud/physics_ai/architectures.py +58 -0
  83. luminarycloud/physics_ai/inference.py +13 -13
  84. luminarycloud/physics_ai/solution.py +3 -1
  85. luminarycloud/physics_ai/training_jobs.py +37 -0
  86. luminarycloud/pipelines/__init__.py +11 -3
  87. luminarycloud/pipelines/api.py +248 -16
  88. luminarycloud/pipelines/arguments.py +15 -0
  89. luminarycloud/pipelines/core.py +113 -96
  90. luminarycloud/pipelines/{operators.py → stages.py} +96 -39
  91. luminarycloud/project.py +15 -47
  92. luminarycloud/simulation.py +69 -5
  93. luminarycloud/simulation_param.py +0 -9
  94. luminarycloud/simulation_template.py +2 -1
  95. luminarycloud/types/matrix3.py +12 -0
  96. luminarycloud/vis/__init__.py +17 -0
  97. luminarycloud/vis/data_extraction.py +20 -4
  98. luminarycloud/vis/interactive_report.py +110 -0
  99. luminarycloud/vis/interactive_scene.py +29 -2
  100. luminarycloud/vis/report.py +252 -0
  101. luminarycloud/vis/visualization.py +127 -5
  102. luminarycloud/volume_selection.py +132 -69
  103. {luminarycloud-0.19.0.dist-info → luminarycloud-0.22.0.dist-info}/METADATA +1 -1
  104. {luminarycloud-0.19.0.dist-info → luminarycloud-0.22.0.dist-info}/RECORD +105 -97
  105. luminarycloud/params/simulation/physics/periodic_pair/__init__.py +0 -2
  106. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/__init__.py +0 -2
  107. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +0 -31
  108. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type/translational_periodicity_.py +0 -29
  109. luminarycloud/params/simulation/physics/periodic_pair/periodicity_type_.py +0 -25
  110. {luminarycloud-0.19.0.dist-info → luminarycloud-0.22.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,70 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+
5
+ from luminarycloud._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2
6
+
7
+
8
+ class PhysicsAiTrainingServiceStub(object):
9
+ """PhysicsAiTrainingService provides training functionality for Physics AI
10
+ """
11
+
12
+ def __init__(self, channel):
13
+ """Constructor.
14
+
15
+ Args:
16
+ channel: A grpc.Channel.
17
+ """
18
+ self.SubmitTrainingJob = channel.unary_unary(
19
+ '/luminary.proto.physicsaitrainingservice.PhysicsAiTrainingService/SubmitTrainingJob',
20
+ request_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobRequest.SerializeToString,
21
+ response_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobResponse.FromString,
22
+ )
23
+
24
+
25
+ class PhysicsAiTrainingServiceServicer(object):
26
+ """PhysicsAiTrainingService provides training functionality for Physics AI
27
+ """
28
+
29
+ def SubmitTrainingJob(self, request, context):
30
+ """Submit a physics AI training job
31
+ """
32
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
33
+ context.set_details('Method not implemented!')
34
+ raise NotImplementedError('Method not implemented!')
35
+
36
+
37
+ def add_PhysicsAiTrainingServiceServicer_to_server(servicer, server):
38
+ rpc_method_handlers = {
39
+ 'SubmitTrainingJob': grpc.unary_unary_rpc_method_handler(
40
+ servicer.SubmitTrainingJob,
41
+ request_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobRequest.FromString,
42
+ response_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobResponse.SerializeToString,
43
+ ),
44
+ }
45
+ generic_handler = grpc.method_handlers_generic_handler(
46
+ 'luminary.proto.physicsaitrainingservice.PhysicsAiTrainingService', rpc_method_handlers)
47
+ server.add_generic_rpc_handlers((generic_handler,))
48
+
49
+
50
+ # This class is part of an EXPERIMENTAL API.
51
+ class PhysicsAiTrainingService(object):
52
+ """PhysicsAiTrainingService provides training functionality for Physics AI
53
+ """
54
+
55
+ @staticmethod
56
+ def SubmitTrainingJob(request,
57
+ target,
58
+ options=(),
59
+ channel_credentials=None,
60
+ call_credentials=None,
61
+ insecure=False,
62
+ compression=None,
63
+ wait_for_ready=None,
64
+ timeout=None,
65
+ metadata=None):
66
+ return grpc.experimental.unary_unary(request, target, '/luminary.proto.physicsaitrainingservice.PhysicsAiTrainingService/SubmitTrainingJob',
67
+ proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobRequest.SerializeToString,
68
+ proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobResponse.FromString,
69
+ options, channel_credentials,
70
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -0,0 +1,30 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ Copyright 2025 Luminary Cloud, Inc. All Rights Reserved."""
5
+ import abc
6
+ import grpc
7
+ import luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2
8
+
9
+ class PhysicsAiTrainingServiceStub:
10
+ """PhysicsAiTrainingService provides training functionality for Physics AI"""
11
+
12
+ def __init__(self, channel: grpc.Channel) -> None: ...
13
+ SubmitTrainingJob: grpc.UnaryUnaryMultiCallable[
14
+ luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobRequest,
15
+ luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobResponse,
16
+ ]
17
+ """Submit a physics AI training job"""
18
+
19
+ class PhysicsAiTrainingServiceServicer(metaclass=abc.ABCMeta):
20
+ """PhysicsAiTrainingService provides training functionality for Physics AI"""
21
+
22
+ @abc.abstractmethod
23
+ def SubmitTrainingJob(
24
+ self,
25
+ request: luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobRequest,
26
+ context: grpc.ServicerContext,
27
+ ) -> luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobResponse:
28
+ """Submit a physics AI training job"""
29
+
30
+ def add_PhysicsAiTrainingServiceServicer_to_server(servicer: PhysicsAiTrainingServiceServicer, server: grpc.Server) -> None: ...
@@ -16,7 +16,7 @@ _sym_db = _symbol_database.Default()
16
16
  from luminarycloud._proto.condition import condition_pb2 as proto_dot_condition_dot_condition__pb2
17
17
 
18
18
 
19
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%proto/quantity/quantity_options.proto\x12\x17luminary.proto.quantity\x1a\x1fproto/condition/condition.proto\":\n\x04Tags\x12\x32\n\x04vals\x18\x01 \x03(\x0e\x32$.luminary.proto.quantity.QuantityTag\"\x18\n\x08\x43hildren\x12\x0c\n\x04vals\x18\x01 \x03(\x05\"\x17\n\x07Parents\x12\x0c\n\x04vals\x18\x01 \x03(\x05\"\"\n\x12\x43onditionalParents\x12\x0c\n\x04vals\x18\x01 \x03(\x05\"\xac\x03\n\x08Quantity\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x0c\n\x04unit\x18\x04 \x01(\t\x12+\n\x04tags\x18\x05 \x01(\x0b\x32\x1d.luminary.proto.quantity.Tags\x12\x0c\n\x04help\x18\x06 \x01(\t\x12\x30\n\x05\x63hild\x18\x07 \x01(\x0b\x32!.luminary.proto.quantity.Children\x12\x30\n\x06parent\x18\t \x01(\x0b\x32 .luminary.proto.quantity.Parents\x12G\n\x12\x63onditional_parent\x18\n \x01(\x0b\x32+.luminary.proto.quantity.ConditionalParents\x12\x31\n\x04\x63ond\x18\x08 \x01(\x0b\x32#.luminary.proto.condition.Condition\x12\x34\n\tunit_type\x18\x0b \x01(\x0e\x32!.luminary.proto.quantity.UnitType\x12\x17\n\x0funit_derivation\x18\x0c \x01(\t*\x90\x04\n\x0bQuantityTag\x12\x0f\n\x0bTAG_INVALID\x10\x00\x12\r\n\tTAG_BASIC\x10\x01\x12\r\n\tTAG_FIELD\x10\x02\x12\r\n\tTAG_FORCE\x10\x03\x12\x0e\n\nTAG_MOMENT\x10\x04\x12\x10\n\x0cTAG_EXTERNAL\x10\x05\x12\x14\n\x10TAG_AERODYNAMICS\x10\x06\x12\x10\n\x0cTAG_INTERNAL\x10\x07\x12\x0e\n\nTAG_TORQUE\x10\x08\x12\x0c\n\x08TAG_DROP\x10\t\x12\x16\n\x12TAG_AUTO_DIRECTION\x10\n\x12\x13\n\x0fTAG_COEFFICIENT\x10\x0b\x12\x18\n\x14TAG_ANALYZER_AVERAGE\x10\x0c\x12\x17\n\x13TAG_ANALYZER_FORCES\x10\r\x12\x14\n\x10TAG_TIME_AVERAGE\x10\x0e\x12\x10\n\x0cTAG_RESIDUAL\x10\x0f\x12\x19\n\x15TAG_ANALYZER_RESIDUAL\x10\x10\x12\x16\n\x12TAG_ANALYZER_BASIC\x10\x11\x12\x12\n\x0eTAG_TURBULENCE\x10\x12\x12\x13\n\x0fTAG_POINT_PROBE\x10\x13\x12\x1b\n\x17TAG_HIDDEN_SOLVER_STATE\x10\x14\x12\x15\n\x11TAG_SURFACE_FIELD\x10\x15\x12\x15\n\x11TAG_ACTUATOR_DISK\x10\x16\x12\x17\n\x13TAG_ANALYZER_VOLUME\x10\x17\x12\x13\n\x0fTAG_AERO_MOMENT\x10\x18*\x8f\x03\n\x08UnitType\x12\x10\n\x0cUNIT_INVALID\x10\x00\x12\x16\n\x12UNIT_DIMENSIONLESS\x10\x01\x12\x14\n\x10UNIT_TEMPERATURE\x10\x02\x12\r\n\tUNIT_MASS\x10\x03\x12\x0f\n\x0bUNIT_LENGTH\x10\x04\x12\x0e\n\nUNIT_ANGLE\x10\x05\x12\r\n\tUNIT_TIME\x10\x06\x12\x11\n\rUNIT_VELOCITY\x10\x07\x12\x19\n\x15UNIT_ANGULAR_VELOCITY\x10\x08\x12\x0e\n\nUNIT_FORCE\x10\t\x12\x0f\n\x0bUNIT_MOMENT\x10\n\x12\x11\n\rUNIT_PRESSURE\x10\x0b\x12\x0f\n\x0bUNIT_ENERGY\x10\x0c\x12\x0e\n\nUNIT_POWER\x10\r\x12\x0f\n\x0bUNIT_VOLUME\x10\x0e\x12\x18\n\x14UNIT_VOLUMETRIC_FLOW\x10\x0f\x12\x12\n\x0eUNIT_VISCOSITY\x10\x10\x12\x15\n\x11UNIT_CONDUCTIVITY\x10\x11\x12\x19\n\x15UNIT_MOLECULAR_WEIGHT\x10\x12\x12\x10\n\x0cUNIT_DERIVED\x10\x13\x42\'Z%luminarycloud.com/core/proto/quantityb\x06proto3')
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%proto/quantity/quantity_options.proto\x12\x17luminary.proto.quantity\x1a\x1fproto/condition/condition.proto\":\n\x04Tags\x12\x32\n\x04vals\x18\x01 \x03(\x0e\x32$.luminary.proto.quantity.QuantityTag\"\x18\n\x08\x43hildren\x12\x0c\n\x04vals\x18\x01 \x03(\x05\"\x17\n\x07Parents\x12\x0c\n\x04vals\x18\x01 \x03(\x05\"\"\n\x12\x43onditionalParents\x12\x0c\n\x04vals\x18\x01 \x03(\x05\"\xc7\x03\n\x08Quantity\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x0c\n\x04unit\x18\x04 \x01(\t\x12+\n\x04tags\x18\x05 \x01(\x0b\x32\x1d.luminary.proto.quantity.Tags\x12\x0c\n\x04help\x18\x06 \x01(\t\x12\x30\n\x05\x63hild\x18\x07 \x01(\x0b\x32!.luminary.proto.quantity.Children\x12\x30\n\x06parent\x18\t \x01(\x0b\x32 .luminary.proto.quantity.Parents\x12G\n\x12\x63onditional_parent\x18\n \x01(\x0b\x32+.luminary.proto.quantity.ConditionalParents\x12\x31\n\x04\x63ond\x18\x08 \x01(\x0b\x32#.luminary.proto.condition.Condition\x12\x34\n\tunit_type\x18\x0b \x01(\x0e\x32!.luminary.proto.quantity.UnitType\x12\x17\n\x0funit_derivation\x18\x0c \x01(\t\x12\x19\n\x11unit_presentation\x18\r \x01(\t*\x90\x04\n\x0bQuantityTag\x12\x0f\n\x0bTAG_INVALID\x10\x00\x12\r\n\tTAG_BASIC\x10\x01\x12\r\n\tTAG_FIELD\x10\x02\x12\r\n\tTAG_FORCE\x10\x03\x12\x0e\n\nTAG_MOMENT\x10\x04\x12\x10\n\x0cTAG_EXTERNAL\x10\x05\x12\x14\n\x10TAG_AERODYNAMICS\x10\x06\x12\x10\n\x0cTAG_INTERNAL\x10\x07\x12\x0e\n\nTAG_TORQUE\x10\x08\x12\x0c\n\x08TAG_DROP\x10\t\x12\x16\n\x12TAG_AUTO_DIRECTION\x10\n\x12\x13\n\x0fTAG_COEFFICIENT\x10\x0b\x12\x18\n\x14TAG_ANALYZER_AVERAGE\x10\x0c\x12\x17\n\x13TAG_ANALYZER_FORCES\x10\r\x12\x14\n\x10TAG_TIME_AVERAGE\x10\x0e\x12\x10\n\x0cTAG_RESIDUAL\x10\x0f\x12\x19\n\x15TAG_ANALYZER_RESIDUAL\x10\x10\x12\x16\n\x12TAG_ANALYZER_BASIC\x10\x11\x12\x12\n\x0eTAG_TURBULENCE\x10\x12\x12\x13\n\x0fTAG_POINT_PROBE\x10\x13\x12\x1b\n\x17TAG_HIDDEN_SOLVER_STATE\x10\x14\x12\x15\n\x11TAG_SURFACE_FIELD\x10\x15\x12\x15\n\x11TAG_ACTUATOR_DISK\x10\x16\x12\x17\n\x13TAG_ANALYZER_VOLUME\x10\x17\x12\x13\n\x0fTAG_AERO_MOMENT\x10\x18*\x8f\x03\n\x08UnitType\x12\x10\n\x0cUNIT_INVALID\x10\x00\x12\x16\n\x12UNIT_DIMENSIONLESS\x10\x01\x12\x14\n\x10UNIT_TEMPERATURE\x10\x02\x12\r\n\tUNIT_MASS\x10\x03\x12\x0f\n\x0bUNIT_LENGTH\x10\x04\x12\x0e\n\nUNIT_ANGLE\x10\x05\x12\r\n\tUNIT_TIME\x10\x06\x12\x11\n\rUNIT_VELOCITY\x10\x07\x12\x19\n\x15UNIT_ANGULAR_VELOCITY\x10\x08\x12\x0e\n\nUNIT_FORCE\x10\t\x12\x0f\n\x0bUNIT_MOMENT\x10\n\x12\x11\n\rUNIT_PRESSURE\x10\x0b\x12\x0f\n\x0bUNIT_ENERGY\x10\x0c\x12\x0e\n\nUNIT_POWER\x10\r\x12\x0f\n\x0bUNIT_VOLUME\x10\x0e\x12\x18\n\x14UNIT_VOLUMETRIC_FLOW\x10\x0f\x12\x12\n\x0eUNIT_VISCOSITY\x10\x10\x12\x15\n\x11UNIT_CONDUCTIVITY\x10\x11\x12\x19\n\x15UNIT_MOLECULAR_WEIGHT\x10\x12\x12\x10\n\x0cUNIT_DERIVED\x10\x13\x42\'Z%luminarycloud.com/core/proto/quantityb\x06proto3')
20
20
 
21
21
  _QUANTITYTAG = DESCRIPTOR.enum_types_by_name['QuantityTag']
22
22
  QuantityTag = enum_type_wrapper.EnumTypeWrapper(_QUANTITYTAG)
@@ -113,10 +113,10 @@ if _descriptor._USE_C_DESCRIPTORS == False:
113
113
 
114
114
  DESCRIPTOR._options = None
115
115
  DESCRIPTOR._serialized_options = b'Z%luminarycloud.com/core/proto/quantity'
116
- _QUANTITYTAG._serialized_start=678
117
- _QUANTITYTAG._serialized_end=1206
118
- _UNITTYPE._serialized_start=1209
119
- _UNITTYPE._serialized_end=1608
116
+ _QUANTITYTAG._serialized_start=705
117
+ _QUANTITYTAG._serialized_end=1233
118
+ _UNITTYPE._serialized_start=1236
119
+ _UNITTYPE._serialized_end=1635
120
120
  _TAGS._serialized_start=99
121
121
  _TAGS._serialized_end=157
122
122
  _CHILDREN._serialized_start=159
@@ -126,5 +126,5 @@ if _descriptor._USE_C_DESCRIPTORS == False:
126
126
  _CONDITIONALPARENTS._serialized_start=210
127
127
  _CONDITIONALPARENTS._serialized_end=244
128
128
  _QUANTITY._serialized_start=247
129
- _QUANTITY._serialized_end=675
129
+ _QUANTITY._serialized_end=702
130
130
  # @@protoc_insertion_point(module_scope)
@@ -266,6 +266,7 @@ class Quantity(google.protobuf.message.Message):
266
266
  COND_FIELD_NUMBER: builtins.int
267
267
  UNIT_TYPE_FIELD_NUMBER: builtins.int
268
268
  UNIT_DERIVATION_FIELD_NUMBER: builtins.int
269
+ UNIT_PRESENTATION_FIELD_NUMBER: builtins.int
269
270
  name: builtins.str
270
271
  """Internal name of the quantity."""
271
272
  text: builtins.str
@@ -300,6 +301,13 @@ class Quantity(google.protobuf.message.Message):
300
301
  def cond(self) -> luminarycloud._proto.condition.condition_pb2.Condition: ...
301
302
  unit_type: global___UnitType.ValueType
302
303
  unit_derivation: builtins.str
304
+ """Expression for the backend to determine the conversion factor for derived units.
305
+ For example: "POWER/pow(LENGTH, 3)" or "HEAT_FLUX_CONVENTION * POWER / pow(LENGTH, 2)"
306
+ """
307
+ unit_presentation: builtins.str
308
+ """Unit presentation used for display in the frontend
309
+ For example: POWER/LENGTH²
310
+ """
303
311
  def __init__(
304
312
  self,
305
313
  *,
@@ -315,8 +323,9 @@ class Quantity(google.protobuf.message.Message):
315
323
  cond: luminarycloud._proto.condition.condition_pb2.Condition | None = ...,
316
324
  unit_type: global___UnitType.ValueType = ...,
317
325
  unit_derivation: builtins.str = ...,
326
+ unit_presentation: builtins.str = ...,
318
327
  ) -> None: ...
319
328
  def HasField(self, field_name: typing_extensions.Literal["child", b"child", "cond", b"cond", "conditional_parent", b"conditional_parent", "parent", b"parent", "tags", b"tags"]) -> builtins.bool: ...
320
- def ClearField(self, field_name: typing_extensions.Literal["child", b"child", "cond", b"cond", "conditional_parent", b"conditional_parent", "help", b"help", "name", b"name", "parent", b"parent", "size", b"size", "tags", b"tags", "text", b"text", "unit", b"unit", "unit_derivation", b"unit_derivation", "unit_type", b"unit_type"]) -> None: ...
329
+ def ClearField(self, field_name: typing_extensions.Literal["child", b"child", "cond", b"cond", "conditional_parent", b"conditional_parent", "help", b"help", "name", b"name", "parent", b"parent", "size", b"size", "tags", b"tags", "text", b"text", "unit", b"unit", "unit_derivation", b"unit_derivation", "unit_presentation", b"unit_presentation", "unit_type", b"unit_type"]) -> None: ...
321
330
 
322
331
  global___Quantity = Quantity