Source code for flatsurf.features

r"""
Tests for optional packages used by sage-flatsurf.
"""
# ####################################################################
#  This file is part of sage-flatsurf.
#
#        Copyright (C) 2021-2024 Julian Rüth
#
#  sage-flatsurf is free software: you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 2 of the License, or
#  (at your option) any later version.
#
#  sage-flatsurf is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with sage-flatsurf. If not, see <https://www.gnu.org/licenses/>.
# ####################################################################

from sage.features import PythonModule

cppyy_feature = PythonModule(
    "cppyy", url="https://cppyy.readthedocs.io/en/latest/installation.html"
)


[docs]class PyeanticModule(PythonModule): def __init__(self): super().__init__( "pyeantic", url="https://github.com/flatsurf/e-antic/#install-with-conda" )
[docs] @staticmethod def fix_unwrap_intrusive_ptr(): r""" Unconditionally backports a fix from e-antic 2.0.1, see https://github.com/flatsurf/e-antic/pull/260. """ import warnings with warnings.catch_warnings(): warnings.simplefilter("ignore") import pyeantic import cppyy def unwrap_intrusive_ptr(K): if isinstance(K, pyeantic.eantic.renf_class): K = cppyy.gbl.boost.intrusive_ptr["const eantic::renf_class"](K) if not isinstance( K, cppyy.gbl.boost.intrusive_ptr["const eantic::renf_class"] ): raise TypeError("argument must be an intrusive_ptr to a renf_class") wrapped = K.get() # pylint: disable=unused-private-member wrapped.__lifeline = K # pylint: enable=unused-private-member return wrapped import pyeantic.cppyy_eantic pyeantic.cppyy_eantic.unwrap_intrusive_ptr = unwrap_intrusive_ptr pyeantic.eantic.renf = lambda *args: unwrap_intrusive_ptr( pyeantic.eantic.renf_class.make(*args) )
pyeantic_feature = PyeanticModule() pyexactreal_feature = PythonModule( "pyexactreal", url="https://github.com/flatsurf/exact-real/#install-with-conda" ) pyflatsurf_feature = PythonModule( "pyflatsurf", url="https://github.com/flatsurf/flatsurf/#install-with-conda" ) gmpxxyy_feature = PythonModule( "gmpxxyy", url="https://github.com/flatsurf/flatsurf/#install-with-conda" )