Blob Blame History Raw
Name:           python-mpmath
Version:        1.2.1
Release:        %autorelease
Summary:        A pure Python library for multiprecision floating-point arithmetic
License:        BSD
URL:            https://mpmath.org
# Source code
Source0:        https://github.com/fredrik-johansson/mpmath/archive/%{version}/%{name}-%{version}.tar.gz

# Switch to 'traditional' theme in RHEL since 'classic' isn't available
Patch0:         python-mpmath-1.0.0-sphinx.patch

# #1974835 - CVE-2021-29063 python-mpmath: Regular expression denial of service in the mpmathify function
Patch1:         https://github.com/fredrik-johansson/mpmath/pull/570.patch

BuildRequires:  python3-devel
BuildRequires:  python3-pip
BuildRequires:  python3-setuptools
BuildRequires:  python3-setuptools_scm
BuildRequires:  python3-pytest
BuildRequires:  python3-sphinx
BuildRequires:  xorg-x11-server-Xvfb

# For building documentation
BuildRequires:  dvipng
BuildRequires:  tex(latex)

BuildArch:      noarch

%global _description %{expand:
Mpmath is a pure-Python library for multiprecision floating-point
arithmetic. It provides an extensive set of transcendental functions,
unlimited exponent sizes, complex numbers, interval arithmetic,
numerical integration and differentiation, root-finding, linear
algebra, and much more. Almost any calculation can be performed just
as well at 10-digit or 1000-digit precision, and in many cases mpmath
implements asymptotically fast algorithms that scale well for
extremely high precision work. If available, mpmath will (optionally)
use gmpy to speed up high precision operations.}

%description %_description

%package -n python3-mpmath
Summary:        A pure Python library for multiprecision floating-point arithmetic
%if 0%{?fedora} || 0%{?rhel} > 7
Recommends: python3-matplotlib
%endif
%{?python_provide:%python_provide python3-mpmath}

%description -n python3-mpmath %_description

If you require plotting capabilities in mpmath, install python3-matplotlib.


%package doc
Summary:        HTML documentation for %{name}
Requires:       python3-mpmath = %{version}-%{release}

%description doc
This package contains the HTML documentation for %{name}.


%prep
%setup -q -n mpmath-%{version}
%if 0%{?rhel} == 6 || 0%{?rhel} == 7
%patch0 -p1 -b .sphinx
%endif
%patch1 -p1

# Convert line encodings
for doc in CHANGES LICENSE README.rst TODO mpmath/tests/runtests.py; do
 sed "s|\r||g" $doc > $doc.new && \
 touch -r $doc $doc.new && \
 mv $doc.new $doc
done
find doc -name *.txt -exec sed -i "s|\r||g" {} \;

shebangs="mpmath/matrices/eigen.py mpmath/matrices/eigen_symmetric.py mpmath/tests/runtests.py mpmath/tests/test_eigen.py mpmath/tests/test_eigen_symmetric.py mpmath/tests/test_levin.py"
# Get rid of unnecessary shebangs
for lib in $shebangs; do
 sed '/^#!.*/d; 1q' $lib > $lib.new && \
 touch -r $lib $lib.new && \
 mv $lib.new $lib
done

sed -i -r 's/use_scm_version=True/version="%{version}"/' setup.py

%build
%py3_build

# Build documentation
cd doc
%{__python3} build.py

%install
%py3_install

%check
cd build/lib/mpmath/tests/
xvfb-run -a pytest-3 -v

%files -n python3-mpmath
%license LICENSE
%doc CHANGES README.rst TODO
%{python3_sitelib}/mpmath/
%{python3_sitelib}/mpmath-%{version}-*.egg-info

%files doc
%doc doc/build/*

%changelog
%autochangelog