luminarycloud 0.22.0__py3-none-any.whl → 0.22.2__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 (86) hide show
  1. luminarycloud/_client/authentication_plugin.py +49 -0
  2. luminarycloud/_client/client.py +38 -11
  3. luminarycloud/_client/http_client.py +1 -1
  4. luminarycloud/_client/retry_interceptor.py +64 -2
  5. luminarycloud/_helpers/__init__.py +9 -0
  6. luminarycloud/_helpers/_inference_jobs.py +227 -0
  7. luminarycloud/_helpers/_parse_iso_datetime.py +54 -0
  8. luminarycloud/_helpers/download.py +11 -0
  9. luminarycloud/_helpers/proto_decorator.py +38 -7
  10. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +152 -132
  11. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +66 -8
  12. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +34 -0
  13. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +12 -0
  14. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +142 -39
  15. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +300 -3
  16. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +34 -0
  17. luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +12 -0
  18. luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2.py +255 -0
  19. luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2.pyi +466 -0
  20. luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2_grpc.py +242 -0
  21. luminarycloud/_proto/api/v0/luminarycloud/physicsaiinference/physicsaiinference_pb2_grpc.pyi +95 -0
  22. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +29 -7
  23. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +39 -0
  24. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.py +36 -0
  25. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2_grpc.pyi +18 -0
  26. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py +88 -65
  27. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi +42 -0
  28. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.py +34 -0
  29. luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2_grpc.pyi +12 -0
  30. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +163 -153
  31. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +37 -3
  32. luminarycloud/_proto/base/base_pb2.py +7 -6
  33. luminarycloud/_proto/base/base_pb2.pyi +4 -0
  34. luminarycloud/_proto/client/simulation_pb2.py +358 -339
  35. luminarycloud/_proto/client/simulation_pb2.pyi +89 -3
  36. luminarycloud/_proto/physicsaiinferenceservice/physicsaiinferenceservice_pb2.py +35 -0
  37. luminarycloud/_proto/physicsaiinferenceservice/physicsaiinferenceservice_pb2.pyi +7 -0
  38. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +6 -3
  39. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +68 -0
  40. luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +24 -0
  41. luminarycloud/_wrapper.py +53 -7
  42. luminarycloud/enum/vis_enums.py +6 -0
  43. luminarycloud/feature_modification.py +25 -32
  44. luminarycloud/geometry.py +10 -6
  45. luminarycloud/geometry_version.py +4 -0
  46. luminarycloud/mesh.py +4 -0
  47. luminarycloud/meshing/mesh_generation_params.py +5 -6
  48. luminarycloud/meshing/sizing_strategy/sizing_strategies.py +1 -2
  49. luminarycloud/outputs/__init__.py +2 -0
  50. luminarycloud/outputs/output_definitions.py +3 -3
  51. luminarycloud/outputs/stopping_conditions.py +94 -0
  52. luminarycloud/params/enum/_enum_wrappers.py +16 -0
  53. luminarycloud/params/geometry/shapes.py +33 -33
  54. luminarycloud/params/simulation/adaptive_mesh_refinement/__init__.py +1 -0
  55. luminarycloud/params/simulation/adaptive_mesh_refinement/active_region_.py +83 -0
  56. luminarycloud/params/simulation/adaptive_mesh_refinement/boundary_layer_profile_.py +1 -1
  57. luminarycloud/params/simulation/adaptive_mesh_refinement_.py +8 -1
  58. luminarycloud/physics_ai/__init__.py +7 -0
  59. luminarycloud/physics_ai/inference.py +166 -199
  60. luminarycloud/physics_ai/models.py +22 -0
  61. luminarycloud/physics_ai/solution.py +4 -0
  62. luminarycloud/pipelines/api.py +143 -16
  63. luminarycloud/pipelines/core.py +1 -1
  64. luminarycloud/pipelines/stages.py +22 -9
  65. luminarycloud/project.py +61 -8
  66. luminarycloud/simulation.py +25 -0
  67. luminarycloud/types/__init__.py +2 -0
  68. luminarycloud/types/ids.py +2 -0
  69. luminarycloud/types/vector3.py +1 -2
  70. luminarycloud/vis/__init__.py +1 -0
  71. luminarycloud/vis/data_extraction.py +7 -7
  72. luminarycloud/vis/filters.py +97 -0
  73. luminarycloud/vis/interactive_report.py +163 -7
  74. luminarycloud/vis/report.py +113 -1
  75. luminarycloud/vis/visualization.py +3 -0
  76. luminarycloud/volume_selection.py +16 -8
  77. luminarycloud/workflow_utils.py +149 -0
  78. {luminarycloud-0.22.0.dist-info → luminarycloud-0.22.2.dist-info}/METADATA +1 -1
  79. {luminarycloud-0.22.0.dist-info → luminarycloud-0.22.2.dist-info}/RECORD +80 -76
  80. {luminarycloud-0.22.0.dist-info → luminarycloud-0.22.2.dist-info}/WHEEL +1 -1
  81. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.py +0 -61
  82. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.pyi +0 -85
  83. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2_grpc.py +0 -67
  84. luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2_grpc.pyi +0 -26
  85. luminarycloud/_proto/inferenceservice/inferenceservice_pb2.py +0 -69
  86. luminarycloud/pipeline_util/dictable.py +0 -27
@@ -8,6 +8,7 @@ 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.struct_pb2
11
12
  import google.protobuf.timestamp_pb2
12
13
  import luminarycloud._proto.api.v0.luminarycloud.common.common_pb2
13
14
  import luminarycloud._proto.base.base_pb2
@@ -282,6 +283,26 @@ class ListPretrainedModelsResponse(google.protobuf.message.Message):
282
283
 
283
284
  global___ListPretrainedModelsResponse = ListPretrainedModelsResponse
284
285
 
286
+ class SurfaceGroup(google.protobuf.message.Message):
287
+ """Represents a named group of surfaces to export as a single STL file"""
288
+
289
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
290
+
291
+ NAME_FIELD_NUMBER: builtins.int
292
+ SURFACES_FIELD_NUMBER: builtins.int
293
+ name: builtins.str
294
+ @property
295
+ def surfaces(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
296
+ def __init__(
297
+ self,
298
+ *,
299
+ name: builtins.str = ...,
300
+ surfaces: collections.abc.Iterable[builtins.str] | None = ...,
301
+ ) -> None: ...
302
+ def ClearField(self, field_name: typing_extensions.Literal["name", b"name", "surfaces", b"surfaces"]) -> None: ...
303
+
304
+ global___SurfaceGroup = SurfaceGroup
305
+
285
306
  class GetSolutionDataPhysicsAIRequest(google.protobuf.message.Message):
286
307
  """Request message for download and process solutions for physics ai"""
287
308
 
@@ -310,6 +331,7 @@ class GetSolutionDataPhysicsAIRequest(google.protobuf.message.Message):
310
331
  PROCESS_VOLUME_FIELD_NUMBER: builtins.int
311
332
  SINGLE_PRECISION_FIELD_NUMBER: builtins.int
312
333
  INTERNAL_OPTIONS_FIELD_NUMBER: builtins.int
334
+ EXPORT_SURFACE_GROUPS_FIELD_NUMBER: builtins.int
313
335
  solution_id: builtins.str
314
336
  """Required. The globally unique identifier for the solution."""
315
337
  @property
@@ -330,6 +352,9 @@ class GetSolutionDataPhysicsAIRequest(google.protobuf.message.Message):
330
352
  @property
331
353
  def internal_options(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]:
332
354
  """Internal options for physics AI processing only available for staff users."""
355
+ @property
356
+ def export_surface_groups(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SurfaceGroup]:
357
+ """List of surface groups to export as individual STL files"""
333
358
  def __init__(
334
359
  self,
335
360
  *,
@@ -341,8 +366,9 @@ class GetSolutionDataPhysicsAIRequest(google.protobuf.message.Message):
341
366
  process_volume: builtins.bool = ...,
342
367
  single_precision: builtins.bool = ...,
343
368
  internal_options: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
369
+ export_surface_groups: collections.abc.Iterable[global___SurfaceGroup] | None = ...,
344
370
  ) -> None: ...
345
- def ClearField(self, field_name: typing_extensions.Literal["exclude_surfaces", b"exclude_surfaces", "fill_holes", b"fill_holes", "internal_options", b"internal_options", "process_volume", b"process_volume", "single_precision", b"single_precision", "solution_id", b"solution_id", "surface_fields_to_keep", b"surface_fields_to_keep", "volume_fields_to_keep", b"volume_fields_to_keep"]) -> None: ...
371
+ def ClearField(self, field_name: typing_extensions.Literal["exclude_surfaces", b"exclude_surfaces", "export_surface_groups", b"export_surface_groups", "fill_holes", b"fill_holes", "internal_options", b"internal_options", "process_volume", b"process_volume", "single_precision", b"single_precision", "solution_id", b"solution_id", "surface_fields_to_keep", b"surface_fields_to_keep", "volume_fields_to_keep", b"volume_fields_to_keep"]) -> None: ...
346
372
 
347
373
  global___GetSolutionDataPhysicsAIRequest = GetSolutionDataPhysicsAIRequest
348
374
 
@@ -406,6 +432,7 @@ class PhysicsAiTrainingJob(google.protobuf.message.Message):
406
432
  CREATION_TIME_FIELD_NUMBER: builtins.int
407
433
  UPDATE_TIME_FIELD_NUMBER: builtins.int
408
434
  COMPLETION_TIME_FIELD_NUMBER: builtins.int
435
+ DATASET_ID_FIELD_NUMBER: builtins.int
409
436
  id: builtins.str
410
437
  """Unique identifier for the training job."""
411
438
  architecture_version_id: builtins.str
@@ -440,6 +467,8 @@ class PhysicsAiTrainingJob(google.protobuf.message.Message):
440
467
  @property
441
468
  def completion_time(self) -> google.protobuf.timestamp_pb2.Timestamp:
442
469
  """Job completion time, set upon job completion. (mutable)"""
470
+ dataset_id: builtins.str
471
+ """Dataset ID used for training (if using dataset-based training)."""
443
472
  def __init__(
444
473
  self,
445
474
  *,
@@ -458,9 +487,10 @@ class PhysicsAiTrainingJob(google.protobuf.message.Message):
458
487
  creation_time: google.protobuf.timestamp_pb2.Timestamp | None = ...,
459
488
  update_time: google.protobuf.timestamp_pb2.Timestamp | None = ...,
460
489
  completion_time: google.protobuf.timestamp_pb2.Timestamp | None = ...,
490
+ dataset_id: builtins.str = ...,
461
491
  ) -> None: ...
462
492
  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: ...
463
- 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: ...
493
+ 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", "dataset_id", b"dataset_id", "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: ...
464
494
 
465
495
  global___PhysicsAiTrainingJob = PhysicsAiTrainingJob
466
496
 
@@ -476,6 +506,7 @@ class SubmitTrainingJobRequest(google.protobuf.message.Message):
476
506
  TRAINING_CONFIG_FIELD_NUMBER: builtins.int
477
507
  INITIALIZATION_TYPE_FIELD_NUMBER: builtins.int
478
508
  BASE_MODEL_VERSION_ID_FIELD_NUMBER: builtins.int
509
+ DATASET_ID_FIELD_NUMBER: builtins.int
479
510
  architecture_version_id: builtins.str
480
511
  """Architecture version ID to train."""
481
512
  training_description: builtins.str
@@ -491,6 +522,8 @@ class SubmitTrainingJobRequest(google.protobuf.message.Message):
491
522
  """Model initialization type."""
492
523
  base_model_version_id: builtins.str
493
524
  """Base model version ID (if initializing from existing model)."""
525
+ dataset_id: builtins.str
526
+ """Dataset ID to use for training (if using dataset-based training)."""
494
527
  def __init__(
495
528
  self,
496
529
  *,
@@ -501,8 +534,9 @@ class SubmitTrainingJobRequest(google.protobuf.message.Message):
501
534
  training_config: builtins.str = ...,
502
535
  initialization_type: global___ModelInitializationType.ValueType = ...,
503
536
  base_model_version_id: builtins.str = ...,
537
+ dataset_id: builtins.str = ...,
504
538
  ) -> None: ...
505
- 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: ...
539
+ def ClearField(self, field_name: typing_extensions.Literal["architecture_version_id", b"architecture_version_id", "base_model_version_id", b"base_model_version_id", "dataset_id", b"dataset_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: ...
506
540
 
507
541
  global___SubmitTrainingJobRequest = SubmitTrainingJobRequest
508
542
 
@@ -524,3 +558,266 @@ class SubmitTrainingJobResponse(google.protobuf.message.Message):
524
558
  def ClearField(self, field_name: typing_extensions.Literal["training_job", b"training_job"]) -> None: ...
525
559
 
526
560
  global___SubmitTrainingJobResponse = SubmitTrainingJobResponse
561
+
562
+ class CancelTrainingJobRequest(google.protobuf.message.Message):
563
+ """Request message for canceling a training job."""
564
+
565
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
566
+
567
+ TRAINING_JOB_ID_FIELD_NUMBER: builtins.int
568
+ training_job_id: builtins.str
569
+ """Training job ID to cancel."""
570
+ def __init__(
571
+ self,
572
+ *,
573
+ training_job_id: builtins.str = ...,
574
+ ) -> None: ...
575
+ def ClearField(self, field_name: typing_extensions.Literal["training_job_id", b"training_job_id"]) -> None: ...
576
+
577
+ global___CancelTrainingJobRequest = CancelTrainingJobRequest
578
+
579
+ class CancelTrainingJobResponse(google.protobuf.message.Message):
580
+ """Response message for canceling a training job."""
581
+
582
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
583
+
584
+ def __init__(
585
+ self,
586
+ ) -> None: ...
587
+
588
+ global___CancelTrainingJobResponse = CancelTrainingJobResponse
589
+
590
+ class PhysicsAiDataset(google.protobuf.message.Message):
591
+ """A Physics AI dataset"""
592
+
593
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
594
+
595
+ ID_FIELD_NUMBER: builtins.int
596
+ CREATED_BY_FIELD_NUMBER: builtins.int
597
+ NAME_FIELD_NUMBER: builtins.int
598
+ DESCRIPTION_FIELD_NUMBER: builtins.int
599
+ IS_LOCKED_FIELD_NUMBER: builtins.int
600
+ CREATION_TIME_FIELD_NUMBER: builtins.int
601
+ UPDATE_TIME_FIELD_NUMBER: builtins.int
602
+ LOCKED_AT_FIELD_NUMBER: builtins.int
603
+ CASES_FIELD_NUMBER: builtins.int
604
+ EXPORT_CONFIG_FIELD_NUMBER: builtins.int
605
+ id: builtins.str
606
+ """Unique identifier for the dataset."""
607
+ created_by: builtins.str
608
+ """User ID who created the dataset (empty for platform-curated datasets)."""
609
+ name: builtins.str
610
+ """Name of the dataset."""
611
+ description: builtins.str
612
+ """Description of the dataset."""
613
+ is_locked: builtins.bool
614
+ """Whether the dataset is locked (immutable after first training)."""
615
+ @property
616
+ def creation_time(self) -> google.protobuf.timestamp_pb2.Timestamp:
617
+ """Dataset creation time."""
618
+ @property
619
+ def update_time(self) -> google.protobuf.timestamp_pb2.Timestamp:
620
+ """Dataset last update time."""
621
+ @property
622
+ def locked_at(self) -> google.protobuf.timestamp_pb2.Timestamp:
623
+ """Dataset locked time (if locked)."""
624
+ @property
625
+ def cases(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___PhysicsAiDatasetCase]:
626
+ """Cases in this dataset."""
627
+ @property
628
+ def export_config(self) -> global___GetSolutionDataPhysicsAIRequest:
629
+ """Export configuration for extracting solution data for cases. The field
630
+ solution_id is ignored.
631
+ """
632
+ def __init__(
633
+ self,
634
+ *,
635
+ id: builtins.str = ...,
636
+ created_by: builtins.str = ...,
637
+ name: builtins.str = ...,
638
+ description: builtins.str = ...,
639
+ is_locked: builtins.bool = ...,
640
+ creation_time: google.protobuf.timestamp_pb2.Timestamp | None = ...,
641
+ update_time: google.protobuf.timestamp_pb2.Timestamp | None = ...,
642
+ locked_at: google.protobuf.timestamp_pb2.Timestamp | None = ...,
643
+ cases: collections.abc.Iterable[global___PhysicsAiDatasetCase] | None = ...,
644
+ export_config: global___GetSolutionDataPhysicsAIRequest | None = ...,
645
+ ) -> None: ...
646
+ def HasField(self, field_name: typing_extensions.Literal["creation_time", b"creation_time", "export_config", b"export_config", "locked_at", b"locked_at", "update_time", b"update_time"]) -> builtins.bool: ...
647
+ def ClearField(self, field_name: typing_extensions.Literal["cases", b"cases", "created_by", b"created_by", "creation_time", b"creation_time", "description", b"description", "export_config", b"export_config", "id", b"id", "is_locked", b"is_locked", "locked_at", b"locked_at", "name", b"name", "update_time", b"update_time"]) -> None: ...
648
+
649
+ global___PhysicsAiDataset = PhysicsAiDataset
650
+
651
+ class PhysicsAiDatasetCaseFile(google.protobuf.message.Message):
652
+ """A file in a Physics AI dataset case"""
653
+
654
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
655
+
656
+ FILE_TYPE_FIELD_NUMBER: builtins.int
657
+ NAME_FIELD_NUMBER: builtins.int
658
+ file_type: builtins.str
659
+ """File type (e.g., "vtp", "stl", "vtu")."""
660
+ name: builtins.str
661
+ """File name (e.g., "merged_surfaces")."""
662
+ def __init__(
663
+ self,
664
+ *,
665
+ file_type: builtins.str = ...,
666
+ name: builtins.str = ...,
667
+ ) -> None: ...
668
+ def ClearField(self, field_name: typing_extensions.Literal["file_type", b"file_type", "name", b"name"]) -> None: ...
669
+
670
+ global___PhysicsAiDatasetCaseFile = PhysicsAiDatasetCaseFile
671
+
672
+ class PhysicsAiDatasetCaseFiles(google.protobuf.message.Message):
673
+ """Wrapper message for storing repeated PhysicsAiDatasetCaseFile in JSONB."""
674
+
675
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
676
+
677
+ FILES_FIELD_NUMBER: builtins.int
678
+ @property
679
+ def files(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___PhysicsAiDatasetCaseFile]: ...
680
+ def __init__(
681
+ self,
682
+ *,
683
+ files: collections.abc.Iterable[global___PhysicsAiDatasetCaseFile] | None = ...,
684
+ ) -> None: ...
685
+ def ClearField(self, field_name: typing_extensions.Literal["files", b"files"]) -> None: ...
686
+
687
+ global___PhysicsAiDatasetCaseFiles = PhysicsAiDatasetCaseFiles
688
+
689
+ class PhysicsAiDatasetCase(google.protobuf.message.Message):
690
+ """A case in a Physics AI dataset"""
691
+
692
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
693
+
694
+ CASE_ID_FIELD_NUMBER: builtins.int
695
+ SOLUTION_ID_FIELD_NUMBER: builtins.int
696
+ SIMULATION_ID_FIELD_NUMBER: builtins.int
697
+ PARAMS_FIELD_NUMBER: builtins.int
698
+ FILES_FIELD_NUMBER: builtins.int
699
+ SOURCE_METADATA_FIELD_NUMBER: builtins.int
700
+ case_id: builtins.str
701
+ """Unique identifier for this case within the dataset (server-generated)."""
702
+ solution_id: builtins.str
703
+ """Solution ID if this case was created from a simulation solution."""
704
+ simulation_id: builtins.str
705
+ """Simulation ID if this case was created from a simulation."""
706
+ @property
707
+ def params(self) -> google.protobuf.struct_pb2.Struct:
708
+ """Parameters for this case as JSON string."""
709
+ @property
710
+ def files(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___PhysicsAiDatasetCaseFile]:
711
+ """Files associated with this case."""
712
+ @property
713
+ def source_metadata(self) -> google.protobuf.struct_pb2.Struct:
714
+ """Source metadata as JSON string."""
715
+ def __init__(
716
+ self,
717
+ *,
718
+ case_id: builtins.str = ...,
719
+ solution_id: builtins.str = ...,
720
+ simulation_id: builtins.str = ...,
721
+ params: google.protobuf.struct_pb2.Struct | None = ...,
722
+ files: collections.abc.Iterable[global___PhysicsAiDatasetCaseFile] | None = ...,
723
+ source_metadata: google.protobuf.struct_pb2.Struct | None = ...,
724
+ ) -> None: ...
725
+ def HasField(self, field_name: typing_extensions.Literal["params", b"params", "source_metadata", b"source_metadata"]) -> builtins.bool: ...
726
+ def ClearField(self, field_name: typing_extensions.Literal["case_id", b"case_id", "files", b"files", "params", b"params", "simulation_id", b"simulation_id", "solution_id", b"solution_id", "source_metadata", b"source_metadata"]) -> None: ...
727
+
728
+ global___PhysicsAiDatasetCase = PhysicsAiDatasetCase
729
+
730
+ class CreatePhysicsAiDatasetCaseInput(google.protobuf.message.Message):
731
+ """Input for creating a case in a Physics AI dataset (case_id is server-generated)"""
732
+
733
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
734
+
735
+ SOLUTION_ID_FIELD_NUMBER: builtins.int
736
+ SIMULATION_ID_FIELD_NUMBER: builtins.int
737
+ PARAMS_FIELD_NUMBER: builtins.int
738
+ FILES_FIELD_NUMBER: builtins.int
739
+ SOURCE_METADATA_FIELD_NUMBER: builtins.int
740
+ solution_id: builtins.str
741
+ """Solution ID if this case was created from a simulation solution."""
742
+ simulation_id: builtins.str
743
+ """Simulation ID if this case was created from a simulation."""
744
+ @property
745
+ def params(self) -> google.protobuf.struct_pb2.Struct:
746
+ """Parameters for this case as JSON string."""
747
+ @property
748
+ def files(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___PhysicsAiDatasetCaseFile]:
749
+ """Files associated with this case."""
750
+ @property
751
+ def source_metadata(self) -> google.protobuf.struct_pb2.Struct:
752
+ """Source metadata as JSON string."""
753
+ def __init__(
754
+ self,
755
+ *,
756
+ solution_id: builtins.str = ...,
757
+ simulation_id: builtins.str = ...,
758
+ params: google.protobuf.struct_pb2.Struct | None = ...,
759
+ files: collections.abc.Iterable[global___PhysicsAiDatasetCaseFile] | None = ...,
760
+ source_metadata: google.protobuf.struct_pb2.Struct | None = ...,
761
+ ) -> None: ...
762
+ def HasField(self, field_name: typing_extensions.Literal["params", b"params", "source_metadata", b"source_metadata"]) -> builtins.bool: ...
763
+ def ClearField(self, field_name: typing_extensions.Literal["files", b"files", "params", b"params", "simulation_id", b"simulation_id", "solution_id", b"solution_id", "source_metadata", b"source_metadata"]) -> None: ...
764
+
765
+ global___CreatePhysicsAiDatasetCaseInput = CreatePhysicsAiDatasetCaseInput
766
+
767
+ class CreateDatasetRequest(google.protobuf.message.Message):
768
+ """Request message for creating a dataset"""
769
+
770
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
771
+
772
+ NAME_FIELD_NUMBER: builtins.int
773
+ DESCRIPTION_FIELD_NUMBER: builtins.int
774
+ CASES_FIELD_NUMBER: builtins.int
775
+ PARAMETER_SCHEMA_FIELD_NUMBER: builtins.int
776
+ EXPORT_CONFIG_FIELD_NUMBER: builtins.int
777
+ name: builtins.str
778
+ """Name of the dataset."""
779
+ description: builtins.str
780
+ """Optional description of the dataset."""
781
+ @property
782
+ def cases(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___CreatePhysicsAiDatasetCaseInput]:
783
+ """Cases to add to the dataset (case_id will be server-generated)."""
784
+ @property
785
+ def parameter_schema(self) -> google.protobuf.struct_pb2.Struct:
786
+ """JSON schema defining allowed parameters for cases in this dataset."""
787
+ @property
788
+ def export_config(self) -> global___GetSolutionDataPhysicsAIRequest:
789
+ """Export configuration for extracting solution data forthe cases. The
790
+ solution_id field is ignored.
791
+ """
792
+ def __init__(
793
+ self,
794
+ *,
795
+ name: builtins.str = ...,
796
+ description: builtins.str = ...,
797
+ cases: collections.abc.Iterable[global___CreatePhysicsAiDatasetCaseInput] | None = ...,
798
+ parameter_schema: google.protobuf.struct_pb2.Struct | None = ...,
799
+ export_config: global___GetSolutionDataPhysicsAIRequest | None = ...,
800
+ ) -> None: ...
801
+ def HasField(self, field_name: typing_extensions.Literal["export_config", b"export_config", "parameter_schema", b"parameter_schema"]) -> builtins.bool: ...
802
+ def ClearField(self, field_name: typing_extensions.Literal["cases", b"cases", "description", b"description", "export_config", b"export_config", "name", b"name", "parameter_schema", b"parameter_schema"]) -> None: ...
803
+
804
+ global___CreateDatasetRequest = CreateDatasetRequest
805
+
806
+ class CreateDatasetResponse(google.protobuf.message.Message):
807
+ """Response message for creating a dataset"""
808
+
809
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
810
+
811
+ DATASET_FIELD_NUMBER: builtins.int
812
+ @property
813
+ def dataset(self) -> global___PhysicsAiDataset:
814
+ """The created dataset."""
815
+ def __init__(
816
+ self,
817
+ *,
818
+ dataset: global___PhysicsAiDataset | None = ...,
819
+ ) -> None: ...
820
+ def HasField(self, field_name: typing_extensions.Literal["dataset", b"dataset"]) -> builtins.bool: ...
821
+ def ClearField(self, field_name: typing_extensions.Literal["dataset", b"dataset"]) -> None: ...
822
+
823
+ global___CreateDatasetResponse = CreateDatasetResponse
@@ -35,6 +35,11 @@ class PhysicsAiServiceStub(object):
35
35
  request_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobRequest.SerializeToString,
36
36
  response_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobResponse.FromString,
37
37
  )
38
+ self.CreateDataset = channel.unary_unary(
39
+ '/luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiService/CreateDataset',
40
+ request_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.CreateDatasetRequest.SerializeToString,
41
+ response_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.CreateDatasetResponse.FromString,
42
+ )
38
43
 
39
44
 
40
45
  class PhysicsAiServiceServicer(object):
@@ -69,6 +74,13 @@ class PhysicsAiServiceServicer(object):
69
74
  context.set_details('Method not implemented!')
70
75
  raise NotImplementedError('Method not implemented!')
71
76
 
77
+ def CreateDataset(self, request, context):
78
+ """Creates a new Physics AI dataset
79
+ """
80
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
81
+ context.set_details('Method not implemented!')
82
+ raise NotImplementedError('Method not implemented!')
83
+
72
84
 
73
85
  def add_PhysicsAiServiceServicer_to_server(servicer, server):
74
86
  rpc_method_handlers = {
@@ -92,6 +104,11 @@ def add_PhysicsAiServiceServicer_to_server(servicer, server):
92
104
  request_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobRequest.FromString,
93
105
  response_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobResponse.SerializeToString,
94
106
  ),
107
+ 'CreateDataset': grpc.unary_unary_rpc_method_handler(
108
+ servicer.CreateDataset,
109
+ request_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.CreateDatasetRequest.FromString,
110
+ response_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.CreateDatasetResponse.SerializeToString,
111
+ ),
95
112
  }
96
113
  generic_handler = grpc.method_handlers_generic_handler(
97
114
  'luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiService', rpc_method_handlers)
@@ -170,3 +187,20 @@ class PhysicsAiService(object):
170
187
  proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.SubmitTrainingJobResponse.FromString,
171
188
  options, channel_credentials,
172
189
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
190
+
191
+ @staticmethod
192
+ def CreateDataset(request,
193
+ target,
194
+ options=(),
195
+ channel_credentials=None,
196
+ call_credentials=None,
197
+ insecure=False,
198
+ compression=None,
199
+ wait_for_ready=None,
200
+ timeout=None,
201
+ metadata=None):
202
+ return grpc.experimental.unary_unary(request, target, '/luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiService/CreateDataset',
203
+ proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.CreateDatasetRequest.SerializeToString,
204
+ proto_dot_api_dot_v0_dot_luminarycloud_dot_physics__ai_dot_physics__ai__pb2.CreateDatasetResponse.FromString,
205
+ options, channel_credentials,
206
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -30,6 +30,11 @@ class PhysicsAiServiceStub:
30
30
  luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobResponse,
31
31
  ]
32
32
  """Submits a training job for a Physics AI architecture"""
33
+ CreateDataset: grpc.UnaryUnaryMultiCallable[
34
+ luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.CreateDatasetRequest,
35
+ luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.CreateDatasetResponse,
36
+ ]
37
+ """Creates a new Physics AI dataset"""
33
38
 
34
39
  class PhysicsAiServiceServicer(metaclass=abc.ABCMeta):
35
40
  """Manages physics ai architectures."""
@@ -62,5 +67,12 @@ class PhysicsAiServiceServicer(metaclass=abc.ABCMeta):
62
67
  context: grpc.ServicerContext,
63
68
  ) -> luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.SubmitTrainingJobResponse:
64
69
  """Submits a training job for a Physics AI architecture"""
70
+ @abc.abstractmethod
71
+ def CreateDataset(
72
+ self,
73
+ request: luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.CreateDatasetRequest,
74
+ context: grpc.ServicerContext,
75
+ ) -> luminarycloud._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2.CreateDatasetResponse:
76
+ """Creates a new Physics AI dataset"""
65
77
 
66
78
  def add_PhysicsAiServiceServicer_to_server(servicer: PhysicsAiServiceServicer, server: grpc.Server) -> None: ...