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,325 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
"""
|
|
3
|
+
|
|
4
|
+
webencodings.x_user_defined
|
|
5
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
6
|
+
|
|
7
|
+
An implementation of the x-user-defined encoding.
|
|
8
|
+
|
|
9
|
+
:copyright: Copyright 2012 by Simon Sapin
|
|
10
|
+
:license: BSD, see LICENSE for details.
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import unicode_literals
|
|
15
|
+
|
|
16
|
+
import codecs
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Codec APIs
|
|
20
|
+
|
|
21
|
+
class Codec(codecs.Codec):
|
|
22
|
+
|
|
23
|
+
def encode(self, input, errors='strict'):
|
|
24
|
+
return codecs.charmap_encode(input, errors, encoding_table)
|
|
25
|
+
|
|
26
|
+
def decode(self, input, errors='strict'):
|
|
27
|
+
return codecs.charmap_decode(input, errors, decoding_table)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class IncrementalEncoder(codecs.IncrementalEncoder):
|
|
31
|
+
def encode(self, input, final=False):
|
|
32
|
+
return codecs.charmap_encode(input, self.errors, encoding_table)[0]
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class IncrementalDecoder(codecs.IncrementalDecoder):
|
|
36
|
+
def decode(self, input, final=False):
|
|
37
|
+
return codecs.charmap_decode(input, self.errors, decoding_table)[0]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class StreamWriter(Codec, codecs.StreamWriter):
|
|
41
|
+
pass
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class StreamReader(Codec, codecs.StreamReader):
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
### encodings module API
|
|
49
|
+
|
|
50
|
+
codec_info = codecs.CodecInfo(
|
|
51
|
+
name='x-user-defined',
|
|
52
|
+
encode=Codec().encode,
|
|
53
|
+
decode=Codec().decode,
|
|
54
|
+
incrementalencoder=IncrementalEncoder,
|
|
55
|
+
incrementaldecoder=IncrementalDecoder,
|
|
56
|
+
streamreader=StreamReader,
|
|
57
|
+
streamwriter=StreamWriter,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
### Decoding Table
|
|
62
|
+
|
|
63
|
+
# Python 3:
|
|
64
|
+
# for c in range(256): print(' %r' % chr(c if c < 128 else c + 0xF700))
|
|
65
|
+
decoding_table = (
|
|
66
|
+
'\x00'
|
|
67
|
+
'\x01'
|
|
68
|
+
'\x02'
|
|
69
|
+
'\x03'
|
|
70
|
+
'\x04'
|
|
71
|
+
'\x05'
|
|
72
|
+
'\x06'
|
|
73
|
+
'\x07'
|
|
74
|
+
'\x08'
|
|
75
|
+
'\t'
|
|
76
|
+
'\n'
|
|
77
|
+
'\x0b'
|
|
78
|
+
'\x0c'
|
|
79
|
+
'\r'
|
|
80
|
+
'\x0e'
|
|
81
|
+
'\x0f'
|
|
82
|
+
'\x10'
|
|
83
|
+
'\x11'
|
|
84
|
+
'\x12'
|
|
85
|
+
'\x13'
|
|
86
|
+
'\x14'
|
|
87
|
+
'\x15'
|
|
88
|
+
'\x16'
|
|
89
|
+
'\x17'
|
|
90
|
+
'\x18'
|
|
91
|
+
'\x19'
|
|
92
|
+
'\x1a'
|
|
93
|
+
'\x1b'
|
|
94
|
+
'\x1c'
|
|
95
|
+
'\x1d'
|
|
96
|
+
'\x1e'
|
|
97
|
+
'\x1f'
|
|
98
|
+
' '
|
|
99
|
+
'!'
|
|
100
|
+
'"'
|
|
101
|
+
'#'
|
|
102
|
+
'$'
|
|
103
|
+
'%'
|
|
104
|
+
'&'
|
|
105
|
+
"'"
|
|
106
|
+
'('
|
|
107
|
+
')'
|
|
108
|
+
'*'
|
|
109
|
+
'+'
|
|
110
|
+
','
|
|
111
|
+
'-'
|
|
112
|
+
'.'
|
|
113
|
+
'/'
|
|
114
|
+
'0'
|
|
115
|
+
'1'
|
|
116
|
+
'2'
|
|
117
|
+
'3'
|
|
118
|
+
'4'
|
|
119
|
+
'5'
|
|
120
|
+
'6'
|
|
121
|
+
'7'
|
|
122
|
+
'8'
|
|
123
|
+
'9'
|
|
124
|
+
':'
|
|
125
|
+
';'
|
|
126
|
+
'<'
|
|
127
|
+
'='
|
|
128
|
+
'>'
|
|
129
|
+
'?'
|
|
130
|
+
'@'
|
|
131
|
+
'A'
|
|
132
|
+
'B'
|
|
133
|
+
'C'
|
|
134
|
+
'D'
|
|
135
|
+
'E'
|
|
136
|
+
'F'
|
|
137
|
+
'G'
|
|
138
|
+
'H'
|
|
139
|
+
'I'
|
|
140
|
+
'J'
|
|
141
|
+
'K'
|
|
142
|
+
'L'
|
|
143
|
+
'M'
|
|
144
|
+
'N'
|
|
145
|
+
'O'
|
|
146
|
+
'P'
|
|
147
|
+
'Q'
|
|
148
|
+
'R'
|
|
149
|
+
'S'
|
|
150
|
+
'T'
|
|
151
|
+
'U'
|
|
152
|
+
'V'
|
|
153
|
+
'W'
|
|
154
|
+
'X'
|
|
155
|
+
'Y'
|
|
156
|
+
'Z'
|
|
157
|
+
'['
|
|
158
|
+
'\\'
|
|
159
|
+
']'
|
|
160
|
+
'^'
|
|
161
|
+
'_'
|
|
162
|
+
'`'
|
|
163
|
+
'a'
|
|
164
|
+
'b'
|
|
165
|
+
'c'
|
|
166
|
+
'd'
|
|
167
|
+
'e'
|
|
168
|
+
'f'
|
|
169
|
+
'g'
|
|
170
|
+
'h'
|
|
171
|
+
'i'
|
|
172
|
+
'j'
|
|
173
|
+
'k'
|
|
174
|
+
'l'
|
|
175
|
+
'm'
|
|
176
|
+
'n'
|
|
177
|
+
'o'
|
|
178
|
+
'p'
|
|
179
|
+
'q'
|
|
180
|
+
'r'
|
|
181
|
+
's'
|
|
182
|
+
't'
|
|
183
|
+
'u'
|
|
184
|
+
'v'
|
|
185
|
+
'w'
|
|
186
|
+
'x'
|
|
187
|
+
'y'
|
|
188
|
+
'z'
|
|
189
|
+
'{'
|
|
190
|
+
'|'
|
|
191
|
+
'}'
|
|
192
|
+
'~'
|
|
193
|
+
'\x7f'
|
|
194
|
+
'\uf780'
|
|
195
|
+
'\uf781'
|
|
196
|
+
'\uf782'
|
|
197
|
+
'\uf783'
|
|
198
|
+
'\uf784'
|
|
199
|
+
'\uf785'
|
|
200
|
+
'\uf786'
|
|
201
|
+
'\uf787'
|
|
202
|
+
'\uf788'
|
|
203
|
+
'\uf789'
|
|
204
|
+
'\uf78a'
|
|
205
|
+
'\uf78b'
|
|
206
|
+
'\uf78c'
|
|
207
|
+
'\uf78d'
|
|
208
|
+
'\uf78e'
|
|
209
|
+
'\uf78f'
|
|
210
|
+
'\uf790'
|
|
211
|
+
'\uf791'
|
|
212
|
+
'\uf792'
|
|
213
|
+
'\uf793'
|
|
214
|
+
'\uf794'
|
|
215
|
+
'\uf795'
|
|
216
|
+
'\uf796'
|
|
217
|
+
'\uf797'
|
|
218
|
+
'\uf798'
|
|
219
|
+
'\uf799'
|
|
220
|
+
'\uf79a'
|
|
221
|
+
'\uf79b'
|
|
222
|
+
'\uf79c'
|
|
223
|
+
'\uf79d'
|
|
224
|
+
'\uf79e'
|
|
225
|
+
'\uf79f'
|
|
226
|
+
'\uf7a0'
|
|
227
|
+
'\uf7a1'
|
|
228
|
+
'\uf7a2'
|
|
229
|
+
'\uf7a3'
|
|
230
|
+
'\uf7a4'
|
|
231
|
+
'\uf7a5'
|
|
232
|
+
'\uf7a6'
|
|
233
|
+
'\uf7a7'
|
|
234
|
+
'\uf7a8'
|
|
235
|
+
'\uf7a9'
|
|
236
|
+
'\uf7aa'
|
|
237
|
+
'\uf7ab'
|
|
238
|
+
'\uf7ac'
|
|
239
|
+
'\uf7ad'
|
|
240
|
+
'\uf7ae'
|
|
241
|
+
'\uf7af'
|
|
242
|
+
'\uf7b0'
|
|
243
|
+
'\uf7b1'
|
|
244
|
+
'\uf7b2'
|
|
245
|
+
'\uf7b3'
|
|
246
|
+
'\uf7b4'
|
|
247
|
+
'\uf7b5'
|
|
248
|
+
'\uf7b6'
|
|
249
|
+
'\uf7b7'
|
|
250
|
+
'\uf7b8'
|
|
251
|
+
'\uf7b9'
|
|
252
|
+
'\uf7ba'
|
|
253
|
+
'\uf7bb'
|
|
254
|
+
'\uf7bc'
|
|
255
|
+
'\uf7bd'
|
|
256
|
+
'\uf7be'
|
|
257
|
+
'\uf7bf'
|
|
258
|
+
'\uf7c0'
|
|
259
|
+
'\uf7c1'
|
|
260
|
+
'\uf7c2'
|
|
261
|
+
'\uf7c3'
|
|
262
|
+
'\uf7c4'
|
|
263
|
+
'\uf7c5'
|
|
264
|
+
'\uf7c6'
|
|
265
|
+
'\uf7c7'
|
|
266
|
+
'\uf7c8'
|
|
267
|
+
'\uf7c9'
|
|
268
|
+
'\uf7ca'
|
|
269
|
+
'\uf7cb'
|
|
270
|
+
'\uf7cc'
|
|
271
|
+
'\uf7cd'
|
|
272
|
+
'\uf7ce'
|
|
273
|
+
'\uf7cf'
|
|
274
|
+
'\uf7d0'
|
|
275
|
+
'\uf7d1'
|
|
276
|
+
'\uf7d2'
|
|
277
|
+
'\uf7d3'
|
|
278
|
+
'\uf7d4'
|
|
279
|
+
'\uf7d5'
|
|
280
|
+
'\uf7d6'
|
|
281
|
+
'\uf7d7'
|
|
282
|
+
'\uf7d8'
|
|
283
|
+
'\uf7d9'
|
|
284
|
+
'\uf7da'
|
|
285
|
+
'\uf7db'
|
|
286
|
+
'\uf7dc'
|
|
287
|
+
'\uf7dd'
|
|
288
|
+
'\uf7de'
|
|
289
|
+
'\uf7df'
|
|
290
|
+
'\uf7e0'
|
|
291
|
+
'\uf7e1'
|
|
292
|
+
'\uf7e2'
|
|
293
|
+
'\uf7e3'
|
|
294
|
+
'\uf7e4'
|
|
295
|
+
'\uf7e5'
|
|
296
|
+
'\uf7e6'
|
|
297
|
+
'\uf7e7'
|
|
298
|
+
'\uf7e8'
|
|
299
|
+
'\uf7e9'
|
|
300
|
+
'\uf7ea'
|
|
301
|
+
'\uf7eb'
|
|
302
|
+
'\uf7ec'
|
|
303
|
+
'\uf7ed'
|
|
304
|
+
'\uf7ee'
|
|
305
|
+
'\uf7ef'
|
|
306
|
+
'\uf7f0'
|
|
307
|
+
'\uf7f1'
|
|
308
|
+
'\uf7f2'
|
|
309
|
+
'\uf7f3'
|
|
310
|
+
'\uf7f4'
|
|
311
|
+
'\uf7f5'
|
|
312
|
+
'\uf7f6'
|
|
313
|
+
'\uf7f7'
|
|
314
|
+
'\uf7f8'
|
|
315
|
+
'\uf7f9'
|
|
316
|
+
'\uf7fa'
|
|
317
|
+
'\uf7fb'
|
|
318
|
+
'\uf7fc'
|
|
319
|
+
'\uf7fd'
|
|
320
|
+
'\uf7fe'
|
|
321
|
+
'\uf7ff'
|
|
322
|
+
)
|
|
323
|
+
|
|
324
|
+
### Encoding table
|
|
325
|
+
encoding_table = codecs.charmap_build(decoding_table)
|
tensorbored/assets.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Copyright 2021 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
|
+
"""Bindings for TensorBoard frontend assets."""
|
|
16
|
+
|
|
17
|
+
import os
|
|
18
|
+
|
|
19
|
+
from tensorbored.util import tb_logging
|
|
20
|
+
|
|
21
|
+
logger = tb_logging.get_logger()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def get_default_assets_zip_provider():
|
|
25
|
+
"""Try to get a function to provide frontend assets.
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
Either (a) a callable that takes no arguments and returns an open
|
|
29
|
+
file handle to a Zip archive of frontend assets, or (b) `None`, if
|
|
30
|
+
the frontend assets cannot be found.
|
|
31
|
+
"""
|
|
32
|
+
path = os.path.join(os.path.dirname(__file__), "webfiles.zip")
|
|
33
|
+
if not os.path.exists(path):
|
|
34
|
+
logger.warning("webfiles.zip static assets not found: %s", path)
|
|
35
|
+
return None
|
|
36
|
+
return lambda: open(path, "rb")
|
tensorbored/auth.py
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Copyright 2020 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
|
+
"""Experimental framework for authentication in TensorBoard."""
|
|
16
|
+
|
|
17
|
+
import abc
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class AuthProvider(metaclass=abc.ABCMeta):
|
|
21
|
+
"""Authentication provider for a specific kind of credential."""
|
|
22
|
+
|
|
23
|
+
def authenticate(self, environ):
|
|
24
|
+
"""Produce an opaque auth token from a WSGI request environment.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
environ: A WSGI environment `dict`; see PEP 3333.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
A Python object representing an auth token. The representation
|
|
31
|
+
and semantics depend on the particular `AuthProvider`
|
|
32
|
+
implementation.
|
|
33
|
+
|
|
34
|
+
Raises:
|
|
35
|
+
Exception: Any error, usually `tensorboard.errors.PublicError`
|
|
36
|
+
subclasses (like `PermissionDenied`) but also possibly a
|
|
37
|
+
custom error type that should propagate to a WSGI middleware
|
|
38
|
+
for effecting a redirect-driven auth flow.
|
|
39
|
+
"""
|
|
40
|
+
pass
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class AuthContext:
|
|
44
|
+
"""Authentication context within the scope of a single request.
|
|
45
|
+
|
|
46
|
+
Auth providers are keyed within an `AuthContext` by arbitrary
|
|
47
|
+
unique keys. It may often make sense for the key used for an
|
|
48
|
+
auth provider to simply be that provider's type object.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
def __init__(self, providers, environ):
|
|
52
|
+
"""Create an auth context.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
providers: A mapping from provider keys (opaque values) to
|
|
56
|
+
`AuthProvider` implementations.
|
|
57
|
+
environ: A WSGI environment (see PEP 3333).
|
|
58
|
+
"""
|
|
59
|
+
self._environ = environ
|
|
60
|
+
self._providers = providers
|
|
61
|
+
self._cache = {}
|
|
62
|
+
|
|
63
|
+
@classmethod
|
|
64
|
+
def empty(cls):
|
|
65
|
+
"""Create an auth context with no registered providers.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
A new `AuthContext` value for which any call to `get` will
|
|
69
|
+
fail with a `KeyError`.
|
|
70
|
+
"""
|
|
71
|
+
# Use an empty dict for the environ. This is not a valid WSGI
|
|
72
|
+
# environment, but it doesn't matter because it's never used.
|
|
73
|
+
return cls({}, {})
|
|
74
|
+
|
|
75
|
+
def get(self, provider_key):
|
|
76
|
+
"""Get an auth token from the auth provider with the given key.
|
|
77
|
+
|
|
78
|
+
If successful, the result will be cached on this auth context.
|
|
79
|
+
If unsuccessful, nothing will be cached, so a future call will
|
|
80
|
+
invoke the underlying `AuthProvider.authenticate` method again.
|
|
81
|
+
|
|
82
|
+
This method is not thread-safe. If multiple threads share an
|
|
83
|
+
auth context for a single request, then they must synchronize
|
|
84
|
+
externally when calling this method.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
The result of `provider.authenticate(...)` for the auth
|
|
88
|
+
provider specified by `provider_key`.
|
|
89
|
+
|
|
90
|
+
Raises:
|
|
91
|
+
KeyError: If the given `provider_key` does not correspond to
|
|
92
|
+
any registered `AuthProvider`.
|
|
93
|
+
Exception: As raised by the underlying `AuthProvider`.
|
|
94
|
+
"""
|
|
95
|
+
provider = self._providers[provider_key]
|
|
96
|
+
sentinel = object()
|
|
97
|
+
value = self._cache.get(provider_key, sentinel)
|
|
98
|
+
if value is not sentinel:
|
|
99
|
+
return value
|
|
100
|
+
value = provider.authenticate(self._environ)
|
|
101
|
+
self._cache[provider_key] = value
|
|
102
|
+
return value
|
|
File without changes
|