Spaces:
Building
Building
# Copyright 2024 The etils Authors. | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
"""Graph utils.""" | |
import os | |
import sys | |
import warnings | |
def set_verbose() -> None: | |
"""Log stderr & `absl.logging` in Colab (filtered by default).""" | |
# pylint: disable=g-import-not-at-top | |
# pytype: disable=import-error | |
from absl import logging | |
from colabtools import googlelog | |
# pytype: enable=import-error | |
# pylint: enable=g-import-not-at-top | |
logging.set_verbosity(logging.INFO) | |
googlelog.set_global_capture(True) | |
# See: | |
# https://docs.python.org/3/library/warnings.html#overriding-the-default-filter | |
if not sys.warnoptions: | |
warnings.simplefilter('default') | |
os.environ['PYTHONWARNINGS'] = 'default' # Also affect subprocesses | |
def patch_graphviz() -> None: | |
"""Fix `graphviz` display on Colab. | |
By default, graphviz object raises an error when displayed on Colab: | |
``` | |
ExecutableNotFound: failed to execute ['dot', '-Tsvg'], make sure the | |
Graphviz executables are on your systems' PATH | |
``` | |
Calling this function fix the behavior. | |
""" | |
# pylint: disable=g-import-not-at-top | |
# pytype: disable=import-error | |
from colabtools import proto | |
from colabtools import publish | |
from colabtools import stubby | |
import graphviz | |
# pytype: enable=import-error | |
# pylint: enable=g-import-not-at-top | |
request_proto_cls = proto.GetProtoClass('graphviz_server.RenderRequest') | |
graph_proto_cls = proto.GetProtoClass('graphviz_server.Graph') | |
def _ipython_display_(self): | |
graph = graph_proto_cls() | |
graph.dot = self.source | |
response = stubby.Call( | |
'blade:graphviz-server', | |
'RenderServer.Render', | |
request_proto_cls(graph=graph), | |
) | |
publish.html(response.rendered_graph.rendered_bytes) | |
if getattr(graphviz, 'files', None): | |
files = getattr(graphviz, 'files') | |
files.File._ipython_display_ = ( # pylint: disable=protected-access | |
_ipython_display_ | |
) | |