luminarycloud 0.19.1__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.
- luminarycloud/_client/client.py +2 -0
- luminarycloud/_helpers/_wait_for_mesh.py +6 -5
- luminarycloud/_helpers/_wait_for_simulation.py +3 -3
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +77 -27
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +85 -0
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py +66 -0
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi +20 -0
- luminarycloud/exceptions.py +7 -1
- luminarycloud/geometry.py +3 -1
- luminarycloud/mesh.py +1 -2
- luminarycloud/pipelines/api.py +1 -6
- luminarycloud/simulation.py +1 -2
- luminarycloud/vis/__init__.py +15 -0
- luminarycloud/vis/data_extraction.py +20 -4
- luminarycloud/vis/interactive_report.py +124 -0
- luminarycloud/vis/interactive_scene.py +29 -2
- luminarycloud/vis/report.py +98 -0
- luminarycloud/vis/visualization.py +67 -5
- {luminarycloud-0.19.1.dist-info → luminarycloud-0.20.0.dist-info}/METADATA +1 -1
- {luminarycloud-0.19.1.dist-info → luminarycloud-0.20.0.dist-info}/RECORD +21 -19
- {luminarycloud-0.19.1.dist-info → luminarycloud-0.20.0.dist-info}/WHEEL +0 -0
luminarycloud/_client/client.py
CHANGED
|
@@ -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
|
-
|
|
35
|
+
Timeout
|
|
36
36
|
"""
|
|
37
37
|
deadline = time() + timeout_seconds
|
|
38
38
|
while True:
|
|
39
39
|
if time() >= deadline:
|
|
40
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
|
@@ -20,7 +20,7 @@ from luminarycloud._proto.table import table_pb2 as proto_dot_table_dot_table__p
|
|
|
20
20
|
from luminarycloud._proto.api.v0.luminarycloud.common import common_pb2 as proto_dot_api_dot_v0_dot_luminarycloud_dot_common_dot_common__pb2
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(proto/api/v0/luminarycloud/vis/vis.proto\x12\'luminary.proto.api.v0.luminarycloud.vis\x1a\x1cgoogle/api/annotations.proto\x1a\x1bproto/options/options.proto\x1a\x1dproto/quantity/quantity.proto\x1a\x17proto/table/table.proto\x1a.proto/api/v0/luminarycloud/common/common.proto\"=\n\x03Pan\x12\x1a\n\x01x\x18\x01 \x01(\x01\x42\x0f\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x12\x1a\n\x01y\x18\x02 \x01(\x01\x42\x0f\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\x00\x00\"\xa4\x02\n\x0c\x43\x61meraLookAt\x12\x45\n\x08position\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x44\n\x07look_at\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12?\n\x02up\x18\x03 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12>\n\x03pan\x18\x04 \x01(\x0b\x32,.luminary.proto.api.v0.luminarycloud.vis.PanH\x00\x88\x01\x01\x42\x06\n\x04_pan\"}\n\nResolution\x12\x36\n\x05width\x18\x01 \x01(\x05\x42\'\x82\xb2\x19\x03\x30\x80\x0f\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00Y@\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xb0@\x8a\xb2\x19\x02\x18\x00\x12\x37\n\x06height\x18\x02 \x01(\x05\x42\'\x82\xb2\x19\x03\x30\xb8\x08\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00Y@\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xb0@\x8a\xb2\x19\x02\x18\x00\"\xde\x02\n\x06\x43\x61mera\x12U\n\nprojection\x18\x01 \x01(\x0e\x32\x39.luminary.proto.api.v0.luminarycloud.vis.CameraProjectionB\x06\x82\xb2\x19\x02 \x02\x12U\n\tdirection\x18\x02 \x01(\x0e\x32\x38.luminary.proto.api.v0.luminarycloud.vis.CameraDirectionB\x06\x82\xb2\x19\x02 \x03H\x00\x12H\n\x07look_at\x18\x03 \x01(\x0b\x32\x35.luminary.proto.api.v0.luminarycloud.vis.CameraLookAtH\x00\x12\x42\n\x04zoom\x18\x04 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00H\x01\x88\x01\x01\x42\x0f\n\rspecificationB\x07\n\x05_zoom\"\xb2\x01\n\x17\x41nimationSettingsStatic\x12?\n\x06\x63\x61mera\x18\x01 \x01(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Camera\x12G\n\nresolution\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.Resolution\x12\r\n\x05label\x18\x03 \x01(\t\"\xee\x02\n\x19\x41nimationSettingsTimeStep\x12?\n\x06\x63\x61mera\x18\x01 \x01(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Camera\x12G\n\nresolution\x18\x04 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.Resolution\x12\x61\n\x06\x66ormat\x18\x05 \x01(\x0e\x32I.luminary.proto.api.v0.luminarycloud.vis.AnimationSettingsTimeStep.FormatB\x06\x82\xb2\x19\x02 \x02\x12\x13\n\x0bskip_frames\x18\x06 \x01(\x05\x12\r\n\x05label\x18\x07 \x01(\t\"@\n\x06\x46ormat\x12\x16\n\x12\x46ORMAT_UNSPECIFIED\x10\x00\x12\x0e\n\nFORMAT_GIF\x10\x01\x12\x0e\n\nFORMAT_MP4\x10\x02\"a\n\x0eStaticSettings\x12O\n\x05items\x18\x01 \x03(\x0b\x32@.luminary.proto.api.v0.luminarycloud.vis.AnimationSettingsStatic\"e\n\x10TimeStepSettings\x12Q\n\x05items\x18\x01 \x03(\x0b\x32\x42.luminary.proto.api.v0.luminarycloud.vis.AnimationSettingsTimeStep\"\xbe\x01\n\x13\x41nimationProperties\x12J\n\x07statics\x18\x01 \x01(\x0b\x32\x37.luminary.proto.api.v0.luminarycloud.vis.StaticSettingsH\x00\x12O\n\ntime_steps\x18\x02 \x01(\x0b\x32\x39.luminary.proto.api.v0.luminarycloud.vis.TimeStepSettingsH\x00\x42\n\n\x08settings\"\x8e\x02\n\x05\x46ield\x12;\n\x0cquantity_typ\x18\x01 \x01(\x0e\x32%.luminary.proto.quantity.QuantityType\x12K\n\tcomponent\x18\x02 \x01(\x0e\x32\x38.luminary.proto.api.v0.luminarycloud.vis.Field.Component\"{\n\tComponent\x12\x19\n\x15\x43OMPONENT_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x43OMPONENT_X\x10\x01\x12\x0f\n\x0b\x43OMPONENT_Y\x10\x02\x12\x0f\n\x0b\x43OMPONENT_Z\x10\x03\x12 \n\x13\x43OMPONENT_MAGNITUDE\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xe7\x01\n\x11\x44isplayAttributes\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12\x14\n\x07visible\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12O\n\x0erepresentation\x18\x03 \x01(\x0e\x32\x37.luminary.proto.api.v0.luminarycloud.vis.Representation\x12\x14\n\x07opacity\x18\x04 \x01(\x01H\x01\x88\x01\x01\x42\n\n\x08_visibleB\n\n\x08_opacity\"\x91\x01\n\x05Plane\x12\x43\n\x06origin\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x43\n\x06normal\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\"\x8a\x01\n\x04\x41\x41\x42\x42\x12@\n\x03min\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12@\n\x03max\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\"_\n\x05Slice\x12=\n\x05plane\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Plane\x12\x17\n\x0fproject_vectors\x18\x02 \x01(\x08\"\\\n\x07\x43ontour\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12\x12\n\niso_values\x18\x02 \x03(\x01\"\x81\x02\n\tThreshold\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12=\n\x05range\x18\x02 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Range\x12\x1b\n\x06smooth\x18\x03 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x01H\x00\x88\x01\x01\x12\x1b\n\x06invert\x18\x04 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x01\x88\x01\x01\x12\x1b\n\x06strict\x18\x05 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x02\x88\x01\x01\x42\t\n\x07_smoothB\t\n\x07_invertB\t\n\x07_strict\"\x96\x01\n\x0eSeedRakeConfig\x12\x42\n\x05start\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12@\n\x03\x65nd\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\"\xed\x01\n\x11SeedSurfaceConfig\x12$\n\x06offset\x18\x01 \x01(\x01\x42\x0f\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\x00\x00H\x00\x88\x01\x01\x12\'\n\x12project_on_surface\x18\x02 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x01\x88\x01\x01\x12@\n\x0bsample_rate\x18\x03 \x01(\x05\x42&\x82\xb2\x19\x02\x30\n\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00@\x8f@\x8a\xb2\x19\x02\x18\x00H\x02\x88\x01\x01\x12\x15\n\rsurface_names\x18\x04 \x03(\tB\t\n\x07_offsetB\x15\n\x13_project_on_surfaceB\x0e\n\x0c_sample_rate\"\xcd\x03\n\x0eSeedGridConfig\x12=\n\x08rake_res\x18\x01 \x01(\x05\x42&\x82\xb2\x19\x02\x30\x02\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00@\x8f@\x8a\xb2\x19\x02\x18\x00H\x00\x88\x01\x01\x12=\n\x08seed_res\x18\x02 \x01(\x05\x42&\x82\xb2\x19\x02\x30\n\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00@\x8f@\x8a\xb2\x19\x02\x18\x00H\x01\x88\x01\x01\x12\x19\n\x0cseed_spacing\x18\x03 \x01(\x01H\x02\x88\x01\x01\x12\x19\n\x0crake_spacing\x18\x04 \x01(\x01H\x03\x88\x01\x01\x12\x43\n\x06\x63\x65nter\x18\x05 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x42\n\x05u_vec\x18\x06 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x42\n\x05v_vec\x18\x07 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3B\x0b\n\t_rake_resB\x0b\n\t_seed_resB\x0f\n\r_seed_spacingB\x0f\n\r_rake_spacing\"\x92\x04\n\x0bStreamlines\x12G\n\x04rake\x18\x01 \x01(\x0b\x32\x37.luminary.proto.api.v0.luminarycloud.vis.SeedRakeConfigH\x00\x12M\n\x07surface\x18\x02 \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.SeedSurfaceConfigH\x00\x12G\n\x04grid\x18\x03 \x01(\x0b\x32\x37.luminary.proto.api.v0.luminarycloud.vis.SeedGridConfigH\x00\x12\x42\n\rn_streamlines\x18\x04 \x01(\x05\x42&\x82\xb2\x19\x02\x30\x64\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00@\x8f@\x8a\xb2\x19\x02\x18\x00H\x01\x88\x01\x01\x12\x17\n\nmax_length\x18\x05 \x01(\x01H\x02\x88\x01\x01\x12X\n\tdirection\x18\x06 \x01(\x0e\x32=.luminary.proto.api.v0.luminarycloud.vis.StreamlinesDirectionB\x06\x82\xb2\x19\x02 \x01\x12=\n\x05\x66ield\x18\x07 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.FieldB\x0b\n\tseed_typeB\x10\n\x0e_n_streamlinesB\r\n\x0b_max_length\"\xb4\x02\n\x05Glyph\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12=\n\x08n_glyphs\x18\x02 \x01(\x05\x42&\x82\xb2\x19\x02\x30\x64\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00@\x8f@\x8a\xb2\x19\x02\x18\x00H\x01\x88\x01\x01\x12Y\n\rsampling_mode\x18\x03 \x01(\x0e\x32:.luminary.proto.api.v0.luminarycloud.vis.GlyphSamplingModeB\x06\x82\xb2\x19\x02 \x01\x12\x1b\n\x11\x66ixed_size_glyphs\x18\x04 \x01(\x01H\x00\x12\x1a\n\x10glyph_scale_size\x18\x05 \x01(\x01H\x00\x42\x0c\n\nglyph_sizeB\x0b\n\t_n_glyphs\"+\n\x12SurfaceLICGeomtery\x12\x15\n\rsurface_names\x18\x01 \x03(\t\"\x91\x01\n\x0fSurfaceLICPlane\x12=\n\x05plane\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Plane\x12?\n\x08\x63lip_box\x18\x02 \x01(\x0b\x32-.luminary.proto.api.v0.luminarycloud.vis.AABB\"\xb6\x02\n\nSurfaceLIC\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12O\n\x08geometry\x18\x02 \x01(\x0b\x32;.luminary.proto.api.v0.luminarycloud.vis.SurfaceLICGeomteryH\x00\x12I\n\x05plane\x18\x03 \x01(\x0b\x32\x38.luminary.proto.api.v0.luminarycloud.vis.SurfaceLICPlaneH\x00\x12\x41\n\x08\x63ontrast\x18\x04 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\t\x9a\x99\x99\x99\x99\x99\xc9?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\x08@\x8a\xb2\x19\x02\x18\x00\x42\n\n\x08lic_type\"s\n\x11IntersectionCurve\x12=\n\x05plane\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Plane\x12\x10\n\x08surfaces\x18\x02 \x03(\t\x12\r\n\x05label\x18\x03 \x01(\t\"\x1a\n\x18LineSampleMeshResolution\"\x8e\x02\n\nLineSample\x12\x42\n\x05start\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12@\n\x03\x65nd\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\r\n\x05label\x18\x03 \x01(\t\x12\\\n\x0fmesh_resolution\x18\x04 \x01(\x0b\x32\x41.luminary.proto.api.v0.luminarycloud.vis.LineSampleMeshResolutionH\x00\x42\r\n\x0bsample_type\"\xb9\x05\n\x06\x46ilter\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12?\n\x05slice\x18\x03 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.SliceH\x00\x12=\n\x04\x63lip\x18\x04 \x01(\x0b\x32-.luminary.proto.api.v0.luminarycloud.vis.ClipH\x00\x12\x43\n\x07\x63ontour\x18\x05 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.vis.ContourH\x00\x12G\n\tthreshold\x18\x07 \x01(\x0b\x32\x32.luminary.proto.api.v0.luminarycloud.vis.ThresholdH\x00\x12K\n\x0bstreamlines\x18\x08 \x01(\x0b\x32\x34.luminary.proto.api.v0.luminarycloud.vis.StreamlinesH\x00\x12?\n\x05glyph\x18\t \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.GlyphH\x00\x12J\n\x0bsurface_lic\x18\n \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.SurfaceLICH\x00\x12X\n\x12intersection_curve\x18\x0b \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.IntersectionCurveH\x00\x12J\n\x0bline_sample\x18\x0c \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.LineSampleH\x00\x42\x07\n\x05value\"\x18\n\nMeshEntity\x12\n\n\x02id\x18\x01 \x01(\t\"3\n\x10SimulationEntity\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0bsolution_id\x18\x02 \x01(\t\"9\n\x0eGeometryEntity\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1b\n\x13geometry_version_id\x18\x02 \x01(\t\"\xfc\x01\n\rExtractEntity\x12\x43\n\x04mesh\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.MeshEntityH\x00\x12O\n\nsimulation\x18\x02 \x01(\x0b\x32\x39.luminary.proto.api.v0.luminarycloud.vis.SimulationEntityH\x00\x12K\n\x08geometry\x18\x03 \x01(\x0b\x32\x37.luminary.proto.api.v0.luminarycloud.vis.GeometryEntityH\x00\x42\x08\n\x06\x65ntity\"!\n\x05Range\x12\x0b\n\x03min\x18\x01 \x01(\x01\x12\x0b\n\x03max\x18\x02 \x01(\x01\"\xc4\x0b\n\x08\x43olorMap\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12K\n\x04name\x18\x02 \x01(\x0e\x32\x35.luminary.proto.api.v0.luminarycloud.vis.ColorMapNameB\x06\x82\xb2\x19\x02 \x03\x12\x42\n\x05range\x18\x03 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.RangeH\x02\x88\x01\x01\x12\x1c\n\x07visible\x18\x04 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x01H\x03\x88\x01\x01\x12\x1f\n\ndiscretize\x18\x05 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x04\x88\x01\x01\x12=\n\x08n_colors\x18\x06 \x01(\x05\x42&\x82\xb2\x19\x02\x30\x08\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00@\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00p@\x8a\xb2\x19\x02\x18\x00H\x05\x88\x01\x01\x12i\n\x12\x61utomatic_location\x18\x07 \x01(\x0e\x32\x43.luminary.proto.api.v0.luminarycloud.vis.ColorMap.AutomaticLocationB\x06\x82\xb2\x19\x02 \x01H\x00\x12\x66\n\x1alower_left_anchor_location\x18\x08 \x01(\x0b\x32@.luminary.proto.api.v0.luminarycloud.vis.ColorMap.AnchorLocationH\x00\x12U\n\x0e\x61utomatic_tick\x18\n \x01(\x0b\x32;.luminary.proto.api.v0.luminarycloud.vis.ColorMap.AutomaticH\x01\x12Y\n\x11min_max_only_tick\x18\x0b \x01(\x0b\x32<.luminary.proto.api.v0.luminarycloud.vis.ColorMap.MinMaxOnlyH\x01\x12G\n\ttext_size\x18\x11 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\x42@\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00Y@\x8a\xb2\x19\x02\x18\x00H\x06\x88\x01\x01\x12\x1f\n\nhorizontal\x18\x12 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x07\x88\x01\x01\x12\x43\n\x05width\x18\x13 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\xfc\xa9\xf1\xd2Mb\x80?\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00H\x08\x88\x01\x01\x12\x44\n\x06height\x18\x14 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\xbaI\x0c\x02+\x87\x96?\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00H\t\x88\x01\x01\x1a\x9e\x01\n\x0e\x41nchorLocation\x12?\n\x01x\x18\x01 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\tq=\n\xd7\xa3p\xed?\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00H\x00\x88\x01\x01\x12?\n\x01y\x18\x02 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\xe1z\x14\xaeG\xe1\xda?\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00H\x01\x88\x01\x01\x42\x04\n\x02_xB\x04\n\x02_y\x1a\x0b\n\tAutomatic\x1a\x0c\n\nMinMaxOnly\"\xad\x01\n\x11\x41utomaticLocation\x12\"\n\x1e\x41UTOMATIC_LOCATION_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x41UTOMATIC_LOCATION_RIGHT\x10\x01\x12\x1b\n\x17\x41UTOMATIC_LOCATION_LEFT\x10\x02\x12\x1d\n\x19\x41UTOMATIC_LOCATION_BOTTOM\x10\x03\x12\x1a\n\x16\x41UTOMATIC_LOCATION_TOP\x10\x04\x42\n\n\x08locationB\x14\n\x12tick_specificationB\x08\n\x06_rangeB\n\n\x08_visibleB\r\n\x0b_discretizeB\x0b\n\t_n_colorsB\x0c\n\n_text_sizeB\r\n\x0b_horizontalB\x08\n\x06_widthB\t\n\x07_height\"\xbb\x01\n\x05\x43olor\x12+\n\x01r\x18\x01 \x01(\x01\x42 \x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00\x12+\n\x01g\x18\x02 \x01(\x01\x42 \x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00\x12+\n\x01\x62\x18\x03 \x01(\x01\x42 \x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00\x12+\n\x01\x61\x18\x04 \x01(\x01\x42 \x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00\"e\n\x14\x42\x61\x63kgroundProperties\x12?\n\x05\x63olor\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.ColorH\x00\x42\x0c\n\nproperties\";\n\x0fTriadProperties\x12\x1c\n\x07visible\x18\x01 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x01H\x00\x88\x01\x01\x42\n\n\x08_visible\"(\n\x11\x46ilterConnections\x12\x13\n\x0b\x63hildren_id\x18\x01 \x03(\t\">\n\x12\x41xesGridProperties\x12\x1c\n\x07visible\x18\x01 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x00\x88\x01\x01\x42\n\n\x08_visible\"\x8b\n\n\x0b\x45xtractSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12K\n\x0b\x65ntity_type\x18\x03 \x01(\x0b\x32\x36.luminary.proto.api.v0.luminarycloud.vis.ExtractEntity\x12Y\n\x14\x61xes_grid_properties\x18\x04 \x01(\x0b\x32;.luminary.proto.api.v0.luminarycloud.vis.AxesGridProperties\x12@\n\x07\x66ilters\x18\x05 \x03(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Filter\x12g\n\x12\x66ilter_connections\x18\x06 \x03(\x0b\x32K.luminary.proto.api.v0.luminarycloud.vis.ExtractSpec.FilterConnectionsEntry\x12]\n\x19global_display_attributes\x18\x07 \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.DisplayAttributes\x12g\n\x12\x64isplay_attributes\x18\x08 \x03(\x0b\x32K.luminary.proto.api.v0.luminarycloud.vis.ExtractSpec.DisplayAttributesEntry\x12\x45\n\ncolor_maps\x18\t \x03(\x0b\x32\x31.luminary.proto.api.v0.luminarycloud.vis.ColorMap\x12Z\n\x14\x61nimation_properties\x18\n \x01(\x0b\x32<.luminary.proto.api.v0.luminarycloud.vis.AnimationProperties\x12R\n\x10triad_properties\x18\x0b \x01(\x0b\x32\x38.luminary.proto.api.v0.luminarycloud.vis.TriadProperties\x12\x61\n\x15\x62\x61\x63kground_properties\x18\x0c \x01(\x0b\x32=.luminary.proto.api.v0.luminarycloud.vis.BackgroundPropertiesH\x00\x88\x01\x01\x12 \n\x13supersampling_ratio\x18\r \x01(\x05H\x01\x88\x01\x01\x12\x16\n\tdata_only\x18\x0e \x01(\x08H\x02\x88\x01\x01\x1at\n\x16\x46ilterConnectionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12I\n\x05value\x18\x02 \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.FilterConnections:\x02\x38\x01\x1at\n\x16\x44isplayAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12I\n\x05value\x18\x02 \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.DisplayAttributes:\x02\x38\x01\x42\x18\n\x16_background_propertiesB\x16\n\x14_supersampling_ratioB\x0c\n\n_data_only\"n\n\x14\x43reateExtractRequest\x12\x12\n\nproject_id\x18\x01 \x01(\t\x12\x42\n\x04spec\x18\x02 \x01(\x0b\x32\x34.luminary.proto.api.v0.luminarycloud.vis.ExtractSpec\"\x9c\x01\n\x07\x45xtract\x12\x12\n\nextract_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x12\n\nproject_id\x18\x04 \x01(\t\x12\x46\n\x06status\x18\x05 \x01(\x0e\x32\x36.luminary.proto.api.v0.luminarycloud.vis.ExtractStatus\"\xd5\x01\n\x03\x42ox\x12\x43\n\x06\x63\x65nter\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x44\n\x07lengths\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x43\n\x06\x61ngles\x18\x03 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\"\xe9\x01\n\x04\x43lip\x12?\n\x05plane\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.PlaneH\x00\x12;\n\x03\x62ox\x18\x02 \x01(\x0b\x32,.luminary.proto.api.v0.luminarycloud.vis.BoxH\x00\x12\x1d\n\x08inverted\x18\x05 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x01\x88\x01\x01\x12\x1b\n\x06smooth\x18\x06 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x01H\x02\x88\x01\x01\x42\x0f\n\rclip_functionB\x0b\n\t_invertedB\t\n\x07_smooth\"Z\n\x15\x43reateExtractResponse\x12\x41\n\x07\x65xtract\x18\x01 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.vis.Extract\"W\n\x12GetExtractResponse\x12\x41\n\x07\x65xtract\x18\x01 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.vis.Extract\"\\\n\x16GetExtractSpecResponse\x12\x42\n\x04spec\x18\x01 \x01(\x0b\x32\x34.luminary.proto.api.v0.luminarycloud.vis.ExtractSpec\";\n\x11GetExtractRequest\x12\x12\n\nextract_id\x18\x01 \x01(\t\x12\x12\n\nproject_id\x18\x02 \x01(\t\"@\n\x16\x44ownloadExtractRequest\x12\x12\n\nproject_id\x18\x01 \x01(\t\x12\x12\n\nextract_id\x18\x02 \x01(\t\"Y\n\x06Images\x12?\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.common.File\x12\x0e\n\x06labels\x18\x02 \x03(\t\"\x9f\x01\n\x17\x44ownloadExtractResponse\x12?\n\x06images\x18\x01 \x01(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Images\x12\x43\n\tline_data\x18\x02 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.common.File\"\x84\x01\n\x13ListExtractsRequest\x12\x12\n\nproject_id\x18\x01 \x01(\t\x12\x46\n\x06\x65ntity\x18\x02 \x01(\x0b\x32\x36.luminary.proto.api.v0.luminarycloud.vis.ExtractEntity\x12\x11\n\tdata_only\x18\x03 \x01(\x08\"Z\n\x14ListExtractsResponse\x12\x42\n\x08\x65xtracts\x18\x01 \x03(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.vis.Extract\">\n\x14\x44\x65leteExtractRequest\x12\x12\n\nextract_id\x18\x01 \x01(\t\x12\x12\n\nproject_id\x18\x02 \x01(\t\"\x17\n\x15\x44\x65leteExtractResponse\"\xa4\x03\n\x18GetRenderDataUrlsRequest\x12\x12\n\nproject_id\x18\x01 \x01(\t\x12\x46\n\x06\x65ntity\x18\x02 \x01(\x0b\x32\x36.luminary.proto.api.v0.luminarycloud.vis.ExtractEntity\x12@\n\x07\x66ilters\x18\x03 \x03(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Filter\x12t\n\x12\x66ilter_connections\x18\x04 \x03(\x0b\x32X.luminary.proto.api.v0.luminarycloud.vis.GetRenderDataUrlsRequest.FilterConnectionsEntry\x1at\n\x16\x46ilterConnectionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12I\n\x05value\x18\x02 \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.FilterConnections:\x02\x38\x01\"j\n\x0eRenderDataUrls\x12\x12\n\nfilter_ids\x18\x01 \x03(\t\x12\x44\n\ndata_files\x18\x03 \x03(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.common.File\"\xa2\x01\n\x19GetRenderDataUrlsResponse\x12\x1c\n\x0fworkspace_state\x18\x01 \x01(\tH\x00\x88\x01\x01\x12J\n\x04urls\x18\x02 \x01(\x0b\x32\x37.luminary.proto.api.v0.luminarycloud.vis.RenderDataUrlsH\x01\x88\x01\x01\x42\x12\n\x10_workspace_stateB\x07\n\x05_urls\"~\n\x19ListSolutionFieldsRequest\x12M\n\nsimulation\x18\x01 \x01(\x0b\x32\x39.luminary.proto.api.v0.luminarycloud.vis.SimulationEntity\x12\x12\n\nproject_id\x18\x02 \x01(\t\"T\n\x17ListSolutionFieldsReply\x12\x39\n\nquantities\x18\x01 \x03(\x0e\x32%.luminary.proto.quantity.QuantityType\"\x9e\x03\n\x0fLineDataExtract\x12R\n\x05lines\x18\x01 \x03(\x0b\x32\x43.luminary.proto.api.v0.luminarycloud.vis.LineDataExtract.LinesEntry\x12T\n\x06labels\x18\x02 \x03(\x0b\x32\x44.luminary.proto.api.v0.luminarycloud.vis.LineDataExtract.LabelsEntry\x1a\x44\n\x05Table\x12;\n\x0blines_table\x18\x01 \x03(\x0b\x32&.luminary.proto.table.RectilinearTable\x1al\n\nLinesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12M\n\x05value\x18\x02 \x01(\x0b\x32>.luminary.proto.api.v0.luminarycloud.vis.LineDataExtract.Table:\x02\x38\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01*\x82\x01\n\x0f\x43\x61meraDirection\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0e\n\nX_POSITIVE\x10\x01\x12\x0e\n\nY_POSITIVE\x10\x02\x12\x0e\n\nZ_POSITIVE\x10\x03\x12\x0e\n\nX_NEGATIVE\x10\x04\x12\x0e\n\nY_NEGATIVE\x10\x05\x12\x0e\n\nZ_NEGATIVE\x10\x06*5\n\x10\x43\x61meraProjection\x12\x10\n\x0cORTHOGRAPHIC\x10\x00\x12\x0f\n\x0bPERSPECTIVE\x10\x01*P\n\x0eRepresentation\x12\x0b\n\x07SURFACE\x10\x00\x12\x16\n\x12SURFACE_WITH_EDGES\x10\x01\x12\r\n\tWIREFRAME\x10\x02\x12\n\n\x06POINTS\x10\x03*\xa4\x01\n\x14StreamlinesDirection\x12%\n!STREAMLINES_DIRECTION_UNSPECIFIED\x10\x00\x12!\n\x1dSTREAMLINES_DIRECTION_FORWARD\x10\x01\x12\"\n\x1eSTREAMLINES_DIRECTION_BACKWARD\x10\x02\x12\x1e\n\x1aSTREAMLINES_DIRECTION_BOTH\x10\x03*[\n\x11GlyphSamplingMode\x12#\n\x1fGLYPH_SAMPLING_MODE_UNSPECIFIED\x10\x00\x12!\n\x1dGLYPH_SAMPLING_MODE_EVERY_NTH\x10\x01*\xea\x01\n\x0c\x43olorMapName\x12\x1e\n\x1a\x43OLOR_MAP_NAME_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43OLOR_MAP_NAME_VIRIDIS\x10\x01\x12\x1f\n\x1b\x43OLOR_MAP_NAME_COOL_TO_WARM\x10\x02\x12\x18\n\x14\x43OLOR_MAP_NAME_TURBO\x10\x03\x12\x16\n\x12\x43OLOR_MAP_NAME_JET\x10\x04\x12\x17\n\x13\x43OLOR_MAP_NAME_WAVE\x10\x05\x12\x17\n\x13\x43OLOR_MAP_NAME_XRAY\x10\x06\x12\x19\n\x15\x43OLOR_MAP_NAME_PLASMA\x10\x07*C\n\rExtractStatus\x12\x0b\n\x07Invalid\x10\x00\x12\n\n\x06\x41\x63tive\x10\x01\x12\r\n\tCompleted\x10\x02\x12\n\n\x06\x46\x61iled\x10\x03*h\n\x14RenderDataUrlsStatus\x12\x19\n\x15RenderDataUrlsInvalid\x10\x00\x12\x1b\n\x17RenderDataUrlsCompleted\x10\x02\x12\x18\n\x14RenderDataUrlsFailed\x10\x03\x32\xb8\t\n\rVisAPIService\x12\x90\x01\n\rCreateExtract\x12=.luminary.proto.api.v0.luminarycloud.vis.CreateExtractRequest\x1a>.luminary.proto.api.v0.luminarycloud.vis.CreateExtractResponse\"\x00\x12\x87\x01\n\nGetExtract\x12:.luminary.proto.api.v0.luminarycloud.vis.GetExtractRequest\x1a;.luminary.proto.api.v0.luminarycloud.vis.GetExtractResponse\"\x00\x12\x8f\x01\n\x0eGetExtractSpec\x12:.luminary.proto.api.v0.luminarycloud.vis.GetExtractRequest\x1a?.luminary.proto.api.v0.luminarycloud.vis.GetExtractSpecResponse\"\x00\x12\x96\x01\n\x0f\x44ownloadExtract\x12?.luminary.proto.api.v0.luminarycloud.vis.DownloadExtractRequest\x1a@.luminary.proto.api.v0.luminarycloud.vis.DownloadExtractResponse\"\x00\x12\x8d\x01\n\x0cListExtracts\x12<.luminary.proto.api.v0.luminarycloud.vis.ListExtractsRequest\x1a=.luminary.proto.api.v0.luminarycloud.vis.ListExtractsResponse\"\x00\x12\x90\x01\n\rDeleteExtract\x12=.luminary.proto.api.v0.luminarycloud.vis.DeleteExtractRequest\x1a>.luminary.proto.api.v0.luminarycloud.vis.DeleteExtractResponse\"\x00\x12\x9c\x01\n\x11GetRenderDataUrls\x12\x41.luminary.proto.api.v0.luminarycloud.vis.GetRenderDataUrlsRequest\x1a\x42.luminary.proto.api.v0.luminarycloud.vis.GetRenderDataUrlsResponse\"\x00\x12\x9c\x01\n\x12ListSolutionFields\x12\x42.luminary.proto.api.v0.luminarycloud.vis.ListSolutionFieldsRequest\x1a@.luminary.proto.api.v0.luminarycloud.vis.ListSolutionFieldsReply\"\x00\x42\x37Z5luminarycloud.com/core/proto/api/v0/luminarycloud/visb\x06proto3')
|
|
23
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(proto/api/v0/luminarycloud/vis/vis.proto\x12\'luminary.proto.api.v0.luminarycloud.vis\x1a\x1cgoogle/api/annotations.proto\x1a\x1bproto/options/options.proto\x1a\x1dproto/quantity/quantity.proto\x1a\x17proto/table/table.proto\x1a.proto/api/v0/luminarycloud/common/common.proto\"=\n\x03Pan\x12\x1a\n\x01x\x18\x01 \x01(\x01\x42\x0f\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x12\x1a\n\x01y\x18\x02 \x01(\x01\x42\x0f\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\x00\x00\"\xa4\x02\n\x0c\x43\x61meraLookAt\x12\x45\n\x08position\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x44\n\x07look_at\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12?\n\x02up\x18\x03 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12>\n\x03pan\x18\x04 \x01(\x0b\x32,.luminary.proto.api.v0.luminarycloud.vis.PanH\x00\x88\x01\x01\x42\x06\n\x04_pan\"}\n\nResolution\x12\x36\n\x05width\x18\x01 \x01(\x05\x42\'\x82\xb2\x19\x03\x30\x80\x0f\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00Y@\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xb0@\x8a\xb2\x19\x02\x18\x00\x12\x37\n\x06height\x18\x02 \x01(\x05\x42\'\x82\xb2\x19\x03\x30\xb8\x08\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00Y@\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xb0@\x8a\xb2\x19\x02\x18\x00\"\xde\x02\n\x06\x43\x61mera\x12U\n\nprojection\x18\x01 \x01(\x0e\x32\x39.luminary.proto.api.v0.luminarycloud.vis.CameraProjectionB\x06\x82\xb2\x19\x02 \x02\x12U\n\tdirection\x18\x02 \x01(\x0e\x32\x38.luminary.proto.api.v0.luminarycloud.vis.CameraDirectionB\x06\x82\xb2\x19\x02 \x03H\x00\x12H\n\x07look_at\x18\x03 \x01(\x0b\x32\x35.luminary.proto.api.v0.luminarycloud.vis.CameraLookAtH\x00\x12\x42\n\x04zoom\x18\x04 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00H\x01\x88\x01\x01\x42\x0f\n\rspecificationB\x07\n\x05_zoom\"\xb2\x01\n\x17\x41nimationSettingsStatic\x12?\n\x06\x63\x61mera\x18\x01 \x01(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Camera\x12G\n\nresolution\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.Resolution\x12\r\n\x05label\x18\x03 \x01(\t\"\xee\x02\n\x19\x41nimationSettingsTimeStep\x12?\n\x06\x63\x61mera\x18\x01 \x01(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Camera\x12G\n\nresolution\x18\x04 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.Resolution\x12\x61\n\x06\x66ormat\x18\x05 \x01(\x0e\x32I.luminary.proto.api.v0.luminarycloud.vis.AnimationSettingsTimeStep.FormatB\x06\x82\xb2\x19\x02 \x02\x12\x13\n\x0bskip_frames\x18\x06 \x01(\x05\x12\r\n\x05label\x18\x07 \x01(\t\"@\n\x06\x46ormat\x12\x16\n\x12\x46ORMAT_UNSPECIFIED\x10\x00\x12\x0e\n\nFORMAT_GIF\x10\x01\x12\x0e\n\nFORMAT_MP4\x10\x02\"a\n\x0eStaticSettings\x12O\n\x05items\x18\x01 \x03(\x0b\x32@.luminary.proto.api.v0.luminarycloud.vis.AnimationSettingsStatic\"e\n\x10TimeStepSettings\x12Q\n\x05items\x18\x01 \x03(\x0b\x32\x42.luminary.proto.api.v0.luminarycloud.vis.AnimationSettingsTimeStep\"\xbe\x01\n\x13\x41nimationProperties\x12J\n\x07statics\x18\x01 \x01(\x0b\x32\x37.luminary.proto.api.v0.luminarycloud.vis.StaticSettingsH\x00\x12O\n\ntime_steps\x18\x02 \x01(\x0b\x32\x39.luminary.proto.api.v0.luminarycloud.vis.TimeStepSettingsH\x00\x42\n\n\x08settings\"\x8e\x02\n\x05\x46ield\x12;\n\x0cquantity_typ\x18\x01 \x01(\x0e\x32%.luminary.proto.quantity.QuantityType\x12K\n\tcomponent\x18\x02 \x01(\x0e\x32\x38.luminary.proto.api.v0.luminarycloud.vis.Field.Component\"{\n\tComponent\x12\x19\n\x15\x43OMPONENT_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x43OMPONENT_X\x10\x01\x12\x0f\n\x0b\x43OMPONENT_Y\x10\x02\x12\x0f\n\x0b\x43OMPONENT_Z\x10\x03\x12 \n\x13\x43OMPONENT_MAGNITUDE\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xe7\x01\n\x11\x44isplayAttributes\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12\x14\n\x07visible\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12O\n\x0erepresentation\x18\x03 \x01(\x0e\x32\x37.luminary.proto.api.v0.luminarycloud.vis.Representation\x12\x14\n\x07opacity\x18\x04 \x01(\x01H\x01\x88\x01\x01\x42\n\n\x08_visibleB\n\n\x08_opacity\"\x91\x01\n\x05Plane\x12\x43\n\x06origin\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x43\n\x06normal\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\"\x8a\x01\n\x04\x41\x41\x42\x42\x12@\n\x03min\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12@\n\x03max\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\"_\n\x05Slice\x12=\n\x05plane\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Plane\x12\x17\n\x0fproject_vectors\x18\x02 \x01(\x08\"\\\n\x07\x43ontour\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12\x12\n\niso_values\x18\x02 \x03(\x01\"\x81\x02\n\tThreshold\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12=\n\x05range\x18\x02 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Range\x12\x1b\n\x06smooth\x18\x03 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x01H\x00\x88\x01\x01\x12\x1b\n\x06invert\x18\x04 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x01\x88\x01\x01\x12\x1b\n\x06strict\x18\x05 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x02\x88\x01\x01\x42\t\n\x07_smoothB\t\n\x07_invertB\t\n\x07_strict\"\x96\x01\n\x0eSeedRakeConfig\x12\x42\n\x05start\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12@\n\x03\x65nd\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\"\xed\x01\n\x11SeedSurfaceConfig\x12$\n\x06offset\x18\x01 \x01(\x01\x42\x0f\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\x00\x00H\x00\x88\x01\x01\x12\'\n\x12project_on_surface\x18\x02 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x01\x88\x01\x01\x12@\n\x0bsample_rate\x18\x03 \x01(\x05\x42&\x82\xb2\x19\x02\x30\n\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00@\x8f@\x8a\xb2\x19\x02\x18\x00H\x02\x88\x01\x01\x12\x15\n\rsurface_names\x18\x04 \x03(\tB\t\n\x07_offsetB\x15\n\x13_project_on_surfaceB\x0e\n\x0c_sample_rate\"\xcd\x03\n\x0eSeedGridConfig\x12=\n\x08rake_res\x18\x01 \x01(\x05\x42&\x82\xb2\x19\x02\x30\x02\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00@\x8f@\x8a\xb2\x19\x02\x18\x00H\x00\x88\x01\x01\x12=\n\x08seed_res\x18\x02 \x01(\x05\x42&\x82\xb2\x19\x02\x30\n\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00@\x8f@\x8a\xb2\x19\x02\x18\x00H\x01\x88\x01\x01\x12\x19\n\x0cseed_spacing\x18\x03 \x01(\x01H\x02\x88\x01\x01\x12\x19\n\x0crake_spacing\x18\x04 \x01(\x01H\x03\x88\x01\x01\x12\x43\n\x06\x63\x65nter\x18\x05 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x42\n\x05u_vec\x18\x06 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x42\n\x05v_vec\x18\x07 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3B\x0b\n\t_rake_resB\x0b\n\t_seed_resB\x0f\n\r_seed_spacingB\x0f\n\r_rake_spacing\"\x92\x04\n\x0bStreamlines\x12G\n\x04rake\x18\x01 \x01(\x0b\x32\x37.luminary.proto.api.v0.luminarycloud.vis.SeedRakeConfigH\x00\x12M\n\x07surface\x18\x02 \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.SeedSurfaceConfigH\x00\x12G\n\x04grid\x18\x03 \x01(\x0b\x32\x37.luminary.proto.api.v0.luminarycloud.vis.SeedGridConfigH\x00\x12\x42\n\rn_streamlines\x18\x04 \x01(\x05\x42&\x82\xb2\x19\x02\x30\x64\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00@\x8f@\x8a\xb2\x19\x02\x18\x00H\x01\x88\x01\x01\x12\x17\n\nmax_length\x18\x05 \x01(\x01H\x02\x88\x01\x01\x12X\n\tdirection\x18\x06 \x01(\x0e\x32=.luminary.proto.api.v0.luminarycloud.vis.StreamlinesDirectionB\x06\x82\xb2\x19\x02 \x01\x12=\n\x05\x66ield\x18\x07 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.FieldB\x0b\n\tseed_typeB\x10\n\x0e_n_streamlinesB\r\n\x0b_max_length\"\xb4\x02\n\x05Glyph\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12=\n\x08n_glyphs\x18\x02 \x01(\x05\x42&\x82\xb2\x19\x02\x30\x64\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00@\x8f@\x8a\xb2\x19\x02\x18\x00H\x01\x88\x01\x01\x12Y\n\rsampling_mode\x18\x03 \x01(\x0e\x32:.luminary.proto.api.v0.luminarycloud.vis.GlyphSamplingModeB\x06\x82\xb2\x19\x02 \x01\x12\x1b\n\x11\x66ixed_size_glyphs\x18\x04 \x01(\x01H\x00\x12\x1a\n\x10glyph_scale_size\x18\x05 \x01(\x01H\x00\x42\x0c\n\nglyph_sizeB\x0b\n\t_n_glyphs\"+\n\x12SurfaceLICGeomtery\x12\x15\n\rsurface_names\x18\x01 \x03(\t\"\x91\x01\n\x0fSurfaceLICPlane\x12=\n\x05plane\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Plane\x12?\n\x08\x63lip_box\x18\x02 \x01(\x0b\x32-.luminary.proto.api.v0.luminarycloud.vis.AABB\"\xb6\x02\n\nSurfaceLIC\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12O\n\x08geometry\x18\x02 \x01(\x0b\x32;.luminary.proto.api.v0.luminarycloud.vis.SurfaceLICGeomteryH\x00\x12I\n\x05plane\x18\x03 \x01(\x0b\x32\x38.luminary.proto.api.v0.luminarycloud.vis.SurfaceLICPlaneH\x00\x12\x41\n\x08\x63ontrast\x18\x04 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\t\t\x9a\x99\x99\x99\x99\x99\xc9?\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\x08@\x8a\xb2\x19\x02\x18\x00\x42\n\n\x08lic_type\"s\n\x11IntersectionCurve\x12=\n\x05plane\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Plane\x12\x10\n\x08surfaces\x18\x02 \x03(\t\x12\r\n\x05label\x18\x03 \x01(\t\"\x1a\n\x18LineSampleMeshResolution\"\x8e\x02\n\nLineSample\x12\x42\n\x05start\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12@\n\x03\x65nd\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\r\n\x05label\x18\x03 \x01(\t\x12\\\n\x0fmesh_resolution\x18\x04 \x01(\x0b\x32\x41.luminary.proto.api.v0.luminarycloud.vis.LineSampleMeshResolutionH\x00\x42\r\n\x0bsample_type\"\xb9\x05\n\x06\x46ilter\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12?\n\x05slice\x18\x03 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.SliceH\x00\x12=\n\x04\x63lip\x18\x04 \x01(\x0b\x32-.luminary.proto.api.v0.luminarycloud.vis.ClipH\x00\x12\x43\n\x07\x63ontour\x18\x05 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.vis.ContourH\x00\x12G\n\tthreshold\x18\x07 \x01(\x0b\x32\x32.luminary.proto.api.v0.luminarycloud.vis.ThresholdH\x00\x12K\n\x0bstreamlines\x18\x08 \x01(\x0b\x32\x34.luminary.proto.api.v0.luminarycloud.vis.StreamlinesH\x00\x12?\n\x05glyph\x18\t \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.GlyphH\x00\x12J\n\x0bsurface_lic\x18\n \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.SurfaceLICH\x00\x12X\n\x12intersection_curve\x18\x0b \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.IntersectionCurveH\x00\x12J\n\x0bline_sample\x18\x0c \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.LineSampleH\x00\x42\x07\n\x05value\"\x18\n\nMeshEntity\x12\n\n\x02id\x18\x01 \x01(\t\"3\n\x10SimulationEntity\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0bsolution_id\x18\x02 \x01(\t\"9\n\x0eGeometryEntity\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1b\n\x13geometry_version_id\x18\x02 \x01(\t\"\xfc\x01\n\rExtractEntity\x12\x43\n\x04mesh\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.MeshEntityH\x00\x12O\n\nsimulation\x18\x02 \x01(\x0b\x32\x39.luminary.proto.api.v0.luminarycloud.vis.SimulationEntityH\x00\x12K\n\x08geometry\x18\x03 \x01(\x0b\x32\x37.luminary.proto.api.v0.luminarycloud.vis.GeometryEntityH\x00\x42\x08\n\x06\x65ntity\"!\n\x05Range\x12\x0b\n\x03min\x18\x01 \x01(\x01\x12\x0b\n\x03max\x18\x02 \x01(\x01\"\xc4\x0b\n\x08\x43olorMap\x12=\n\x05\x66ield\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.Field\x12K\n\x04name\x18\x02 \x01(\x0e\x32\x35.luminary.proto.api.v0.luminarycloud.vis.ColorMapNameB\x06\x82\xb2\x19\x02 \x03\x12\x42\n\x05range\x18\x03 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.RangeH\x02\x88\x01\x01\x12\x1c\n\x07visible\x18\x04 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x01H\x03\x88\x01\x01\x12\x1f\n\ndiscretize\x18\x05 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x04\x88\x01\x01\x12=\n\x08n_colors\x18\x06 \x01(\x05\x42&\x82\xb2\x19\x02\x30\x08\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00@\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00p@\x8a\xb2\x19\x02\x18\x00H\x05\x88\x01\x01\x12i\n\x12\x61utomatic_location\x18\x07 \x01(\x0e\x32\x43.luminary.proto.api.v0.luminarycloud.vis.ColorMap.AutomaticLocationB\x06\x82\xb2\x19\x02 \x01H\x00\x12\x66\n\x1alower_left_anchor_location\x18\x08 \x01(\x0b\x32@.luminary.proto.api.v0.luminarycloud.vis.ColorMap.AnchorLocationH\x00\x12U\n\x0e\x61utomatic_tick\x18\n \x01(\x0b\x32;.luminary.proto.api.v0.luminarycloud.vis.ColorMap.AutomaticH\x01\x12Y\n\x11min_max_only_tick\x18\x0b \x01(\x0b\x32<.luminary.proto.api.v0.luminarycloud.vis.ColorMap.MinMaxOnlyH\x01\x12G\n\ttext_size\x18\x11 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\x00\x00\x00\x00\x00\x00\x42@\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00Y@\x8a\xb2\x19\x02\x18\x00H\x06\x88\x01\x01\x12\x1f\n\nhorizontal\x18\x12 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x07\x88\x01\x01\x12\x43\n\x05width\x18\x13 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\xfc\xa9\xf1\xd2Mb\x80?\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00H\x08\x88\x01\x01\x12\x44\n\x06height\x18\x14 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\xbaI\x0c\x02+\x87\x96?\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00H\t\x88\x01\x01\x1a\x9e\x01\n\x0e\x41nchorLocation\x12?\n\x01x\x18\x01 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\tq=\n\xd7\xa3p\xed?\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00H\x00\x88\x01\x01\x12?\n\x01y\x18\x02 \x01(\x01\x42/\x82\xb2\x19\x0b\n\t\t\xe1z\x14\xaeG\xe1\xda?\x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00H\x01\x88\x01\x01\x42\x04\n\x02_xB\x04\n\x02_y\x1a\x0b\n\tAutomatic\x1a\x0c\n\nMinMaxOnly\"\xad\x01\n\x11\x41utomaticLocation\x12\"\n\x1e\x41UTOMATIC_LOCATION_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x41UTOMATIC_LOCATION_RIGHT\x10\x01\x12\x1b\n\x17\x41UTOMATIC_LOCATION_LEFT\x10\x02\x12\x1d\n\x19\x41UTOMATIC_LOCATION_BOTTOM\x10\x03\x12\x1a\n\x16\x41UTOMATIC_LOCATION_TOP\x10\x04\x42\n\n\x08locationB\x14\n\x12tick_specificationB\x08\n\x06_rangeB\n\n\x08_visibleB\r\n\x0b_discretizeB\x0b\n\t_n_colorsB\x0c\n\n_text_sizeB\r\n\x0b_horizontalB\x08\n\x06_widthB\t\n\x07_height\"\xbb\x01\n\x05\x43olor\x12+\n\x01r\x18\x01 \x01(\x01\x42 \x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00\x12+\n\x01g\x18\x02 \x01(\x01\x42 \x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00\x12+\n\x01\x62\x18\x03 \x01(\x01\x42 \x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00\x12+\n\x01\x61\x18\x04 \x01(\x01\x42 \x8a\xb2\x19\t\t\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xb2\x19\t\x11\x00\x00\x00\x00\x00\x00\xf0?\x8a\xb2\x19\x02\x18\x00\"e\n\x14\x42\x61\x63kgroundProperties\x12?\n\x05\x63olor\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.ColorH\x00\x42\x0c\n\nproperties\";\n\x0fTriadProperties\x12\x1c\n\x07visible\x18\x01 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x01H\x00\x88\x01\x01\x42\n\n\x08_visible\"(\n\x11\x46ilterConnections\x12\x13\n\x0b\x63hildren_id\x18\x01 \x03(\t\">\n\x12\x41xesGridProperties\x12\x1c\n\x07visible\x18\x01 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x00\x88\x01\x01\x42\n\n\x08_visible\"\x8b\n\n\x0b\x45xtractSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12K\n\x0b\x65ntity_type\x18\x03 \x01(\x0b\x32\x36.luminary.proto.api.v0.luminarycloud.vis.ExtractEntity\x12Y\n\x14\x61xes_grid_properties\x18\x04 \x01(\x0b\x32;.luminary.proto.api.v0.luminarycloud.vis.AxesGridProperties\x12@\n\x07\x66ilters\x18\x05 \x03(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Filter\x12g\n\x12\x66ilter_connections\x18\x06 \x03(\x0b\x32K.luminary.proto.api.v0.luminarycloud.vis.ExtractSpec.FilterConnectionsEntry\x12]\n\x19global_display_attributes\x18\x07 \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.DisplayAttributes\x12g\n\x12\x64isplay_attributes\x18\x08 \x03(\x0b\x32K.luminary.proto.api.v0.luminarycloud.vis.ExtractSpec.DisplayAttributesEntry\x12\x45\n\ncolor_maps\x18\t \x03(\x0b\x32\x31.luminary.proto.api.v0.luminarycloud.vis.ColorMap\x12Z\n\x14\x61nimation_properties\x18\n \x01(\x0b\x32<.luminary.proto.api.v0.luminarycloud.vis.AnimationProperties\x12R\n\x10triad_properties\x18\x0b \x01(\x0b\x32\x38.luminary.proto.api.v0.luminarycloud.vis.TriadProperties\x12\x61\n\x15\x62\x61\x63kground_properties\x18\x0c \x01(\x0b\x32=.luminary.proto.api.v0.luminarycloud.vis.BackgroundPropertiesH\x00\x88\x01\x01\x12 \n\x13supersampling_ratio\x18\r \x01(\x05H\x01\x88\x01\x01\x12\x16\n\tdata_only\x18\x0e \x01(\x08H\x02\x88\x01\x01\x1at\n\x16\x46ilterConnectionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12I\n\x05value\x18\x02 \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.FilterConnections:\x02\x38\x01\x1at\n\x16\x44isplayAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12I\n\x05value\x18\x02 \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.DisplayAttributes:\x02\x38\x01\x42\x18\n\x16_background_propertiesB\x16\n\x14_supersampling_ratioB\x0c\n\n_data_only\"n\n\x14\x43reateExtractRequest\x12\x12\n\nproject_id\x18\x01 \x01(\t\x12\x42\n\x04spec\x18\x02 \x01(\x0b\x32\x34.luminary.proto.api.v0.luminarycloud.vis.ExtractSpec\"\x9c\x01\n\x07\x45xtract\x12\x12\n\nextract_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x12\n\nproject_id\x18\x04 \x01(\t\x12\x46\n\x06status\x18\x05 \x01(\x0e\x32\x36.luminary.proto.api.v0.luminarycloud.vis.ExtractStatus\"\xd5\x01\n\x03\x42ox\x12\x43\n\x06\x63\x65nter\x18\x01 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x44\n\x07lengths\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\x12\x43\n\x06\x61ngles\x18\x03 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.common.Vector3\"\xe9\x01\n\x04\x43lip\x12?\n\x05plane\x18\x01 \x01(\x0b\x32..luminary.proto.api.v0.luminarycloud.vis.PlaneH\x00\x12;\n\x03\x62ox\x18\x02 \x01(\x0b\x32,.luminary.proto.api.v0.luminarycloud.vis.BoxH\x00\x12\x1d\n\x08inverted\x18\x05 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x00H\x01\x88\x01\x01\x12\x1b\n\x06smooth\x18\x06 \x01(\x08\x42\x06\x82\xb2\x19\x02(\x01H\x02\x88\x01\x01\x42\x0f\n\rclip_functionB\x0b\n\t_invertedB\t\n\x07_smooth\"Z\n\x15\x43reateExtractResponse\x12\x41\n\x07\x65xtract\x18\x01 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.vis.Extract\"W\n\x12GetExtractResponse\x12\x41\n\x07\x65xtract\x18\x01 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.vis.Extract\"\\\n\x16GetExtractSpecResponse\x12\x42\n\x04spec\x18\x01 \x01(\x0b\x32\x34.luminary.proto.api.v0.luminarycloud.vis.ExtractSpec\";\n\x11GetExtractRequest\x12\x12\n\nextract_id\x18\x01 \x01(\t\x12\x12\n\nproject_id\x18\x02 \x01(\t\"@\n\x16\x44ownloadExtractRequest\x12\x12\n\nproject_id\x18\x01 \x01(\t\x12\x12\n\nextract_id\x18\x02 \x01(\t\"Y\n\x06Images\x12?\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.common.File\x12\x0e\n\x06labels\x18\x02 \x03(\t\"\x9f\x01\n\x17\x44ownloadExtractResponse\x12?\n\x06images\x18\x01 \x01(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Images\x12\x43\n\tline_data\x18\x02 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.common.File\"\x84\x01\n\x13ListExtractsRequest\x12\x12\n\nproject_id\x18\x01 \x01(\t\x12\x46\n\x06\x65ntity\x18\x02 \x01(\x0b\x32\x36.luminary.proto.api.v0.luminarycloud.vis.ExtractEntity\x12\x11\n\tdata_only\x18\x03 \x01(\x08\"Z\n\x14ListExtractsResponse\x12\x42\n\x08\x65xtracts\x18\x01 \x03(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.vis.Extract\">\n\x14\x44\x65leteExtractRequest\x12\x12\n\nextract_id\x18\x01 \x01(\t\x12\x12\n\nproject_id\x18\x02 \x01(\t\"\x17\n\x15\x44\x65leteExtractResponse\"\xa4\x03\n\x18GetRenderDataUrlsRequest\x12\x12\n\nproject_id\x18\x01 \x01(\t\x12\x46\n\x06\x65ntity\x18\x02 \x01(\x0b\x32\x36.luminary.proto.api.v0.luminarycloud.vis.ExtractEntity\x12@\n\x07\x66ilters\x18\x03 \x03(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Filter\x12t\n\x12\x66ilter_connections\x18\x04 \x03(\x0b\x32X.luminary.proto.api.v0.luminarycloud.vis.GetRenderDataUrlsRequest.FilterConnectionsEntry\x1at\n\x16\x46ilterConnectionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12I\n\x05value\x18\x02 \x01(\x0b\x32:.luminary.proto.api.v0.luminarycloud.vis.FilterConnections:\x02\x38\x01\"j\n\x0eRenderDataUrls\x12\x12\n\nfilter_ids\x18\x01 \x03(\t\x12\x44\n\ndata_files\x18\x03 \x03(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.common.File\"\xa2\x01\n\x19GetRenderDataUrlsResponse\x12\x1c\n\x0fworkspace_state\x18\x01 \x01(\tH\x00\x88\x01\x01\x12J\n\x04urls\x18\x02 \x01(\x0b\x32\x37.luminary.proto.api.v0.luminarycloud.vis.RenderDataUrlsH\x01\x88\x01\x01\x42\x12\n\x10_workspace_stateB\x07\n\x05_urls\"~\n\x19ListSolutionFieldsRequest\x12M\n\nsimulation\x18\x01 \x01(\x0b\x32\x39.luminary.proto.api.v0.luminarycloud.vis.SimulationEntity\x12\x12\n\nproject_id\x18\x02 \x01(\t\"T\n\x17ListSolutionFieldsReply\x12\x39\n\nquantities\x18\x01 \x03(\x0e\x32%.luminary.proto.quantity.QuantityType\".\n\x0b\x43\x61meraEntry\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tcamera_id\x18\x02 \x01(\x03\"(\n\x12ListCamerasRequest\x12\x12\n\nproject_id\x18\x01 \x01(\t\"X\n\x10ListCamerasReply\x12\x44\n\x06\x63\x61mera\x18\x01 \x03(\x0b\x32\x34.luminary.proto.api.v0.luminarycloud.vis.CameraEntry\"n\n\x10GetCameraRequest\x12\x11\n\tcamera_id\x18\x01 \x01(\x03\x12G\n\nresolution\x18\x02 \x01(\x0b\x32\x33.luminary.proto.api.v0.luminarycloud.vis.Resolution\"Q\n\x0eGetCameraReply\x12?\n\x06\x63\x61mera\x18\x01 \x01(\x0b\x32/.luminary.proto.api.v0.luminarycloud.vis.Camera\"\x9e\x03\n\x0fLineDataExtract\x12R\n\x05lines\x18\x01 \x03(\x0b\x32\x43.luminary.proto.api.v0.luminarycloud.vis.LineDataExtract.LinesEntry\x12T\n\x06labels\x18\x02 \x03(\x0b\x32\x44.luminary.proto.api.v0.luminarycloud.vis.LineDataExtract.LabelsEntry\x1a\x44\n\x05Table\x12;\n\x0blines_table\x18\x01 \x03(\x0b\x32&.luminary.proto.table.RectilinearTable\x1al\n\nLinesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12M\n\x05value\x18\x02 \x01(\x0b\x32>.luminary.proto.api.v0.luminarycloud.vis.LineDataExtract.Table:\x02\x38\x01\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01*\x82\x01\n\x0f\x43\x61meraDirection\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0e\n\nX_POSITIVE\x10\x01\x12\x0e\n\nY_POSITIVE\x10\x02\x12\x0e\n\nZ_POSITIVE\x10\x03\x12\x0e\n\nX_NEGATIVE\x10\x04\x12\x0e\n\nY_NEGATIVE\x10\x05\x12\x0e\n\nZ_NEGATIVE\x10\x06*5\n\x10\x43\x61meraProjection\x12\x10\n\x0cORTHOGRAPHIC\x10\x00\x12\x0f\n\x0bPERSPECTIVE\x10\x01*P\n\x0eRepresentation\x12\x0b\n\x07SURFACE\x10\x00\x12\x16\n\x12SURFACE_WITH_EDGES\x10\x01\x12\r\n\tWIREFRAME\x10\x02\x12\n\n\x06POINTS\x10\x03*\xa4\x01\n\x14StreamlinesDirection\x12%\n!STREAMLINES_DIRECTION_UNSPECIFIED\x10\x00\x12!\n\x1dSTREAMLINES_DIRECTION_FORWARD\x10\x01\x12\"\n\x1eSTREAMLINES_DIRECTION_BACKWARD\x10\x02\x12\x1e\n\x1aSTREAMLINES_DIRECTION_BOTH\x10\x03*[\n\x11GlyphSamplingMode\x12#\n\x1fGLYPH_SAMPLING_MODE_UNSPECIFIED\x10\x00\x12!\n\x1dGLYPH_SAMPLING_MODE_EVERY_NTH\x10\x01*\xea\x01\n\x0c\x43olorMapName\x12\x1e\n\x1a\x43OLOR_MAP_NAME_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43OLOR_MAP_NAME_VIRIDIS\x10\x01\x12\x1f\n\x1b\x43OLOR_MAP_NAME_COOL_TO_WARM\x10\x02\x12\x18\n\x14\x43OLOR_MAP_NAME_TURBO\x10\x03\x12\x16\n\x12\x43OLOR_MAP_NAME_JET\x10\x04\x12\x17\n\x13\x43OLOR_MAP_NAME_WAVE\x10\x05\x12\x17\n\x13\x43OLOR_MAP_NAME_XRAY\x10\x06\x12\x19\n\x15\x43OLOR_MAP_NAME_PLASMA\x10\x07*C\n\rExtractStatus\x12\x0b\n\x07Invalid\x10\x00\x12\n\n\x06\x41\x63tive\x10\x01\x12\r\n\tCompleted\x10\x02\x12\n\n\x06\x46\x61iled\x10\x03*h\n\x14RenderDataUrlsStatus\x12\x19\n\x15RenderDataUrlsInvalid\x10\x00\x12\x1b\n\x17RenderDataUrlsCompleted\x10\x02\x12\x18\n\x14RenderDataUrlsFailed\x10\x03\x32\xc6\x0b\n\rVisAPIService\x12\x90\x01\n\rCreateExtract\x12=.luminary.proto.api.v0.luminarycloud.vis.CreateExtractRequest\x1a>.luminary.proto.api.v0.luminarycloud.vis.CreateExtractResponse\"\x00\x12\x87\x01\n\nGetExtract\x12:.luminary.proto.api.v0.luminarycloud.vis.GetExtractRequest\x1a;.luminary.proto.api.v0.luminarycloud.vis.GetExtractResponse\"\x00\x12\x8f\x01\n\x0eGetExtractSpec\x12:.luminary.proto.api.v0.luminarycloud.vis.GetExtractRequest\x1a?.luminary.proto.api.v0.luminarycloud.vis.GetExtractSpecResponse\"\x00\x12\x96\x01\n\x0f\x44ownloadExtract\x12?.luminary.proto.api.v0.luminarycloud.vis.DownloadExtractRequest\x1a@.luminary.proto.api.v0.luminarycloud.vis.DownloadExtractResponse\"\x00\x12\x8d\x01\n\x0cListExtracts\x12<.luminary.proto.api.v0.luminarycloud.vis.ListExtractsRequest\x1a=.luminary.proto.api.v0.luminarycloud.vis.ListExtractsResponse\"\x00\x12\x90\x01\n\rDeleteExtract\x12=.luminary.proto.api.v0.luminarycloud.vis.DeleteExtractRequest\x1a>.luminary.proto.api.v0.luminarycloud.vis.DeleteExtractResponse\"\x00\x12\x9c\x01\n\x11GetRenderDataUrls\x12\x41.luminary.proto.api.v0.luminarycloud.vis.GetRenderDataUrlsRequest\x1a\x42.luminary.proto.api.v0.luminarycloud.vis.GetRenderDataUrlsResponse\"\x00\x12\x9c\x01\n\x12ListSolutionFields\x12\x42.luminary.proto.api.v0.luminarycloud.vis.ListSolutionFieldsRequest\x1a@.luminary.proto.api.v0.luminarycloud.vis.ListSolutionFieldsReply\"\x00\x12\x87\x01\n\x0bListCameras\x12;.luminary.proto.api.v0.luminarycloud.vis.ListCamerasRequest\x1a\x39.luminary.proto.api.v0.luminarycloud.vis.ListCamerasReply\"\x00\x12\x81\x01\n\tGetCamera\x12\x39.luminary.proto.api.v0.luminarycloud.vis.GetCameraRequest\x1a\x37.luminary.proto.api.v0.luminarycloud.vis.GetCameraReply\"\x00\x42\x37Z5luminarycloud.com/core/proto/api/v0/luminarycloud/visb\x06proto3')
|
|
24
24
|
|
|
25
25
|
_CAMERADIRECTION = DESCRIPTOR.enum_types_by_name['CameraDirection']
|
|
26
26
|
CameraDirection = enum_type_wrapper.EnumTypeWrapper(_CAMERADIRECTION)
|
|
@@ -140,6 +140,11 @@ _RENDERDATAURLS = DESCRIPTOR.message_types_by_name['RenderDataUrls']
|
|
|
140
140
|
_GETRENDERDATAURLSRESPONSE = DESCRIPTOR.message_types_by_name['GetRenderDataUrlsResponse']
|
|
141
141
|
_LISTSOLUTIONFIELDSREQUEST = DESCRIPTOR.message_types_by_name['ListSolutionFieldsRequest']
|
|
142
142
|
_LISTSOLUTIONFIELDSREPLY = DESCRIPTOR.message_types_by_name['ListSolutionFieldsReply']
|
|
143
|
+
_CAMERAENTRY = DESCRIPTOR.message_types_by_name['CameraEntry']
|
|
144
|
+
_LISTCAMERASREQUEST = DESCRIPTOR.message_types_by_name['ListCamerasRequest']
|
|
145
|
+
_LISTCAMERASREPLY = DESCRIPTOR.message_types_by_name['ListCamerasReply']
|
|
146
|
+
_GETCAMERAREQUEST = DESCRIPTOR.message_types_by_name['GetCameraRequest']
|
|
147
|
+
_GETCAMERAREPLY = DESCRIPTOR.message_types_by_name['GetCameraReply']
|
|
143
148
|
_LINEDATAEXTRACT = DESCRIPTOR.message_types_by_name['LineDataExtract']
|
|
144
149
|
_LINEDATAEXTRACT_TABLE = _LINEDATAEXTRACT.nested_types_by_name['Table']
|
|
145
150
|
_LINEDATAEXTRACT_LINESENTRY = _LINEDATAEXTRACT.nested_types_by_name['LinesEntry']
|
|
@@ -615,6 +620,41 @@ ListSolutionFieldsReply = _reflection.GeneratedProtocolMessageType('ListSolution
|
|
|
615
620
|
})
|
|
616
621
|
_sym_db.RegisterMessage(ListSolutionFieldsReply)
|
|
617
622
|
|
|
623
|
+
CameraEntry = _reflection.GeneratedProtocolMessageType('CameraEntry', (_message.Message,), {
|
|
624
|
+
'DESCRIPTOR' : _CAMERAENTRY,
|
|
625
|
+
'__module__' : 'proto.api.v0.luminarycloud.vis.vis_pb2'
|
|
626
|
+
# @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.vis.CameraEntry)
|
|
627
|
+
})
|
|
628
|
+
_sym_db.RegisterMessage(CameraEntry)
|
|
629
|
+
|
|
630
|
+
ListCamerasRequest = _reflection.GeneratedProtocolMessageType('ListCamerasRequest', (_message.Message,), {
|
|
631
|
+
'DESCRIPTOR' : _LISTCAMERASREQUEST,
|
|
632
|
+
'__module__' : 'proto.api.v0.luminarycloud.vis.vis_pb2'
|
|
633
|
+
# @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.vis.ListCamerasRequest)
|
|
634
|
+
})
|
|
635
|
+
_sym_db.RegisterMessage(ListCamerasRequest)
|
|
636
|
+
|
|
637
|
+
ListCamerasReply = _reflection.GeneratedProtocolMessageType('ListCamerasReply', (_message.Message,), {
|
|
638
|
+
'DESCRIPTOR' : _LISTCAMERASREPLY,
|
|
639
|
+
'__module__' : 'proto.api.v0.luminarycloud.vis.vis_pb2'
|
|
640
|
+
# @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.vis.ListCamerasReply)
|
|
641
|
+
})
|
|
642
|
+
_sym_db.RegisterMessage(ListCamerasReply)
|
|
643
|
+
|
|
644
|
+
GetCameraRequest = _reflection.GeneratedProtocolMessageType('GetCameraRequest', (_message.Message,), {
|
|
645
|
+
'DESCRIPTOR' : _GETCAMERAREQUEST,
|
|
646
|
+
'__module__' : 'proto.api.v0.luminarycloud.vis.vis_pb2'
|
|
647
|
+
# @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.vis.GetCameraRequest)
|
|
648
|
+
})
|
|
649
|
+
_sym_db.RegisterMessage(GetCameraRequest)
|
|
650
|
+
|
|
651
|
+
GetCameraReply = _reflection.GeneratedProtocolMessageType('GetCameraReply', (_message.Message,), {
|
|
652
|
+
'DESCRIPTOR' : _GETCAMERAREPLY,
|
|
653
|
+
'__module__' : 'proto.api.v0.luminarycloud.vis.vis_pb2'
|
|
654
|
+
# @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.vis.GetCameraReply)
|
|
655
|
+
})
|
|
656
|
+
_sym_db.RegisterMessage(GetCameraReply)
|
|
657
|
+
|
|
618
658
|
LineDataExtract = _reflection.GeneratedProtocolMessageType('LineDataExtract', (_message.Message,), {
|
|
619
659
|
|
|
620
660
|
'Table' : _reflection.GeneratedProtocolMessageType('Table', (_message.Message,), {
|
|
@@ -741,22 +781,22 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
741
781
|
_LINEDATAEXTRACT_LINESENTRY._serialized_options = b'8\001'
|
|
742
782
|
_LINEDATAEXTRACT_LABELSENTRY._options = None
|
|
743
783
|
_LINEDATAEXTRACT_LABELSENTRY._serialized_options = b'8\001'
|
|
744
|
-
_CAMERADIRECTION._serialized_start=
|
|
745
|
-
_CAMERADIRECTION._serialized_end=
|
|
746
|
-
_CAMERAPROJECTION._serialized_start=
|
|
747
|
-
_CAMERAPROJECTION._serialized_end=
|
|
748
|
-
_REPRESENTATION._serialized_start=
|
|
749
|
-
_REPRESENTATION._serialized_end=
|
|
750
|
-
_STREAMLINESDIRECTION._serialized_start=
|
|
751
|
-
_STREAMLINESDIRECTION._serialized_end=
|
|
752
|
-
_GLYPHSAMPLINGMODE._serialized_start=
|
|
753
|
-
_GLYPHSAMPLINGMODE._serialized_end=
|
|
754
|
-
_COLORMAPNAME._serialized_start=
|
|
755
|
-
_COLORMAPNAME._serialized_end=
|
|
756
|
-
_EXTRACTSTATUS._serialized_start=
|
|
757
|
-
_EXTRACTSTATUS._serialized_end=
|
|
758
|
-
_RENDERDATAURLSSTATUS._serialized_start=
|
|
759
|
-
_RENDERDATAURLSSTATUS._serialized_end=
|
|
784
|
+
_CAMERADIRECTION._serialized_start=13661
|
|
785
|
+
_CAMERADIRECTION._serialized_end=13791
|
|
786
|
+
_CAMERAPROJECTION._serialized_start=13793
|
|
787
|
+
_CAMERAPROJECTION._serialized_end=13846
|
|
788
|
+
_REPRESENTATION._serialized_start=13848
|
|
789
|
+
_REPRESENTATION._serialized_end=13928
|
|
790
|
+
_STREAMLINESDIRECTION._serialized_start=13931
|
|
791
|
+
_STREAMLINESDIRECTION._serialized_end=14095
|
|
792
|
+
_GLYPHSAMPLINGMODE._serialized_start=14097
|
|
793
|
+
_GLYPHSAMPLINGMODE._serialized_end=14188
|
|
794
|
+
_COLORMAPNAME._serialized_start=14191
|
|
795
|
+
_COLORMAPNAME._serialized_end=14425
|
|
796
|
+
_EXTRACTSTATUS._serialized_start=14427
|
|
797
|
+
_EXTRACTSTATUS._serialized_end=14494
|
|
798
|
+
_RENDERDATAURLSSTATUS._serialized_start=14496
|
|
799
|
+
_RENDERDATAURLSSTATUS._serialized_end=14600
|
|
760
800
|
_PAN._serialized_start=248
|
|
761
801
|
_PAN._serialized_end=309
|
|
762
802
|
_CAMERALOOKAT._serialized_start=312
|
|
@@ -895,14 +935,24 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
895
935
|
_LISTSOLUTIONFIELDSREQUEST._serialized_end=12780
|
|
896
936
|
_LISTSOLUTIONFIELDSREPLY._serialized_start=12782
|
|
897
937
|
_LISTSOLUTIONFIELDSREPLY._serialized_end=12866
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
938
|
+
_CAMERAENTRY._serialized_start=12868
|
|
939
|
+
_CAMERAENTRY._serialized_end=12914
|
|
940
|
+
_LISTCAMERASREQUEST._serialized_start=12916
|
|
941
|
+
_LISTCAMERASREQUEST._serialized_end=12956
|
|
942
|
+
_LISTCAMERASREPLY._serialized_start=12958
|
|
943
|
+
_LISTCAMERASREPLY._serialized_end=13046
|
|
944
|
+
_GETCAMERAREQUEST._serialized_start=13048
|
|
945
|
+
_GETCAMERAREQUEST._serialized_end=13158
|
|
946
|
+
_GETCAMERAREPLY._serialized_start=13160
|
|
947
|
+
_GETCAMERAREPLY._serialized_end=13241
|
|
948
|
+
_LINEDATAEXTRACT._serialized_start=13244
|
|
949
|
+
_LINEDATAEXTRACT._serialized_end=13658
|
|
950
|
+
_LINEDATAEXTRACT_TABLE._serialized_start=13433
|
|
951
|
+
_LINEDATAEXTRACT_TABLE._serialized_end=13501
|
|
952
|
+
_LINEDATAEXTRACT_LINESENTRY._serialized_start=13503
|
|
953
|
+
_LINEDATAEXTRACT_LINESENTRY._serialized_end=13611
|
|
954
|
+
_LINEDATAEXTRACT_LABELSENTRY._serialized_start=13613
|
|
955
|
+
_LINEDATAEXTRACT_LABELSENTRY._serialized_end=13658
|
|
956
|
+
_VISAPISERVICE._serialized_start=14603
|
|
957
|
+
_VISAPISERVICE._serialized_end=16081
|
|
908
958
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -1906,6 +1906,91 @@ class ListSolutionFieldsReply(google.protobuf.message.Message):
|
|
|
1906
1906
|
|
|
1907
1907
|
global___ListSolutionFieldsReply = ListSolutionFieldsReply
|
|
1908
1908
|
|
|
1909
|
+
class CameraEntry(google.protobuf.message.Message):
|
|
1910
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1911
|
+
|
|
1912
|
+
NAME_FIELD_NUMBER: builtins.int
|
|
1913
|
+
CAMERA_ID_FIELD_NUMBER: builtins.int
|
|
1914
|
+
name: builtins.str
|
|
1915
|
+
camera_id: builtins.int
|
|
1916
|
+
def __init__(
|
|
1917
|
+
self,
|
|
1918
|
+
*,
|
|
1919
|
+
name: builtins.str = ...,
|
|
1920
|
+
camera_id: builtins.int = ...,
|
|
1921
|
+
) -> None: ...
|
|
1922
|
+
def ClearField(self, field_name: typing_extensions.Literal["camera_id", b"camera_id", "name", b"name"]) -> None: ...
|
|
1923
|
+
|
|
1924
|
+
global___CameraEntry = CameraEntry
|
|
1925
|
+
|
|
1926
|
+
class ListCamerasRequest(google.protobuf.message.Message):
|
|
1927
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1928
|
+
|
|
1929
|
+
PROJECT_ID_FIELD_NUMBER: builtins.int
|
|
1930
|
+
project_id: builtins.str
|
|
1931
|
+
"""Optional project id. Empty means list global cameras."""
|
|
1932
|
+
def __init__(
|
|
1933
|
+
self,
|
|
1934
|
+
*,
|
|
1935
|
+
project_id: builtins.str = ...,
|
|
1936
|
+
) -> None: ...
|
|
1937
|
+
def ClearField(self, field_name: typing_extensions.Literal["project_id", b"project_id"]) -> None: ...
|
|
1938
|
+
|
|
1939
|
+
global___ListCamerasRequest = ListCamerasRequest
|
|
1940
|
+
|
|
1941
|
+
class ListCamerasReply(google.protobuf.message.Message):
|
|
1942
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1943
|
+
|
|
1944
|
+
CAMERA_FIELD_NUMBER: builtins.int
|
|
1945
|
+
@property
|
|
1946
|
+
def camera(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___CameraEntry]: ...
|
|
1947
|
+
def __init__(
|
|
1948
|
+
self,
|
|
1949
|
+
*,
|
|
1950
|
+
camera: collections.abc.Iterable[global___CameraEntry] | None = ...,
|
|
1951
|
+
) -> None: ...
|
|
1952
|
+
def ClearField(self, field_name: typing_extensions.Literal["camera", b"camera"]) -> None: ...
|
|
1953
|
+
|
|
1954
|
+
global___ListCamerasReply = ListCamerasReply
|
|
1955
|
+
|
|
1956
|
+
class GetCameraRequest(google.protobuf.message.Message):
|
|
1957
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1958
|
+
|
|
1959
|
+
CAMERA_ID_FIELD_NUMBER: builtins.int
|
|
1960
|
+
RESOLUTION_FIELD_NUMBER: builtins.int
|
|
1961
|
+
camera_id: builtins.int
|
|
1962
|
+
@property
|
|
1963
|
+
def resolution(self) -> global___Resolution:
|
|
1964
|
+
"""Exact camera params need an aspect ratio to produce the correct camera
|
|
1965
|
+
params
|
|
1966
|
+
"""
|
|
1967
|
+
def __init__(
|
|
1968
|
+
self,
|
|
1969
|
+
*,
|
|
1970
|
+
camera_id: builtins.int = ...,
|
|
1971
|
+
resolution: global___Resolution | None = ...,
|
|
1972
|
+
) -> None: ...
|
|
1973
|
+
def HasField(self, field_name: typing_extensions.Literal["resolution", b"resolution"]) -> builtins.bool: ...
|
|
1974
|
+
def ClearField(self, field_name: typing_extensions.Literal["camera_id", b"camera_id", "resolution", b"resolution"]) -> None: ...
|
|
1975
|
+
|
|
1976
|
+
global___GetCameraRequest = GetCameraRequest
|
|
1977
|
+
|
|
1978
|
+
class GetCameraReply(google.protobuf.message.Message):
|
|
1979
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1980
|
+
|
|
1981
|
+
CAMERA_FIELD_NUMBER: builtins.int
|
|
1982
|
+
@property
|
|
1983
|
+
def camera(self) -> global___Camera: ...
|
|
1984
|
+
def __init__(
|
|
1985
|
+
self,
|
|
1986
|
+
*,
|
|
1987
|
+
camera: global___Camera | None = ...,
|
|
1988
|
+
) -> None: ...
|
|
1989
|
+
def HasField(self, field_name: typing_extensions.Literal["camera", b"camera"]) -> builtins.bool: ...
|
|
1990
|
+
def ClearField(self, field_name: typing_extensions.Literal["camera", b"camera"]) -> None: ...
|
|
1991
|
+
|
|
1992
|
+
global___GetCameraReply = GetCameraReply
|
|
1993
|
+
|
|
1909
1994
|
class LineDataExtract(google.protobuf.message.Message):
|
|
1910
1995
|
"""This is present to derserialize line data in python. Needs to be in sync
|
|
1911
1996
|
with visualizationservice.proto.
|
|
@@ -54,6 +54,16 @@ class VisAPIServiceStub(object):
|
|
|
54
54
|
request_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListSolutionFieldsRequest.SerializeToString,
|
|
55
55
|
response_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListSolutionFieldsReply.FromString,
|
|
56
56
|
)
|
|
57
|
+
self.ListCameras = channel.unary_unary(
|
|
58
|
+
'/luminary.proto.api.v0.luminarycloud.vis.VisAPIService/ListCameras',
|
|
59
|
+
request_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListCamerasRequest.SerializeToString,
|
|
60
|
+
response_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListCamerasReply.FromString,
|
|
61
|
+
)
|
|
62
|
+
self.GetCamera = channel.unary_unary(
|
|
63
|
+
'/luminary.proto.api.v0.luminarycloud.vis.VisAPIService/GetCamera',
|
|
64
|
+
request_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.GetCameraRequest.SerializeToString,
|
|
65
|
+
response_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.GetCameraReply.FromString,
|
|
66
|
+
)
|
|
57
67
|
|
|
58
68
|
|
|
59
69
|
class VisAPIServiceServicer(object):
|
|
@@ -107,6 +117,18 @@ class VisAPIServiceServicer(object):
|
|
|
107
117
|
context.set_details('Method not implemented!')
|
|
108
118
|
raise NotImplementedError('Method not implemented!')
|
|
109
119
|
|
|
120
|
+
def ListCameras(self, request, context):
|
|
121
|
+
"""Missing associated documentation comment in .proto file."""
|
|
122
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
123
|
+
context.set_details('Method not implemented!')
|
|
124
|
+
raise NotImplementedError('Method not implemented!')
|
|
125
|
+
|
|
126
|
+
def GetCamera(self, request, context):
|
|
127
|
+
"""Missing associated documentation comment in .proto file."""
|
|
128
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
129
|
+
context.set_details('Method not implemented!')
|
|
130
|
+
raise NotImplementedError('Method not implemented!')
|
|
131
|
+
|
|
110
132
|
|
|
111
133
|
def add_VisAPIServiceServicer_to_server(servicer, server):
|
|
112
134
|
rpc_method_handlers = {
|
|
@@ -150,6 +172,16 @@ def add_VisAPIServiceServicer_to_server(servicer, server):
|
|
|
150
172
|
request_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListSolutionFieldsRequest.FromString,
|
|
151
173
|
response_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListSolutionFieldsReply.SerializeToString,
|
|
152
174
|
),
|
|
175
|
+
'ListCameras': grpc.unary_unary_rpc_method_handler(
|
|
176
|
+
servicer.ListCameras,
|
|
177
|
+
request_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListCamerasRequest.FromString,
|
|
178
|
+
response_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListCamerasReply.SerializeToString,
|
|
179
|
+
),
|
|
180
|
+
'GetCamera': grpc.unary_unary_rpc_method_handler(
|
|
181
|
+
servicer.GetCamera,
|
|
182
|
+
request_deserializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.GetCameraRequest.FromString,
|
|
183
|
+
response_serializer=proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.GetCameraReply.SerializeToString,
|
|
184
|
+
),
|
|
153
185
|
}
|
|
154
186
|
generic_handler = grpc.method_handlers_generic_handler(
|
|
155
187
|
'luminary.proto.api.v0.luminarycloud.vis.VisAPIService', rpc_method_handlers)
|
|
@@ -295,3 +327,37 @@ class VisAPIService(object):
|
|
|
295
327
|
proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListSolutionFieldsReply.FromString,
|
|
296
328
|
options, channel_credentials,
|
|
297
329
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
330
|
+
|
|
331
|
+
@staticmethod
|
|
332
|
+
def ListCameras(request,
|
|
333
|
+
target,
|
|
334
|
+
options=(),
|
|
335
|
+
channel_credentials=None,
|
|
336
|
+
call_credentials=None,
|
|
337
|
+
insecure=False,
|
|
338
|
+
compression=None,
|
|
339
|
+
wait_for_ready=None,
|
|
340
|
+
timeout=None,
|
|
341
|
+
metadata=None):
|
|
342
|
+
return grpc.experimental.unary_unary(request, target, '/luminary.proto.api.v0.luminarycloud.vis.VisAPIService/ListCameras',
|
|
343
|
+
proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListCamerasRequest.SerializeToString,
|
|
344
|
+
proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.ListCamerasReply.FromString,
|
|
345
|
+
options, channel_credentials,
|
|
346
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
347
|
+
|
|
348
|
+
@staticmethod
|
|
349
|
+
def GetCamera(request,
|
|
350
|
+
target,
|
|
351
|
+
options=(),
|
|
352
|
+
channel_credentials=None,
|
|
353
|
+
call_credentials=None,
|
|
354
|
+
insecure=False,
|
|
355
|
+
compression=None,
|
|
356
|
+
wait_for_ready=None,
|
|
357
|
+
timeout=None,
|
|
358
|
+
metadata=None):
|
|
359
|
+
return grpc.experimental.unary_unary(request, target, '/luminary.proto.api.v0.luminarycloud.vis.VisAPIService/GetCamera',
|
|
360
|
+
proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.GetCameraRequest.SerializeToString,
|
|
361
|
+
proto_dot_api_dot_v0_dot_luminarycloud_dot_vis_dot_vis__pb2.GetCameraReply.FromString,
|
|
362
|
+
options, channel_credentials,
|
|
363
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
@@ -40,6 +40,14 @@ class VisAPIServiceStub:
|
|
|
40
40
|
luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.ListSolutionFieldsRequest,
|
|
41
41
|
luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.ListSolutionFieldsReply,
|
|
42
42
|
]
|
|
43
|
+
ListCameras: grpc.UnaryUnaryMultiCallable[
|
|
44
|
+
luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.ListCamerasRequest,
|
|
45
|
+
luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.ListCamerasReply,
|
|
46
|
+
]
|
|
47
|
+
GetCamera: grpc.UnaryUnaryMultiCallable[
|
|
48
|
+
luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.GetCameraRequest,
|
|
49
|
+
luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.GetCameraReply,
|
|
50
|
+
]
|
|
43
51
|
|
|
44
52
|
class VisAPIServiceServicer(metaclass=abc.ABCMeta):
|
|
45
53
|
@abc.abstractmethod
|
|
@@ -90,5 +98,17 @@ class VisAPIServiceServicer(metaclass=abc.ABCMeta):
|
|
|
90
98
|
request: luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.ListSolutionFieldsRequest,
|
|
91
99
|
context: grpc.ServicerContext,
|
|
92
100
|
) -> luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.ListSolutionFieldsReply: ...
|
|
101
|
+
@abc.abstractmethod
|
|
102
|
+
def ListCameras(
|
|
103
|
+
self,
|
|
104
|
+
request: luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.ListCamerasRequest,
|
|
105
|
+
context: grpc.ServicerContext,
|
|
106
|
+
) -> luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.ListCamerasReply: ...
|
|
107
|
+
@abc.abstractmethod
|
|
108
|
+
def GetCamera(
|
|
109
|
+
self,
|
|
110
|
+
request: luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.GetCameraRequest,
|
|
111
|
+
context: grpc.ServicerContext,
|
|
112
|
+
) -> luminarycloud._proto.api.v0.luminarycloud.vis.vis_pb2.GetCameraReply: ...
|
|
93
113
|
|
|
94
114
|
def add_VisAPIServiceServicer_to_server(servicer: VisAPIServiceServicer, server: grpc.Server) -> None: ...
|
luminarycloud/exceptions.py
CHANGED
|
@@ -22,6 +22,12 @@ class SDKException(Exception):
|
|
|
22
22
|
return [self.message]
|
|
23
23
|
|
|
24
24
|
|
|
25
|
+
class Timeout(SDKException):
|
|
26
|
+
"""Raised when some long-running operation doesn't finish before its deadline."""
|
|
27
|
+
|
|
28
|
+
pass
|
|
29
|
+
|
|
30
|
+
|
|
25
31
|
class RpcError(SDKException):
|
|
26
32
|
"""Raised when an RPC error occurs."""
|
|
27
33
|
|
|
@@ -70,6 +76,6 @@ class FailedPreconditionError(RpcError):
|
|
|
70
76
|
|
|
71
77
|
|
|
72
78
|
class DeadlineExceededError(RpcError):
|
|
73
|
-
"""Raised when the deadline expired before the operation could complete. I.e. it timed out."""
|
|
79
|
+
"""Raised when the gRPC deadline expired before the operation could complete. I.e. it timed out."""
|
|
74
80
|
|
|
75
81
|
pass
|
luminarycloud/geometry.py
CHANGED
|
@@ -42,6 +42,8 @@ class Geometry(ProtoWrapperBase):
|
|
|
42
42
|
"Geometry name."
|
|
43
43
|
status: GeometryStatus
|
|
44
44
|
"The status of the geometry."
|
|
45
|
+
project_id: ProjectID
|
|
46
|
+
"The ID of the project this geometry belongs to."
|
|
45
47
|
|
|
46
48
|
_proto: geometrypb.Geometry
|
|
47
49
|
|
|
@@ -63,7 +65,7 @@ class Geometry(ProtoWrapperBase):
|
|
|
63
65
|
"""
|
|
64
66
|
Get the project this geometry belongs to.
|
|
65
67
|
"""
|
|
66
|
-
return lc.get_project(
|
|
68
|
+
return lc.get_project(self.project_id)
|
|
67
69
|
|
|
68
70
|
def update(self, *, name: str | None = None) -> None:
|
|
69
71
|
"""
|
luminarycloud/mesh.py
CHANGED
|
@@ -106,8 +106,7 @@ class Mesh(ProtoWrapperBase):
|
|
|
106
106
|
interval_seconds=interval_seconds,
|
|
107
107
|
timeout_seconds=timeout_seconds,
|
|
108
108
|
)
|
|
109
|
-
self.
|
|
110
|
-
return self.status
|
|
109
|
+
return self.refresh().status
|
|
111
110
|
|
|
112
111
|
def refresh(self) -> "Mesh":
|
|
113
112
|
"""
|
luminarycloud/pipelines/api.py
CHANGED
|
@@ -36,7 +36,6 @@ class PipelineRecord:
|
|
|
36
36
|
class PipelineJobRecord:
|
|
37
37
|
id: str
|
|
38
38
|
pipeline_id: str
|
|
39
|
-
project_id: str
|
|
40
39
|
name: str
|
|
41
40
|
description: str | None
|
|
42
41
|
status: Literal["pending", "running", "completed", "failed", "cancelled"]
|
|
@@ -50,7 +49,6 @@ class PipelineJobRecord:
|
|
|
50
49
|
return cls(
|
|
51
50
|
id=json["id"],
|
|
52
51
|
pipeline_id=json["pipeline_id"],
|
|
53
|
-
project_id=json["project_id"],
|
|
54
52
|
name=json["name"],
|
|
55
53
|
description=json["description"],
|
|
56
54
|
status=json["status"],
|
|
@@ -113,7 +111,7 @@ def get_pipeline(id: str) -> PipelineRecord:
|
|
|
113
111
|
|
|
114
112
|
|
|
115
113
|
def create_pipeline_job(
|
|
116
|
-
pipeline_id: str, args: PipelineArgs,
|
|
114
|
+
pipeline_id: str, args: PipelineArgs, name: str, description: str | None = None
|
|
117
115
|
) -> PipelineJobRecord:
|
|
118
116
|
"""
|
|
119
117
|
Create a new pipeline job.
|
|
@@ -124,8 +122,6 @@ def create_pipeline_job(
|
|
|
124
122
|
ID of the pipeline to invoke.
|
|
125
123
|
args : PipelineArgs
|
|
126
124
|
Arguments to pass to the pipeline.
|
|
127
|
-
project_id : str
|
|
128
|
-
ID of the project to run the pipeline job in.
|
|
129
125
|
name : str
|
|
130
126
|
Name of the pipeline job.
|
|
131
127
|
description : str, optional
|
|
@@ -136,7 +132,6 @@ def create_pipeline_job(
|
|
|
136
132
|
body = {
|
|
137
133
|
"name": name,
|
|
138
134
|
"description": description,
|
|
139
|
-
"project_id": project_id,
|
|
140
135
|
"argument_names": [p.name for p in args.params],
|
|
141
136
|
"argument_rows": arg_rows,
|
|
142
137
|
}
|
luminarycloud/simulation.py
CHANGED
|
@@ -124,8 +124,7 @@ class Simulation(ProtoWrapperBase):
|
|
|
124
124
|
interval_seconds=interval_seconds,
|
|
125
125
|
timeout_seconds=timeout_seconds,
|
|
126
126
|
)
|
|
127
|
-
self.
|
|
128
|
-
return self.status
|
|
127
|
+
return self.refresh().status
|
|
129
128
|
|
|
130
129
|
def refresh(self) -> "Simulation":
|
|
131
130
|
"""
|
luminarycloud/vis/__init__.py
CHANGED
|
@@ -4,8 +4,12 @@ from .visualization import (
|
|
|
4
4
|
EntityType as EntityType,
|
|
5
5
|
list_renders as list_renders,
|
|
6
6
|
list_quantities as list_quantities,
|
|
7
|
+
list_quantities as list_quantities,
|
|
8
|
+
list_cameras as list_cameras,
|
|
9
|
+
get_camera as get_camera,
|
|
7
10
|
DirectionalCamera as DirectionalCamera,
|
|
8
11
|
LookAtCamera as LookAtCamera,
|
|
12
|
+
CameraEntry as CameraEntry,
|
|
9
13
|
)
|
|
10
14
|
|
|
11
15
|
from .primitives import (
|
|
@@ -52,3 +56,14 @@ from .interactive_scene import (
|
|
|
52
56
|
from .interactive_inference import (
|
|
53
57
|
InteractiveInference as InteractiveInference,
|
|
54
58
|
)
|
|
59
|
+
|
|
60
|
+
# Unreleased/internal for testing now
|
|
61
|
+
|
|
62
|
+
# from .report import (
|
|
63
|
+
# Report as Report,
|
|
64
|
+
# )
|
|
65
|
+
|
|
66
|
+
# from .interactive_report import (
|
|
67
|
+
# InteractiveReport as InteractiveReport,
|
|
68
|
+
# ReportEntry as ReportEntry,
|
|
69
|
+
# )
|
|
@@ -22,6 +22,7 @@ from luminarycloud.params.simulation.physics.fluid.boundary_conditions import Fa
|
|
|
22
22
|
from .._helpers._code_representation import CodeRepr
|
|
23
23
|
from ..types import SimulationID
|
|
24
24
|
from collections import defaultdict
|
|
25
|
+
import copy
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
logger = logging.getLogger(__name__)
|
|
@@ -227,14 +228,14 @@ class ExtractOutput:
|
|
|
227
228
|
extract_id: str,
|
|
228
229
|
project_id: str,
|
|
229
230
|
name: str,
|
|
230
|
-
|
|
231
|
+
description: str,
|
|
231
232
|
status: ExtractStatusType,
|
|
232
233
|
) -> None:
|
|
233
234
|
self._extract_id = extract_id
|
|
234
235
|
self._project_id = project_id
|
|
235
236
|
self.status = status
|
|
236
237
|
self.name = name
|
|
237
|
-
self.description =
|
|
238
|
+
self.description = description
|
|
238
239
|
|
|
239
240
|
def __repr__(self) -> str:
|
|
240
241
|
return f"ExtractOutput (Id: {self._extract_id} status: {self.status})"
|
|
@@ -563,7 +564,7 @@ class DataExtractor:
|
|
|
563
564
|
extract_id=res.extract.extract_id,
|
|
564
565
|
project_id=self._project_id,
|
|
565
566
|
name=name,
|
|
566
|
-
|
|
567
|
+
description=description,
|
|
567
568
|
status=ExtractStatusType(res.extract.status),
|
|
568
569
|
)
|
|
569
570
|
return extract_output
|
|
@@ -657,6 +658,21 @@ class DataExtractor:
|
|
|
657
658
|
|
|
658
659
|
return imports + code
|
|
659
660
|
|
|
661
|
+
def clone(self, solution: Solution) -> "DataExtractor":
|
|
662
|
+
"""
|
|
663
|
+
Clone this extract based on a new solution. This is a deep copy
|
|
664
|
+
operation. Both solution must be compatible with one another, meaning
|
|
665
|
+
they share tags or surfaces ids for extractors such as
|
|
666
|
+
IntersectionCurve.
|
|
667
|
+
"""
|
|
668
|
+
if not isinstance(solution, Solution):
|
|
669
|
+
raise TypeError("Expected a Solution object.")
|
|
670
|
+
cloned = DataExtractor(solution)
|
|
671
|
+
for extract in self._extracts:
|
|
672
|
+
copied_extract = copy.deepcopy(extract)
|
|
673
|
+
cloned.add_data_extract(copied_extract)
|
|
674
|
+
return cloned
|
|
675
|
+
|
|
660
676
|
|
|
661
677
|
def list_data_extracts(solution: Solution) -> list[ExtractOutput]:
|
|
662
678
|
"""
|
|
@@ -700,7 +716,7 @@ def list_data_extracts(solution: Solution) -> list[ExtractOutput]:
|
|
|
700
716
|
extract_id=extract.extract_id,
|
|
701
717
|
project_id=extract.project_id,
|
|
702
718
|
name=extract.name,
|
|
703
|
-
|
|
719
|
+
description=extract.description,
|
|
704
720
|
status=ExtractStatusType(extract.status),
|
|
705
721
|
)
|
|
706
722
|
# This need to be fixed on the backend, but manually refreshing works for now.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import io
|
|
2
|
+
from . import ExtractOutput
|
|
3
|
+
from .vis_util import _InternalToken, _get_status
|
|
4
|
+
from .visualization import RenderOutput
|
|
5
|
+
from ..enum import ExtractStatusType
|
|
6
|
+
from .._client import get_default_client
|
|
7
|
+
from .._proto.api.v0.luminarycloud.vis import vis_pb2
|
|
8
|
+
|
|
9
|
+
try:
|
|
10
|
+
import luminarycloud_jupyter as lcj
|
|
11
|
+
except ImportError:
|
|
12
|
+
lcj = None
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# TODO Will/Matt: this could be something like what we store in the DB
|
|
16
|
+
# A report can contain a list of report entries that reference post proc.
|
|
17
|
+
# extracts + styling info for how they should be displayed
|
|
18
|
+
class ReportEntry:
|
|
19
|
+
def __init__(
|
|
20
|
+
self, project_id: str, extract_ids: list[str] = [], metadata: dict[str, str | float] = {}
|
|
21
|
+
) -> None:
|
|
22
|
+
self._project_id = project_id
|
|
23
|
+
self._extract_ids = extract_ids
|
|
24
|
+
self._extracts: list[ExtractOutput | RenderOutput] = []
|
|
25
|
+
self._metadata = metadata
|
|
26
|
+
|
|
27
|
+
# Download all extracts for this report entry
|
|
28
|
+
def download_extracts(self) -> None:
|
|
29
|
+
self._extracts = []
|
|
30
|
+
for eid in self._extract_ids:
|
|
31
|
+
status = _get_status(self._project_id, eid)
|
|
32
|
+
if status != ExtractStatusType.COMPLETED:
|
|
33
|
+
raise Exception(f"Extract {eid} is not complete")
|
|
34
|
+
req = vis_pb2.DownloadExtractRequest()
|
|
35
|
+
req.extract_id = eid
|
|
36
|
+
req.project_id = self._project_id
|
|
37
|
+
# TODO: This is a bit awkward in that we download the extract to figure out what type
|
|
38
|
+
# it is, but this is just a temporary thing, later we'll have a report DB table that
|
|
39
|
+
# stores the extracts for a report and their types, etc.
|
|
40
|
+
res: vis_pb2.DownloadExtractResponse = get_default_client().DownloadExtract(req)
|
|
41
|
+
extract = (
|
|
42
|
+
ExtractOutput(_InternalToken())
|
|
43
|
+
if res.HasField("line_data")
|
|
44
|
+
else RenderOutput(_InternalToken())
|
|
45
|
+
)
|
|
46
|
+
extract._set_data(eid, self._project_id, eid, eid, status)
|
|
47
|
+
self._extracts.append(extract)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class InteractiveReport:
|
|
51
|
+
# TODO Will/Matt: this list of report entries could be how we store stuff in the DB
|
|
52
|
+
# for interactive reports, to reference the post proc. extracts. A report is essentially
|
|
53
|
+
# a bunch of extracts + metadata.
|
|
54
|
+
def __init__(self, entries: list[ReportEntry]) -> None:
|
|
55
|
+
if not lcj:
|
|
56
|
+
raise ImportError("InteractiveScene requires luminarycloud[jupyter] to be installed")
|
|
57
|
+
|
|
58
|
+
self.entries = entries
|
|
59
|
+
if len(self.entries) == 0:
|
|
60
|
+
raise ValueError("Invalid number of entries, must be > 0")
|
|
61
|
+
|
|
62
|
+
report_data = []
|
|
63
|
+
for row, re in enumerate(self.entries):
|
|
64
|
+
row_data = []
|
|
65
|
+
re.download_extracts()
|
|
66
|
+
for extract in re._extracts:
|
|
67
|
+
if isinstance(extract, RenderOutput):
|
|
68
|
+
image_and_label = extract.download_images()
|
|
69
|
+
row_data.extend([il[0] for il in image_and_label])
|
|
70
|
+
else:
|
|
71
|
+
plot_data = extract.download_data()
|
|
72
|
+
# Plot absolute pressure for each intersection curve we have
|
|
73
|
+
# TODO will: make these params of the extract/report entry
|
|
74
|
+
# We'll pick the first item that's not x/y/z coordinates to be the data we plot
|
|
75
|
+
x_axis = "x"
|
|
76
|
+
y_axis = [n for n in plot_data[0][0][0] if n != "x" and n != "y" and n != "z"][
|
|
77
|
+
0
|
|
78
|
+
]
|
|
79
|
+
scatter_plots = []
|
|
80
|
+
for p in plot_data:
|
|
81
|
+
data = p[0]
|
|
82
|
+
x_idx = data[0].index(x_axis)
|
|
83
|
+
y_idx = data[0].index(y_axis)
|
|
84
|
+
|
|
85
|
+
scatter_data = lcj.ScatterPlotData()
|
|
86
|
+
scatter_data.name = f"plot-{row}"
|
|
87
|
+
for r in data[1:]:
|
|
88
|
+
scatter_data.x.append(r[x_idx])
|
|
89
|
+
scatter_data.y.append(r[y_idx])
|
|
90
|
+
scatter_plots.append(scatter_data)
|
|
91
|
+
row_data.append(scatter_plots)
|
|
92
|
+
|
|
93
|
+
report_data.append(row_data)
|
|
94
|
+
|
|
95
|
+
# TODO Validate the grid configuration is valid, all report entries should have the
|
|
96
|
+
# same # of extract IDs and metadata keys
|
|
97
|
+
# maybe not needed, b/c this is something we'd control internally later?
|
|
98
|
+
nrows = len(report_data)
|
|
99
|
+
ncols = len(report_data[0]) if len(report_data) > 0 else 0
|
|
100
|
+
|
|
101
|
+
for i, r in enumerate(report_data):
|
|
102
|
+
if len(r) != ncols:
|
|
103
|
+
raise ValueError(
|
|
104
|
+
f"Invalid report configuration: row {i} does not have {ncols} columns"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
self.widget = lcj.EnsembleWidget([re._metadata for re in self.entries], nrows, ncols)
|
|
108
|
+
for row, row_data in enumerate(report_data):
|
|
109
|
+
for col, col_data in enumerate(row_data):
|
|
110
|
+
if isinstance(col_data, list) and isinstance(col_data[0], lcj.ScatterPlotData):
|
|
111
|
+
x_axis = "x"
|
|
112
|
+
y_axis = "Absolute Pressure (Pa)"
|
|
113
|
+
self.widget.set_cell_scatter_plot(
|
|
114
|
+
row, col, f"{row} {y_axis} v {x_axis}", x_axis, y_axis, col_data
|
|
115
|
+
)
|
|
116
|
+
elif isinstance(col_data, io.BytesIO):
|
|
117
|
+
self.widget.set_cell_data(row, col, col_data.getvalue(), "jpg")
|
|
118
|
+
|
|
119
|
+
def _ipython_display_(self) -> None:
|
|
120
|
+
"""
|
|
121
|
+
When the InteractiveReport is shown in Jupyter we show the underlying widget
|
|
122
|
+
to run the widget's frontend code
|
|
123
|
+
"""
|
|
124
|
+
self.widget._ipython_display_()
|
|
@@ -18,7 +18,16 @@ try:
|
|
|
18
18
|
import luminarycloud_jupyter as lcj
|
|
19
19
|
|
|
20
20
|
if TYPE_CHECKING:
|
|
21
|
-
from luminarycloud_jupyter import
|
|
21
|
+
from luminarycloud_jupyter import (
|
|
22
|
+
InteractiveLCVisWidget,
|
|
23
|
+
LCVisPlaneWidget,
|
|
24
|
+
LCVisLineWidget,
|
|
25
|
+
LCVisBoxWidget,
|
|
26
|
+
LCVisCylinderWidget,
|
|
27
|
+
LCVisHalfSphereWidget,
|
|
28
|
+
LCVisSphereWidget,
|
|
29
|
+
LCVisFinitePlaneWidget,
|
|
30
|
+
)
|
|
22
31
|
except ImportError:
|
|
23
32
|
lcj = None
|
|
24
33
|
|
|
@@ -134,7 +143,7 @@ class InteractiveScene:
|
|
|
134
143
|
def set_surface_visibility(self, surface_id: str, visible: bool) -> None:
|
|
135
144
|
self.widget.set_surface_visibility(surface_id, visible)
|
|
136
145
|
|
|
137
|
-
def set_surface_color(self, surface_id: str, color: list[float]) -> None:
|
|
146
|
+
def set_surface_color(self, surface_id: str, color: "list[float]") -> None:
|
|
138
147
|
self.widget.set_surface_color(surface_id, color)
|
|
139
148
|
|
|
140
149
|
def set_display_attributes(self, object_id: str, attrs: DisplayAttributes) -> None:
|
|
@@ -199,6 +208,24 @@ class InteractiveScene:
|
|
|
199
208
|
def add_plane_widget(self) -> "LCVisPlaneWidget":
|
|
200
209
|
return self.widget.add_plane_widget()
|
|
201
210
|
|
|
211
|
+
def add_line_widget(self) -> "LCVisLineWidget":
|
|
212
|
+
return self.widget.add_line_widget()
|
|
213
|
+
|
|
214
|
+
def add_box_widget(self) -> "LCVisBoxWidget":
|
|
215
|
+
return self.widget.add_box_widget()
|
|
216
|
+
|
|
217
|
+
def add_cylinder_widget(self) -> "LCVisCylinderWidget":
|
|
218
|
+
return self.widget.add_cylinder_widget()
|
|
219
|
+
|
|
220
|
+
def add_half_sphere_widget(self) -> "LCVisHalfSphereWidget":
|
|
221
|
+
return self.widget.add_half_sphere_widget()
|
|
222
|
+
|
|
223
|
+
def add_finite_plane_widget(self) -> "LCVisFinitePlaneWidget":
|
|
224
|
+
return self.widget.add_finite_plane_widget()
|
|
225
|
+
|
|
226
|
+
def add_sphere_widget(self) -> "LCVisSphereWidget":
|
|
227
|
+
return self.widget.add_sphere_widget()
|
|
228
|
+
|
|
202
229
|
def delete_widget(self, widget: "InteractiveLCVisWidget") -> None:
|
|
203
230
|
self.widget.delete_widget(widget)
|
|
204
231
|
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
from .visualization import Scene, RenderOutput
|
|
2
|
+
from .data_extraction import DataExtractor, ExtractOutput
|
|
3
|
+
from ..enum import RenderStatusType, ExtractStatusType
|
|
4
|
+
from ..solution import Solution
|
|
5
|
+
from time import sleep
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# Notes(matt): we need a good way to pass "legend" information to the report.
|
|
9
|
+
# The legend is list of scalar values that are associated with each solution in
|
|
10
|
+
# the report. Examples include outputs like lift or drag, scalar ranges in the
|
|
11
|
+
# solutions, or any user provided data. We could add a helper class to auto-produce
|
|
12
|
+
# the legend data for common use cases or the user could provide their own. The data
|
|
13
|
+
# would look like a csv file or a dictionary keyed on the solution/sim id, where each
|
|
14
|
+
# entry is a list of scalar values. We would also need a header to describe what the values
|
|
15
|
+
# are.
|
|
16
|
+
class Report:
|
|
17
|
+
def __init__(self, solutions: list[Solution]):
|
|
18
|
+
self._scenes: list[Scene] = []
|
|
19
|
+
self._data_extractors: list[DataExtractor] = []
|
|
20
|
+
self._solution: list[Solution] = solutions
|
|
21
|
+
# When we fire off requests we use these objects to track the progress.
|
|
22
|
+
self._extract_outputs: list[ExtractOutput] = []
|
|
23
|
+
self._render_outputs: list[RenderOutput] = []
|
|
24
|
+
for solution in solutions:
|
|
25
|
+
if not isinstance(solution, Solution):
|
|
26
|
+
raise TypeError("Expected a list of Solution objects.")
|
|
27
|
+
|
|
28
|
+
def add_scene(self, scene: Scene):
|
|
29
|
+
if not isinstance(scene, Scene):
|
|
30
|
+
raise TypeError("Expected a Scene object.")
|
|
31
|
+
self._scenes.append(scene)
|
|
32
|
+
|
|
33
|
+
def add_data_extractor(self, data_extractor: DataExtractor):
|
|
34
|
+
if not isinstance(data_extractor, DataExtractor):
|
|
35
|
+
raise TypeError("Expected a DataExtractor object.")
|
|
36
|
+
self._data_extractors.append(data_extractor)
|
|
37
|
+
|
|
38
|
+
def _check_status(self) -> bool:
|
|
39
|
+
"""Check the status of all render outputs and extract outputs."""
|
|
40
|
+
still_pending = False
|
|
41
|
+
print("\n" + "=" * 60)
|
|
42
|
+
print("STATUS CHECK".center(60))
|
|
43
|
+
print("=" * 60)
|
|
44
|
+
|
|
45
|
+
if not self._render_outputs and not self._extract_outputs:
|
|
46
|
+
raise RuntimeError("No render outputs or extract outputs to check status.")
|
|
47
|
+
|
|
48
|
+
# Check render outputs
|
|
49
|
+
if self._render_outputs:
|
|
50
|
+
print(f"{'Type':<8} | {'ID':<20} | {'Status':<15}")
|
|
51
|
+
print("-" * 60)
|
|
52
|
+
|
|
53
|
+
for output in self._render_outputs:
|
|
54
|
+
if (
|
|
55
|
+
output.status != RenderStatusType.COMPLETED
|
|
56
|
+
and output.status != RenderStatusType.FAILED
|
|
57
|
+
):
|
|
58
|
+
output.refresh()
|
|
59
|
+
still_pending = True
|
|
60
|
+
print(f"{'Render':<8} | {str(output._extract_id):<20} | {output.status.name:<15}")
|
|
61
|
+
|
|
62
|
+
# Check extract outputs
|
|
63
|
+
for output in self._extract_outputs:
|
|
64
|
+
if (
|
|
65
|
+
output.status != ExtractStatusType.COMPLETED
|
|
66
|
+
and output.status != ExtractStatusType.FAILED
|
|
67
|
+
):
|
|
68
|
+
output.refresh()
|
|
69
|
+
still_pending = True
|
|
70
|
+
print(f"{'Extract':<8} | {str(output._extract_id):<20} | {output.status.name:<15}")
|
|
71
|
+
|
|
72
|
+
print("=" * 60)
|
|
73
|
+
return still_pending
|
|
74
|
+
|
|
75
|
+
def create_report_data(self):
|
|
76
|
+
for solution in self._solution:
|
|
77
|
+
for scene in self._scenes:
|
|
78
|
+
sol_scene = scene.clone(solution)
|
|
79
|
+
self._render_outputs.append(
|
|
80
|
+
sol_scene.render_images(
|
|
81
|
+
name="Report Scene", description="Generated Report Scene"
|
|
82
|
+
)
|
|
83
|
+
)
|
|
84
|
+
for extractor in self._data_extractors:
|
|
85
|
+
sol_extractor = extractor.clone(solution)
|
|
86
|
+
self._extract_outputs.append(
|
|
87
|
+
sol_extractor.create_extracts(
|
|
88
|
+
name="Report Extract", description="Generated Report Extract"
|
|
89
|
+
)
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
def wait_for_completion(self):
|
|
93
|
+
"""Wait for all render and extract outputs to complete."""
|
|
94
|
+
if not self._render_outputs and not self._extract_outputs:
|
|
95
|
+
raise RuntimeError("No render outputs or extract outputs to wait for.")
|
|
96
|
+
while self._check_status():
|
|
97
|
+
sleep(5)
|
|
98
|
+
print("All render and extract outputs have completed.")
|
|
@@ -162,7 +162,7 @@ class LookAtCamera(CodeRepr):
|
|
|
162
162
|
self.projection = CameraProjection(static_ani.camera.projection)
|
|
163
163
|
|
|
164
164
|
def __repr__(self) -> str:
|
|
165
|
-
return self._to_code_helper(obj_name="camera")
|
|
165
|
+
return self._to_code_helper(obj_name="camera", hide_defaults=False)
|
|
166
166
|
|
|
167
167
|
|
|
168
168
|
class RenderOutput:
|
|
@@ -206,13 +206,18 @@ class RenderOutput:
|
|
|
206
206
|
self._deleted = False
|
|
207
207
|
|
|
208
208
|
def _set_data(
|
|
209
|
-
self,
|
|
209
|
+
self,
|
|
210
|
+
extract_id: str,
|
|
211
|
+
project_id: str,
|
|
212
|
+
name: str,
|
|
213
|
+
description: str,
|
|
214
|
+
status: RenderStatusType,
|
|
210
215
|
) -> None:
|
|
211
216
|
self._extract_id = extract_id
|
|
212
217
|
self._project_id = project_id
|
|
213
218
|
self.status = status
|
|
214
219
|
self.name = name
|
|
215
|
-
self.description =
|
|
220
|
+
self.description = description
|
|
216
221
|
|
|
217
222
|
def __repr__(self) -> str:
|
|
218
223
|
return f"RenderOutput(Id: {self._extract_id} status: {self.status})"
|
|
@@ -806,7 +811,7 @@ class Scene(CodeRepr):
|
|
|
806
811
|
extract_id=res.extract.extract_id,
|
|
807
812
|
project_id=self._project_id,
|
|
808
813
|
name=name,
|
|
809
|
-
|
|
814
|
+
description=description,
|
|
810
815
|
status=RenderStatusType(res.extract.status),
|
|
811
816
|
)
|
|
812
817
|
return render_output
|
|
@@ -1145,7 +1150,7 @@ def list_renders(entity: Geometry | Mesh | Solution) -> List[RenderOutput]:
|
|
|
1145
1150
|
extract_id=extract.extract_id,
|
|
1146
1151
|
project_id=extract.project_id,
|
|
1147
1152
|
name=extract.name,
|
|
1148
|
-
|
|
1153
|
+
description=extract.description,
|
|
1149
1154
|
status=RenderStatusType(extract.status),
|
|
1150
1155
|
)
|
|
1151
1156
|
# This need to be fixed on the backend, but manually refreshing works for now.
|
|
@@ -1315,3 +1320,60 @@ def _reconstruct(extract_id: str, project_id: str) -> Scene:
|
|
|
1315
1320
|
req.project_id = project_id
|
|
1316
1321
|
res: vis_pb2.GetExtractSpecResponse = get_default_client().GetExtractSpec(req)
|
|
1317
1322
|
return _spec_to_scene(res.spec)
|
|
1323
|
+
|
|
1324
|
+
|
|
1325
|
+
@dc.dataclass
|
|
1326
|
+
class CameraEntry:
|
|
1327
|
+
camera_id: int
|
|
1328
|
+
name: str
|
|
1329
|
+
|
|
1330
|
+
|
|
1331
|
+
def list_cameras(project_id: str = "") -> List[CameraEntry]:
|
|
1332
|
+
"""
|
|
1333
|
+
List all cameras in the specified project. If no project id is provided,
|
|
1334
|
+
global cameras are returned.
|
|
1335
|
+
"""
|
|
1336
|
+
req = vis_pb2.ListCamerasRequest()
|
|
1337
|
+
req.project_id = project_id
|
|
1338
|
+
res: vis_pb2.ListCamerasReply = get_default_client().ListCameras(req)
|
|
1339
|
+
return [CameraEntry(camera_id=c.camera_id, name=c.name) for c in res.camera]
|
|
1340
|
+
|
|
1341
|
+
|
|
1342
|
+
def get_camera(entry: CameraEntry, width: int, height: int) -> LookAtCamera:
|
|
1343
|
+
"""
|
|
1344
|
+
Instantiate a LookAt camera by its entry returned from list_cameras. The
|
|
1345
|
+
width and the height impact orthographic cameras. Most screens have a 16:9
|
|
1346
|
+
aspect ratio, so using the width = 1920 and height = 1080 is a good default
|
|
1347
|
+
to match cameras created in the UI, otherwise parts of the scene may be
|
|
1348
|
+
clipped.
|
|
1349
|
+
|
|
1350
|
+
.. warning:: This feature is experimental and may change or be removed in the future.
|
|
1351
|
+
|
|
1352
|
+
Parameters
|
|
1353
|
+
----------
|
|
1354
|
+
entry: CameraEntry, required
|
|
1355
|
+
A camera entry returned from list_cameras.
|
|
1356
|
+
width: int, required
|
|
1357
|
+
The target width of the camera.
|
|
1358
|
+
height: int, required
|
|
1359
|
+
The target height of the camera.
|
|
1360
|
+
"""
|
|
1361
|
+
req = vis_pb2.GetCameraRequest()
|
|
1362
|
+
req.camera_id = entry.camera_id
|
|
1363
|
+
req.resolution.width = width
|
|
1364
|
+
req.resolution.height = height
|
|
1365
|
+
res: vis_pb2.GetCameraReply = get_default_client().GetCamera(req)
|
|
1366
|
+
cam = LookAtCamera()
|
|
1367
|
+
cam.width = width
|
|
1368
|
+
cam.height = height
|
|
1369
|
+
cam.label = entry.name
|
|
1370
|
+
cam.up = Vector3()
|
|
1371
|
+
cam.up._from_proto(res.camera.look_at.up)
|
|
1372
|
+
cam.look_at = Vector3()
|
|
1373
|
+
cam.look_at._from_proto(res.camera.look_at.look_at)
|
|
1374
|
+
cam.position = Vector3()
|
|
1375
|
+
cam.position._from_proto(res.camera.look_at.position)
|
|
1376
|
+
cam.projection = CameraProjection(res.camera.projection)
|
|
1377
|
+
cam.pan_x = res.camera.look_at.pan.x
|
|
1378
|
+
cam.pan_y = res.camera.look_at.pan.y
|
|
1379
|
+
return cam
|
|
@@ -2,15 +2,15 @@ luminarycloud/__init__.py,sha256=mpNimnkWfQlpfQyo8Ugjx-gboUNug9hbsh-4m2A0JWY,331
|
|
|
2
2
|
luminarycloud/_patch.py,sha256=5m2_HUos6-NGPvrz-bOlVr5FsyJNJlCkmytyYJkj6Bc,1661
|
|
3
3
|
luminarycloud/_version.py,sha256=lOdK2s5vnq1K8KND-J-wO2A2MuUTouiYRhJwRwb6mcA,178
|
|
4
4
|
luminarycloud/_wrapper.py,sha256=PwTyxIVoYCF2z5arlV5UEgNfFDduxGE1KC2NaOpasWU,7796
|
|
5
|
-
luminarycloud/exceptions.py,sha256=
|
|
5
|
+
luminarycloud/exceptions.py,sha256=VVGtKREb8XcWea6TySVYh7dhGQpowafdhiTst1uN4EQ,1900
|
|
6
6
|
luminarycloud/feature_modification.py,sha256=Pe5bw8SlaNdd36az_OTFXKWEQI-0_wUIy5sRIqp9itM,30684
|
|
7
|
-
luminarycloud/geometry.py,sha256=
|
|
7
|
+
luminarycloud/geometry.py,sha256=tRPrdehQxFmST73BbpAnHHsvbK7kqe1gRYCgN3LpZTM,20790
|
|
8
8
|
luminarycloud/geometry_version.py,sha256=lP4oHotRpyt4fQkoYkwtfbNfpB0xSHFGEynFLCy7hiA,6004
|
|
9
|
-
luminarycloud/mesh.py,sha256=
|
|
9
|
+
luminarycloud/mesh.py,sha256=6O4fTg8gWYLTrBsf0-MH6c7HL72iZbPUfGGk_II9PR4,4782
|
|
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=
|
|
13
|
+
luminarycloud/simulation.py,sha256=lvcKGRQ8-8cBtETaY7kkDN1w_AHoFzgLahxFjpatNwI,13065
|
|
14
14
|
luminarycloud/simulation_param.py,sha256=fKad0d0rCUL4EbdLvQS7WTK6_US3vQ2pbG8uaSrhxx4,16732
|
|
15
15
|
luminarycloud/simulation_queue.py,sha256=dbrxDxGROlxpCVaUmHItZ8uftfLQinCj53nYZ-CRleI,4702
|
|
16
16
|
luminarycloud/simulation_template.py,sha256=ZsvgsUjW2nAJQ_JnZCsVdaRoogjpBIRNwhdXRxTmcSI,21526
|
|
@@ -27,7 +27,7 @@ luminarycloud/_auth/exceptions.py,sha256=XsjA6xxFGnufP5V7BOxnq_syuSRrLa-HWntncW5
|
|
|
27
27
|
luminarycloud/_auth/util.py,sha256=EmDl9BBV0SuKVyyq7PyYXPyOEkWBJRIqPN46l2srjEg,1040
|
|
28
28
|
luminarycloud/_client/__init__.py,sha256=q-q1lnJE9EirX5p_O15FnanUoSYdEOD5zP1XrUedKMU,681
|
|
29
29
|
luminarycloud/_client/authentication_plugin.py,sha256=eJXs0b8pYih12fBU1vgJ8gGpAdtjfbqCuxSprjR-p9E,1351
|
|
30
|
-
luminarycloud/_client/client.py,sha256=
|
|
30
|
+
luminarycloud/_client/client.py,sha256=KiugyhRBcWIQY61bS22HjTz0-beRdBms3NGkgC36388,11307
|
|
31
31
|
luminarycloud/_client/config.py,sha256=o_HJsmPOLaeorYToR9_wzNhJYRoFnmeqcxCRAoUAqZk,236
|
|
32
32
|
luminarycloud/_client/http_client.py,sha256=yWx6BJ5C40PRI6Y5qo7b4abUecME_QGcWu1IQVwMHDU,6423
|
|
33
33
|
luminarycloud/_client/logging_interceptor.py,sha256=I7xJzTQoV5O_Ioi7OjWXI2mQWxdpbagu7QnzbJSFcHg,2593
|
|
@@ -44,8 +44,8 @@ luminarycloud/_helpers/_simulation_params_from_json.py,sha256=Iq7S8XUqh3Y-6cZ2rv
|
|
|
44
44
|
luminarycloud/_helpers/_timestamp_to_datetime.py,sha256=Vh2-e7MRrxG8z7CMA-DRIIAhqGSUGYuIhW9csoh9pBw,299
|
|
45
45
|
luminarycloud/_helpers/_upload_mesh.py,sha256=eiWBSheNNdejfH3gkE7UohPXLRT3COOPPTN-yn2OU24,11955
|
|
46
46
|
luminarycloud/_helpers/_upload_table.py,sha256=B7Svu97Dr6UYt8pubD99kGvXkR0oKUtKSi3Ppj_qUMI,2211
|
|
47
|
-
luminarycloud/_helpers/_wait_for_mesh.py,sha256=
|
|
48
|
-
luminarycloud/_helpers/_wait_for_simulation.py,sha256=
|
|
47
|
+
luminarycloud/_helpers/_wait_for_mesh.py,sha256=p7Zp6ulifpZDAfRcN0kOPVjOU2e9oWutSrPIbMcsreg,1871
|
|
48
|
+
luminarycloud/_helpers/_wait_for_simulation.py,sha256=DusHJLmLi7NvLu3K7cfrb2ZSbPBrySK8t7TLS22oTms,3520
|
|
49
49
|
luminarycloud/_helpers/cond.py,sha256=BZ0MDBxy2lvcVQyaj0x_qLqJFlsu-X_n9r_Gw1Ppk-c,16752
|
|
50
50
|
luminarycloud/_helpers/defaults.py,sha256=jj6J3F2cjqO1CR5_F4ICxr44hTLC1GypD9Q4YQJRw68,1550
|
|
51
51
|
luminarycloud/_helpers/download.py,sha256=R1wWWgzZsaC7tnPHeu8pZvim0bS-o_DHc_yKUzXNC6g,9495
|
|
@@ -118,10 +118,10 @@ luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2.py,sha256=GSBDw-gXRD
|
|
|
118
118
|
luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
|
|
119
119
|
luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2_grpc.py,sha256=eyC9tE7Rid-6OvRiSohEim8mkORz-cVa-ml4T3S8qBU,12767
|
|
120
120
|
luminarycloud/_proto/api/v0/luminarycloud/upload/upload_pb2_grpc.pyi,sha256=Xknd7R7907K_Sv4rtixxvcBnyz5lA_RzgbHcrwM7qLo,6431
|
|
121
|
-
luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py,sha256=
|
|
122
|
-
luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi,sha256=
|
|
123
|
-
luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py,sha256=
|
|
124
|
-
luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi,sha256=
|
|
121
|
+
luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py,sha256=kaCgXHbnc9--biNbEXYnNpsW8Vv9ERJKnlB1BalFZ_o,76714
|
|
122
|
+
luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi,sha256=Uz_NEPpCc-aV80Q2-tm15Eamj6CklaUuEBIt3gCKaN0,95469
|
|
123
|
+
luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.py,sha256=aKoPboT8HQV4prwYV15B80C8o2j1TpSTGREG2aea2Uw,20130
|
|
124
|
+
luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2_grpc.pyi,sha256=faJ8c5BRLeHBtAhMrzayo3VQ4pI0ZcgOup8w322-ngA,5462
|
|
125
125
|
luminarycloud/_proto/assistant/assistant_pb2.py,sha256=zG3T15gNuEZE5yajkWfMUjl_nSdTJ6C-Mbd90_H_Svo,21590
|
|
126
126
|
luminarycloud/_proto/assistant/assistant_pb2.pyi,sha256=-IwjZXxwyMtts9T3yiCWszonhfoD8t5U5SuIQHb2SKs,26829
|
|
127
127
|
luminarycloud/_proto/assistant/assistant_pb2_grpc.py,sha256=jFKPYswcJ7jQaZFb1R3meXMDxmwUZyWwaj5tIOBfQ_U,13195
|
|
@@ -502,7 +502,7 @@ luminarycloud/physics_ai/training_jobs.py,sha256=e00WETgMqAps6N_PM8C3LmIcrUx3a-6
|
|
|
502
502
|
luminarycloud/pipeline_util/dictable.py,sha256=_YhxibnVCUqSpBH-IHBqvjiYlnAYMbuQv9dWK0eZn7Y,1073
|
|
503
503
|
luminarycloud/pipeline_util/yaml.py,sha256=RG3Gqv4ORaYX4lTyRVBsGVGE138zsxJIYzoWr4Aczrs,1883
|
|
504
504
|
luminarycloud/pipelines/__init__.py,sha256=bOu2XBDzOb5n9R5JwYFowLuLoSWXWW7I4mGm43cXdSs,1348
|
|
505
|
-
luminarycloud/pipelines/api.py,sha256=
|
|
505
|
+
luminarycloud/pipelines/api.py,sha256=ZA36tmDbOD--WqZP_aqKMew026SASfwn-RmqhtqUbX8,4454
|
|
506
506
|
luminarycloud/pipelines/arguments.py,sha256=cFbVzOumOUMzO4yB0aWblMH78fZvT-RMZEO-12EBWOs,3787
|
|
507
507
|
luminarycloud/pipelines/core.py,sha256=W_E8vLec2Sxi7LDGfEzkxFKrbDDnaxpD3BI3nBL4lpU,14754
|
|
508
508
|
luminarycloud/pipelines/operators.py,sha256=yYJ6SZu00zo73sSv3Hn5yfagBIKF9Z9r0ujg5b9uC08,5441
|
|
@@ -514,15 +514,17 @@ luminarycloud/types/adfloat.py,sha256=iSe08QPhQw-IK4j4GZcFM-OKlIHeLyKqUTLncIw2Iz
|
|
|
514
514
|
luminarycloud/types/ids.py,sha256=1N0K4xezmi2Dno8TH68tvBgZZCmqYUPbNKujudrzkNg,715
|
|
515
515
|
luminarycloud/types/matrix3.py,sha256=7E2CyDZBGL_YPiPyOKve2fhr0COL-7y2yJqqW70W7d8,922
|
|
516
516
|
luminarycloud/types/vector3.py,sha256=agzBz6_vBN6YzKQUlqB94BYOdOaFAbetJKqOtCthkDQ,3381
|
|
517
|
-
luminarycloud/vis/__init__.py,sha256=
|
|
518
|
-
luminarycloud/vis/data_extraction.py,sha256=
|
|
517
|
+
luminarycloud/vis/__init__.py,sha256=U-wbXLZn0pBmQaqLAMzyn0e-KJnWIe4UlvY25Hc9xys,1730
|
|
518
|
+
luminarycloud/vis/data_extraction.py,sha256=HSc4gSjXoH4jP_Fdot_qNCIuWA8D25hD_GkORy0xFfw,29599
|
|
519
519
|
luminarycloud/vis/display.py,sha256=VxnBtFTGjKINt2cMrJ_SbBI1y_csin9kMVqR5jsHpLo,10312
|
|
520
520
|
luminarycloud/vis/filters.py,sha256=WARUNUlx_fnuepGubMwbSRPOt56RBjBUVTYeRkqGv2c,48746
|
|
521
521
|
luminarycloud/vis/interactive_inference.py,sha256=5CyhmU4G2Iz6Ar8pczZVXivk_CniSQk8fmxCLb6BsCk,5943
|
|
522
|
-
luminarycloud/vis/
|
|
522
|
+
luminarycloud/vis/interactive_report.py,sha256=HmQgkxVx_4iiPrPFc3xMVbNmvOQjzf6pBY2To3TzirQ,5562
|
|
523
|
+
luminarycloud/vis/interactive_scene.py,sha256=RVQEvXcjKo-9kLlFAO-oASoYYjLEqDQF7WPyTPocEzo,10425
|
|
523
524
|
luminarycloud/vis/primitives.py,sha256=_EDSEAddSAFTRUU9at1Gxt-5chLO723f9c8V5atTeTg,4546
|
|
525
|
+
luminarycloud/vis/report.py,sha256=6CWDrwxs8oGKWh1RxzGfKLoxiv8AYHMOVx1bVc4W-zs,4231
|
|
524
526
|
luminarycloud/vis/vis_util.py,sha256=AWGmHcfYXGmfe5t5Jbb1Fqe2nxVdEQbBitCaWSeT89M,1821
|
|
525
|
-
luminarycloud/vis/visualization.py,sha256=
|
|
526
|
-
luminarycloud-0.
|
|
527
|
-
luminarycloud-0.
|
|
528
|
-
luminarycloud-0.
|
|
527
|
+
luminarycloud/vis/visualization.py,sha256=88egJE4-9hucD9VGZ79q38WSBIaSnwKg9Z8iHNP2nSQ,58643
|
|
528
|
+
luminarycloud-0.20.0.dist-info/METADATA,sha256=W86HkKKXtkJ_tm620JHAc3ytT6FLe-FCH61ebrBfeJQ,2574
|
|
529
|
+
luminarycloud-0.20.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
530
|
+
luminarycloud-0.20.0.dist-info/RECORD,,
|
|
File without changes
|