tensorbored 2.21.0rc1769983804__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.
- tensorbored/__init__.py +112 -0
- tensorbored/_vendor/__init__.py +0 -0
- tensorbored/_vendor/bleach/__init__.py +125 -0
- tensorbored/_vendor/bleach/_vendor/__init__.py +0 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/__init__.py +35 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/_ihatexml.py +289 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/_inputstream.py +918 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/_tokenizer.py +1735 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/_trie/__init__.py +5 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/_trie/_base.py +40 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/_trie/py.py +67 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/_utils.py +159 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/constants.py +2946 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/filters/__init__.py +0 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/filters/alphabeticalattributes.py +29 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/filters/base.py +12 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/filters/inject_meta_charset.py +73 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/filters/lint.py +93 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/filters/optionaltags.py +207 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/filters/sanitizer.py +916 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/filters/whitespace.py +38 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/html5parser.py +2795 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/serializer.py +409 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treeadapters/__init__.py +30 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treeadapters/genshi.py +54 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treeadapters/sax.py +50 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treebuilders/__init__.py +88 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treebuilders/base.py +417 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treebuilders/dom.py +239 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treebuilders/etree.py +343 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treebuilders/etree_lxml.py +392 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/__init__.py +154 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/base.py +252 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/dom.py +43 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/etree.py +131 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/etree_lxml.py +215 -0
- tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/genshi.py +69 -0
- tensorbored/_vendor/bleach/_vendor/parse.py +1078 -0
- tensorbored/_vendor/bleach/callbacks.py +32 -0
- tensorbored/_vendor/bleach/html5lib_shim.py +757 -0
- tensorbored/_vendor/bleach/linkifier.py +633 -0
- tensorbored/_vendor/bleach/parse_shim.py +1 -0
- tensorbored/_vendor/bleach/sanitizer.py +638 -0
- tensorbored/_vendor/bleach/six_shim.py +19 -0
- tensorbored/_vendor/webencodings/__init__.py +342 -0
- tensorbored/_vendor/webencodings/labels.py +231 -0
- tensorbored/_vendor/webencodings/mklabels.py +59 -0
- tensorbored/_vendor/webencodings/x_user_defined.py +325 -0
- tensorbored/assets.py +36 -0
- tensorbored/auth.py +102 -0
- tensorbored/backend/__init__.py +0 -0
- tensorbored/backend/application.py +604 -0
- tensorbored/backend/auth_context_middleware.py +38 -0
- tensorbored/backend/client_feature_flags.py +113 -0
- tensorbored/backend/empty_path_redirect.py +46 -0
- tensorbored/backend/event_processing/__init__.py +0 -0
- tensorbored/backend/event_processing/data_ingester.py +276 -0
- tensorbored/backend/event_processing/data_provider.py +535 -0
- tensorbored/backend/event_processing/directory_loader.py +142 -0
- tensorbored/backend/event_processing/directory_watcher.py +272 -0
- tensorbored/backend/event_processing/event_accumulator.py +950 -0
- tensorbored/backend/event_processing/event_file_inspector.py +463 -0
- tensorbored/backend/event_processing/event_file_loader.py +292 -0
- tensorbored/backend/event_processing/event_multiplexer.py +521 -0
- tensorbored/backend/event_processing/event_util.py +68 -0
- tensorbored/backend/event_processing/io_wrapper.py +223 -0
- tensorbored/backend/event_processing/plugin_asset_util.py +104 -0
- tensorbored/backend/event_processing/plugin_event_accumulator.py +721 -0
- tensorbored/backend/event_processing/plugin_event_multiplexer.py +522 -0
- tensorbored/backend/event_processing/reservoir.py +266 -0
- tensorbored/backend/event_processing/tag_types.py +29 -0
- tensorbored/backend/experiment_id.py +71 -0
- tensorbored/backend/experimental_plugin.py +51 -0
- tensorbored/backend/http_util.py +263 -0
- tensorbored/backend/json_util.py +70 -0
- tensorbored/backend/path_prefix.py +67 -0
- tensorbored/backend/process_graph.py +74 -0
- tensorbored/backend/security_validator.py +202 -0
- tensorbored/compat/__init__.py +69 -0
- tensorbored/compat/proto/__init__.py +0 -0
- tensorbored/compat/proto/allocation_description_pb2.py +35 -0
- tensorbored/compat/proto/api_def_pb2.py +82 -0
- tensorbored/compat/proto/attr_value_pb2.py +80 -0
- tensorbored/compat/proto/cluster_pb2.py +58 -0
- tensorbored/compat/proto/config_pb2.py +271 -0
- tensorbored/compat/proto/coordination_config_pb2.py +45 -0
- tensorbored/compat/proto/cost_graph_pb2.py +87 -0
- tensorbored/compat/proto/cpp_shape_inference_pb2.py +70 -0
- tensorbored/compat/proto/debug_pb2.py +65 -0
- tensorbored/compat/proto/event_pb2.py +149 -0
- tensorbored/compat/proto/full_type_pb2.py +74 -0
- tensorbored/compat/proto/function_pb2.py +157 -0
- tensorbored/compat/proto/graph_debug_info_pb2.py +111 -0
- tensorbored/compat/proto/graph_pb2.py +41 -0
- tensorbored/compat/proto/histogram_pb2.py +39 -0
- tensorbored/compat/proto/meta_graph_pb2.py +254 -0
- tensorbored/compat/proto/node_def_pb2.py +61 -0
- tensorbored/compat/proto/op_def_pb2.py +81 -0
- tensorbored/compat/proto/resource_handle_pb2.py +48 -0
- tensorbored/compat/proto/rewriter_config_pb2.py +93 -0
- tensorbored/compat/proto/rpc_options_pb2.py +35 -0
- tensorbored/compat/proto/saved_object_graph_pb2.py +193 -0
- tensorbored/compat/proto/saver_pb2.py +38 -0
- tensorbored/compat/proto/step_stats_pb2.py +116 -0
- tensorbored/compat/proto/struct_pb2.py +144 -0
- tensorbored/compat/proto/summary_pb2.py +111 -0
- tensorbored/compat/proto/tensor_description_pb2.py +38 -0
- tensorbored/compat/proto/tensor_pb2.py +68 -0
- tensorbored/compat/proto/tensor_shape_pb2.py +46 -0
- tensorbored/compat/proto/tfprof_log_pb2.py +307 -0
- tensorbored/compat/proto/trackable_object_graph_pb2.py +90 -0
- tensorbored/compat/proto/types_pb2.py +105 -0
- tensorbored/compat/proto/variable_pb2.py +62 -0
- tensorbored/compat/proto/verifier_config_pb2.py +38 -0
- tensorbored/compat/proto/versions_pb2.py +35 -0
- tensorbored/compat/tensorflow_stub/__init__.py +38 -0
- tensorbored/compat/tensorflow_stub/app.py +124 -0
- tensorbored/compat/tensorflow_stub/compat/__init__.py +131 -0
- tensorbored/compat/tensorflow_stub/compat/v1/__init__.py +20 -0
- tensorbored/compat/tensorflow_stub/dtypes.py +692 -0
- tensorbored/compat/tensorflow_stub/error_codes.py +169 -0
- tensorbored/compat/tensorflow_stub/errors.py +507 -0
- tensorbored/compat/tensorflow_stub/flags.py +124 -0
- tensorbored/compat/tensorflow_stub/io/__init__.py +17 -0
- tensorbored/compat/tensorflow_stub/io/gfile.py +1011 -0
- tensorbored/compat/tensorflow_stub/pywrap_tensorflow.py +285 -0
- tensorbored/compat/tensorflow_stub/tensor_shape.py +1035 -0
- tensorbored/context.py +129 -0
- tensorbored/data/__init__.py +0 -0
- tensorbored/data/grpc_provider.py +365 -0
- tensorbored/data/ingester.py +46 -0
- tensorbored/data/proto/__init__.py +0 -0
- tensorbored/data/proto/data_provider_pb2.py +517 -0
- tensorbored/data/proto/data_provider_pb2_grpc.py +374 -0
- tensorbored/data/provider.py +1365 -0
- tensorbored/data/server_ingester.py +301 -0
- tensorbored/data_compat.py +159 -0
- tensorbored/dataclass_compat.py +224 -0
- tensorbored/default.py +124 -0
- tensorbored/errors.py +130 -0
- tensorbored/lazy.py +99 -0
- tensorbored/main.py +48 -0
- tensorbored/main_lib.py +62 -0
- tensorbored/manager.py +487 -0
- tensorbored/notebook.py +441 -0
- tensorbored/plugin_util.py +266 -0
- tensorbored/plugins/__init__.py +0 -0
- tensorbored/plugins/audio/__init__.py +0 -0
- tensorbored/plugins/audio/audio_plugin.py +229 -0
- tensorbored/plugins/audio/metadata.py +69 -0
- tensorbored/plugins/audio/plugin_data_pb2.py +37 -0
- tensorbored/plugins/audio/summary.py +230 -0
- tensorbored/plugins/audio/summary_v2.py +124 -0
- tensorbored/plugins/base_plugin.py +367 -0
- tensorbored/plugins/core/__init__.py +0 -0
- tensorbored/plugins/core/core_plugin.py +981 -0
- tensorbored/plugins/custom_scalar/__init__.py +0 -0
- tensorbored/plugins/custom_scalar/custom_scalars_plugin.py +320 -0
- tensorbored/plugins/custom_scalar/layout_pb2.py +85 -0
- tensorbored/plugins/custom_scalar/metadata.py +35 -0
- tensorbored/plugins/custom_scalar/summary.py +79 -0
- tensorbored/plugins/debugger_v2/__init__.py +0 -0
- tensorbored/plugins/debugger_v2/debug_data_multiplexer.py +631 -0
- tensorbored/plugins/debugger_v2/debug_data_provider.py +634 -0
- tensorbored/plugins/debugger_v2/debugger_v2_plugin.py +504 -0
- tensorbored/plugins/distribution/__init__.py +0 -0
- tensorbored/plugins/distribution/compressor.py +158 -0
- tensorbored/plugins/distribution/distributions_plugin.py +116 -0
- tensorbored/plugins/distribution/metadata.py +19 -0
- tensorbored/plugins/graph/__init__.py +0 -0
- tensorbored/plugins/graph/graph_util.py +129 -0
- tensorbored/plugins/graph/graphs_plugin.py +336 -0
- tensorbored/plugins/graph/keras_util.py +328 -0
- tensorbored/plugins/graph/metadata.py +42 -0
- tensorbored/plugins/histogram/__init__.py +0 -0
- tensorbored/plugins/histogram/histograms_plugin.py +144 -0
- tensorbored/plugins/histogram/metadata.py +63 -0
- tensorbored/plugins/histogram/plugin_data_pb2.py +34 -0
- tensorbored/plugins/histogram/summary.py +234 -0
- tensorbored/plugins/histogram/summary_v2.py +292 -0
- tensorbored/plugins/hparams/__init__.py +14 -0
- tensorbored/plugins/hparams/_keras.py +93 -0
- tensorbored/plugins/hparams/api.py +130 -0
- tensorbored/plugins/hparams/api_pb2.py +208 -0
- tensorbored/plugins/hparams/backend_context.py +606 -0
- tensorbored/plugins/hparams/download_data.py +158 -0
- tensorbored/plugins/hparams/error.py +26 -0
- tensorbored/plugins/hparams/get_experiment.py +71 -0
- tensorbored/plugins/hparams/hparams_plugin.py +206 -0
- tensorbored/plugins/hparams/hparams_util_pb2.py +69 -0
- tensorbored/plugins/hparams/json_format_compat.py +38 -0
- tensorbored/plugins/hparams/list_metric_evals.py +57 -0
- tensorbored/plugins/hparams/list_session_groups.py +1040 -0
- tensorbored/plugins/hparams/metadata.py +125 -0
- tensorbored/plugins/hparams/metrics.py +41 -0
- tensorbored/plugins/hparams/plugin_data_pb2.py +69 -0
- tensorbored/plugins/hparams/summary.py +205 -0
- tensorbored/plugins/hparams/summary_v2.py +597 -0
- tensorbored/plugins/image/__init__.py +0 -0
- tensorbored/plugins/image/images_plugin.py +232 -0
- tensorbored/plugins/image/metadata.py +65 -0
- tensorbored/plugins/image/plugin_data_pb2.py +34 -0
- tensorbored/plugins/image/summary.py +159 -0
- tensorbored/plugins/image/summary_v2.py +130 -0
- tensorbored/plugins/mesh/__init__.py +14 -0
- tensorbored/plugins/mesh/mesh_plugin.py +292 -0
- tensorbored/plugins/mesh/metadata.py +152 -0
- tensorbored/plugins/mesh/plugin_data_pb2.py +37 -0
- tensorbored/plugins/mesh/summary.py +251 -0
- tensorbored/plugins/mesh/summary_v2.py +214 -0
- tensorbored/plugins/metrics/__init__.py +0 -0
- tensorbored/plugins/metrics/metadata.py +17 -0
- tensorbored/plugins/metrics/metrics_plugin.py +623 -0
- tensorbored/plugins/pr_curve/__init__.py +0 -0
- tensorbored/plugins/pr_curve/metadata.py +75 -0
- tensorbored/plugins/pr_curve/plugin_data_pb2.py +34 -0
- tensorbored/plugins/pr_curve/pr_curves_plugin.py +241 -0
- tensorbored/plugins/pr_curve/summary.py +574 -0
- tensorbored/plugins/profile_redirect/__init__.py +0 -0
- tensorbored/plugins/profile_redirect/profile_redirect_plugin.py +49 -0
- tensorbored/plugins/projector/__init__.py +67 -0
- tensorbored/plugins/projector/metadata.py +26 -0
- tensorbored/plugins/projector/projector_config_pb2.py +54 -0
- tensorbored/plugins/projector/projector_plugin.py +795 -0
- tensorbored/plugins/projector/tf_projector_plugin/index.js +32 -0
- tensorbored/plugins/projector/tf_projector_plugin/projector_binary.html +524 -0
- tensorbored/plugins/projector/tf_projector_plugin/projector_binary.js +15536 -0
- tensorbored/plugins/scalar/__init__.py +0 -0
- tensorbored/plugins/scalar/metadata.py +60 -0
- tensorbored/plugins/scalar/plugin_data_pb2.py +34 -0
- tensorbored/plugins/scalar/scalars_plugin.py +181 -0
- tensorbored/plugins/scalar/summary.py +109 -0
- tensorbored/plugins/scalar/summary_v2.py +124 -0
- tensorbored/plugins/text/__init__.py +0 -0
- tensorbored/plugins/text/metadata.py +62 -0
- tensorbored/plugins/text/plugin_data_pb2.py +34 -0
- tensorbored/plugins/text/summary.py +114 -0
- tensorbored/plugins/text/summary_v2.py +124 -0
- tensorbored/plugins/text/text_plugin.py +288 -0
- tensorbored/plugins/wit_redirect/__init__.py +0 -0
- tensorbored/plugins/wit_redirect/wit_redirect_plugin.py +49 -0
- tensorbored/program.py +910 -0
- tensorbored/summary/__init__.py +35 -0
- tensorbored/summary/_output.py +124 -0
- tensorbored/summary/_tf/__init__.py +14 -0
- tensorbored/summary/_tf/summary/__init__.py +178 -0
- tensorbored/summary/_writer.py +105 -0
- tensorbored/summary/v1.py +51 -0
- tensorbored/summary/v2.py +25 -0
- tensorbored/summary/writer/__init__.py +13 -0
- tensorbored/summary/writer/event_file_writer.py +291 -0
- tensorbored/summary/writer/record_writer.py +50 -0
- tensorbored/util/__init__.py +0 -0
- tensorbored/util/encoder.py +116 -0
- tensorbored/util/grpc_util.py +311 -0
- tensorbored/util/img_mime_type_detector.py +40 -0
- tensorbored/util/io_util.py +20 -0
- tensorbored/util/lazy_tensor_creator.py +110 -0
- tensorbored/util/op_evaluator.py +104 -0
- tensorbored/util/platform_util.py +20 -0
- tensorbored/util/tb_logging.py +24 -0
- tensorbored/util/tensor_util.py +617 -0
- tensorbored/util/timing.py +122 -0
- tensorbored/version.py +21 -0
- tensorbored/webfiles.zip +0 -0
- tensorbored-2.21.0rc1769983804.dist-info/METADATA +49 -0
- tensorbored-2.21.0rc1769983804.dist-info/RECORD +271 -0
- tensorbored-2.21.0rc1769983804.dist-info/WHEEL +5 -0
- tensorbored-2.21.0rc1769983804.dist-info/entry_points.txt +6 -0
- tensorbored-2.21.0rc1769983804.dist-info/licenses/LICENSE +739 -0
- tensorbored-2.21.0rc1769983804.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Copyright 2015 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ==============================================================================
|
|
15
|
+
|
|
16
|
+
"""A module providing a function for serializing JSON values with Infinity.
|
|
17
|
+
|
|
18
|
+
Python provides no way to override how json.dumps serializes
|
|
19
|
+
Infinity/-Infinity/NaN; if allow_nan is true, it encodes them as
|
|
20
|
+
Infinity/-Infinity/NaN, in violation of the JSON spec and in violation
|
|
21
|
+
of what JSON.parse accepts. If it's false, it throws a ValueError,
|
|
22
|
+
Neither subclassing JSONEncoder nor passing a function in the |default|
|
|
23
|
+
keyword argument overrides this.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
import collections
|
|
27
|
+
import math
|
|
28
|
+
|
|
29
|
+
_INFINITY = float("inf")
|
|
30
|
+
_NEGATIVE_INFINITY = float("-inf")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def Cleanse(obj, encoding="utf-8"):
|
|
34
|
+
"""Makes Python object appropriate for JSON serialization.
|
|
35
|
+
|
|
36
|
+
- Replaces instances of Infinity/-Infinity/NaN with strings.
|
|
37
|
+
- Turns byte strings into unicode strings.
|
|
38
|
+
- Turns sets into sorted lists.
|
|
39
|
+
- Turns tuples into lists.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
obj: Python data structure.
|
|
43
|
+
encoding: Charset used to decode byte strings.
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
Unicode JSON data structure.
|
|
47
|
+
"""
|
|
48
|
+
if isinstance(obj, int):
|
|
49
|
+
return obj
|
|
50
|
+
elif isinstance(obj, float):
|
|
51
|
+
if obj == _INFINITY:
|
|
52
|
+
return "Infinity"
|
|
53
|
+
elif obj == _NEGATIVE_INFINITY:
|
|
54
|
+
return "-Infinity"
|
|
55
|
+
elif math.isnan(obj):
|
|
56
|
+
return "NaN"
|
|
57
|
+
else:
|
|
58
|
+
return obj
|
|
59
|
+
elif isinstance(obj, bytes):
|
|
60
|
+
return obj.decode(encoding)
|
|
61
|
+
elif isinstance(obj, (list, tuple)):
|
|
62
|
+
return [Cleanse(i, encoding) for i in obj]
|
|
63
|
+
elif isinstance(obj, set):
|
|
64
|
+
return [Cleanse(i, encoding) for i in sorted(obj)]
|
|
65
|
+
elif isinstance(obj, dict):
|
|
66
|
+
return collections.OrderedDict(
|
|
67
|
+
(Cleanse(k, encoding), Cleanse(v, encoding)) for k, v in obj.items()
|
|
68
|
+
)
|
|
69
|
+
else:
|
|
70
|
+
return obj
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Copyright 2019 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ==============================================================================
|
|
15
|
+
"""Internal path prefix support for TensorBoard.
|
|
16
|
+
|
|
17
|
+
Using a path prefix of `/foo/bar` enables TensorBoard to serve from
|
|
18
|
+
`http://localhost:6006/foo/bar/` rather than `http://localhost:6006/`.
|
|
19
|
+
See the `--path_prefix` flag docs for more details.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from tensorbored import errors
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class PathPrefixMiddleware:
|
|
26
|
+
"""WSGI middleware for path prefixes.
|
|
27
|
+
|
|
28
|
+
All requests to this middleware must begin with the specified path
|
|
29
|
+
prefix (otherwise, a 404 will be returned immediately). Requests
|
|
30
|
+
will be forwarded to the underlying application with the path prefix
|
|
31
|
+
stripped and appended to `SCRIPT_NAME` (see the WSGI spec, PEP 3333,
|
|
32
|
+
for details).
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def __init__(self, application, path_prefix):
|
|
36
|
+
"""Initializes this middleware.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
application: The WSGI application to wrap (see PEP 3333).
|
|
40
|
+
path_prefix: A string path prefix to be stripped from incoming
|
|
41
|
+
requests. If empty, this middleware is a no-op. If non-empty,
|
|
42
|
+
the path prefix must start with a slash and not end with one
|
|
43
|
+
(e.g., "/tensorboard").
|
|
44
|
+
"""
|
|
45
|
+
if path_prefix.endswith("/"):
|
|
46
|
+
raise ValueError(
|
|
47
|
+
"Path prefix must not end with slash: %r" % path_prefix
|
|
48
|
+
)
|
|
49
|
+
if path_prefix and not path_prefix.startswith("/"):
|
|
50
|
+
raise ValueError(
|
|
51
|
+
"Non-empty path prefix must start with slash: %r" % path_prefix
|
|
52
|
+
)
|
|
53
|
+
self._application = application
|
|
54
|
+
self._path_prefix = path_prefix
|
|
55
|
+
self._strict_prefix = self._path_prefix + "/"
|
|
56
|
+
|
|
57
|
+
def __call__(self, environ, start_response):
|
|
58
|
+
path = environ.get("PATH_INFO", "")
|
|
59
|
+
if path != self._path_prefix and not path.startswith(
|
|
60
|
+
self._strict_prefix
|
|
61
|
+
):
|
|
62
|
+
raise errors.NotFoundError()
|
|
63
|
+
environ["PATH_INFO"] = path[len(self._path_prefix) :]
|
|
64
|
+
environ["SCRIPT_NAME"] = (
|
|
65
|
+
environ.get("SCRIPT_NAME", "") + self._path_prefix
|
|
66
|
+
)
|
|
67
|
+
return self._application(environ, start_response)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Copyright 2016 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ==============================================================================
|
|
15
|
+
"""Graph post-processing logic.
|
|
16
|
+
|
|
17
|
+
Used by both TensorBoard and mldash.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def prepare_graph_for_ui(
|
|
22
|
+
graph, limit_attr_size=1024, large_attrs_key="_too_large_attrs"
|
|
23
|
+
):
|
|
24
|
+
"""Prepares (modifies in-place) the graph to be served to the front-end.
|
|
25
|
+
|
|
26
|
+
For now, it supports filtering out attributes that are
|
|
27
|
+
too large to be shown in the graph UI.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
graph: The GraphDef proto message.
|
|
31
|
+
limit_attr_size: Maximum allowed size in bytes, before the attribute
|
|
32
|
+
is considered large. Default is 1024 (1KB). Must be > 0 or None.
|
|
33
|
+
If None, there will be no filtering.
|
|
34
|
+
large_attrs_key: The attribute key that will be used for storing attributes
|
|
35
|
+
that are too large. Default is '_too_large_attrs'. Must be != None if
|
|
36
|
+
`limit_attr_size` is != None.
|
|
37
|
+
|
|
38
|
+
Raises:
|
|
39
|
+
ValueError: If `large_attrs_key is None` while `limit_attr_size != None`.
|
|
40
|
+
ValueError: If `limit_attr_size` is defined, but <= 0.
|
|
41
|
+
"""
|
|
42
|
+
# TODO(@davidsoergel): detect whether a graph has been filtered already
|
|
43
|
+
# (to a limit_attr_size <= what is requested here). If it is already
|
|
44
|
+
# filtered, return immediately.
|
|
45
|
+
|
|
46
|
+
# Check input for validity.
|
|
47
|
+
if limit_attr_size is not None:
|
|
48
|
+
if large_attrs_key is None:
|
|
49
|
+
raise ValueError(
|
|
50
|
+
"large_attrs_key must be != None when limit_attr_size"
|
|
51
|
+
"!= None."
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
if limit_attr_size <= 0:
|
|
55
|
+
raise ValueError(
|
|
56
|
+
"limit_attr_size must be > 0, but is %d" % limit_attr_size
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# Filter only if a limit size is defined.
|
|
60
|
+
if limit_attr_size is not None:
|
|
61
|
+
for node in graph.node:
|
|
62
|
+
# Go through all the attributes and filter out ones bigger than the
|
|
63
|
+
# limit.
|
|
64
|
+
keys = list(node.attr.keys())
|
|
65
|
+
for key in keys:
|
|
66
|
+
size = node.attr[key].ByteSize()
|
|
67
|
+
if size > limit_attr_size or size < 0:
|
|
68
|
+
del node.attr[key]
|
|
69
|
+
# Add the attribute key to the list of "too large" attributes.
|
|
70
|
+
# This is used in the info card in the graph UI to show the user
|
|
71
|
+
# that some attributes are too large to be shown.
|
|
72
|
+
node.attr[large_attrs_key].list.s.append(
|
|
73
|
+
key.encode("utf-8")
|
|
74
|
+
)
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Copyright 2019 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ==============================================================================
|
|
15
|
+
"""Validates responses and their security features."""
|
|
16
|
+
|
|
17
|
+
import dataclasses
|
|
18
|
+
|
|
19
|
+
from typing import Collection
|
|
20
|
+
|
|
21
|
+
from werkzeug.datastructures import Headers
|
|
22
|
+
from werkzeug import http
|
|
23
|
+
|
|
24
|
+
from tensorbored.util import tb_logging
|
|
25
|
+
|
|
26
|
+
logger = tb_logging.get_logger()
|
|
27
|
+
|
|
28
|
+
_HTML_MIME_TYPE = "text/html"
|
|
29
|
+
_CSP_DEFAULT_SRC = "default-src"
|
|
30
|
+
# Whitelist of allowed CSP violations.
|
|
31
|
+
_CSP_IGNORE = {
|
|
32
|
+
# Polymer-based code uses unsafe-inline.
|
|
33
|
+
"style-src": ["'unsafe-inline'", "data:"],
|
|
34
|
+
# Used in canvas
|
|
35
|
+
"img-src": ["blob:", "data:"],
|
|
36
|
+
# Used by numericjs.
|
|
37
|
+
# TODO(stephanwlee): remove it eventually.
|
|
38
|
+
"script-src": ["'unsafe-eval'"],
|
|
39
|
+
"font-src": ["data:"],
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclasses.dataclass(frozen=True)
|
|
44
|
+
class Directive:
|
|
45
|
+
"""Content security policy directive.
|
|
46
|
+
|
|
47
|
+
Loosely follow vocabulary from https://www.w3.org/TR/CSP/#framework-directives.
|
|
48
|
+
|
|
49
|
+
Attributes:
|
|
50
|
+
name: A non-empty string.
|
|
51
|
+
value: A collection of non-empty strings.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
name: str
|
|
55
|
+
value: Collection[str]
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _maybe_raise_value_error(error_msg):
|
|
59
|
+
logger.warning("In 3.0, this warning will become an error:\n%s" % error_msg)
|
|
60
|
+
# TODO(3.x): raise a value error.
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class SecurityValidatorMiddleware:
|
|
64
|
+
"""WSGI middleware validating security on response.
|
|
65
|
+
|
|
66
|
+
It validates:
|
|
67
|
+
- responses have Content-Type
|
|
68
|
+
- responses have X-Content-Type-Options: nosniff
|
|
69
|
+
- text/html responses have CSP header. It also validates whether the CSP
|
|
70
|
+
headers pass basic requirement. e.g., default-src should be present, cannot
|
|
71
|
+
use "*" directive, and others. For more complete list, please refer to
|
|
72
|
+
_validate_csp_policies.
|
|
73
|
+
|
|
74
|
+
Instances of this class are WSGI applications (see PEP 3333).
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
def __init__(self, application):
|
|
78
|
+
"""Initializes an `SecurityValidatorMiddleware`.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
application: The WSGI application to wrap (see PEP 3333).
|
|
82
|
+
"""
|
|
83
|
+
self._application = application
|
|
84
|
+
|
|
85
|
+
def __call__(self, environ, start_response):
|
|
86
|
+
def start_response_proxy(status, headers, exc_info=None):
|
|
87
|
+
self._validate_headers(headers)
|
|
88
|
+
return start_response(status, headers, exc_info)
|
|
89
|
+
|
|
90
|
+
return self._application(environ, start_response_proxy)
|
|
91
|
+
|
|
92
|
+
def _validate_headers(self, headers_list):
|
|
93
|
+
headers = Headers(headers_list)
|
|
94
|
+
self._validate_content_type(headers)
|
|
95
|
+
self._validate_x_content_type_options(headers)
|
|
96
|
+
self._validate_csp_headers(headers)
|
|
97
|
+
|
|
98
|
+
def _validate_content_type(self, headers):
|
|
99
|
+
if headers.get("Content-Type"):
|
|
100
|
+
return
|
|
101
|
+
|
|
102
|
+
_maybe_raise_value_error("Content-Type is required on a Response")
|
|
103
|
+
|
|
104
|
+
def _validate_x_content_type_options(self, headers):
|
|
105
|
+
option = headers.get("X-Content-Type-Options")
|
|
106
|
+
if option == "nosniff":
|
|
107
|
+
return
|
|
108
|
+
|
|
109
|
+
_maybe_raise_value_error(
|
|
110
|
+
'X-Content-Type-Options is required to be "nosniff"'
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
def _validate_csp_headers(self, headers):
|
|
114
|
+
mime_type, _ = http.parse_options_header(headers.get("Content-Type"))
|
|
115
|
+
if mime_type != _HTML_MIME_TYPE:
|
|
116
|
+
return
|
|
117
|
+
|
|
118
|
+
csp_texts = headers.get_all("Content-Security-Policy")
|
|
119
|
+
policies = []
|
|
120
|
+
|
|
121
|
+
for csp_text in csp_texts:
|
|
122
|
+
policies += self._parse_serialized_csp(csp_text)
|
|
123
|
+
|
|
124
|
+
self._validate_csp_policies(policies)
|
|
125
|
+
|
|
126
|
+
def _validate_csp_policies(self, policies):
|
|
127
|
+
has_default_src = False
|
|
128
|
+
violations = []
|
|
129
|
+
|
|
130
|
+
for directive in policies:
|
|
131
|
+
name = directive.name
|
|
132
|
+
for value in directive.value:
|
|
133
|
+
has_default_src = has_default_src or name == _CSP_DEFAULT_SRC
|
|
134
|
+
|
|
135
|
+
if value in _CSP_IGNORE.get(name, []):
|
|
136
|
+
# There are cases where certain directives are legitimate.
|
|
137
|
+
continue
|
|
138
|
+
|
|
139
|
+
# TensorBoard follows principle of least privilege. However, to make it
|
|
140
|
+
# easier to conform to the security policy for plugin authors,
|
|
141
|
+
# TensorBoard trusts request and resources originating its server. Also,
|
|
142
|
+
# it can selectively trust domains as long as they use https protocol.
|
|
143
|
+
# Lastly, it can allow 'none' directive.
|
|
144
|
+
# TODO(stephanwlee): allow configuration for whitelist of domains for
|
|
145
|
+
# stricter enforcement.
|
|
146
|
+
# TODO(stephanwlee): deprecate the sha-based whitelisting.
|
|
147
|
+
if (
|
|
148
|
+
value == "'self'"
|
|
149
|
+
or value == "'none'"
|
|
150
|
+
or value.startswith("https:")
|
|
151
|
+
or value.startswith("'sha256-")
|
|
152
|
+
):
|
|
153
|
+
continue
|
|
154
|
+
|
|
155
|
+
msg = "Illegal Content-Security-Policy for {name}: {value}".format(
|
|
156
|
+
name=name, value=value
|
|
157
|
+
)
|
|
158
|
+
violations.append(msg)
|
|
159
|
+
|
|
160
|
+
if not has_default_src:
|
|
161
|
+
violations.append(
|
|
162
|
+
"Requires default-src for Content-Security-Policy"
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
if violations:
|
|
166
|
+
_maybe_raise_value_error("\n".join(violations))
|
|
167
|
+
|
|
168
|
+
def _parse_serialized_csp(self, csp_text):
|
|
169
|
+
# See https://www.w3.org/TR/CSP/#parse-serialized-policy.
|
|
170
|
+
# Below Steps are based on the algorithm stated in above spec.
|
|
171
|
+
# Deviations:
|
|
172
|
+
# - it does not warn and ignore duplicative directive (Step 2.5)
|
|
173
|
+
|
|
174
|
+
# Step 2
|
|
175
|
+
csp_srcs = csp_text.split(";")
|
|
176
|
+
|
|
177
|
+
policy = []
|
|
178
|
+
for token in csp_srcs:
|
|
179
|
+
# Step 2.1
|
|
180
|
+
token = token.strip()
|
|
181
|
+
|
|
182
|
+
if not token:
|
|
183
|
+
# Step 2.2
|
|
184
|
+
continue
|
|
185
|
+
|
|
186
|
+
# Step 2.3
|
|
187
|
+
token_frag = token.split(None, 1)
|
|
188
|
+
name = token_frag[0]
|
|
189
|
+
|
|
190
|
+
values = token_frag[1] if len(token_frag) == 2 else ""
|
|
191
|
+
|
|
192
|
+
# Step 2.4
|
|
193
|
+
name = name.lower()
|
|
194
|
+
|
|
195
|
+
# Step 2.6
|
|
196
|
+
value = values.split()
|
|
197
|
+
# Step 2.7
|
|
198
|
+
directive = Directive(name=name, value=value)
|
|
199
|
+
# Step 2.8
|
|
200
|
+
policy.append(directive)
|
|
201
|
+
|
|
202
|
+
return policy
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Copyright 2017 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""Compatibility interfaces for TensorBoard.
|
|
16
|
+
|
|
17
|
+
This module provides logic for importing variations on the TensorFlow
|
|
18
|
+
APIs, as lazily loaded imports to help avoid circular dependency issues
|
|
19
|
+
and defer the search and loading of the module until necessary.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
import tensorbored.lazy as _lazy
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@_lazy.lazy_load("tensorbored.compat.tf")
|
|
26
|
+
def tf():
|
|
27
|
+
"""Provide the root module of a TF-like API for use within TensorBoard.
|
|
28
|
+
|
|
29
|
+
By default this is equivalent to `import tensorflow as tf`, but it can be used
|
|
30
|
+
in combination with //tensorbored/compat:tensorflow (to fall back to a stub TF
|
|
31
|
+
API implementation if the real one is not available) or with
|
|
32
|
+
//tensorbored/compat:no_tensorflow (to force unconditional use of the stub).
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
The root module of a TF-like API, if available.
|
|
36
|
+
|
|
37
|
+
Raises:
|
|
38
|
+
ImportError: if a TF-like API is not available.
|
|
39
|
+
"""
|
|
40
|
+
try:
|
|
41
|
+
from tensorbored.compat import notf # noqa: F401
|
|
42
|
+
except ImportError:
|
|
43
|
+
try:
|
|
44
|
+
import tensorflow
|
|
45
|
+
|
|
46
|
+
return tensorflow
|
|
47
|
+
except ImportError:
|
|
48
|
+
pass
|
|
49
|
+
from tensorbored.compat import tensorflow_stub
|
|
50
|
+
|
|
51
|
+
return tensorflow_stub
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@_lazy.lazy_load("tensorbored.compat.tf2")
|
|
55
|
+
def tf2():
|
|
56
|
+
"""Provide the root module of a TF-2.0 API for use within TensorBoard.
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
The root module of a TF-2.0 API, if available.
|
|
60
|
+
|
|
61
|
+
Raises:
|
|
62
|
+
ImportError: if a TF-2.0 API is not available.
|
|
63
|
+
"""
|
|
64
|
+
# Resolve the lazy `tf` compat API from earlier in this file and try to find
|
|
65
|
+
# tf.compat.v2. Don't check tf.__version__ since this is not always reliable
|
|
66
|
+
# if TF was built with tf_api_version!=2.
|
|
67
|
+
if hasattr(tf, "compat") and hasattr(tf.compat, "v2"):
|
|
68
|
+
return tf.compat.v2
|
|
69
|
+
raise ImportError("cannot import tensorflow 2.0 API")
|
|
File without changes
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: tensorbored/compat/proto/allocation_description.proto
|
|
4
|
+
"""Generated protocol buffer code."""
|
|
5
|
+
from google.protobuf import descriptor as _descriptor
|
|
6
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
7
|
+
from google.protobuf import message as _message
|
|
8
|
+
from google.protobuf import reflection as _reflection
|
|
9
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
10
|
+
# @@protoc_insertion_point(imports)
|
|
11
|
+
|
|
12
|
+
_sym_db = _symbol_database.Default()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n5tensorbored/compat/proto/allocation_description.proto\x12\x0btensorbored\"\xa3\x01\n\x15\x41llocationDescription\x12\x17\n\x0frequested_bytes\x18\x01 \x01(\x03\x12\x17\n\x0f\x61llocated_bytes\x18\x02 \x01(\x03\x12\x16\n\x0e\x61llocator_name\x18\x03 \x01(\t\x12\x15\n\rallocation_id\x18\x04 \x01(\x03\x12\x1c\n\x14has_single_reference\x18\x05 \x01(\x08\x12\x0b\n\x03ptr\x18\x06 \x01(\x04\x42\x9b\x01\n\x18org.tensorflow.frameworkB\x1b\x41llocationDescriptionProtosP\x01Z]github.com/tensorflow/tensorflow/tensorflow/go/core/framework/allocation_description_go_proto\xf8\x01\x01\x62\x06proto3')
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
_ALLOCATIONDESCRIPTION = DESCRIPTOR.message_types_by_name['AllocationDescription']
|
|
22
|
+
AllocationDescription = _reflection.GeneratedProtocolMessageType('AllocationDescription', (_message.Message,), {
|
|
23
|
+
'DESCRIPTOR' : _ALLOCATIONDESCRIPTION,
|
|
24
|
+
'__module__' : 'tensorbored.compat.proto.allocation_description_pb2'
|
|
25
|
+
# @@protoc_insertion_point(class_scope:tensorbored.AllocationDescription)
|
|
26
|
+
})
|
|
27
|
+
_sym_db.RegisterMessage(AllocationDescription)
|
|
28
|
+
|
|
29
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
30
|
+
|
|
31
|
+
DESCRIPTOR._options = None
|
|
32
|
+
DESCRIPTOR._serialized_options = b'\n\030org.tensorflow.frameworkB\033AllocationDescriptionProtosP\001Z]github.com/tensorflow/tensorflow/tensorflow/go/core/framework/allocation_description_go_proto\370\001\001'
|
|
33
|
+
_ALLOCATIONDESCRIPTION._serialized_start=71
|
|
34
|
+
_ALLOCATIONDESCRIPTION._serialized_end=234
|
|
35
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: tensorbored/compat/proto/api_def.proto
|
|
4
|
+
"""Generated protocol buffer code."""
|
|
5
|
+
from google.protobuf import descriptor as _descriptor
|
|
6
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
7
|
+
from google.protobuf import message as _message
|
|
8
|
+
from google.protobuf import reflection as _reflection
|
|
9
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
10
|
+
# @@protoc_insertion_point(imports)
|
|
11
|
+
|
|
12
|
+
_sym_db = _symbol_database.Default()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from tensorbored.compat.proto import attr_value_pb2 as tensorbored_dot_compat_dot_proto_dot_attr__value__pb2
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&tensorbored/compat/proto/api_def.proto\x12\x0btensorbored\x1a)tensorbored/compat/proto/attr_value.proto\"\xe7\x05\n\x06\x41piDef\x12\x15\n\rgraph_op_name\x18\x01 \x01(\t\x12\x1b\n\x13\x64\x65precation_message\x18\x0c \x01(\t\x12\x1b\n\x13\x64\x65precation_version\x18\r \x01(\x05\x12\x32\n\nvisibility\x18\x02 \x01(\x0e\x32\x1e.tensorbored.ApiDef.Visibility\x12.\n\x08\x65ndpoint\x18\x03 \x03(\x0b\x32\x1c.tensorbored.ApiDef.Endpoint\x12\'\n\x06in_arg\x18\x04 \x03(\x0b\x32\x17.tensorbored.ApiDef.Arg\x12(\n\x07out_arg\x18\x05 \x03(\x0b\x32\x17.tensorbored.ApiDef.Arg\x12\x11\n\targ_order\x18\x0b \x03(\t\x12&\n\x04\x61ttr\x18\x06 \x03(\x0b\x32\x18.tensorbored.ApiDef.Attr\x12\x0f\n\x07summary\x18\x07 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x1a\n\x12\x64\x65scription_prefix\x18\t \x01(\t\x12\x1a\n\x12\x64\x65scription_suffix\x18\n \x01(\t\x1aI\n\x08\x45ndpoint\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\ndeprecated\x18\x03 \x01(\x08\x12\x1b\n\x13\x64\x65precation_version\x18\x04 \x01(\x05\x1a;\n\x03\x41rg\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\trename_to\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x1ak\n\x04\x41ttr\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\trename_to\x18\x02 \x01(\t\x12-\n\rdefault_value\x18\x03 \x01(\x0b\x32\x16.tensorbored.AttrValue\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\"G\n\nVisibility\x12\x16\n\x12\x44\x45\x46\x41ULT_VISIBILITY\x10\x00\x12\x0b\n\x07VISIBLE\x10\x01\x12\x08\n\x04SKIP\x10\x02\x12\n\n\x06HIDDEN\x10\x03\"*\n\x07\x41piDefs\x12\x1f\n\x02op\x18\x01 \x03(\x0b\x32\x13.tensorbored.ApiDefB}\n\x18org.tensorflow.frameworkB\x0c\x41piDefProtosP\x01ZNgithub.com/tensorflow/tensorflow/tensorflow/go/core/framework/api_def_go_proto\xf8\x01\x01\x62\x06proto3')
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
_APIDEF = DESCRIPTOR.message_types_by_name['ApiDef']
|
|
23
|
+
_APIDEF_ENDPOINT = _APIDEF.nested_types_by_name['Endpoint']
|
|
24
|
+
_APIDEF_ARG = _APIDEF.nested_types_by_name['Arg']
|
|
25
|
+
_APIDEF_ATTR = _APIDEF.nested_types_by_name['Attr']
|
|
26
|
+
_APIDEFS = DESCRIPTOR.message_types_by_name['ApiDefs']
|
|
27
|
+
_APIDEF_VISIBILITY = _APIDEF.enum_types_by_name['Visibility']
|
|
28
|
+
ApiDef = _reflection.GeneratedProtocolMessageType('ApiDef', (_message.Message,), {
|
|
29
|
+
|
|
30
|
+
'Endpoint' : _reflection.GeneratedProtocolMessageType('Endpoint', (_message.Message,), {
|
|
31
|
+
'DESCRIPTOR' : _APIDEF_ENDPOINT,
|
|
32
|
+
'__module__' : 'tensorbored.compat.proto.api_def_pb2'
|
|
33
|
+
# @@protoc_insertion_point(class_scope:tensorbored.ApiDef.Endpoint)
|
|
34
|
+
})
|
|
35
|
+
,
|
|
36
|
+
|
|
37
|
+
'Arg' : _reflection.GeneratedProtocolMessageType('Arg', (_message.Message,), {
|
|
38
|
+
'DESCRIPTOR' : _APIDEF_ARG,
|
|
39
|
+
'__module__' : 'tensorbored.compat.proto.api_def_pb2'
|
|
40
|
+
# @@protoc_insertion_point(class_scope:tensorbored.ApiDef.Arg)
|
|
41
|
+
})
|
|
42
|
+
,
|
|
43
|
+
|
|
44
|
+
'Attr' : _reflection.GeneratedProtocolMessageType('Attr', (_message.Message,), {
|
|
45
|
+
'DESCRIPTOR' : _APIDEF_ATTR,
|
|
46
|
+
'__module__' : 'tensorbored.compat.proto.api_def_pb2'
|
|
47
|
+
# @@protoc_insertion_point(class_scope:tensorbored.ApiDef.Attr)
|
|
48
|
+
})
|
|
49
|
+
,
|
|
50
|
+
'DESCRIPTOR' : _APIDEF,
|
|
51
|
+
'__module__' : 'tensorbored.compat.proto.api_def_pb2'
|
|
52
|
+
# @@protoc_insertion_point(class_scope:tensorbored.ApiDef)
|
|
53
|
+
})
|
|
54
|
+
_sym_db.RegisterMessage(ApiDef)
|
|
55
|
+
_sym_db.RegisterMessage(ApiDef.Endpoint)
|
|
56
|
+
_sym_db.RegisterMessage(ApiDef.Arg)
|
|
57
|
+
_sym_db.RegisterMessage(ApiDef.Attr)
|
|
58
|
+
|
|
59
|
+
ApiDefs = _reflection.GeneratedProtocolMessageType('ApiDefs', (_message.Message,), {
|
|
60
|
+
'DESCRIPTOR' : _APIDEFS,
|
|
61
|
+
'__module__' : 'tensorbored.compat.proto.api_def_pb2'
|
|
62
|
+
# @@protoc_insertion_point(class_scope:tensorbored.ApiDefs)
|
|
63
|
+
})
|
|
64
|
+
_sym_db.RegisterMessage(ApiDefs)
|
|
65
|
+
|
|
66
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
67
|
+
|
|
68
|
+
DESCRIPTOR._options = None
|
|
69
|
+
DESCRIPTOR._serialized_options = b'\n\030org.tensorflow.frameworkB\014ApiDefProtosP\001ZNgithub.com/tensorflow/tensorflow/tensorflow/go/core/framework/api_def_go_proto\370\001\001'
|
|
70
|
+
_APIDEF._serialized_start=99
|
|
71
|
+
_APIDEF._serialized_end=842
|
|
72
|
+
_APIDEF_ENDPOINT._serialized_start=526
|
|
73
|
+
_APIDEF_ENDPOINT._serialized_end=599
|
|
74
|
+
_APIDEF_ARG._serialized_start=601
|
|
75
|
+
_APIDEF_ARG._serialized_end=660
|
|
76
|
+
_APIDEF_ATTR._serialized_start=662
|
|
77
|
+
_APIDEF_ATTR._serialized_end=769
|
|
78
|
+
_APIDEF_VISIBILITY._serialized_start=771
|
|
79
|
+
_APIDEF_VISIBILITY._serialized_end=842
|
|
80
|
+
_APIDEFS._serialized_start=844
|
|
81
|
+
_APIDEFS._serialized_end=886
|
|
82
|
+
# @@protoc_insertion_point(module_scope)
|