Skip to content

Commit 7517dfd

Browse files
committed
🔥 add registering tests
1 parent 50a2a2b commit 7517dfd

File tree

2 files changed

+213
-1
lines changed

2 files changed

+213
-1
lines changed

tests/conftest.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import pytest
1010
from plotly.subplots import make_subplots
1111

12-
from plotly_resampler import FigureResampler, LTTB, EveryNthPoint
12+
from plotly_resampler import FigureResampler, LTTB, EveryNthPoint, register_plotly_resampler, unregister_plotly_resampler
1313

1414
# hyperparameters
1515
_nb_samples = 10_000
@@ -18,6 +18,14 @@
1818
TESTING_LOCAL = False # SET THIS TO TRUE IF YOU ARE TESTING LOCALLY
1919

2020

21+
@pytest.fixture
22+
def registering_cleanup():
23+
# Cleans up the registering before and after each test
24+
unregister_plotly_resampler()
25+
yield
26+
unregister_plotly_resampler()
27+
28+
2129
@pytest.fixture
2230
def driver():
2331
from seleniumwire import webdriver

tests/test_registering.py

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
import plotly.graph_objects as go
2+
import plotly.express as px
3+
import numpy as np
4+
5+
from plotly_resampler import FigureResampler, FigureWidgetResampler
6+
from plotly_resampler.figure_resampler.figure_resampler_interface import (
7+
AbstractFigureAggregator,
8+
)
9+
from plotly_resampler.registering import (
10+
register_plotly_resampler,
11+
unregister_plotly_resampler,
12+
get_plotly_constr,
13+
)
14+
15+
from .conftest import registering_cleanup
16+
from inspect import isfunction
17+
18+
19+
def test_get_plotly_const(registering_cleanup):
20+
# Check the basi(c)s
21+
assert issubclass(FigureResampler, AbstractFigureAggregator)
22+
assert issubclass(FigureWidgetResampler, AbstractFigureAggregator)
23+
24+
# Is unregistered now
25+
assert not (isfunction(go.Figure) or isfunction(go.FigureWidget))
26+
assert not issubclass(go.Figure, AbstractFigureAggregator)
27+
assert not issubclass(go.FigureWidget, AbstractFigureAggregator)
28+
assert not issubclass(get_plotly_constr(go.Figure), AbstractFigureAggregator)
29+
assert not issubclass(get_plotly_constr(go.FigureWidget), AbstractFigureAggregator)
30+
31+
register_plotly_resampler()
32+
assert isfunction(go.Figure) and isfunction(go.FigureWidget)
33+
assert isinstance(go.Figure(), AbstractFigureAggregator)
34+
assert isinstance(go.FigureWidget(), AbstractFigureAggregator)
35+
assert issubclass(FigureResampler, AbstractFigureAggregator)
36+
assert issubclass(FigureWidgetResampler, AbstractFigureAggregator)
37+
assert not issubclass(get_plotly_constr(go.Figure), AbstractFigureAggregator)
38+
assert not issubclass(get_plotly_constr(go.FigureWidget), AbstractFigureAggregator)
39+
40+
unregister_plotly_resampler()
41+
assert not (isfunction(go.Figure) or isfunction(go.FigureWidget))
42+
assert not issubclass(go.Figure, AbstractFigureAggregator)
43+
assert not issubclass(go.FigureWidget, AbstractFigureAggregator)
44+
assert not issubclass(get_plotly_constr(go.Figure), AbstractFigureAggregator)
45+
assert not issubclass(get_plotly_constr(go.FigureWidget), AbstractFigureAggregator)
46+
47+
48+
def test_register_and_unregister_graph_objects(registering_cleanup):
49+
import plotly.graph_objects as go_
50+
51+
# Is unregistered now
52+
assert not (isfunction(go_.Figure) or isfunction(go_.FigureWidget))
53+
fig = go_.Figure()
54+
assert not isinstance(fig, AbstractFigureAggregator)
55+
fig = go_.FigureWidget()
56+
assert not isinstance(fig, AbstractFigureAggregator)
57+
58+
register_plotly_resampler()
59+
assert isfunction(go_.Figure) and isfunction(go_.FigureWidget)
60+
fig = go_.Figure()
61+
assert isinstance(fig, AbstractFigureAggregator)
62+
assert isinstance(fig, FigureResampler)
63+
assert not isinstance(fig, FigureWidgetResampler)
64+
fig = go_.FigureWidget()
65+
assert isinstance(fig, AbstractFigureAggregator)
66+
assert isinstance(fig, FigureWidgetResampler)
67+
assert not isinstance(fig, FigureResampler)
68+
69+
unregister_plotly_resampler()
70+
assert not (isfunction(go_.Figure) or isfunction(go_.FigureWidget))
71+
fig = go_.Figure()
72+
assert not isinstance(fig, AbstractFigureAggregator)
73+
fig = go_.FigureWidget()
74+
assert not isinstance(fig, AbstractFigureAggregator)
75+
76+
77+
def test_register_and_unregister_graph_objs(registering_cleanup):
78+
import plotly.graph_objs as go_
79+
80+
# Is unregistered now
81+
assert not (isfunction(go_.Figure) or isfunction(go_.FigureWidget))
82+
fig = go_.Figure()
83+
assert not isinstance(fig, AbstractFigureAggregator)
84+
fig = go_.FigureWidget()
85+
assert not isinstance(fig, AbstractFigureAggregator)
86+
87+
register_plotly_resampler()
88+
assert isfunction(go_.Figure) and isfunction(go_.FigureWidget)
89+
fig = go_.Figure()
90+
assert isinstance(fig, AbstractFigureAggregator)
91+
assert isinstance(fig, FigureResampler)
92+
assert not isinstance(fig, FigureWidgetResampler)
93+
fig = go_.FigureWidget()
94+
assert isinstance(fig, AbstractFigureAggregator)
95+
assert isinstance(fig, FigureWidgetResampler)
96+
assert not isinstance(fig, FigureResampler)
97+
98+
unregister_plotly_resampler()
99+
assert not (isfunction(go_.Figure) or isfunction(go_.FigureWidget))
100+
fig = go_.Figure()
101+
assert not isinstance(fig, AbstractFigureAggregator)
102+
fig = go_.FigureWidget()
103+
assert not isinstance(fig, AbstractFigureAggregator)
104+
105+
106+
def test_registering_modes(registering_cleanup):
107+
register_plotly_resampler(mode="auto")
108+
# Should be default
109+
assert isinstance(go.Figure(), FigureResampler)
110+
assert isinstance(go.FigureWidget(), FigureWidgetResampler)
111+
112+
register_plotly_resampler(mode="figure")
113+
# Should be all FigureResampler
114+
assert isinstance(go.Figure(), FigureResampler)
115+
assert isinstance(go.FigureWidget(), FigureResampler)
116+
117+
register_plotly_resampler(mode="widget")
118+
# Should be all FigureWidgetResampler
119+
assert isinstance(go.Figure(), FigureWidgetResampler)
120+
assert isinstance(go.FigureWidget(), FigureWidgetResampler)
121+
122+
123+
def test_registering_plotly_express_and_kwargs(registering_cleanup):
124+
# Is unregistered now
125+
fig = px.scatter(y=np.arange(500))
126+
assert not isinstance(fig, AbstractFigureAggregator)
127+
assert len(fig.data) == 1
128+
assert len(fig.data[0].y) == 500
129+
130+
register_plotly_resampler(default_n_shown_samples=50)
131+
fig = px.scatter(y=np.arange(500))
132+
assert isinstance(fig, FigureResampler)
133+
assert len(fig.data) == 1
134+
assert len(fig.data[0].y) == 50
135+
assert len(fig.hf_data) == 1
136+
assert len(fig.hf_data[0]["y"]) == 500
137+
138+
register_plotly_resampler()
139+
fig = px.scatter(y=np.arange(5000))
140+
assert isinstance(fig, FigureResampler)
141+
assert len(fig.data) == 1
142+
assert len(fig.data[0].y) == 1000
143+
assert len(fig.hf_data) == 1
144+
assert len(fig.hf_data[0]["y"]) == 5000
145+
146+
unregister_plotly_resampler()
147+
fig = px.scatter(y=np.arange(500))
148+
assert not isinstance(fig, AbstractFigureAggregator)
149+
assert len(fig.data) == 1
150+
assert len(fig.data[0].y) == 500
151+
152+
153+
def test_compasibility_when_registered(registering_cleanup):
154+
fr = FigureResampler
155+
fwr = FigureWidgetResampler
156+
157+
fig_orig_1 = px.scatter(y=np.arange(1_005))
158+
fig_orig_2 = go.FigureWidget({"type": "scatter", "y": np.arange(1_005)})
159+
for fig in [fig_orig_1, fig_orig_2]:
160+
fig1 = fr(fig)
161+
fig2 = fr(fwr(fig))
162+
fig3 = fr(fr(fr(fr(fwr(fwr(fr(fwr(fr(fig)))))))))
163+
for f in [fig1, fig2, fig3]:
164+
assert isinstance(f, FigureResampler)
165+
assert len(f.data) == 1
166+
assert len(f.data[0].y) == 1000
167+
assert len(f.hf_data) == 1
168+
assert len(f.hf_data[0]["y"]) == 1005
169+
170+
fig1 = fwr(fig)
171+
fig2 = fwr(fr(fig))
172+
fig3 = fwr(fwr(fwr(fwr(fr(fr(fwr(fr(fwr(fig)))))))))
173+
for f in [fig1, fig2, fig3]:
174+
assert isinstance(f, FigureWidgetResampler)
175+
assert len(f.data) == 1
176+
assert len(f.data[0].y) == 1000
177+
assert len(f.hf_data) == 1
178+
assert len(f.hf_data[0]["y"]) == 1005
179+
180+
register_plotly_resampler()
181+
182+
fig_orig_1 = px.scatter(y=np.arange(1_005))
183+
fig_orig_2 = go.FigureWidget({"type": "scatter", "y": np.arange(1_005)})
184+
for fig in [fig_orig_1, fig_orig_2]:
185+
fig1 = fr(fig)
186+
fig2 = fr(fwr(fig))
187+
fig3 = fr(fr(fr(fr(fwr(fwr(fr(fwr(fr(fig)))))))))
188+
for f in [fig1, fig2, fig3]:
189+
assert isinstance(f, FigureResampler)
190+
assert len(f.data) == 1
191+
assert len(f.data[0].y) == 1000
192+
assert len(f.hf_data) == 1
193+
assert len(f.hf_data[0]["y"]) == 1005
194+
195+
fig1 = fwr(fig)
196+
fig2 = fwr(fr(fig))
197+
fig3 = fwr(fwr(fwr(fwr(fr(fr(fwr(fr(fwr(fig)))))))))
198+
for f in [fig1, fig2, fig3]:
199+
assert isinstance(f, FigureWidgetResampler)
200+
assert len(f.data) == 1
201+
assert len(f.data[0].y) == 1000
202+
assert len(f.hf_data) == 1
203+
assert len(f.hf_data[0]["y"]) == 1005
204+

0 commit comments

Comments
 (0)