luminarycloud 0.19.0__py3-none-any.whl → 0.20.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 (38) hide show
  1. luminarycloud/_client/client.py +2 -0
  2. luminarycloud/_helpers/_wait_for_mesh.py +6 -5
  3. luminarycloud/_helpers/_wait_for_simulation.py +3 -3
  4. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +83 -25
  5. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +214 -0
  6. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +34 -0
  7. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +12 -0
  8. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +60 -60
  9. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +5 -1
  10. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +77 -27
  11. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +85 -0
  12. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py +66 -0
  13. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi +20 -0
  14. luminarycloud/_proto/client/simulation_pb2.py +342 -331
  15. luminarycloud/_proto/client/simulation_pb2.pyi +37 -3
  16. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +29 -0
  17. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.pyi +7 -0
  18. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +70 -0
  19. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +30 -0
  20. luminarycloud/exceptions.py +7 -1
  21. luminarycloud/geometry.py +3 -1
  22. luminarycloud/mesh.py +1 -2
  23. luminarycloud/params/enum/_enum_wrappers.py +25 -0
  24. luminarycloud/params/simulation/material/material_solid_.py +15 -1
  25. luminarycloud/physics_ai/architectures.py +58 -0
  26. luminarycloud/physics_ai/training_jobs.py +37 -0
  27. luminarycloud/pipelines/api.py +8 -12
  28. luminarycloud/simulation.py +3 -2
  29. luminarycloud/simulation_template.py +2 -1
  30. luminarycloud/vis/__init__.py +15 -0
  31. luminarycloud/vis/data_extraction.py +20 -4
  32. luminarycloud/vis/interactive_report.py +124 -0
  33. luminarycloud/vis/interactive_scene.py +29 -2
  34. luminarycloud/vis/report.py +98 -0
  35. luminarycloud/vis/visualization.py +67 -5
  36. {luminarycloud-0.19.0.dist-info → luminarycloud-0.20.0.dist-info}/METADATA +1 -1
  37. {luminarycloud-0.19.0.dist-info → luminarycloud-0.20.0.dist-info}/RECORD +38 -31
  38. {luminarycloud-0.19.0.dist-info → luminarycloud-0.20.0.dist-info}/WHEEL +0 -0
@@ -129,6 +129,8 @@ class Client(
129
129
  ("grpc.keepalive_timeout_ms", 5000),
130
130
  ("grpc.keepalive_permit_without_calls", 1),
131
131
  ("grpc.http2.max_pings_without_data", 10),
132
+ ("grpc.max_receive_message_length", 32 * 1024 * 1024),
133
+ ("grpc.max_send_message_length", 32 * 1024 * 1024),
132
134
  ]
133
135
  if grpc_channel_options:
134
136
  grpc_channel_options_with_keep_alive.extend(grpc_channel_options)
@@ -1,7 +1,7 @@
1
1
  # Copyright 2023-2024 Luminary Cloud, Inc. All Rights Reserved.
2
2
  import logging
3
3
  from time import time, sleep
4
- from luminarycloud.exceptions import DeadlineExceededError
4
+ from luminarycloud.exceptions import DeadlineExceededError, Timeout
5
5
 
6
6
  from .._proto.api.v0.luminarycloud.mesh.mesh_pb2 import Mesh, GetMeshRequest
7
7
  from .._client import Client
@@ -32,19 +32,20 @@ def wait_for_mesh(
32
32
 
33
33
  Raises
34
34
  ------
35
- TimeoutError
35
+ Timeout
36
36
  """
37
37
  deadline = time() + timeout_seconds
38
38
  while True:
39
39
  if time() >= deadline:
40
- logger.error("`wait_for_mesh` timed out.")
41
- raise TimeoutError
40
+ raise Timeout("Timed out waiting for mesh to be ready.")
42
41
  # It seems this call sometimes hangs. It seems as well that python gRPC is known to hang
43
42
  # in some cases, so we'll add a deadline and catch deadline exceeded errors to retry.
44
43
  try:
45
44
  response = client.GetMesh(GetMeshRequest(id=mesh.id), timeout=15)
46
45
  except DeadlineExceededError:
47
- logger.error("Deadline exceeded while waiting for mesh.")
46
+ logger.debug(
47
+ "Request deadline exceeded while waiting for mesh status. Will retry if the `wait_for_mesh` deadline has not expired."
48
+ )
48
49
  sleep(max(0, min(interval_seconds, deadline - time())))
49
50
  continue
50
51
  status = response.mesh.status
@@ -2,6 +2,7 @@
2
2
  import io
3
3
  import logging
4
4
  from time import time, sleep
5
+ from luminarycloud.exceptions import Timeout
5
6
 
6
7
  from .._proto.api.v0.luminarycloud.simulation.simulation_pb2 import (
7
8
  GetSimulationResponse,
@@ -42,7 +43,7 @@ def wait_for_simulation(
42
43
 
43
44
  Raises
44
45
  ------
45
- TimeoutError
46
+ Timeout
46
47
  """
47
48
  deadline = time() + timeout_seconds
48
49
  # latest_iter is used to avoid printing the same iteration's residuals multiple times
@@ -66,8 +67,7 @@ def wait_for_simulation(
66
67
  ]:
67
68
  return status
68
69
  if time() >= deadline:
69
- logger.error("`wait_for_simulation` timed out.")
70
- raise TimeoutError
70
+ raise Timeout("Timed out waiting for simulation to finish")
71
71
  sleep(max(0, min(interval_seconds, deadline - time())))
72
72
 
73
73
 
@@ -16,18 +16,30 @@ _sym_db = _symbol_database.Default()
16
16
  from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
17
17
  from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
18
18
  from luminarycloud._proto.api.v0.luminarycloud.common import common_pb2 as proto_dot_api_dot_v0_dot_luminarycloud_dot_common_dot_common__pb2
19
+ from luminarycloud._proto.base import base_pb2 as proto_dot_base_dot_base__pb2
19
20
  from luminarycloud._proto.quantity import quantity_pb2 as proto_dot_quantity_dot_quantity__pb2
20
21
 
21
22
 
22
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n6proto/api/v0/luminarycloud/physics_ai/physics_ai.proto\x12.luminary.proto.api.v0.luminarycloud.physics_ai\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.proto/api/v0/luminarycloud/common/common.proto\x1a\x1dproto/quantity/quantity.proto\"\xad\x01\n\x1cPhysicsAiArchitectureVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\tchangelog\x18\x03 \x01(\t\x12`\n\x0flifecycle_state\x18\x04 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiLifecycleState\"\xa6\x01\n\x15PhysicsAiArchitecture\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12^\n\x08versions\x18\x04 \x03(\x0b\x32L.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiArchitectureVersion\"\x1a\n\x18ListArchitecturesRequest\"y\n\x19ListArchitecturesResponse\x12\\\n\rarchitectures\x18\x01 \x03(\x0b\x32\x45.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiArchitecture\"\x93\x01\n\x15PhysicsAiModelVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12`\n\x0flifecycle_state\x18\x03 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiLifecycleState\"\x98\x01\n\x0ePhysicsAiModel\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12W\n\x08versions\x18\x04 \x03(\x0b\x32\x45.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiModelVersion\"\x1d\n\x1bListPretrainedModelsRequest\"n\n\x1cListPretrainedModelsResponse\x12N\n\x06models\x18\x01 \x03(\x0b\x32>.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiModel\"\xa3\x02\n\x1fGetSolutionDataPhysicsAIRequest\x12\x13\n\x0bsolution_id\x18\x01 \x01(\t\x12\x18\n\x10\x65xclude_surfaces\x18\x02 \x03(\t\x12\x12\n\nfill_holes\x18\x03 \x01(\x02\x12\x45\n\x16surface_fields_to_keep\x18\x04 \x03(\x0e\x32%.luminary.proto.quantity.QuantityType\x12\x44\n\x15volume_fields_to_keep\x18\x05 \x03(\x0e\x32%.luminary.proto.quantity.QuantityType\x12\x16\n\x0eprocess_volume\x18\x06 \x01(\x08\x12\x18\n\x10single_precision\x18\x07 \x01(\x08\"b\n GetSolutionDataPhysicsAIResponse\x12>\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.common.File*\xb4\x01\n\x17PhysicsAiLifecycleState\x12\x1f\n\x1bLIFECYCLE_STATE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bLIFECYCLE_STATE_DEVELOPMENT\x10\x01\x12\x1a\n\x16LIFECYCLE_STATE_ACTIVE\x10\x02\x12\x1e\n\x1aLIFECYCLE_STATE_DEPRECATED\x10\x03\x12\x1b\n\x17LIFECYCLE_STATE_RETIRED\x10\x04\x32\xb9\x05\n\x10PhysicsAiService\x12\xce\x01\n\x11ListArchitectures\x12H.luminary.proto.api.v0.luminarycloud.physics_ai.ListArchitecturesRequest\x1aI.luminary.proto.api.v0.luminarycloud.physics_ai.ListArchitecturesResponse\"$\x82\xd3\xe4\x93\x02\x1e\x12\x1c/v0/physics_ai/architectures\x12\xdb\x01\n\x14ListPretrainedModels\x12K.luminary.proto.api.v0.luminarycloud.physics_ai.ListPretrainedModelsRequest\x1aL.luminary.proto.api.v0.luminarycloud.physics_ai.ListPretrainedModelsResponse\"(\x82\xd3\xe4\x93\x02\"\x12 /v0/physics_ai/pretrained_models\x12\xf5\x01\n\x18GetSolutionDataPhysicsAI\x12O.luminary.proto.api.v0.luminarycloud.physics_ai.GetSolutionDataPhysicsAIRequest\x1aP.luminary.proto.api.v0.luminarycloud.physics_ai.GetSolutionDataPhysicsAIResponse\"6\x82\xd3\xe4\x93\x02\x30\"+/v0/physics_ai/solutions/{solution_id}/data:\x01*B>Z<luminarycloud.com/core/proto/api/v0/luminarycloud/physics_aib\x06proto3')
23
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n6proto/api/v0/luminarycloud/physics_ai/physics_ai.proto\x12.luminary.proto.api.v0.luminarycloud.physics_ai\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.proto/api/v0/luminarycloud/common/common.proto\x1a\x15proto/base/base.proto\x1a\x1dproto/quantity/quantity.proto\"\xad\x01\n\x1cPhysicsAiArchitectureVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\tchangelog\x18\x03 \x01(\t\x12`\n\x0flifecycle_state\x18\x04 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiLifecycleState\"\xa6\x01\n\x15PhysicsAiArchitecture\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12^\n\x08versions\x18\x04 \x03(\x0b\x32L.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiArchitectureVersion\"\x1a\n\x18ListArchitecturesRequest\"y\n\x19ListArchitecturesResponse\x12\\\n\rarchitectures\x18\x01 \x03(\x0b\x32\x45.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiArchitecture\"\x93\x01\n\x15PhysicsAiModelVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12`\n\x0flifecycle_state\x18\x03 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiLifecycleState\"\x98\x01\n\x0ePhysicsAiModel\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12W\n\x08versions\x18\x04 \x03(\x0b\x32\x45.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiModelVersion\"\x1d\n\x1bListPretrainedModelsRequest\"n\n\x1cListPretrainedModelsResponse\x12N\n\x06models\x18\x01 \x03(\x0b\x32>.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiModel\"\xa3\x02\n\x1fGetSolutionDataPhysicsAIRequest\x12\x13\n\x0bsolution_id\x18\x01 \x01(\t\x12\x18\n\x10\x65xclude_surfaces\x18\x02 \x03(\t\x12\x12\n\nfill_holes\x18\x03 \x01(\x02\x12\x45\n\x16surface_fields_to_keep\x18\x04 \x03(\x0e\x32%.luminary.proto.quantity.QuantityType\x12\x44\n\x15volume_fields_to_keep\x18\x05 \x03(\x0e\x32%.luminary.proto.quantity.QuantityType\x12\x16\n\x0eprocess_volume\x18\x06 \x01(\x08\x12\x18\n\x10single_precision\x18\x07 \x01(\x08\"b\n GetSolutionDataPhysicsAIResponse\x12>\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.common.File\";\n\x10TrainingSolution\x12\x13\n\x0bsolution_id\x18\x01 \x01(\t\x12\x12\n\ndata_split\x18\x02 \x01(\t\"\x9a\x05\n\x14PhysicsAiTrainingJob\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1f\n\x17\x61rchitecture_version_id\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x03 \x01(\t\x12\x17\n\x0ftraining_config\x18\x04 \x01(\t\x12i\n\x19training_data_source_type\x18\x05 \x01(\x0e\x32\x46.luminary.proto.api.v0.luminarycloud.physics_ai.TrainingDataSourceType\x12\x1c\n\x14training_description\x18\x06 \x01(\t\x12\x1c\n\x14\x65xternal_dataset_uri\x18\x07 \x01(\t\x12\x64\n\x13initialization_type\x18\x08 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.ModelInitializationType\x12\x1d\n\x15\x62\x61se_model_version_id\x18\t \x01(\t\x12.\n\x06status\x18\n \x01(\x0b\x32\x1e.luminary.proto.base.JobStatus\x12\x15\n\rerror_message\x18\x0b \x01(\t\x12\x1f\n\x17output_model_version_id\x18\x0c \x01(\t\x12\x31\n\rcreation_time\x18\r \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bupdate_time\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x33\n\x0f\x63ompletion_time\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xf3\x02\n\x18SubmitTrainingJobRequest\x12\x1f\n\x17\x61rchitecture_version_id\x18\x01 \x01(\t\x12\x1c\n\x14training_description\x18\x02 \x01(\t\x12\x1c\n\x14\x65xternal_dataset_uri\x18\x03 \x01(\t\x12\\\n\x12training_solutions\x18\x04 \x03(\x0b\x32@.luminary.proto.api.v0.luminarycloud.physics_ai.TrainingSolution\x12\x17\n\x0ftraining_config\x18\x05 \x01(\t\x12\x64\n\x13initialization_type\x18\x06 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.ModelInitializationType\x12\x1d\n\x15\x62\x61se_model_version_id\x18\x07 \x01(\t\"w\n\x19SubmitTrainingJobResponse\x12Z\n\x0ctraining_job\x18\x01 \x01(\x0b\x32\x44.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiTrainingJob*\xb4\x01\n\x17PhysicsAiLifecycleState\x12\x1f\n\x1bLIFECYCLE_STATE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bLIFECYCLE_STATE_DEVELOPMENT\x10\x01\x12\x1a\n\x16LIFECYCLE_STATE_ACTIVE\x10\x02\x12\x1e\n\x1aLIFECYCLE_STATE_DEPRECATED\x10\x03\x12\x1b\n\x17LIFECYCLE_STATE_RETIRED\x10\x04*\xa7\x01\n\x16TrainingDataSourceType\x12)\n%TRAINING_DATA_SOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x32\n.TRAINING_DATA_SOURCE_TYPE_SIMULATION_SOLUTIONS\x10\x01\x12.\n*TRAINING_DATA_SOURCE_TYPE_EXTERNAL_DATASET\x10\x02*\xc1\x01\n\x17ModelInitializationType\x12)\n%MODEL_INITIALIZATION_TYPE_UNSPECIFIED\x10\x00\x12$\n MODEL_INITIALIZATION_TYPE_RANDOM\x10\x01\x12+\n\'MODEL_INITIALIZATION_TYPE_MODEL_VERSION\x10\x02\x12(\n$MODEL_INITIALIZATION_TYPE_CHECKPOINT\x10\x03\x32\x8d\x07\n\x10PhysicsAiService\x12\xce\x01\n\x11ListArchitectures\x12H.luminary.proto.api.v0.luminarycloud.physics_ai.ListArchitecturesRequest\x1aI.luminary.proto.api.v0.luminarycloud.physics_ai.ListArchitecturesResponse\"$\x82\xd3\xe4\x93\x02\x1e\x12\x1c/v0/physics_ai/architectures\x12\xdb\x01\n\x14ListPretrainedModels\x12K.luminary.proto.api.v0.luminarycloud.physics_ai.ListPretrainedModelsRequest\x1aL.luminary.proto.api.v0.luminarycloud.physics_ai.ListPretrainedModelsResponse\"(\x82\xd3\xe4\x93\x02\"\x12 /v0/physics_ai/pretrained_models\x12\xf5\x01\n\x18GetSolutionDataPhysicsAI\x12O.luminary.proto.api.v0.luminarycloud.physics_ai.GetSolutionDataPhysicsAIRequest\x1aP.luminary.proto.api.v0.luminarycloud.physics_ai.GetSolutionDataPhysicsAIResponse\"6\x82\xd3\xe4\x93\x02\x30\"+/v0/physics_ai/solutions/{solution_id}/data:\x01*\x12\xd1\x01\n\x11SubmitTrainingJob\x12H.luminary.proto.api.v0.luminarycloud.physics_ai.SubmitTrainingJobRequest\x1aI.luminary.proto.api.v0.luminarycloud.physics_ai.SubmitTrainingJobResponse\"\'\x82\xd3\xe4\x93\x02!\"\x1c/v0/physics_ai/training/jobs:\x01*B>Z<luminarycloud.com/core/proto/api/v0/luminarycloud/physics_aib\x06proto3')
23
24
 
24
25
  _PHYSICSAILIFECYCLESTATE = DESCRIPTOR.enum_types_by_name['PhysicsAiLifecycleState']
25
26
  PhysicsAiLifecycleState = enum_type_wrapper.EnumTypeWrapper(_PHYSICSAILIFECYCLESTATE)
27
+ _TRAININGDATASOURCETYPE = DESCRIPTOR.enum_types_by_name['TrainingDataSourceType']
28
+ TrainingDataSourceType = enum_type_wrapper.EnumTypeWrapper(_TRAININGDATASOURCETYPE)
29
+ _MODELINITIALIZATIONTYPE = DESCRIPTOR.enum_types_by_name['ModelInitializationType']
30
+ ModelInitializationType = enum_type_wrapper.EnumTypeWrapper(_MODELINITIALIZATIONTYPE)
26
31
  LIFECYCLE_STATE_UNSPECIFIED = 0
27
32
  LIFECYCLE_STATE_DEVELOPMENT = 1
28
33
  LIFECYCLE_STATE_ACTIVE = 2
29
34
  LIFECYCLE_STATE_DEPRECATED = 3
30
35
  LIFECYCLE_STATE_RETIRED = 4
36
+ TRAINING_DATA_SOURCE_TYPE_UNSPECIFIED = 0
37
+ TRAINING_DATA_SOURCE_TYPE_SIMULATION_SOLUTIONS = 1
38
+ TRAINING_DATA_SOURCE_TYPE_EXTERNAL_DATASET = 2
39
+ MODEL_INITIALIZATION_TYPE_UNSPECIFIED = 0
40
+ MODEL_INITIALIZATION_TYPE_RANDOM = 1
41
+ MODEL_INITIALIZATION_TYPE_MODEL_VERSION = 2
42
+ MODEL_INITIALIZATION_TYPE_CHECKPOINT = 3
31
43
 
32
44
 
33
45
  _PHYSICSAIARCHITECTUREVERSION = DESCRIPTOR.message_types_by_name['PhysicsAiArchitectureVersion']
@@ -40,6 +52,10 @@ _LISTPRETRAINEDMODELSREQUEST = DESCRIPTOR.message_types_by_name['ListPretrainedM
40
52
  _LISTPRETRAINEDMODELSRESPONSE = DESCRIPTOR.message_types_by_name['ListPretrainedModelsResponse']
41
53
  _GETSOLUTIONDATAPHYSICSAIREQUEST = DESCRIPTOR.message_types_by_name['GetSolutionDataPhysicsAIRequest']
42
54
  _GETSOLUTIONDATAPHYSICSAIRESPONSE = DESCRIPTOR.message_types_by_name['GetSolutionDataPhysicsAIResponse']
55
+ _TRAININGSOLUTION = DESCRIPTOR.message_types_by_name['TrainingSolution']
56
+ _PHYSICSAITRAININGJOB = DESCRIPTOR.message_types_by_name['PhysicsAiTrainingJob']
57
+ _SUBMITTRAININGJOBREQUEST = DESCRIPTOR.message_types_by_name['SubmitTrainingJobRequest']
58
+ _SUBMITTRAININGJOBRESPONSE = DESCRIPTOR.message_types_by_name['SubmitTrainingJobResponse']
43
59
  PhysicsAiArchitectureVersion = _reflection.GeneratedProtocolMessageType('PhysicsAiArchitectureVersion', (_message.Message,), {
44
60
  'DESCRIPTOR' : _PHYSICSAIARCHITECTUREVERSION,
45
61
  '__module__' : 'proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2'
@@ -110,6 +126,34 @@ GetSolutionDataPhysicsAIResponse = _reflection.GeneratedProtocolMessageType('Get
110
126
  })
111
127
  _sym_db.RegisterMessage(GetSolutionDataPhysicsAIResponse)
112
128
 
129
+ TrainingSolution = _reflection.GeneratedProtocolMessageType('TrainingSolution', (_message.Message,), {
130
+ 'DESCRIPTOR' : _TRAININGSOLUTION,
131
+ '__module__' : 'proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2'
132
+ # @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.physics_ai.TrainingSolution)
133
+ })
134
+ _sym_db.RegisterMessage(TrainingSolution)
135
+
136
+ PhysicsAiTrainingJob = _reflection.GeneratedProtocolMessageType('PhysicsAiTrainingJob', (_message.Message,), {
137
+ 'DESCRIPTOR' : _PHYSICSAITRAININGJOB,
138
+ '__module__' : 'proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2'
139
+ # @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiTrainingJob)
140
+ })
141
+ _sym_db.RegisterMessage(PhysicsAiTrainingJob)
142
+
143
+ SubmitTrainingJobRequest = _reflection.GeneratedProtocolMessageType('SubmitTrainingJobRequest', (_message.Message,), {
144
+ 'DESCRIPTOR' : _SUBMITTRAININGJOBREQUEST,
145
+ '__module__' : 'proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2'
146
+ # @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.physics_ai.SubmitTrainingJobRequest)
147
+ })
148
+ _sym_db.RegisterMessage(SubmitTrainingJobRequest)
149
+
150
+ SubmitTrainingJobResponse = _reflection.GeneratedProtocolMessageType('SubmitTrainingJobResponse', (_message.Message,), {
151
+ 'DESCRIPTOR' : _SUBMITTRAININGJOBRESPONSE,
152
+ '__module__' : 'proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2'
153
+ # @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.physics_ai.SubmitTrainingJobResponse)
154
+ })
155
+ _sym_db.RegisterMessage(SubmitTrainingJobResponse)
156
+
113
157
  _PHYSICSAISERVICE = DESCRIPTOR.services_by_name['PhysicsAiService']
114
158
  if _descriptor._USE_C_DESCRIPTORS == False:
115
159
 
@@ -121,28 +165,42 @@ if _descriptor._USE_C_DESCRIPTORS == False:
121
165
  _PHYSICSAISERVICE.methods_by_name['ListPretrainedModels']._serialized_options = b'\202\323\344\223\002\"\022 /v0/physics_ai/pretrained_models'
122
166
  _PHYSICSAISERVICE.methods_by_name['GetSolutionDataPhysicsAI']._options = None
123
167
  _PHYSICSAISERVICE.methods_by_name['GetSolutionDataPhysicsAI']._serialized_options = b'\202\323\344\223\0020\"+/v0/physics_ai/solutions/{solution_id}/data:\001*'
124
- _PHYSICSAILIFECYCLESTATE._serialized_start=1587
125
- _PHYSICSAILIFECYCLESTATE._serialized_end=1767
126
- _PHYSICSAIARCHITECTUREVERSION._serialized_start=249
127
- _PHYSICSAIARCHITECTUREVERSION._serialized_end=422
128
- _PHYSICSAIARCHITECTURE._serialized_start=425
129
- _PHYSICSAIARCHITECTURE._serialized_end=591
130
- _LISTARCHITECTURESREQUEST._serialized_start=593
131
- _LISTARCHITECTURESREQUEST._serialized_end=619
132
- _LISTARCHITECTURESRESPONSE._serialized_start=621
133
- _LISTARCHITECTURESRESPONSE._serialized_end=742
134
- _PHYSICSAIMODELVERSION._serialized_start=745
135
- _PHYSICSAIMODELVERSION._serialized_end=892
136
- _PHYSICSAIMODEL._serialized_start=895
137
- _PHYSICSAIMODEL._serialized_end=1047
138
- _LISTPRETRAINEDMODELSREQUEST._serialized_start=1049
139
- _LISTPRETRAINEDMODELSREQUEST._serialized_end=1078
140
- _LISTPRETRAINEDMODELSRESPONSE._serialized_start=1080
141
- _LISTPRETRAINEDMODELSRESPONSE._serialized_end=1190
142
- _GETSOLUTIONDATAPHYSICSAIREQUEST._serialized_start=1193
143
- _GETSOLUTIONDATAPHYSICSAIREQUEST._serialized_end=1484
144
- _GETSOLUTIONDATAPHYSICSAIRESPONSE._serialized_start=1486
145
- _GETSOLUTIONDATAPHYSICSAIRESPONSE._serialized_end=1584
146
- _PHYSICSAISERVICE._serialized_start=1770
147
- _PHYSICSAISERVICE._serialized_end=2467
168
+ _PHYSICSAISERVICE.methods_by_name['SubmitTrainingJob']._options = None
169
+ _PHYSICSAISERVICE.methods_by_name['SubmitTrainingJob']._serialized_options = b'\202\323\344\223\002!\"\034/v0/physics_ai/training/jobs:\001*'
170
+ _PHYSICSAILIFECYCLESTATE._serialized_start=2835
171
+ _PHYSICSAILIFECYCLESTATE._serialized_end=3015
172
+ _TRAININGDATASOURCETYPE._serialized_start=3018
173
+ _TRAININGDATASOURCETYPE._serialized_end=3185
174
+ _MODELINITIALIZATIONTYPE._serialized_start=3188
175
+ _MODELINITIALIZATIONTYPE._serialized_end=3381
176
+ _PHYSICSAIARCHITECTUREVERSION._serialized_start=272
177
+ _PHYSICSAIARCHITECTUREVERSION._serialized_end=445
178
+ _PHYSICSAIARCHITECTURE._serialized_start=448
179
+ _PHYSICSAIARCHITECTURE._serialized_end=614
180
+ _LISTARCHITECTURESREQUEST._serialized_start=616
181
+ _LISTARCHITECTURESREQUEST._serialized_end=642
182
+ _LISTARCHITECTURESRESPONSE._serialized_start=644
183
+ _LISTARCHITECTURESRESPONSE._serialized_end=765
184
+ _PHYSICSAIMODELVERSION._serialized_start=768
185
+ _PHYSICSAIMODELVERSION._serialized_end=915
186
+ _PHYSICSAIMODEL._serialized_start=918
187
+ _PHYSICSAIMODEL._serialized_end=1070
188
+ _LISTPRETRAINEDMODELSREQUEST._serialized_start=1072
189
+ _LISTPRETRAINEDMODELSREQUEST._serialized_end=1101
190
+ _LISTPRETRAINEDMODELSRESPONSE._serialized_start=1103
191
+ _LISTPRETRAINEDMODELSRESPONSE._serialized_end=1213
192
+ _GETSOLUTIONDATAPHYSICSAIREQUEST._serialized_start=1216
193
+ _GETSOLUTIONDATAPHYSICSAIREQUEST._serialized_end=1507
194
+ _GETSOLUTIONDATAPHYSICSAIRESPONSE._serialized_start=1509
195
+ _GETSOLUTIONDATAPHYSICSAIRESPONSE._serialized_end=1607
196
+ _TRAININGSOLUTION._serialized_start=1609
197
+ _TRAININGSOLUTION._serialized_end=1668
198
+ _PHYSICSAITRAININGJOB._serialized_start=1671
199
+ _PHYSICSAITRAININGJOB._serialized_end=2337
200
+ _SUBMITTRAININGJOBREQUEST._serialized_start=2340
201
+ _SUBMITTRAININGJOBREQUEST._serialized_end=2711
202
+ _SUBMITTRAININGJOBRESPONSE._serialized_start=2713
203
+ _SUBMITTRAININGJOBRESPONSE._serialized_end=2832
204
+ _PHYSICSAISERVICE._serialized_start=3384
205
+ _PHYSICSAISERVICE._serialized_end=4293
148
206
  # @@protoc_insertion_point(module_scope)
@@ -8,7 +8,9 @@ import google.protobuf.descriptor
8
8
  import google.protobuf.internal.containers
9
9
  import google.protobuf.internal.enum_type_wrapper
10
10
  import google.protobuf.message
11
+ import google.protobuf.timestamp_pb2
11
12
  import luminarycloud._proto.api.v0.luminarycloud.common.common_pb2
13
+ import luminarycloud._proto.base.base_pb2
12
14
  import luminarycloud._proto.quantity.quantity_pb2
13
15
  import sys
14
16
  import typing
@@ -52,6 +54,58 @@ LIFECYCLE_STATE_RETIRED: PhysicsAiLifecycleState.ValueType # 4
52
54
  """Archived; no training or inference support."""
53
55
  global___PhysicsAiLifecycleState = PhysicsAiLifecycleState
54
56
 
57
+ class _TrainingDataSourceType:
58
+ ValueType = typing.NewType("ValueType", builtins.int)
59
+ V: typing_extensions.TypeAlias = ValueType
60
+
61
+ class _TrainingDataSourceTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_TrainingDataSourceType.ValueType], builtins.type): # noqa: F821
62
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
63
+ TRAINING_DATA_SOURCE_TYPE_UNSPECIFIED: _TrainingDataSourceType.ValueType # 0
64
+ """Default value, should not be used in practice."""
65
+ TRAINING_DATA_SOURCE_TYPE_SIMULATION_SOLUTIONS: _TrainingDataSourceType.ValueType # 1
66
+ """Training data from simulation solutions."""
67
+ TRAINING_DATA_SOURCE_TYPE_EXTERNAL_DATASET: _TrainingDataSourceType.ValueType # 2
68
+ """Training data from external dataset."""
69
+
70
+ class TrainingDataSourceType(_TrainingDataSourceType, metaclass=_TrainingDataSourceTypeEnumTypeWrapper):
71
+ """Training data source types"""
72
+
73
+ TRAINING_DATA_SOURCE_TYPE_UNSPECIFIED: TrainingDataSourceType.ValueType # 0
74
+ """Default value, should not be used in practice."""
75
+ TRAINING_DATA_SOURCE_TYPE_SIMULATION_SOLUTIONS: TrainingDataSourceType.ValueType # 1
76
+ """Training data from simulation solutions."""
77
+ TRAINING_DATA_SOURCE_TYPE_EXTERNAL_DATASET: TrainingDataSourceType.ValueType # 2
78
+ """Training data from external dataset."""
79
+ global___TrainingDataSourceType = TrainingDataSourceType
80
+
81
+ class _ModelInitializationType:
82
+ ValueType = typing.NewType("ValueType", builtins.int)
83
+ V: typing_extensions.TypeAlias = ValueType
84
+
85
+ class _ModelInitializationTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ModelInitializationType.ValueType], builtins.type): # noqa: F821
86
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
87
+ MODEL_INITIALIZATION_TYPE_UNSPECIFIED: _ModelInitializationType.ValueType # 0
88
+ """Default value, should not be used in practice."""
89
+ MODEL_INITIALIZATION_TYPE_RANDOM: _ModelInitializationType.ValueType # 1
90
+ """Random initialization."""
91
+ MODEL_INITIALIZATION_TYPE_MODEL_VERSION: _ModelInitializationType.ValueType # 2
92
+ """Initialize from existing model version."""
93
+ MODEL_INITIALIZATION_TYPE_CHECKPOINT: _ModelInitializationType.ValueType # 3
94
+ """Initialize from checkpoint."""
95
+
96
+ class ModelInitializationType(_ModelInitializationType, metaclass=_ModelInitializationTypeEnumTypeWrapper):
97
+ """Model initialization types"""
98
+
99
+ MODEL_INITIALIZATION_TYPE_UNSPECIFIED: ModelInitializationType.ValueType # 0
100
+ """Default value, should not be used in practice."""
101
+ MODEL_INITIALIZATION_TYPE_RANDOM: ModelInitializationType.ValueType # 1
102
+ """Random initialization."""
103
+ MODEL_INITIALIZATION_TYPE_MODEL_VERSION: ModelInitializationType.ValueType # 2
104
+ """Initialize from existing model version."""
105
+ MODEL_INITIALIZATION_TYPE_CHECKPOINT: ModelInitializationType.ValueType # 3
106
+ """Initialize from checkpoint."""
107
+ global___ModelInitializationType = ModelInitializationType
108
+
55
109
  class PhysicsAiArchitectureVersion(google.protobuf.message.Message):
56
110
  """A physics ai architecture version."""
57
111
 
@@ -290,3 +344,163 @@ class GetSolutionDataPhysicsAIResponse(google.protobuf.message.Message):
290
344
  def ClearField(self, field_name: typing_extensions.Literal["file", b"file"]) -> None: ...
291
345
 
292
346
  global___GetSolutionDataPhysicsAIResponse = GetSolutionDataPhysicsAIResponse
347
+
348
+ class TrainingSolution(google.protobuf.message.Message):
349
+ """A training solution specification"""
350
+
351
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
352
+
353
+ SOLUTION_ID_FIELD_NUMBER: builtins.int
354
+ DATA_SPLIT_FIELD_NUMBER: builtins.int
355
+ solution_id: builtins.str
356
+ """Solution ID to use for training."""
357
+ data_split: builtins.str
358
+ """Data split for this solution (train, validation, test)."""
359
+ def __init__(
360
+ self,
361
+ *,
362
+ solution_id: builtins.str = ...,
363
+ data_split: builtins.str = ...,
364
+ ) -> None: ...
365
+ def ClearField(self, field_name: typing_extensions.Literal["data_split", b"data_split", "solution_id", b"solution_id"]) -> None: ...
366
+
367
+ global___TrainingSolution = TrainingSolution
368
+
369
+ class PhysicsAiTrainingJob(google.protobuf.message.Message):
370
+ """A Physics AI training job"""
371
+
372
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
373
+
374
+ ID_FIELD_NUMBER: builtins.int
375
+ ARCHITECTURE_VERSION_ID_FIELD_NUMBER: builtins.int
376
+ USER_ID_FIELD_NUMBER: builtins.int
377
+ TRAINING_CONFIG_FIELD_NUMBER: builtins.int
378
+ TRAINING_DATA_SOURCE_TYPE_FIELD_NUMBER: builtins.int
379
+ TRAINING_DESCRIPTION_FIELD_NUMBER: builtins.int
380
+ EXTERNAL_DATASET_URI_FIELD_NUMBER: builtins.int
381
+ INITIALIZATION_TYPE_FIELD_NUMBER: builtins.int
382
+ BASE_MODEL_VERSION_ID_FIELD_NUMBER: builtins.int
383
+ STATUS_FIELD_NUMBER: builtins.int
384
+ ERROR_MESSAGE_FIELD_NUMBER: builtins.int
385
+ OUTPUT_MODEL_VERSION_ID_FIELD_NUMBER: builtins.int
386
+ CREATION_TIME_FIELD_NUMBER: builtins.int
387
+ UPDATE_TIME_FIELD_NUMBER: builtins.int
388
+ COMPLETION_TIME_FIELD_NUMBER: builtins.int
389
+ id: builtins.str
390
+ """Unique identifier for the training job."""
391
+ architecture_version_id: builtins.str
392
+ """Architecture version ID being trained."""
393
+ user_id: builtins.str
394
+ """User ID who submitted the job."""
395
+ training_config: builtins.str
396
+ """Training configuration as JSON."""
397
+ training_data_source_type: global___TrainingDataSourceType.ValueType
398
+ """Type of training data source."""
399
+ training_description: builtins.str
400
+ """Description of the training job. (mutable)"""
401
+ external_dataset_uri: builtins.str
402
+ """External dataset URI (if using external dataset)."""
403
+ initialization_type: global___ModelInitializationType.ValueType
404
+ """Model initialization type."""
405
+ base_model_version_id: builtins.str
406
+ """Base model version ID (if initializing from existing model)."""
407
+ @property
408
+ def status(self) -> luminarycloud._proto.base.base_pb2.JobStatus:
409
+ """Current status of the training job. (mutable)"""
410
+ error_message: builtins.str
411
+ """Error message (if failed)."""
412
+ output_model_version_id: builtins.str
413
+ """Output model version ID (if completed, so mutable)."""
414
+ @property
415
+ def creation_time(self) -> google.protobuf.timestamp_pb2.Timestamp:
416
+ """Job creation time."""
417
+ @property
418
+ def update_time(self) -> google.protobuf.timestamp_pb2.Timestamp:
419
+ """Job last update time, updated when status changes. (mutable)"""
420
+ @property
421
+ def completion_time(self) -> google.protobuf.timestamp_pb2.Timestamp:
422
+ """Job completion time, set upon job completion. (mutable)"""
423
+ def __init__(
424
+ self,
425
+ *,
426
+ id: builtins.str = ...,
427
+ architecture_version_id: builtins.str = ...,
428
+ user_id: builtins.str = ...,
429
+ training_config: builtins.str = ...,
430
+ training_data_source_type: global___TrainingDataSourceType.ValueType = ...,
431
+ training_description: builtins.str = ...,
432
+ external_dataset_uri: builtins.str = ...,
433
+ initialization_type: global___ModelInitializationType.ValueType = ...,
434
+ base_model_version_id: builtins.str = ...,
435
+ status: luminarycloud._proto.base.base_pb2.JobStatus | None = ...,
436
+ error_message: builtins.str = ...,
437
+ output_model_version_id: builtins.str = ...,
438
+ creation_time: google.protobuf.timestamp_pb2.Timestamp | None = ...,
439
+ update_time: google.protobuf.timestamp_pb2.Timestamp | None = ...,
440
+ completion_time: google.protobuf.timestamp_pb2.Timestamp | None = ...,
441
+ ) -> None: ...
442
+ def HasField(self, field_name: typing_extensions.Literal["completion_time", b"completion_time", "creation_time", b"creation_time", "status", b"status", "update_time", b"update_time"]) -> builtins.bool: ...
443
+ def ClearField(self, field_name: typing_extensions.Literal["architecture_version_id", b"architecture_version_id", "base_model_version_id", b"base_model_version_id", "completion_time", b"completion_time", "creation_time", b"creation_time", "error_message", b"error_message", "external_dataset_uri", b"external_dataset_uri", "id", b"id", "initialization_type", b"initialization_type", "output_model_version_id", b"output_model_version_id", "status", b"status", "training_config", b"training_config", "training_data_source_type", b"training_data_source_type", "training_description", b"training_description", "update_time", b"update_time", "user_id", b"user_id"]) -> None: ...
444
+
445
+ global___PhysicsAiTrainingJob = PhysicsAiTrainingJob
446
+
447
+ class SubmitTrainingJobRequest(google.protobuf.message.Message):
448
+ """Request message for submitting a training job"""
449
+
450
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
451
+
452
+ ARCHITECTURE_VERSION_ID_FIELD_NUMBER: builtins.int
453
+ TRAINING_DESCRIPTION_FIELD_NUMBER: builtins.int
454
+ EXTERNAL_DATASET_URI_FIELD_NUMBER: builtins.int
455
+ TRAINING_SOLUTIONS_FIELD_NUMBER: builtins.int
456
+ TRAINING_CONFIG_FIELD_NUMBER: builtins.int
457
+ INITIALIZATION_TYPE_FIELD_NUMBER: builtins.int
458
+ BASE_MODEL_VERSION_ID_FIELD_NUMBER: builtins.int
459
+ architecture_version_id: builtins.str
460
+ """Architecture version ID to train."""
461
+ training_description: builtins.str
462
+ """Description of the training job."""
463
+ external_dataset_uri: builtins.str
464
+ """External dataset URI"""
465
+ @property
466
+ def training_solutions(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TrainingSolution]:
467
+ """Training solutions"""
468
+ training_config: builtins.str
469
+ """Training configuration in JSON format."""
470
+ initialization_type: global___ModelInitializationType.ValueType
471
+ """Model initialization type."""
472
+ base_model_version_id: builtins.str
473
+ """Base model version ID (if initializing from existing model)."""
474
+ def __init__(
475
+ self,
476
+ *,
477
+ architecture_version_id: builtins.str = ...,
478
+ training_description: builtins.str = ...,
479
+ external_dataset_uri: builtins.str = ...,
480
+ training_solutions: collections.abc.Iterable[global___TrainingSolution] | None = ...,
481
+ training_config: builtins.str = ...,
482
+ initialization_type: global___ModelInitializationType.ValueType = ...,
483
+ base_model_version_id: builtins.str = ...,
484
+ ) -> None: ...
485
+ def ClearField(self, field_name: typing_extensions.Literal["architecture_version_id", b"architecture_version_id", "base_model_version_id", b"base_model_version_id", "external_dataset_uri", b"external_dataset_uri", "initialization_type", b"initialization_type", "training_config", b"training_config", "training_description", b"training_description", "training_solutions", b"training_solutions"]) -> None: ...
486
+
487
+ global___SubmitTrainingJobRequest = SubmitTrainingJobRequest
488
+
489
+ class SubmitTrainingJobResponse(google.protobuf.message.Message):
490
+ """Response message for submitting a training job"""
491
+
492
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
493
+
494
+ TRAINING_JOB_FIELD_NUMBER: builtins.int
495
+ @property
496
+ def training_job(self) -> global___PhysicsAiTrainingJob:
497
+ """The created training job."""
498
+ def __init__(
499
+ self,
500
+ *,
501
+ training_job: global___PhysicsAiTrainingJob | None = ...,
502
+ ) -> None: ...
503
+ def HasField(self, field_name: typing_extensions.Literal["training_job", b"training_job"]) -> builtins.bool: ...
504
+ def ClearField(self, field_name: typing_extensions.Literal["training_job", b"training_job"]) -> None: ...
505
+
506
+ global___SubmitTrainingJobResponse = SubmitTrainingJobResponse
@@ -30,6 +30,11 @@ class PhysicsAiServiceStub(object):
30
30
  request_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.GetSolutionDataPhysicsAIRequest.SerializeToString,
31
31
  response_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.GetSolutionDataPhysicsAIResponse.FromString,
32
32
  )
33
+ self.SubmitTrainingJob = channel.unary_unary(
34
+ '/luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiService/SubmitTrainingJob',
35
+ request_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobRequest.SerializeToString,
36
+ response_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobResponse.FromString,
37
+ )
33
38
 
34
39
 
35
40
  class PhysicsAiServiceServicer(object):
@@ -57,6 +62,13 @@ class PhysicsAiServiceServicer(object):
57
62
  context.set_details('Method not implemented!')
58
63
  raise NotImplementedError('Method not implemented!')
59
64
 
65
+ def SubmitTrainingJob(self, request, context):
66
+ """Submits a training job for a Physics AI architecture
67
+ """
68
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
69
+ context.set_details('Method not implemented!')
70
+ raise NotImplementedError('Method not implemented!')
71
+
60
72
 
61
73
  def add_PhysicsAiServiceServicer_to_server(servicer, server):
62
74
  rpc_method_handlers = {
@@ -75,6 +87,11 @@ def add_PhysicsAiServiceServicer_to_server(servicer, server):
75
87
  request_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.GetSolutionDataPhysicsAIRequest.FromString,
76
88
  response_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.GetSolutionDataPhysicsAIResponse.SerializeToString,
77
89
  ),
90
+ 'SubmitTrainingJob': grpc.unary_unary_rpc_method_handler(
91
+ servicer.SubmitTrainingJob,
92
+ request_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobRequest.FromString,
93
+ response_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobResponse.SerializeToString,
94
+ ),
78
95
  }
79
96
  generic_handler = grpc.method_handlers_generic_handler(
80
97
  'luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiService', rpc_method_handlers)
@@ -136,3 +153,20 @@ class PhysicsAiService(object):
136
153
  proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.GetSolutionDataPhysicsAIResponse.FromString,
137
154
  options, channel_credentials,
138
155
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
156
+
157
+ @staticmethod
158
+ def SubmitTrainingJob(request,
159
+ target,
160
+ options=(),
161
+ channel_credentials=None,
162
+ call_credentials=None,
163
+ insecure=False,
164
+ compression=None,
165
+ wait_for_ready=None,
166
+ timeout=None,
167
+ metadata=None):
168
+ return grpc.experimental.unary_unary(request, target, '/luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiService/SubmitTrainingJob',
169
+ proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobRequest.SerializeToString,
170
+ proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobResponse.FromString,
171
+ options, channel_credentials,
172
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -25,6 +25,11 @@ class PhysicsAiServiceStub:
25
25
  luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.GetSolutionDataPhysicsAIResponse,
26
26
  ]
27
27
  """Gets solution data with physics AI processing applied"""
28
+ SubmitTrainingJob: grpc.UnaryUnaryMultiCallable[
29
+ luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobRequest,
30
+ luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobResponse,
31
+ ]
32
+ """Submits a training job for a Physics AI architecture"""
28
33
 
29
34
  class PhysicsAiServiceServicer(metaclass=abc.ABCMeta):
30
35
  """Manages physics ai architectures."""
@@ -50,5 +55,12 @@ class PhysicsAiServiceServicer(metaclass=abc.ABCMeta):
50
55
  context: grpc.ServicerContext,
51
56
  ) -> luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.GetSolutionDataPhysicsAIResponse:
52
57
  """Gets solution data with physics AI processing applied"""
58
+ @abc.abstractmethod
59
+ def SubmitTrainingJob(
60
+ self,
61
+ request: luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobRequest,
62
+ context: grpc.ServicerContext,
63
+ ) -> luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobResponse:
64
+ """Submits a training job for a Physics AI architecture"""
53
65
 
54
66
  def add_PhysicsAiServiceServicer_to_server(servicer: PhysicsAiServiceServicer, server: grpc.Server) -> None: ...