luminarycloud 0.19.0__py3-none-any.whl → 0.19.1__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 (22) hide show
  1. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +83 -25
  2. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +214 -0
  3. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +34 -0
  4. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +12 -0
  5. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +60 -60
  6. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +5 -1
  7. luminarycloud/_proto/client/simulation_pb2.py +342 -331
  8. luminarycloud/_proto/client/simulation_pb2.pyi +37 -3
  9. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +29 -0
  10. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.pyi +7 -0
  11. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +70 -0
  12. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +30 -0
  13. luminarycloud/params/enum/_enum_wrappers.py +25 -0
  14. luminarycloud/params/simulation/material/material_solid_.py +15 -1
  15. luminarycloud/physics_ai/architectures.py +58 -0
  16. luminarycloud/physics_ai/training_jobs.py +37 -0
  17. luminarycloud/pipelines/api.py +7 -6
  18. luminarycloud/simulation.py +2 -0
  19. luminarycloud/simulation_template.py +2 -1
  20. {luminarycloud-0.19.0.dist-info → luminarycloud-0.19.1.dist-info}/METADATA +1 -1
  21. {luminarycloud-0.19.0.dist-info → luminarycloud-0.19.1.dist-info}/RECORD +22 -17
  22. {luminarycloud-0.19.0.dist-info → luminarycloud-0.19.1.dist-info}/WHEEL +0 -0
@@ -599,6 +599,31 @@ TEMPERATURE_DEPENDENT_LAMINAR_VISCOSITY: LaminarViscosityModelNewtonian.ValueTyp
599
599
  """Tabulated dynamic viscosity values vs temperature."""
600
600
  global___LaminarViscosityModelNewtonian = LaminarViscosityModelNewtonian
601
601
 
602
+ class _ThermalConductivityModelSolid:
603
+ ValueType = typing.NewType("ValueType", builtins.int)
604
+ V: typing_extensions.TypeAlias = ValueType
605
+
606
+ class _ThermalConductivityModelSolidEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ThermalConductivityModelSolid.ValueType], builtins.type): # noqa: F821
607
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
608
+ INVALID_THERMAL_CONDUCTIVITY_MODEL_SOLID: _ThermalConductivityModelSolid.ValueType # 0
609
+ ISOTROPIC_CONDUCTIVITY: _ThermalConductivityModelSolid.ValueType # 52316
610
+ """Equal thermal conductivity in all directions."""
611
+ ORTHOTROPIC_CONDUCTIVITY: _ThermalConductivityModelSolid.ValueType # 60601
612
+ """Different thermal conductivity along each axis of the frames to which
613
+ the volumes of this material are assigned.
614
+ """
615
+
616
+ class ThermalConductivityModelSolid(_ThermalConductivityModelSolid, metaclass=_ThermalConductivityModelSolidEnumTypeWrapper): ...
617
+
618
+ INVALID_THERMAL_CONDUCTIVITY_MODEL_SOLID: ThermalConductivityModelSolid.ValueType # 0
619
+ ISOTROPIC_CONDUCTIVITY: ThermalConductivityModelSolid.ValueType # 52316
620
+ """Equal thermal conductivity in all directions."""
621
+ ORTHOTROPIC_CONDUCTIVITY: ThermalConductivityModelSolid.ValueType # 60601
622
+ """Different thermal conductivity along each axis of the frames to which
623
+ the volumes of this material are assigned.
624
+ """
625
+ global___ThermalConductivityModelSolid = ThermalConductivityModelSolid
626
+
602
627
  class _MaterialSolidPreset:
603
628
  ValueType = typing.NewType("ValueType", builtins.int)
604
629
  V: typing_extensions.TypeAlias = ValueType
@@ -3086,7 +3111,9 @@ class MaterialSolid(google.protobuf.message.Message):
3086
3111
 
3087
3112
  CONSTANT_DENSITY_VALUE_SOLID_FIELD_NUMBER: builtins.int
3088
3113
  SPECIFIC_HEAT_CP_SOLID_FIELD_NUMBER: builtins.int
3114
+ THERMAL_CONDUCTIVITY_MODEL_SOLID_FIELD_NUMBER: builtins.int
3089
3115
  THERMAL_CONDUCTIVITY_CONSTANT_SOLID_FIELD_NUMBER: builtins.int
3116
+ THERMAL_CONDUCTIVITY_ORTHOTROPIC_SOLID_FIELD_NUMBER: builtins.int
3090
3117
  THERMAL_CONDUCTIVITY_TABLE_DATA_FIELD_NUMBER: builtins.int
3091
3118
  MATERIAL_SOLID_PRESET_FIELD_NUMBER: builtins.int
3092
3119
  @property
@@ -3094,10 +3121,15 @@ class MaterialSolid(google.protobuf.message.Message):
3094
3121
  """Constant density value."""
3095
3122
  @property
3096
3123
  def specific_heat_cp_solid(self) -> luminarycloud._proto.base.base_pb2.AdFloatType:
3097
- """Specific heat at constant pressure."""
3124
+ """Specific heat."""
3125
+ thermal_conductivity_model_solid: global___ThermalConductivityModelSolid.ValueType
3126
+ """Uniform or direction-dependent conductivity models."""
3098
3127
  @property
3099
3128
  def thermal_conductivity_constant_solid(self) -> luminarycloud._proto.base.base_pb2.AdFloatType:
3100
3129
  """The thermal conductivity of the material."""
3130
+ @property
3131
+ def thermal_conductivity_orthotropic_solid(self) -> luminarycloud._proto.base.base_pb2.AdVector3:
3132
+ """The thermal conductivities of the material along each axis."""
3101
3133
  thermal_conductivity_table_data: builtins.str
3102
3134
  """Correlation between thermal conductivity and temperature."""
3103
3135
  material_solid_preset: global___MaterialSolidPreset.ValueType
@@ -3107,12 +3139,14 @@ class MaterialSolid(google.protobuf.message.Message):
3107
3139
  *,
3108
3140
  constant_density_value_solid: luminarycloud._proto.base.base_pb2.AdFloatType | None = ...,
3109
3141
  specific_heat_cp_solid: luminarycloud._proto.base.base_pb2.AdFloatType | None = ...,
3142
+ thermal_conductivity_model_solid: global___ThermalConductivityModelSolid.ValueType = ...,
3110
3143
  thermal_conductivity_constant_solid: luminarycloud._proto.base.base_pb2.AdFloatType | None = ...,
3144
+ thermal_conductivity_orthotropic_solid: luminarycloud._proto.base.base_pb2.AdVector3 | None = ...,
3111
3145
  thermal_conductivity_table_data: builtins.str = ...,
3112
3146
  material_solid_preset: global___MaterialSolidPreset.ValueType = ...,
3113
3147
  ) -> None: ...
3114
- def HasField(self, field_name: typing_extensions.Literal["constant_density_value_solid", b"constant_density_value_solid", "specific_heat_cp_solid", b"specific_heat_cp_solid", "thermal_conductivity_constant_solid", b"thermal_conductivity_constant_solid"]) -> builtins.bool: ...
3115
- def ClearField(self, field_name: typing_extensions.Literal["constant_density_value_solid", b"constant_density_value_solid", "material_solid_preset", b"material_solid_preset", "specific_heat_cp_solid", b"specific_heat_cp_solid", "thermal_conductivity_constant_solid", b"thermal_conductivity_constant_solid", "thermal_conductivity_table_data", b"thermal_conductivity_table_data"]) -> None: ...
3148
+ def HasField(self, field_name: typing_extensions.Literal["constant_density_value_solid", b"constant_density_value_solid", "specific_heat_cp_solid", b"specific_heat_cp_solid", "thermal_conductivity_constant_solid", b"thermal_conductivity_constant_solid", "thermal_conductivity_orthotropic_solid", b"thermal_conductivity_orthotropic_solid"]) -> builtins.bool: ...
3149
+ def ClearField(self, field_name: typing_extensions.Literal["constant_density_value_solid", b"constant_density_value_solid", "material_solid_preset", b"material_solid_preset", "specific_heat_cp_solid", b"specific_heat_cp_solid", "thermal_conductivity_constant_solid", b"thermal_conductivity_constant_solid", "thermal_conductivity_model_solid", b"thermal_conductivity_model_solid", "thermal_conductivity_orthotropic_solid", b"thermal_conductivity_orthotropic_solid", "thermal_conductivity_table_data", b"thermal_conductivity_table_data"]) -> None: ...
3116
3150
 
3117
3151
  global___MaterialSolid = MaterialSolid
3118
3152
 
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: proto/physicsaitrainingservice/physicsaitrainingservice.proto
4
+ """Generated protocol buffer code."""
5
+ from google.protobuf import descriptor as _descriptor
6
+ from google.protobuf import descriptor_pool as _descriptor_pool
7
+ from google.protobuf import message as _message
8
+ from google.protobuf import reflection as _reflection
9
+ from google.protobuf import symbol_database as _symbol_database
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ 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
16
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n=proto/physicsaitrainingservice/physicsaitrainingservice.proto\x12\'luminary.proto.physicsaitrainingservice\x1a\x36proto/api/v0/luminarycloud/physics_ai/physics_ai.proto2\xc7\x01\n\x18PhysicsAiTrainingService\x12\xaa\x01\n\x11SubmitTrainingJob\x12H.luminary.proto.api.v0.luminarycloud.physics_ai.SubmitTrainingJobRequest\x1aI.luminary.proto.api.v0.luminarycloud.physics_ai.SubmitTrainingJobResponse\"\x00\x42\x37Z5luminarycloud.com/core/proto/physicsaitrainingserviceb\x06proto3')
19
+
20
+
21
+
22
+ _PHYSICSAITRAININGSERVICE = DESCRIPTOR.services_by_name['PhysicsAiTrainingService']
23
+ if _descriptor._USE_C_DESCRIPTORS == False:
24
+
25
+ DESCRIPTOR._options = None
26
+ DESCRIPTOR._serialized_options = b'Z5luminarycloud.com/core/proto/physicsaitrainingservice'
27
+ _PHYSICSAITRAININGSERVICE._serialized_start=163
28
+ _PHYSICSAITRAININGSERVICE._serialized_end=362
29
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,7 @@
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 google.protobuf.descriptor
6
+
7
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
@@ -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: ...
@@ -541,6 +541,31 @@ class MaterialFluidPreset(_IntEnum):
541
541
  CUSTOM_MATERIAL_FLUID = _clientpb.CUSTOM_MATERIAL_FLUID
542
542
 
543
543
 
544
+ class ThermalConductivityModelSolid(_IntEnum):
545
+ """
546
+ Uniform or direction-dependent conductivity models.
547
+
548
+ Attributes
549
+ ----------
550
+ ISOTROPIC_CONDUCTIVITY
551
+ Equal thermal conductivity in all directions.
552
+ ORTHOTROPIC_CONDUCTIVITY
553
+ Different thermal conductivity along each axis of the frames to which
554
+ the volumes of this material are assigned.
555
+
556
+
557
+ Examples
558
+ --------
559
+ >>> from luminarycloud.params.enum import ThermalConductivityModelSolid
560
+ >>> ThermalConductivityModelSolid.ISOTROPIC_CONDUCTIVITY
561
+ >>> ThermalConductivityModelSolid.ORTHOTROPIC_CONDUCTIVITY
562
+ """
563
+
564
+ INVALID = _clientpb.INVALID_THERMAL_CONDUCTIVITY_MODEL_SOLID
565
+ ISOTROPIC_CONDUCTIVITY = _clientpb.ISOTROPIC_CONDUCTIVITY
566
+ ORTHOTROPIC_CONDUCTIVITY = _clientpb.ORTHOTROPIC_CONDUCTIVITY
567
+
568
+
544
569
  class MaterialSolidPreset(_IntEnum):
545
570
  """
546
571
  Select a predefined set of material properties or allow a custom set of properties.
@@ -25,9 +25,15 @@ class MaterialSolid(CodeRepr, ParamGroupWrapper[clientpb.MaterialSolid]):
25
25
  density: LcFloat = 2700
26
26
  "Constant density value."
27
27
  specific_heat_cp: LcFloat = 896
28
- "Specific heat at constant pressure."
28
+ "Specific heat."
29
+ conductivity_model: enum.ThermalConductivityModelSolid = (
30
+ enum.ThermalConductivityModelSolid.ISOTROPIC_CONDUCTIVITY
31
+ )
32
+ "Uniform or direction-dependent conductivity models."
29
33
  thermal_conductivity: LcFloat = 167
30
34
  "The thermal conductivity of the material."
35
+ orthotropic_conductivity: Vector3 = field(default_factory=lambda: Vector3(167, 167, 167))
36
+ "The thermal conductivities of the material along each axis."
31
37
  thermal_conductivity_table: RectilinearTable | None = None
32
38
  "Correlation between thermal conductivity and temperature."
33
39
  preset: enum.MaterialSolidPreset = enum.MaterialSolidPreset.ALUMINUM
@@ -37,7 +43,11 @@ class MaterialSolid(CodeRepr, ParamGroupWrapper[clientpb.MaterialSolid]):
37
43
  _proto = clientpb.MaterialSolid()
38
44
  _proto.constant_density_value_solid.CopyFrom(_to_ad_proto(self.density))
39
45
  _proto.specific_heat_cp_solid.CopyFrom(_to_ad_proto(self.specific_heat_cp))
46
+ _proto.thermal_conductivity_model_solid = self.conductivity_model.value
40
47
  _proto.thermal_conductivity_constant_solid.CopyFrom(_to_ad_proto(self.thermal_conductivity))
48
+ _proto.thermal_conductivity_orthotropic_solid.CopyFrom(
49
+ self.orthotropic_conductivity._to_ad_proto()
50
+ )
41
51
  if self.thermal_conductivity_table is not None:
42
52
  if self.thermal_conductivity_table.table_type != _param_name_to_table_type(
43
53
  "thermal_conductivity_table_data"
@@ -50,7 +60,11 @@ class MaterialSolid(CodeRepr, ParamGroupWrapper[clientpb.MaterialSolid]):
50
60
  def _from_proto(self, proto: clientpb.MaterialSolid) -> None:
51
61
  self.density = _from_ad_proto(proto.constant_density_value_solid)
52
62
  self.specific_heat_cp = _from_ad_proto(proto.specific_heat_cp_solid)
63
+ self.conductivity_model = enum.ThermalConductivityModelSolid(
64
+ proto.thermal_conductivity_model_solid
65
+ )
53
66
  self.thermal_conductivity = _from_ad_proto(proto.thermal_conductivity_constant_solid)
67
+ self.orthotropic_conductivity._from_ad_proto(proto.thermal_conductivity_orthotropic_solid)
54
68
  if proto.thermal_conductivity_table_data != "":
55
69
  self.thermal_conductivity_table = RectilinearTable(
56
70
  id=proto.thermal_conductivity_table_data,
@@ -1,5 +1,6 @@
1
1
  # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
2
2
  from typing import List, Optional
3
+ import json
3
4
 
4
5
  from .._client import get_default_client
5
6
  from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
@@ -7,6 +8,8 @@ from .._wrapper import ProtoWrapper, ProtoWrapperBase
7
8
  from ..types.ids import PhysicsAiArchitectureID, PhysicsAiArchitectureVersionID
8
9
  from ..enum.physics_ai_lifecycle_state import PhysicsAiLifecycleState
9
10
 
11
+ from .training_jobs import PhysicsAiTrainingJob
12
+
10
13
 
11
14
  @ProtoWrapper(physaipb.PhysicsAiArchitectureVersion)
12
15
  class PhysicsAiArchitectureVersion(ProtoWrapperBase):
@@ -18,10 +21,65 @@ class PhysicsAiArchitectureVersion(ProtoWrapperBase):
18
21
 
19
22
  id: PhysicsAiArchitectureVersionID
20
23
  name: str
24
+ architecture_name: str
21
25
  changelog: str
22
26
  lifecycle_state: PhysicsAiLifecycleState
23
27
  _proto: physaipb.PhysicsAiArchitectureVersion
24
28
 
29
+ def get_training_description(self, config: dict) -> str:
30
+ if config.get("description"):
31
+ return config["description"]
32
+
33
+ desc = f"Training job for architecture {self.name}"
34
+ if config.get("custom_args"):
35
+ desc += f" with custom args: {config['custom_args']}"
36
+ return desc
37
+
38
+ def train(self, config: dict) -> PhysicsAiTrainingJob:
39
+ """
40
+ Submit a training job for this architecture version.
41
+
42
+ Parameters
43
+ ----------
44
+ config : dict, optional
45
+ Training configuration dictionary
46
+
47
+ Returns
48
+ -------
49
+ PhysicsAiTrainingJob
50
+ The submitted training job object
51
+ """
52
+
53
+ if "custom_args" not in config:
54
+ config["custom_args"] = ""
55
+ if "priority_class" not in config:
56
+ config["priority_class"] = "prod-batch-priority"
57
+ if "resources" not in config:
58
+ config["resources"] = {}
59
+ if "process_gpus" not in config["resources"]:
60
+ config["resources"]["process_gpus"] = 8
61
+ if "train_gpus" not in config["resources"]:
62
+ config["resources"]["train_gpus"] = 8
63
+ if "test_gpus" not in config["resources"]:
64
+ config["resources"]["test_gpus"] = 8
65
+ if "mode" not in config:
66
+ config["mode"] = "full-gpu"
67
+
68
+ training_config_json = json.dumps(config, indent=2)
69
+ external_dataset_uri = f"gs://training-data/architecture-{self.id}"
70
+ req = physaipb.SubmitTrainingJobRequest(
71
+ architecture_version_id=self.id,
72
+ training_description=self.get_training_description(config),
73
+ external_dataset_uri=external_dataset_uri,
74
+ training_config=training_config_json,
75
+ initialization_type=physaipb.MODEL_INITIALIZATION_TYPE_RANDOM,
76
+ base_model_version_id="",
77
+ )
78
+
79
+ response = get_default_client().SubmitTrainingJob(req)
80
+
81
+ return PhysicsAiTrainingJob(response.training_job)
82
+
25
83
 
26
84
  @ProtoWrapper(physaipb.PhysicsAiArchitecture)
27
85
  class PhysicsAiArchitecture(ProtoWrapperBase):
@@ -0,0 +1,37 @@
1
+ # Copyright 2025 Luminary Cloud, Inc. All Rights Reserved.
2
+ from typing import List, Optional
3
+ from datetime import datetime
4
+
5
+ from .._client import get_default_client
6
+ from .._proto.api.v0.luminarycloud.physics_ai import physics_ai_pb2 as physaipb
7
+ from .._proto.base import base_pb2 as basepb
8
+ from .._wrapper import ProtoWrapper, ProtoWrapperBase
9
+ from ..types.ids import PhysicsAiArchitectureVersionID
10
+
11
+
12
+ @ProtoWrapper(physaipb.PhysicsAiTrainingJob)
13
+ class PhysicsAiTrainingJob(ProtoWrapperBase):
14
+ """
15
+ Represents a Physics AI training job.
16
+
17
+ .. warning:: This feature is experimental and may change or be removed without notice.
18
+ """
19
+
20
+ id: str
21
+ architecture_version_id: PhysicsAiArchitectureVersionID
22
+ user_id: str
23
+ training_config: str
24
+ training_data_source_type: physaipb.TrainingDataSourceType
25
+ training_description: str
26
+ external_dataset_uri: str
27
+ initialization_type: physaipb.ModelInitializationType
28
+ base_model_version_id: str
29
+ status: basepb.JobStatus
30
+ error_message: str
31
+ output_model_version_id: str
32
+ creation_time: datetime
33
+ update_time: datetime
34
+ _proto: physaipb.PhysicsAiTrainingJob
35
+
36
+ def get_status(self) -> str:
37
+ return basepb.JobStatusType.Name(self.status.typ)
@@ -88,7 +88,7 @@ def create_pipeline(
88
88
  "description": description,
89
89
  }
90
90
  res = get_default_client().http.post("/rest/v0/pipelines", body)
91
- return PipelineRecord.from_json(res)
91
+ return PipelineRecord.from_json(res["data"])
92
92
 
93
93
 
94
94
  def list_pipelines() -> list[PipelineRecord]:
@@ -96,7 +96,7 @@ def list_pipelines() -> list[PipelineRecord]:
96
96
  List all pipelines.
97
97
  """
98
98
  res = get_default_client().http.get("/rest/v0/pipelines")
99
- return [PipelineRecord.from_json(p) for p in res]
99
+ return [PipelineRecord.from_json(p) for p in res["data"]]
100
100
 
101
101
 
102
102
  def get_pipeline(id: str) -> PipelineRecord:
@@ -109,7 +109,7 @@ def get_pipeline(id: str) -> PipelineRecord:
109
109
  ID of the pipeline to fetch.
110
110
  """
111
111
  res = get_default_client().http.get(f"/rest/v0/pipelines/{id}")
112
- return PipelineRecord.from_json(res)
112
+ return PipelineRecord.from_json(res["data"])
113
113
 
114
114
 
115
115
  def create_pipeline_job(
@@ -135,13 +135,14 @@ def create_pipeline_job(
135
135
  arg_rows = [row.row_values for row in args.rows]
136
136
  body = {
137
137
  "name": name,
138
+ "description": description,
138
139
  "project_id": project_id,
139
140
  "argument_names": [p.name for p in args.params],
140
141
  "argument_rows": arg_rows,
141
142
  }
142
143
 
143
144
  res = get_default_client().http.post(f"/rest/v0/pipelines/{pipeline_id}/pipeline_jobs", body)
144
- return PipelineJobRecord.from_json(res)
145
+ return PipelineJobRecord.from_json(res["data"])
145
146
 
146
147
 
147
148
  def get_pipeline_job(id: str) -> PipelineJobRecord:
@@ -149,7 +150,7 @@ def get_pipeline_job(id: str) -> PipelineJobRecord:
149
150
  Get a pipeline job by ID.
150
151
  """
151
152
  res = get_default_client().http.get(f"/rest/v0/pipeline_jobs/{id}")
152
- return PipelineJobRecord.from_json(res)
153
+ return PipelineJobRecord.from_json(res["data"])
153
154
 
154
155
 
155
156
  def list_pipeline_jobs() -> list[PipelineJobRecord]:
@@ -157,4 +158,4 @@ def list_pipeline_jobs() -> list[PipelineJobRecord]:
157
158
  List all pipeline jobs.
158
159
  """
159
160
  res = get_default_client().http.get("/rest/v0/pipeline_jobs")
160
- return [PipelineJobRecord.from_json(p) for p in res]
161
+ return [PipelineJobRecord.from_json(p) for p in res["data"]]
@@ -57,6 +57,8 @@ class Simulation(ProtoWrapperBase):
57
57
  "ID of the simulation mesh."
58
58
  project_id: ProjectID
59
59
  "ID of the project containing this simulation."
60
+ doe_name: str
61
+ "Name of the design of experiments that created this simulation."
60
62
 
61
63
  _proto: simulationpb.Simulation
62
64
 
@@ -490,7 +490,8 @@ class SimulationTemplate(ProtoWrapperBase):
490
490
  code += "\n\n\n"
491
491
  code += '# Create a new simulation template or modify the one that is synced with the UI "Setup" tab.\n'
492
492
  code += f'project = luminarycloud.get_project("{self.project_id}")\n'
493
- code += f"template = project.create_simulation_template(name={self.name})\n"
493
+ escaped_name = self.name.replace('\\','\\\\').replace('"','\\"')
494
+ code += f'template = project.create_simulation_template(name="{escaped_name}")\n'
494
495
  code += '# TODO(USER): To modify the "Setup" template, uncomment the line below and comment out the line above.\n'
495
496
  code += "# template = project.list_simulation_templates()[0] # Setup template\n\n"
496
497
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luminarycloud
3
- Version: 0.19.0
3
+ Version: 0.19.1
4
4
  Summary: Luminary Cloud SDK
5
5
  Project-URL: Homepage, https://www.luminarycloud.com/
6
6
  Project-URL: Documentation, https://app.luminarycloud.com/docs/api/
@@ -10,10 +10,10 @@ luminarycloud/mesh.py,sha256=ohEQty2M0oqUF5jBOHj59e4GXVo1GOi-bZuF31BpbtM,4819
10
10
  luminarycloud/named_variable_set.py,sha256=RsfGJDoZFajbJ2a2fWc-ZHRsZts5U7ZY6rIXSjXL7bY,4568
11
11
  luminarycloud/project.py,sha256=fizJxgQ9PhHmPUfQ4vR0DVv90Rw_tlpAXlulVeg0708,32194
12
12
  luminarycloud/reference_values.py,sha256=vWIX1VXMctspeQIjNtjmZdex55K0jHf1xz5gsGeMCfo,4357
13
- luminarycloud/simulation.py,sha256=QKUgfRTCdkblP6XPtbcncHc6JSpxbinZ2OzEPNcq5q0,13020
13
+ luminarycloud/simulation.py,sha256=nFC7PJnMXHAjs-CelJUFYbbVVXy6oVeHvPo3MczGbzg,13108
14
14
  luminarycloud/simulation_param.py,sha256=fKad0d0rCUL4EbdLvQS7WTK6_US3vQ2pbG8uaSrhxx4,16732
15
15
  luminarycloud/simulation_queue.py,sha256=dbrxDxGROlxpCVaUmHItZ8uftfLQinCj53nYZ-CRleI,4702
16
- luminarycloud/simulation_template.py,sha256=7cY_hoNQE1-3V0QPA8Dwdh-_PtIktj8gdt6X4L84Gow,21448
16
+ luminarycloud/simulation_template.py,sha256=ZsvgsUjW2nAJQ_JnZCsVdaRoogjpBIRNwhdXRxTmcSI,21526
17
17
  luminarycloud/solution.py,sha256=xS04WDjoPenJaBxx9xm7t8A4YrNIcq_oQfl4WJ8gAic,6770
18
18
  luminarycloud/tables.py,sha256=i6KMjthjRbks4Vxv6Eu6VLulRC9U8fhkzwknR2Ax3Nc,6922
19
19
  luminarycloud/tag.py,sha256=aC1xnHFVOEk7V6tp16b0wdwuGAJoqq7u3tzuYwbkkY0,1384
@@ -82,10 +82,10 @@ luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2.py,sha256=
82
82
  luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2.pyi,sha256=H2K7EGKLHOe5xNunVkFuY4sHN3LTVjZHLlnTwYqFk-A,7654
83
83
  luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2_grpc.py,sha256=lLpk0zvSn4XsvE5JEJVF7V2x2ZAX6rCHTgIzjVN9xU0,11209
84
84
  luminarycloud/_proto/api/v0/luminarycloud/output_node/output_node_pb2_grpc.pyi,sha256=N7KiftsEfElduhrGpevNqC7Ri3FGpYsiZ1LQJ4RwDrw,3738
85
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py,sha256=9c3pC4Lj7rr8IFS2nHb4a2KwuZuM8rsiI52LK8Qg93Y,11983
86
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi,sha256=CmQcr9PXicj2YKYUfcUjxZlK_WkjBCaZvEFnP87_vEM,12616
87
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py,sha256=hO3M3nhh84q91TewVWM-PQVGsB7jzwjRpyLUq5WsurU,7417
88
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi,sha256=ujiijRqdZHjXEjNHjJsZloDyMuQUSjO886PCVbhT5ik,2687
85
+ luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py,sha256=X0g0D6gWEntJNlC2n_1QxDpmvUe0zCHHagaEfMQqQo8,17953
86
+ luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi,sha256=2-Fw6lmbiU072BpR-gDnORHk9YJPGYGbjWoegBNpLO0,23657
87
+ luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py,sha256=WMjycj2H85rdfZ9_JOe1BZhg3k3x9UamYJm5N2LO_5U,9498
88
+ luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi,sha256=xynVc9ide5kxdAwOs9XYL8cQU3BrZaiHLMTKTk5uNPQ,3400
89
89
  luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2.py,sha256=INzCXfjQQyzuBrbnqs6Uvle_kpEnotrEhhgHIx8ZeV0,17209
90
90
  luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2.pyi,sha256=HaHlJdQlPHccQOpaS7t6JW7M9I4RGSZXB12zImp_qGk,14982
91
91
  luminarycloud/_proto/api/v0/luminarycloud/project/project_pb2_grpc.py,sha256=pmYkibMi49G82r9Dh4f83IiNaAWFOqKp6-TbBRA3Llo,20258
@@ -94,8 +94,8 @@ luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2.
94
94
  luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2.pyi,sha256=-vtlNWPz2kbOPyD26lVOPI5YWsDc35ZWWdWHQV8H40g,3166
95
95
  luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2_grpc.py,sha256=5EC2wbMzDyXuFROZzH1ief__dT6x4N8qJwsPtSy16sA,8038
96
96
  luminarycloud/_proto/api/v0/luminarycloud/project_ui_state/project_ui_state_pb2_grpc.pyi,sha256=hGkGk-DMn0Lo6QBtLALBF2HLLV6rgs6zMRmqmDzBZco,2513
97
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py,sha256=xjJrl1qWAo6CAabukcvq8fN9Ow4pOtXqt9lOmpOEFNY,31311
98
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi,sha256=lI-pLiUbIuaiWPsCVrRs1cu2Ou3RQPwo0zASAUg8g3A,36963
97
+ luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py,sha256=B-RmO5ezNyk8rTkj4V1lfOoHIl9zhE34gb1ig9UOMYE,31350
98
+ luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi,sha256=H8t7i8Tmw2RzTeWoF4T2YCXxItKi9IXDZBSglsVFZbA,37149
99
99
  luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.py,sha256=09Mqc5yVuRwDEnV7oKd9zw0WZS0X7-IB0VVo5Lf3Vus,27538
100
100
  luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.pyi,sha256=rzENHjHuDfNZ11S-_1YUcEfwhVJFk1qkBwHksgpqY1M,11699
101
101
  luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2.py,sha256=K0PmW_-cCzfQpykeHh9qqnlnItAZqnVQExHAOKPDVqc,17287
@@ -138,8 +138,8 @@ luminarycloud/_proto/cadmetadata/cadmetadata_pb2.py,sha256=bJoJXDLcAqmtHfgR6JKNZ
138
138
  luminarycloud/_proto/cadmetadata/cadmetadata_pb2.pyi,sha256=ilRDD1oOkFffy4bpgPblZHU2j_2PR_gqdL-_5tRBiU0,4463
139
139
  luminarycloud/_proto/client/entity_pb2.py,sha256=LmCbzEBTtsBnfgofVEsYFvVCvw-tDzU9o3eOn0-JqmY,1442
140
140
  luminarycloud/_proto/client/entity_pb2.pyi,sha256=nUZ93BId89hhsZhyzMoFohDRRYtKUza458dOLNJVENk,1111
141
- luminarycloud/_proto/client/simulation_pb2.py,sha256=f9Oq4W-AyNVhecS3HVs_kSCJQzyskjvvcOMcv9f9CjU,434390
142
- luminarycloud/_proto/client/simulation_pb2.pyi,sha256=w7bbTcEJeNDgZtHlBRcmRM6bRmhYHmzxPq52G1CxMps,369879
141
+ luminarycloud/_proto/client/simulation_pb2.py,sha256=9LlqhXvoIsKqURxjnXAWh9ENucl6TZsWeQ2GRqdJgxk,436868
142
+ luminarycloud/_proto/client/simulation_pb2.pyi,sha256=cE211nn96MhVg9x-357scg8nsJzb4zDgAO2X1_sPynE,372215
143
143
  luminarycloud/_proto/condition/condition_pb2.py,sha256=0WWoUz2yYAJ8Ux9J7Yqap6UdvvzLxnF_tlBceqk76Us,5144
144
144
  luminarycloud/_proto/condition/condition_pb2.pyi,sha256=eZ6hTW0F9RDDCDni4IELnCHBSyPZmcw6aKayrKGuQSU,5914
145
145
  luminarycloud/_proto/entitygroup/entitygroup_pb2.py,sha256=tkyRcUY1HzMaV0u6_rhotd60iR8lkszoLNqiDVOK4b8,3877
@@ -194,6 +194,10 @@ luminarycloud/_proto/parametricworker/parametricworker_pb2.py,sha256=vldSHCCpERE
194
194
  luminarycloud/_proto/parametricworker/parametricworker_pb2.pyi,sha256=R1j0hXIlvccrdQ5Vf45xV6my7dzcPJ94igVZrZ2BjSg,10158
195
195
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.py,sha256=sxVIAGz_rFE52RMWGcLpm2o6Qs-lCcoSuDcJSv94f0M,10008
196
196
  luminarycloud/_proto/parametricworker/parametricworker_pb2_grpc.pyi,sha256=T8RFKXUxrTOGMpXpjAE-b43Nw8LJjetckFC_d-aDIu4,3378
197
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py,sha256=ulfXXYAKvBK6RPLT8JXeEDtH7UxtmPnzJbx5_ty2kPU,1651
198
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.pyi,sha256=VbmaLisaneVcvS68mWV2faJnoF4vrS4wYBvDZezwPpk,221
199
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py,sha256=6VYOuVOIegaK5c3qrNEx9Etk9Gd52PdZ6RKMSSNkRZ8,3271
200
+ luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi,sha256=Weofl41CRNCGP-fX2cmKCr9k9r6wvQjnel0sJH31U8s,1359
197
201
  luminarycloud/_proto/quantity/quantity_options_pb2.py,sha256=TypSq4HRGXvh2UoDhXLpWnDsI6FMaL5vk2Z9tzTtYZw,7063
198
202
  luminarycloud/_proto/quantity/quantity_options_pb2.pyi,sha256=oBJBtX4_N7omjABzrEIGgzlxgytK8GEwokpkb10bNfg,13065
199
203
  luminarycloud/_proto/quantity/quantity_pb2.py,sha256=rHmcTfnAHkIafFzI5_37B9oMR2fYJgIMMb-gt6ds6BU,135198
@@ -240,7 +244,7 @@ luminarycloud/outputs/output_definitions.py,sha256=E85hRbAiCphGq-YTUjFYYz64vjg7z
240
244
  luminarycloud/outputs/stopping_conditions.py,sha256=JSYEViCUaz3d1YiKEBvyCWPlY1z6CYrBLGrVYLDqjF4,8638
241
245
  luminarycloud/params/__init__.py,sha256=d9DXzEw3oV1iOMXWpmYYEg2mYndFcxYW3NxrW6x-EFs,175
242
246
  luminarycloud/params/enum/__init__.py,sha256=vNvQ8Q-2d7Vd2bbN0x-qlSeYMAxBfEEl3fUbcf1xWPQ,158
243
- luminarycloud/params/enum/_enum_wrappers.py,sha256=mAN6lndLR3E3PoieMbJ4QEwl_99395rgN0np0ggeqaU,62243
247
+ luminarycloud/params/enum/_enum_wrappers.py,sha256=jF65YFpX3VOH0kwAk9fkS7xZsrd6r2M6HP63bgMzxkA,63072
244
248
  luminarycloud/params/enum/residual_output.py,sha256=wRYCRbvDk-1hJWVFzRyz4Ndr1FagB4-h_JSE9sENszw,1520
245
249
  luminarycloud/params/geometry/__init__.py,sha256=X_XNImpQcZ3LaVsXab5jVI5R_0Ep6jyIDtCyok8GgOE,454
246
250
  luminarycloud/params/geometry/geometry.py,sha256=MVKaHnIQ-iK04Mr69LwW08NQ909r-mMpr4J93URpWmw,629
@@ -279,7 +283,7 @@ luminarycloud/params/simulation/entity_relationships/volume_material_relationshi
279
283
  luminarycloud/params/simulation/entity_relationships/volume_physics_relationship_.py,sha256=yFf7BchW_OYyiXp7KcMaEv2DH1nY5fj3ZXACphGxLvM,2076
280
284
  luminarycloud/params/simulation/material/__init__.py,sha256=_wXdstxqZYBo4bopH00rl0wJJ_ltRnO3Kyzy9hGoKWs,106
281
285
  luminarycloud/params/simulation/material/material_fluid_.py,sha256=AGBCnCt5-64giB7HeklEFegd1kW7iL1a4-zV2QbQ1Lw,15311
282
- luminarycloud/params/simulation/material/material_solid_.py,sha256=_HCeR9LO7gXufACGdwPfNi_mE8I9VFHPnUnAIznp9iI,3060
286
+ luminarycloud/params/simulation/material/material_solid_.py,sha256=0DyP_b7asi4gqwS99cL4I9NlnhGrZe2cunrB2EorJAY,3833
283
287
  luminarycloud/params/simulation/material/fluid/__init__.py,sha256=_JggccSu5o-OUlthHLyDrR_mtb9O7fXv3gBAxxQ5mc8,356
284
288
  luminarycloud/params/simulation/material/fluid/boussinesq_approximation_.py,sha256=Zj-jDu7pmB98SSOo0KGmlpMLjgsR76gtjj38HbK4yoo,1018
285
289
  luminarycloud/params/simulation/material/fluid/material_model_.py,sha256=iaTNTnykmP8AWYvZyG4pXJ5f05BFpZFFUrLCULArV80,936
@@ -490,14 +494,15 @@ luminarycloud/params/simulation/time/time_step_ramp/__init__.py,sha256=fBLjMyx7n
490
494
  luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_off_.py,sha256=K91Qd0rlNS8XvUF96et38VRbw_aCN-CSE8m8Ff17DIQ,1089
491
495
  luminarycloud/params/simulation/time/time_step_ramp/time_step_ramp_on_.py,sha256=IYtJRE1urILLXfhCYcFhEExELObHgYzAeAmHDix_1Yc,1445
492
496
  luminarycloud/physics_ai/__init__.py,sha256=zSdYA5L3kqGsCfHZVvbYpXd25j8CyAjaHZQFCaQp8ps,478
493
- luminarycloud/physics_ai/architectures.py,sha256=1Fsnr0oc7kDWIZD6CeDFHcWetfbFF4TNj0JP2bMWH6E,2314
497
+ luminarycloud/physics_ai/architectures.py,sha256=hfU9F0qxfOOh3G85Bs3fABDJESHAtREK1RTuOkPZPQA,4393
494
498
  luminarycloud/physics_ai/inference.py,sha256=Q9k1GAKio5GVLM0jMqvEWTfkA872V-8BfvGP1n_A4a4,7597
495
499
  luminarycloud/physics_ai/models.py,sha256=USuz1LKbt4U3nRAYUYGQz7bRLhPIBnb3Q3xQwFam6Z0,2135
496
500
  luminarycloud/physics_ai/solution.py,sha256=IdQFEobvCAu0HJ4KwWvvpUGfRktC6thPhALpoDEIDF0,2423
501
+ luminarycloud/physics_ai/training_jobs.py,sha256=e00WETgMqAps6N_PM8C3LmIcrUx3a-6UcwtfPbv1trs,1242
497
502
  luminarycloud/pipeline_util/dictable.py,sha256=_YhxibnVCUqSpBH-IHBqvjiYlnAYMbuQv9dWK0eZn7Y,1073
498
503
  luminarycloud/pipeline_util/yaml.py,sha256=RG3Gqv4ORaYX4lTyRVBsGVGE138zsxJIYzoWr4Aczrs,1883
499
504
  luminarycloud/pipelines/__init__.py,sha256=bOu2XBDzOb5n9R5JwYFowLuLoSWXWW7I4mGm43cXdSs,1348
500
- luminarycloud/pipelines/api.py,sha256=GWmwRAvbcbdFtq4APxgcH1IUKBZTFgZQAVi7cmqE9zo,4559
505
+ luminarycloud/pipelines/api.py,sha256=t33OgewD7m3R4shCK_2CnZ-R7jLJWPeMh04y0WPcHiY,4643
501
506
  luminarycloud/pipelines/arguments.py,sha256=cFbVzOumOUMzO4yB0aWblMH78fZvT-RMZEO-12EBWOs,3787
502
507
  luminarycloud/pipelines/core.py,sha256=W_E8vLec2Sxi7LDGfEzkxFKrbDDnaxpD3BI3nBL4lpU,14754
503
508
  luminarycloud/pipelines/operators.py,sha256=yYJ6SZu00zo73sSv3Hn5yfagBIKF9Z9r0ujg5b9uC08,5441
@@ -518,6 +523,6 @@ luminarycloud/vis/interactive_scene.py,sha256=iczI7MifCVQHbSK9oeK2waZ5Nh2YwPrvSx
518
523
  luminarycloud/vis/primitives.py,sha256=_EDSEAddSAFTRUU9at1Gxt-5chLO723f9c8V5atTeTg,4546
519
524
  luminarycloud/vis/vis_util.py,sha256=AWGmHcfYXGmfe5t5Jbb1Fqe2nxVdEQbBitCaWSeT89M,1821
520
525
  luminarycloud/vis/visualization.py,sha256=vbjQGCZrCdM63_tseDNttMopZMSpN6FNO1icMgkl7Tc,56629
521
- luminarycloud-0.19.0.dist-info/METADATA,sha256=j_xhIsmKjuou7zktwpkZcBfiWazhNyqE1zpGc20XlaY,2574
522
- luminarycloud-0.19.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
523
- luminarycloud-0.19.0.dist-info/RECORD,,
526
+ luminarycloud-0.19.1.dist-info/METADATA,sha256=cmu6CJCpakgB-DTXk3aRt6sw6xo5mbZs17DZ4Z4pzvc,2574
527
+ luminarycloud-0.19.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
528
+ luminarycloud-0.19.1.dist-info/RECORD,,