## START: Set by rpmautospec ## (rpmautospec version 0.3.5) ## RPMAUTOSPEC: autorelease, autochangelog %define autorelease(e:s:pb:n) %{?-p:0.}%{lua: release_number = 2; base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); print(release_number + base_release_number - 1); }%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} ## END: Set by rpmautospec # Sphinx-generated HTML documentation is not suitable for packaging; see # https://bugzilla.redhat.com/show_bug.cgi?id=2006555 for discussion. # # We generate PDF documentation as a substitute. %bcond doc_pdf 1 Name: python-cyipopt Version: 1.2.0 Release: %autorelease Summary: Cython interface for the interior point optimizer IPOPT # SPDX License: EPL-1.0 URL: https://github.com/mechmotum/cyipopt # We prefer the GitHub source archive to the PyPI one because it contains # the examples. Source: %{url}/archive/v%{version}/cyipopt-%{version}.tar.gz # Don’t use deprecated/removed np.float alias # https://github.com/mechmotum/cyipopt/pull/191 Patch: %{url}/pull/191.patch # Pin Cython<3 until compatibility can be fixed # https://github.com/mechmotum/cyipopt/pull/212 # # Works around, but does not fix: # # Does not build with Cython 3 # https://github.com/mechmotum/cyipopt/issues/211 # # “In addition to upper-bounding the version of Cython, this also drops Cython # from install_requires, since it doesn’t appear to be a real runtime # dependency.” Patch: %{url}/pull/212.patch # Add back cython to INSTALL_REQUIRES. # # https://github.com/mechmotum/cyipopt/commit/5088cfc081ecf2da73fbf6ab8b64e4bfc3e68d3d#commitcomment-122359591 # # “Cython is required to install the package from source with python setup.py # install. It is in INSTALL_REQUIRES because historically it was needed to give # some kind of check that build reqs were present. When we move away from # setup.py in the future, these things can be changed.” Patch: %{url}/commit/5088cfc081ecf2da73fbf6ab8b64e4bfc3e68d3d.patch # Downstream-only: drop Cython and setuptools from install_requires # # Upstream wants to keep these “setup” dependencies in install_requires to # support “setup.py install”: # # https://github.com/mechmotum/cyipopt/commit/5088cfc081ecf2da73fbf6ab8b64e4bfc3e68d3d#commitcomment-122359591 # # However, they are only imported from setup.py, so we patch them out to # avoid bringing them in as runtime dependencies for the RPM. Patch: cyipopt-1.1.0-no-runtime-cython-setuptools.patch # https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval ExcludeArch: %{ix86} BuildRequires: python3-devel # setup_requires: # Does not build with Cython 3 # https://github.com/mechmotum/cyipopt/issues/211 BuildRequires: ((python3dist(cython) >= 0.26) with (python3dist(cython) < 3~~)) BuildRequires: python3dist(numpy) >= 1.15 BuildRequires: pkgconfig(ipopt) # Called from setup.py: BuildRequires: /usr/bin/pkg-config BuildRequires: python3dist(pytest) # Scipy is an optional dependency. Installing it allows testing the scipy # integration. BuildRequires: python3dist(scipy) BuildRequires: gcc %if %{with doc_pdf} BuildRequires: make BuildRequires: python3-sphinx-latex BuildRequires: latexmk BuildRequires: tex(morefloats.sty) %endif %global common_description %{expand: Ipopt (Interior Point OPTimizer, pronounced eye-pea-opt) is a software package for large-scale nonlinear optimization. Ipopt is available from the COIN-OR initiative, under the Eclipse Public License (EPL). cyipopt is a Python wrapper around Ipopt. It enables using Ipopt from the comfort of the Python programming language.} %description %{common_description} %package -n python3-cyipopt Summary: %{summary} # From README.rst: # # As of version 1.1.0 (2021-09-07), the distribution is released under the # name "cyipopt" on PyPi (https://pypi.org/project/cyipopt). Before version # 1.1.0, it was released under the name "ipopt" # (https://pypi.org/project/ipopt). # # A compatibility shim is provided for the old package name. %py_provides python3-ipopt # Furthermore, the extension module is installed at the top level as # “ipopt_wrapper”. %py_provides python3-ipopt_wrapper %description -n python3-cyipopt %{common_description} %package doc Summary: Documentation and examples for cyipopt BuildArch: noarch %description doc %{common_description} %prep %autosetup -n cyipopt-%{version} -p1 # Replace zero-length files in the tests with proper empty text files, i.e., # just a newline. It makes sense for __init__.py files to be empty, but the # empty test files look like a mistake, so an upstream issue was filed: # https://github.com/mechmotum/cyipopt/issues/135 echo '' | tee $(find cyipopt/tests -type f -name '*.py' -size 0 | tr '\n' ' ') %py3_shebang_fix examples %if %{with doc_pdf} # Avoid: # ! LaTeX Error: Too deeply nested. echo 'latex_elements["preamble"] = r"\usepackage{enumitem}\setlistdepth{99}"' \ >> docs/source/conf.py %endif %generate_buildrequires %pyproject_buildrequires %{?with_doc_pdf:docs/requirements.txt} %build %pyproject_wheel %if %{with doc_pdf} BLIB="${PWD}/build/lib.%{python3_platform}-cpython-%{python3_version_nodots}" PYTHONPATH="${BLIB}" %make_build -C docs latex \ SPHINXOPTS='-j%{?_smp_build_ncpus}' %make_build -C docs/build/latex LATEXMKOPTS='-quiet' %endif %install %pyproject_install %pyproject_save_files cyipopt ipopt ipopt_wrapper %check %pytest # Run the examples for additional confidence. while read -r example do %{py3_test_envvars} '%{python3}' "${example}" done < <( # Skip hs071_scipy_jax.py, since it requires https://pypi.org/project/jax/, # which is not packaged. find examples -type f -name '*.py' ! -name hs071_scipy_jax.py ) %files -n python3-cyipopt -f %{pyproject_files} # pyproject-rpm-macros handles LICENSE; verify with “rpm -qL -p …” %files doc %license LICENSE %doc CHANGELOG.rst %doc README.rst %doc examples/ %if %{with doc_pdf} %doc docs/build/latex/cyipopt.pdf %endif %changelog * Wed Oct 11 2023 Benjamin A. Beasley - 1.2.0-2 - Use %%{py3_test_envvars} to run examples * Sun Jul 23 2023 Benjamin A. Beasley - 1.2.0-1 - Update to 1.2.0 * Sun Jul 23 2023 Benjamin A. Beasley - 1.1.0-20 - Drop Cython/setuptools runtime dependencies as a *downstream* patch * Fri Jul 21 2023 Benjamin A. Beasley - 1.1.0-19 - Follow upstreaming in restoring the runtime Cython dependency * Thu Jul 20 2023 Benjamin A. Beasley - 1.1.0-18 - Upsteamed Cython<3 pin - Dropped Cython from runtime dependencies * Thu Jul 20 2023 Benjamin A. Beasley - 1.1.0-17 - Use Cython compat package until Cython 3 compatibility is fixed * Wed Jun 28 2023 Python Maint - 1.1.0-16 - Rebuilt for Python 3.12 * Tue Jun 20 2023 Benjamin A. Beasley - 1.1.0-15 - Use new (rpm 4.17.1+) bcond style * Sat Jun 03 2023 Benjamin A. Beasley - 1.1.0-14 - Remove explicit %%set_build_flags, not needed since F36 * Fri Mar 17 2023 Benjamin A. Beasley - 1.1.0-12 - Don’t assume %%_smp_mflags is -j%%_smp_build_ncpus * Wed Mar 08 2023 Benjamin A. Beasley - 1.1.0-11 - Drop %%pyproject_build_lib (F37+) * Wed Mar 08 2023 Benjamin A. Beasley - 1.1.0-10 - Don’t use deprecated/removed np.float alias * Fri Jan 20 2023 Fedora Release Engineering - 1.1.0-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild * Wed Dec 21 2022 Benjamin A. Beasley - 1.1.0-8 - Leaf package: remove i686 support * Wed Dec 21 2022 Benjamin A. Beasley - 1.1.0-7 - Indicate dirs. in files list with trailing slashes * Wed Nov 30 2022 Benjamin A. Beasley - 1.1.0-6 - Drop default -r argument to pyproject_buildrequires * Fri Oct 21 2022 Benjamin A. Beasley - 1.1.0-5 - Confirm License is SPDX EPL-1.0 * Fri Jul 22 2022 Fedora Release Engineering - 1.1.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild * Wed Jun 15 2022 Python Maint - 1.1.0-3 - Rebuilt for Python 3.11 * Wed Apr 20 2022 Benjamin A. Beasley - 1.1.0-2 - Stop numbering patches * Wed Feb 02 2022 Benjamin A. Beasley - 1.1.0-1 - Initial package (close RHBZ#2020886)