dev-python/ipython: Remove old

Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
Michał Górny
2024-07-27 11:46:42 +02:00
parent b103ca1dbd
commit 40d34951ce
7 changed files with 0 additions and 739 deletions

View File

@@ -1,3 +1 @@
DIST ipython-8.24.0.tar.gz 5491819 BLAKE2B 49ca26f4ab6ceb7c787038db5b1073790d7a32cb96951bcc2ffa4ac05b3a689507e654344fda196560e2dc4b9e2225335e27bc3fb7472ba487adebb1ebba44e1 SHA512 adf032a93e94e1e8008a1cc106fb348d0bccb914a335e0ad04490531e7a7d16e7a2dc4a345f7faf1b3151d60a649413fa78130688cb59de088e5eb4291689310
DIST ipython-8.25.0.tar.gz 5492936 BLAKE2B 1abb407e60d04e9f7834ee112f68bc1152b5693880dc091103ee015b1749949f9522537f183fd598992a5fe26124408bcfa8ad8550779fe94c0f2223b4879dca SHA512 b048a7bf65a16a1bc0d451a547998458ebfe93b4576bb89080f99d3e6ccbba34cfb1d3d33e2d32a6d1f6e8b2f3cf1b102b775f66c6610272ee8ffe15222d951f
DIST ipython-8.26.0.tar.gz 5493422 BLAKE2B 2d05630d64d932190bf07c233e4241f5ce4830e62a3fb3551a93d9bfa83545de8090902a0528004b8233169d20652b7a3bbf1913ce078254246002956b1e44e1 SHA512 05f331cd39b75aed78bb06460f56145d9cefa2d65d818ae0fd25b3739d2c11830e3d6c427206787d3b3efec10de8ed4c966c25a70e4b7a7e1c914cfe8fba6a70

View File

@@ -1,27 +0,0 @@
substitute the insource files with these messages
diff --git a/IPython/extensions/octavemagic.py b/IPython/extensions/octavemagic.py
new file mode 100644
index 0000000..dc93fe4
--- /dev/null
+++ b/IPython/extensions/octavemagic.py
@@ -0,0 +1,7 @@
+import warnings
+
+def load_ipython_extension(ip):
+ msg = ("The octavemagic extension has been moved to oct2py. "
+ "After installing oct2py, you can load octavemagic with the "
+ "following command: '%load_ext oct2py.ipython'.")
+ warnings.warn(msg, Warning, stacklevel=2)
diff --git a/IPython/extensions/rmagic.py b/IPython/extensions/rmagic.py
new file mode 100644
index 0000000..739e491
--- /dev/null
+++ b/IPython/extensions/rmagic.py
@@ -0,0 +1,7 @@
+import warnings
+
+def load_ipython_extension(ip):
+ msg = ("The rmagic extension has been moved to rpy2. "
+ "After installing rpy2, you can load rmagic with the "
+ "following command: '%load_ext rpy2.ipython'.")
+ warnings.warn(msg, Warning, stacklevel=2)

View File

@@ -1,72 +0,0 @@
diff --git a/IPython/core/pylabtools.py b/IPython/core/pylabtools.py
index 1f5a11f37e..4287834418 100644
--- a/IPython/core/pylabtools.py
+++ b/IPython/core/pylabtools.py
@@ -345,8 +345,10 @@ def find_gui_and_backend(gui=None, gui_select=None):
backend = matplotlib.rcParamsOrig["backend"]
backend, gui = backend_registry.resolve_backend(backend)
else:
+ gui = _convert_gui_to_matplotlib(gui)
backend, gui = backend_registry.resolve_gui_or_backend(gui)
+ gui = _convert_gui_from_matplotlib(gui)
return gui, backend
# Fallback to previous behaviour (Matplotlib < 3.9)
@@ -509,10 +511,28 @@ def _list_matplotlib_backends_and_gui_loops() -> list[str]:
if _matplotlib_manages_backends():
from matplotlib.backends.registry import backend_registry
- ret = backend_registry.list_all() + backend_registry.list_gui_frameworks()
+ ret = backend_registry.list_all() + [
+ _convert_gui_from_matplotlib(gui)
+ for gui in backend_registry.list_gui_frameworks()
+ ]
else:
from IPython.core import pylabtools
ret = list(pylabtools.backends.keys())
return sorted(["auto"] + ret)
+
+
+# Matplotlib and IPython do not always use the same gui framework name.
+# Always use the approprate one of these conversion functions when passing a
+# gui framework name to/from Matplotlib.
+def _convert_gui_to_matplotlib(gui: str | None) -> str | None:
+ if gui and gui.lower() == "osx":
+ return "macosx"
+ return gui
+
+
+def _convert_gui_from_matplotlib(gui: str | None) -> str | None:
+ if gui and gui.lower() == "macosx":
+ return "osx"
+ return gui
diff --git a/IPython/core/tests/test_pylabtools.py b/IPython/core/tests/test_pylabtools.py
index 4099f04044..6bddb34807 100644
--- a/IPython/core/tests/test_pylabtools.py
+++ b/IPython/core/tests/test_pylabtools.py
@@ -276,11 +276,11 @@ def test_figure_no_canvas():
# name is gui
("gtk3", "gtk3", "gtk3agg"),
("gtk4", "gtk4", "gtk4agg"),
- ("headless", "headless", "agg"),
+ ("headless", None, "agg"),
("osx", "osx", "macosx"),
("qt", "qt", "qtagg"),
("qt5", "qt5", "qt5agg"),
- ("qt6", "qt6", "qt6agg"),
+ ("qt6", "qt6", "qtagg"),
("tk", "tk", "tkagg"),
("wx", "wx", "wxagg"),
# name is backend
@@ -301,8 +301,6 @@ def test_figure_no_canvas():
("qtcairo", "qt", "qtcairo"),
("qt5agg", "qt5", "qt5agg"),
("qt5cairo", "qt5", "qt5cairo"),
- ("qt6agg", "qt", "qt6agg"),
- ("qt6cairo", "qt", "qt6cairo"),
("tkagg", "tk", "tkagg"),
("tkcairo", "tk", "tkcairo"),
("webagg", "webagg", "webagg"),

View File

@@ -1,125 +0,0 @@
From 7df70a3cd79068be6f98596e427d60a5d0cfe5b3 Mon Sep 17 00:00:00 2001
From: Steve Kowalik <steven@wedontsleep.org>
Date: Thu, 23 May 2024 13:00:43 +1000
Subject: [PATCH] Support pytest 8.1+ changes in pytest plugin
Pytest 8.1 has also changed the plugin API, as well as required new
keyword arguments. I've shifted the pytest version calculation to the
module level so we can use it everywhere, and continue supporting all
versions of pytest that we can.
Fixes #14390
---
IPython/testing/plugin/pytest_ipdoctest.py | 36 ++++++++++++++++------
1 file changed, 26 insertions(+), 10 deletions(-)
diff --git a/IPython/testing/plugin/pytest_ipdoctest.py b/IPython/testing/plugin/pytest_ipdoctest.py
index fc8af13b579..40a3ae92b40 100644
--- a/IPython/testing/plugin/pytest_ipdoctest.py
+++ b/IPython/testing/plugin/pytest_ipdoctest.py
@@ -38,7 +38,11 @@
from _pytest.compat import safe_getattr
from _pytest.config import Config
from _pytest.config.argparsing import Parser
-from _pytest.fixtures import FixtureRequest
+
+try:
+ from _pytest.fixtures import TopRequest as FixtureRequest
+except ImportError:
+ from _pytest.fixtures import FixtureRequest
from _pytest.nodes import Collector
from _pytest.outcomes import OutcomeException
from _pytest.pathlib import fnmatch_ex, import_path
@@ -69,6 +73,8 @@
# Lazy definition of output checker class
CHECKER_CLASS: Optional[Type["IPDoctestOutputChecker"]] = None
+pytest_version = tuple([int(part) for part in pytest.__version__.split(".")])
+
def pytest_addoption(parser: Parser) -> None:
parser.addini(
@@ -143,7 +149,7 @@ def pytest_collect_file(
return None
-if int(pytest.__version__.split(".")[0]) < 7:
+if pytest_version[0] < 7:
_collect_file = pytest_collect_file
def pytest_collect_file(
@@ -448,7 +454,7 @@ def reportinfo(self) -> Tuple[Union["os.PathLike[str]", str], Optional[int], str
assert self.dtest is not None
return self.path, self.dtest.lineno, "[ipdoctest] %s" % self.name
- if int(pytest.__version__.split(".")[0]) < 7:
+ if pytest_version[0] < 7:
@property
def path(self) -> Path:
@@ -521,7 +527,7 @@ def collect(self) -> Iterable[IPDoctestItem]:
self, name=test.name, runner=runner, dtest=test
)
- if int(pytest.__version__.split(".")[0]) < 7:
+ if pytest_version[0] < 7:
@property
def path(self) -> Path:
@@ -636,20 +642,26 @@ def _find(
)
if self.path.name == "conftest.py":
- if int(pytest.__version__.split(".")[0]) < 7:
+ if pytest_version[0] < 7:
module = self.config.pluginmanager._importconftest(
self.path,
self.config.getoption("importmode"),
)
else:
+ kwargs = {"rootpath": self.config.rootpath}
+ if pytest_version >= (8, 1):
+ kwargs["consider_namespace_packages"] = False
module = self.config.pluginmanager._importconftest(
self.path,
self.config.getoption("importmode"),
- rootpath=self.config.rootpath,
+ **kwargs,
)
else:
try:
- module = import_path(self.path, root=self.config.rootpath)
+ kwargs = {"root": self.config.rootpath}
+ if pytest_version >= (8, 1):
+ kwargs["consider_namespace_packages"] = False
+ module = import_path(self.path, **kwargs)
except ImportError:
if self.config.getvalue("ipdoctest_ignore_import_errors"):
pytest.skip("unable to import module %r" % self.path)
@@ -671,7 +683,7 @@ def _find(
self, name=test.name, runner=runner, dtest=test
)
- if int(pytest.__version__.split(".")[0]) < 7:
+ if pytest_version[0] < 7:
@property
def path(self) -> Path:
@@ -701,11 +713,15 @@ def func() -> None:
doctest_item.funcargs = {} # type: ignore[attr-defined]
fm = doctest_item.session._fixturemanager
+ kwargs = {"node": doctest_item, "func": func, "cls": None}
+ if pytest_version <= (8, 0):
+ kwargs["funcargs"] = False
doctest_item._fixtureinfo = fm.getfixtureinfo( # type: ignore[attr-defined]
- node=doctest_item, func=func, cls=None, funcargs=False
+ **kwargs
)
fixture_request = FixtureRequest(doctest_item, _ispytest=True)
- fixture_request._fillfixtures()
+ if pytest_version <= (8, 0):
+ fixture_request._fillfixtures()
return fixture_request

View File

@@ -1,182 +0,0 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_USE_PEP517=standalone
PYTHON_COMPAT=( pypy3 python3_{10..12} )
PYTHON_REQ_USE='readline(+),sqlite,threads(+)'
inherit distutils-r1 optfeature pypi virtualx
DESCRIPTION="Advanced interactive shell for Python"
HOMEPAGE="
https://ipython.org/
https://github.com/ipython/ipython/
https://pypi.org/project/ipython/
"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ppc ppc64 ~riscv ~s390 ~sparc x86 ~arm64-macos ~x64-macos"
IUSE="doc examples notebook nbconvert qt5 +smp test"
RESTRICT="!test? ( test )"
RDEPEND="
dev-python/decorator[${PYTHON_USEDEP}]
>=dev-python/jedi-0.16[${PYTHON_USEDEP}]
dev-python/matplotlib-inline[${PYTHON_USEDEP}]
>=dev-python/pexpect-4.3[${PYTHON_USEDEP}]
>=dev-python/prompt-toolkit-3.0.41[${PYTHON_USEDEP}]
<dev-python/prompt-toolkit-3.1[${PYTHON_USEDEP}]
>=dev-python/pygments-2.4.0[${PYTHON_USEDEP}]
dev-python/stack-data[${PYTHON_USEDEP}]
>=dev-python/traitlets-5.13.0[${PYTHON_USEDEP}]
$(python_gen_cond_dep '
dev-python/exceptiongroup[${PYTHON_USEDEP}]
' 3.10)
$(python_gen_cond_dep '
dev-python/typing-extensions[${PYTHON_USEDEP}]
' 3.10 3.11)
"
BDEPEND="
dev-python/setuptools[${PYTHON_USEDEP}]
test? (
app-text/dvipng[truetype]
>=dev-python/ipykernel-5.1.0[${PYTHON_USEDEP}]
>=dev-python/matplotlib-3.9[${PYTHON_USEDEP}]
dev-python/nbformat[${PYTHON_USEDEP}]
>=dev-python/numpy-1.23[${PYTHON_USEDEP}]
dev-python/matplotlib-inline[${PYTHON_USEDEP}]
dev-python/pickleshare[${PYTHON_USEDEP}]
dev-python/pytest-asyncio[${PYTHON_USEDEP}]
dev-python/requests[${PYTHON_USEDEP}]
dev-python/testpath[${PYTHON_USEDEP}]
)
doc? (
>=dev-python/ipykernel-5.1.0[${PYTHON_USEDEP}]
dev-python/matplotlib[${PYTHON_USEDEP}]
>=dev-python/sphinx-2[${PYTHON_USEDEP}]
dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}]
)
"
distutils_enable_tests pytest
RDEPEND+="
nbconvert? (
dev-python/nbconvert[${PYTHON_USEDEP}]
)
"
PDEPEND="
$(python_gen_cond_dep '
notebook? (
dev-python/notebook[${PYTHON_USEDEP}]
dev-python/ipywidgets[${PYTHON_USEDEP}]
dev-python/widgetsnbextension[${PYTHON_USEDEP}]
)
qt5? ( dev-python/qtconsole[${PYTHON_USEDEP}] )
' 'python*')
smp? (
>=dev-python/ipykernel-5.1.0[${PYTHON_USEDEP}]
>=dev-python/ipyparallel-6.2.3[${PYTHON_USEDEP}]
)
"
PATCHES=(
"${FILESDIR}"/2.1.0-substitute-files.patch
# https://github.com/ipython/ipython/pull/14441
"${FILESDIR}/${P}-pytest-8.patch"
# https://github.com/ipython/ipython/pull/14420
"${FILESDIR}/${P}-mpl-3.9.patch"
)
python_prepare_all() {
# Remove out of date insource files
#rm IPython/extensions/cythonmagic.py || die
#rm IPython/extensions/rmagic.py || die
# Prevent un-needed download during build
if use doc; then
sed -e "/^ 'sphinx.ext.intersphinx',/d" -i docs/source/conf.py || die
fi
# Rename the test directory to reduce sys.path pollution
# https://github.com/ipython/ipython/issues/12892
mv IPython/extensions/{,ipython_}tests || die
distutils-r1_python_prepare_all
}
python_compile_all() {
if use doc; then
emake -C docs html_noapi
HTML_DOCS=( docs/build/html/. )
fi
}
src_test() {
virtx distutils-r1_src_test
}
python_test() {
local -x IPYTHON_TESTING_TIMEOUT_SCALE=20
local EPYTEST_DESELECT=(
# TODO: looks to be a regression due to a newer dep
IPython/core/tests/test_oinspect.py::test_class_signature
IPython/core/tests/test_oinspect.py::test_render_signature_long
IPython/terminal/tests/test_shortcuts.py::test_modify_shortcut_with_filters
)
case ${EPYTHON} in
pypy3)
EPYTEST_DESELECT+=(
# https://github.com/numpy/numpy/issues/25164
IPython/lib/tests/test_display.py::TestAudioDataWithoutNumpy
)
;;
esac
# nonfatal implied by virtx
local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
nonfatal epytest -p asyncio --asyncio-mode=auto ||
die "Tests failed on ${EPYTHON}"
}
python_install() {
distutils-r1_python_install
# Create ipythonX.Y symlinks.
# TODO:
# 1. do we want them for pypy? No. pypy has no numpy
# 2. handle it in the eclass instead (use _python_ln_rel).
# With pypy not an option the dosym becomes unconditional
dosym ../lib/python-exec/${EPYTHON}/ipython \
/usr/bin/ipython${EPYTHON#python}
}
python_install_all() {
distutils-r1_python_install_all
if use examples; then
dodoc -r examples
docompress -x /usr/share/doc/${PF}/examples
fi
}
pkg_postinst() {
optfeature "code formatting" dev-python/black
optfeature "sympyprinting" dev-python/sympy
optfeature "cythonmagic" dev-python/cython
optfeature "%lprun magic command" dev-python/line-profiler
optfeature "%matplotlib magic command" dev-python/matplotlib-inline
if use nbconvert; then
if ! has_version virtual/pandoc ; then
einfo "Node.js will be used to convert notebooks to other formats"
einfo "like HTML. Support for that is still experimental. If you"
einfo "encounter any problems, please use app-text/pandoc instead."
fi
fi
}

View File

@@ -1,179 +0,0 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_USE_PEP517=standalone
PYTHON_COMPAT=( pypy3 python3_{10..12} )
PYTHON_REQ_USE='readline(+),sqlite,threads(+)'
inherit distutils-r1 optfeature pypi virtualx
DESCRIPTION="Advanced interactive shell for Python"
HOMEPAGE="
https://ipython.org/
https://github.com/ipython/ipython/
https://pypi.org/project/ipython/
"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ppc ppc64 ~riscv ~s390 sparc x86 ~arm64-macos ~x64-macos"
IUSE="doc examples notebook nbconvert qt5 +smp test"
RESTRICT="!test? ( test )"
RDEPEND="
dev-python/decorator[${PYTHON_USEDEP}]
>=dev-python/jedi-0.16[${PYTHON_USEDEP}]
dev-python/matplotlib-inline[${PYTHON_USEDEP}]
>=dev-python/pexpect-4.3[${PYTHON_USEDEP}]
>=dev-python/prompt-toolkit-3.0.41[${PYTHON_USEDEP}]
<dev-python/prompt-toolkit-3.1[${PYTHON_USEDEP}]
>=dev-python/pygments-2.4.0[${PYTHON_USEDEP}]
dev-python/stack-data[${PYTHON_USEDEP}]
>=dev-python/traitlets-5.13.0[${PYTHON_USEDEP}]
$(python_gen_cond_dep '
dev-python/exceptiongroup[${PYTHON_USEDEP}]
' 3.10)
$(python_gen_cond_dep '
dev-python/typing-extensions[${PYTHON_USEDEP}]
' 3.10 3.11)
"
BDEPEND="
dev-python/setuptools[${PYTHON_USEDEP}]
test? (
app-text/dvipng[truetype]
>=dev-python/ipykernel-5.1.0[${PYTHON_USEDEP}]
dev-python/matplotlib[${PYTHON_USEDEP}]
dev-python/nbformat[${PYTHON_USEDEP}]
>=dev-python/numpy-1.23[${PYTHON_USEDEP}]
dev-python/matplotlib-inline[${PYTHON_USEDEP}]
dev-python/pickleshare[${PYTHON_USEDEP}]
<dev-python/pytest-8[${PYTHON_USEDEP}]
dev-python/pytest-asyncio[${PYTHON_USEDEP}]
dev-python/requests[${PYTHON_USEDEP}]
dev-python/testpath[${PYTHON_USEDEP}]
)
doc? (
>=dev-python/ipykernel-5.1.0[${PYTHON_USEDEP}]
dev-python/matplotlib[${PYTHON_USEDEP}]
>=dev-python/sphinx-2[${PYTHON_USEDEP}]
dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}]
)
"
distutils_enable_tests pytest
RDEPEND+="
nbconvert? (
dev-python/nbconvert[${PYTHON_USEDEP}]
)
"
PDEPEND="
$(python_gen_cond_dep '
notebook? (
dev-python/notebook[${PYTHON_USEDEP}]
dev-python/ipywidgets[${PYTHON_USEDEP}]
dev-python/widgetsnbextension[${PYTHON_USEDEP}]
)
qt5? ( dev-python/qtconsole[${PYTHON_USEDEP}] )
' 'python*')
smp? (
>=dev-python/ipykernel-5.1.0[${PYTHON_USEDEP}]
>=dev-python/ipyparallel-6.2.3[${PYTHON_USEDEP}]
)
"
PATCHES=(
"${FILESDIR}"/2.1.0-substitute-files.patch
)
python_prepare_all() {
# Remove out of date insource files
#rm IPython/extensions/cythonmagic.py || die
#rm IPython/extensions/rmagic.py || die
# Prevent un-needed download during build
if use doc; then
sed -e "/^ 'sphinx.ext.intersphinx',/d" -i docs/source/conf.py || die
fi
# Rename the test directory to reduce sys.path pollution
# https://github.com/ipython/ipython/issues/12892
mv IPython/extensions/{,ipython_}tests || die
distutils-r1_python_prepare_all
}
python_compile_all() {
if use doc; then
emake -C docs html_noapi
HTML_DOCS=( docs/build/html/. )
fi
}
src_test() {
virtx distutils-r1_src_test
}
python_test() {
local -x IPYTHON_TESTING_TIMEOUT_SCALE=20
local EPYTEST_DESELECT=(
# TODO: looks to be a regression due to a newer dep
IPython/core/tests/test_oinspect.py::test_class_signature
IPython/core/tests/test_oinspect.py::test_render_signature_long
IPython/terminal/tests/test_shortcuts.py::test_modify_shortcut_with_filters
)
case ${EPYTHON} in
pypy3)
EPYTEST_DESELECT+=(
# https://github.com/numpy/numpy/issues/25164
IPython/lib/tests/test_display.py::TestAudioDataWithoutNumpy
)
;;
esac
# nonfatal implied by virtx
local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
nonfatal epytest -p asyncio --asyncio-mode=auto ||
die "Tests failed on ${EPYTHON}"
}
python_install() {
distutils-r1_python_install
# Create ipythonX.Y symlinks.
# TODO:
# 1. do we want them for pypy? No. pypy has no numpy
# 2. handle it in the eclass instead (use _python_ln_rel).
# With pypy not an option the dosym becomes unconditional
dosym ../lib/python-exec/${EPYTHON}/ipython \
/usr/bin/ipython${EPYTHON#python}
}
python_install_all() {
distutils-r1_python_install_all
if use examples; then
dodoc -r examples
docompress -x /usr/share/doc/${PF}/examples
fi
}
pkg_postinst() {
optfeature "code formatting" dev-python/black
optfeature "sympyprinting" dev-python/sympy
optfeature "cythonmagic" dev-python/cython
optfeature "%lprun magic command" dev-python/line-profiler
optfeature "%matplotlib magic command" dev-python/matplotlib-inline
if use nbconvert; then
if ! has_version virtual/pandoc ; then
einfo "Node.js will be used to convert notebooks to other formats"
einfo "like HTML. Support for that is still experimental. If you"
einfo "encounter any problems, please use app-text/pandoc instead."
fi
fi
}

View File

@@ -1,152 +0,0 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_USE_PEP517=standalone
PYTHON_COMPAT=( pypy3 python3_{10..12} )
PYTHON_REQ_USE='readline(+),sqlite,threads(+)'
inherit distutils-r1 optfeature pypi virtualx
DESCRIPTION="Advanced interactive shell for Python"
HOMEPAGE="
https://ipython.org/
https://github.com/ipython/ipython/
https://pypi.org/project/ipython/
"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~alpha ~amd64 arm arm64 ~hppa ~ia64 ~loong ppc ppc64 ~riscv ~s390 sparc x86 ~arm64-macos ~x64-macos"
IUSE="examples notebook nbconvert qt5 +smp test"
RESTRICT="!test? ( test )"
RDEPEND="
dev-python/decorator[${PYTHON_USEDEP}]
>=dev-python/jedi-0.16[${PYTHON_USEDEP}]
dev-python/matplotlib-inline[${PYTHON_USEDEP}]
>=dev-python/pexpect-4.3[${PYTHON_USEDEP}]
>=dev-python/prompt-toolkit-3.0.41[${PYTHON_USEDEP}]
<dev-python/prompt-toolkit-3.1[${PYTHON_USEDEP}]
>=dev-python/pygments-2.4.0[${PYTHON_USEDEP}]
dev-python/stack-data[${PYTHON_USEDEP}]
>=dev-python/traitlets-5.13.0[${PYTHON_USEDEP}]
$(python_gen_cond_dep '
dev-python/exceptiongroup[${PYTHON_USEDEP}]
' 3.10)
$(python_gen_cond_dep '
dev-python/typing-extensions[${PYTHON_USEDEP}]
' 3.10 3.11)
"
BDEPEND="
dev-python/setuptools[${PYTHON_USEDEP}]
test? (
app-text/dvipng[truetype]
>=dev-python/ipykernel-5.1.0[${PYTHON_USEDEP}]
>=dev-python/matplotlib-3.9[${PYTHON_USEDEP}]
dev-python/nbformat[${PYTHON_USEDEP}]
>=dev-python/numpy-1.23[${PYTHON_USEDEP}]
dev-python/matplotlib-inline[${PYTHON_USEDEP}]
dev-python/pickleshare[${PYTHON_USEDEP}]
dev-python/pytest-asyncio[${PYTHON_USEDEP}]
dev-python/requests[${PYTHON_USEDEP}]
dev-python/testpath[${PYTHON_USEDEP}]
)
"
distutils_enable_tests pytest
RDEPEND+="
nbconvert? (
dev-python/nbconvert[${PYTHON_USEDEP}]
)
"
PDEPEND="
$(python_gen_cond_dep '
notebook? (
dev-python/notebook[${PYTHON_USEDEP}]
dev-python/ipywidgets[${PYTHON_USEDEP}]
dev-python/widgetsnbextension[${PYTHON_USEDEP}]
)
qt5? ( dev-python/qtconsole[${PYTHON_USEDEP}] )
' 'python*')
smp? (
>=dev-python/ipykernel-5.1.0[${PYTHON_USEDEP}]
>=dev-python/ipyparallel-6.2.3[${PYTHON_USEDEP}]
)
"
python_prepare_all() {
# Rename the test directory to reduce sys.path pollution
# https://github.com/ipython/ipython/issues/12892
mv IPython/extensions/{,ipython_}tests || die
distutils-r1_python_prepare_all
}
src_test() {
virtx distutils-r1_src_test
}
python_test() {
local -x IPYTHON_TESTING_TIMEOUT_SCALE=20
local EPYTEST_DESELECT=(
# TODO: looks to be a regression due to a newer dep
IPython/core/tests/test_oinspect.py::test_class_signature
IPython/core/tests/test_oinspect.py::test_render_signature_long
IPython/terminal/tests/test_shortcuts.py::test_modify_shortcut_with_filters
)
case ${EPYTHON} in
pypy3)
EPYTEST_DESELECT+=(
# https://github.com/ipython/ipython/issues/14244
IPython/lib/tests/test_display.py::TestAudioDataWithoutNumpy
)
;;
esac
# nonfatal implied by virtx
local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
nonfatal epytest -p asyncio --asyncio-mode=auto ||
die "Tests failed on ${EPYTHON}"
}
python_install() {
distutils-r1_python_install
# Create ipythonX.Y symlinks.
# TODO:
# 1. do we want them for pypy? No. pypy has no numpy
# 2. handle it in the eclass instead (use _python_ln_rel).
# With pypy not an option the dosym becomes unconditional
dosym ../lib/python-exec/${EPYTHON}/ipython \
/usr/bin/ipython${EPYTHON#python}
}
python_install_all() {
distutils-r1_python_install_all
if use examples; then
dodoc -r examples
docompress -x /usr/share/doc/${PF}/examples
fi
}
pkg_postinst() {
optfeature "code formatting" dev-python/black
optfeature "sympyprinting" dev-python/sympy
optfeature "cythonmagic" dev-python/cython
optfeature "%lprun magic command" dev-python/line-profiler
optfeature "%matplotlib magic command" dev-python/matplotlib-inline
if use nbconvert; then
if ! has_version virtual/pandoc ; then
einfo "Node.js will be used to convert notebooks to other formats"
einfo "like HTML. Support for that is still experimental. If you"
einfo "encounter any problems, please use app-text/pandoc instead."
fi
fi
}