Benjamin Greiner
b22a92f46d
* Updated Plotly.js from version 2.35.0 to version 3.0.0-rc.0. See the plotly.js CHANGELOG for more information. - Release 5.24.0 ## Added * New px functions for maps: scatter_map, line_map, choropleth_map, and density_map. ## Updated * Updated Plotly.js from version 2.34.0 to version 2.35.0. See the plotly.js CHANGELOG for more information. These changes are reflected in the auto-generated plotly.graph_objects module. Notable changes include: - Add new traces: scattermap, choroplethmap and densitymap and map subplots which use maplibre to render maps [#7015, #7060, #7085, #7088, #7090, #7092, #7094, #7134] - Deprecate mapbox traces and mapbox subplot [#7087] * Fixed a bug in integer validation of arrays that threw an error when an array contained a mix of strings and integers. * Fixed a bug in JupyterLab >= 4 and Jupyter Notebook >= 7 that caused latex to not render in plotly charts. * Use modern native ES6 import to load plotly.js bundle instead of requirejs which is no longer under active development - Release 5.23.0 ## Updated * Updated Plotly.js from version 2.32.0 to version 2.34.0. See the plotly.js CHANGELOG for more information. These changes are reflected in the auto-generated plotly.graph_objects module. Notable changes include: - Add subtitle attribute to layout.title to enable adding subtitles to plots [#7012] OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:numeric/python-plotly?expand=0&rev=70
567 lines
22 KiB
Diff
567 lines
22 KiB
Diff
From 99df182e9171e9b9e81811447f37ace05acc9272 Mon Sep 17 00:00:00 2001
|
|
From: Ben Greiner <code@bnavigator.de>
|
|
Date: Sun, 2 Jun 2024 16:43:06 +0200
|
|
Subject: [PATCH 01/14] Remove np.nan and np.inf aliases no longer present in
|
|
numpy2
|
|
|
|
diff --git a/packages/python/plotly/_plotly_utils/tests/validators/test_any_validator.py b/packages/python/plotly/_plotly_utils/tests/validators/test_any_validator.py
|
|
index 0d1083c7ee..57ff05f218 100644
|
|
--- a/packages/python/plotly/_plotly_utils/tests/validators/test_any_validator.py
|
|
+++ b/packages/python/plotly/_plotly_utils/tests/validators/test_any_validator.py
|
|
@@ -1,6 +1,7 @@
|
|
import pytest
|
|
from _plotly_utils.basevalidators import AnyValidator
|
|
import numpy as np
|
|
+from plotly.tests.test_optional.test_utils.test_utils import np_nan, np_inf
|
|
|
|
|
|
# Fixtures
|
|
@@ -18,7 +19,7 @@ def validator_aok():
|
|
# Tests
|
|
# -----
|
|
# ### Acceptance ###
|
|
-@pytest.mark.parametrize("val", [set(), "Hello", 123, np.inf, np.nan, {}])
|
|
+@pytest.mark.parametrize("val", [set(), "Hello", 123, np_inf(), np_nan(), {}])
|
|
def test_acceptance(val, validator):
|
|
assert validator.validate_coerce(val) is val
|
|
|
|
diff --git a/packages/python/plotly/_plotly_utils/tests/validators/test_boolean_validator.py b/packages/python/plotly/_plotly_utils/tests/validators/test_boolean_validator.py
|
|
index ec4b7c3197..bc714d9f8d 100644
|
|
--- a/packages/python/plotly/_plotly_utils/tests/validators/test_boolean_validator.py
|
|
+++ b/packages/python/plotly/_plotly_utils/tests/validators/test_boolean_validator.py
|
|
@@ -1,7 +1,6 @@
|
|
import pytest
|
|
from _plotly_utils.basevalidators import BooleanValidator
|
|
-import numpy as np
|
|
-
|
|
+from plotly.tests.test_optional.test_utils.test_utils import np_nan
|
|
|
|
# Boolean Validator
|
|
# =================
|
|
@@ -18,7 +17,7 @@ def test_acceptance(val, validator):
|
|
|
|
|
|
# ### Rejection ###
|
|
-@pytest.mark.parametrize("val", [1.0, 0.0, "True", "False", [], 0, np.nan])
|
|
+@pytest.mark.parametrize("val", [1.0, 0.0, "True", "False", [], 0, np_nan()])
|
|
def test_rejection(val, validator):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
validator.validate_coerce(val)
|
|
diff --git a/packages/python/plotly/_plotly_utils/tests/validators/test_enumerated_validator.py b/packages/python/plotly/_plotly_utils/tests/validators/test_enumerated_validator.py
|
|
index f5eff75401..5090610384 100644
|
|
--- a/packages/python/plotly/_plotly_utils/tests/validators/test_enumerated_validator.py
|
|
+++ b/packages/python/plotly/_plotly_utils/tests/validators/test_enumerated_validator.py
|
|
@@ -2,7 +2,7 @@
|
|
import numpy as np
|
|
import pandas as pd
|
|
from _plotly_utils.basevalidators import EnumeratedValidator
|
|
-
|
|
+from plotly.tests.test_optional.test_utils.test_utils import np_inf
|
|
|
|
# Fixtures
|
|
# --------
|
|
@@ -42,7 +42,7 @@ def test_acceptance(val, validator):
|
|
# ### Value Rejection ###
|
|
@pytest.mark.parametrize(
|
|
"val",
|
|
- [True, 0, 1, 23, np.inf, set(), ["first", "second"], [True], ["third", 4], [4]],
|
|
+ [True, 0, 1, 23, np_inf(), set(), ["first", "second"], [True], ["third", 4], [4]],
|
|
)
|
|
def test_rejection_by_value(val, validator):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
@@ -95,7 +95,7 @@ def test_acceptance_aok(val, validator_aok):
|
|
|
|
|
|
# ### Rejection by value ###
|
|
-@pytest.mark.parametrize("val", [True, 0, 1, 23, np.inf, set()])
|
|
+@pytest.mark.parametrize("val", [True, 0, 1, 23, np_inf(), set()])
|
|
def test_rejection_by_value_aok(val, validator_aok):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
validator_aok.validate_coerce(val)
|
|
@@ -105,7 +105,7 @@ def test_rejection_by_value_aok(val, validator_aok):
|
|
|
|
# ### Reject by elements ###
|
|
@pytest.mark.parametrize(
|
|
- "val", [[True], [0], [1, 23], [np.inf, set()], ["ffirstt", "second", "third"]]
|
|
+ "val", [[True], [0], [1, 23], [np_inf(), set()], ["ffirstt", "second", "third"]]
|
|
)
|
|
def test_rejection_by_element_aok(val, validator_aok):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
diff --git a/packages/python/plotly/_plotly_utils/tests/validators/test_integer_validator.py b/packages/python/plotly/_plotly_utils/tests/validators/test_integer_validator.py
|
|
index 9a01fde7e4..446e949545 100644
|
|
--- a/packages/python/plotly/_plotly_utils/tests/validators/test_integer_validator.py
|
|
+++ b/packages/python/plotly/_plotly_utils/tests/validators/test_integer_validator.py
|
|
@@ -5,7 +5,7 @@
|
|
from _plotly_utils.basevalidators import IntegerValidator
|
|
import numpy as np
|
|
import pandas as pd
|
|
-
|
|
+from plotly.tests.test_optional.test_utils.test_utils import np_nan, np_inf
|
|
|
|
# ### Fixtures ###
|
|
@pytest.fixture()
|
|
@@ -53,7 +53,7 @@ def test_acceptance(val, validator):
|
|
|
|
# ### Rejection by value ###
|
|
@pytest.mark.parametrize(
|
|
- "val", ["hello", (), [], [1, 2, 3], set(), "34", np.nan, np.inf, -np.inf]
|
|
+ "val", ["hello", (), [], [1, 2, 3], set(), "34", np_nan(), np_inf(), -np_inf()]
|
|
)
|
|
def test_rejection_by_value(val, validator):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
diff --git a/packages/python/plotly/_plotly_utils/tests/validators/test_number_validator.py b/packages/python/plotly/_plotly_utils/tests/validators/test_number_validator.py
|
|
index 7fd9e6657c..847f02619a 100644
|
|
--- a/packages/python/plotly/_plotly_utils/tests/validators/test_number_validator.py
|
|
+++ b/packages/python/plotly/_plotly_utils/tests/validators/test_number_validator.py
|
|
@@ -4,6 +4,7 @@
|
|
from _plotly_utils.basevalidators import NumberValidator
|
|
import numpy as np
|
|
import pandas as pd
|
|
+from plotly.tests.test_optional.test_utils.test_utils import np_nan, np_inf
|
|
|
|
# Fixtures
|
|
# --------
|
|
@@ -36,7 +37,7 @@ def validator_aok():
|
|
# ------------
|
|
# ### Acceptance ###
|
|
@pytest.mark.parametrize(
|
|
- "val", [1.0, 0.0, 1, -1234.5678, 54321, np.pi, np.nan, np.inf, -np.inf]
|
|
+ "val", [1.0, 0.0, 1, -1234.5678, 54321, np.pi, np_nan(), np_inf(), -np_inf()]
|
|
)
|
|
def test_acceptance(val, validator):
|
|
assert validator.validate_coerce(val) == approx(val, nan_ok=True)
|
|
@@ -57,7 +58,7 @@ def test_acceptance_min_max(val, validator_min_max):
|
|
assert validator_min_max.validate_coerce(val) == approx(val)
|
|
|
|
|
|
-@pytest.mark.parametrize("val", [-1.01, -10, 2.1, 234, -np.inf, np.nan, np.inf])
|
|
+@pytest.mark.parametrize("val", [-1.01, -10, 2.1, 234, -np_inf(), np_nan(), np_inf()])
|
|
def test_rejection_min_max(val, validator_min_max):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
validator_min_max.validate_coerce(val)
|
|
@@ -66,12 +67,12 @@ def test_rejection_min_max(val, validator_min_max):
|
|
|
|
|
|
# ### With min only ###
|
|
-@pytest.mark.parametrize("val", [0, 0.0, -0.5, 99999, np.inf])
|
|
+@pytest.mark.parametrize("val", [0, 0.0, -0.5, 99999, np_inf()])
|
|
def test_acceptance_min(val, validator_min):
|
|
assert validator_min.validate_coerce(val) == approx(val)
|
|
|
|
|
|
-@pytest.mark.parametrize("val", [-1.01, -np.inf, np.nan])
|
|
+@pytest.mark.parametrize("val", [-1.01, -np_inf(), np_nan()])
|
|
def test_rejection_min(val, validator_min):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
validator_min.validate_coerce(val)
|
|
@@ -80,12 +81,12 @@ def test_rejection_min(val, validator_min):
|
|
|
|
|
|
# ### With max only ###
|
|
-@pytest.mark.parametrize("val", [0, 0.0, -np.inf, -123456, np.pi / 2])
|
|
+@pytest.mark.parametrize("val", [0, 0.0, -np_inf(), -123456, np.pi / 2])
|
|
def test_acceptance_max(val, validator_max):
|
|
assert validator_max.validate_coerce(val) == approx(val)
|
|
|
|
|
|
-@pytest.mark.parametrize("val", [2.01, np.inf, np.nan])
|
|
+@pytest.mark.parametrize("val", [2.01, np_inf(), np_nan()])
|
|
def test_rejection_max(val, validator_max):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
validator_max.validate_coerce(val)
|
|
@@ -142,7 +143,13 @@ def test_rejection_aok(val, validator_aok):
|
|
# ### Rejection by element ###
|
|
@pytest.mark.parametrize(
|
|
"val",
|
|
- [[-1.6, 0.0], [1, 1.5, 2], [-0.1234, 0.41, np.nan], [0, np.inf], [0, -np.inf]],
|
|
+ [
|
|
+ [-1.6, 0.0],
|
|
+ [1, 1.5, 2],
|
|
+ [-0.1234, 0.41, np_nan()],
|
|
+ [0, np_inf()],
|
|
+ [0, -np_inf()],
|
|
+ ],
|
|
)
|
|
def test_rejection_aok_min_max(val, validator_aok):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
diff --git a/packages/python/plotly/_plotly_utils/tests/validators/test_string_validator.py b/packages/python/plotly/_plotly_utils/tests/validators/test_string_validator.py
|
|
index 380c5bccec..f9f96f4f79 100644
|
|
--- a/packages/python/plotly/_plotly_utils/tests/validators/test_string_validator.py
|
|
+++ b/packages/python/plotly/_plotly_utils/tests/validators/test_string_validator.py
|
|
@@ -2,6 +2,7 @@
|
|
|
|
from _plotly_utils.basevalidators import StringValidator
|
|
import numpy as np
|
|
+from plotly.tests.test_optional.test_utils.test_utils import np_nan
|
|
|
|
|
|
# Fixtures
|
|
@@ -53,7 +54,7 @@ def validator_no_blanks_aok():
|
|
# Not strict
|
|
# ### Acceptance ###
|
|
@pytest.mark.parametrize(
|
|
- "val", ["bar", 234, np.nan, "HELLO!!!", "world!@#$%^&*()", "", "\u03BC"]
|
|
+ "val", ["bar", 234, np_nan(), "HELLO!!!", "world!@#$%^&*()", "", "\u03BC"]
|
|
)
|
|
def test_acceptance(val, validator):
|
|
expected = str(val) if not isinstance(val, str) else val
|
|
@@ -108,7 +109,7 @@ def test_acceptance_strict(val, validator_strict):
|
|
|
|
|
|
# ### Rejection by value ###
|
|
-@pytest.mark.parametrize("val", [(), [], [1, 2, 3], set(), np.nan, np.pi, 23])
|
|
+@pytest.mark.parametrize("val", [(), [], [1, 2, 3], set(), np_nan(), np.pi, 23])
|
|
def test_rejection_strict(val, validator_strict):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
validator_strict.validate_coerce(val)
|
|
diff --git a/packages/python/plotly/_plotly_utils/tests/validators/test_subplotid_validator.py b/packages/python/plotly/_plotly_utils/tests/validators/test_subplotid_validator.py
|
|
index d4f7a84974..39b3c96f04 100644
|
|
--- a/packages/python/plotly/_plotly_utils/tests/validators/test_subplotid_validator.py
|
|
+++ b/packages/python/plotly/_plotly_utils/tests/validators/test_subplotid_validator.py
|
|
@@ -1,6 +1,6 @@
|
|
import pytest
|
|
from _plotly_utils.basevalidators import SubplotidValidator
|
|
-import numpy as np
|
|
+from plotly.tests.test_optional.test_utils.test_utils import np_nan, np_inf
|
|
|
|
|
|
# Fixtures
|
|
@@ -19,7 +19,7 @@ def test_acceptance(val, validator):
|
|
|
|
|
|
# ### Rejection by type ###
|
|
-@pytest.mark.parametrize("val", [23, [], {}, set(), np.inf, np.nan])
|
|
+@pytest.mark.parametrize("val", [23, [], {}, set(), np_inf(), np_nan()])
|
|
def test_rejection_type(val, validator):
|
|
with pytest.raises(ValueError) as validation_failure:
|
|
validator.validate_coerce(val)
|
|
diff --git a/packages/python/plotly/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py b/packages/python/plotly/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py
|
|
index 20a1b23f7f..52c16bf09c 100644
|
|
--- a/packages/python/plotly/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py
|
|
+++ b/packages/python/plotly/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py
|
|
@@ -6,6 +6,7 @@
|
|
|
|
import plotly.figure_factory as ff
|
|
from plotly.tests.test_optional.optional_utils import NumpyTestUtilsMixin
|
|
+from plotly.tests.test_optional.test_utils.test_utils import np_nan, np_inf
|
|
|
|
import numpy as np
|
|
from plotly.tests.utils import TestCaseNoTemplate
|
|
@@ -975,10 +976,10 @@ def test_default_dendrogram(self):
|
|
],
|
|
layout=go.Layout(
|
|
autosize=False,
|
|
- height=np.inf,
|
|
+ height=np_inf(),
|
|
hovermode="closest",
|
|
showlegend=False,
|
|
- width=np.inf,
|
|
+ width=np_inf(),
|
|
xaxis=go.layout.XAxis(
|
|
mirror="allticks",
|
|
rangemode="tozero",
|
|
@@ -1062,10 +1063,10 @@ def test_dendrogram_random_matrix(self):
|
|
],
|
|
layout=go.Layout(
|
|
autosize=False,
|
|
- height=np.inf,
|
|
+ height=np_inf(),
|
|
hovermode="closest",
|
|
showlegend=False,
|
|
- width=np.inf,
|
|
+ width=np_inf(),
|
|
xaxis=go.layout.XAxis(
|
|
mirror="allticks",
|
|
rangemode="tozero",
|
|
@@ -1217,10 +1218,10 @@ def test_dendrogram_colorscale(self):
|
|
],
|
|
layout=go.Layout(
|
|
autosize=False,
|
|
- height=np.inf,
|
|
+ height=np_inf(),
|
|
hovermode="closest",
|
|
showlegend=False,
|
|
- width=np.inf,
|
|
+ width=np_inf(),
|
|
xaxis=go.layout.XAxis(
|
|
mirror="allticks",
|
|
rangemode="tozero",
|
|
@@ -4118,25 +4119,25 @@ def test_full_choropleth(self):
|
|
-88.02432999999999,
|
|
-88.04504299999999,
|
|
-88.053375,
|
|
- np.nan,
|
|
+ np_nan(),
|
|
-88.211209,
|
|
-88.209999,
|
|
-88.208733,
|
|
-88.209559,
|
|
-88.211209,
|
|
- np.nan,
|
|
+ np_nan(),
|
|
-88.22511999999999,
|
|
-88.22128099999999,
|
|
-88.218694,
|
|
-88.22465299999999,
|
|
-88.22511999999999,
|
|
- np.nan,
|
|
+ np_nan(),
|
|
-88.264659,
|
|
-88.25782699999999,
|
|
-88.25947,
|
|
-88.255659,
|
|
-88.264659,
|
|
- np.nan,
|
|
+ np_nan(),
|
|
-88.327302,
|
|
-88.20146799999999,
|
|
-88.141143,
|
|
@@ -4146,13 +4147,13 @@ def test_full_choropleth(self):
|
|
-88.10665399999999,
|
|
-88.149812,
|
|
-88.327302,
|
|
- np.nan,
|
|
+ np_nan(),
|
|
-88.346745,
|
|
-88.341235,
|
|
-88.33288999999999,
|
|
-88.346823,
|
|
-88.346745,
|
|
- np.nan,
|
|
+ np_nan(),
|
|
-88.473227,
|
|
-88.097888,
|
|
-88.154617,
|
|
diff --git a/packages/python/plotly/plotly/tests/test_optional/test_px/test_imshow.py b/packages/python/plotly/plotly/tests/test_optional/test_px/test_imshow.py
|
|
index c2e863c846..f06b91bca0 100644
|
|
--- a/packages/python/plotly/plotly/tests/test_optional/test_px/test_imshow.py
|
|
+++ b/packages/python/plotly/plotly/tests/test_optional/test_px/test_imshow.py
|
|
@@ -7,6 +7,7 @@
|
|
import base64
|
|
import datetime
|
|
from plotly.express.imshow_utils import rescale_intensity
|
|
+from plotly.tests.test_optional.test_utils.test_utils import np_nan
|
|
|
|
img_rgb = np.array([[[255, 0, 0], [0, 255, 0], [0, 0, 255]]], dtype=np.uint8)
|
|
img_gray = np.arange(100, dtype=float).reshape((10, 10))
|
|
@@ -111,7 +112,7 @@ def test_nan_inf_data(binary_string):
|
|
zmaxs = [1, 255]
|
|
for zmax, img in zip(zmaxs, imgs):
|
|
img[0] = 0
|
|
- img[10:12] = np.nan
|
|
+ img[10:12] = np_nan()
|
|
# the case of 2d/heatmap is handled gracefully by the JS trace but I don't know how to check it
|
|
fig = px.imshow(
|
|
np.dstack((img,) * 3),
|
|
@@ -341,7 +342,7 @@ def test_imshow_source_dtype_zmax(dtype, contrast_rescaling):
|
|
assert (
|
|
np.abs(
|
|
np.max(decode_image_string(fig.data[0].source))
|
|
- - 255 * img.max() / np.iinfo(dtype).max
|
|
+ - np.int64(255) * img.max() / np.iinfo(dtype).max
|
|
)
|
|
< 1
|
|
)
|
|
diff --git a/packages/python/plotly/plotly/tests/test_optional/test_px/test_trendline.py b/packages/python/plotly/plotly/tests/test_optional/test_px/test_trendline.py
|
|
index 66046981ef..12e7f4b503 100644
|
|
--- a/packages/python/plotly/plotly/tests/test_optional/test_px/test_trendline.py
|
|
+++ b/packages/python/plotly/plotly/tests/test_optional/test_px/test_trendline.py
|
|
@@ -3,6 +3,7 @@
|
|
import pandas as pd
|
|
import pytest
|
|
from datetime import datetime
|
|
+from plotly.tests.test_optional.test_utils.test_utils import np_nan
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
@@ -65,7 +66,7 @@ def test_trendline_enough_values(mode, options):
|
|
assert len(fig.data) == 2
|
|
assert fig.data[1].x is None
|
|
fig = px.scatter(
|
|
- x=[0, 1], y=np.array([0, np.nan]), trendline=mode, trendline_options=options
|
|
+ x=[0, 1], y=np.array([0, np_nan()]), trendline=mode, trendline_options=options
|
|
)
|
|
assert len(fig.data) == 2
|
|
assert fig.data[1].x is None
|
|
@@ -75,8 +76,8 @@ def test_trendline_enough_values(mode, options):
|
|
assert len(fig.data) == 2
|
|
assert fig.data[1].x is None
|
|
fig = px.scatter(
|
|
- x=np.array([0, 1, np.nan]),
|
|
- y=np.array([0, np.nan, 1]),
|
|
+ x=np.array([0, 1, np_nan()]),
|
|
+ y=np.array([0, np_nan(), 1]),
|
|
trendline=mode,
|
|
trendline_options=options,
|
|
)
|
|
@@ -88,8 +89,8 @@ def test_trendline_enough_values(mode, options):
|
|
assert len(fig.data) == 2
|
|
assert len(fig.data[1].x) == 2
|
|
fig = px.scatter(
|
|
- x=np.array([0, 1, np.nan, 2]),
|
|
- y=np.array([1, np.nan, 1, 2]),
|
|
+ x=np.array([0, 1, np_nan(), 2]),
|
|
+ y=np.array([1, np_nan(), 1, 2]),
|
|
trendline=mode,
|
|
trendline_options=options,
|
|
)
|
|
@@ -112,7 +113,7 @@ def test_trendline_enough_values(mode, options):
|
|
def test_trendline_nan_values(mode, options):
|
|
df = px.data.gapminder().query("continent == 'Oceania'")
|
|
start_date = 1970
|
|
- df["pop"][df["year"] < start_date] = np.nan
|
|
+ df["pop"][df["year"] < start_date] = np_nan()
|
|
fig = px.scatter(
|
|
df,
|
|
x="year",
|
|
diff --git a/packages/python/plotly/plotly/tests/test_optional/test_utils/test_utils.py b/packages/python/plotly/plotly/tests/test_optional/test_utils/test_utils.py
|
|
index 9fa1896640..33284452b7 100644
|
|
--- a/packages/python/plotly/plotly/tests/test_optional/test_utils/test_utils.py
|
|
+++ b/packages/python/plotly/plotly/tests/test_optional/test_utils/test_utils.py
|
|
@@ -9,6 +9,7 @@
|
|
from unittest import TestCase
|
|
from time import time
|
|
import pytest
|
|
+from packaging.version import Version
|
|
|
|
import numpy as np
|
|
import pandas as pd
|
|
@@ -31,10 +32,56 @@
|
|
import matplotlib.pyplot as plt
|
|
from plotly.matplotlylib import Exporter, PlotlyRenderer
|
|
|
|
+ @pytest.mark.matplotlib
|
|
+ def test_masked_constants_example():
|
|
+ try:
|
|
+ pd.options.plotting.backend = "matplotlib"
|
|
+ except Exception:
|
|
+ pass
|
|
+
|
|
+ # example from: https://gist.github.com/tschaume/d123d56bf586276adb98
|
|
+ data = {
|
|
+ "esN": [0, 1, 2, 3],
|
|
+ "ewe_is0": [-398.11901997, -398.11902774, -398.11897111, -398.11882215],
|
|
+ "ewe_is1": [-398.11793027, -398.11792966, -398.11786308, None],
|
|
+ "ewe_is2": [-398.11397008, -398.11396421, None, None],
|
|
+ }
|
|
+ df = pd.DataFrame.from_dict(data)
|
|
+
|
|
+ plotopts = {"x": "esN"}
|
|
+ fig, ax = plt.subplots(1, 1)
|
|
+ df.plot(ax=ax, **plotopts)
|
|
+
|
|
+ renderer = PlotlyRenderer()
|
|
+ Exporter(renderer).run(fig)
|
|
+
|
|
+ _json.dumps(renderer.plotly_fig, cls=utils.PlotlyJSONEncoder)
|
|
+
|
|
+ jy = _json.dumps(
|
|
+ renderer.plotly_fig["data"][1]["y"], cls=utils.PlotlyJSONEncoder
|
|
+ )
|
|
+ print(jy)
|
|
+ array = _json.loads(jy)
|
|
+ assert array == [-398.11793027, -398.11792966, -398.11786308, None]
|
|
+
|
|
+
|
|
+def np_nan():
|
|
+ if Version(np.__version__) < Version("2.0.0"):
|
|
+ return np.NaN
|
|
+ else:
|
|
+ return np.nan
|
|
+
|
|
+
|
|
+def np_inf():
|
|
+ if Version(np.__version__) < Version("2.0.0"):
|
|
+ return np.Inf
|
|
+ else:
|
|
+ return np.inf
|
|
+
|
|
|
|
## JSON encoding
|
|
numeric_list = [1, 2, 3]
|
|
-np_list = np.array([1, 2, 3, np.NaN, np.NAN, np.Inf, dt(2014, 1, 5)])
|
|
+np_list = np.array([1, 2, 3, np_nan(), np_inf(), dt(2014, 1, 5)])
|
|
mixed_list = [
|
|
1,
|
|
"A",
|
|
@@ -45,7 +92,7 @@
|
|
dt_list = [dt(2014, 1, 5), dt(2014, 1, 5, 1, 1, 1), dt(2014, 1, 5, 1, 1, 1, 1)]
|
|
|
|
df = pd.DataFrame(
|
|
- columns=["col 1"], data=[1, 2, 3, dt(2014, 1, 5), pd.NaT, np.NaN, np.Inf]
|
|
+ columns=["col 1"], data=[1, 2, 3, dt(2014, 1, 5), pd.NaT, np_nan(), np_inf()]
|
|
)
|
|
|
|
rng = pd.date_range("1/1/2011", periods=2, freq="H")
|
|
@@ -184,7 +231,7 @@ def test_figure_json_encoding(self):
|
|
|
|
assert (
|
|
js1 == '{"type": "scatter3d", "x": [1, 2, 3], '
|
|
- '"y": [1, 2, 3, null, null, null, "2014-01-05T00:00:00"], '
|
|
+ '"y": [1, 2, 3, null, null, "2014-01-05T00:00:00"], '
|
|
'"z": [1, "A", "2014-01-05T00:00:00", '
|
|
'"2014-01-05T01:01:01", "2014-01-05T01:01:01.000001"]}'
|
|
)
|
|
@@ -195,9 +242,9 @@ def test_figure_json_encoding(self):
|
|
_json.dumps(figure, cls=utils.PlotlyJSONEncoder, sort_keys=True)
|
|
|
|
# Test data wasn't mutated
|
|
- np_array = np.array([1, 2, 3, np.NaN, np.NAN, np.Inf, dt(2014, 1, 5)])
|
|
+ np_array = np.array([1, 2, 3, np_nan(), np_inf(), dt(2014, 1, 5)])
|
|
for k in range(len(np_array)):
|
|
- if k in [3, 4]:
|
|
+ if k == 3:
|
|
# check NaN
|
|
assert np.isnan(np_list[k]) and np.isnan(np_array[k])
|
|
else:
|
|
@@ -237,7 +284,9 @@ def test_pandas_json_encoding(self):
|
|
# Test that data wasn't mutated
|
|
assert_series_equal(
|
|
df["col 1"],
|
|
- pd.Series([1, 2, 3, dt(2014, 1, 5), pd.NaT, np.NaN, np.Inf], name="col 1"),
|
|
+ pd.Series(
|
|
+ [1, 2, 3, dt(2014, 1, 5), pd.NaT, np_nan(), np_inf()], name="col 1"
|
|
+ ),
|
|
)
|
|
|
|
j2 = _json.dumps(df.index, cls=utils.PlotlyJSONEncoder)
|
|
@@ -414,38 +463,3 @@ def test_no_numpy_int_type(self):
|
|
expected_tuple = (int,)
|
|
|
|
self.assertEqual(int_type_tuple, expected_tuple)
|
|
-
|
|
-
|
|
-if matplotlylib:
|
|
-
|
|
- @pytest.mark.matplotlib
|
|
- def test_masked_constants_example():
|
|
- try:
|
|
- pd.options.plotting.backend = "matplotlib"
|
|
- except Exception:
|
|
- pass
|
|
-
|
|
- # example from: https://gist.github.com/tschaume/d123d56bf586276adb98
|
|
- data = {
|
|
- "esN": [0, 1, 2, 3],
|
|
- "ewe_is0": [-398.11901997, -398.11902774, -398.11897111, -398.11882215],
|
|
- "ewe_is1": [-398.11793027, -398.11792966, -398.11786308, None],
|
|
- "ewe_is2": [-398.11397008, -398.11396421, None, None],
|
|
- }
|
|
- df = pd.DataFrame.from_dict(data)
|
|
-
|
|
- plotopts = {"x": "esN"}
|
|
- fig, ax = plt.subplots(1, 1)
|
|
- df.plot(ax=ax, **plotopts)
|
|
-
|
|
- renderer = PlotlyRenderer()
|
|
- Exporter(renderer).run(fig)
|
|
-
|
|
- _json.dumps(renderer.plotly_fig, cls=utils.PlotlyJSONEncoder)
|
|
-
|
|
- jy = _json.dumps(
|
|
- renderer.plotly_fig["data"][1]["y"], cls=utils.PlotlyJSONEncoder
|
|
- )
|
|
- print(jy)
|
|
- array = _json.loads(jy)
|
|
- assert array == [-398.11793027, -398.11792966, -398.11786308, None]
|