|
from typing import Any, MutableMapping |
|
|
|
import wandb |
|
|
|
from ..sdk.lib import ipython |
|
|
|
|
|
class Attrs: |
|
def __init__(self, attrs: MutableMapping[str, Any]): |
|
self._attrs = attrs |
|
|
|
def snake_to_camel(self, string): |
|
camel = "".join([i.title() for i in string.split("_")]) |
|
return camel[0].lower() + camel[1:] |
|
|
|
def display(self, height=420, hidden=False) -> bool: |
|
"""Display this object in jupyter.""" |
|
if wandb.run and wandb.run._settings.silent: |
|
return False |
|
|
|
if not ipython.in_jupyter(): |
|
return False |
|
|
|
html = self.to_html(height, hidden) |
|
if html is None: |
|
wandb.termwarn("This object does not support `.display()`") |
|
return False |
|
|
|
try: |
|
from IPython import display |
|
except ImportError: |
|
wandb.termwarn(".display() only works in jupyter environments") |
|
return False |
|
|
|
display.display(display.HTML(html)) |
|
return True |
|
|
|
def to_html(self, *args, **kwargs): |
|
return None |
|
|
|
def __getattr__(self, name): |
|
key = self.snake_to_camel(name) |
|
if key == "user": |
|
raise AttributeError |
|
if key in self._attrs.keys(): |
|
return self._attrs[key] |
|
elif name in self._attrs.keys(): |
|
return self._attrs[name] |
|
else: |
|
raise AttributeError(f"{repr(self)!r} object has no attribute {name!r}") |
|
|