Giter Club home page Giter Club logo

sagemath / sage-archive-2023-02-01 Goto Github PK

View Code? Open in Web Editor NEW
2.0K 131.0 418.0 317.67 MB

This repository used to be the user-facing mirror of the Sage source tree. As Sage development migrated on 2023-02-01 from https://trac.sagemath.org/ to our new repository on GitHub, https://github.com/sagemath/sage, we have renamed and archived this repository.

Home Page: https://www.sagemath.org

License: Other

Makefile 0.05% Shell 0.32% Python 71.57% C 0.21% C++ 1.79% HTML 0.85% GAP 0.04% Gnuplot 0.21% TeX 0.01% Batchfile 0.01% M4 0.41% JavaScript 0.02% Ruby 0.01% Emacs Lisp 0.01% MATLAB 0.03% Smarty 0.01% Dockerfile 0.02% CSS 0.01% Common Lisp 0.01% Cython 24.47%
math sage python mathematics algorithms computer-algebra science

sage-archive-2023-02-01's Introduction

Sage: Open Source Mathematical Software

"Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, and MATLAB"

Copyright (C) 2005-2022 The Sage Development Team

https://www.sagemath.org

The Sage Library is free software released under the GNU General Public Licence GPLv2+, and included packages have compatible software licenses. Over 800 people have contributed code to Sage. In many cases, documentation for modules and functions list the authors.

Getting Started

The Sage Installation Guide provides a decision tree that guides you to the type of installation that will work best for you. This includes building from source, obtaining Sage from a package manager, using a container image, or using Sage in the cloud.

This README contains self-contained instructions for building Sage from source. It assumes that you have already cloned the git repository or downloaded the sources in the form of a tarball.

If you have questions or encounter problems, please do not hesitate to email the sage-support mailing list or ask on the Ask Sage questions and answers site.

Supported Platforms

Sage attempts to support all major Linux distributions, recent versions of macOS, and Windows (using Windows Subsystem for Linux or virtualization).

Detailed information on supported platforms for a specific version of Sage can be found in the section "Availability and installation help" of the release tour for this version.

We highly appreciate contributions to Sage that fix portability bugs and help port Sage to new platforms; let us know at the sage-devel mailing list.

[Windows] Preparing the Platform

The preferred way to run Sage on Windows is using the Windows Subsystem for Linux, which allows you to install a standard Linux distribution such as Ubuntu within your Windows. Then all instructions for installation in Linux apply.

As an alternative, you can also run Linux on Windows using Docker (see above) or other virtualization solutions.

[macOS] Preparing the Platform

If your Mac uses the Apple Silicon (M1, arm64) architecture:

  • If you set up your Mac by transfering files from an older Mac, make sure that the directory /usr/local does not contain an old copy of Homebrew (or other software) for the x86_64 architecture that you may have copied over. Note that Homebrew for the M1 is installed in /opt/homebrew, not /usr/local.

  • If you wish to use conda, please see the section on conda in the Sage Installation Manual for guidance.

  • Otherwise, using Homebrew ("the missing package manager for macOS") from https://brew.sh/ required because it provides a version of gfortran with necessary changes for this platform that are not in a released upstream version of GCC. (The gfortran package that comes with the Sage distribution is not suitable for the M1/M2.)

If your Mac uses the Intel (x86_64) architecture:

  • If you wish to use conda, please see the section on conda in the Sage Installation Manual for guidance.

  • Otherwise, we strongly recommend to use Homebrew ("the missing package manager for macOS") from https://brew.sh/, which provides the gfortran compiler and many libraries.

  • Otherwise, if you do not wish to install Homebrew, you will need to install the latest version of Xcode Command Line Tools. Open a terminal window and run xcode-select --install; then click "Install" in the pop-up window. If the Xcode Command Line Tools are already installed, you may want to check if they need to be updated by typing softwareupdate -l.

Instructions to Build from Source

Like many other software packages, Sage is built from source using ./configure, followed by make. However, we strongly recommend to read the following step-by-step instructions for building Sage.

The instructions cover all of Linux, macOS, and WSL.

More details, providing a background for these instructions, can be found in the section "Install from Source Code". in the Installation Guide.

  1. Decide on the source/build directory (SAGE_ROOT):

    • On personal computers, any subdirectory of your :envvar:HOME directory should do.

    • For example, you could use SAGE_ROOT=~/sage/sage-x.y, which we will use as the running example below, where x.y is the current Sage version.

    • You need at least 10 GB of free disk space.

    • The full path to the source directory must contain no spaces.

    • After starting the build, you cannot move the source/build directory without breaking things.

    • You may want to avoid slow filesystems such as network file systems (NFS) and the like.

    • [macOS] macOS allows changing directories without using exact capitalization. Beware of this convenience when compiling for macOS. Ignoring exact capitalization when changing into :envvar:SAGE_ROOT can lead to build errors for dependencies requiring exact capitalization in path names.

  2. Download/unpack or clone the sources.

    • Go to https://www.sagemath.org/download-source.html, select a mirror, and download the file :file:sage-x.y.tar.gz.

      This compressed archive file contains the source code for Sage and the source for all programs on which Sage depends.

    • After downloading the source tarball sage-x.y.tar.gz into ~/sage/:

        $ cd ~/sage/
        $ tar xf sage-x.y.tar.gz  # adapt x.y; takes a while
      

      This creates the subdirectory sage-x.y. Now change into it:

        $ cd sage-x.y/  # adapt x.y
      
    • [Git] Alternatively, and required for Sage development, clone the Sage git repository:

        $ ORIG=https://github.com/sagemath/sage.git
        $ git clone -c core.symlinks=true --branch develop --tags $ORIG
      

      This will create the directory sage. (See the section Setting up git and the following sections in the Sage Developer's Guide for more information.)

      Change into it and pick the branch you need, typically the latest development branch:

        $ cd sage
        $ git checkout develop
      
    • [Windows] The Sage source tree contains symbolic links, and the build will not work if Windows line endings rather than UNIX line endings are used.

      Therefore it is crucial that you unpack the source tree from the WSL bash using the WSL tar utility and not using other Windows tools (including mingw). Likewise, when using git, it is recommended (but not necessary) to use the WSL version of git.

  3. [Linux, WSL] Install the required minimal build prerequisites.

    • Compilers: gcc, gfortran, g++ (GCC 8.x to 12.x and recent versions of Clang (LLVM) are supported). See build/pkgs/gcc/SPKG.rst and build/pkgs/gfortran/SPKG.rst for a discussion of suitable compilers.

    • Build tools: GNU make, GNU m4, perl (including ExtUtils::MakeMaker), ranlib, git, tar, bc. See build/pkgs/_prereq/SPKG.rst for more details.

    • Python 3.4 or later, or Python 2.7, a full installation including urllib; but ideally version 3.8.x, 3.9.x, or 3.10.x, which will avoid having to build Sage's own copy of Python 3. See build/pkgs/python3/SPKG.rst for more details.

    We have collected lists of system packages that provide these build prerequisites. See, in the folder build/pkgs/_prereq/distros, the files arch.txt, debian.txt (also for Ubuntu, Linux Mint, etc.), fedora.txt (also for Red Hat, CentOS), opensuse.txt, slackware.txt, and void.txt, or visit https://doc.sagemath.org/html/en/reference/spkg/_prereq.html#spkg-prereq

  4. [Git] If you plan to do Sage development or otherwise work with ticket branches and not only releases, install the bootstrapping prerequisites. See the files in the folder build/pkgs/_bootstrap/distros, or visit https://doc.sagemath.org/html/en/reference/spkg/_bootstrap.html#spkg-bootstrap

  5. [Git] If you cloned the Sage repository using git, bootstrap the source tree using the following command:

    $ make configure
    

    (If the bootstrapping prerequisites are not installed, this command will download a package providing pre-built bootstrap output instead.)

  6. Sanitize the build environment. Use the command

    $ env
    

    to inspect the current environment variables, in particular PATH, PKG_CONFIG_PATH, LD_LIBRARY_PATH, CFLAGS, CPPFLAGS, CXXFLAGS, and LDFLAGS (if set).

    Remove items from these (colon-separated) environment variables that Sage should not use for its own build. In particular, remove items if they refer to a previous Sage installation.

    • [WSL] In particular, WSL imports many items from the Windows PATH variable into the Linux environment, which can lead to confusing build errors. These items typically start with /mnt/c. It is best to remove all of them from the environment variables. For example, you can set PATH using the command:

        $ export PATH=/usr/sbin/:/sbin/:/bin/:/usr/lib/wsl/lib/
      
    • [macOS with homebrew] Set required environment variables for the build:

        $ source ./.homebrew-build-env
      

      This is to make some of Homebrew's packages (so-called keg-only packages) available for the build. Run it once to apply the suggestions for the current terminal session. You may need to repeat this command before you rebuild Sage from a new terminal session, or after installing additional homebrew packages. (You can also add it to your shell profile so that it gets run automatically in all future sessions.)

  7. Optionally, decide on the installation prefix (SAGE_LOCAL):

    • Traditionally, and by default, Sage is installed into the subdirectory hierarchy rooted at SAGE_ROOT/local/.

    • This can be changed using ./configure --prefix=SAGE_LOCAL, where SAGE_LOCAL is the desired installation prefix, which must be writable by the user.

      If you use this option in combination with --disable-editable, you can delete the entire Sage source tree after completing the build process. What is installed in SAGE_LOCAL will be a self-contained installation of Sage.

    • Note that in Sage's build process, make builds and installs (make install is a no-op). Therefore the installation hierarchy must be writable by the user.

    • See the installation manual for options if you want to install into shared locations such as /usr/local/. Do not attempt to build Sage as root.

  8. Optional: It is recommended that you have both LaTeX and the ImageMagick tools (e.g. the "convert" command) installed since some plotting functionality benefits from them.

  9. Optionally, review the configuration options, which includes many optional packages:

    $ ./configure --help
    

    A notable option for Sage developers is the following:

    • Use ./configure --enable-download-from-upstream-url to allow downloading packages from their upstream URL if they cannot (yet) be found on the Sage mirrors. This is useful for trying out ticket branches that make package upgrades.
  10. Optional, but highly recommended: Set some environment variables to customize the build.

    For example, the MAKE environment variable controls whether to run several jobs in parallel. On a machine with 4 processors, say, typing export MAKE="make -j4" will configure the build script to perform a parallel compilation of Sage using 4 jobs. On some powerful machines, you might even consider -j16, as building with more jobs than CPU cores can speed things up further.

    To reduce the terminal output during the build, type export V=0. (V stands for "verbosity".)

    Some environment variables deserve a special mention: CC, CXX and FC. These variables defining your compilers can be set at configuration time and their values will be recorded for further use at build time and runtime.

    For an in-depth discussion of more environment variables for building Sage, see the installation guide.

  11. Type ./configure, followed by any options that you wish to use. For example, to build Sage with gf2x package supplied by Sage, use ./configure --with-system-gf2x=no.

    At the end of a successful ./configure run, you may see messages recommending to install extra system packages using your package manager.

    For a large list of Sage packages, Sage is able to detect whether an installed system package is suitable for use with Sage; in that case, Sage will not build another copy from source.

    Sometimes, the messages will recommend to install packages that are already installed on your system. See the earlier configure messages or the file config.log for explanation. Also, the messages may recommend to install packages that are actually not available; only the most recent releases of your distribution will have all of these recommended packages.

  12. Optional: If you choose to install the additional system packages, a re-run of ./configure will test whether the versions installed are usable for Sage; if they are, this will reduce the compilation time and disk space needed by Sage. The usage of packages may be adjusted by ./configure parameters (check again the output of ./configure --help).

  13. Type make. That's it! Everything is automatic and non-interactive.

    If you followed the above instructions, in particular regarding the installation of system packages recommended by the output of ./configure (step 10), and regarding the parallel build (step 9), building Sage takes less than one hour on a modern computer. (Otherwise, it can take much longer.)

    The build should work fine on all fully supported platforms. If it does not, we want to know!

  14. Type ./sage to try it out. In Sage, try for example 2 + 2, plot(x^2), plot3d(lambda x, y: x*y, (-1, 1), (-1, 1)) to test a simple computation and plotting in 2D and 3D. Type Ctrl+D or quit to quit Sage.

  15. Optional: Type make ptestlong to test all examples in the documentation (over 200,000 lines of input!) -- this takes from 10 minutes to several hours. Don't get too disturbed if there are 2 to 3 failures, but always feel free to email the section of logs/ptestlong.log that contains errors to the sage-support mailing list. If there are numerous failures, there was a serious problem with your build.

  16. The HTML version of the documentation is built during the compilation process of Sage and resides in the directory local/share/doc/sage/html/. You may want to bookmark it in your browser.

  17. Optional: If you want to build the PDF version of the documentation, run make doc-pdf (this requires LaTeX to be installed).

  18. Optional: Install optional packages of interest to you: get a list by typing ./sage --optional or by visiting the packages documentation page.

  19. Optional: Create a symlink to the installed sage script in a directory in your PATH, for example /usr/local. This will allow you to start Sage by typing sage from anywhere rather than having to either type the full path or navigate to the Sage directory and type ./sage. This can be done by running:

    $ sudo ln -s $(./sage -sh -c 'ls $SAGE_ROOT/venv/bin/sage') /usr/local/bin
    
  20. Optional: Set up SageMath as a Jupyter kernel in an existing Jupyter notebook or JupyterLab installation, as described in section "Launching SageMath" in the installation manual.

Troubleshooting

If you have problems building Sage, check the Sage Installation Guide, as well as the version-specific Sage Installation FAQ in the Sage Release Tour corresponding to the version that you are installing.

Please do not hesitate to ask for help in the SageMath forum or the sage-support mailing list. The Troubleshooting section in the Sage Installation Guide provides instructions on what information to provide so that we can provide help more effectively.

Contributing to Sage

If you'd like to contribute to Sage, we strongly recommend that you read the Developer's Guide.

Sage has significant components written in the following languages: C/C++, Python, Cython, Common Lisp, Fortran, and a bit of Perl.

Directory Layout

Simplified directory layout (only essential files/directories):

SAGE_ROOT                 Root directory (sage-x.y in Sage tarball)
├── build
│   └── pkgs              Every package is a subdirectory here
│       ├── 4ti2/
│       …
│       └── zlib/
├── configure             Top-level configure script
├── COPYING.txt           Copyright information
├── pkgs                  Source trees of Python distribution packages
│   ├── sage-conf
│   │   ├── sage_conf.py
│   │   └── setup.py
│   ├── sage-docbuild
│   │   ├── sage_docbuild/
│   │   └── setup.py
│   ├── sage-setup
│   │   ├── sage_setup/
│   │   └── setup.py
│   ├── sage-sws2rst
│   │   ├── sage_sws2rst/
│   │   └── setup.py
│   └── sagemath-standard
│       ├── bin/
│       ├── sage -> ../../src/sage
│       └── setup.py
├── local  (SAGE_LOCAL)   Installation hierarchy for non-Python packages
│   ├── bin               Executables
│   ├── include           C/C++ headers
│   ├── lib               Shared libraries, architecture-dependent data
│   ├── share             Databases, architecture-independent data, docs
│   │   └── doc           Viewable docs of Sage and of some components
│   └── var
│       ├── lib/sage
│       │   ├── installed/
│       │   │             Records of installed non-Python packages
│       │   ├── scripts/  Scripts for uninstalling installed packages
│       │   └── venv-python3.9  (SAGE_VENV)
│       │       │         Installation hierarchy (virtual environment)
│       │       │         for Python packages
│       │       ├── bin/  Executables and installed scripts
│       │       ├── lib/python3.9/site-packages/
│       │       │         Python modules/packages are installed here
│       │       └── var/lib/sage/
│       │           └── wheels/
│       │                 Python wheels for all installed Python packages
│       │
│       └── tmp/sage/     Temporary files when building Sage
├── logs
│   ├── install.log       Full install log
│   └── pkgs              Build logs of individual packages
│       ├── alabaster-0.7.12.log
│       …
│       └── zlib-1.2.11.log
├── m4                    M4 macros for generating the configure script
│   └── *.m4
├── Makefile              Running "make" uses this file
├── prefix -> SAGE_LOCAL  Convenience symlink to the installation tree
├── README.md             This file
├── sage                  Script to start Sage
├── src                   Monolithic Sage library source tree
│   ├── bin/              Scripts that Sage uses internally
│   ├── doc/              Sage documentation sources
│   └── sage/             The Sage library source code
├── upstream              Source tarballs of packages
│   ├── Babel-2.9.1.tar.gz
│   …
│   └── zlib-1.2.11.tar.gz
├── venv -> SAGE_VENV     Convenience symlink to the virtual environment
└── VERSION.txt

For more details see our Developer's Guide.

Build System

This is a brief summary of the Sage software distribution's build system. There are two components to the full Sage system--the Sage Python library and its associated user interfaces, and the larger software distribution of Sage's main dependencies (for those dependencies not supplied by the user's system).

Sage's Python library is built and installed using a setup.py script as is standard for Python packages (Sage's setup.py is non-trivial, but not unusual).

Most of the rest of the build system is concerned with building all of Sage's dependencies in the correct order in relation to each other. The dependencies included by Sage are referred to as SPKGs (i.e. "Sage Packages") and are listed under build/pkgs.

The main entrypoint to Sage's build system is the top-level Makefile at the root of the source tree. Unlike most normal projects that use autoconf (Sage does as well, as described below), this Makefile is not generated. Instead, it contains a few high-level targets and targets related to bootstrapping the system. Nonetheless, we still run make <target> from the root of the source tree--targets not explicitly defined in the top-level Makefile are passed through to another Makefile under build/make/Makefile.

The latter build/make/Makefile is generated by an autoconf-generated configure script, using the template in build/make/Makefile.in. This includes rules for building the Sage library itself (make sagelib), and for building and installing each of Sage's dependencies (e.g. make gf2x).

The configure script itself, if it is not already built, can be generated by running the bootstrap script (the latter requires GNU autotools being installed). The top-level Makefile also takes care of this automatically.

To summarize, running a command like make python3 at the top-level of the source tree goes something like this:

  1. make python3
  2. run ./bootstrap if configure needs updating
  3. run ./configure with any previously configured options if build/make/Makefile needs updating
  4. change directory into build/make and run the install script--this is little more than a front-end to running make -f build/make/Makefile python3, which sets some necessary environment variables and logs some information
  5. build/make/Makefile contains the actual rule for building python3; this includes building all of python3's dependencies first (and their dependencies, recursively); the actual package installation is performed with the sage-spkg program

Relocation

It is not supported to move the SAGE_ROOT or SAGE_LOCAL directory after building Sage. If you do move the directories, you will have to run make distclean and build Sage again from scratch.

For a system-wide installation, you have to build Sage as a "normal" user and then as root you can change permissions. See the Installation Guide for further information.

Redistribution

Your local Sage install is almost exactly the same as any "developer" install. You can make changes to documentation, source, etc., and very easily package the complete results up for redistribution just like we do.

  1. To make a binary distribution with your currently installed packages, visit sagemath/binary-pkg.

  2. To make your own source tarball of Sage, type:

    $ make dist
    

    The result is placed in the directory dist/.

Changes to Included Software

All software included with Sage is copyrighted by the respective authors and released under an open source license that is GPL version 3 or later compatible. See COPYING.txt for more details.

Sources are in unmodified (as far as possible) tarballs in the upstream/ directory. The remaining description, version information, patches, and build scripts are in the accompanying build/pkgs/<packagename> directory. This directory is part of the Sage git repository.

sage-archive-2023-02-01's People

Contributors

behackl avatar cheuberg avatar darijgr avatar dcoudert avatar dimpase avatar dkrenn avatar egourgoulhon avatar embray avatar fchapoton avatar jdemeyer avatar jhpalmieri avatar jm58660 avatar johncremona avatar kwankyu avatar mantepse avatar mezzarobba avatar mkoeppe avatar mwhansen avatar nathanncohen avatar nthiery avatar pjbruin avatar robertwb avatar roed314 avatar rwst avatar saraedum avatar simon-king-jena avatar tscrim avatar vbraun avatar videlec avatar williamstein avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sage-archive-2023-02-01's Issues

bug in the matrix.pseudoinverse()

Sorry for the title:

I find a bug in the matrix.pseudoinverse()

https://github.com/sagemath/sage/blob/9db4320e485ed0aeae56d2c9dfc91fabe14659b1/src/sage/matrix/matrix2.pyx#L1199

Basically, one first decomposes S = AB where rank(A) = rank(B) = rank(S).
But in certain circumstances, B could be an identity matrix, which makes S = A,
S^+ = (St * S)^(-1) * At and sometimes St*S is not full rank.

For example, the following matrix over GF(2) will fail over this implementation matrix.pseudoinverse()

[1 0 0 0 1 0 0 0 0 1]
[0 0 0 0 1 1 0 0 0 0]
[1 0 0 0 1 0 0 0 0 0]
[0 1 1 0 1 1 1 0 1 0]
[0 0 0 1 0 0 1 0 0 0]
[0 1 1 0 1 1 0 0 0 0]
[0 1 0 0 1 0 1 0 0 0]
[0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 0 1 0 1 0]
[0 0 0 1 0 0 1 0 0 1]
[0 0 0 0 1 0 0 1 0 0]
[0 0 0 0 0 0 1 0 0 0]

zenodo settings

Could the person who set up zenodo for sagemath please step forward and either remove it from zenodo, or, better fix it so that it works again (the easiest might be to deactivate/activate it).
Unfortunately zenodo does not allow "repo team members" to change the repo settings, it must be done by the same person who set it up.

Compilation of custom C code from Cython

Hi,

I have code on https://github.com/okazymyrov/sbox. It works fine with sage 7.1 . However, in SageMath 8.1 I get warnings like:

/Users/okazymyrov/bin/sage8.1/local/lib/python2.7/site-packages/sage/misc/cython.py:313: DeprecationWarning: the Sage-specific Cython pragma '#clang' is deprecated;
use '# distutils: language' instead

but the code is running. When I change # cfile /Users/okazymyrov/Downloads/sbox/C/CI.c
to # distutils: sources = /Users/okazymyrov/Downloads/sbox/C/CI.c
in Cython/CFunc.spyx I get the error

Compiling /Users/okazymyrov/Downloads/sbox/Sage/../Cython/CFunc.spyx...
/Users/okazymyrov/bin/sage8.1/local/lib/python2.7/site-packages/sage/misc/cython.py:322: DeprecationWarning: the Sage-specific Cython pragma '#cfile' is deprecated;
use '# distutils: sources' instead
See http://trac.sagemath.org/24105 for details.
  additional_source_files, s = _parse_keywords('cfile', s)
Traceback (most recent call last):
  File "./Main.sage.py", line 27, in <module>
    load("./TestFunctions.sage")
  File "sage/structure/sage_object.pyx", line 1057, in sage.structure.sage_object.load (build/cythonized/sage/structure/sage_object.c:12915)
  File "/Users/okazymyrov/bin/sage8.1/local/lib/python2.7/site-packages/sage/repl/load.py", line 247, in load
    exec(preparse_file(open(fpath).read()) + "\n", globals)
  File "<string>", line 21, in <module>
  File "sage/structure/sage_object.pyx", line 1057, in sage.structure.sage_object.load (build/cythonized/sage/structure/sage_object.c:12915)
  File "/Users/okazymyrov/bin/sage8.1/local/lib/python2.7/site-packages/sage/repl/load.py", line 247, in load
    exec(preparse_file(open(fpath).read()) + "\n", globals)
  File "<string>", line 41, in <module>
  File "sage/structure/sage_object.pyx", line 1057, in sage.structure.sage_object.load (build/cythonized/sage/structure/sage_object.c:12915)
  File "/Users/okazymyrov/bin/sage8.1/local/lib/python2.7/site-packages/sage/repl/load.py", line 251, in load
    exec(load_cython(fpath), globals)
  File "<string>", line 1, in <module>
ImportError: dlopen(/Users/okazymyrov/.sage/temp/hamsin.local/37857/spyx/_Users_okazymyrov_Downloads_sbox_Cython_CFunc_spyx/_Users_okazymyrov_Downloads_sbox_Cython_CFunc_spyx_0.so, 2): Symbol not found: _CI
  Referenced from: /Users/okazymyrov/.sage/temp/hamsin.local/37857/spyx/_Users_okazymyrov_Downloads_sbox_Cython_CFunc_spyx/_Users_okazymyrov_Downloads_sbox_Cython_CFunc_spyx_0.so
  Expected in: flat namespace
 in /Users/okazymyrov/.sage/temp/hamsin.local/37857/spyx/_Users_okazymyrov_Downloads_sbox_Cython_CFunc_spyx/_Users_okazymyrov_Downloads_sbox_Cython_CFunc_spyx_0.so

The load sequence is the following:

  1. Main.sage loads Sbox.sage
  2. Sbox.sage loads CFunc.spyx
  3. CFunc.spyx must be compiled with other C files located in ./C

System info:

bash-3.2$ sage --version
SageMath version 8.1, Release Date: 2017-12-07
bash-3.2$ uname -a
Darwin hamsin.local 17.5.0 Darwin Kernel Version 17.5.0: Mon Mar  5 22:24:32 PST 2018; root:xnu-4570.51.1~1/RELEASE_X86_64 x86_64

Might be a bug in the Cython parse class?

Kind regards,
Oleksandr

Enable intersphinx links to SageMath's documentation

When configuring Sphinx for documenting a package, it's in principle very easy to enable cross links to the Sage documentation, with:

intersphinx_mapping = {'https://docs.python.org/': None,
                                      'https://doc.sagemath.org/html/en/reference/': None}

That's a nice feature that packages built on top of Sage will want to exploit.

However, upon make html, I get:

WARNING: intersphinx inventory 'https://doc.sagemath.org/html/en/reference/objects.inv' not fetchable due to <class 'urllib2.HTTPError'>: HTTP Error 403: Forbidden

even though the file can be downloaded with e.g. wget.

I assume that the user agent "Python-urlib2" is considered by default as being a robot. Would it be possible to configure robots.txt to accept calls from urllib2 or just enable any user agent to retrieve objects.inv?

An alternative would be to dig in Sphinx's code and set a different user agent. I haven't quite yet managed to do that. But in any cases, this adds a piece of burden to package writers.

cc: @haraldschilly

Don't detect all cpus with last docker images of sagemath

hello,

  • with version 8.0 of sagemath/sagemath image docker, i detect all my cpus:
    $ docker run -it --rm sagemath/sagemath:8.0 sage
    SageMath version 8.0, Release Date: 2017-07-21
    Forcing sage-location, probably because a new package was installed.
    Updating various hardcoded paths...
    (Please wait at most a few minutes.)
    DO NOT INTERRUPT THIS.
    Done updating paths.
    sage: sage.parallel.ncpus.ncpus()
    8

  • with version 8.1 and latest i detect only one cpu:
    docker run -it --rm sagemath/sagemath:latest sage
    ┌───────────────────────────────────────────────────────────────┐
    │ SageMath version 8.2, Release Date: 2018-05-05 │
    │ Type "notebook()" for the browser-based notebook interface. │
    │ Type "help()" for help. │
    └───────────────────────────────────────────────────────────────┘
    Setting permissions of DOT_SAGE directory so only you can read and write it.
    sage: sage.parallel.ncpus.ncpus()
    1

and if i launch "nproc" in container i have all my cpus:
docker run -it --rm sagemath/sagemath:latest nproc
8

Can you help me , please

Upgrade to 5.10.beta1 stuck at "hg id -i ." in python-2.7.4 build directory

I am trying to upgrade my sage-5.9.rc0 to sage-5.10.beta1. However the upgrade is stuck at a command for over 5 minutes: /usr/bin/python2.7 /usr/bin/hg id -i .. First of all, why is it not using the (already present) python from sage and secondly, why is it stuck in that?

Doing that exact command manually in the python2.7.4 build directory exits immediately when run outside the sage shell. But when it is run inside the sage shell, it is stuck just as in the build.

Attached screenshot might help in seeing what I am seeing.
s

Equation solving

How to use sage to solve equations of variables which are variables of a polynomial ring?

Substitution of variable doesn't always work when variable's name and representation are different

I recently started using Sagemath and I noticed this behavior:

>>> a1=var('a_1')
>>> E=x^a1
>>> E(a1=1)

 a₁
x  
>>> E(a_1=1)
x

Should this be the behavior? I feel like this is a bug and the correct way would be to indeed use E(a1=1) because that is the name of the variable, while a_1 is just its representation. For example, if I use Sympy's syntax it works as it should:

>>> E.subs({a1:1})
x

I'm using SageMath version 7.5.1 compiled for Linux Mint 18.1.

SageMath version 9.0 errors

~$ sage
┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 9.0, Release Date: 2020-01-01 │
│ Using Python 3.8.6. Type "help()" for help. │
└────────────────────────────────────────────────────────────────────┘
Traceback (most recent call last):
File "/usr/share/sagemath/bin/sage-ipython", line 12, in
from sage.repl.interpreter import SageTerminalApp
File "/usr/lib/python3/dist-packages/sage/repl/interpreter.py", line 105, in
from sage.repl.preparse import preparse, containing_block
File "/usr/lib/python3/dist-packages/sage/repl/preparse.py", line 227, in
from sage.repl.load import load_wrap
File "/usr/lib/python3/dist-packages/sage/repl/load.py", line 19, in
from sage.cpython.string import str_to_bytes, bytes_to_str, FS_ENCODING
ModuleNotFoundError: No module named 'sage.cpython.string'
~$ uname -a
Linux lhw 5.8.0-19-generic #20-Ubuntu SMP Fri Sep 11 09:08:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
~$

simplify removes conjugate

The conjugate from complex_var should not be removed by simplify. Can someone explain this behaviour to me?

var('real_var', domain='real')
var('complex_var', domain='complex')
print(simplify(conjugate(real_var)))
print(simplify(conjugate(complex_var)))

Sage Version 5.11, Release Date: 2013-08-13

Weird bug in Sphinx duplicate label handling

(Putting bug report here for now until Trac is back up)

While building the docs I got this traceback:

[developer] /home/embray/src/sagemath/sage/src/doc/en/developer/coding_in_other.rst:160: WARNING: duplicate label section-gap, other instance in /home/embray/src/sagemath/sage/src/doc/en/developer/interfaces.rst
Error building the documentation.
Traceback (most recent call last):
  File "/home/embray/src/sagemath/sage/local/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/embray/src/sagemath/sage/local/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/embray/src/sagemath/sage/local/lib/python2.7/site-packages/sage_setup/docbuild/__main__.py", line 2, in <module>
    main()
  File "/home/embray/src/sagemath/sage/local/lib/python2.7/site-packages/sage_setup/docbuild/__init__.py", line 1637, in main
    builder()
  File "/home/embray/src/sagemath/sage/local/lib/python2.7/site-packages/sage_setup/docbuild/__init__.py", line 320, in _wrapper
    map_parallel(build_other_doc, L)
  File "/home/embray/src/sagemath/sage/local/lib/python2.7/site-packages/sage_setup/docbuild/__init__.py", line 142, in map_parallel
    return map(func, args)
  File "/home/embray/src/sagemath/sage/local/lib/python2.7/site-packages/sage_setup/docbuild/__init__.py", line 280, in build_other_doc
    getattr(get_builder(document), name)(*args, **kwds)
  File "/home/embray/src/sagemath/sage/local/lib/python2.7/site-packages/sage_setup/docbuild/__init__.py", line 103, in f
    runsphinx()
  File "/home/embray/src/sagemath/sage/local/lib/python2.7/site-packages/sage_setup/docbuild/sphinxbuild.py", line 215, in runsphinx
    raise exception
OSError: [developer] /home/embray/src/sagemath/sage/src/doc/en/developer/coding_in_other.rst:160: WARNING: duplicate label section-gap, other instance in /home/embray/src/sagemath/sage/src/doc/en/developer/interfaces.rst

Ok so there's a duplicate label, that's clear enough, and should be fixed. The odd part is just

other instance in /home/embray/src/sagemath/sage/src/doc/en/developer/interfaces.rst

But there is no src/doc/env/developer/interfaces.rst. The file it seems to be referring to is in src/doc/en/tutorials/. I haven't checked whether this is a Sage specific error or something general to Sphinx (looks like maybe the latter). It's probably just a formatting error in the error message, but confusing all the same!

Doesn't compile on MacOS

Perhaps it doesn't work with LLVM?

~/sage (master ✓) make
cd spkg &&
"../spkg/pipestatus"
"env SAGE_PARALLEL_SPKG_BUILD='' ./install all 2>&1"
"tee -a ../logs/install.log"
/bin/sh: line 0: cd: spkg: No such file or directory
make: *** [build] Error 1
~/sage (master ✓) gcc -v
Configured with: --prefix=/Applications/Xcode5-DP.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.1.58) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.4.0
Thread model: posix

~/sage (master ✓) system_profiler SPSoftwareDataType
Software:

System Software Overview:

  System Version: OS X 10.8.4 (12E55)
  Kernel Version: Darwin 12.4.0
  Boot Volume: Macintosh HD
  Boot Mode: Normal
  Secure Virtual Memory: Enabled
  Time since boot: 4:46

sage 8.1 crashes

i have a weird issue where sage crashes on one machine and not on another one even thought they have the same version of OS.
i installed the gdb for more report, please see attached.
sage_report.txt

Sage 8 failed to run for the first time on Fedora Cinnamon 26

Hi,

I'm interested in the Sage software. However, I installed it into my computer and run for the first time. Here is the result:


***************************************************************************

IPython post-mortem report

{'commit_hash': u'5c9c918',
 'commit_source': 'installation',
 'default_encoding': 'UTF-8',
 'ipython_path': '/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/IPython',
 'ipython_version': '5.1.0',
 'os_name': 'posix',
 'platform': 'Linux-4.11.11-300.fc26.x86_64-x86_64-with-fedora-26-Twenty_Six',
 'sys_executable': '/home/wn/Documents/SageMath/local/bin/python',
 'sys_platform': 'linux2',
 'sys_version': '2.7.13 (default, Jul 22 2017, 00:49:06) \n[GCC 6.3.1 20161221 (Red Hat 6.3.1-1)]'}

***************************************************************************



***************************************************************************

Crash traceback:

---------------------------------------------------------------------------
---------------------------------------------------------------------------
ImportError     Python 2.7.13: /home/wn/Documents/SageMath/local/bin/python
                                                   Tue Aug  8 21:49:30 2017
A problem occurred executing Python code.  Here is the sequence of function
calls leading up to the error, with the most recent (innermost) call last.
/home/wn/Documents/SageMath/src/bin/sage-ipython in <module>()
      1 #!/usr/bin/env python
      2 # -*- coding: utf-8 -*-
      3 """
      4 Sage IPython startup script.
      5 """
      6 
      7 from sage.repl.interpreter import SageTerminalApp
      8 
      9 app = SageTerminalApp.instance()
---> 10 app.initialize()
        global app.initialize = <bound method SageTerminalApp.initialize of <sage.repl.interpreter.SageTerminalApp object at 0x7fe0caf2d1d0>>
     11 app.start()

<decorator-gen-109> in initialize(self=<sage.repl.interpreter.SageTerminalApp object>, argv=None)

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/traitlets/config/application.pyc in catch_config_error(method=<function initialize>, app=<sage.repl.interpreter.SageTerminalApp object>, *args=(None,), **kwargs={})
     72     TRAITLETS_APPLICATION_RAISE_CONFIG_FILE_ERROR = False
     73 else:
     74     raise ValueError("Unsupported value for environment variable: 'TRAITLETS_APPLICATION_RAISE_CONFIG_FILE_ERROR' is set to '%s' which is none of  {'0', '1', 'false', 'true', ''}."% _envvar )
     75 
     76 
     77 @decorator
     78 def catch_config_error(method, app, *args, **kwargs):
     79     """Method decorator for catching invalid config (Trait/ArgumentErrors) during init.
     80 
     81     On a TraitError (generally caused by bad config), this will print the trait's
     82     message, and exit the app.
     83 
     84     For use on init methods, to prevent invoking excepthook on invalid input.
     85     """
     86     try:
---> 87         return method(app, *args, **kwargs)
        method = <function initialize at 0x7fe0bd3c7d70>
        app = <sage.repl.interpreter.SageTerminalApp object at 0x7fe0caf2d1d0>
        args = (None,)
        kwargs = {}
     88     except (TraitError, ArgumentError) as e:
     89         app.print_help()
     90         app.log.fatal("Bad config encountered during initialization:")
     91         app.log.fatal(str(e))
     92         app.log.debug("Config at the time: %s", app.config)
     93         app.exit(1)
     94 
     95 
     96 class ApplicationError(Exception):
     97     pass
     98 
     99 
    100 class LevelFormatter(logging.Formatter):
    101     """Formatter with additional `highlevel` record
    102 

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/IPython/terminal/ipapp.pyc in initialize(self=<sage.repl.interpreter.SageTerminalApp object>, argv=None)
    294 
    295         return super(TerminalIPythonApp, self).parse_command_line(argv)
    296     
    297     @catch_config_error
    298     def initialize(self, argv=None):
    299         """Do actions after construct, but before starting the app."""
    300         super(TerminalIPythonApp, self).initialize(argv)
    301         if self.subapp is not None:
    302             # don't bother initializing further, starting subapp
    303             return
    304         # print self.extra_args
    305         if self.extra_args and not self.something_to_run:
    306             self.file_to_run = self.extra_args[0]
    307         self.init_path()
    308         # create the shell
--> 309         self.init_shell()
        self.init_shell = <bound method SageTerminalApp.init_shell of <sage.repl.interpreter.SageTerminalApp object at 0x7fe0caf2d1d0>>
    310         # and draw the banner
    311         self.init_banner()
    312         # Now a variety of things that happen after the banner is printed.
    313         self.init_gui_pylab()
    314         self.init_extensions()
    315         self.init_code()
    316 
    317     def init_shell(self):
    318         """initialize the InteractiveShell instance"""
    319         # Create an InteractiveShell instance.
    320         # shell.display_banner should always be False for the terminal
    321         # based app, because we call shell.show_banner() by hand below
    322         # so the banner shows *before* all extension loading stuff.
    323         self.shell = TerminalInteractiveShell.instance(parent=self,
    324                         profile_dir=self.profile_dir,

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/sage/repl/interpreter.pyc in init_shell(self=<sage.repl.interpreter.SageTerminalApp object>)
    747         self.shell.has_sage_extensions = SAGE_EXTENSION in self.extensions
    748 
    749         # Load the %lprun extension if available
    750         try:
    751             import line_profiler
    752         except ImportError:
    753             pass
    754         else:
    755             self.extensions.append('line_profiler')
    756 
    757         if self.shell.has_sage_extensions:
    758             self.extensions.remove(SAGE_EXTENSION)
    759 
    760             # load sage extension here to get a crash if
    761             # something is wrong with the sage library
--> 762             self.shell.extension_manager.load_extension(SAGE_EXTENSION)
        self.shell.extension_manager.load_extension = <bound method ExtensionManager.load_extension of <IPython.core.extensions.ExtensionManager object at 0x7fe0bc033510>>
        global SAGE_EXTENSION = 'sage'
    763 
    764 

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/IPython/core/extensions.pyc in load_extension(self=<IPython.core.extensions.ExtensionManager object>, module_str='sage')
     70 
     71         Returns the string "already loaded" if the extension is already loaded,
     72         "no load function" if the module doesn't have a load_ipython_extension
     73         function, or None if it succeeded.
     74         """
     75         if module_str in self.loaded:
     76             return "already loaded"
     77         
     78         from IPython.utils.syspathcontext import prepended_to_syspath
     79         
     80         with self.shell.builtin_trap:
     81             if module_str not in sys.modules:
     82                 with prepended_to_syspath(self.ipython_extension_dir):
     83                     __import__(module_str)
     84             mod = sys.modules[module_str]
---> 85             if self._call_load_ipython_extension(mod):
        self._call_load_ipython_extension = <bound method ExtensionManager._call_load_ipython_extension of <IPython.core.extensions.ExtensionManager object at 0x7fe0bc033510>>
        mod = <module 'sage' from '/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/sage/__init__.pyc'>
     86                 self.loaded.add(module_str)
     87             else:
     88                 return "no load function"
     89 
     90     def unload_extension(self, module_str):
     91         """Unload an IPython extension by its module name.
     92 
     93         This function looks up the extension's name in ``sys.modules`` and
     94         simply calls ``mod.unload_ipython_extension(self)``.
     95         
     96         Returns the string "no unload function" if the extension doesn't define
     97         a function to unload itself, "not loaded" if the extension isn't loaded,
     98         otherwise None.
     99         """
    100         if module_str not in self.loaded:

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/IPython/core/extensions.pyc in _call_load_ipython_extension(self=<IPython.core.extensions.ExtensionManager object>, mod=<module 'sage' from '/home/wn/Documents/SageMath...l/lib/python2.7/site-packages/sage/__init__.pyc'>)
    117         """
    118         from IPython.utils.syspathcontext import prepended_to_syspath
    119 
    120         if (module_str in self.loaded) and (module_str in sys.modules):
    121             self.unload_extension(module_str)
    122             mod = sys.modules[module_str]
    123             with prepended_to_syspath(self.ipython_extension_dir):
    124                 reload(mod)
    125             if self._call_load_ipython_extension(mod):
    126                 self.loaded.add(module_str)
    127         else:
    128             self.load_extension(module_str)
    129 
    130     def _call_load_ipython_extension(self, mod):
    131         if hasattr(mod, 'load_ipython_extension'):
--> 132             mod.load_ipython_extension(self.shell)
        mod.load_ipython_extension = <function load_ipython_extension at 0x7fe0caf1e7d0>
        self.shell = <sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fe0bd3efa10>
    133             return True
    134 
    135     def _call_unload_ipython_extension(self, mod):
    136         if hasattr(mod, 'unload_ipython_extension'):
    137             mod.unload_ipython_extension(self.shell)
    138             return True
    139 
    140     def install_extension(self, url, filename=None):
    141         """Download and install an IPython extension. 
    142 
    143         If filename is given, the file will be so named (inside the extension
    144         directory). Otherwise, the name from the URL will be used. The file must
    145         have a .py or .zip extension; otherwise, a ValueError will be raised.
    146 
    147         Returns the full path to the installed file.

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/sage/__init__.pyc in load_ipython_extension(*args=(<sage.repl.interpreter.SageTerminalInteractiveShell object>,))
      1 __all__ = ['all']
      2 
      3 # Make sure that the correct zlib library is loaded. This is needed
      4 # to prevent the system zlib to be loaded instead of the Sage one.
      5 # See https://trac.sagemath.org/ticket/23122
      6 import zlib
      7 
      8 # IPython calls this when starting up
      9 def load_ipython_extension(*args):
     10     import sage.repl.ipython_extension
---> 11     sage.repl.ipython_extension.load_ipython_extension(*args)
        sage.repl.ipython_extension.load_ipython_extension = <function load_ipython_extension at 0x7fe0b7b868c0>
        args = (<sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fe0bd3efa10>,)

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/sage/repl/ipython_extension.pyc in wrapper(*args=(<sage.repl.interpreter.SageTerminalInteractiveShell object>,), **kwargs={})
    546         ....:     if work:
    547         ....:         return 'foo worked'
    548         ....:     raise RuntimeError("foo didn't work")
    549         sage: foo(False)
    550         Traceback (most recent call last):
    551         ...
    552         RuntimeError: foo didn't work
    553         sage: foo(True)
    554         'foo worked'
    555         sage: foo(False)
    556         sage: foo(True)
    557     """
    558     @wraps(func)
    559     def wrapper(*args, **kwargs):
    560         if not wrapper.has_run:
--> 561             result = func(*args, **kwargs)
        result = undefined
        global func = undefined
        args = (<sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fe0bd3efa10>,)
        kwargs = {}
    562             wrapper.has_run = True
    563             return result
    564     wrapper.has_run = False
    565     return wrapper
    566 
    567 
    568 @run_once
    569 def load_ipython_extension(ip):
    570     """
    571     Load the extension in IPython.
    572     """
    573     # this modifies ip
    574     SageCustomizations(shell=ip)

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/sage/repl/ipython_extension.pyc in load_ipython_extension(ip=<sage.repl.interpreter.SageTerminalInteractiveShell object>)
    559     def wrapper(*args, **kwargs):
    560         if not wrapper.has_run:
    561             result = func(*args, **kwargs)
    562             wrapper.has_run = True
    563             return result
    564     wrapper.has_run = False
    565     return wrapper
    566 
    567 
    568 @run_once
    569 def load_ipython_extension(ip):
    570     """
    571     Load the extension in IPython.
    572     """
    573     # this modifies ip
--> 574     SageCustomizations(shell=ip)
        global SageCustomizations = <class 'sage.repl.ipython_extension.SageCustomizations'>
        global shell = undefined
        ip = <sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fe0bd3efa10>

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/sage/repl/ipython_extension.pyc in __init__(self=<sage.repl.ipython_extension.SageCustomizations object>, shell=<sage.repl.interpreter.SageTerminalInteractiveShell object>)
    417     def __init__(self, shell=None):
    418         """
    419         Initialize the Sage plugin.
    420         """
    421         self.shell = shell
    422 
    423         self.auto_magics = SageMagics(shell)
    424         self.shell.register_magics(self.auto_magics)
    425 
    426         import sage.misc.edit_module as edit_module
    427         self.shell.set_hook('editor', edit_module.edit_devel)
    428 
    429         self.init_inspector()
    430         self.init_line_transforms()
    431 
--> 432         import sage.all # until sage's import hell is fixed
        sage.all = undefined
    433 
    434         self.shell.verbose_quit = True
    435         self.set_quit_hook()
    436 
    437         self.register_interface_magics()
    438 
    439         if SAGE_IMPORTALL == 'yes':
    440             self.init_environment()
    441 
    442     def register_interface_magics(self):
    443         """
    444         Register magics for each of the Sage interfaces
    445         """
    446         from sage.repl.interface_magic import InterfaceMagic
    447         InterfaceMagic.register_all(self.shell)

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/sage/all.py in <module>()
     72 
     73 # Add SAGE_SRC at the end of sys.path to enable Cython tracebacks
     74 # (which use paths relative to SAGE_SRC)
     75 sys.path.append(SAGE_SRC)
     76 
     77 
     78 ###################################################################
     79 
     80 # This import also setups the interrupt handler
     81 from cysignals.signals import (AlarmInterrupt, SignalError,
     82         sig_on_reset as sig_on_count)
     83 
     84 from time                import sleep
     85 
     86 import sage.misc.lazy_import
---> 87 from sage.misc.all       import *         # takes a while
        global sage.misc.all = undefined
     88 from sage.typeset.all    import *
     89 from sage.repl.all       import *
     90 
     91 from sage.misc.sh import sh
     92 
     93 from sage.libs.all       import *
     94 from sage.data_structures.all import *
     95 from sage.doctest.all    import *
     96 
     97 from sage.structure.all  import *
     98 from sage.rings.all      import *
     99 from sage.arith.all      import *
    100 from sage.matrix.all     import *
    101 
    102 from sage.symbolic.all   import *

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/sage/misc/all.py in <module>()
     69 
     70 from .defaults import (set_default_variable_name,
     71                         series_precision, set_series_precision)
     72 
     73 from .sage_eval import sage_eval, sageobj
     74 
     75 from .sage_input import sage_input
     76 
     77 lazy_import("sage.misc.cython", ["cython_lambda", "cython_create_local_so"]) 
     78 lazy_import("sage.misc.cython_c", "cython_compile", "cython")
     79 
     80 from .persist import save, load, dumps, loads, db, db_save
     81 
     82 from .func_persist import func_persist
     83 
---> 84 from .functional import (additive_order,
        global functional = undefined
        global additive_order = undefined
        global base_ring = undefined
        global base_field = undefined
        global basis = undefined
        global category = undefined
        global charpoly = undefined
        global characteristic_polynomial = undefined
        global coerce = undefined
        global cyclotomic_polynomial = undefined
        global decomposition = undefined
        global denominator = undefined
        global det = undefined
        global dimension = undefined
        global dim = undefined
        global discriminant = undefined
        global disc = undefined
        global eta = undefined
        global fcp = undefined
        global gen = undefined
        global gens = undefined
        global hecke_operator = undefined
        global image = undefined
        global integral = undefined
        global integrate = undefined
        global integral_closure = undefined
        global interval = undefined
        global xinterval = undefined
        global is_commutative = undefined
        global is_even = undefined
        global is_integrally_closed = undefined
        global is_field = undefined
        global is_odd = undefined
        global kernel = undefined
        global krull_dimension = undefined
        global lift = undefined
        global log = undefined
        global log_b = undefined
        global minimal_polynomial = undefined
        global minpoly = undefined
        global multiplicative_order = undefined
        global ngens = undefined
        global norm = undefined
        global numerator = undefined
        global numerical_approx = undefined
        global n = undefined
        global N = undefined
        global objgens = undefined
        global objgen = undefined
        global order = undefined
        global rank = undefined
        global regulator = undefined
        global round = undefined
        global quotient = undefined
        global quo = undefined
        global isqrt = undefined
        global squarefree_part = undefined
        global symbolic_sum = undefined
        global sum = undefined
        global symbolic_prod = undefined
        global product = undefined
        global transpose = undefined
     85                         base_ring,
     86                         base_field,
     87                         basis,
     88                         category,
     89                         charpoly,
     90                         characteristic_polynomial,
     91                         coerce,
     92                         cyclotomic_polynomial,
     93                         decomposition,
     94                         denominator,
     95                         det,
     96                         dimension,
     97                         dim,
     98                         discriminant,
     99                         disc,

/home/wn/Documents/SageMath/local/lib/python2.7/site-packages/sage/misc/functional.py in <module>()
     17 #
     18 # This program is free software: you can redistribute it and/or modify
     19 # it under the terms of the GNU General Public License as published by
     20 # the Free Software Foundation, either version 2 of the License, or
     21 # (at your option) any later version.
     22 #                  http://www.gnu.org/licenses/
     23 #*****************************************************************************
     24 from __future__ import absolute_import
     25 from six.moves import range, builtins
     26 from six import integer_types
     27 
     28 import sage.misc.latex
     29 import sage.interfaces.expect
     30 import sage.interfaces.mathematica
     31 
---> 32 from sage.rings.complex_double import CDF
        global sage.rings.complex_double = undefined
        global CDF = undefined
     33 from sage.rings.real_double import RDF, RealDoubleElement
     34 
     35 import sage.rings.real_mpfr
     36 import sage.rings.complex_field
     37 import sage.rings.integer
     38 
     39 ##############################################################################
     40 # There are many functions on elements of a ring, which mathematicians
     41 # usually write f(x), e.g., it is weird to write x.log() and natural
     42 # to write log(x).  The functions below allow for the more familiar syntax.
     43 ##############################################################################
     44 def additive_order(x):
     45     """
     46     Returns the additive order of `x`.
     47 

ImportError: libgfortran.so.3: cannot open shared object file: No such file or directory

***************************************************************************

History of session input:
*** Last line of input (may not be in above history):

Expected Behavior of XOR of Ints

Hello,

SAGE VERSION: SageMath version 8.0, Release Date: 2017-07-21

I am trying to understand how XOR works in Sage because it not conform to the logic table:

print 0 ^ 0, 0 ^ 1 , 1 ^ 0, 1 ^ 1
results in 1 0 1 1
but
print (0 + 0) %2, (0 + 1) %2, (1 + 0) %2, (1 + 1) %2
results in 0 1 1 0

And XOR is addition mod 2, so I am not sure what is going on.

I also tried making everything python ints:

print int(0) ^ int(0), int(0) ^ int(1) , int(1) ^ int(0), int(1) ^ int(1)
But I still get 1 0 1 1

The only way I have been able to get the result I expect is by:

import operator
operator.xor(0, 0), operator.xor(0, 1), operator.xor(1, 0), operator.xor(1, 1)

Thank you!

Sage Make error

When i install Sage from source code, i encountered the following problem. I guess the reason is that I have installed a python 3.6.5 using anaconda and there is a conflict when make Sage. But i'm not sure. How can i solve this problem? Does anyone face with this issue.

The following is the errors logged in the log file.

python -E ./setup.py build
running build
running build_ext
Traceback (most recent call last):
File "./setup.py", line 2402, in
main()
File "./setup.py", line 2397, in main
"Tools/scripts/2to3", "Tools/scripts/pyvenv"]
File "/home/woshibutian/\udce4\udcb8\udc8b\udce8\udcbd\udcbd/sage-8.3/local/var/tmp/sage/build/python3-3.6.6/src/Lib/distutils/core.py", line 148, in setup
dist.run_commands()
File "/home/woshibutian/\udce4\udcb8\udc8b\udce8\udcbd\udcbd/sage-8.3/local/var/tmp/sage/build/python3-3.6.6/src/Lib/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/home/woshibutian/\udce4\udcb8\udc8b\udce8\udcbd\udcbd/sage-8.3/local/var/tmp/sage/build/python3-3.6.6/src/Lib/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/home/woshibutian/\udce4\udcb8\udc8b\udce8\udcbd\udcbd/sage-8.3/local/var/tmp/sage/build/python3-3.6.6/src/Lib/distutils/command/build.py", line 135, in run
self.run_command(cmd_name)
File "/home/woshibutian/\udce4\udcb8\udc8b\udce8\udcbd\udcbd/sage-8.3/local/var/tmp/sage/build/python3-3.6.6/src/Lib/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/home/woshibutian/\udce4\udcb8\udc8b\udce8\udcbd\udcbd/sage-8.3/local/var/tmp/sage/build/python3-3.6.6/src/Lib/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/home/woshibutian/\udce4\udcb8\udc8b\udce8\udcbd\udcbd/sage-8.3/local/var/tmp/sage/build/python3-3.6.6/src/Lib/distutils/command/build_ext.py", line 339, in run
self.build_extensions()
File "./setup.py", line 228, in build_extensions
missing = self.detect_modules()
File "./setup.py", line 764, in detect_modules
for ln in fp:
File "/home/woshibutian/\udce4\udcb8\udc8b\udce8\udcbd\udcbd/sage-8.3/local/var/tmp/sage/build/python3-3.6.6/src/Lib/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 74: ordinal not in range(128)
Makefile:597: recipe for target 'sharedmods' failed
make[4]: *** [sharedmods] Error 1
make[4]: Leaving directory '/home/woshibutian/下载/sage-8.3/local/var/tmp/sage/build/python3-3.6.6/src'
Error building Python.

real 1m49.177s
user 1m39.165s
sys 0m9.991s


Error building package python3-3.6.6


Please email sage-devel (http://groups.google.com/group/sage-devel)
explaining the problem and including the log file
/home/woshibutian/下载/sage-8.3/logs/pkgs/python3-3.6.6.log
Describe your computer, operating system, etc.
If you want to try to fix the problem yourself, don't just cd to
/home/woshibutian/下载/sage-8.3/local/var/tmp/sage/build/python3-3.6.6 and type 'make' or whatever is appropriate.
Instead, the following commands setup all environment variables
correctly and load a subshell for you to debug the error:
(cd '/home/woshibutian/下载/sage-8.3/local/var/tmp/sage/build/python3-3.6.6' && '/home/woshibutian/下载/sage-8.3/sage' --sh)
When you are done debugging, you can type "exit" to leave the subshell.

Mode does not follow described behaviour.

The stats.mode(v) function gives result not complying to documentation when given the list
[0, 2, 7, 7, 13, 20, 2, 13].

The doctsring specifies

Return the mode of v. The mode is the sorted list of the most
frequently occuring elements in v. If n is the most times
that any element occurs in v, then the mode is the sorted list
of elements of v that occur n times.

sage: mode([0, 2, 7, 7, 13, 20, 2, 13])
[2,13,7]

This list returned in this instance is not sorted and therefore mode(v) does not meet specification.

sage script multiline parameter parsed error

SageMath version 7.6

for example, I have this in file x.sage:

#!/usr/bin/sage
fx(x)=piecewise([[(-1,2),2*x+4], \
        [(2,4), 2*x^2-4*x]])

but sage x.sage send error like this

  File "x.sage.py", line 7
    __tmp__=var("x"); fx = symbolic_expression(piecewise([[(-_sage_const_1 ,_sage_const_2 ),_sage_const_2 *x+_sage_const_4 ],  * BackslashOperator() * ).function(x)
                                                                                                                               ^
SyntaxError: invalid syntax

while I can just copy the code and paste in the sage shell, it works of course.
but for the script, I have no way to make it work, the preparser only deal with a single line and don't know the line continue mark.
And I'm extremely wondering why the script doesn't work like just paste the content line by line to the sage shell, it's called sage script but it doesn't works like a script.
This can be done just by parsing the original line to the sage shell, which also makes it for sure that the script works really like a script.

Export worksheets and data from Sage Notebook 6.5 and possible upgrade to latest version

Hello,
I am running an old Sage notebook (version 6.5) on a Redhat Linux 6 server. I do not have the admin password to log into the notebook. I would like to understand how to

  1. Log into sage dashboard without a password.
  2. export worksheets and any other data in this sage notebook
  3. upgrade to latest version of sage notebook (version 8.2 ?)
  4. Use a CAPTCHA or throttle invalid login attempts in SAGE notebook
    Can anyone please provide me some guidance on how I can tackle these tasks. Would be greatly appreciated.

Including a IRC for the community

The community experience would be enriched with the addition of a Internet Relay Chat . I would be really glad if someone would guide me to build a IRC for the sage community.

Disable issues

@sagemath If this is not used as issue tracker, I think the issues feature should be disabled to avoid confussion

patch file missing

Someting must have gone wrong in the conversion script; I get:

./spkg-install: line 182: ../patches/graph.c.patch: No such file or directory

when building cliquer

How to install Sage on Google Colab?

I am trying to install "Sage" on Google Colab via the command:

!pip install git+https://github.com/sagemath/sage.git

I get the error:

Collecting git+https://github.com/sagemath/sage.git
  Cloning https://github.com/sagemath/sage.git to /tmp/pip-req-build-ozlqhlkb
  Running command git clone -q https://github.com/sagemath/sage.git /tmp/pip-req-build-ozlqhlkb
ERROR: File "setup.py" not found for legacy project git+https://github.com/sagemath/sage.git.

No module named 'sage.all_cmdline'

Traceback (most recent call last):
  File "script.py", line 11, in <module>
    from sage.all_cmdline import *   
ModuleNotFoundError: No module named 'sage.all_cmdline'

Google Colab works on
Description: Ubuntu 18.04.5 LTS
Codename: bionic
model name: AMD EPYC 7B12

pip3 --version
pip 21.1.3 from /usr/local/lib/python3.7/dist-packages/pip (python 3.7)

Why can't I install "Sage" ? What could be the reasons for this error?

build_system branch doesn't compile on MacOS 10.8.4

configure: error: could not find a working compiler, see config.log for details
Error configuring MPIR (with CFLAGS unset).
Consult /Users/getchell/sage/local/var/tmp/sage/build/mpir-2.6.0.p2/src/config.log for for details.

real 0m1.975s
user 0m0.355s
sys 0m0.398s


Error installing package mpir-2.6.0.p2


Please email sage-devel (http://groups.google.com/group/sage-devel)
explaining the problem and including the relevant part of the log file
/Users/getchell/sage/logs/pkgs/mpir-2.6.0.p2.log
Describe your computer, operating system, etc.
If you want to try to fix the problem yourself, don't just cd to
/Users/getchell/sage/local/var/tmp/sage/build/mpir-2.6.0.p2 and type 'make' or whatever is appropriate.
Instead, the following commands setup all environment variables
correctly and load a subshell for you to debug the error:
(cd '/Users/getchell/sage/local/var/tmp/sage/build/mpir-2.6.0.p2' && '/Users/getchell/sage/sage' --sh)
When you are done debugging, you can type "exit" to leave the subshell.


make[2]: *** [/Users/getchell/sage/local/var/lib/sage/installed/mpir-2.6.0.p2] Error 1
make[1]: *** [all] Error 2

real 0m34.244s
user 0m8.538s
sys 0m5.590s


Error building Sage.

The following package(s) may have failed to build:

package: mpir-2.6.0.p2
log file: /Users/getchell/sage/logs/pkgs/mpir-2.6.0.p2.log
build directory: /Users/getchell/sage/local/var/tmp/sage/build/mpir-2.6.0.p2

The build directory may contain configuration files and other potentially
helpful information. WARNING: if you now run 'make' again, the build
directory will, by default, be deleted. Set the environment variable
SAGE_KEEP_BUILT_SPKGS to 'yes' to prevent this.

make: *** [build] Error 1
┌─[getchell][Hapkido][±][build_system ✓][~/sage]
└─▪ system_profiler SPSoftwareDataType
Software:

System Software Overview:

  System Version: OS X 10.8.4 (12E55)
  Kernel Version: Darwin 12.4.0
  Boot Volume: Macintosh HD
  Boot Mode: Normal
  Computer Name: Hapkido
  User Name: Getchell, Adam (getchell)
  Secure Virtual Memory: Enabled
  Time since boot: 14:06

┌─[getchell][Hapkido][±][build_system ✓][~/sage]
└─▪ gcc -v
Configured with: --prefix=/Applications/Xcode5-DP.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.1.58) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.4.0
Thread model: posix

Not able to install with apt-get

I tried to run sudo apt-get install sagemath. It gives below error under ubuntu 16.04:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Package sagemath is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'sagemath' has no installation candidate

master branch

Could we rename the "working" branch to be called "master" again? The dev scripts assume that the main branch is called master and I believe that this is what most people expect.
I have to admit that I do not understand what the master branch is currently...

Including parsed generating functions in the OEIS module

I have parsed about 15k generating functions of the OEIS sequences and as a use case, generated about 300 million relations. It would be great if we could include the generating functions (and maybe even the relations) in the OEIS module. I can provide the gf and relations in a suitable format (e.g Content-MathML).

sage.rings.polynomial.pbori fails to build

I ran into the following problem when building the repository. Is this a known problem?

gcc -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/dev/shm/sage/local/include -Isage/libs/polybori -I/dev/shm/sage/local/include -I/dev/shm/sage/local/include/csage -I/dev/shm/sage/src -I/dev/shm/sage/src/sage/ext -I/dev/shm/sage/local/include -I/dev/shm/sage/local/include/csage -I/dev/shm/sage/src -I/dev/shm/sage/src/sage/ext -I/dev/shm/sage/local/include/python2.7 -c sage/rings/polynomial/pbori.cpp -o build/temp.linux-x86_64-2.7/sage/rings/polynomial/pbori.o -std=c99 -mmmx -msse -msse2 -msse3 -w -fno-tree-dominator-opto
In file included from /dev/shm/sage/local/include/polybori/pbori_defs.h:27:0,
                 from /dev/shm/sage/local/include/polybori/BoolePolyRing.h:21,
                 from /dev/shm/sage/local/include/polybori/BoolePolynomial.h:30,
                 from /dev/shm/sage/local/include/csage/pb_wrap.h:2,
                 from sage/rings/polynomial/pbori.cpp:314:
/dev/shm/sage/local/include/polybori/cudd/cudd.h:74:29: fatal error: polybori/config.h: No such file or directory
 #include <polybori/config.h>
                             ^
compilation terminated.
error: command 'gcc' failed with exit status 1

sage -t --warn-long 25.2 src/sage/repl/image.py make sagmentation fault

I build sage 8.2 from source. using gcc 7.3.0 compiler. [I'm using ubuntu 18.04 LTS]
When I test my sage I got "sage -t --warn-long 25.2 src/sage/repl/image.py # Killed due to segmentation fault" message.
How can I solve it?
Thank you.

ps. when I test image.py manually this error only occurs when I test below example.

   EXAMPLES::

        sage: from sage.repl.image import Image
        sage: img = Image('1', (16, 16), 'white')
        sage: from sage.repl.rich_output import get_display_manager
        sage: dm = get_display_manager()
        sage: img._rich_repr_(dm)
        OutputImagePng container

        sage: img = Image('F', (16, 16), 'white')   # not supported in PNG
        sage: img._rich_repr_(dm) #This causes sagementation fault
        OutputImageGif container

Here is my log file.
crash_At5_GT.log

Make it clear what this mirror is for

I am watching this repository and there were several new issues/PRs recently- it seems not obvious that this is not a place where they should be submitted, moreover there are already other open issues and PRs. If this is a mirror of the repository and modifying the README file here is not an option, do you think it could help to change the description from "Mirror of the Sage source tree" to something like "Mirror of the Sage source tree (only a mirror - everything must be submitted via https://trac.sagemath.org/)" ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.