diff --git a/build/pkgs/mathics/checksums.ini b/build/pkgs/mathics/checksums.ini deleted file mode 100644 index d43327d515d..00000000000 --- a/build/pkgs/mathics/checksums.ini +++ /dev/null @@ -1,4 +0,0 @@ -tarball=Mathics3-VERSION.tar.gz -sha1=a72550d3df97dd4055cf903a9f012683ca2adf35 -sha256=d50ee5ad07db845609078c99af789253337a45f50bef6f8b09262f48dca8da7c -upstream_url=https://pypi.io/packages/source/M/Mathics3/Mathics3-VERSION.tar.gz diff --git a/build/pkgs/mathics/dependencies b/build/pkgs/mathics/dependencies index 11d5626d8c7..fad887c5546 100644 --- a/build/pkgs/mathics/dependencies +++ b/build/pkgs/mathics/dependencies @@ -1,4 +1,4 @@ - | $(PYTHON_TOOLCHAIN) pint palettable mathics_scanner $(PYTHON) +numpy pillow mpmath dateutil requests sympy pyyaml charset_normalizer typing_extensions | $(PYTHON_TOOLCHAIN) $(PYTHON) ---------- All lines of this file are ignored except the first. diff --git a/build/pkgs/mathics/package-version.txt b/build/pkgs/mathics/package-version.txt deleted file mode 100644 index fcdb2e109f6..00000000000 --- a/build/pkgs/mathics/package-version.txt +++ /dev/null @@ -1 +0,0 @@ -4.0.0 diff --git a/build/pkgs/mathics/requirements.txt b/build/pkgs/mathics/requirements.txt new file mode 100644 index 00000000000..88f2f65c22c --- /dev/null +++ b/build/pkgs/mathics/requirements.txt @@ -0,0 +1,3 @@ +Mathics3 @ git+https://github.com/Mathics3/mathics-core +mathics-scanner @ git+https://github.com/Mathics3/mathics-scanner +-c ${SAGE_VENV}/var/lib/sage/scripts/numpy/spkg-requirements.txt diff --git a/build/pkgs/mathics/spkg-install.in b/build/pkgs/mathics/spkg-install.in deleted file mode 100644 index 37ac1a53437..00000000000 --- a/build/pkgs/mathics/spkg-install.in +++ /dev/null @@ -1,2 +0,0 @@ -cd src -sdh_pip_install . diff --git a/build/pkgs/mathics/version_requirements.txt b/build/pkgs/mathics/version_requirements.txt deleted file mode 100644 index e0924d3dace..00000000000 --- a/build/pkgs/mathics/version_requirements.txt +++ /dev/null @@ -1 +0,0 @@ -Mathics3 diff --git a/build/pkgs/mathics_scanner/SPKG.rst b/build/pkgs/mathics_scanner/SPKG.rst deleted file mode 100644 index f5b5fb463d8..00000000000 --- a/build/pkgs/mathics_scanner/SPKG.rst +++ /dev/null @@ -1,18 +0,0 @@ -mathics_scanner: Character Tables and Tokenizer for Mathics and the Wolfram Language -==================================================================================== - -Description ------------ - -Character Tables and Tokenizer for Mathics and the Wolfram Language - -License -------- - -GPL-3.0-only - -Upstream Contact ----------------- - -https://pypi.org/project/Mathics-Scanner/ - diff --git a/build/pkgs/mathics_scanner/checksums.ini b/build/pkgs/mathics_scanner/checksums.ini deleted file mode 100644 index 9d04979b6bd..00000000000 --- a/build/pkgs/mathics_scanner/checksums.ini +++ /dev/null @@ -1,4 +0,0 @@ -tarball=Mathics_Scanner-VERSION.tar.gz -sha1=c89bb997c1da04c1cfe945d16be96bdb0c6ae9a8 -sha256=7b05939751aacea42f3fc4e7eb1ab111f9fe32bae827e89f46a50e04907b19ef -upstream_url=https://pypi.io/packages/source/m/mathics_scanner/Mathics_Scanner-VERSION.tar.gz diff --git a/build/pkgs/mathics_scanner/dependencies b/build/pkgs/mathics_scanner/dependencies deleted file mode 100644 index 47296a7bace..00000000000 --- a/build/pkgs/mathics_scanner/dependencies +++ /dev/null @@ -1,4 +0,0 @@ - | $(PYTHON_TOOLCHAIN) $(PYTHON) - ----------- -All lines of this file are ignored except the first. diff --git a/build/pkgs/mathics_scanner/math b/build/pkgs/mathics_scanner/math deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/build/pkgs/mathics_scanner/package-version.txt b/build/pkgs/mathics_scanner/package-version.txt deleted file mode 100644 index e8ea05db814..00000000000 --- a/build/pkgs/mathics_scanner/package-version.txt +++ /dev/null @@ -1 +0,0 @@ -1.2.4 diff --git a/build/pkgs/mathics_scanner/spkg-configure.m4 b/build/pkgs/mathics_scanner/spkg-configure.m4 deleted file mode 100644 index 09917819a0f..00000000000 --- a/build/pkgs/mathics_scanner/spkg-configure.m4 +++ /dev/null @@ -1 +0,0 @@ -SAGE_SPKG_CONFIGURE([mathics_scanner], [SAGE_PYTHON_PACKAGE_CHECK([mathics_scanner])]) diff --git a/build/pkgs/mathics_scanner/spkg-install.in b/build/pkgs/mathics_scanner/spkg-install.in deleted file mode 100644 index 37ac1a53437..00000000000 --- a/build/pkgs/mathics_scanner/spkg-install.in +++ /dev/null @@ -1,2 +0,0 @@ -cd src -sdh_pip_install . diff --git a/build/pkgs/mathics_scanner/type b/build/pkgs/mathics_scanner/type deleted file mode 100644 index 134d9bc32d5..00000000000 --- a/build/pkgs/mathics_scanner/type +++ /dev/null @@ -1 +0,0 @@ -optional diff --git a/build/pkgs/mathics_scanner/version_requirements.txt b/build/pkgs/mathics_scanner/version_requirements.txt deleted file mode 100644 index 53e09a35113..00000000000 --- a/build/pkgs/mathics_scanner/version_requirements.txt +++ /dev/null @@ -1 +0,0 @@ -Mathics-Scanner diff --git a/build/pkgs/palettable/SPKG.rst b/build/pkgs/palettable/SPKG.rst deleted file mode 100644 index b0557d6c128..00000000000 --- a/build/pkgs/palettable/SPKG.rst +++ /dev/null @@ -1,16 +0,0 @@ -palettable: Color palettes for Python -===================================== - -Description ------------ - -Color palettes for Python - -License -------- - -Upstream Contact ----------------- - -https://pypi.org/project/palettable/ - diff --git a/build/pkgs/palettable/checksums.ini b/build/pkgs/palettable/checksums.ini deleted file mode 100644 index 1ec683df7d8..00000000000 --- a/build/pkgs/palettable/checksums.ini +++ /dev/null @@ -1,4 +0,0 @@ -tarball=palettable-VERSION.tar.gz -sha1=4bdbbeae7f20bc71ce8246cb5269da2c3046ad62 -sha256=72feca71cf7d79830cd6d9181b02edf227b867d503bec953cf9fa91bf44896bd -upstream_url=https://pypi.io/packages/source/p/palettable/palettable-VERSION.tar.gz diff --git a/build/pkgs/palettable/dependencies b/build/pkgs/palettable/dependencies deleted file mode 100644 index 47296a7bace..00000000000 --- a/build/pkgs/palettable/dependencies +++ /dev/null @@ -1,4 +0,0 @@ - | $(PYTHON_TOOLCHAIN) $(PYTHON) - ----------- -All lines of this file are ignored except the first. diff --git a/build/pkgs/palettable/distros/conda.txt b/build/pkgs/palettable/distros/conda.txt deleted file mode 100644 index 646dd7426bb..00000000000 --- a/build/pkgs/palettable/distros/conda.txt +++ /dev/null @@ -1 +0,0 @@ -palettable diff --git a/build/pkgs/palettable/package-version.txt b/build/pkgs/palettable/package-version.txt deleted file mode 100644 index 15a27998172..00000000000 --- a/build/pkgs/palettable/package-version.txt +++ /dev/null @@ -1 +0,0 @@ -3.3.0 diff --git a/build/pkgs/palettable/spkg-configure.m4 b/build/pkgs/palettable/spkg-configure.m4 deleted file mode 100644 index 76d3715e9fd..00000000000 --- a/build/pkgs/palettable/spkg-configure.m4 +++ /dev/null @@ -1 +0,0 @@ -SAGE_SPKG_CONFIGURE([palettable], [SAGE_PYTHON_PACKAGE_CHECK([palettable])]) diff --git a/build/pkgs/palettable/spkg-install.in b/build/pkgs/palettable/spkg-install.in deleted file mode 100644 index 37ac1a53437..00000000000 --- a/build/pkgs/palettable/spkg-install.in +++ /dev/null @@ -1,2 +0,0 @@ -cd src -sdh_pip_install . diff --git a/build/pkgs/palettable/type b/build/pkgs/palettable/type deleted file mode 100644 index 134d9bc32d5..00000000000 --- a/build/pkgs/palettable/type +++ /dev/null @@ -1 +0,0 @@ -optional diff --git a/build/pkgs/palettable/version_requirements.txt b/build/pkgs/palettable/version_requirements.txt deleted file mode 100644 index 646dd7426bb..00000000000 --- a/build/pkgs/palettable/version_requirements.txt +++ /dev/null @@ -1 +0,0 @@ -palettable diff --git a/build/pkgs/pint/SPKG.rst b/build/pkgs/pint/SPKG.rst deleted file mode 100644 index 05ee603025c..00000000000 --- a/build/pkgs/pint/SPKG.rst +++ /dev/null @@ -1,18 +0,0 @@ -pint: Physical quantities module -================================ - -Description ------------ - -Physical quantities module - -License -------- - -BSD - -Upstream Contact ----------------- - -https://pypi.org/project/Pint/ - diff --git a/build/pkgs/pint/checksums.ini b/build/pkgs/pint/checksums.ini deleted file mode 100644 index 7e883f32e55..00000000000 --- a/build/pkgs/pint/checksums.ini +++ /dev/null @@ -1,4 +0,0 @@ -tarball=Pint-VERSION.tar.gz -sha1=c14ac08ca2d5a68d79ea7cd2252dc7e2a572c56a -sha256=387cf04078dc7dfe4a708033baad54ab61d82ab06c4ee3d4922b1e45d5626067 -upstream_url=https://pypi.io/packages/source/p/pint/Pint-VERSION.tar.gz diff --git a/build/pkgs/pint/dependencies b/build/pkgs/pint/dependencies deleted file mode 100644 index 47296a7bace..00000000000 --- a/build/pkgs/pint/dependencies +++ /dev/null @@ -1,4 +0,0 @@ - | $(PYTHON_TOOLCHAIN) $(PYTHON) - ----------- -All lines of this file are ignored except the first. diff --git a/build/pkgs/pint/distros/conda.txt b/build/pkgs/pint/distros/conda.txt deleted file mode 100644 index 45f523a5a6e..00000000000 --- a/build/pkgs/pint/distros/conda.txt +++ /dev/null @@ -1 +0,0 @@ -pint diff --git a/build/pkgs/pint/package-version.txt b/build/pkgs/pint/package-version.txt deleted file mode 100644 index 847e9aef6d1..00000000000 --- a/build/pkgs/pint/package-version.txt +++ /dev/null @@ -1 +0,0 @@ -0.20.1 diff --git a/build/pkgs/pint/spkg-configure.m4 b/build/pkgs/pint/spkg-configure.m4 deleted file mode 100644 index bfa78b5f327..00000000000 --- a/build/pkgs/pint/spkg-configure.m4 +++ /dev/null @@ -1 +0,0 @@ -SAGE_SPKG_CONFIGURE([pint], [SAGE_PYTHON_PACKAGE_CHECK([pint])]) diff --git a/build/pkgs/pint/spkg-install.in b/build/pkgs/pint/spkg-install.in deleted file mode 100644 index 37ac1a53437..00000000000 --- a/build/pkgs/pint/spkg-install.in +++ /dev/null @@ -1,2 +0,0 @@ -cd src -sdh_pip_install . diff --git a/build/pkgs/pint/type b/build/pkgs/pint/type deleted file mode 100644 index 134d9bc32d5..00000000000 --- a/build/pkgs/pint/type +++ /dev/null @@ -1 +0,0 @@ -optional diff --git a/build/pkgs/pint/version_requirements.txt b/build/pkgs/pint/version_requirements.txt deleted file mode 100644 index a3031611162..00000000000 --- a/build/pkgs/pint/version_requirements.txt +++ /dev/null @@ -1 +0,0 @@ -Pint diff --git a/src/sage/doctest/external.py b/src/sage/doctest/external.py index e1f00d0e740..aa158c76671 100644 --- a/src/sage/doctest/external.py +++ b/src/sage/doctest/external.py @@ -356,7 +356,9 @@ def external_features(): import sage.features.ffmpeg yield from sage.features.ffmpeg.all_features() import sage.features.interfaces - yield from sage.features.interfaces.all_features() + for feature in sage.features.interfaces.all_features(): + if feature.name != 'mathics': + yield feature from sage.features.mip_backends import CPLEX, Gurobi yield CPLEX() yield Gurobi() diff --git a/src/sage/features/interfaces.py b/src/sage/features/interfaces.py index 6d5249ab443..7bb061270fc 100644 --- a/src/sage/features/interfaces.py +++ b/src/sage/features/interfaces.py @@ -91,6 +91,23 @@ def _is_present(self): reason=f"Interface {interface} is not functional: {exception}") +class Mathics(InterfaceFeature): + r""" + A :class:`~sage.features.Feature` describing whether :class:`sage.interfaces.mathics.Mathics` + is present and functional. + + EXAMPLES:: + + sage: from sage.features.interfaces import Mathics + sage: Mathics().is_present() # not tested + FeatureTestResult('mathics', False) + """ + + @staticmethod + def __classcall__(cls): + return InterfaceFeature.__classcall__(cls, 'mathics', 'sage.interfaces.mathics') + + # The following are provided by external software only (no SPKG) class Magma(InterfaceFeature): @@ -223,6 +240,7 @@ def all_features(): [Feature('magma'), Feature('matlab'), Feature('mathematica'), + Feature('mathics'), Feature('maple'), Feature('macaulay2'), Feature('octave'), @@ -231,6 +249,7 @@ def all_features(): return [Magma(), Matlab(), Mathematica(), + Mathics(), Maple(), Macaulay2(), Octave(), diff --git a/src/sage/interfaces/mathics.py b/src/sage/interfaces/mathics.py index b6ffbd3d4f2..473bb9dae71 100644 --- a/src/sage/interfaces/mathics.py +++ b/src/sage/interfaces/mathics.py @@ -341,7 +341,7 @@ :: sage: mathics('10.^80') # optional - mathics - 1.*^80 + 1.×10^80 sage: mathics('10.^80').sage() # optional - mathics 1.00000000000000e80 @@ -483,6 +483,7 @@ def __init__(self, self._seed = seed self._initialized = False # done lazily self._session = None + os.environ['MATHICS_CHARACTER_ENCODING'] = 'ASCII' # see :issue:`37395` def _lazy_init(self): r""" @@ -512,6 +513,8 @@ def _start(self): """ if not self._session: from mathics.session import MathicsSession + from mathics.core.load_builtin import import_and_load_builtins + import_and_load_builtins() self._session = MathicsSession() from sage.interfaces.sympy import sympy_init sympy_init() @@ -601,7 +604,7 @@ def get(self, var): sage: mathics.set('u', '2*x +E') # optional - mathics sage: mathics.get('u') # optional - mathics - 'E + 2 x' + '2 x + E' """ return self.eval(var) @@ -717,9 +720,9 @@ def _exponent_symbol(self): sage: bignum = mathics('10.^80') # optional - mathics sage: repr(bignum) # optional - mathics - '1.*^80' + '1.×10^80' sage: repr(bignum).replace(mathics._exponent_symbol(), 'e').strip() # optional - mathics - '1.e80' + '1.×10^80' """ return '*^' @@ -772,34 +775,25 @@ def help(self, cmd, long=False): EXAMPLES:: sage: mathics.help('Sin') # optional - mathics - "\n 'Sin[z]'\n returns the sine of z.\n" + 'sine function\n' sage: print(_) # optional - mathics - - 'Sin[z]' - returns the sine of z. + sine function sage: print(mathics.help('Sin', long=True)) # optional - mathics - - 'Sin[z]' - returns the sine of z. + sine function Attributes[Sin] = {Listable, NumericFunction, Protected} sage: print(mathics.Factorial.__doc__) # optional - mathics - - 'Factorial[n]' - 'n!' - computes the factorial of n. + factorial sage: u = mathics('Pi') # optional - mathics sage: print(u.Cos.__doc__) # optional - mathics - - 'Cos[z]' - returns the cosine of z. + cosine function """ if long: @@ -852,7 +846,7 @@ class MathicsElement(ExtraTabCompletion, InterfaceElement): sage: expr = res.last_eval; expr sage: type(expr) - + Applying Mathics methods:: @@ -863,8 +857,6 @@ class MathicsElement(ExtraTabCompletion, InterfaceElement): 'System`E' sage: me.is_inexact() False - sage: me.is_symbol() - True Conversion to Sage:: diff --git a/src/sage/libs/mpmath/ext_main.pyx b/src/sage/libs/mpmath/ext_main.pyx index 29d524536ea..d4ffc5fa5c0 100644 --- a/src/sage/libs/mpmath/ext_main.pyx +++ b/src/sage/libs/mpmath/ext_main.pyx @@ -2135,6 +2135,9 @@ cdef class mpf(mpf_base): MPF_sqrt(&r.value, &s.value, global_opts) return r + def __round__(self, *args): + return round(float(self), *args) + def __richcmp__(self, other, int op): """ Compares numbers ::