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