Accepting request 951994 from devel:languages:python:numeric
- Update to version 0.5.7: Unfortunately, I am not able to find a changelog anywhere, so this is just edited list of commit messages: - Bump to 0.5.2, attempt to fix docs, fix very deprecated pandas and nu… - Add an option to not include JS libraries in HTML. - Update package.json with new version - Treat browserify as default, update require mechanism - Fix outdated dependency and update RELEASING.md - Clean up test_ticklabels.py - Remove test_tickformat_index as it has been replaced by FuncFormatter… - Update documentation code to work with Python 3 - Update long_description_content_type - Add remove-nose.patch to remove completely unnecessary nose dependency (gh#mpld3/mpld3#505). OBS-URL: https://build.opensuse.org/request/show/951994 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-mpld3?expand=0&rev=2
This commit is contained in:
commit
00961b741c
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:1be25e908eb2abea89169b1c532f0d628dba4fc41d5886a24c96f1a3971310b4
|
|
||||||
size 888659
|
|
3
mpld3-0.5.7.tar.gz
Normal file
3
mpld3-0.5.7.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c589db8b661aee25c93e198e2e18ed47b9a96951de41d96241345acec5f819ab
|
||||||
|
size 2325789
|
@ -1,3 +1,23 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 7 01:54:44 UTC 2022 - Matej Cepl <mcepl@suse.com>
|
||||||
|
|
||||||
|
- Update to version 0.5.7:
|
||||||
|
Unfortunately, I am not able to find a changelog anywhere, so
|
||||||
|
this is just edited list of commit messages:
|
||||||
|
- Bump to 0.5.2, attempt to fix docs, fix very deprecated
|
||||||
|
pandas and nu…
|
||||||
|
- Add an option to not include JS libraries in HTML.
|
||||||
|
- Update package.json with new version
|
||||||
|
- Treat browserify as default, update require mechanism
|
||||||
|
- Fix outdated dependency and update RELEASING.md
|
||||||
|
- Clean up test_ticklabels.py
|
||||||
|
- Remove test_tickformat_index as it has been replaced by
|
||||||
|
FuncFormatter…
|
||||||
|
- Update documentation code to work with Python 3
|
||||||
|
- Update long_description_content_type
|
||||||
|
- Add remove-nose.patch to remove completely unnecessary nose
|
||||||
|
dependency (gh#mpld3/mpld3#505).
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Apr 21 10:00:34 UTC 2021 - Atri Bhattacharya <badshah400@gmail.com>
|
Wed Apr 21 10:00:34 UTC 2021 - Atri Bhattacharya <badshah400@gmail.com>
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package python-mpld3
|
# spec file for package python-mpld3
|
||||||
#
|
#
|
||||||
# Copyright (c) 2020 SUSE LLC
|
# Copyright (c) 2022 SUSE LLC
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -20,17 +20,21 @@
|
|||||||
%define skip_python36 1
|
%define skip_python36 1
|
||||||
%define modname mpld3
|
%define modname mpld3
|
||||||
# Tests are not designed to be non-interactively run, see README.md
|
# Tests are not designed to be non-interactively run, see README.md
|
||||||
%bcond_with test
|
%bcond_without test
|
||||||
Name: python-mpld3
|
Name: python-mpld3
|
||||||
Version: 0.5.2
|
Version: 0.5.7
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: D3 Viewer for Matplotlib
|
Summary: D3 Viewer for Matplotlib
|
||||||
License: BSD-3-Clause
|
License: BSD-3-Clause
|
||||||
Group: Development/Languages/Python
|
Group: Development/Languages/Python
|
||||||
URL: https://mpld3.github.com
|
URL: https://mpld3.github.com
|
||||||
Source: https://files.pythonhosted.org/packages/source/m/mpld3/%{modname}-%{version}.tar.gz
|
Source0: https://files.pythonhosted.org/packages/source/m/mpld3/%{modname}-%{version}.tar.gz
|
||||||
|
# Originally from https://raw.githubusercontent.com/mpld3/mpld3/master/visualize_tests.py
|
||||||
|
Source1: visualize_tests.py
|
||||||
|
# PATCH-FIX-UPSTREAM remove-nose.patch gh#mpld3/mpld3#505 mcepl@suse.com
|
||||||
|
# there are just few SkipTests which need to be imported from stdlib
|
||||||
|
Patch0: remove-nose.patch
|
||||||
BuildRequires: %{python_module Jinja2 >= 2.7}
|
BuildRequires: %{python_module Jinja2 >= 2.7}
|
||||||
BuildRequires: %{python_module devel}
|
|
||||||
BuildRequires: %{python_module matplotlib >= 2.2}
|
BuildRequires: %{python_module matplotlib >= 2.2}
|
||||||
BuildRequires: %{python_module pandas}
|
BuildRequires: %{python_module pandas}
|
||||||
BuildRequires: %{python_module setuptools}
|
BuildRequires: %{python_module setuptools}
|
||||||
@ -43,8 +47,8 @@ Recommends: jupyter-notebook
|
|||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
%if %{with test}
|
%if %{with test}
|
||||||
BuildRequires: %{python_module diffimg}
|
BuildRequires: %{python_module diffimg}
|
||||||
BuildRequires: %{python_module nose}
|
|
||||||
BuildRequires: %{python_module numpy}
|
BuildRequires: %{python_module numpy}
|
||||||
|
BuildRequires: %{python_module pytest}
|
||||||
%endif
|
%endif
|
||||||
%python_subpackages
|
%python_subpackages
|
||||||
|
|
||||||
@ -67,7 +71,11 @@ Provides: %{python_module %{name} = %{version}}
|
|||||||
Documentation and examples for %{name}
|
Documentation and examples for %{name}
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n mpld3-%{version}
|
%autosetup -p1 -n mpld3-%{version}
|
||||||
|
|
||||||
|
cp %{SOURCE1} .
|
||||||
|
|
||||||
|
chmod -x examples/*.py
|
||||||
|
|
||||||
# Fix a bunch of inappropriate exec perms
|
# Fix a bunch of inappropriate exec perms
|
||||||
chmod a-x notebooks/*.ipynb \
|
chmod a-x notebooks/*.ipynb \
|
||||||
@ -86,7 +94,8 @@ chmod a-x notebooks/*.ipynb \
|
|||||||
%if %{with test}
|
%if %{with test}
|
||||||
%check
|
%check
|
||||||
export HIDE_PLOTS=True
|
export HIDE_PLOTS=True
|
||||||
%python_expand nosetests-%{$python_bin_suffix} mpld3/tests/*.py
|
# exclusions gh#mpld3/mpld3#505
|
||||||
|
%pytest -k 'not (test_show or test_snapshots)' mpld3/tests/*.py
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%files %{python_files}
|
%files %{python_files}
|
||||||
|
39
remove-nose.patch
Normal file
39
remove-nose.patch
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
mpld3/mplexporter/tests/test_basic.py | 2 +-
|
||||||
|
mpld3/test_plots/test_pandas_timeaxis.py | 2 +-
|
||||||
|
mpld3/tests/test_d3_snapshots.py | 2 +-
|
||||||
|
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/mpld3/mplexporter/tests/test_basic.py
|
||||||
|
+++ b/mpld3/mplexporter/tests/test_basic.py
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
import matplotlib
|
||||||
|
import numpy as np
|
||||||
|
from distutils.version import LooseVersion
|
||||||
|
-from nose.plugins.skip import SkipTest
|
||||||
|
+from unittest import SkipTest
|
||||||
|
from numpy.testing import assert_warns
|
||||||
|
|
||||||
|
from ..exporter import Exporter
|
||||||
|
--- a/mpld3/test_plots/test_pandas_timeaxis.py
|
||||||
|
+++ b/mpld3/test_plots/test_pandas_timeaxis.py
|
||||||
|
@@ -7,7 +7,7 @@ def create_plot():
|
||||||
|
try:
|
||||||
|
import pandas as pd
|
||||||
|
except Exception:
|
||||||
|
- from nose import SkipTest
|
||||||
|
+ from unittest import SkipTest
|
||||||
|
raise SkipTest("pandas not installed")
|
||||||
|
df2_index = pd.date_range(start="2010-01-01", periods=100, freq='D')
|
||||||
|
df2 = pd.DataFrame({'a': range(100)}, index=df2_index)
|
||||||
|
--- a/mpld3/tests/test_d3_snapshots.py
|
||||||
|
+++ b/mpld3/tests/test_d3_snapshots.py
|
||||||
|
@@ -4,7 +4,7 @@ import glob
|
||||||
|
import matplotlib
|
||||||
|
from . import export
|
||||||
|
|
||||||
|
-from nose.plugins.skip import SkipTest
|
||||||
|
+from unittest import SkipTest
|
||||||
|
matplotlib.use('Agg')
|
||||||
|
|
||||||
|
TEST_PLOT_FILES = os.path.join(mpld3.BASE_PATH, 'mpld3/test_plots/*.py')
|
277
visualize_tests.py
Normal file
277
visualize_tests.py
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
"""
|
||||||
|
Visualize Test Plots
|
||||||
|
|
||||||
|
This script will go through all the plots in the ``mpld3/test_plots``
|
||||||
|
directory, and save them as D3js to a single HTML file for inspection.
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import glob
|
||||||
|
import sys
|
||||||
|
import gc
|
||||||
|
import traceback
|
||||||
|
import itertools
|
||||||
|
import json
|
||||||
|
import contextlib
|
||||||
|
|
||||||
|
import matplotlib
|
||||||
|
|
||||||
|
MPLBE = os.environ.get('MPLBE', False)
|
||||||
|
if MPLBE:
|
||||||
|
import matplotlib
|
||||||
|
matplotlib.use(MPLBE)
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
import mpld3
|
||||||
|
from mpld3 import urls
|
||||||
|
from mpld3._display import NumpyEncoder
|
||||||
|
from mpld3.mpld3renderer import MPLD3Renderer
|
||||||
|
from mpld3.mplexporter import Exporter
|
||||||
|
|
||||||
|
plt.rcParams['figure.figsize'] = (6, 4.5)
|
||||||
|
plt.rcParams['savefig.dpi'] = 80
|
||||||
|
|
||||||
|
TEMPLATE = """
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script type="text/javascript" src={d3_url}></script>
|
||||||
|
<script type="text/javascript" src={mpld3_url}></script>
|
||||||
|
<style type="text/css">
|
||||||
|
.left_col {{
|
||||||
|
float: left;
|
||||||
|
width: 50%;
|
||||||
|
}}
|
||||||
|
|
||||||
|
.right_col {{
|
||||||
|
margin-left: 50%;
|
||||||
|
width: 50%;
|
||||||
|
}}
|
||||||
|
|
||||||
|
.fig {{
|
||||||
|
height: 850px;
|
||||||
|
}}
|
||||||
|
|
||||||
|
|
||||||
|
{extra_css}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="wrap">
|
||||||
|
<div class="left_col">
|
||||||
|
{left_col}
|
||||||
|
</div>
|
||||||
|
<div class="right_col">
|
||||||
|
{right_col}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
{js_commands}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
||||||
|
|
||||||
|
MPLD3_TEMPLATE = """
|
||||||
|
<div>{fname}</div><div class="fig" id="fig{figid:03d}"></div>
|
||||||
|
"""
|
||||||
|
|
||||||
|
JS_TEMPLATE = """
|
||||||
|
!function(mpld3){{
|
||||||
|
{extra_js}
|
||||||
|
mpld3.draw_figure("fig{figid:03d}", {figure_json});
|
||||||
|
}}(mpld3);
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def mpld3_noshow():
|
||||||
|
"""context manager to use mpld3 with show() disabled"""
|
||||||
|
import mpld3
|
||||||
|
_show = mpld3.show
|
||||||
|
mpld3.show = lambda *args, **kwargs: None
|
||||||
|
yield mpld3
|
||||||
|
mpld3.show = _show
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def use_dir(dirname=None):
|
||||||
|
"""context manager to temporarily change the working directory"""
|
||||||
|
cwd = os.getcwd()
|
||||||
|
if dirname is None:
|
||||||
|
dirname = cwd
|
||||||
|
os.chdir(dirname)
|
||||||
|
yield
|
||||||
|
os.chdir(cwd)
|
||||||
|
|
||||||
|
|
||||||
|
class ExecFile(object):
|
||||||
|
"""
|
||||||
|
Class to execute plotting files, and extract the mpl and mpld3 figures.
|
||||||
|
"""
|
||||||
|
def __init__(self, filename, execute=True, pngdir='_pngs'):
|
||||||
|
self.filename = filename
|
||||||
|
if execute:
|
||||||
|
self.execute_file()
|
||||||
|
if not os.path.exists(pngdir):
|
||||||
|
os.makedirs(pngdir)
|
||||||
|
basename = os.path.splitext(os.path.basename(filename))[0]
|
||||||
|
self.pngfmt = os.path.join(pngdir, basename + "_{0:2d}.png")
|
||||||
|
|
||||||
|
def execute_file(self):
|
||||||
|
"""
|
||||||
|
Execute the file, catching matplotlib figures
|
||||||
|
"""
|
||||||
|
dirname, fname = os.path.split(self.filename)
|
||||||
|
print('plotting {0}'.format(fname))
|
||||||
|
|
||||||
|
# close any currently open figures
|
||||||
|
plt.close('all')
|
||||||
|
|
||||||
|
# close any currently open figures
|
||||||
|
plt.close('all')
|
||||||
|
|
||||||
|
with mpld3_noshow() as mpld3:
|
||||||
|
with use_dir(dirname):
|
||||||
|
try:
|
||||||
|
# execute file, forcing __name__ == '__main__'
|
||||||
|
exec(open(os.path.basename(self.filename)).read(),
|
||||||
|
{'plt': plt, 'mpld3': mpld3, '__name__': '__main__'})
|
||||||
|
gcf = matplotlib._pylab_helpers.Gcf
|
||||||
|
fig_mgr_list = gcf.get_all_fig_managers()
|
||||||
|
self.figlist = sorted([manager.canvas.figure
|
||||||
|
for manager in fig_mgr_list],
|
||||||
|
key=lambda fig: fig.number)
|
||||||
|
except:
|
||||||
|
print(80 * '_')
|
||||||
|
print('{0} is not compiling:'.format(fname))
|
||||||
|
traceback.print_exc()
|
||||||
|
print(80 * '_')
|
||||||
|
finally:
|
||||||
|
ncol = gc.collect()
|
||||||
|
|
||||||
|
def iter_png(self):
|
||||||
|
for fig in self.figlist:
|
||||||
|
fig_png = self.pngfmt.format(fig.number)
|
||||||
|
fig.savefig(fig_png)
|
||||||
|
yield fig_png
|
||||||
|
|
||||||
|
def iter_json(self):
|
||||||
|
for fig in self.figlist:
|
||||||
|
renderer = MPLD3Renderer()
|
||||||
|
Exporter(renderer, close_mpl=False).run(fig)
|
||||||
|
fig, fig_json, extra_css, extra_js = renderer.finished_figures[0]
|
||||||
|
yield (json.dumps(fig_json, cls=NumpyEncoder), extra_js, extra_css)
|
||||||
|
|
||||||
|
|
||||||
|
def combine_testplots(wildcard='mpld3/test_plots/*.py',
|
||||||
|
outfile='_test_plots.html',
|
||||||
|
pngdir='_pngs',
|
||||||
|
d3_url=None, mpld3_url=None):
|
||||||
|
"""Generate figures from the plots and save to an HTML file
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
wildcard : string or list
|
||||||
|
a regexp or list of regexps matching files to test
|
||||||
|
outfile : string
|
||||||
|
the path at which the output HTML will be saved
|
||||||
|
d3_url : string
|
||||||
|
the URL of the d3 library to use. If not specified, a standard web
|
||||||
|
address will be used.
|
||||||
|
mpld3_url : string
|
||||||
|
the URL of the mpld3 library to use. If not specified, a standard web
|
||||||
|
address will be used.
|
||||||
|
"""
|
||||||
|
if isinstance(wildcard, str):
|
||||||
|
filenames = glob.glob(wildcard)
|
||||||
|
else:
|
||||||
|
filenames = itertools.chain(*(glob.glob(w) for w in wildcard))
|
||||||
|
|
||||||
|
fig_png = []
|
||||||
|
fig_json = []
|
||||||
|
fig_name = []
|
||||||
|
for filename in filenames:
|
||||||
|
result = ExecFile(filename, pngdir=pngdir)
|
||||||
|
fig_png.extend(result.iter_png())
|
||||||
|
for r in result.iter_json():
|
||||||
|
fig_json.append(r)
|
||||||
|
fig_name.append(filename)
|
||||||
|
|
||||||
|
left_col = [MPLD3_TEMPLATE.format(figid=i, fname=fig_name[i])
|
||||||
|
for i in range(len(fig_json))]
|
||||||
|
js_commands = [JS_TEMPLATE.format(figid=figid,
|
||||||
|
figure_json=figjson,
|
||||||
|
extra_js=figjs)
|
||||||
|
for figid, (figjson, figjs, _) in enumerate(fig_json)]
|
||||||
|
right_col = ['<div>png version</div><div class="fig"><img src="{0}"></div>\n'.format(fig)
|
||||||
|
for fig in fig_png]
|
||||||
|
extra_css = [tup[2] for tup in fig_json]
|
||||||
|
|
||||||
|
print("writing results to {0}".format(outfile))
|
||||||
|
with open(outfile, 'w') as f:
|
||||||
|
f.write(TEMPLATE.format(left_col="".join(left_col),
|
||||||
|
right_col="".join(right_col),
|
||||||
|
d3_url=json.dumps(d3_url),
|
||||||
|
mpld3_url=json.dumps(mpld3_url),
|
||||||
|
js_commands="".join(js_commands),
|
||||||
|
extra_css="".join(extra_css)))
|
||||||
|
|
||||||
|
|
||||||
|
def run_main():
|
||||||
|
import argparse
|
||||||
|
parser = argparse.ArgumentParser(description=("Run files and convert "
|
||||||
|
"output to D3"))
|
||||||
|
parser.add_argument("files", nargs='*', type=str)
|
||||||
|
parser.add_argument("-d", "--d3-url",
|
||||||
|
help="location of d3 library",
|
||||||
|
type=str, default=None)
|
||||||
|
parser.add_argument("-m", "--mpld3-url",
|
||||||
|
help="location of the mpld3 library",
|
||||||
|
type=str, default=None)
|
||||||
|
parser.add_argument("-o", "--output",
|
||||||
|
help="output filename",
|
||||||
|
type=str, default='_test_plots.html')
|
||||||
|
parser.add_argument("-j", "--minjs", action="store_true")
|
||||||
|
parser.add_argument("-l", "--local", action="store_true")
|
||||||
|
parser.add_argument("-n", "--nolaunch", action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if len(args.files) == 0:
|
||||||
|
wildcard = ['mpld3/test_plots/*.py', 'examples/*.py']
|
||||||
|
else:
|
||||||
|
wildcard = args.files
|
||||||
|
|
||||||
|
if args.d3_url is None:
|
||||||
|
args.d3_url = urls.D3_URL
|
||||||
|
if args.mpld3_url is None:
|
||||||
|
args.mpld3_url = urls.MPLD3_URL
|
||||||
|
|
||||||
|
if args.local:
|
||||||
|
args.d3_url = urls.D3_LOCAL
|
||||||
|
if args.minjs:
|
||||||
|
args.mpld3_url = urls.MPLD3MIN_LOCAL
|
||||||
|
else:
|
||||||
|
args.mpld3_url = urls.MPLD3_LOCAL
|
||||||
|
else:
|
||||||
|
if args.minjs:
|
||||||
|
args.mpld3_url = urls.MPLD3MIN_URL
|
||||||
|
|
||||||
|
print("d3 url: {0}".format(args.d3_url))
|
||||||
|
print("mpld3 url: {0}".format(args.mpld3_url))
|
||||||
|
|
||||||
|
combine_testplots(wildcard=wildcard,
|
||||||
|
outfile=args.output,
|
||||||
|
d3_url=args.d3_url,
|
||||||
|
mpld3_url=args.mpld3_url)
|
||||||
|
return args.output, args.nolaunch
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
outfile, nolaunch = run_main()
|
||||||
|
|
||||||
|
if not nolaunch:
|
||||||
|
# Open local file (works on OSX; maybe not on other systems)
|
||||||
|
import webbrowser
|
||||||
|
webbrowser.open_new('file://localhost' + os.path.abspath(outfile))
|
Loading…
Reference in New Issue
Block a user