Skip to content

Commit 442dd29

Browse files
author
anna-charlotte
committed
fix: all except video tensor
Signed-off-by: anna-charlotte <[email protected]>
1 parent 62b58ee commit 442dd29

File tree

7 files changed

+93
-26
lines changed

7 files changed

+93
-26
lines changed

docarray/typing/tensor/audio/abstract_audio_tensor.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
import warnings
12
import wave
23
from abc import ABC
34
from typing import BinaryIO, TypeVar, Union
45

56
from docarray.typing.tensor.abstract_tensor import AbstractTensor
7+
from docarray.utils.misc import is_notebook
68

79
T = TypeVar('T', bound='AbstractAudioTensor')
810

@@ -45,7 +47,10 @@ def display(self, rate=44100):
4547
"""
4648
Play audio data from tensor in notebook.
4749
"""
48-
audio_np = self.get_comp_backend().to_numpy(self)
49-
from IPython.display import Audio, display
50+
if is_notebook():
51+
from IPython.display import Audio, display
5052

51-
display(Audio(audio_np, rate=rate))
53+
audio_np = self.get_comp_backend().to_numpy(self)
54+
display(Audio(audio_np, rate=rate))
55+
else:
56+
warnings.warn('Display of audio is only possible ina notebook.')

docarray/typing/tensor/image/abstract_image_tensor.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import io
2+
import warnings
23
from abc import ABC
34

45
from docarray.typing.tensor.abstract_tensor import AbstractTensor
6+
from docarray.utils.misc import is_notebook
57

68

79
class AbstractImageTensor(AbstractTensor, ABC):
@@ -32,11 +34,14 @@ def display(self) -> None:
3234
"""
3335
Display image data from tensor in notebook.
3436
"""
35-
from PIL import Image
37+
if is_notebook():
38+
from PIL import Image
3639

37-
np_array = self.get_comp_backend().to_numpy(self)
38-
img = Image.fromarray(np_array)
40+
np_array = self.get_comp_backend().to_numpy(self)
41+
img = Image.fromarray(np_array)
3942

40-
from IPython.display import display
43+
from IPython.display import display
4144

42-
display(img)
45+
display(img)
46+
else:
47+
warnings.warn('Display of image is only possible in a notebook.')

docarray/typing/tensor/video/video_ndarray.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@ class MyVideoDoc(BaseDocument):
4343
video_tensor=np.random.random((100, 224, 224, 3)),
4444
)
4545
46-
doc_1.video_tensor.save(file_path='file_1.wav')
46+
doc_1.video_tensor.save(file_path='file_1.mp4')
4747
4848
4949
doc_2 = MyVideoDoc(
5050
title='my_second_video_doc',
5151
url='https://www.kozco.com/tech/piano2.wav',
5252
)
5353
54-
doc_2.video_tensor = parse_obj_as(VideoNdArray, doc_2.url.load())
55-
doc_2.video_tensor.save(file_path='file_2.wav')
54+
doc_2.video_tensor = parse_obj_as(VideoNdArray, doc_2.url.load().video)
55+
doc_2.video_tensor.save(file_path='file_2.mp4')
5656
5757
"""
5858

docarray/typing/url/audio_url.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
import warnings
12
from typing import TYPE_CHECKING, Any, Type, TypeVar, Union
23

34
import numpy as np
45

56
from docarray.typing.bytes.audio_bytes import AudioBytes
67
from docarray.typing.proto_register import _register_proto
78
from docarray.typing.url.any_url import AnyUrl
9+
from docarray.utils.misc import is_notebook
810

911
if TYPE_CHECKING:
1012
from pydantic import BaseConfig
@@ -72,12 +74,15 @@ def display(self):
7274
"""
7375
Play the audio sound from url in notebook.
7476
"""
75-
remote_url = True if self.startswith('http') else False
77+
if is_notebook():
78+
remote_url = True if self.startswith('http') else False
7679

77-
from IPython.display import Audio, display
80+
from IPython.display import Audio, display
7881

79-
if remote_url:
80-
display(Audio(data=self))
82+
if remote_url:
83+
display(Audio(data=self))
8184

85+
else:
86+
display(Audio(filename=self))
8287
else:
83-
display(Audio(filename=self))
88+
warnings.warn('Display of image is only possible in a notebook.')

docarray/typing/url/image_url.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import warnings
12
from typing import TYPE_CHECKING, Any, Optional, Tuple, Type, TypeVar, Union
23

34
import numpy as np
45

56
from docarray.typing.proto_register import _register_proto
67
from docarray.typing.url.any_url import AnyUrl
8+
from docarray.utils.misc import is_notebook
79

810
if TYPE_CHECKING:
911
from pydantic import BaseConfig
@@ -93,11 +95,14 @@ def display(self) -> None:
9395
"""
9496
Display image data from url in notebook.
9597
"""
96-
remote_url = True if self.startswith('http') else False
98+
if is_notebook():
99+
remote_url = True if self.startswith('http') else False
97100

98-
from IPython.display import Image, display
101+
from IPython.display import Image, display
99102

100-
if remote_url:
101-
display(Image(url=self))
103+
if remote_url:
104+
display(Image(url=self))
105+
else:
106+
display(Image(filename=self))
102107
else:
103-
display(Image(filename=self))
108+
warnings.warn('Display of image is only possible in a notebook.')

docarray/typing/url/video_url.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import warnings
12
from typing import TYPE_CHECKING, Any, NamedTuple, Type, TypeVar, Union
23

34
import numpy as np
@@ -8,6 +9,7 @@
89
from docarray.typing.tensor.ndarray import NdArray
910
from docarray.typing.tensor.video import VideoNdArray
1011
from docarray.typing.url.any_url import AnyUrl
12+
from docarray.utils.misc import is_notebook
1113

1214
if TYPE_CHECKING:
1315
from pydantic import BaseConfig
@@ -135,11 +137,30 @@ def display(self):
135137
"""
136138
Play video from url in notebook.
137139
"""
138-
remote_url = True if self.startswith('http') else False
140+
if is_notebook():
141+
remote_url = True if self.startswith('http') else False
139142

140-
from IPython.display import Video, display
143+
from IPython.display import display
144+
145+
if remote_url:
146+
from IPython.core.display import Video
147+
148+
display(Video(data=self))
149+
else:
150+
import os
151+
152+
from IPython.core.display import HTML
153+
154+
path = os.path.relpath(self)
155+
src = f'''
156+
<body>
157+
<video width="320" height="240" autoplay muted controls>
158+
<source src="{path}">
159+
Your browser does not support the video tag.
160+
</video>
161+
</body>
162+
'''
163+
display(HTML(src))
141164

142-
if remote_url:
143-
display(Video(data=self))
144165
else:
145-
display(Video(filename=self))
166+
warnings.warn('Display of video is only possible in a notebook.')

docarray/utils/misc.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,29 @@ def is_torch_available():
2020

2121
def is_tf_available():
2222
return tf_imported
23+
24+
25+
def is_notebook() -> bool:
26+
"""
27+
Check if we're running in a Jupyter notebook, using magic command
28+
`get_ipython` that only available in Jupyter.
29+
30+
:return: True if run in a Jupyter notebook else False.
31+
"""
32+
33+
try:
34+
shell = get_ipython().__class__.__name__ # type: ignore
35+
except NameError:
36+
return False
37+
38+
if shell == 'ZMQInteractiveShell':
39+
return True
40+
41+
elif shell == 'Shell':
42+
return True
43+
44+
elif shell == 'TerminalInteractiveShell':
45+
return False
46+
47+
else:
48+
return False

0 commit comments

Comments
 (0)