--- /dev/null
--- /dev/null
++include:
++ - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
++ - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
++
++variables:
++ SALSA_CI_GBP_BUILDPACKAGE_ARGS: --git-hooks
--- /dev/null
--- /dev/null
++Macaulay2 for Debian
++====================
++
++Javascript libraries
++--------------------
++Macaulay2 uses a number of Javascript libraries. In particular, they
++are used to render mathematical expressions in the browser-based
++documentation and to visualize various mathematical objects by the
++Visualize package.
++
++Upstream embeds these libraries in the source code, often minimized.
++This is not desirable for the Debian package. For the libraries that
++are already available in Debian, we repack the tarball (using
++Files-Excluded in debian/copyright) without the embedded copies and
++use dh_linktree to create symbolic links to the Debian versions.
++
++There are three libraries that are not yet available in Debian, and so
++the embedded copies remain. In particular:
++
++* BootSideMenu (ITP #960097). Macaulay2 ships the full source code.
++
++* noUiSlider (ITP #960618). Macaulay2 ships minified source, so we
++ include the full source code in debian/missing-sources, obtained
++ from https://github.com/leongersen/noUiSlider/tree/8.5.1.
++
++* The render-a11y-string KaTeX extension. It was added in KaTeX
++ version 0.11.0, but only 0.10.2 is currently available in Debian.
++ Macaulay2 ships minified source, so we include the full source code
++ in debian/missing-sources, obtained from
++ https://github.com/KaTeX/KaTeX/tree/v0.12.0.
++
++dwww
++----
++The Macaulay2 documentation is registered with doc-base. In order to
++view the html documentation properly in your web browser using dwww,
++you must append "/usr/share/Macaulay2" to DWWW_DOCPATH in
++/etc/dwww/dwww.conf. Otherwise, some resources (e.g., CSS and
++Javascript files) will be unavailable.
++
++Suggested packages
++------------------
++Quite a few additional Debian packages will be installed alongside
++Macaulay2 automatically due to being listed in "Depends" or
++"Recommended", but there are a number of others that are listed under
++"Suggests" that will not be installed unless you pass
++"--install-suggests" to apt or install them separately. They are:
++
++* dot2tex - Used by showTikZ function in Graphs package.
++
++* fig2dev - Used by gfanRender and gfanRenderStaircase functions in
++ gfanInterface package.
++
++* graphviz - Used by displayGraph function in Graphs package.
++
++* imagemagick - Used by displayGraph function in Graphs package.
++ However, any image viewer will do -- set the "JpgViewer" configuration
++ option when loading the package to change the viewer.
++
++* pdf-viewer (virtual package) - Used by displayPoset function in
++ Posets package. The default pdf viewer is called using xdg-open;
++ use xdg-mime to change it. Alternatively, set the "DefaultPDFViewer"
++ configuration option when loading the package.
++
++* polymake - Used by Polymake, StatePolytope, and Tropical packages.
++
++* sdpa - Used by SemidefiniteProgramming package.
++
++ -- Doug Torrance <dtorrance@piedmont.edu>, Fri, 1 Jan 2021 17:17:56 -0500
--- /dev/null
--- /dev/null
++macaulay2 (1.17.1+ds-2) unstable; urgency=medium
++
++ * debian/patches/dont-capture-check-core-32-bit.patch
++ - New patch; don't use capture when running Core and Cremona tests
++ on 32-bit architectures. Otherwise, we run out of memory.
++ * debian/patches/dont-capture-diffalg-tests.patch
++ - New patch; don't use "capture" for DiffAlg package tests.
++ * debian/patches/skip-failing-package-tests.patch
++ - Add core-tests.m2; contains a test with an alarm that isn't
++ caught when running "check".
++ - Skip another segfaulting MinimalPrimes test.
++ * debian/patches/smaller-points-examples.patch
++ - New patch; Remove examples showing less efficient algorithms
++ from Points docs.
++ * debian/patches/use-canned-examples.patch
++ - Add example from TestIdeals package that has been known to
++ segfault.
++ * debian/rules
++ - Exclude .m2 files from being gzipped by dh_compress. Otherwise,
++ package tests may be compressed and won't be found by "check".
++ - Only set VERBOSE variable if DEB_BUILD_OPTIONS doesn't include
++ "terse".
++
++ -- Doug Torrance <dtorrance@piedmont.edu> Sun, 24 Jan 2021 08:57:47 -0500
++
++macaulay2 (1.17.1+ds-1) unstable; urgency=medium
++
++ * New upstream release.
++ * debian/clean
++ - Add autogenerated file debian/macaulay2-pkg.el.
++ * debian/control
++ - Add packages to Recommends.
++ + info: info is used by "infoHelp" function.
++ + texlive-latex-base: latex is used by "showTex" function.
++ + xdg-utils: xdg-open is used by "show" function.
++ + xterm: xterm is used by "edit" function.
++ - Add packages to Suggests.
++ + fig2dev: Used by gfanInterface package.
++ + dot2tex/graphviz/imagemagick: Used by Graphs package.
++ + pdf-viewer: Used by Posets package.
++ - Switch from node-jquery to libjs-jquery (versioned, to ensure
++ that the minified jQuery source is not a symbolic link) in
++ Build-Depends-Indep.
++ * debian/copyright
++ - Various updates for new release.
++ * debian/elpa-macaulay2.{docs,elpa}
++ - Update paths to Emacs-related files files.
++ * debian/macaulay2-common.linktrees
++ - Update path the minified jQuery source needed by Visualize package.
++ Previously, it was shipped in the node-jquery package, but was
++ moved to libjs-jquery in version 3.5.1+dfsg+~3.5.5-4.
++ * debian/patches
++ - Refresh for new release.
++ - Previous skip-*-{example,test}.patch's have been combined into
++ three patches for simplicity:
++ + used-canned-examples.patch: Canned versions of examples that
++ have been known to fail.
++ + skip-failing-core-tests.patch: Tests in M2/Macaulay2/tests that
++ have been known to fail.
++ + skip-package-tests.patch: Package tests that have been known
++ to fail. We also use the new "-* no-check-flag *-" feature
++ to skip these tests rather than patching them out entirely.
++ * debian/patches/git-description.patch
++ - New patch; provide version#"git description".
++ * debian/patches/use-debian-applications.patch
++ - New patch; tell gfanInterface package where to find fig2dev and
++ Posets package to use xdg-open to view pdf files.
++ * debian/patches/use-dh-elpa.patch
++ - New patch; modifications to work with dh_elpa.
++ * debian/README.Debian
++ - Remove section on orig tarballs; they are no longer generated on
++ Salsa.
++ - Add section discussing packages listed in Suggests.
++ * debian/rules
++ - Add execute_after_dh_install-arch target to remove empty directory.
++ - Simplify debian/macaulay2-pkg.el rule.
++ - Add get-orig-source target.
++ * debian/scripts/copyright-helper.m2
++ - Move file into new debian/scripts directory.
++ * debian/scripts/m2-get-orig-source.sh
++ - New script to generate orig tarballs.
++ * debian/scripts/m2-tarball-warning.sh
++ - New script to display a warning if using uscan to generate a
++ tarball.
++ * debian/tests/control
++ - Add messages before each stage of testing.
++ - Add "M2 --check 2" for testing Core package.
++ * debian/watch
++ - Upstream has begun tagging stable releases, so we switch to
++ GitHub for the link. However, uscan should only be used
++ to check for new releases, as the tarballs it generates will
++ be missing the files from the M2-emacs submodule.
++
++ -- Doug Torrance <dtorrance@piedmont.edu> Sat, 16 Jan 2021 18:14:58 -0500
++
++macaulay2 (1.16.99+git40.3a512e5+ds-1~exp1) experimental; urgency=medium
++
++ * New upstream beta release.
++ * debian/control
++ - Add packages to Build-Depends.
++ + dh-linktree: We now use this debhelper addon to create symbolic
++ links to Debian copies of GPL licenses and various Javascript
++ libraries instead of patching the files directly to point to
++ them.
++ + libboost-regex-dev: Replaces embedded copy of GNU regex library
++ used in previous releases.
++ + libboost-stacktrace-dev: Improves readability of stack traces.
++ - Add Build-Depends-Indep.
++ + jdupes: Moved from Build-Depends; only needed for building
++ documentation.
++ + Various fonts and Javascript libraries; needed during build
++ by dh_linktree.
++ + w3c-markup-validator: Used to validate html in documentation.
++ - Bump Standards-Version to 4.5.1.
++ - Remove Javascript libraries from Recommends. They will now be
++ pulled in by ${misc:Depends} thanks to dh_linktree.
++ - Add emacs to Recommends for elpa-macaulay2.
++ * debian/copyright
++ - Add KaTeX files to Files-Excluded.
++ - Add paragraph for KaTeX files.
++ - Remove paragraph for embedded GNU regex library.
++ - Add licensing information for new packages added since previous
++ release.
++ * debian/copyright-helper.m2
++ - New Macaulay2 script to help generate debian/copyright paragraphs
++ for new packages.
++ * debian/macaulay2-common.linktrees
++ - New file; tell dh_linktree where Debian copies of GPL licenses
++ and Javascript libraries are located.
++ * debian/macaulay2-common.lintian-overrides
++ - Update package-contains-documentation-outside-usr-share-doc
++ overrides for files that have changed since previous release.
++ * debian/missing-source/render-a11y-string.js
++ - Add source for minified KaTeX file that isn't in Debian yet.
++ * debian/patches
++ - Remove patches applied (or otherwise made unnecessary) upstream.
++ + fix-*.patch
++ + hardening.patch
++ + remove-build-paths-from-cached-files.patch
++ + remove-build-paths-from-docs.patch (Patch remains, but only
++ increases the default print width of examples.)
++ + use-debian-{4ti2,cohomcalg,csdp,gfan,nauty,normaliz,topcom}.patch
++ - Refresh remaining patches for new upstream version.
++ * debian/patches/skip-computations-book-test.patch
++ - Rename from fix-computations-book-test.patch; the behavior of the
++ test is too unpredictable between different architectures, so
++ we skip it entirely instead of trying to fix it.
++ * debian/patches/skip-*-{example,test}.patch
++ - Skip some additional examples and tests that have been known
++ to fail on various architectures.
++ * debian/patches/use-debian-{gpl,javascript}.patch
++ - Remove patches; we use dh_linktree for the same purpose instead.
++ * debian/README.Debian
++ - Add information about KaTeX to "Javascript libraries" section.
++ - Add section on using dwww to view the Macaulay2 documentation.
++ * debian/rules
++ - Use dh_linktree addon.
++ - New execute_before_dh_auto_build target; touch KaTeX files to
++ prevent html-check-links test from failing.
++ - Drop check for "nocheck" in DEB_BUILD_OPTIONS from
++ override_dh_auto_test rule; not necessary in debhelper 13.
++ We also append "-arch" to this target.
++ - New override_dh_auto_test-indep rule to validate html docs.
++ - Switch override_dh_link target that calls jdupes to
++ execute_before_dh_link-indep target.
++ - Switch override_dh_elpa target that generates -pkg.el file
++ to execute_before_dh_elpa target.
++ * debian/tests/check.m2
++ - Remove file; no longer needed.
++ * debian/tests/control
++ - Use upstream's updated --check command line argument to run
++ continuous integration tests.
++ * debian/upstream/metadata
++ - Add recent NSF grants to Funding.
++ - Add new Macaulay2Web interface to Webservice.
++
++ -- Doug Torrance <dtorrance@piedmont.edu> Sat, 26 Dec 2020 00:29:42 -0500
++
++macaulay2 (1.16+git55.94c4b7d+ds-2) unstable; urgency=medium
++
++ * Upload to unstable.
++
++ -- Doug Torrance <dtorrance@piedmont.edu> Wed, 04 Nov 2020 20:54:18 -0500
++
++macaulay2 (1.16+git55.94c4b7d+ds-2~exp1) experimental; urgency=medium
++
++ * Source-only upload for migration to testing.
++ * debian/control
++ - Add libmps-dev to Build-Depends.
++ - Add lsb-release to Build-Depends so configure can detect the
++ Debian release.
++ - Fix URL in VCS-* fields.
++ * debian/elpa-test
++ - Disable dh_elpa_test so it doesn't override dh_auto_test.
++ * debian/patches/skip-mpsolve-for-now.patch
++ - Remove patch; mpsolve is now in Debian.
++ * debian/patches/{fix,skip}-*-{example,test}.patch:
++ - New patches; fix or skip examples or tests causing build
++ failures on various architectures.
++ * debian/README.Debian
++ - Remove section on 'roots' function. It is now available since
++ mpsolve is in Debian.
++
++ -- Doug Torrance <dtorrance@piedmont.edu> Wed, 04 Nov 2020 20:54:18 -0500
++
++macaulay2 (1.16+git55.94c4b7d+ds-1) unstable; urgency=low
++
++ * Initial release (Closes: #439888).
++
++ -- Doug Torrance <dtorrance@piedmont.edu> Sun, 04 Oct 2020 16:31:20 -0400
--- /dev/null
--- /dev/null
++debian/macaulay2-pkg.el
++M2/usr-host/lib/libmissing.a
--- /dev/null
--- /dev/null
++Source: macaulay2
++Section: math
++Priority: optional
++Maintainer: Debian Science Maintainers <debian-science-maintainers@alioth-lists.debian.net>
++Uploaders: Doug Torrance <dtorrance@piedmont.edu>
++Build-Depends: 4ti2,
++ bison,
++ cohomcalg,
++ coinor-csdp,
++ debhelper-compat (= 13),
++ dh-elpa,
++ dh-linktree,
++ fflas-ffpack,
++ flex,
++ gfan,
++ install-info,
++ libatomic-ops-dev,
++ libboost-dev,
++ libboost-regex-dev,
++ libboost-stacktrace-dev,
++ libcdd-dev,
++ libeigen3-dev,
++ libflint-dev (>= 2.6.0~),
++ libfrobby-dev,
++ libgc-dev,
++ libgdbm-dev,
++ libgivaro-dev,
++ libglpk-dev,
++ libgtest-dev,
++ liblapack-dev,
++ liblzma-dev,
++ libmathic-dev,
++ libmathicgb-dev,
++ libmemtailor-dev,
++ libmpfr-dev,
++ libmps-dev,
++ libntl-dev,
++ libreadline-dev,
++ libsingular-dev,
++ libxml2-dev,
++ lrslib,
++ lsb-release,
++ nauty,
++ normaliz,
++ pkg-config,
++ singular-data,
++ time,
++ topcom
++Build-Depends-Indep: fonts-glyphicons-halflings,
++ fonts-katex,
++ jdupes,
++ libjs-bootstrap,
++ libjs-d3,
++ libjs-jquery (>= 3.5.1+dfsg+~3.5.5-4),
++ libjs-katex,
++ libjs-three,
++ libjs-underscore,
++ node-clipboard,
++ w3c-markup-validator
++Standards-Version: 4.5.1
++Homepage: http://macaulay2.com
++Vcs-Browser: https://salsa.debian.org/science-team/macaulay2
++Vcs-Git: https://salsa.debian.org/science-team/macaulay2.git
++Rules-Requires-Root: no
++
++Package: macaulay2
++Architecture: any
++Depends: macaulay2-common (= ${source:Version}),
++ singular-data,
++ ${misc:Depends},
++ ${shlibs:Depends}
++Recommends: 4ti2,
++ cohomcalg,
++ coinor-csdp,
++ elpa-macaulay2 (= ${source:Version}),
++ gfan,
++ info,
++ lrslib,
++ nauty,
++ normaliz,
++ texlive-latex-base,
++ topcom,
++ www-browser,
++ xdg-utils,
++ xterm
++Suggests: dot2tex, fig2dev, graphviz, imagemagick, pdf-viewer, polymake, sdpa
++Description: Software system for algebraic geometry research
++ Macaulay 2 is a software system for algebraic geometry research, written by
++ Daniel R. Grayson and Michael E. Stillman. Based on Groebner bases, it
++ provides algorithms for computing homological invariants of rings and
++ modules.
++ .
++ This package contains the architecture dependent portion of Macaulay2.
++
++Package: macaulay2-common
++Architecture: all
++Multi-Arch: foreign
++Depends: ${misc:Depends}
++Description: Software system for algebraic geometry research (common files)
++ Macaulay 2 is a software system for algebraic geometry research, written by
++ Daniel R. Grayson and Michael E. Stillman. Based on Groebner bases, it
++ provides algorithms for computing homological invariants of rings and
++ modules.
++ .
++ This package contains the architecture independent portion of Macaulay2, and is
++ normally installed automatically when one of the architecture dependent
++ packages is installed.
++
++Package: elpa-macaulay2
++Architecture: all
++Multi-Arch: foreign
++Section: editors
++Depends: ${elpa:Depends}, ${misc:Depends}
++Recommends: emacs
++Description: Software system for algebraic geometry research (Emacs package)
++ Macaulay 2 is a software system for algebraic geometry research, written by
++ Daniel R. Grayson and Michael E. Stillman. Based on Groebner bases, it
++ provides algorithms for computing homological invariants of rings and
++ modules.
++ .
++ This package contains the modes for running Macaulay2 within Emacs and
++ editing Macaulay2 code.
--- /dev/null
--- /dev/null
++Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
++Upstream-Name: Macaulay2
++Source: http://macaulay2.com
++Files-Excluded: M2/Macaulay2/packages/Style/katex/contrib/auto-render.min.js
++ M2/Macaulay2/packages/Style/katex/contrib/copy-tex.min.*
++ M2/Macaulay2/packages/Style/katex/fonts
++ M2/Macaulay2/packages/Style/katex/katex.min.*
++ M2/Macaulay2/packages/Style/katex/LICENSE
++ M2/Macaulay2/packages/Visualize/css/bootstrap*.min.css
++ M2/Macaulay2/packages/Visualize/fonts
++ M2/Macaulay2/packages/Visualize/js/bootstrap.min.js
++ M2/Macaulay2/packages/Visualize/js/clipboard.min.js
++ M2/Macaulay2/packages/Visualize/js/d3.v3.min.js
++ M2/Macaulay2/packages/Visualize/js/jquery-1.11.3.min.js
++ M2/Macaulay2/packages/Visualize/js/three.min.js
++ M2/Macaulay2/packages/Visualize/js/underscore.js
++Comment: Files-Excluded field removes embedded Javascript libraries.
++ .
++ An email from Dan Grayson dated 2020-08-03 clarified the
++ licenses of code contributed by authors other than himself and Mike
++ Stillman:
++ .
++ "A priori the author of a file is the copyright holder, by default.
++ We haven't always been alert about asking authors to put their code
++ in the public domain, although I have done that in a few
++ cases. . . My general attitude is that anyone who contributes code to
++ us is putting it in the public domain, implicitly."
++
++Files: *
++Copyright: 1993-2019 Daniel R. Grayson <dan@math.uiuc.edu>
++ 1993-2020 Michael E. Stillman <mike@math.cornell.edu>
++License: GPL-2+
++
++Files: debian/*
++Copyright: 2015-2020 Doug Torrance <dtorrance@piedmont.edu>
++License: GPL-2+
++
++Files: debian/missing-sources/render-a11y-string.js
++ M2/Macaulay2/packages/Style/katex/contrib/render-a11y-string.min.js
++Copyright: 2013-2019 Khan Academy and other contributors
++Comment: https://github.com/KaTeX/KaTeX/blob/v0.12.0/LICENSE
++License: Expat
++
++Files: M2/cmake/FindAtomicOps.cmake
++ M2/cmake/FindBDWGC.cmake
++ M2/cmake/FindFactory.cmake
++ M2/cmake/FindFlint.cmake
++ M2/cmake/FindFrobby.cmake
++ M2/cmake/FindGDBM.cmake
++ M2/cmake/FindMathic.cmake
++ M2/cmake/FindMathicgb.cmake
++ M2/cmake/FindMemtailor.cmake
++ M2/cmake/FindMPIR.cmake
++ M2/cmake/FindMPSolve.cmake
++ M2/cmake/FindNTL.cmake
++Copyright: 2020 Mahrud Sayrafi <mahrud@umn.edu>
++Comment: The files themselves only contain the line "Redistribution
++ and use is allowed according to the terms of the BSD license." In an
++ email, the author confirmed that the license in question is the
++ 3-clause version, which is the same license used by CMake itself. See
++ https://cmake.org/licensing/. This comment also applies to the other
++ Find*.cmake files below.
++License: BSD-3-Clause
++
++Files: M2/cmake/FindCDDLIB.cmake
++Copyright: 2006 Laurent Montel <montel@kde.org>
++ 2018 Thomas Baumgart <tbaumgart@kde.org>
++ 2020 Mahrud Sayrafi <mahrud@umn.edu>
++License: BSD-3-Clause
++
++Files: M2/cmake/FindGMP.cmake
++Copyright: 2016 Jack Poulson <jack.poulson@gmail.com>
++ 2020 Mahrud Sayrafi <mahrud@umn.edu>
++License: BSD-3-Clause
++
++Files: M2/cmake/FindMPFR.cmake
++Copyright: 2006, 2007 Montel Laurent <montel@kde.org>
++ 2008, 2009 Gael Guennebaud <g.gael@free.fr>
++ 2010 Jitse Niesen <jitse@maths.leeds.ac.uk>
++ 2015 Jack Poulson <jack.poulson@gmail.com>
++ 2020 Mahrud Sayrafi <mahrud@umn.edu>
++License: BSD-3-Clause
++
++Files: M2/cmake/FindTBB.cmake
++Copyright: 2012 Sergiu Dotenco
++License: Expat
++
++Files: M2/config/ax_compare_version.m4
++Copyright: 2008 Tim Toolan <toolan@ele.uri.edu>
++License: FSFAP
++
++Files: M2/config/ax_func_accept_argtypes.m4
++Copyright: 2008 Daniel Richard G. <skunk@iskunk.org>
++License: GPL-2+ with autoconf exception
++
++Files: M2/config/ax_prog_cc_for_build.m4
++Copyright: 2008 Paolo Bonzini <bonzini@gnu.org>
++License: FSFAP
++
++Files: M2/config/gtest.m4
++Copyright: 2012 Canonical, Ltd.
++License: Expat
++
++Files: M2/distributions/cygwin/genini
++Copyright: 2005, 2006, 2007 Christopher Faylor
++License: GPL-2+
++
++Files: M2/Macaulay2/d/boost-regex.cpp
++ M2/Macaulay2/d/regex.dd
++ M2/Macaulay2/m2/markdown.m2
++ M2/Macaulay2/m2/regex.m2
++Copyright: 2020 Mahrud Sayrafi
++Comment: See Comment at top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/e/bibasis/*
++ M2/Macaulay2/packages/BIBasis.m2
++Copyright: 2006-2011 Mikhail V. Zinin <mzinin@gmail.com>
++License: GPL-2+
++
++Files: M2/Macaulay2/e/franzi*
++Copyright: Franziska Hinkelmann
++License: public-domain
++
++Files: M2/Macaulay2/e/localring.cpp
++ M2/Macaulay2/e/localring.hpp
++ M2/Macaulay2/e/mutablecomplex.cpp
++ M2/Macaulay2/e/mutablecomplex.hpp
++ M2/Macaulay2/m2/localring.m2
++ M2/Macaulay2/packages/PruneComplex*
++Copyright: 2017 Mahrud Sayrafi <mahrud@berkeley.edu>
++ 2017 Mike Stillman <mike@math.cornell.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/e/mpreal.h
++Copyright: 2008-2019 Pavel Holoborodko
++License: GPL-3+
++
++Files: M2/Macaulay2/e/mutablemat-imp.hpp
++ M2/Macaulay2/e/NAG.cpp
++ M2/Macaulay2/e/NAG.hpp
++ M2/Macaulay2/e/SLP.cpp
++ M2/Macaulay2/e/SLP.hpp
++ M2/Macaulay2/e/SLP-defs.hpp
++ M2/Macaulay2/e/SLP-imp.hpp
++Copyright: 2008, 2015 Anton Leykin and Mike Stillman
++Comment: Anton Leykin's code in this file is in the public domain.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/e/unit-tests/GivaroTest.cpp
++Copyright: 1994-2009 The Givaro group
++License: CECILL-B
++
++Files: M2/Macaulay2/editors/vim/m2.vim.plugin
++Copyright: 2010 David Cook II <dcook@ms.uky.edu>
++License: public-domain
++
++Files: M2/Macaulay2/m2/book.m2
++Copyright: 1997 Daniel R. Grayson
++ 2020 Mahrud Sayrafi
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/m2/expressions.m2
++Copyright: 1992-2002 Daniel R. Grayson
++ 2018 P. Zinn-Justin
++Comment: See M2/LICENSING-NOTES
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/m2/fano.m2
++ M2/Macaulay2/tests/normal/testsubring.m2
++Copyright: 1996, 1997 Michael Stillman and David Eisenbud
++License: GPL-2+
++
++Files: M2/Macaulay2/m2/hypertext.m2
++Copyright: 1993-2003 Daniel R. Grayson
++ 2020 P. Zinn-Justin
++ 2020 Mahrud Sayrafi
++Comment: See M2/LICENSING-NOTES
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/PrimaryDecomposition*
++Copyright: 2020 Mike Stillman <mike@math.cornell.edu>
++ 2020 Carolyn Yackel <cyackel@math.indiana.edu>
++ 2020 Justin Chen <justin.chen@math.gatech.edu>
++ 2020 Mahrud Sayrafi <mahrud@umn.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/m2/minPres.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/minimalPresentation-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/trim-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/overviewB.m2
++ M2/Macaulay2/packages/PrimaryDecomposition/primaryDecomposition-test.m2
++Copyright: 2006 Amelia Taylor
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/m2/schubert.m2
++Copyright: Bernd Sturmfels
++ Josephine Yu
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/m2/webapp.m2
++ M2/Macaulay2/packages/VectorGraphics*
++Copyright: 2018-2020 Paul Zinn-Justin <pzinn@unimelb.edu.au>
++Comment: See M2/LICENSING-NOTES
++License: public-domain
++
++Files: M2/Macaulay2/packages/AdjointIdeal*
++ M2/Macaulay2/packages/ConvexInterface*
++ M2/Macaulay2/packages/MapleInterface*
++ M2/Macaulay2/packages/Parametrization*
++ M2/Macaulay2/packages/SRdeformations.m2
++Copyright: 2009 Janko Boehm <boehm@math.uni-sb.de>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/AlgebraicSplines.m2
++Copyright: 2014-2015 Mike Dipasquale <mdipasq@okstate.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/AnalyzeSheafOnP1.m2
++ M2/Macaulay2/packages/ChainComplexOperations.m2
++ M2/Macaulay2/packages/CompleteIntersectionResolutions.m2
++ M2/Macaulay2/packages/HigherCIOperators.m2
++ M2/Macaulay2/packages/MCMApproximations.m2
++Copyright: 2013, 2015, 2017, 2019 David Eisenbud <de@msri.org>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/BeginningMacaulay2*
++ M2/Macaulay2/packages/EagonResolution.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/pushForward-doc.m2
++ M2/Macaulay2/packages/MonomialOrbits.m2
++ M2/Macaulay2/packages/Truncations.m2
++ M2/Macaulay2/packages/undistributed-packages/RandomSearch.m2
++Copyright: 2006, 2009, 2018, 2020 David Eisenbud <de@msri.org>
++ 2006, 2009, 2018, 2020 Mike Stillman <mike@math.cornell.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/Bertini*
++Copyright: 2020 Elizabeth Gross <elizabeth.gross@sjsu.edu>
++ 2020 Jose Israel Rodriguez <Jose@math.wisc.edu>
++ 2020 Dan Bates <bates@math.colostate.edu>
++ 2020 Anton Leykin <leykin@math.gatech.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/BGG.m2
++Copyright: 2016 Hirotachi Abo <abo@uidaho.edu>
++ 2016 Wolfram Decker <decker@math.uni-sb.de>
++ 2016 David Eisenbud <de@msri.org>
++ 2016 Frank Schreyer <schreyer@math.uni-sb.de>
++ 2016 Gregory G. Smith <ggsmith@mast.queensu.ca>
++ 2016 Mike Stillman <mike@math.cornell.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/BinomialEdgeIdeals.m2
++Copyright: 2015 Tobias Windisch <windisch@ovgu.de>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Binomials.m2
++ M2/Macaulay2/packages/Cyclotomic.m2
++Copyright: 2009-2014 Thomas Kahle <thomas-kahle@gmx.de>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/BoijSoederberg.m2
++Copyright: 2015 David Eisenbud <de@msri.org>
++ 2015 Frank Schreyer <schreyer@math.uni-sb.de>
++ 2015 Mike Stillman <mike@math.cornell.edu>
++ 2015 Courtney Gibbons <crgibbon@hamilton.edu>
++ 2015 Branden Stone <bstone@adelphi.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/Book3264Examples.m2
++Copyright: 2010 Charley Crissman <charleyc@math.berkeley.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/BooleanGB.m2
++Copyright: 2011 Franziska Hinkelmann <fhinkel@vt.edu>
++ 2011 Mike Stillman
++ 2011 Elizabeth Arnold
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/Bruns.m2
++Copyright: 2008 David Eisenbud <de@msri.org>
++ 2008 Sonja Petrovic
++ 2008 Adam Van Tuyl
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/ChainComplexExtras.m2
++Copyright: 2016 David Eisenbud <de@msri.org>
++ 2016 Frank Moore <fmoore@math.unl.edu>
++ 2016 Frank-Olaf Schreyer <schreyer@math.uni-sb.de>
++ 2016 Greg Smith <ggsmith@mast.queensu.ca>
++ 2016 Lily Silverstein <lsilverstein@cpp.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/CharacteristicClasses.m2
++Copyright: 2015 Martin Helmer <martin.helmer@berkeley.edu>
++ 2015 Christine Jost <christine.e.jost@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Chordal*
++Copyright: 2017 Diego Cifuentes <diegcif@mit.edu>
++ 2017 Pablo Parrilo <parrilo@mit.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/CoincidentRootLoci*
++Copyright: 2020 Maria Chiara Brambilla <brambilla@dipmat.univpm.it>
++ 2020 Giovanni Staglianò <giovannistagliano@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Complexes.m2
++Copyright: 2020 Gregory G. Smith <ggsmith@mast.queensu.ca>
++ 2020 Mike Stillman <mike@math.cornell.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/ConformalBlocks.m2
++ M2/Macaulay2/packages/StatePolytope*
++Copyright: 2008, 2018 Dave Swinarski <dswinarski@fordham.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/CorrespondenceScrolls.m2
++Copyright: 2018 David Eisenbud <de@msri.org>
++ 2018 Frank-Olaf Schreyer
++ 2018 Alessio Sammartano
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Cremona*
++ M2/Macaulay2/packages/MultiprojectiveVarieties.m2
++ M2/Macaulay2/packages/Resultants.m2
++ M2/Macaulay2/packages/SparseResultants.m2
++ M2/Macaulay2/packages/SpecialFanoFourfolds.m2
++Copyright: 2020 Giovanni Staglianò <giovannistagliano@gmail.com>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/DecomposableSparseSystems*
++Copyright: 2020 Taylor Brysiewicz <taylorbrysiewicz@gmail.com>
++ 2020 Jose Israel Rodriguez <Jose@math.wisc.edu>
++ 2020 Frank Sottile <sottile@math.tamu.edu>
++ 2020 Thomas Yahl <thomasjyahl@tamu.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Depth.m2
++Copyright: 2010 Bart Snapp <snapp@math.ohio-state.edu>
++ 2016 David Eisenbud <de@msri.org>
++ 2016 Branden Stone <bstone@adelphi.edu>
++License: public-domain
++
++Files: M2/Macaulay2/packages/DeterminantalRepresentations.m2
++Copyright: 2019 Justin Chen <jchen646@gatech.edu>
++ 2019 Papri Dey <papridey@berkeley.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/DGAlgebras.m2
++Copyright: 2017 Frank Moore <moorewf@wfu.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/DiffAlg.m2
++Copyright: 2018 Manuel Dubinsky <manudubinsky@gmail.com>
++ 2018 Cesar Massri <cmassri@caece.edu.ar>
++ 2018 Ariel Molinuevo <amoli@dm.uba.ar>
++ 2018 Federico Quallbrunn <fquallb@dm.uba.ar>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Divisor.m2
++Copyright: 2018 Karl Schwede <kschwede@gmail.com>
++ 2018 Zhaoning Yang <zyy5054@gmail.com>
++License: public-domain
++
++Files: M2/Macaulay2/packages/Dmodules*
++Copyright: 1999-2009 Anton Leykin <leykin@math.gatech.edu>
++ 1999-2009 Harrison Tsai
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/EdgeIdeals.m2
++Copyright: 2008-2010 Chris Francisco <chris@math.okstate.edu>
++ 2008-2010 Andrew Hoefel <handrew@mathstat.dal.ca>
++ 2008-2010 Adam Van Tuyl <avantuyl@lakeheadu.ca>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/EliminationMatrices.m2
++Copyright: 2011, 2012 Nicolás Botbol <nbotbol@dm.uba.ar>
++ 2011, 2012 Laurent Busé <Laurent.Buse@inria.fr>
++ 2011, 2012 Manuel Dubinsky <manudubinsky@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/EllipticCurves.m2
++Copyright: 2014 Alessandro Oneto <oneto@math.su.se>
++ 2014 Stefano Marseglia <stefanom@math.su.se>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/EngineTests*
++ M2/Macaulay2/packages/undistributed-packages/CustomEngineTests.m2
++ M2/Macaulay2/packages/undistributed-packages/FastLinearAlgebra*
++Copyright: 2011 Michael E. Stillman <mike@math.cornell.edu>
++ 2011 Jakob Kröker <kroeker@math.uni-hannover.de>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/EnumerationCurves.m2
++Copyright: 2013 Hiep Dang <hiepdt_tt@dlu.edu.vn>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/EquivariantGB*
++Copyright: 2014 Chris Hillar <chillar@msri.org>
++ 2014 Robert Krone <krone@math.gatech.edu>
++ 2014 Anton Leykin <leykin@math.gatech.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/EigenSolver.m2
++Copyright: 2020 Laurent Busé <Laurent.Buse@inria.fr>
++ 2020 Justin Chen <justin.chen@math.gatech.edu>
++ 2020 Kisun Lee <kil004@ucsd.edu>
++ 2020 Anton Leykin <anton.leykin@gmail.com>
++ 2020 Tomas Pajdla <pajdla@cvut.cz>
++ 2020 Erika Pirnes <pirnes@wisc.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/ExampleSystems*
++Copyright: 2020 Anton Leykin <leykin@math.gatech.edu>
++ 2020 Justin Chen <justin.chen@math.gatech.edu>
++ 2020 Kelly Maluccio <kmaluccio@math.tamu.edu>
++ 2020 Leah Gold <L.Gold33@csuohio.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/ExteriorIdeals.m2
++Copyright: 2017 Marilena Crupi <mcrupi@unime.it>
++ 2017 Luca Amata <lamata@unime.it>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/FastLinAlg.m2
++Copyright: 2020 Boyana Martinova <u1056124@utah.edu>
++ 2020 Marcus Robinson <robinson@math.utah.edu>
++ 2020 Karl Schwede <schwede@math.utah.edu>
++ 2020 Yuhui (Wei) Yao <yuhuiyao4ever@gmail.com>
++License: public-domain
++
++Files: M2/Macaulay2/packages/FGLM.m2
++Copyright: 2019 Dylan Peifer <djp282@cornell.edu>
++ 2019 Mahrud Sayrafi <mahrud@umn.edu>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/FiniteFittingIdeals.m2
++Copyright: 2015 Gustav Sædén Ståhl <gss@math.kth.se>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/FormalGroupLaws.m2
++ M2/Macaulay2/packages/Graphics.m2
++ M2/Macaulay2/packages/WeylGroups*
++Copyright: 2010, 2012 Baptiste Calmès
++ 2010, 2012 Viktor Petrov
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/FourierMotzkin.m2
++Copyright: 1998-2000, 2006, 2008, 2010 Gregory G. Smith <ggsmith@mast.queensu.ca>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/FourTiTwo.m2
++Copyright: 2008, 2009 Mike Stillman <mike@math.cornell.edu>
++ 2008, 2009 Josephine Yu <jyu@math.mit.edu>
++ 2008, 2009 Sonja Petrovic <petrovic@psu.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/FrobeniusThresholds*
++Copyright: 2019 Juliette Bruce <juliette.bruce@math.wisc.edu>
++ 2019 Daniel Hernández <hernandez@ku.edu>
++ 2019 Karl Schwede <schwede@math.utah.edu>
++ 2019 Dan Smolkin <smolkin@math.utah.edu>
++ 2019 Pedro Teixeira <pteixeir@knox.edu>
++ 2019 Emily Witt <witt@ku.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/GenericInitialIdeal.m2
++ M2/Macaulay2/packages/Regularity.m2
++Copyright: 2008, 2009 Alexandra Seceleanu <asecele2@uiuc.edu>
++ 2008, 2009 Nathaniel Stapleton <nstaple2@math.uiuc.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/gfanInterface.m2
++Copyright: 2012 Mike Stillman <mike@math.cornell.edu>
++ 2012 Andrew Hoefel <andrew.hoefel@gmail.com>
++ 2012 Diane Maclagan <D.Maclagan@warwick.ac.uk>
++ 2012 Josephine Yu
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/GKMVarieties*
++Copyright: 2020 Chris Eur <chriseur@stanford.edu>
++ 2020 Ritvik Ramkumar <ritvik@math.berkeley.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/GradedLieAlgebras*
++Copyright: 2020 Clas Löfwall <clas.lofwall@gmail.com>
++ 2020 Samuel Lundqvist <samuel@math.su.se>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/GraphicalModels.m2
++Copyright: 2013 Luis Garcia-Puente <lgarcia@shsu.edu>
++ 2013 Sonja Petrovic <sonja@psu.edu>
++ 2013 Mike Stillman <mike@math.cornell.edu>
++ 2013 Seth Sullivant <smsulli2@ncsu.edu>
++ 2013 Alexander Diaz
++ 2013 Shaowei Lin
++ 2013 David Murrugarra
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/GraphicalModelsMLE.m2
++Copyright: 2020 Carlos Amendola <carlos.amendola@tum.de>
++ 2020 Luis David Garcia Puente <lgarcia@shsu.edu>
++ 2020 Roser Homs Pons <roser.homs@tum.de>
++ 2020 Olga Kuznetsova <kuznetsova.olga@gmail.com>
++ 2020 Harshit J Motwani <harshitmotwani2015@gmail.com>
++ 2020 Elina Robeva <erobeva@gmail.com>
++ 2020 David Swinarski <dswinarski@fordham.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/Graphs.m2
++Copyright: 2010 Amelia Taylor <originalbrickhouse@gmail.com>
++ 2010 Augustine O'Keefe <aokeefe@tulane.edu>
++ 2014 Jack Burkart <jburkar1@nd.edu>
++ 2014 David Cook II <dwcook@eiu.edu>
++ 2014 Caroline Jansen <cjansen@nd.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/GroebnerWalk.m2
++Copyright: 2017 Dylan Peifer <djp282@cornell.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/Hadamard.m2
++Copyright: 2020 Iman Bahmani Jafarloo <ibahmani89@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/HighestWeights*
++Copyright: 2014 Federico Galetto <galetto.federico@gmail.com>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/HodgeIntegrals.m2
++Copyright: 2010 Stephanie Yang <stpyang@math.kth.se>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/HyperplaneArrangements.m2
++Copyright: 2008-2016 Graham Denham
++ 2008-2016 Gregory G. Smith <ggsmith@mast.queensu.ca>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/IntegralClosure*
++Copyright: 2020 David Eisenbud <de@msri.org>
++ 2020 Mike Stillman <mike@math.cornell.edu>
++ 2020 Amelia Taylor <originalbrickhouse@gmail.com>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/InvariantRing.m2
++Copyright: 2014 Thomas Hawes <thomas.hawes@maths.ox.ac.uk>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/InverseSystems.m2
++Copyright: 2018 David Eisenbud <de@msri.org>
++ 2018 Mats Boij <boij@kth.se>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/InvolutiveBases.m2
++Copyright: 2009 Daniel Robertz <daniel@momo.math.rwth-aachen.de>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/K3Carpets.m2
++Copyright: 2018 David Eisenbud <de@msri.org>
++ 2018 Frank-Olaf Schreyer <schreyer@math.uni-sb.de>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Kronecker.m2
++Copyright: 2010 Edward Carter <edward.carter@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/KustinMiller.m2
++Copyright: 2011 Janko Boehm <boehm@math.uni-sb.de>
++ 2011 Stavros Papadakis <papadak@math.ist.utl.pt>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/LatticePolytopes.m2
++Copyright: 2015 Anders Lundman <alundman@math.kth.se>
++ 2015 Gustav Sædén Ståhl <gss@math.kth.se>
++License: public-domain
++
++Files: M2/Macaulay2/packages/LexIdeals.m2
++Copyright: 2008 Chris Francisco <chris@math.okstate.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/LieTypes.m2
++Copyright: 2018 Dave Swinarski <dswinarski@fordham.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/LocalRings*
++Copyright: 2017 Mahrud Sayrafi <mahrud@berkeley.edu>
++ 2008, 2017 Mike Stillman <mike@math.cornell.edu>
++ 2008 David Eisenbud <de@msri.org>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/M0nbar.m2
++Copyright: 2014 Han-Bom Moon <hmoon8@fordham.edu>
++ 2014 David Swinarski <dswinarski@fordham.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/doc_lists.m2
++ M2/Macaulay2/packages/Macaulay2Doc/doc_tables.m2
++Copyright: 2018 Daniel R. Grayson
++ 2018 Lily Silverstein
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/accumulate-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/append-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/commonest-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/compositions-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/deepSplice-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/delete-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/demark-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/drop-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/first-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/flatten-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/fold-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/horizontalJoin-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/insert-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/merge-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/part-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/partitions-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/parts-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/polarize-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/prepend-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/separate-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/substring-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/uniform-doc.m2
++Copyright: 2018 Lily Silverstein
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/all-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/any-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/apply-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/atan-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/cos-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/hilbertPolynomial-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/hilbertSeries-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/poincare-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/poincareN-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/reduceHilbert-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/sin-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/sinh-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/tan-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/tanh-doc.m2
++Copyright: L. Gold
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/applyKeys-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/applyPairs-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/applyValues-doc.m2
++Copyright: L. Gold, Lily Silverstein
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/betti-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/koszul-doc.m2
++Copyright: Caviglia, Kummini
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/binomial-doc.m2
++Copyright: M2Fest2005 DE
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/char-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/source-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/target-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/transpose-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/groebner.m2
++Copyright: kummini
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/codim-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/cotangentSheaf-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/dim-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/genera-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/genus-doc.m2
++Copyright: Decker, Popescu
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/cohomology-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/euler-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/HH-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/tangentSheaf-doc.m2
++Copyright: Sorin Popescu
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/compress-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/diagonalMatrix-doc.m2
++Copyright: 2005 M2fest
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/degreesRing-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/hilbertFunction-doc.m2
++Copyright: L. Gold
++ Dan Grayson
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/frac-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/permanents-doc.m2
++Copyright: 2005 M2Fest -- Irena
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/irreducibleCharacteristicSeries-doc.m2
++Copyright: Decker
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/intersect-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/regularity-doc.m2
++ M2/Macaulay2/packages/PrimaryDecomposition/doc.m2
++Copyright: Giulio
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/minors-doc.m2
++Copyright: blasiak, kummini
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/pdim-doc.m2
++Copyright: L.Gold, Josephine, Jonah
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/functions/symbol-percent-doc.m2
++Copyright: kummini, MES
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/Macaulay2Doc/monomorderings.m2
++Copyright: Irena, Mike
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/Markov.m2
++Copyright: Luis Garcia
++ Mike Stillman
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/Matroids.m2
++Copyright: 2020 Justin Chen <jchen@math.berkeley.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/MinimalPrimes*
++Copyright: 2014 Frank Moore <moorewf@wfu.ede>
++ 2014 Mike Stillman <mike@math.cornell.edu>
++ 2014 Franziska Hinkelmann
++ 2020 Justin Chen <justin.chen@math.gatech.edu>
++ 2020 Mahrud Sayrafi <mahrud@umn.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/Miura.m2
++Copyright: 2017 Joe Suzuki <j-suzuki@sigmath.es.osaka-u.ac.jp>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/MixedMultiplicity.m2
++Copyright: 2020 Kriti Goel <kritigoel.maths@gmail.com>
++ 2020 Sudeshna Roy <sudeshnaroy@math.iitb.ac.in>
++ 2020 J. K. Verma <jkv@math.iitb.ac.in>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/ModuleDeformations.m2
++Copyright: 2007-2008 Bradford Hovinen <hovinen@math.uni-hannover.de>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/MonodromySolver*
++Copyright: 2020 Timothy Duff <tduff3@gatech.edu>
++ 2020 Cvetelina Hill <cvetelina.hill@math.gatech.edu>
++ 2020 Anders Nedergaard Jensen <jensen@math.au.dk>
++ 2020 Kisun Lee <klee669@math.gatech.edu>
++ 2020 Anton Leykin <leykin@math.gatech.edu>
++ 2020 Jeff Sommars <sommars1@uic.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/MonomialAlgebras*
++Copyright: 2013 David Eisenbud <de@msri.org>
++ 2013 Janko Boehm <boehm@mathematik.uni-kl.de.
++ 2013 Max Nitsche <nitsche@mis.mpg.de>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/MultiGradedRationalMap.m2
++Copyright: 2018 Yairon Cid Ruiz <ycid@ub.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/MultiplicitySequence.m2
++Copyright: 2020 Justin Chen <justin.chen@math.gatech.edu>
++ 2020 Youngsu Kim <youngsu.kim@csusb.edu>
++ 2020 Jonathan Montaño <jmon@nmsu.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/MultiplierIdeals.m2
++Copyright: 2011-2013 Claudiu Raicu
++ 2011-2013 Bart Snapp
++ 2011-2013 Zach Teitler <zteitler@member.ams.org>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/MultiplierIdealsDim2.m2
++Copyright: 2015 Ferran Dachs-Cadefau <ferran.dachscadefau@wis.kuleuven.be>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/NAGtypes*
++ M2/Macaulay2/packages/undistributed-packages/NAGtools.m2
++Copyright: 2013 Anton Leykin <leykin@math.gatech.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/Nauty.m2
++ M2/Macaulay2/packages/NautyGraphs.m2
++ M2/Macaulay2/packages/SimplicialDecomposability.m2
++Copyright: 2010-2013 David W. Cook II <dwcook@eiu.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/NCAlgebra*
++Copyright: 2016 Frank Moore <moorewf@wfu.edu>
++ 2016 Andrew Conner <abc12@stmarys-ca.edu>
++ 2016 Courtney Gibbons <crgibbon@hamilton.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/NoetherNormalization.m2
++Copyright: 2010 Bart Snap <snapp@math.ohio-state.edu>
++ 2010 Nathaniel Stapleton <nstaple2@math.uiuc.edu>
++License: public-domain
++
++Files: M2/Macaulay2/packages/NoetherianOperators.m2
++Copyright: 2020 Robert Krone <krone@math.gatech.edu>
++ 2020 Justin Chen <justin.chen@math.gatech.edu>
++ 2020 Marc Harkonen <harkonen@gatech.edu>
++ 2020 Yairon Cid-Ruiz <Yairon.CidRuiz@UGent.be>
++ 2020 Anton Leykin <anton.leykin@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/NonminimalComplexes.m2
++ M2/Macaulay2/packages/RandomCanonicalCurves.m2
++ M2/Macaulay2/packages/RandomGenus14Curves.m2
++Copyright: 2011 Frank-Olaf Schreyer <schreyer@math.uni-sb.de>
++ 2011 Hans-Christian Graf v. Bothmer <bothmer@uni-math.gwdg.de>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Normaliz.m2
++Copyright: 2009, 2010 Winfried Bruns
++ 2009, 2010 Gesa Kaempf <gkaempf@uni-osnabrueck.de>
++ 2011, 2012, 2015, 2016 Christof Soeger <csoeger@uni-osnabrueck.de>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/NormalToricVarieties*
++ M2/Macaulay2/packages/SpectralSequences.m2
++Copyright: 2009-2020 Gregory G. Smith <ggsmith@mast.queensu.ca>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/NumericalAlgebraicGeometry*
++Copyright: 2014 Anton Leykin <leykin@math.gatech.edu>
++ 2014 Robert Krone <krone@math.gatech.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/NumericalCertification*
++Copyright: 2018 Kisun Lee <klee669@gatech.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/NumericalImplicitization.m2
++Copyright: 2019 Justin Chen <jchen646@math.gatech.edu>
++ 2018 Joe Kileel <jkileel@math.princeton.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/NumericalLinearAlgebra.m2
++Copyright: 2020 Robert Krone <krone@math.gatech.edu>
++ 2020 Marc Harkonen <harkonen@gatech.edu>
++ 2020 Anton Leykin <anton.leykin@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/NumericalSchubertCalculus*
++Copyright: 2017 Anton Leykin <leykin@math.gatech.edu>
++ 2017 Abraham Martin del Campo <abraham.mc@cimat.mx>
++ 2017 Frank Sottile <sottile@math.tamu.edu>
++ 2017 Jan Verschelde <jan@math.uic.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/NumericSolutions.m2
++Copyright: 2017 Laura Menini <menini@disp.uniroma2.it>
++ 2017 Corrado Possieri <possieri@ing.uniroma2.it>
++ 2017 Antonio Tornambe <tornambe@disp.uniroma2.it>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/OldPolyhedra.m2
++Copyright: 2010 René Birkner <rbirkner@mi.fu-berlin.de>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/OldToricVectorBundles.m2
++ M2/Macaulay2/packages/ToricVectorBundles.m2
++Copyright: 2010 René Birkner <rbirkner@math.fu-berlin.de>
++ 2010 Nathan Owen Ilten <nilten@cs.uchicago.edu>
++ 2010 Lars Petersen <petersen@math.fu-berlin.de>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/OpenMath*
++ M2/Macaulay2/packages/SCSCP*
++Copyright: 2009 Dan Roozemond (TU Eindhoven, Netherlands)
++ <dan.roozemond@gmail.com>
++License: Apache-2.0
++
++Files: M2/Macaulay2/packages/PackageCitations.m2
++Copyright: 2017 Aaron Dall <aaronmdall@gmail.com>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/PencilsOfQuadrics.m2
++Copyright: 2020 Frank-Olaf Schreyer <schreyer@math.uni-sb.de>
++ 2020 David Eisenbud <de@msri.org>
++ 2020 Yeongrak Kim <kim@math.uni-sb.de>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Permanents.m2
++Copyright: 2014 Tair Akhmejanov ta328@cornell.edu
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/PHCpack.m2
++Copyright: 2013 Elizabeth Gross <egross7@uic.edu>
++ 2013 Sonja Petrovic <Sonja.Petrovic@iit.edu>
++ 2013 Jan Verschelde <jan@math.uic.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/PhylogeneticTrees.m2
++Copyright: 2016 Hector Banos <hdbanoscervantes@alaksa.edu>
++ 2016 Nathaniel Bushek <nbushek@alaska.edu>
++ 2016 Ruth Davidson <ruth.davidson.math@gmail.com>
++ 2016 Elizabeth Gross <elizabeth.gross@sjsu.edu>
++ 2016 Pamela Harris <peh2@williams.edu>
++ 2016 Robert Krone <rckrone@gmail.com>
++ 2016 Colby Long <celong2@ncsu.edu>
++ 2016 AJ Stewart <stewaral@seattleu.edu>
++ 2016 Robert Walker <robmarsw@umich.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/PieriMaps.m2
++Copyright: 2008, 2009 Steven V Sam <ssam@math.mit.edu>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/Points.m2
++Copyright: 2008 Mike Stillman <mike@math.cornell.edu>
++ 2008 Gregory G. Smith <ggsmith@mast.queensu.ca>
++ 2008 Stein A. Strømme <stromme@math.uib.no>
++ 2016 David Eisenbud <de@msri.org>
++ 2018 Federico Galetto <galetto.federico@gmail.com>
++ 2018 Joseph W. Skelton <jskelton@tulane.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/Polyhedra*
++Copyright: 2010 René Birkner <rbirkner@mi.fu-berlin.de>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/Polymake.m2
++Copyright: 2008 Josephine Yu jyu@math.mit.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Posets.m2
++Copyright: 2011-2014 David Cook II <dwcook@eiu.edu>
++ 2011-2014 Sonja Mapes <smapes1@nd.edu>
++ 2011-2014 Gwyn Whieldon <whieldon@hood.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/PositivityToricBundles.m2
++Copyright: 2020 Andreas Hochenegger <andreas.hochenegger@sns.it>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/Pullback.m2
++Copyright: 2018 Drew Ellingson
++ 2018 Karl Schwede
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/PushForward.m2
++Copyright: 2015 Claudiu Raicu <craicu@nd.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/QthPower.m2
++Copyright: 2014 Douglas A. Leonard leonada@auburn.edu
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Quasidegrees.m2
++Copyright: 2015 Roberto Barrera <rbarrera@math.tamu.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/QuillenSuslin.m2
++Copyright: 2013 Brett Barwick <bbarwick@uscupstate.edu>
++ 2013 Branden Stone <bstone@bard.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/RandomComplexes.m2
++ M2/Macaulay2/packages/SVDComplexes.m2
++Copyright: 2018 Frank Schreyer <schreyer@math.uni-sb.de>
++ 2018 Michael E. Stillman <mike@math.cornell.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/RandomCurves.m2
++ M2/Macaulay2/packages/RandomPlaneCurves.m2
++ M2/Macaulay2/packages/RandomSpaceCurves.m2
++Copyright: 2011 Frank-Olaf Schreyer <schreyer@math.uni-sb.de>
++ 2011 Hans-Christian Graf v. Bothmer <bothmer@uni-math.gwdg.de>
++ 2011 Florian Geiss <fg@math.uni-sb.de>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/RandomCurvesOverVerySmallFiniteFields.m2
++Copyright: 2018 Christian Bopp <bopp@math.uni-sb.de>
++ 2011 Frank-Olaf Schreyer <schreyer@math.uni-sb.de>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/RandomIdeals.m2
++ M2/Macaulay2/packages/ResidualIntersections.m2
++Copyright: 2016 Katie Ansaldi <kansaldi@gmail.com>
++ 2016 David Eisenbud <de@msri.org>
++ 2016 Robert Krone <rckrone@gmail.com>
++ 2016 Jay Yang <jkelleyy@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/RandomMonomialIdeals.m2
++Copyright: 2019 Sonja Petrovic <sonja.petrovic@iit.edu>
++ 2019 Despina Stasi <stasdes@iit.edu>
++ 2019 Dane Wilburne <dwilburn@hawk.iit.edu>
++ 2019 Tanner Zielinski <tzielin1@hawk.iit.edu>
++ 2019 Daniel Kosmas <dkosmas@hawk.iit.edu>
++ 2019 Parker Joncus <pjoncus@hawk.iit.edu>
++ 2019 Richard Osborn <rosborn@hawk.iit.edu>
++ 2019 Monica Yun <myun1@hawk.iit.edu>
++ 2019 Genevieve Hummel <ghummel1@hawk.iit.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/RandomObjects.m2
++Copyright: 2011 Hans-Christian Graf v. Bothmer <bothmer@uni-math.gwdg.de>
++ 2011 Florian Geiss <fg@math.uni-sb.de>
++ 2011 Daniel R. Grayson <dan@math.uiuc.edu>
++ 2011 Frank-Olaf Schreyer <schreyer@math.uni-sb.de>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/RandomRationalPoints.m2
++Copyright: 2020 Sankhaneel Bisui <sbisu@tulane.edu>
++ 2020 Thai Nguyen <tnguyen11@tulane.edu>
++ 2020 Karl Schwede <schwede@math.utah.edu>
++ 2020 Sarasij Maitra <sm3vg@virginia.edu>
++ 2020 Zhan Jiang <zoeng@umich.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/RationalMaps.m2
++Copyright: 2019 Karl Schwede <kschwede@gmail.com>
++ 2019 Daniel Smolkin <smolkin@math.utah.edu>
++ 2019 S. Hamid Hassanzadeh <hassanzadeh.ufrj@gmail.com>
++ 2019 C.J. Bott <cjamesbott@gmail.com>
++License: public-domain
++
++Files: M2/Macaulay2/packages/RationalPoints.m2
++Copyright: 2009 Nathaniel Stapleton <nat.j.stapleton@gmail.com>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/ReactionNetworks*
++Copyright: 2016 Cvetelina Hill <cvetelina.hill@math.gatech.edu>
++ 2016 Timothy Duff <timothy.duff@ncf.edu>
++ 2016 Kisun Lee <klee669@math.gatech.edu>
++ 2016 Anton Leykin <leykin@math.gatech.edu>
++ 2018 Alexandru Iosif <alexandru.iosif@ovgu.de>
++ 2018 Michael Adamer <adamer@maths.ox.ac.uk>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/ReesAlgebra.m2
++Copyright: 2006, 2008, 2017, 2019 David Eisenbud <de@msri.org>
++ 2006, 2008, 2017, 2019 Amelia Taylor <originalbrickhouse@gmail.com>
++ 2006, 2008, 2017, 2019 Sorin Popescu <sorin@math.sunysb.edu>
++ 2006, 2008, 2017, 2019 Michael E. Stillman <mike@math.cornell.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/RelativeCanonicalResolution.m2
++Copyright: 2020 Christian Bopp <bopp@math.uni-sb.de>
++ 2020 Michael Hoff <hahn@math.uni-sb.de>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/ResLengthThree.m2
++Copyright: 2020 Lars Winther Christensen <lars.w.christensen@ttu.edu>
++ 2020 Luigi Ferraro <lferraro@ttu.edu>
++ 2020 Francesca Gandini <fra.gandi.phd@gmail.com>
++ 2020 Frank Moore <moorewf@wfu.edu>
++ 2020 Oana Veliche <o.veliche@northeastern.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/ResolutionsOfStanleyReisnerRings.m2
++Copyright: 2020 Ashleigh Adams <adams869@umn.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/RunExternalM2.m2
++ M2/Macaulay2/packages/VectorFields.m2
++Copyright: 2016 Brian Pike <bapike@gmail.com>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/Saturation*
++Copyright: 2020 Justin Chen <justin.chen@math.gatech.edu>
++ 2020 Mahrud Sayrafi <mahrud@umn.edu>
++ 2020 Mike Stillman <mike@math.cornell.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/Schubert2*
++Copyright: 2013 Daniel R. Grayson <dan@math.uiuc.edu>
++ 2013 Michael E. Stillman <mike@math.cornell.edu>
++ 2013 Stein A. Strømme <stromme@math.uib.no>
++ 2013 David Eisenbud <de@msri.org>
++ 2013 Charley Crissman <charleyc@math.berkeley.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/SchurComplexes.m2
++Copyright: 2019 Michael K. Brown <mkbrown5@wisc.edu>
++ 2019 Amy Huang <hhuang235@math.wisc.edu>
++ 2019 Robert Laudone <robert.laudone@gmail.com>
++ 2019 Michael Perlman <mperlman@nd.edu>
++ 2019 Claudiu Raicu <craicu@nd.edu>
++ 2019 Steven V. Sam <ssam@sd.edu>
++ 2019 Joao Pedro Santos <jsantos3@nd.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/SchurFunctors*
++Copyright: 2008 Michael E. Stillman <mike@math.cornell.edu>
++ 2008 Anton Leykin
++ 2008 Mauricio Velasco
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/SchurRings.m2
++Copyright: 2007, 2011 Michael Stillman <mike@math.cornell.edu>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/SectionRing.m2
++Copyright: 2016 Andrew Bydlon <thelongdivider@gmail.com>
++License: public-domain
++
++Files: M2/Macaulay2/packages/SegreClasses.m2
++Copyright: 2018 Martin Helmer <m.helmer@math.ku.dk>
++ 2018 Corey Harris <Corey.Harris@mis.mpg.de>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/SemidefiniteProgramming*
++ M2/Macaulay2/packages/SumsOfSquares*
++Copyright: 2018, 2019 Diego Cifuentes <diegcif@mit.edu>
++ 2018, 2019 Thomas Kahle <thomas.kahle@ovgu.de>
++ 2018, 2019 Pablo A. Parrilo <parrilo@mit.edu>
++ 2018, 2019 Helfried Peyrl <peyrl@control.ee.ethz.ch>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Seminormalization.m2
++Copyright: 2019 Karl Schwede <schwede@math.utah.edu>
++ 2019 Bernard Serbinowski <bserbinowski@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/SimpleDoc*
++Copyright: 2020 Daniel R. Grayson <dan@math.uiuc.edu>
++ 2020 Mike Stillman <mike@math.cornell.edu>
++ 2020 Mahrud Sayrafi <mahrud@umn.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/SimplicialComplexes.m2
++Copyright: 2006, 2010 Sorin Popescu <sorin@math.sunysb.edu>
++ 2006, 2010 Gregory G. Smith <ggsmith@mast.queensu.ca>
++ 2006, 2010 Mike Stillman <mike@math.cornell.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/SimplicialPosets.m2
++Copyright: 2019 Nathan Nichols <nicho997@umn.edu>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/SlackIdeals.m2
++Copyright: 2020 Amy Wiebe <w.amy.math@gmail.com>
++ 2020 Antonio Macchia <macchia.antonello@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/SLnEquivariantMatrices.m2
++Copyright: 2017-2018 Paolo Lella <paolo.lella@polimi.it>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/SLPexpressions*
++Copyright: 2019 Anton Leykin <leykin@math.gatech.edu>
++ 2019 Timothy Duff <tduff3@gatech.edu>
++ 2019 Justin Chen <jchen646@math.gatech.edu>
++ 2019 Mike Stillman <mike@math.cornell.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/SpaceCurves.m2
++Copyright: 2018 Frank Schreyer <schreyer@math.uni-sb.de>
++ 2018 Mike Stillman <mike@math.cornell.edu>
++ 2018 Mengyuan Zhang <myzhang@berkeley.edu>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/SpechtModule.m2
++Copyright: 2019 Jonathan Niño <ja.nino937@uniandes.edu.co>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/StatGraphs.m2
++Copyright: 2020 Carlos Amendola <carlos.amendola@tum.de>
++ 2020 Luis David Garcia Puente <lgarcia@shsu.edu>
++ 2020 Roser Homs Pons <roser.homs@tum.de>
++ 2020 Olga Kuznetsova <kuznetsova.olga@gmail.com>
++ 2020 Harshit J Motwani <harshitmotwani2015@gmail.com>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/StronglyStableIdeals.m2
++Copyright: 2018 Davide Alberelli <davide.alberelli@gmail.com>
++ 2018 Paolo Lella <paolo.lella@polimi.it>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/SwitchingFields.m2
++Copyright: 2020 Zhan Jiang <zoeng@umich.edu>
++ 2020 Sarasij Maitra <sm3vg@virginia.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/SymbolicPowers.m2
++Copyright: 2019 Eloisa Grifo <grifo@umich.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/SymmetricPolynomials.m2
++ M2/Macaulay2/packages/undistributed-packages/ToricCohomology.m2
++Copyright: 2009 Alexandra Seceleanu
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/TangentCone.m2
++Copyright: 2006 Craig Huneke <huneke@math.ku.edu>
++ 2006 David Eisenbud <de@msri.org>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/TateOnProducts.m2
++Copyright: 2020 Daniel Erman <derman@math.wisc.edu>
++ 2020 David Eisenbud <de@msri.org>
++ 2020 Frank-Olaf Schreyer <schreyer@math.uni-sb.de>
++ 2020 Michael E. Stillman <mike@math.cornell.edu>
++ 2020 Yeongrak Kim <kim@math.uni-sb.de>
++Comment: See Comment at the top of this file.
++License: GPL-2+ and public-domain
++
++Files: M2/Macaulay2/packages/TensorComplexes.m2
++Copyright: 2011 David Eisenbud <de@msri.org>
++ 2011 Daniel Erman <derman@math.stanford.edu>
++ 2011 Gregory G. Smith <ggsmith@mast.queensu.ca>
++ 2011 Dumitru Stamate <dumitru.stamate@fmi.unibuc.ro>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/TestIdeals*
++Copyright: 2019 Erin Bela <ebela@nd.edu>
++ 2019 Alberto F. Boix <albertof.boix@gmail.com>
++ 2019 Juliette Bruce <juliette.bruce@math.wisc.edu>
++ 2019 Drew Ellingson <drewtell@umich.edu>
++ 2019 Daniel Hernandez <hernandez@ku.edu>
++ 2019 Zhibek Kadyrsizova <zhikadyr@umich.edu>
++ 2019 Mordechai Katzman <m.katzman@sheffield.ac.uk>
++ 2019 Sara Malec <malec@hood.edu>
++ 2019 Matthew Mastroeni <mmastro@okstate.edu>
++ 2019 Maral Mostafazadehfard <maralmostafazadehfard@gmail.com>
++ 2019 Marcus Robinson <robinson@math.utah.edu>
++ 2019 Karl Schwede <schwede@math.utah.edu>
++ 2019 Dan Smolkin <smolkin@math.utah.edu>
++ 2019 Pedro Teixeira <pteixeir@knox.edu>
++ 2019 Emily Witt <witt@ku.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/ThreadedGB.m2
++Copyright: 2020 Sonja Petrovic <sonja.petrovic@iit.edu>
++ 2020 Sara Jamshidi Zelenberg <szelenberg@mx.lakeforest.edu>
++ 2020 Tanner Zielinski <tzielin1@hawk.iit.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/TorAlgebra.m2
++Copyright: 2018 Lars Winther Christensen <lars.w.christensen@ttu.edu>
++ 2018 Oana Veliche <o.veliche@northeastern.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/ToricInvariants.m2
++Copyright: 2018 Martin Helmer <m.helmer@math.ku.dk>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/ToricTopology.m2
++Copyright: 2015 Alvise Trevisan <a.trevisan@enpicom.com>
++ 2015 Alexander I. Suciu <a.suciu@neu.edu>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/TriangularSets*
++Copyright: 2017 Diego Cifuentes <diegcif@mit.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/Triplets.m2
++Copyright: 2013 Gunnar Floystad <nmagf@uib.no>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Tropical*
++Copyright: 2019 Carlos Amendola <carlos.amendola@tum.de>
++ 2019 Kathlen Kohn <kathlen.korn@gmail.com>
++ 2019 Sara Lamboglia <lamboglia@math.uni-frankfurt.de>
++ 2019 Diane Maclagan <D.Maclagan@warwick.ac.uk>
++ 2019 Benjamin Smith <benjamin.smith@qmul.ac.uk>
++ 2019 Jeff Sommars <sommars1@uic.edu>
++ 2019 Paolo Tripoli <paolo.tripoli@nottingham.ac.uk>
++ 2019 Magdalena Zajaczkowska <Magdalena.A.Zajaczkowska@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/undistributed-packages/FrobeniusMultiplicities.m2
++ M2/Macaulay2/packages/undistributed-packages/Functoriality.m2
++Copyright: 2009 Jason G McCullough <jmccullo@math.ucr.edu>
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/undistributed-packages/Polyhedra2.m2
++ M2/Macaulay2/packages/undistributed-packages/PolyhedralObjects.m2
++Copyright: 2012 Nathan Ilten <nilten@math.berkeley.edu>
++ 2012 Josephine Yu
++ 2012 Qingchun Ren
++ 2010 Rene Birker
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/undistributed-packages/PolymakeInterface.m2
++Copyright: 2012 Josephine Yu <josephine.yu@math.gatech.edu>
++ 2012 Nathan Ilten <nilten@math.berkeley.edu>
++ 2012 Qingchun Ren <qingchun.ren@gmail.com>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/undistributed-packages/SubalgebraBases/sagbieng.m2
++ M2/Macaulay2/packages/undistributed-packages/SubalgebraBases/sagbitop.m2
++Copyright: 1997 Mike Stillman <mike@math.cornell.edu>
++ 1997 Harry Tsai
++License: GPL-2+
++
++Files: M2/Macaulay2/packages/VersalDeformations.m2
++Copyright: 2020 Nathan Owen Ilten <nilten@math.berkeley.edu>
++License: GPL-3+
++
++Files: M2/Macaulay2/packages/VirtualResolutions*
++Copyright: 2018-2020 Ayah Almousa <aka66@cornell.edu>
++ 2018-2020 Christine Berkesch <cberkesc@umn.edu>
++ 2018-2020 Juliette Bruce <jebruce2@wisc.edu>
++ 2018-2020 David Eisenbud <de@msri.org>
++ 2018-2020 Michael Loper <loper012@umn.edu>
++ 2018-2020 Mahrud Sayrafi <mahrud@umn.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/packages/Visualize*
++Copyright: 2017 Brett Barwick <bbarwick@uscupstate.edu>
++ 2017 Thomas Enkosky <tomenk@bu.edu>
++ 2017 Branden Stone <bstone@adelphi.edu>
++ 2017 Jim Vallandingham <vlandham@gmail.com>
++License: GPL-2+
++
++Files: debian/missing-sources/nouislider.*/*
++ M2/Macaulay2/packages/Visualize/css/nouislider.*
++ M2/Macaulay2/packages/Visualize/js/nouislider.min.js
++Copyright: 2016 Leon Gersen <leongersen@gmail.com>
++License: WTFPL
++Comment: https://github.com/leongersen/noUiSlider/tree/8.5.1
++
++Files: M2/Macaulay2/packages/Visualize/*/BootSideMenu.*
++Copyright: 2014-2017 Andrea Lombardo <andrealombardo84@gmail.com>
++License: Apache-2.0
++Comment: https://github.com/AndreaLombardo/BootSideMenu
++
++Files: M2/Macaulay2/packages/PrimaryDecomposition/associatedPrimes-test.m2
++Copyright: 2002 Jessica Sidman
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/tests/normal/CSM.test.m2
++Copyright: 2002 Paolo Aluffi
++License: freely-used-if-properly-acknowledged
++ This code can be freely used, provided use is properly acknowledged
++
++Files: M2/Macaulay2/tests/normal/ext2.m2
++Copyright: Ezra Miller <enmiller@math.berkeley.edu>
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/tests/normal/ext3.m2
++Copyright: Hal Schenck
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/tests/normal/groupcoh.m2
++Copyright: Sarah Wasserman
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/tests/normal/monideal2.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/det-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/genericMatrix-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/genericSkewMatrix-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/genericSymmetricMatrix-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/ideal-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isAffineRing-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isCommutative-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isField-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isFreeModule-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isIdeal-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isModule-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isMonomialIdeal-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isPolynomialRing-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isPrime-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isQuotientModule-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isQuotientRing-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isRing-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isSquareFree-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isSubmodule-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/isUnit-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/standardPairs-doc.m2
++ M2/Macaulay2/packages/Macaulay2Doc/functions/vars-doc.m2
++Copyright: Gregory G. Smith
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/tests/normal/schreyer.m2
++Copyright: Frank Schreyer
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/Macaulay2/tests/rationality/*.m2
++Copyright: Christian Boehning
++ Hans-Christian Graf v. Bothmer
++Comment: See Comment at the top of this file.
++License: public-domain
++
++Files: M2/usr-build/pkg.m4
++Copyright: 2004 Scott James Remnant <scott@netsplit.com>.
++ 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
++License: GPL-2+ with autoconf exception
++
++Files: M2/util/validator-runner.py
++Copyright: 2020 Janus Troelsen
++License: 0BSD
++Comment: https://github.com/ysangkok/w3c-validator-runner/blob/master/LICENSE
++
++License: 0BSD
++ Permission to use, copy, modify, and/or distribute this software for any
++ purpose with or without fee is hereby granted.
++ .
++ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
++ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
++ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
++ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
++ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
++ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ PERFORMANCE OF THIS SOFTWARE.
++
++License: BSD-3-clause
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions are
++ met:
++ .
++ 1. Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++ 2. Redistributions in binary form must reproduce the above copyright
++ notice, this list of conditions and the following disclaimer in the
++ documentation and/or other materials provided with the distribution.
++ 3. Neither the name of the copyright holder nor the names of its
++ contributors may be used to endorse or promote products derived from
++ this software without specific prior written permission.
++ .
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
++ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
++ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
++ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
++ AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
++ WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
++ POSSIBILITY OF SUCH DAMAGE.
++
++License: CECILL-B
++ CeCILL-B FREE SOFTWARE LICENSE AGREEMENT
++ .
++ Notice
++ .
++ This Agreement is a Free Software license agreement that is the result
++ of discussions between its authors in order to ensure compliance with
++ the two main principles guiding its drafting:
++ .
++ * firstly, compliance with the principles governing the distribution
++ of Free Software: access to source code, broad rights granted to
++ users,
++ * secondly, the election of a governing law, French law, with which
++ it is conformant, both as regards the law of torts and
++ intellectual property law, and the protection that it offers to
++ both authors and holders of the economic rights over software.
++ .
++ The authors of the CeCILL-B (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre])
++ license are:
++ .
++ Commissariat à l'Energie Atomique - CEA, a public scientific, technical
++ and industrial research establishment, having its principal place of
++ business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France.
++ .
++ Centre National de la Recherche Scientifique - CNRS, a public scientific
++ and technological establishment, having its principal place of business
++ at 3 rue Michel-Ange, 75794 Paris cedex 16, France.
++ .
++ Institut National de Recherche en Informatique et en Automatique -
++ INRIA, a public scientific and technological establishment, having its
++ principal place of business at Domaine de Voluceau, Rocquencourt, BP
++ 105, 78153 Le Chesnay cedex, France.
++ .
++ Preamble
++ .
++ This Agreement is an open source software license intended to give users
++ significant freedom to modify and redistribute the software licensed
++ hereunder.
++ .
++ The exercising of this freedom is conditional upon a strong obligation
++ of giving credits for everybody that distributes a software
++ incorporating a software ruled by the current license so as all
++ contributions to be properly identified and acknowledged.
++ .
++ In consideration of access to the source code and the rights to copy,
++ modify and redistribute granted by the license, users are provided only
++ with a limited warranty and the software's author, the holder of the
++ economic rights, and the successive licensors only have limited liability.
++ .
++ In this respect, the risks associated with loading, using, modifying
++ and/or developing or reproducing the software by the user are brought to
++ the user's attention, given its Free Software status, which may make it
++ complicated to use, with the result that its use is reserved for
++ developers and experienced professionals having in-depth computer
++ knowledge. Users are therefore encouraged to load and test the
++ suitability of the software as regards their requirements in conditions
++ enabling the security of their systems and/or data to be ensured and,
++ more generally, to use and operate it in the same conditions of
++ security. This Agreement may be freely reproduced and published,
++ provided it is not altered, and that no provisions are either added or
++ removed herefrom.
++ .
++ This Agreement may apply to any or all software for which the holder of
++ the economic rights decides to submit the use thereof to its provisions.
++ .
++ Article 1 - DEFINITIONS
++ .
++ For the purpose of this Agreement, when the following expressions
++ commence with a capital letter, they shall have the following meaning:
++ .
++ Agreement: means this license agreement, and its possible subsequent
++ versions and annexes.
++ .
++ Software: means the software in its Object Code and/or Source Code form
++ and, where applicable, its documentation, "as is" when the Licensee
++ accepts the Agreement.
++ .
++ Initial Software: means the Software in its Source Code and possibly its
++ Object Code form and, where applicable, its documentation, "as is" when
++ it is first distributed under the terms and conditions of the Agreement.
++ .
++ Modified Software: means the Software modified by at least one
++ Contribution.
++ .
++ Source Code: means all the Software's instructions and program lines to
++ which access is required so as to modify the Software.
++ .
++ Object Code: means the binary files originating from the compilation of
++ the Source Code.
++ .
++ Holder: means the holder(s) of the economic rights over the Initial
++ Software.
++ .
++ Licensee: means the Software user(s) having accepted the Agreement.
++ .
++ Contributor: means a Licensee having made at least one Contribution.
++ .
++ Licensor: means the Holder, or any other individual or legal entity, who
++ distributes the Software under the Agreement.
++ .
++ Contribution: means any or all modifications, corrections, translations,
++ adaptations and/or new functions integrated into the Software by any or
++ all Contributors, as well as any or all Internal Modules.
++ .
++ Module: means a set of sources files including their documentation that
++ enables supplementary functions or services in addition to those offered
++ by the Software.
++ .
++ External Module: means any or all Modules, not derived from the
++ Software, so that this Module and the Software run in separate address
++ spaces, with one calling the other when they are run.
++ .
++ Internal Module: means any or all Module, connected to the Software so
++ that they both execute in the same address space.
++ .
++ Parties: mean both the Licensee and the Licensor.
++ .
++ These expressions may be used both in singular and plural form.
++ .
++ Article 2 - PURPOSE
++ .
++ The purpose of the Agreement is the grant by the Licensor to the
++ Licensee of a non-exclusive, transferable and worldwide license for the
++ Software as set forth in Article 5 hereinafter for the whole term of the
++ protection granted by the rights over said Software.
++ .
++ Article 3 - ACCEPTANCE
++ .
++ 3.1 The Licensee shall be deemed as having accepted the terms and
++ conditions of this Agreement upon the occurrence of the first of the
++ following events:
++ .
++ * (i) loading the Software by any or all means, notably, by
++ downloading from a remote server, or by loading from a physical
++ medium;
++ * (ii) the first time the Licensee exercises any of the rights
++ granted hereunder.
++ .
++ 3.2 One copy of the Agreement, containing a notice relating to the
++ characteristics of the Software, to the limited warranty, and to the
++ fact that its use is restricted to experienced users has been provided
++ to the Licensee prior to its acceptance as set forth in Article 3.1
++ hereinabove, and the Licensee hereby acknowledges that it has read and
++ understood it.
++ .
++ Article 4 - EFFECTIVE DATE AND TERM
++ .
++ 4.1 EFFECTIVE DATE
++ .
++ The Agreement shall become effective on the date when it is accepted by
++ the Licensee as set forth in Article 3.1.
++ .
++ 4.2 TERM
++ .
++ The Agreement shall remain in force for the entire legal term of
++ protection of the economic rights over the Software.
++ .
++ Article 5 - SCOPE OF RIGHTS GRANTED
++ .
++ The Licensor hereby grants to the Licensee, who accepts, the following
++ rights over the Software for any or all use, and for the term of the
++ Agreement, on the basis of the terms and conditions set forth hereinafter.
++ .
++ Besides, if the Licensor owns or comes to own one or more patents
++ protecting all or part of the functions of the Software or of its
++ components, the Licensor undertakes not to enforce the rights granted by
++ these patents against successive Licensees using, exploiting or
++ modifying the Software. If these patents are transferred, the Licensor
++ undertakes to have the transferees subscribe to the obligations set
++ forth in this paragraph.
++ .
++ 5.1 RIGHT OF USE
++ .
++ The Licensee is authorized to use the Software, without any limitation
++ as to its fields of application, with it being hereinafter specified
++ that this comprises:
++ .
++ 1. permanent or temporary reproduction of all or part of the Software
++ by any or all means and in any or all form.
++ .
++ 2. loading, displaying, running, or storing the Software on any or
++ all medium.
++ .
++ 3. entitlement to observe, study or test its operation so as to
++ determine the ideas and principles behind any or all constituent
++ elements of said Software. This shall apply when the Licensee
++ carries out any or all loading, displaying, running, transmission
++ or storage operation as regards the Software, that it is entitled
++ to carry out hereunder.
++ .
++ 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS
++ .
++ The right to make Contributions includes the right to translate, adapt,
++ arrange, or make any or all modifications to the Software, and the right
++ to reproduce the resulting software.
++ .
++ The Licensee is authorized to make any or all Contributions to the
++ Software provided that it includes an explicit notice that it is the
++ author of said Contribution and indicates the date of the creation thereof.
++ .
++ 5.3 RIGHT OF DISTRIBUTION
++ .
++ In particular, the right of distribution includes the right to publish,
++ transmit and communicate the Software to the general public on any or
++ all medium, and by any or all means, and the right to market, either in
++ consideration of a fee, or free of charge, one or more copies of the
++ Software by any means.
++ .
++ The Licensee is further authorized to distribute copies of the modified
++ or unmodified Software to third parties according to the terms and
++ conditions set forth hereinafter.
++ .
++ 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION
++ .
++ The Licensee is authorized to distribute true copies of the Software in
++ Source Code or Object Code form, provided that said distribution
++ complies with all the provisions of the Agreement and is accompanied by:
++ .
++ 1. a copy of the Agreement,
++ .
++ 2. a notice relating to the limitation of both the Licensor's
++ warranty and liability as set forth in Articles 8 and 9,
++ .
++ and that, in the event that only the Object Code of the Software is
++ redistributed, the Licensee allows effective access to the full Source
++ Code of the Software at a minimum during the entire period of its
++ distribution of the Software, it being understood that the additional
++ cost of acquiring the Source Code shall not exceed the cost of
++ transferring the data.
++ .
++ 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE
++ .
++ If the Licensee makes any Contribution to the Software, the resulting
++ Modified Software may be distributed under a license agreement other
++ than this Agreement subject to compliance with the provisions of Article
++ 5.3.4.
++ .
++ 5.3.3 DISTRIBUTION OF EXTERNAL MODULES
++ .
++ When the Licensee has developed an External Module, the terms and
++ conditions of this Agreement do not apply to said External Module, that
++ may be distributed under a separate license agreement.
++ .
++ 5.3.4 CREDITS
++ .
++ Any Licensee who may distribute a Modified Software hereby expressly
++ agrees to:
++ .
++ 1. indicate in the related documentation that it is based on the
++ Software licensed hereunder, and reproduce the intellectual
++ property notice for the Software,
++ .
++ 2. ensure that written indications of the Software intended use,
++ intellectual property notice and license hereunder are included in
++ easily accessible format from the Modified Software interface,
++ .
++ 3. mention, on a freely accessible website describing the Modified
++ Software, at least throughout the distribution term thereof, that
++ it is based on the Software licensed hereunder, and reproduce the
++ Software intellectual property notice,
++ .
++ 4. where it is distributed to a third party that may distribute a
++ Modified Software without having to make its source code
++ available, make its best efforts to ensure that said third party
++ agrees to comply with the obligations set forth in this Article .
++ .
++ If the Software, whether or not modified, is distributed with an
++ External Module designed for use in connection with the Software, the
++ Licensee shall submit said External Module to the foregoing obligations.
++ .
++ 5.3.5 COMPATIBILITY WITH THE CeCILL AND CeCILL-C LICENSES
++ .
++ Where a Modified Software contains a Contribution subject to the CeCILL
++ license, the provisions set forth in Article 5.3.4 shall be optional.
++ .
++ A Modified Software may be distributed under the CeCILL-C license. In
++ such a case the provisions set forth in Article 5.3.4 shall be optional.
++ .
++ Article 6 - INTELLECTUAL PROPERTY
++ .
++ 6.1 OVER THE INITIAL SOFTWARE
++ .
++ The Holder owns the economic rights over the Initial Software. Any or
++ all use of the Initial Software is subject to compliance with the terms
++ and conditions under which the Holder has elected to distribute its work
++ and no one shall be entitled to modify the terms and conditions for the
++ distribution of said Initial Software.
++ .
++ The Holder undertakes that the Initial Software will remain ruled at
++ least by this Agreement, for the duration set forth in Article 4.2.
++ .
++ 6.2 OVER THE CONTRIBUTIONS
++ .
++ The Licensee who develops a Contribution is the owner of the
++ intellectual property rights over this Contribution as defined by
++ applicable law.
++ .
++ 6.3 OVER THE EXTERNAL MODULES
++ .
++ The Licensee who develops an External Module is the owner of the
++ intellectual property rights over this External Module as defined by
++ applicable law and is free to choose the type of agreement that shall
++ govern its distribution.
++ .
++ 6.4 JOINT PROVISIONS
++ .
++ The Licensee expressly undertakes:
++ .
++ 1. not to remove, or modify, in any manner, the intellectual property
++ notices attached to the Software;
++ .
++ 2. to reproduce said notices, in an identical manner, in the copies
++ of the Software modified or not.
++ .
++ The Licensee undertakes not to directly or indirectly infringe the
++ intellectual property rights of the Holder and/or Contributors on the
++ Software and to take, where applicable, vis-�-vis its staff, any and all
++ measures required to ensure respect of said intellectual property rights
++ of the Holder and/or Contributors.
++ .
++ Article 7 - RELATED SERVICES
++ .
++ 7.1 Under no circumstances shall the Agreement oblige the Licensor to
++ provide technical assistance or maintenance services for the Software.
++ .
++ However, the Licensor is entitled to offer this type of services. The
++ terms and conditions of such technical assistance, and/or such
++ maintenance, shall be set forth in a separate instrument. Only the
++ Licensor offering said maintenance and/or technical assistance services
++ shall incur liability therefor.
++ .
++ 7.2 Similarly, any Licensor is entitled to offer to its licensees, under
++ its sole responsibility, a warranty, that shall only be binding upon
++ itself, for the redistribution of the Software and/or the Modified
++ Software, under terms and conditions that it is free to decide. Said
++ warranty, and the financial terms and conditions of its application,
++ shall be subject of a separate instrument executed between the Licensor
++ and the Licensee.
++ .
++ Article 8 - LIABILITY
++ .
++ 8.1 Subject to the provisions of Article 8.2, the Licensee shall be
++ entitled to claim compensation for any direct loss it may have suffered
++ from the Software as a result of a fault on the part of the relevant
++ Licensor, subject to providing evidence thereof.
++ .
++ 8.2 The Licensor's liability is limited to the commitments made under
++ this Agreement and shall not be incurred as a result of in particular:
++ (i) loss due the Licensee's total or partial failure to fulfill its
++ obligations, (ii) direct or consequential loss that is suffered by the
++ Licensee due to the use or performance of the Software, and (iii) more
++ generally, any consequential loss. In particular the Parties expressly
++ agree that any or all pecuniary or business loss (i.e. loss of data,
++ loss of profits, operating loss, loss of customers or orders,
++ opportunity cost, any disturbance to business activities) or any or all
++ legal proceedings instituted against the Licensee by a third party,
++ shall constitute consequential loss and shall not provide entitlement to
++ any or all compensation from the Licensor.
++ .
++ Article 9 - WARRANTY
++ .
++ 9.1 The Licensee acknowledges that the scientific and technical
++ state-of-the-art when the Software was distributed did not enable all
++ possible uses to be tested and verified, nor for the presence of
++ possible defects to be detected. In this respect, the Licensee's
++ attention has been drawn to the risks associated with loading, using,
++ modifying and/or developing and reproducing the Software which are
++ reserved for experienced users.
++ .
++ The Licensee shall be responsible for verifying, by any or all means,
++ the suitability of the product for its requirements, its good working
++ order, and for ensuring that it shall not cause damage to either persons
++ or properties.
++ .
++ 9.2 The Licensor hereby represents, in good faith, that it is entitled
++ to grant all the rights over the Software (including in particular the
++ rights set forth in Article 5).
++ .
++ 9.3 The Licensee acknowledges that the Software is supplied "as is" by
++ the Licensor without any other express or tacit warranty, other than
++ that provided for in Article 9.2 and, in particular, without any warranty
++ as to its commercial value, its secured, safe, innovative or relevant
++ nature.
++ .
++ Specifically, the Licensor does not warrant that the Software is free
++ from any error, that it will operate without interruption, that it will
++ be compatible with the Licensee's own equipment and software
++ configuration, nor that it will meet the Licensee's requirements.
++ .
++ 9.4 The Licensor does not either expressly or tacitly warrant that the
++ Software does not infringe any third party intellectual property right
++ relating to a patent, software or any other property right. Therefore,
++ the Licensor disclaims any and all liability towards the Licensee
++ arising out of any or all proceedings for infringement that may be
++ instituted in respect of the use, modification and redistribution of the
++ Software. Nevertheless, should such proceedings be instituted against
++ the Licensee, the Licensor shall provide it with technical and legal
++ assistance for its defense. Such technical and legal assistance shall be
++ decided on a case-by-case basis between the relevant Licensor and the
++ Licensee pursuant to a memorandum of understanding. The Licensor
++ disclaims any and all liability as regards the Licensee's use of the
++ name of the Software. No warranty is given as regards the existence of
++ prior rights over the name of the Software or as regards the existence
++ of a trademark.
++ .
++ Article 10 - TERMINATION
++ .
++ 10.1 In the event of a breach by the Licensee of its obligations
++ hereunder, the Licensor may automatically terminate this Agreement
++ thirty (30) days after notice has been sent to the Licensee and has
++ remained ineffective.
++ .
++ 10.2 A Licensee whose Agreement is terminated shall no longer be
++ authorized to use, modify or distribute the Software. However, any
++ licenses that it may have granted prior to termination of the Agreement
++ shall remain valid subject to their having been granted in compliance
++ with the terms and conditions hereof.
++ .
++ Article 11 - MISCELLANEOUS
++ .
++ 11.1 EXCUSABLE EVENTS
++ .
++ Neither Party shall be liable for any or all delay, or failure to
++ perform the Agreement, that may be attributable to an event of force
++ majeure, an act of God or an outside cause, such as defective
++ functioning or interruptions of the electricity or telecommunications
++ networks, network paralysis following a virus attack, intervention by
++ government authorities, natural disasters, water damage, earthquakes,
++ fire, explosions, strikes and labor unrest, war, etc.
++ .
++ 11.2 Any failure by either Party, on one or more occasions, to invoke
++ one or more of the provisions hereof, shall under no circumstances be
++ interpreted as being a waiver by the interested Party of its right to
++ invoke said provision(s) subsequently.
++ .
++ 11.3 The Agreement cancels and replaces any or all previous agreements,
++ whether written or oral, between the Parties and having the same
++ purpose, and constitutes the entirety of the agreement between said
++ Parties concerning said purpose. No supplement or modification to the
++ terms and conditions hereof shall be effective as between the Parties
++ unless it is made in writing and signed by their duly authorized
++ representatives.
++ .
++ 11.4 In the event that one or more of the provisions hereof were to
++ conflict with a current or future applicable act or legislative text,
++ said act or legislative text shall prevail, and the Parties shall make
++ the necessary amendments so as to comply with said act or legislative
++ text. All other provisions shall remain effective. Similarly, invalidity
++ of a provision of the Agreement, for any reason whatsoever, shall not
++ cause the Agreement as a whole to be invalid.
++ .
++ 11.5 LANGUAGE
++ .
++ The Agreement is drafted in both French and English and both versions
++ are deemed authentic.
++ .
++ Article 12 - NEW VERSIONS OF THE AGREEMENT
++ .
++ 12.1 Any person is authorized to duplicate and distribute copies of this
++ Agreement.
++ .
++ 12.2 So as to ensure coherence, the wording of this Agreement is
++ protected and may only be modified by the authors of the License, who
++ reserve the right to periodically publish updates or new versions of the
++ Agreement, each with a separate number. These subsequent versions may
++ address new issues encountered by Free Software.
++ .
++ 12.3 Any Software distributed under a given version of the Agreement may
++ only be subsequently distributed under the same version of the Agreement
++ or a subsequent version.
++ .
++ Article 13 - GOVERNING LAW AND JURISDICTION
++ .
++ 13.1 The Agreement is governed by French law. The Parties agree to
++ endeavor to seek an amicable solution to any disagreements or disputes
++ that may arise during the performance of the Agreement.
++ .
++ 13.2 Failing an amicable solution within two (2) months as from their
++ occurrence, and unless emergency proceedings are necessary, the
++ disagreements or disputes shall be referred to the Paris Courts having
++ jurisdiction, by the more diligent Party.
++ .
++ Version 1.0 dated 2006-09-05.
++
++License: Expat
++ Permission is hereby granted, free of charge, to any person obtaining
++ a copy of this software and associated documentation files (the
++ "Software"), to deal in the Software without restriction, including
++ without limitation the rights to use, copy, modify, merge, publish,
++ distribute, sublicense, and/or sell copies of the Software, and to
++ permit persons to whom the Software is furnished to do so, subject to
++ the following conditions:
++ .
++ The above copyright notice and this permission notice shall be included
++ in all copies or substantial portions of the Software.
++ .
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++
++License: FSFAP
++ Copying and distribution of this file, with or without modification,
++ are permitted in any medium without royalty provided the copyright
++ notice and this notice are preserved. This file is offered as-is,
++ without any warranty.
++
++License: GPL-2+
++ This package 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.
++ .
++ This package 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 this program. If not, see <http://www.gnu.org/licenses/>
++ .
++ On Debian systems, the complete text of the GNU General
++ Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
++
++License: GPL-2+ with autoconf exception
++ This package 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.
++ .
++ This package 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 this program. If not, see <http://www.gnu.org/licenses/>
++ .
++ As a special exception, the respective Autoconf Macro's copyright owner
++ gives unlimited permission to copy, distribute and modify the configure
++ scripts that are the output of Autoconf when processing the Macro. You
++ need not follow the terms of the GNU General Public License when using
++ or distributing such scripts, even though portions of the text of the
++ Macro appear in them. The GNU General Public License (GPL) does govern
++ all other use of the material that constitutes the Autoconf Macro.
++ .
++ This special exception to the GPL applies to versions of the Autoconf
++ Macro released by the Autoconf Archive. When you make and distribute a
++ modified version of the Autoconf Macro, you may extend this special
++ exception to the GPL to apply to your modified version as well.
++ .
++ On Debian systems, the complete text of the GNU General
++ Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
++
++License: GPL-3+
++ This program 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 3 of the License, or
++ (at your option) any later version.
++ .
++ This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
++ .
++ On Debian systems, the complete text of the GNU General
++ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
++
++License: public-domain
++ This file is in the public domain.
++
++License: Apache-2.0
++ Licensed under the Apache License, Version 2.0 (the "License");
++ you may not use this file except in compliance with the License.
++ You may obtain a copy of the License at
++ .
++ http://www.apache.org/licenses/LICENSE-2.0
++ .
++ Unless required by applicable law or agreed to in writing, software
++ distributed under the License is distributed on an "AS IS" BASIS,
++ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ See the License for the specific language governing permissions and
++ limitations under the License.
++ .
++ On Debian systems, the complete text of the Apache License Version 2.0
++ can be found in `/usr/share/common-licenses/Apache-2.0'.
++
++License: WTFPL
++ This work is free. You can redistribute it and/or modify it under the
++ terms of the Do What The Fuck You Want To Public License, Version 2,
++ as published by Sam Hocevar.
++ .
++ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
++ Version 2, December 2004
++ .
++ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
++ .
++ Everyone is permitted to copy and distribute verbatim or modified
++ copies of this license document, and changing it is allowed as long
++ as the name is changed.
++ .
++ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
++ .
++ 0. You just DO WHAT THE FUCK YOU WANT TO.
--- /dev/null
--- /dev/null
++usr/share/emacs/site-lisp/elpa/macaulay2-*/*.m2
++usr/share/emacs/site-lisp/elpa/macaulay2-*/*.md
++usr/share/emacs/site-lisp/elpa/macaulay2-*/*.txt
--- /dev/null
--- /dev/null
++debian/macaulay2-pkg.el
++debian/tmp/usr/share/emacs/site-lisp/elpa/macaulay2-*/*.el
--- /dev/null
--- /dev/null
++# don't override dh_auto_test with dh_elpa_test
++disable = true
--- /dev/null
--- /dev/null
++[buildpackage]
++pristine-tar = True
++# need M2-emacs submodule
++preexport = git submodule init M2/Macaulay2/editors/emacs &&
++ git submodule update
++postexport = SOURCE_DIR=`echo $GBP_GIT_DIR | sed 's/\/\.git//'` &&
++ cp -r $SOURCE_DIR/M2/Macaulay2/editors/emacs/* \
++ $GBP_TMP_DIR/M2/Macaulay2/editors/emacs
++# if we're not using export-dir
++prebuild = if test ! -f M2/Macaulay2/editors/emacs/make-M2-emacs-help.m2
++ then git submodule init M2/Macaulay2/editors/emacs &&
++ git submodule update
++ fi
++
++[export-orig]
++pristine-tar = True
--- /dev/null
--- /dev/null
++Document: macaulay2
++Title: Macaulay2 Documentation
++Author: Daniel R. Grayson and Michael E. Stillman
++Abstract: Macaulay2 is a software system devoted to supporting research in
++ algebraic geometry and commutative algebra, developed with funding from the
++ National Science Foundation. We are eager to help new users get started with
++ it.
++Section: Science/Mathematics
++
++Format: HTML
++Index: /usr/share/doc/Macaulay2/Macaulay2Doc/html/index.html
++Files: /usr/share/doc/Macaulay2/*/html/*.html
++
++Format: Info
++Index: /usr/share/info/Macaulay2Doc.info.gz
++Files: /usr/share/info/*.info.gz
--- /dev/null
--- /dev/null
++usr/share/Macaulay2
++usr/share/doc
++usr/share/info/*.info
--- /dev/null
--- /dev/null
++#################################
++# Embedded Javascript libraries #
++#################################
++
++# Visualize
++embed-weakdep usr/share/fonts-glyphicons usr/share/Macaulay2/Visualize/fonts
++embed-weakdep usr/share/javascript/bootstrap/css/bootstrap.min.css usr/share/Macaulay2/Visualize/css/bootstrap.min.css
++embed-weakdep usr/share/javascript/bootstrap/js/bootstrap.min.js usr/share/Macaulay2/Visualize/js/bootstrap.min.js
++embed-weakdep usr/share/nodejs/clipboard/dist/clipboard.js usr/share/Macaulay2/Visualize/js/clipboard.min.js
++embed-weakdep usr/share/javascript/d3/d3.min.js usr/share/Macaulay2/Visualize/js/d3.v3.min.js
++embed-weakdep usr/share/javascript/jquery/jquery.min.js usr/share/Macaulay2/Visualize/js/jquery-1.11.3.min.js
++embed-weakdep usr/share/javascript/three/three.min.js usr/share/Macaulay2/Visualize/js/three.min.js
++embed-weakdep usr/share/javascript/underscore/underscore.min.js usr/share/Macaulay2/Visualize/js/underscore.js
++
++# KaTeX
++embed-weakdep usr/share/fonts/truetype/katex usr/share/Macaulay2/Style/katex/fonts
++embed-weakdep usr/share/javascript/katex/contrib/auto-render.js usr/share/Macaulay2/Style/katex/contrib/auto-render.min.js
++embed-weakdep usr/share/javascript/katex/contrib/copy-tex.css usr/share/Macaulay2/Style/katex/contrib/copy-tex.min.css
++embed-weakdep usr/share/javascript/katex/contrib/copy-tex.js usr/share/Macaulay2/Style/katex/contrib/copy-tex.min.js
++embed-weakdep usr/share/javascript/katex/katex.css usr/share/Macaulay2/Style/katex/katex.min.css
++embed-weakdep usr/share/javascript/katex/katex.js usr/share/Macaulay2/Style/katex/katex.min.js
++
++########################################
++# Copies of GNU General Public License #
++########################################
++
++embed-weakdep usr/share/common-licenses/GPL-2 usr/share/doc/Macaulay2/COPYING-GPL-2
++embed-weakdep usr/share/common-licenses/GPL-3 usr/share/doc/Macaulay2/COPYING-GPL-3
--- /dev/null
--- /dev/null
++# these files describe the contents of the corresponding package directories
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Macaulay2Doc/COPYRIGHT
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Macaulay2Doc/README
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Matroids/SmallMatroids.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/MonodromySolver/paper-examples/README.md
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NumericalAlgebraicGeometry/README
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NumericalAlgebraicGeometry/TST/README.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NAGtypes/TO-DO-doc.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NCAlgebra/installNCAlgebra.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NormalToricVarieties/smallSmoothProjectiveToricVarieties.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NormalToricVarieties/smoothFanoToricVarieties.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NormalToricVarieties/smoothFanoToricVarieties5.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NormalToricVarieties/smoothFanoToricVarieties6.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NumericalAlgebraicGeometry/TO-DO-WSet.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NumericalAlgebraicGeometry/TO-DO-arb.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NumericalAlgebraicGeometry/TO-DO-doc.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NumericalAlgebraicGeometry/TO-DO-SLEvaluatorCompiled.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NumericalAlgebraicGeometry/TO-DO.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NumericalSchubertCalculus/FunctionsExported.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NumericalSchubertCalculus/README
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/NumericalSchubertCalculus/ToDo
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Polyhedra/tests/fails_from_googlegroup.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Polyhedra/TODO
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReactionNetworks/Readme.md
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks-dim3.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks1-n5.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks11+24-n200.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks2-n36.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks21-n100.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks3-n244.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks300-n20.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks491-n1.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks5+53-n204.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks5-n50.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/ReflexivePolytopesDB/ks9+21-n10.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/SCSCP/README-gap.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/SLPexpressions/TO-DO.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Schubert2/Stromme/elliptic_quartics.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Schubert2/Stromme/letter_to_collino.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Schubert2/Stromme/toricubics.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/SchurFunctors/character.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/SchurFunctors/schur.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/SchurFunctors/schurModule.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/SchurFunctors/schurModulesMap.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/SchurFunctors/splitCharacter.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/SchurFunctors/straightenSchur.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/SimpleDoc/doc.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/SimpleDoc/helpers-doc.txt
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Visualize/digraph-example.html
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Visualize/graph-example.html
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Visualize/ideal2d-example.html
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Visualize/ideal3d-example.html
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Visualize/poset-example.html
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/Visualize/simplicial-complex-example.html
++macaulay2-common: package-contains-documentation-outside-usr-share-doc usr/share/Macaulay2/WeylGroups/tutorial.html
--- /dev/null
--- /dev/null
++(define-package "macaulay2" "@VERSION@" "Emacs Package for Macaulay2" 'nil)
--- /dev/null
--- /dev/null
++usr/bin
++usr/lib
++usr/share/man
--- /dev/null
--- /dev/null
++usr/share/man/man1/M2.1 usr/share/man/man1/M2-binary.1
--- /dev/null
--- /dev/null
++
++/* Functional styling;
++ * These styles are required for noUiSlider to function.
++ * You don't need to change these rules to apply your design.
++ */
++.noUi-target,
++.noUi-target * {
++-webkit-touch-callout: none;
++-webkit-user-select: none;
++-ms-touch-action: none;
++ touch-action: none;
++-ms-user-select: none;
++-moz-user-select: none;
++ user-select: none;
++-moz-box-sizing: border-box;
++ box-sizing: border-box;
++}
++.noUi-target {
++ position: relative;
++ direction: ltr;
++}
++.noUi-base {
++ width: 100%;
++ height: 100%;
++ position: relative;
++ z-index: 1; /* Fix 401 */
++}
++.noUi-origin {
++ position: absolute;
++ right: 0;
++ top: 0;
++ left: 0;
++ bottom: 0;
++}
++.noUi-handle {
++ position: relative;
++ z-index: 1;
++}
++.noUi-stacking .noUi-handle {
++/* This class is applied to the lower origin when
++ its values is > 50%. */
++ z-index: 10;
++}
++.noUi-state-tap .noUi-origin {
++-webkit-transition: left 0.3s, top 0.3s;
++ transition: left 0.3s, top 0.3s;
++}
++.noUi-state-drag * {
++ cursor: inherit !important;
++}
++
++/* Painting and performance;
++ * Browsers can paint handles in their own layer.
++ */
++.noUi-base,
++.noUi-handle {
++ -webkit-transform: translate3d(0,0,0);
++ transform: translate3d(0,0,0);
++}
++
++/* Slider size and handle placement;
++ */
++.noUi-horizontal {
++ height: 18px;
++}
++.noUi-horizontal .noUi-handle {
++ width: 34px;
++ height: 28px;
++ left: -17px;
++ top: -6px;
++}
++.noUi-vertical {
++ width: 18px;
++}
++.noUi-vertical .noUi-handle {
++ width: 28px;
++ height: 34px;
++ left: -6px;
++ top: -17px;
++}
++
++/* Styling;
++ */
++.noUi-background {
++ background: #FAFAFA;
++ box-shadow: inset 0 1px 1px #f0f0f0;
++}
++.noUi-connect {
++ background: #3FB8AF;
++ box-shadow: inset 0 0 3px rgba(51,51,51,0.45);
++-webkit-transition: background 450ms;
++ transition: background 450ms;
++}
++.noUi-origin {
++ border-radius: 2px;
++}
++.noUi-target {
++ border-radius: 4px;
++ border: 1px solid #D3D3D3;
++ box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB;
++}
++.noUi-target.noUi-connect {
++ box-shadow: inset 0 0 3px rgba(51,51,51,0.45), 0 3px 6px -5px #BBB;
++}
++
++/* Handles and cursors;
++ */
++.noUi-draggable {
++ cursor: w-resize;
++}
++.noUi-vertical .noUi-draggable {
++ cursor: n-resize;
++}
++.noUi-handle {
++ border: 1px solid #D9D9D9;
++ border-radius: 3px;
++ background: #FFF;
++ cursor: default;
++ box-shadow: inset 0 0 1px #FFF,
++ inset 0 1px 7px #EBEBEB,
++ 0 3px 6px -3px #BBB;
++}
++.noUi-active {
++ box-shadow: inset 0 0 1px #FFF,
++ inset 0 1px 7px #DDD,
++ 0 3px 6px -3px #BBB;
++}
++
++/* Handle stripes;
++ */
++.noUi-handle:before,
++.noUi-handle:after {
++ content: "";
++ display: block;
++ position: absolute;
++ height: 14px;
++ width: 1px;
++ background: #E8E7E6;
++ left: 14px;
++ top: 6px;
++}
++.noUi-handle:after {
++ left: 17px;
++}
++.noUi-vertical .noUi-handle:before,
++.noUi-vertical .noUi-handle:after {
++ width: 14px;
++ height: 1px;
++ left: 6px;
++ top: 14px;
++}
++.noUi-vertical .noUi-handle:after {
++ top: 17px;
++}
++
++/* Disabled state;
++ */
++[disabled].noUi-connect,
++[disabled] .noUi-connect {
++ background: #B8B8B8;
++}
++[disabled].noUi-origin,
++[disabled] .noUi-handle {
++ cursor: not-allowed;
++}
--- /dev/null
--- /dev/null
++
++/* Base;
++ *
++ */
++.noUi-pips,
++.noUi-pips * {
++-moz-box-sizing: border-box;
++ box-sizing: border-box;
++}
++.noUi-pips {
++ position: absolute;
++ color: #999;
++}
++
++/* Values;
++ *
++ */
++.noUi-value {
++ position: absolute;
++ text-align: center;
++}
++.noUi-value-sub {
++ color: #ccc;
++ font-size: 10px;
++}
++
++/* Markings;
++ *
++ */
++.noUi-marker {
++ position: absolute;
++ background: #CCC;
++}
++.noUi-marker-sub {
++ background: #AAA;
++}
++.noUi-marker-large {
++ background: #AAA;
++}
++
++/* Horizontal layout;
++ *
++ */
++.noUi-pips-horizontal {
++ padding: 10px 0;
++ height: 80px;
++ top: 100%;
++ left: 0;
++ width: 100%;
++}
++.noUi-value-horizontal {
++ -webkit-transform: translate3d(-50%,50%,0);
++ transform: translate3d(-50%,50%,0);
++}
++
++.noUi-marker-horizontal.noUi-marker {
++ margin-left: -1px;
++ width: 2px;
++ height: 5px;
++}
++.noUi-marker-horizontal.noUi-marker-sub {
++ height: 10px;
++}
++.noUi-marker-horizontal.noUi-marker-large {
++ height: 15px;
++}
++
++/* Vertical layout;
++ *
++ */
++.noUi-pips-vertical {
++ padding: 0 10px;
++ height: 100%;
++ top: 0;
++ left: 100%;
++}
++.noUi-value-vertical {
++ -webkit-transform: translate3d(0,-50%,0);
++ transform: translate3d(0,-50%,0);
++ padding-left: 25px;
++}
++
++.noUi-marker-vertical.noUi-marker {
++ width: 5px;
++ height: 2px;
++ margin-top: -1px;
++}
++.noUi-marker-vertical.noUi-marker-sub {
++ width: 10px;
++}
++.noUi-marker-vertical.noUi-marker-large {
++ width: 15px;
++}
--- /dev/null
--- /dev/null
++.noUi-tooltip {
++ display: block;
++ position: absolute;
++ border: 1px solid #D9D9D9;
++ border-radius: 3px;
++ background: #fff;
++ padding: 5px;
++ text-align: center;
++}
++
++.noUi-horizontal .noUi-handle-lower .noUi-tooltip {
++ top: -32px;
++}
++.noUi-horizontal .noUi-handle-upper .noUi-tooltip {
++ bottom: -32px;
++}
++.noUi-vertical .noUi-handle-lower .noUi-tooltip {
++ left: 120%;
++}
++.noUi-vertical .noUi-handle-upper .noUi-tooltip {
++ right: 120%;
++}
--- /dev/null
--- /dev/null
++ // we provide a function to compute constants instead
++ // of accessing window.* as soon as the module needs it
++ // so that we do not compute anything if not needed
++ function getActions ( ) {
++
++ // Determine the events to bind. IE11 implements pointerEvents without
++ // a prefix, which breaks compatibility with the IE10 implementation.
++ return window.navigator.pointerEnabled ? {
++ start: 'pointerdown',
++ move: 'pointermove',
++ end: 'pointerup'
++ } : window.navigator.msPointerEnabled ? {
++ start: 'MSPointerDown',
++ move: 'MSPointerMove',
++ end: 'MSPointerUp'
++ } : {
++ start: 'mousedown touchstart',
++ move: 'mousemove touchmove',
++ end: 'mouseup touchend'
++ };
++ }
--- /dev/null
--- /dev/null
++
++ // Removes duplicates from an array.
++ function unique(array) {
++ return array.filter(function(a){
++ return !this[a] ? this[a] = true : false;
++ }, {});
++ }
++
++ // Round a value to the closest 'to'.
++ function closest ( value, to ) {
++ return Math.round(value / to) * to;
++ }
++
++ // Current position of an element relative to the document.
++ function offset ( elem ) {
++
++ var rect = elem.getBoundingClientRect(),
++ doc = elem.ownerDocument,
++ docElem = doc.documentElement,
++ pageOffset = getPageOffset();
++
++ // getBoundingClientRect contains left scroll in Chrome on Android.
++ // I haven't found a feature detection that proves this. Worst case
++ // scenario on mis-match: the 'tap' feature on horizontal sliders breaks.
++ if ( /webkit.*Chrome.*Mobile/i.test(navigator.userAgent) ) {
++ pageOffset.x = 0;
++ }
++
++ return {
++ top: rect.top + pageOffset.y - docElem.clientTop,
++ left: rect.left + pageOffset.x - docElem.clientLeft
++ };
++ }
++
++ // Checks whether a value is numerical.
++ function isNumeric ( a ) {
++ return typeof a === 'number' && !isNaN( a ) && isFinite( a );
++ }
++
++ // Sets a class and removes it after [duration] ms.
++ function addClassFor ( element, className, duration ) {
++ addClass(element, className);
++ setTimeout(function(){
++ removeClass(element, className);
++ }, duration);
++ }
++
++ // Limits a value to 0 - 100
++ function limit ( a ) {
++ return Math.max(Math.min(a, 100), 0);
++ }
++
++ // Wraps a variable as an array, if it isn't one yet.
++ function asArray ( a ) {
++ return Array.isArray(a) ? a : [a];
++ }
++
++ // Counts decimals
++ function countDecimals ( numStr ) {
++ var pieces = numStr.split(".");
++ return pieces.length > 1 ? pieces[1].length : 0;
++ }
++
++ // http://youmightnotneedjquery.com/#add_class
++ function addClass ( el, className ) {
++ if ( el.classList ) {
++ el.classList.add(className);
++ } else {
++ el.className += ' ' + className;
++ }
++ }
++
++ // http://youmightnotneedjquery.com/#remove_class
++ function removeClass ( el, className ) {
++ if ( el.classList ) {
++ el.classList.remove(className);
++ } else {
++ el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
++ }
++ }
++
++ // https://plainjs.com/javascript/attributes/adding-removing-and-testing-for-classes-9/
++ function hasClass ( el, className ) {
++ return el.classList ? el.classList.contains(className) : new RegExp('\\b' + className + '\\b').test(el.className);
++ }
++
++ // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes
++ function getPageOffset ( ) {
++
++ var supportPageOffset = window.pageXOffset !== undefined,
++ isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"),
++ x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft,
++ y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;
++
++ return {
++ x: x,
++ y: y
++ };
++ }
--- /dev/null
--- /dev/null
++
++ // Run the standard initializer
++ function initialize ( target, originalOptions ) {
++
++ if ( !target.nodeName ) {
++ throw new Error('noUiSlider.create requires a single element.');
++ }
++
++ // Test the options and create the slider environment;
++ var options = testOptions( originalOptions, target ),
++ slider = closure( target, options, originalOptions );
++
++ // Use the public value method to set the start values.
++ slider.set(options.start);
++
++ target.noUiSlider = slider;
++ return slider;
++ }
++
++ // Use an object instead of a function for future expansibility;
++ return {
++ create: initialize
++ };
--- /dev/null
--- /dev/null
++(function (factory) {
++
++ if ( typeof define === 'function' && define.amd ) {
++
++ // AMD. Register as an anonymous module.
++ define([], factory);
++
++ } else if ( typeof exports === 'object' ) {
++
++ // Node/CommonJS
++ module.exports = factory();
++
++ } else {
++
++ // Browser globals
++ window.noUiSlider = factory();
++ }
++
++}(function( ){
++
++ 'use strict';
--- /dev/null
--- /dev/null
++/* Every input option is tested and parsed. This'll prevent
++ endless validation in internal methods. These tests are
++ structured with an item for every option available. An
++ option can be marked as required by setting the 'r' flag.
++ The testing function is provided with three arguments:
++ - The provided value for the option;
++ - A reference to the options object;
++ - The name for the option;
++
++ The testing function returns false when an error is detected,
++ or true when everything is OK. It can also modify the option
++ object, to make sure all values can be correctly looped elsewhere. */
++
++ var defaultFormatter = { 'to': function( value ){
++ return value !== undefined && value.toFixed(2);
++ }, 'from': Number };
++
++ function testStep ( parsed, entry ) {
++
++ if ( !isNumeric( entry ) ) {
++ throw new Error("noUiSlider: 'step' is not numeric.");
++ }
++
++ // The step option can still be used to set stepping
++ // for linear sliders. Overwritten if set in 'range'.
++ parsed.singleStep = entry;
++ }
++
++ function testRange ( parsed, entry ) {
++
++ // Filter incorrect input.
++ if ( typeof entry !== 'object' || Array.isArray(entry) ) {
++ throw new Error("noUiSlider: 'range' is not an object.");
++ }
++
++ // Catch missing start or end.
++ if ( entry.min === undefined || entry.max === undefined ) {
++ throw new Error("noUiSlider: Missing 'min' or 'max' in 'range'.");
++ }
++
++ // Catch equal start or end.
++ if ( entry.min === entry.max ) {
++ throw new Error("noUiSlider: 'range' 'min' and 'max' cannot be equal.");
++ }
++
++ parsed.spectrum = new Spectrum(entry, parsed.snap, parsed.dir, parsed.singleStep);
++ }
++
++ function testStart ( parsed, entry ) {
++
++ entry = asArray(entry);
++
++ // Validate input. Values aren't tested, as the public .val method
++ // will always provide a valid location.
++ if ( !Array.isArray( entry ) || !entry.length || entry.length > 2 ) {
++ throw new Error("noUiSlider: 'start' option is incorrect.");
++ }
++
++ // Store the number of handles.
++ parsed.handles = entry.length;
++
++ // When the slider is initialized, the .val method will
++ // be called with the start options.
++ parsed.start = entry;
++ }
++
++ function testSnap ( parsed, entry ) {
++
++ // Enforce 100% stepping within subranges.
++ parsed.snap = entry;
++
++ if ( typeof entry !== 'boolean' ){
++ throw new Error("noUiSlider: 'snap' option must be a boolean.");
++ }
++ }
++
++ function testAnimate ( parsed, entry ) {
++
++ // Enforce 100% stepping within subranges.
++ parsed.animate = entry;
++
++ if ( typeof entry !== 'boolean' ){
++ throw new Error("noUiSlider: 'animate' option must be a boolean.");
++ }
++ }
++
++ function testAnimationDuration ( parsed, entry ) {
++
++ parsed.animationDuration = entry;
++
++ if ( typeof entry !== 'number' ){
++ throw new Error("noUiSlider: 'animationDuration' option must be a number.");
++ }
++ }
++
++ function testConnect ( parsed, entry ) {
++
++ if ( entry === 'lower' && parsed.handles === 1 ) {
++ parsed.connect = 1;
++ } else if ( entry === 'upper' && parsed.handles === 1 ) {
++ parsed.connect = 2;
++ } else if ( entry === true && parsed.handles === 2 ) {
++ parsed.connect = 3;
++ } else if ( entry === false ) {
++ parsed.connect = 0;
++ } else {
++ throw new Error("noUiSlider: 'connect' option doesn't match handle count.");
++ }
++ }
++
++ function testOrientation ( parsed, entry ) {
++
++ // Set orientation to an a numerical value for easy
++ // array selection.
++ switch ( entry ){
++ case 'horizontal':
++ parsed.ort = 0;
++ break;
++ case 'vertical':
++ parsed.ort = 1;
++ break;
++ default:
++ throw new Error("noUiSlider: 'orientation' option is invalid.");
++ }
++ }
++
++ function testMargin ( parsed, entry ) {
++
++ if ( !isNumeric(entry) ){
++ throw new Error("noUiSlider: 'margin' option must be numeric.");
++ }
++
++ // Issue #582
++ if ( entry === 0 ) {
++ return;
++ }
++
++ parsed.margin = parsed.spectrum.getMargin(entry);
++
++ if ( !parsed.margin ) {
++ throw new Error("noUiSlider: 'margin' option is only supported on linear sliders.");
++ }
++ }
++
++ function testLimit ( parsed, entry ) {
++
++ if ( !isNumeric(entry) ){
++ throw new Error("noUiSlider: 'limit' option must be numeric.");
++ }
++
++ parsed.limit = parsed.spectrum.getMargin(entry);
++
++ if ( !parsed.limit ) {
++ throw new Error("noUiSlider: 'limit' option is only supported on linear sliders.");
++ }
++ }
++
++ function testDirection ( parsed, entry ) {
++
++ // Set direction as a numerical value for easy parsing.
++ // Invert connection for RTL sliders, so that the proper
++ // handles get the connect/background classes.
++ switch ( entry ) {
++ case 'ltr':
++ parsed.dir = 0;
++ break;
++ case 'rtl':
++ parsed.dir = 1;
++ parsed.connect = [0,2,1,3][parsed.connect];
++ break;
++ default:
++ throw new Error("noUiSlider: 'direction' option was not recognized.");
++ }
++ }
++
++ function testBehaviour ( parsed, entry ) {
++
++ // Make sure the input is a string.
++ if ( typeof entry !== 'string' ) {
++ throw new Error("noUiSlider: 'behaviour' must be a string containing options.");
++ }
++
++ // Check if the string contains any keywords.
++ // None are required.
++ var tap = entry.indexOf('tap') >= 0,
++ drag = entry.indexOf('drag') >= 0,
++ fixed = entry.indexOf('fixed') >= 0,
++ snap = entry.indexOf('snap') >= 0,
++ hover = entry.indexOf('hover') >= 0;
++
++ // Fix #472
++ if ( drag && !parsed.connect ) {
++ throw new Error("noUiSlider: 'drag' behaviour must be used with 'connect': true.");
++ }
++
++ parsed.events = {
++ tap: tap || snap,
++ drag: drag,
++ fixed: fixed,
++ snap: snap,
++ hover: hover
++ };
++ }
++
++ function testTooltips ( parsed, entry ) {
++
++ var i;
++
++ if ( entry === false ) {
++ return;
++ } else if ( entry === true ) {
++
++ parsed.tooltips = [];
++
++ for ( i = 0; i < parsed.handles; i++ ) {
++ parsed.tooltips.push(true);
++ }
++
++ } else {
++
++ parsed.tooltips = asArray(entry);
++
++ if ( parsed.tooltips.length !== parsed.handles ) {
++ throw new Error("noUiSlider: must pass a formatter for all handles.");
++ }
++
++ parsed.tooltips.forEach(function(formatter){
++ if ( typeof formatter !== 'boolean' && (typeof formatter !== 'object' || typeof formatter.to !== 'function') ) {
++ throw new Error("noUiSlider: 'tooltips' must be passed a formatter or 'false'.");
++ }
++ });
++ }
++ }
++
++ function testFormat ( parsed, entry ) {
++
++ parsed.format = entry;
++
++ // Any object with a to and from method is supported.
++ if ( typeof entry.to === 'function' && typeof entry.from === 'function' ) {
++ return true;
++ }
++
++ throw new Error("noUiSlider: 'format' requires 'to' and 'from' methods.");
++ }
++
++ function testCssPrefix ( parsed, entry ) {
++
++ if ( entry !== undefined && typeof entry !== 'string' && entry !== false ) {
++ throw new Error("noUiSlider: 'cssPrefix' must be a string or `false`.");
++ }
++
++ parsed.cssPrefix = entry;
++ }
++
++ function testCssClasses ( parsed, entry ) {
++
++ if ( entry !== undefined && typeof entry !== 'object' ) {
++ throw new Error("noUiSlider: 'cssClasses' must be an object.");
++ }
++
++ if ( typeof parsed.cssPrefix === 'string' ) {
++ parsed.cssClasses = {};
++
++ for ( var key in entry ) {
++ if ( !entry.hasOwnProperty(key) ) { continue; }
++
++ parsed.cssClasses[key] = parsed.cssPrefix + entry[key];
++ }
++ } else {
++ parsed.cssClasses = entry;
++ }
++ }
++
++ // Test all developer settings and parse to assumption-safe values.
++ function testOptions ( options ) {
++
++ // To prove a fix for #537, freeze options here.
++ // If the object is modified, an error will be thrown.
++ // Object.freeze(options);
++
++ var parsed = {
++ margin: 0,
++ limit: 0,
++ animate: true,
++ animationDuration: 300,
++ format: defaultFormatter
++ }, tests;
++
++ // Tests are executed in the order they are presented here.
++ tests = {
++ 'step': { r: false, t: testStep },
++ 'start': { r: true, t: testStart },
++ 'connect': { r: true, t: testConnect },
++ 'direction': { r: true, t: testDirection },
++ 'snap': { r: false, t: testSnap },
++ 'animate': { r: false, t: testAnimate },
++ 'animationDuration': { r: false, t: testAnimationDuration },
++ 'range': { r: true, t: testRange },
++ 'orientation': { r: false, t: testOrientation },
++ 'margin': { r: false, t: testMargin },
++ 'limit': { r: false, t: testLimit },
++ 'behaviour': { r: true, t: testBehaviour },
++ 'format': { r: false, t: testFormat },
++ 'tooltips': { r: false, t: testTooltips },
++ 'cssPrefix': { r: false, t: testCssPrefix },
++ 'cssClasses': { r: false, t: testCssClasses }
++ };
++
++ var defaults = {
++ 'connect': false,
++ 'direction': 'ltr',
++ 'behaviour': 'tap',
++ 'orientation': 'horizontal',
++ 'cssPrefix' : 'noUi-',
++ 'cssClasses': {
++ target: 'target',
++ base: 'base',
++ origin: 'origin',
++ handle: 'handle',
++ handleLower: 'handle-lower',
++ handleUpper: 'handle-upper',
++ horizontal: 'horizontal',
++ vertical: 'vertical',
++ background: 'background',
++ connect: 'connect',
++ ltr: 'ltr',
++ rtl: 'rtl',
++ draggable: 'draggable',
++ drag: 'state-drag',
++ tap: 'state-tap',
++ active: 'active',
++ stacking: 'stacking',
++ tooltip: 'tooltip',
++ pips: 'pips',
++ pipsHorizontal: 'pips-horizontal',
++ pipsVertical: 'pips-vertical',
++ marker: 'marker',
++ markerHorizontal: 'marker-horizontal',
++ markerVertical: 'marker-vertical',
++ markerNormal: 'marker-normal',
++ markerLarge: 'marker-large',
++ markerSub: 'marker-sub',
++ value: 'value',
++ valueHorizontal: 'value-horizontal',
++ valueVertical: 'value-vertical',
++ valueNormal: 'value-normal',
++ valueLarge: 'value-large',
++ valueSub: 'value-sub'
++ }
++ };
++
++ // Run all options through a testing mechanism to ensure correct
++ // input. It should be noted that options might get modified to
++ // be handled properly. E.g. wrapping integers in arrays.
++ Object.keys(tests).forEach(function( name ){
++
++ // If the option isn't set, but it is required, throw an error.
++ if ( options[name] === undefined && defaults[name] === undefined ) {
++
++ if ( tests[name].r ) {
++ throw new Error("noUiSlider: '" + name + "' is required.");
++ }
++
++ return true;
++ }
++
++ tests[name].t( parsed, options[name] === undefined ? defaults[name] : options[name] );
++ });
++
++ // Forward pips options
++ parsed.pips = options.pips;
++
++ // Pre-define the styles.
++ parsed.style = parsed.ort ? 'top' : 'left';
++
++ return parsed;
++ }
--- /dev/null
--- /dev/null
++}));
--- /dev/null
--- /dev/null
++
++ function getGroup ( mode, values, stepped ) {
++
++ // Use the range.
++ if ( mode === 'range' || mode === 'steps' ) {
++ return scope_Spectrum.xVal;
++ }
++
++ if ( mode === 'count' ) {
++
++ // Divide 0 - 100 in 'count' parts.
++ var spread = ( 100 / (values-1) ), v, i = 0;
++ values = [];
++
++ // List these parts and have them handled as 'positions'.
++ while ((v=i++*spread) <= 100 ) {
++ values.push(v);
++ }
++
++ mode = 'positions';
++ }
++
++ if ( mode === 'positions' ) {
++
++ // Map all percentages to on-range values.
++ return values.map(function( value ){
++ return scope_Spectrum.fromStepping( stepped ? scope_Spectrum.getStep( value ) : value );
++ });
++ }
++
++ if ( mode === 'values' ) {
++
++ // If the value must be stepped, it needs to be converted to a percentage first.
++ if ( stepped ) {
++
++ return values.map(function( value ){
++
++ // Convert to percentage, apply step, return to value.
++ return scope_Spectrum.fromStepping( scope_Spectrum.getStep( scope_Spectrum.toStepping( value ) ) );
++ });
++
++ }
++
++ // Otherwise, we can simply use the values.
++ return values;
++ }
++ }
++
++ function generateSpread ( density, mode, group ) {
++
++ function safeIncrement(value, increment) {
++ // Avoid floating point variance by dropping the smallest decimal places.
++ return (value + increment).toFixed(7) / 1;
++ }
++
++ var originalSpectrumDirection = scope_Spectrum.direction,
++ indexes = {},
++ firstInRange = scope_Spectrum.xVal[0],
++ lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length-1],
++ ignoreFirst = false,
++ ignoreLast = false,
++ prevPct = 0;
++
++ // This function loops the spectrum in an ltr linear fashion,
++ // while the toStepping method is direction aware. Trick it into
++ // believing it is ltr.
++ scope_Spectrum.direction = 0;
++
++ // Create a copy of the group, sort it and filter away all duplicates.
++ group = unique(group.slice().sort(function(a, b){ return a - b; }));
++
++ // Make sure the range starts with the first element.
++ if ( group[0] !== firstInRange ) {
++ group.unshift(firstInRange);
++ ignoreFirst = true;
++ }
++
++ // Likewise for the last one.
++ if ( group[group.length - 1] !== lastInRange ) {
++ group.push(lastInRange);
++ ignoreLast = true;
++ }
++
++ group.forEach(function ( current, index ) {
++
++ // Get the current step and the lower + upper positions.
++ var step, i, q,
++ low = current,
++ high = group[index+1],
++ newPct, pctDifference, pctPos, type,
++ steps, realSteps, stepsize;
++
++ // When using 'steps' mode, use the provided steps.
++ // Otherwise, we'll step on to the next subrange.
++ if ( mode === 'steps' ) {
++ step = scope_Spectrum.xNumSteps[ index ];
++ }
++
++ // Default to a 'full' step.
++ if ( !step ) {
++ step = high-low;
++ }
++
++ // Low can be 0, so test for false. If high is undefined,
++ // we are at the last subrange. Index 0 is already handled.
++ if ( low === false || high === undefined ) {
++ return;
++ }
++
++ // Find all steps in the subrange.
++ for ( i = low; i <= high; i = safeIncrement(i, step) ) {
++
++ // Get the percentage value for the current step,
++ // calculate the size for the subrange.
++ newPct = scope_Spectrum.toStepping( i );
++ pctDifference = newPct - prevPct;
++
++ steps = pctDifference / density;
++ realSteps = Math.round(steps);
++
++ // This ratio represents the ammount of percentage-space a point indicates.
++ // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-devided.
++ // Round the percentage offset to an even number, then divide by two
++ // to spread the offset on both sides of the range.
++ stepsize = pctDifference/realSteps;
++
++ // Divide all points evenly, adding the correct number to this subrange.
++ // Run up to <= so that 100% gets a point, event if ignoreLast is set.
++ for ( q = 1; q <= realSteps; q += 1 ) {
++
++ // The ratio between the rounded value and the actual size might be ~1% off.
++ // Correct the percentage offset by the number of points
++ // per subrange. density = 1 will result in 100 points on the
++ // full range, 2 for 50, 4 for 25, etc.
++ pctPos = prevPct + ( q * stepsize );
++ indexes[pctPos.toFixed(5)] = ['x', 0];
++ }
++
++ // Determine the point type.
++ type = (group.indexOf(i) > -1) ? 1 : ( mode === 'steps' ? 2 : 0 );
++
++ // Enforce the 'ignoreFirst' option by overwriting the type for 0.
++ if ( !index && ignoreFirst ) {
++ type = 0;
++ }
++
++ if ( !(i === high && ignoreLast)) {
++ // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value.
++ indexes[newPct.toFixed(5)] = [i, type];
++ }
++
++ // Update the percentage count.
++ prevPct = newPct;
++ }
++ });
++
++ // Reset the spectrum.
++ scope_Spectrum.direction = originalSpectrumDirection;
++
++ return indexes;
++ }
++
++ function addMarking ( spread, filterFunc, formatter ) {
++
++ var element = document.createElement('div'),
++ out = '',
++ valueSizeClasses = [
++ options.cssClasses.valueNormal,
++ options.cssClasses.valueLarge,
++ options.cssClasses.valueSub
++ ],
++ markerSizeClasses = [
++ options.cssClasses.markerNormal,
++ options.cssClasses.markerLarge,
++ options.cssClasses.markerSub
++ ],
++ valueOrientationClasses = [
++ options.cssClasses.valueHorizontal,
++ options.cssClasses.valueVertical
++ ],
++ markerOrientationClasses = [
++ options.cssClasses.markerHorizontal,
++ options.cssClasses.markerVertical
++ ];
++
++ addClass(element, options.cssClasses.pips);
++ addClass(element, options.ort === 0 ? options.cssClasses.pipsHorizontal : options.cssClasses.pipsVertical);
++
++ function getClasses( type, source ){
++ var a = source === options.cssClasses.value,
++ orientationClasses = a ? valueOrientationClasses : markerOrientationClasses,
++ sizeClasses = a ? valueSizeClasses : markerSizeClasses;
++
++ return source + ' ' + orientationClasses[options.ort] + ' ' + sizeClasses[type];
++ }
++
++ function getTags( offset, source, values ) {
++ return 'class="' + getClasses(values[1], source) + '" style="' + options.style + ': ' + offset + '%"';
++ }
++
++ function addSpread ( offset, values ){
++
++ if ( scope_Spectrum.direction ) {
++ offset = 100 - offset;
++ }
++
++ // Apply the filter function, if it is set.
++ values[1] = (values[1] && filterFunc) ? filterFunc(values[0], values[1]) : values[1];
++
++ // Add a marker for every point
++ out += '<div ' + getTags(offset, options.cssClasses.marker, values) + '></div>';
++
++ // Values are only appended for points marked '1' or '2'.
++ if ( values[1] ) {
++ out += '<div ' + getTags(offset, options.cssClasses.value, values) + '>' + formatter.to(values[0]) + '</div>';
++ }
++ }
++
++ // Append all points.
++ Object.keys(spread).forEach(function(a){
++ addSpread(a, spread[a]);
++ });
++
++ element.innerHTML = out;
++
++ return element;
++ }
++
++ function pips ( grid ) {
++
++ var mode = grid.mode,
++ density = grid.density || 1,
++ filter = grid.filter || false,
++ values = grid.values || false,
++ stepped = grid.stepped || false,
++ group = getGroup( mode, values, stepped ),
++ spread = generateSpread( density, mode, group ),
++ format = grid.format || {
++ to: Math.round
++ };
++
++ return scope_Target.appendChild(addMarking(
++ spread,
++ filter,
++ format
++ ));
++ }
--- /dev/null
--- /dev/null
++
++// Value calculation
++
++ // Determine the size of a sub-range in relation to a full range.
++ function subRangeRatio ( pa, pb ) {
++ return (100 / (pb - pa));
++ }
++
++ // (percentage) How many percent is this value of this range?
++ function fromPercentage ( range, value ) {
++ return (value * 100) / ( range[1] - range[0] );
++ }
++
++ // (percentage) Where is this value on this range?
++ function toPercentage ( range, value ) {
++ return fromPercentage( range, range[0] < 0 ?
++ value + Math.abs(range[0]) :
++ value - range[0] );
++ }
++
++ // (value) How much is this percentage on this range?
++ function isPercentage ( range, value ) {
++ return ((value * ( range[1] - range[0] )) / 100) + range[0];
++ }
++
++
++// Range conversion
++
++ function getJ ( value, arr ) {
++
++ var j = 1;
++
++ while ( value >= arr[j] ){
++ j += 1;
++ }
++
++ return j;
++ }
++
++ // (percentage) Input a value, find where, on a scale of 0-100, it applies.
++ function toStepping ( xVal, xPct, value ) {
++
++ if ( value >= xVal.slice(-1)[0] ){
++ return 100;
++ }
++
++ var j = getJ( value, xVal ), va, vb, pa, pb;
++
++ va = xVal[j-1];
++ vb = xVal[j];
++ pa = xPct[j-1];
++ pb = xPct[j];
++
++ return pa + (toPercentage([va, vb], value) / subRangeRatio (pa, pb));
++ }
++
++ // (value) Input a percentage, find where it is on the specified range.
++ function fromStepping ( xVal, xPct, value ) {
++
++ // There is no range group that fits 100
++ if ( value >= 100 ){
++ return xVal.slice(-1)[0];
++ }
++
++ var j = getJ( value, xPct ), va, vb, pa, pb;
++
++ va = xVal[j-1];
++ vb = xVal[j];
++ pa = xPct[j-1];
++ pb = xPct[j];
++
++ return isPercentage([va, vb], (value - pa) * subRangeRatio (pa, pb));
++ }
++
++ // (percentage) Get the step that applies at a certain value.
++ function getStep ( xPct, xSteps, snap, value ) {
++
++ if ( value === 100 ) {
++ return value;
++ }
++
++ var j = getJ( value, xPct ), a, b;
++
++ // If 'snap' is set, steps are used as fixed points on the slider.
++ if ( snap ) {
++
++ a = xPct[j-1];
++ b = xPct[j];
++
++ // Find the closest position, a or b.
++ if ((value - a) > ((b-a)/2)){
++ return b;
++ }
++
++ return a;
++ }
++
++ if ( !xSteps[j-1] ){
++ return value;
++ }
++
++ return xPct[j-1] + closest(
++ value - xPct[j-1],
++ xSteps[j-1]
++ );
++ }
++
++
++// Entry parsing
++
++ function handleEntryPoint ( index, value, that ) {
++
++ var percentage;
++
++ // Wrap numerical input in an array.
++ if ( typeof value === "number" ) {
++ value = [value];
++ }
++
++ // Reject any invalid input, by testing whether value is an array.
++ if ( Object.prototype.toString.call( value ) !== '[object Array]' ){
++ throw new Error("noUiSlider: 'range' contains invalid value.");
++ }
++
++ // Covert min/max syntax to 0 and 100.
++ if ( index === 'min' ) {
++ percentage = 0;
++ } else if ( index === 'max' ) {
++ percentage = 100;
++ } else {
++ percentage = parseFloat( index );
++ }
++
++ // Check for correct input.
++ if ( !isNumeric( percentage ) || !isNumeric( value[0] ) ) {
++ throw new Error("noUiSlider: 'range' value isn't numeric.");
++ }
++
++ // Store values.
++ that.xPct.push( percentage );
++ that.xVal.push( value[0] );
++
++ // NaN will evaluate to false too, but to keep
++ // logging clear, set step explicitly. Make sure
++ // not to override the 'step' setting with false.
++ if ( !percentage ) {
++ if ( !isNaN( value[1] ) ) {
++ that.xSteps[0] = value[1];
++ }
++ } else {
++ that.xSteps.push( isNaN(value[1]) ? false : value[1] );
++ }
++ }
++
++ function handleStepPoint ( i, n, that ) {
++
++ // Ignore 'false' stepping.
++ if ( !n ) {
++ return true;
++ }
++
++ // Factor to range ratio
++ that.xSteps[i] = fromPercentage([
++ that.xVal[i]
++ ,that.xVal[i+1]
++ ], n) / subRangeRatio (
++ that.xPct[i],
++ that.xPct[i+1] );
++ }
++
++
++// Interface
++
++ // The interface to Spectrum handles all direction-based
++ // conversions, so the above values are unaware.
++
++ function Spectrum ( entry, snap, direction, singleStep ) {
++
++ this.xPct = [];
++ this.xVal = [];
++ this.xSteps = [ singleStep || false ];
++ this.xNumSteps = [ false ];
++
++ this.snap = snap;
++ this.direction = direction;
++
++ var index, ordered = [ /* [0, 'min'], [1, '50%'], [2, 'max'] */ ];
++
++ // Map the object keys to an array.
++ for ( index in entry ) {
++ if ( entry.hasOwnProperty(index) ) {
++ ordered.push([entry[index], index]);
++ }
++ }
++
++ // Sort all entries by value (numeric sort).
++ if ( ordered.length && typeof ordered[0][0] === "object" ) {
++ ordered.sort(function(a, b) { return a[0][0] - b[0][0]; });
++ } else {
++ ordered.sort(function(a, b) { return a[0] - b[0]; });
++ }
++
++
++ // Convert all entries to subranges.
++ for ( index = 0; index < ordered.length; index++ ) {
++ handleEntryPoint(ordered[index][1], ordered[index][0], this);
++ }
++
++ // Store the actual step values.
++ // xSteps is sorted in the same order as xPct and xVal.
++ this.xNumSteps = this.xSteps.slice(0);
++
++ // Convert all numeric steps to the percentage of the subrange they represent.
++ for ( index = 0; index < this.xNumSteps.length; index++ ) {
++ handleStepPoint(index, this.xNumSteps[index], this);
++ }
++ }
++
++ Spectrum.prototype.getMargin = function ( value ) {
++ return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false;
++ };
++
++ Spectrum.prototype.toStepping = function ( value ) {
++
++ value = toStepping( this.xVal, this.xPct, value );
++
++ // Invert the value if this is a right-to-left slider.
++ if ( this.direction ) {
++ value = 100 - value;
++ }
++
++ return value;
++ };
++
++ Spectrum.prototype.fromStepping = function ( value ) {
++
++ // Invert the value if this is a right-to-left slider.
++ if ( this.direction ) {
++ value = 100 - value;
++ }
++
++ return fromStepping( this.xVal, this.xPct, value );
++ };
++
++ Spectrum.prototype.getStep = function ( value ) {
++
++ // Find the proper step for rtl sliders by search in inverse direction.
++ // Fixes issue #262.
++ if ( this.direction ) {
++ value = 100 - value;
++ }
++
++ value = getStep(this.xPct, this.xSteps, this.snap, value );
++
++ if ( this.direction ) {
++ value = 100 - value;
++ }
++
++ return value;
++ };
++
++ Spectrum.prototype.getApplicableStep = function ( value ) {
++
++ // If the value is 100%, return the negative step twice.
++ var j = getJ(value, this.xPct), offset = value === 100 ? 2 : 1;
++ return [this.xNumSteps[j-2], this.xVal[j-offset], this.xNumSteps[j-offset]];
++ };
++
++ // Outside testing
++ Spectrum.prototype.convert = function ( value ) {
++ return this.getStep(this.toStepping(value));
++ };
--- /dev/null
--- /dev/null
++
++ // Test suggested values and apply margin, step.
++ function setHandle ( handle, to, noLimitOption ) {
++
++ var trigger = handle !== scope_Handles[0] ? 1 : 0,
++ lowerMargin = scope_Locations[0] + options.margin,
++ upperMargin = scope_Locations[1] - options.margin,
++ lowerLimit = scope_Locations[0] + options.limit,
++ upperLimit = scope_Locations[1] - options.limit;
++
++ // For sliders with multiple handles,
++ // limit movement to the other handle.
++ // Apply the margin option by adding it to the handle positions.
++ if ( scope_Handles.length > 1 ) {
++ to = trigger ? Math.max( to, lowerMargin ) : Math.min( to, upperMargin );
++ }
++
++ // The limit option has the opposite effect, limiting handles to a
++ // maximum distance from another. Limit must be > 0, as otherwise
++ // handles would be unmoveable. 'noLimitOption' is set to 'false'
++ // for the .val() method, except for pass 4/4.
++ if ( noLimitOption !== false && options.limit && scope_Handles.length > 1 ) {
++ to = trigger ? Math.min ( to, lowerLimit ) : Math.max( to, upperLimit );
++ }
++
++ // Handle the step option.
++ to = scope_Spectrum.getStep( to );
++
++ // Limit percentage to the 0 - 100 range
++ to = limit(to);
++
++ // Return false if handle can't move
++ if ( to === scope_Locations[trigger] ) {
++ return false;
++ }
++
++ // Set the handle to the new position.
++ // Use requestAnimationFrame for efficient painting.
++ // No significant effect in Chrome, Edge sees dramatic
++ // performace improvements.
++ if ( window.requestAnimationFrame ) {
++ window.requestAnimationFrame(function(){
++ handle.style[options.style] = to + '%';
++ });
++ } else {
++ handle.style[options.style] = to + '%';
++ }
++
++ // Force proper handle stacking
++ if ( !handle.previousSibling ) {
++ removeClass(handle, options.cssClasses.stacking);
++ if ( to > 50 ) {
++ addClass(handle, options.cssClasses.stacking);
++ }
++ }
++
++ // Update locations.
++ scope_Locations[trigger] = to;
++
++ // Convert the value to the slider stepping/range.
++ scope_Values[trigger] = scope_Spectrum.fromStepping( to );
++
++ fireEvent('update', trigger);
++
++ return true;
++ }
++
++ // Loop values from value method and apply them.
++ function setValues ( count, values ) {
++
++ var i, trigger, to;
++
++ // With the limit option, we'll need another limiting pass.
++ if ( options.limit ) {
++ count += 1;
++ }
++
++ // If there are multiple handles to be set run the setting
++ // mechanism twice for the first handle, to make sure it
++ // can be bounced of the second one properly.
++ for ( i = 0; i < count; i += 1 ) {
++
++ trigger = i%2;
++
++ // Get the current argument from the array.
++ to = values[trigger];
++
++ // Setting with null indicates an 'ignore'.
++ // Inputting 'false' is invalid.
++ if ( to !== null && to !== false ) {
++
++ // If a formatted number was passed, attemt to decode it.
++ if ( typeof to === 'number' ) {
++ to = String(to);
++ }
++
++ to = options.format.from( to );
++
++ // Request an update for all links if the value was invalid.
++ // Do so too if setting the handle fails.
++ if ( to === false || isNaN(to) || setHandle( scope_Handles[trigger], scope_Spectrum.toStepping( to ), i === (3 - options.dir) ) === false ) {
++ fireEvent('update', trigger);
++ }
++ }
++ }
++ }
++
++ // Set the slider value.
++ function valueSet ( input, fireSetEvent ) {
++
++ var count, values = asArray( input ), i;
++
++ // Event fires by default
++ fireSetEvent = (fireSetEvent === undefined ? true : !!fireSetEvent);
++
++ // The RTL settings is implemented by reversing the front-end,
++ // internal mechanisms are the same.
++ if ( options.dir && options.handles > 1 ) {
++ values.reverse();
++ }
++
++ // Animation is optional.
++ // Make sure the initial values where set before using animated placement.
++ if ( options.animate && scope_Locations[0] !== -1 ) {
++ addClassFor( scope_Target, options.cssClasses.tap, options.animationDuration );
++ }
++
++ // Determine how often to set the handles.
++ count = scope_Handles.length > 1 ? 3 : 1;
++
++ if ( values.length === 1 ) {
++ count = 1;
++ }
++
++ setValues ( count, values );
++
++ // Fire the 'set' event for both handles.
++ for ( i = 0; i < scope_Handles.length; i++ ) {
++
++ // Fire the event only for handles that received a new value, as per #579
++ if ( values[i] !== null && fireSetEvent ) {
++ fireEvent('set', i);
++ }
++ }
++ }
++
++ // Get the slider value.
++ function valueGet ( ) {
++
++ var i, retour = [];
++
++ // Get the value from all handles.
++ for ( i = 0; i < options.handles; i += 1 ){
++ retour[i] = options.format.to( scope_Values[i] );
++ }
++
++ return inSliderOrder( retour );
++ }
++
++ // Removes classes from the root and empties it.
++ function destroy ( ) {
++
++ for ( var key in options.cssClasses ) {
++ if ( !options.cssClasses.hasOwnProperty(key) ) { continue; }
++ removeClass(scope_Target, options.cssClasses[key]);
++ }
++
++ while (scope_Target.firstChild) {
++ scope_Target.removeChild(scope_Target.firstChild);
++ }
++
++ delete scope_Target.noUiSlider;
++ }
++
++ // Get the current step size for the slider.
++ function getCurrentStep ( ) {
++
++ // Check all locations, map them to their stepping point.
++ // Get the step point, then find it in the input list.
++ var retour = scope_Locations.map(function( location, index ){
++
++ var step = scope_Spectrum.getApplicableStep( location ),
++
++ // As per #391, the comparison for the decrement step can have some rounding issues.
++ // Round the value to the precision used in the step.
++ stepDecimals = countDecimals(String(step[2])),
++
++ // Get the current numeric value
++ value = scope_Values[index],
++
++ // To move the slider 'one step up', the current step value needs to be added.
++ // Use null if we are at the maximum slider value.
++ increment = location === 100 ? null : step[2],
++
++ // Going 'one step down' might put the slider in a different sub-range, so we
++ // need to switch between the current or the previous step.
++ prev = Number((value - step[2]).toFixed(stepDecimals)),
++
++ // If the value fits the step, return the current step value. Otherwise, use the
++ // previous step. Return null if the slider is at its minimum value.
++ decrement = location === 0 ? null : (prev >= step[1]) ? step[2] : (step[0] || false);
++
++ return [decrement, increment];
++ });
++
++ // Return values in the proper order.
++ return inSliderOrder( retour );
++ }
++
++ // Attach an event to this slider, possibly including a namespace
++ function bindEvent ( namespacedEvent, callback ) {
++ scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || [];
++ scope_Events[namespacedEvent].push(callback);
++
++ // If the event bound is 'update,' fire it immediately for all handles.
++ if ( namespacedEvent.split('.')[0] === 'update' ) {
++ scope_Handles.forEach(function(a, index){
++ fireEvent('update', index);
++ });
++ }
++ }
++
++ // Undo attachment of event
++ function removeEvent ( namespacedEvent ) {
++
++ var event = namespacedEvent && namespacedEvent.split('.')[0],
++ namespace = event && namespacedEvent.substring(event.length);
++
++ Object.keys(scope_Events).forEach(function( bind ){
++
++ var tEvent = bind.split('.')[0],
++ tNamespace = bind.substring(tEvent.length);
++
++ if ( (!event || event === tEvent) && (!namespace || namespace === tNamespace) ) {
++ delete scope_Events[bind];
++ }
++ });
++ }
++
++ // Updateable: margin, limit, step, range, animate, snap
++ function updateOptions ( optionsToUpdate, fireSetEvent ) {
++
++ // Spectrum is created using the range, snap, direction and step options.
++ // 'snap' and 'step' can be updated, 'direction' cannot, due to event binding.
++ // If 'snap' and 'step' are not passed, they should remain unchanged.
++ var v = valueGet(), newOptions = testOptions({
++ start: [0, 0],
++ margin: optionsToUpdate.margin,
++ limit: optionsToUpdate.limit,
++ step: optionsToUpdate.step === undefined ? options.singleStep : optionsToUpdate.step,
++ range: optionsToUpdate.range,
++ animate: optionsToUpdate.animate,
++ snap: optionsToUpdate.snap === undefined ? options.snap : optionsToUpdate.snap
++ });
++
++ ['margin', 'limit', 'range', 'animate'].forEach(function(name){
++
++ // Only change options that we're actually passed to update.
++ if ( optionsToUpdate[name] !== undefined ) {
++ options[name] = optionsToUpdate[name];
++ }
++ });
++
++ // Save current spectrum direction as testOptions in testRange call
++ // doesn't rely on current direction
++ newOptions.spectrum.direction = scope_Spectrum.direction;
++ scope_Spectrum = newOptions.spectrum;
++
++ // Invalidate the current positioning so valueSet forces an update.
++ scope_Locations = [-1, -1];
++ valueSet(optionsToUpdate.start || v, fireSetEvent);
++ }
++
++
++ // Throw an error if the slider was already initialized.
++ if ( scope_Target.noUiSlider ) {
++ throw new Error('Slider was already initialized.');
++ }
++
++ // Create the base element, initialise HTML and set classes.
++ // Add handles and links.
++ scope_Base = addSlider( options.dir, options.ort, scope_Target );
++ scope_Handles = addHandles( options.handles, options.dir, scope_Base );
++
++ // Set the connect classes.
++ addConnection ( options.connect, scope_Target, scope_Handles );
++
++ if ( options.pips ) {
++ pips(options.pips);
++ }
++
++ if ( options.tooltips ) {
++ tooltips();
++ }
++
++ scope_Self = {
++ destroy: destroy,
++ steps: getCurrentStep,
++ on: bindEvent,
++ off: removeEvent,
++ get: valueGet,
++ set: valueSet,
++ updateOptions: updateOptions,
++ options: originalOptions, // Issue #600
++ target: scope_Target, // Issue #597
++ pips: pips // Issue #594
++ };
++
++ // Attach user events.
++ events( options.events );
++
++ return scope_Self;
--- /dev/null
--- /dev/null
++}
--- /dev/null
--- /dev/null
++
++ // Handler for attaching events trough a proxy.
++ function attach ( events, element, callback, data ) {
++
++ // This function can be used to 'filter' events to the slider.
++ // element is a node, not a nodeList
++
++ var method = function ( e ){
++
++ if ( scope_Target.hasAttribute('disabled') ) {
++ return false;
++ }
++
++ // Stop if an active 'tap' transition is taking place.
++ if ( hasClass(scope_Target, options.cssClasses.tap) ) {
++ return false;
++ }
++
++ e = fixEvent(e, data.pageOffset);
++
++ // Ignore right or middle clicks on start #454
++ if ( events === actions.start && e.buttons !== undefined && e.buttons > 1 ) {
++ return false;
++ }
++
++ // Ignore right or middle clicks on start #454
++ if ( data.hover && e.buttons ) {
++ return false;
++ }
++
++ e.calcPoint = e.points[ options.ort ];
++
++ // Call the event handler with the event [ and additional data ].
++ callback ( e, data );
++
++ }, methods = [];
++
++ // Bind a closure on the target for every event type.
++ events.split(' ').forEach(function( eventName ){
++ element.addEventListener(eventName, method, false);
++ methods.push([eventName, method]);
++ });
++
++ return methods;
++ }
++
++ // Handle movement on document for handle and range drag.
++ function move ( event, data ) {
++
++ // Fix #498
++ // Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty).
++ // https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero
++ // IE9 has .buttons and .which zero on mousemove.
++ // Firefox breaks the spec MDN defines.
++ if ( navigator.appVersion.indexOf("MSIE 9") === -1 && event.buttons === 0 && data.buttonsProperty !== 0 ) {
++ return end(event, data);
++ }
++
++ var handles = data.handles || scope_Handles, positions, state = false,
++ proposal = ((event.calcPoint - data.start) * 100) / data.baseSize,
++ handleNumber = handles[0] === scope_Handles[0] ? 0 : 1, i;
++
++ // Calculate relative positions for the handles.
++ positions = getPositions( proposal, data.positions, handles.length > 1);
++
++ state = setHandle ( handles[0], positions[handleNumber], handles.length === 1 );
++
++ if ( handles.length > 1 ) {
++
++ state = setHandle ( handles[1], positions[handleNumber?0:1], false ) || state;
++
++ if ( state ) {
++ // fire for both handles
++ for ( i = 0; i < data.handles.length; i++ ) {
++ fireEvent('slide', i);
++ }
++ }
++ } else if ( state ) {
++ // Fire for a single handle
++ fireEvent('slide', handleNumber);
++ }
++ }
++
++ // Unbind move events on document, call callbacks.
++ function end ( event, data ) {
++
++ // The handle is no longer active, so remove the class.
++ var active = scope_Base.querySelector( '.' + options.cssClasses.active ),
++ handleNumber = data.handles[0] === scope_Handles[0] ? 0 : 1;
++
++ if ( active !== null ) {
++ removeClass(active, options.cssClasses.active);
++ }
++
++ // Remove cursor styles and text-selection events bound to the body.
++ if ( event.cursor ) {
++ document.body.style.cursor = '';
++ document.body.removeEventListener('selectstart', document.body.noUiListener);
++ }
++
++ var d = document.documentElement;
++
++ // Unbind the move and end events, which are added on 'start'.
++ d.noUiListeners.forEach(function( c ) {
++ d.removeEventListener(c[0], c[1]);
++ });
++
++ // Remove dragging class.
++ removeClass(scope_Target, options.cssClasses.drag);
++
++ // Fire the change and set events.
++ fireEvent('set', handleNumber);
++ fireEvent('change', handleNumber);
++
++ // If this is a standard handle movement, fire the end event.
++ if ( data.handleNumber !== undefined ) {
++ fireEvent('end', data.handleNumber);
++ }
++ }
++
++ // Fire 'end' when a mouse or pen leaves the document.
++ function documentLeave ( event, data ) {
++ if ( event.type === "mouseout" && event.target.nodeName === "HTML" && event.relatedTarget === null ){
++ end ( event, data );
++ }
++ }
++
++ // Bind move events on document.
++ function start ( event, data ) {
++
++ var d = document.documentElement;
++
++ // Mark the handle as 'active' so it can be styled.
++ if ( data.handles.length === 1 ) {
++ // Support 'disabled' handles
++ if ( data.handles[0].hasAttribute('disabled') ) {
++ return false;
++ }
++
++ addClass(data.handles[0].children[0], options.cssClasses.active);
++ }
++
++ // Fix #551, where a handle gets selected instead of dragged.
++ event.preventDefault();
++
++ // A drag should never propagate up to the 'tap' event.
++ event.stopPropagation();
++
++ // Attach the move and end events.
++ var moveEvent = attach(actions.move, d, move, {
++ start: event.calcPoint,
++ baseSize: baseSize(),
++ pageOffset: event.pageOffset,
++ handles: data.handles,
++ handleNumber: data.handleNumber,
++ buttonsProperty: event.buttons,
++ positions: [
++ scope_Locations[0],
++ scope_Locations[scope_Handles.length - 1]
++ ]
++ }), endEvent = attach(actions.end, d, end, {
++ handles: data.handles,
++ handleNumber: data.handleNumber
++ });
++
++ var outEvent = attach("mouseout", d, documentLeave, {
++ handles: data.handles,
++ handleNumber: data.handleNumber
++ });
++
++ d.noUiListeners = moveEvent.concat(endEvent, outEvent);
++
++ // Text selection isn't an issue on touch devices,
++ // so adding cursor styles can be skipped.
++ if ( event.cursor ) {
++
++ // Prevent the 'I' cursor and extend the range-drag cursor.
++ document.body.style.cursor = getComputedStyle(event.target).cursor;
++
++ // Mark the target with a dragging state.
++ if ( scope_Handles.length > 1 ) {
++ addClass(scope_Target, options.cssClasses.drag);
++ }
++
++ var f = function(){
++ return false;
++ };
++
++ document.body.noUiListener = f;
++
++ // Prevent text selection when dragging the handles.
++ document.body.addEventListener('selectstart', f, false);
++ }
++
++ if ( data.handleNumber !== undefined ) {
++ fireEvent('start', data.handleNumber);
++ }
++ }
++
++ // Move closest handle to tapped location.
++ function tap ( event ) {
++
++ var location = event.calcPoint, total = 0, handleNumber, to;
++
++ // The tap event shouldn't propagate up and cause 'edge' to run.
++ event.stopPropagation();
++
++ // Add up the handle offsets.
++ scope_Handles.forEach(function(a){
++ total += offset(a)[ options.style ];
++ });
++
++ // Find the handle closest to the tapped position.
++ handleNumber = ( location < total/2 || scope_Handles.length === 1 ) ? 0 : 1;
++
++ // Check if handler is not disablet if yes set number to the next handler
++ if (scope_Handles[handleNumber].hasAttribute('disabled')) {
++ handleNumber = handleNumber ? 0 : 1;
++ }
++
++ location -= offset(scope_Base)[ options.style ];
++
++ // Calculate the new position.
++ to = ( location * 100 ) / baseSize();
++
++ if ( !options.events.snap ) {
++ // Flag the slider as it is now in a transitional state.
++ // Transition takes a configurable amount of ms (default 300). Re-enable the slider after that.
++ addClassFor( scope_Target, options.cssClasses.tap, options.animationDuration );
++ }
++
++ // Support 'disabled' handles
++ if ( scope_Handles[handleNumber].hasAttribute('disabled') ) {
++ return false;
++ }
++
++ // Find the closest handle and calculate the tapped point.
++ // The set handle to the new position.
++ setHandle( scope_Handles[handleNumber], to );
++
++ fireEvent('slide', handleNumber, true);
++ fireEvent('set', handleNumber, true);
++ fireEvent('change', handleNumber, true);
++
++ if ( options.events.snap ) {
++ start(event, { handles: [scope_Handles[handleNumber]] });
++ }
++ }
++
++ // Fires a 'hover' event for a hovered mouse/pen position.
++ function hover ( event ) {
++
++ var location = event.calcPoint - offset(scope_Base)[ options.style ],
++ to = scope_Spectrum.getStep(( location * 100 ) / baseSize()),
++ value = scope_Spectrum.fromStepping( to );
++
++ Object.keys(scope_Events).forEach(function( targetEvent ) {
++ if ( 'hover' === targetEvent.split('.')[0] ) {
++ scope_Events[targetEvent].forEach(function( callback ) {
++ callback.call( scope_Self, value );
++ });
++ }
++ });
++ }
++
++ // Attach events to several slider parts.
++ function events ( behaviour ) {
++
++ // Attach the standard drag event to the handles.
++ if ( !behaviour.fixed ) {
++
++ scope_Handles.forEach(function( handle, index ){
++
++ // These events are only bound to the visual handle
++ // element, not the 'real' origin element.
++ attach ( actions.start, handle.children[0], start, {
++ handles: [ handle ],
++ handleNumber: index
++ });
++ });
++ }
++
++ // Attach the tap event to the slider base.
++ if ( behaviour.tap ) {
++
++ attach ( actions.start, scope_Base, tap, {
++ handles: scope_Handles
++ });
++ }
++
++ // Fire hover events
++ if ( behaviour.hover ) {
++ attach ( actions.move, scope_Base, hover, { hover: true } );
++ }
++
++ // Make the range draggable.
++ if ( behaviour.drag ){
++
++ var drag = [scope_Base.querySelector( '.' + options.cssClasses.connect )];
++ addClass(drag[0], options.cssClasses.draggable);
++
++ // When the range is fixed, the entire range can
++ // be dragged by the handles. The handle in the first
++ // origin will propagate the start event upward,
++ // but it needs to be bound manually on the other.
++ if ( behaviour.fixed ) {
++ drag.push(scope_Handles[(drag[0] === scope_Handles[0] ? 1 : 0)].children[0]);
++ }
++
++ drag.forEach(function( element ) {
++ attach ( actions.start, element, start, {
++ handles: scope_Handles
++ });
++ });
++ }
++ }
--- /dev/null
--- /dev/null
++
++ // Shorthand for base dimensions.
++ function baseSize ( ) {
++ var rect = scope_Base.getBoundingClientRect(), alt = 'offset' + ['Width', 'Height'][options.ort];
++ return options.ort === 0 ? (rect.width||scope_Base[alt]) : (rect.height||scope_Base[alt]);
++ }
++
++ // External event handling
++ function fireEvent ( event, handleNumber, tap ) {
++
++ var i;
++
++ // During initialization, do not fire events.
++ for ( i = 0; i < options.handles; i++ ) {
++ if ( scope_Locations[i] === -1 ) {
++ return;
++ }
++ }
++
++ if ( handleNumber !== undefined && options.handles !== 1 ) {
++ handleNumber = Math.abs(handleNumber - options.dir);
++ }
++
++ Object.keys(scope_Events).forEach(function( targetEvent ) {
++
++ var eventType = targetEvent.split('.')[0];
++
++ if ( event === eventType ) {
++ scope_Events[targetEvent].forEach(function( callback ) {
++
++ callback.call(
++ // Use the slider public API as the scope ('this')
++ scope_Self,
++ // Return values as array, so arg_1[arg_2] is always valid.
++ asArray(valueGet()),
++ // Handle index, 0 or 1
++ handleNumber,
++ // Unformatted slider values
++ asArray(inSliderOrder(Array.prototype.slice.call(scope_Values))),
++ // Event is fired by tap, true or false
++ tap || false,
++ // Left offset of the handle, in relation to the slider
++ scope_Locations
++ );
++ });
++ }
++ });
++ }
++
++ // Returns the input array, respecting the slider direction configuration.
++ function inSliderOrder ( values ) {
++
++ // If only one handle is used, return a single value.
++ if ( values.length === 1 ){
++ return values[0];
++ }
++
++ if ( options.dir ) {
++ return values.reverse();
++ }
++
++ return values;
++ }
--- /dev/null
--- /dev/null
++
++function closure ( target, options, originalOptions ){
++ var
++ actions = getActions( ),
++ // All variables local to 'closure' are prefixed with 'scope_'
++ scope_Target = target,
++ scope_Locations = [-1, -1],
++ scope_Base,
++ scope_Handles,
++ scope_Spectrum = options.spectrum,
++ scope_Values = [],
++ scope_Events = {},
++ scope_Self;
--- /dev/null
--- /dev/null
++
++ // Delimit proposed values for handle positions.
++ function getPositions ( a, b, delimit ) {
++
++ // Add movement to current position.
++ var c = a + b[0], d = a + b[1];
++
++ // Only alter the other position on drag,
++ // not on standard sliding.
++ if ( delimit ) {
++ if ( c < 0 ) {
++ d += Math.abs(c);
++ }
++ if ( d > 100 ) {
++ c -= ( d - 100 );
++ }
++
++ // Limit values to 0 and 100.
++ return [limit(c), limit(d)];
++ }
++
++ return [c,d];
++ }
++
++ // Provide a clean event with standardized offset values.
++ function fixEvent ( e, pageOffset ) {
++
++ // Prevent scrolling and panning on touch events, while
++ // attempting to slide. The tap event also depends on this.
++ e.preventDefault();
++
++ // Filter the event to register the type, which can be
++ // touch, mouse or pointer. Offset changes need to be
++ // made on an event specific basis.
++ var touch = e.type.indexOf('touch') === 0,
++ mouse = e.type.indexOf('mouse') === 0,
++ pointer = e.type.indexOf('pointer') === 0,
++ x,y, event = e;
++
++ // IE10 implemented pointer events with a prefix;
++ if ( e.type.indexOf('MSPointer') === 0 ) {
++ pointer = true;
++ }
++
++ if ( touch ) {
++ // noUiSlider supports one movement at a time,
++ // so we can select the first 'changedTouch'.
++ x = e.changedTouches[0].pageX;
++ y = e.changedTouches[0].pageY;
++ }
++
++ pageOffset = pageOffset || getPageOffset();
++
++ if ( mouse || pointer ) {
++ x = e.clientX + pageOffset.x;
++ y = e.clientY + pageOffset.y;
++ }
++
++ event.pageOffset = pageOffset;
++ event.points = [x, y];
++ event.cursor = mouse || pointer; // Fix #435
++
++ return event;
++ }
++
++ // Append a handle to the base.
++ function addHandle ( direction, index ) {
++
++ var origin = document.createElement('div'),
++ handle = document.createElement('div'),
++ classModifier = [options.cssClasses.handleLower, options.cssClasses.handleUpper];
++
++ if ( direction ) {
++ classModifier.reverse();
++ }
++
++ addClass(handle, options.cssClasses.handle);
++ addClass(handle, classModifier[index]);
++
++ addClass(origin, options.cssClasses.origin);
++ origin.appendChild(handle);
++
++ return origin;
++ }
++
++ // Add the proper connection classes.
++ function addConnection ( connect, target, handles ) {
++
++ // Apply the required connection classes to the elements
++ // that need them. Some classes are made up for several
++ // segments listed in the class list, to allow easy
++ // renaming and provide a minor compression benefit.
++ switch ( connect ) {
++ case 1: addClass(target, options.cssClasses.connect);
++ addClass(handles[0], options.cssClasses.background);
++ break;
++ case 3: addClass(handles[1], options.cssClasses.background);
++ /* falls through */
++ case 2: addClass(handles[0], options.cssClasses.connect);
++ /* falls through */
++ case 0: addClass(target, options.cssClasses.background);
++ break;
++ }
++ }
++
++ // Add handles to the slider base.
++ function addHandles ( nrHandles, direction, base ) {
++
++ var index, handles = [];
++
++ // Append handles.
++ for ( index = 0; index < nrHandles; index += 1 ) {
++
++ // Keep a list of all added handles.
++ handles.push( base.appendChild(addHandle( direction, index )) );
++ }
++
++ return handles;
++ }
++
++ // Initialize a single slider.
++ function addSlider ( direction, orientation, target ) {
++
++ // Apply classes and data to the target.
++ addClass(target, options.cssClasses.target);
++
++ if ( direction === 0 ) {
++ addClass(target, options.cssClasses.ltr);
++ } else {
++ addClass(target, options.cssClasses.rtl);
++ }
++
++ if ( orientation === 0 ) {
++ addClass(target, options.cssClasses.horizontal);
++ } else {
++ addClass(target, options.cssClasses.vertical);
++ }
++
++ var div = document.createElement('div');
++ addClass(div, options.cssClasses.base);
++ target.appendChild(div);
++ return div;
++ }
--- /dev/null
--- /dev/null
++
++ function addTooltip ( handle, index ) {
++
++ if ( !options.tooltips[index] ) {
++ return false;
++ }
++
++ var element = document.createElement('div');
++ element.className = options.cssClasses.tooltip;
++ return handle.firstChild.appendChild(element);
++ }
++
++ // The tooltips option is a shorthand for using the 'update' event.
++ function tooltips ( ) {
++
++ if ( options.dir ) {
++ options.tooltips.reverse();
++ }
++
++ // Tooltips are added with options.tooltips in original order.
++ var tips = scope_Handles.map(addTooltip);
++
++ if ( options.dir ) {
++ tips.reverse();
++ options.tooltips.reverse();
++ }
++
++ bindEvent('update', function(f, o, r) {
++ if ( tips[o] ) {
++ tips[o].innerHTML = options.tooltips[o] === true ? f[o] : options.tooltips[o].to(r[o]);
++ }
++ });
++ }
--- /dev/null
--- /dev/null
++// @flow
++/**
++ * renderA11yString returns a readable string.
++ *
++ * In some cases the string will have the proper semantic math
++ * meaning,:
++ * renderA11yString("\\frac{1}{2}"")
++ * -> "start fraction, 1, divided by, 2, end fraction"
++ *
++ * However, other cases do not:
++ * renderA11yString("f(x) = x^2")
++ * -> "f, left parenthesis, x, right parenthesis, equals, x, squared"
++ *
++ * The commas in the string aim to increase ease of understanding
++ * when read by a screenreader.
++ */
++
++// NOTE: since we're importing types here these files won't actually be
++// included in the build.
++import type {Atom} from "../../src/symbols";
++import type {AnyParseNode} from "../../src/parseNode";
++import type {SettingsOptions} from "../../src/Settings";
++
++// $FlowIgnore: we import the types directly anyways
++import katex from "katex";
++
++const stringMap = {
++ "(": "left parenthesis",
++ ")": "right parenthesis",
++ "[": "open bracket",
++ "]": "close bracket",
++ "\\{": "left brace",
++ "\\}": "right brace",
++ "\\lvert": "open vertical bar",
++ "\\rvert": "close vertical bar",
++ "|": "vertical bar",
++ "\\uparrow": "up arrow",
++ "\\Uparrow": "up arrow",
++ "\\downarrow": "down arrow",
++ "\\Downarrow": "down arrow",
++ "\\updownarrow": "up down arrow",
++ "\\leftarrow": "left arrow",
++ "\\Leftarrow": "left arrow",
++ "\\rightarrow": "right arrow",
++ "\\Rightarrow": "right arrow",
++ "\\langle": "open angle",
++ "\\rangle": "close angle",
++ "\\lfloor": "open floor",
++ "\\rfloor": "close floor",
++ "\\int": "integral",
++ "\\intop": "integral",
++ "\\lim": "limit",
++ "\\ln": "natural log",
++ "\\log": "log",
++ "\\sin": "sine",
++ "\\cos": "cosine",
++ "\\tan": "tangent",
++ "\\cot": "cotangent",
++ "\\sum": "sum",
++ "/": "slash",
++ ",": "comma",
++ ".": "point",
++ "-": "negative",
++ "+": "plus",
++ "~": "tilde",
++ ":": "colon",
++ "?": "question mark",
++ "'": "apostrophe",
++ "\\%": "percent",
++ " ": "space",
++ "\\ ": "space",
++ "\\$": "dollar sign",
++ "\\angle": "angle",
++ "\\degree": "degree",
++ "\\circ": "circle",
++ "\\vec": "vector",
++ "\\triangle": "triangle",
++ "\\pi": "pi",
++ "\\prime": "prime",
++ "\\infty": "infinity",
++ "\\alpha": "alpha",
++ "\\beta": "beta",
++ "\\gamma": "gamma",
++ "\\omega": "omega",
++ "\\theta": "theta",
++ "\\sigma": "sigma",
++ "\\lambda": "lambda",
++ "\\tau": "tau",
++ "\\Delta": "delta",
++ "\\delta": "delta",
++ "\\mu": "mu",
++ "\\rho": "rho",
++ "\\nabla": "del",
++ "\\ell": "ell",
++ "\\ldots": "dots",
++ // TODO: add entries for all accents
++ "\\hat": "hat",
++ "\\acute": "acute",
++};
++
++const powerMap = {
++ "prime": "prime",
++ "degree": "degrees",
++ "circle": "degrees",
++ "2": "squared",
++ "3": "cubed",
++};
++
++const openMap = {
++ "|": "open vertical bar",
++ ".": "",
++};
++
++const closeMap = {
++ "|": "close vertical bar",
++ ".": "",
++};
++
++const binMap = {
++ "+": "plus",
++ "-": "minus",
++ "\\pm": "plus minus",
++ "\\cdot": "dot",
++ "*": "times",
++ "/": "divided by",
++ "\\times": "times",
++ "\\div": "divided by",
++ "\\circ": "circle",
++ "\\bullet": "bullet",
++};
++
++const relMap = {
++ "=": "equals",
++ "\\approx": "approximately equals",
++ "≠": "does not equal",
++ "\\geq": "is greater than or equal to",
++ "\\ge": "is greater than or equal to",
++ "\\leq": "is less than or equal to",
++ "\\le": "is less than or equal to",
++ ">": "is greater than",
++ "<": "is less than",
++ "\\leftarrow": "left arrow",
++ "\\Leftarrow": "left arrow",
++ "\\rightarrow": "right arrow",
++ "\\Rightarrow": "right arrow",
++ ":": "colon",
++};
++
++const accentUnderMap = {
++ "\\underleftarrow": "left arrow",
++ "\\underrightarrow": "right arrow",
++ "\\underleftrightarrow": "left-right arrow",
++ "\\undergroup": "group",
++ "\\underlinesegment": "line segment",
++ "\\utilde": "tilde",
++};
++
++type NestedArray<T> = Array<T | NestedArray<T>>;
++
++const buildString = (
++ str: string,
++ type: Atom | "normal",
++ a11yStrings: NestedArray<string>,
++) => {
++ if (!str) {
++ return;
++ }
++
++ let ret;
++
++ if (type === "open") {
++ ret = str in openMap ? openMap[str] : stringMap[str] || str;
++ } else if (type === "close") {
++ ret = str in closeMap ? closeMap[str] : stringMap[str] || str;
++ } else if (type === "bin") {
++ ret = binMap[str] || str;
++ } else if (type === "rel") {
++ ret = relMap[str] || str;
++ } else {
++ ret = stringMap[str] || str;
++ }
++
++ // If the text to add is a number and there is already a string
++ // in the list and the last string is a number then we should
++ // combine them into a single number
++ if (
++ /^\d+$/.test(ret) &&
++ a11yStrings.length > 0 &&
++ // TODO(kevinb): check that the last item in a11yStrings is a string
++ // I think we might be able to drop the nested arrays, which would make
++ // this easier to type - $FlowFixMe
++ /^\d+$/.test(a11yStrings[a11yStrings.length - 1])
++ ) {
++ a11yStrings[a11yStrings.length - 1] += ret;
++ } else if (ret) {
++ a11yStrings.push(ret);
++ }
++};
++
++const buildRegion = (
++ a11yStrings: NestedArray<string>,
++ callback: (regionStrings: NestedArray<string>) => void,
++) => {
++ const regionStrings: NestedArray<string> = [];
++ a11yStrings.push(regionStrings);
++ callback(regionStrings);
++};
++
++const handleObject = (
++ tree: AnyParseNode,
++ a11yStrings: NestedArray<string>,
++ atomType: Atom | "normal",
++) => {
++ // Everything else is assumed to be an object...
++ switch (tree.type) {
++ case "accent": {
++ buildRegion(a11yStrings, (a11yStrings) => {
++ buildA11yStrings(tree.base, a11yStrings, atomType);
++ a11yStrings.push("with");
++ buildString(tree.label, "normal", a11yStrings);
++ a11yStrings.push("on top");
++ });
++ break;
++ }
++
++ case "accentUnder": {
++ buildRegion(a11yStrings, (a11yStrings) => {
++ buildA11yStrings(tree.base, a11yStrings, atomType);
++ a11yStrings.push("with");
++ buildString(accentUnderMap[tree.label], "normal", a11yStrings);
++ a11yStrings.push("underneath");
++ });
++ break;
++ }
++
++ case "accent-token": {
++ // Used internally by accent symbols.
++ break;
++ }
++
++ case "atom": {
++ const {text} = tree;
++ switch (tree.family) {
++ case "bin": {
++ buildString(text, "bin", a11yStrings);
++ break;
++ }
++ case "close": {
++ buildString(text, "close", a11yStrings);
++ break;
++ }
++ // TODO(kevinb): figure out what should be done for inner
++ case "inner": {
++ buildString(tree.text, "inner", a11yStrings);
++ break;
++ }
++ case "open": {
++ buildString(text, "open", a11yStrings);
++ break;
++ }
++ case "punct": {
++ buildString(text, "punct", a11yStrings);
++ break;
++ }
++ case "rel": {
++ buildString(text, "rel", a11yStrings);
++ break;
++ }
++ default: {
++ (tree.family: empty);
++ throw new Error(`"${tree.family}" is not a valid atom type`);
++ }
++ }
++ break;
++ }
++
++ case "color": {
++ const color = tree.color.replace(/katex-/, "");
++
++ buildRegion(a11yStrings, (regionStrings) => {
++ regionStrings.push("start color " + color);
++ buildA11yStrings(tree.body, regionStrings, atomType);
++ regionStrings.push("end color " + color);
++ });
++ break;
++ }
++
++ case "color-token": {
++ // Used by \color, \colorbox, and \fcolorbox but not directly rendered.
++ // It's a leaf node and has no children so just break.
++ break;
++ }
++
++ case "delimsizing": {
++ if (tree.delim && tree.delim !== ".") {
++ buildString(tree.delim, "normal", a11yStrings);
++ }
++ break;
++ }
++
++ case "genfrac": {
++ buildRegion(a11yStrings, (regionStrings) => {
++ // genfrac can have unbalanced delimiters
++ const {leftDelim, rightDelim} = tree;
++
++ // NOTE: Not sure if this is a safe assumption
++ // hasBarLine true -> fraction, false -> binomial
++ if (tree.hasBarLine) {
++ regionStrings.push("start fraction");
++ leftDelim && buildString(leftDelim, "open", regionStrings);
++ buildA11yStrings(tree.numer, regionStrings, atomType);
++ regionStrings.push("divided by");
++ buildA11yStrings(tree.denom, regionStrings, atomType);
++ rightDelim && buildString(rightDelim, "close", regionStrings);
++ regionStrings.push("end fraction");
++ } else {
++ regionStrings.push("start binomial");
++ leftDelim && buildString(leftDelim, "open", regionStrings);
++ buildA11yStrings(tree.numer, regionStrings, atomType);
++ regionStrings.push("over");
++ buildA11yStrings(tree.denom, regionStrings, atomType);
++ rightDelim && buildString(rightDelim, "close", regionStrings);
++ regionStrings.push("end binomial");
++ }
++ });
++ break;
++ }
++
++ case "kern": {
++ // No op: we don't attempt to present kerning information
++ // to the screen reader.
++ break;
++ }
++
++ case "leftright": {
++ buildRegion(a11yStrings, (regionStrings) => {
++ buildString(tree.left, "open", regionStrings);
++ buildA11yStrings(tree.body, regionStrings, atomType);
++ buildString(tree.right, "close", regionStrings);
++ });
++ break;
++ }
++
++ case "leftright-right": {
++ // TODO: double check that this is a no-op
++ break;
++ }
++
++ case "lap": {
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ break;
++ }
++
++ case "mathord": {
++ buildString(tree.text, "normal", a11yStrings);
++ break;
++ }
++
++ case "op": {
++ const {body, name} = tree;
++ if (body) {
++ buildA11yStrings(body, a11yStrings, atomType);
++ } else if (name) {
++ buildString(name, "normal", a11yStrings);
++ }
++ break;
++ }
++
++ case "op-token": {
++ // Used internally by operator symbols.
++ buildString(tree.text, atomType, a11yStrings);
++ break;
++ }
++
++ case "ordgroup": {
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ break;
++ }
++
++ case "overline": {
++ buildRegion(a11yStrings, function(a11yStrings) {
++ a11yStrings.push("start overline");
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ a11yStrings.push("end overline");
++ });
++ break;
++ }
++
++ case "phantom": {
++ a11yStrings.push("empty space");
++ break;
++ }
++
++ case "raisebox": {
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ break;
++ }
++
++ case "rule": {
++ a11yStrings.push("rectangle");
++ break;
++ }
++
++ case "sizing": {
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ break;
++ }
++
++ case "spacing": {
++ a11yStrings.push("space");
++ break;
++ }
++
++ case "styling": {
++ // We ignore the styling and just pass through the contents
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ break;
++ }
++
++ case "sqrt": {
++ buildRegion(a11yStrings, (regionStrings) => {
++ const {body, index} = tree;
++ if (index) {
++ const indexString = flatten(
++ buildA11yStrings(index, [], atomType)).join(",");
++ if (indexString === "3") {
++ regionStrings.push("cube root of");
++ buildA11yStrings(body, regionStrings, atomType);
++ regionStrings.push("end cube root");
++ return;
++ }
++
++ regionStrings.push("root");
++ regionStrings.push("start index");
++ buildA11yStrings(index, regionStrings, atomType);
++ regionStrings.push("end index");
++ return;
++ }
++
++ regionStrings.push("square root of");
++ buildA11yStrings(body, regionStrings, atomType);
++ regionStrings.push("end square root");
++ });
++ break;
++ }
++
++ case "supsub": {
++ const {base, sub, sup} = tree;
++ let isLog = false;
++
++ if (base) {
++ buildA11yStrings(base, a11yStrings, atomType);
++ isLog = base.type === "op" && base.name === "\\log";
++ }
++
++ if (sub) {
++ const regionName = isLog ? "base" : "subscript";
++ buildRegion(a11yStrings, function(regionStrings) {
++ regionStrings.push(`start ${regionName}`);
++ buildA11yStrings(sub, regionStrings, atomType);
++ regionStrings.push(`end ${regionName}`);
++ });
++ }
++
++ if (sup) {
++ buildRegion(a11yStrings, function(regionStrings) {
++ const supString = flatten(
++ buildA11yStrings(sup, [], atomType)).join(",");
++
++ if (supString in powerMap) {
++ regionStrings.push(powerMap[supString]);
++ return;
++ }
++
++ regionStrings.push("start superscript");
++ buildA11yStrings(sup, regionStrings, atomType);
++ regionStrings.push("end superscript");
++ });
++ }
++ break;
++ }
++
++ case "text": {
++ // TODO: handle other fonts
++ if (tree.font === "\\textbf") {
++ buildRegion(a11yStrings, function(regionStrings) {
++ regionStrings.push("start bold text");
++ buildA11yStrings(tree.body, regionStrings, atomType);
++ regionStrings.push("end bold text");
++ });
++ break;
++ }
++ buildRegion(a11yStrings, function(regionStrings) {
++ regionStrings.push("start text");
++ buildA11yStrings(tree.body, regionStrings, atomType);
++ regionStrings.push("end text");
++ });
++ break;
++ }
++
++ case "textord": {
++ buildString(tree.text, atomType, a11yStrings);
++ break;
++ }
++
++ case "smash": {
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ break;
++ }
++
++ case "enclose": {
++ // TODO: create a map for these.
++ // TODO: differentiate between a body with a single atom, e.g.
++ // "cancel a" instead of "start cancel, a, end cancel"
++ if (/cancel/.test(tree.label)) {
++ buildRegion(a11yStrings, function(regionStrings) {
++ regionStrings.push("start cancel");
++ buildA11yStrings(tree.body, regionStrings, atomType);
++ regionStrings.push("end cancel");
++ });
++ break;
++ } else if (/box/.test(tree.label)) {
++ buildRegion(a11yStrings, function(regionStrings) {
++ regionStrings.push("start box");
++ buildA11yStrings(tree.body, regionStrings, atomType);
++ regionStrings.push("end box");
++ });
++ break;
++ } else if (/sout/.test(tree.label)) {
++ buildRegion(a11yStrings, function(regionStrings) {
++ regionStrings.push("start strikeout");
++ buildA11yStrings(tree.body, regionStrings, atomType);
++ regionStrings.push("end strikeout");
++ });
++ break;
++ }
++ throw new Error(
++ `KaTeX-a11y: enclose node with ${tree.label} not supported yet`);
++ }
++
++ case "vphantom": {
++ throw new Error("KaTeX-a11y: vphantom not implemented yet");
++ }
++
++ case "hphantom": {
++ throw new Error("KaTeX-a11y: hphantom not implemented yet");
++ }
++
++ case "operatorname": {
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ break;
++ }
++
++ case "array": {
++ throw new Error("KaTeX-a11y: array not implemented yet");
++ }
++
++ case "raw": {
++ throw new Error("KaTeX-a11y: raw not implemented yet");
++ }
++
++ case "size": {
++ // Although there are nodes of type "size" in the parse tree, they have
++ // no semantic meaning and should be ignored.
++ break;
++ }
++
++ case "url": {
++ throw new Error("KaTeX-a11y: url not implemented yet");
++ }
++
++ case "tag": {
++ throw new Error("KaTeX-a11y: tag not implemented yet");
++ }
++
++ case "verb": {
++ buildString(`start verbatim`, "normal", a11yStrings);
++ buildString(tree.body, "normal", a11yStrings);
++ buildString(`end verbatim`, "normal", a11yStrings);
++ break;
++ }
++
++ case "environment": {
++ throw new Error("KaTeX-a11y: environment not implemented yet");
++ }
++
++ case "horizBrace": {
++ buildString(`start ${tree.label.slice(1)}`, "normal", a11yStrings);
++ buildA11yStrings(tree.base, a11yStrings, atomType);
++ buildString(`end ${tree.label.slice(1)}`, "normal", a11yStrings);
++ break;
++ }
++
++ case "infix": {
++ // All infix nodes are replace with other nodes.
++ break;
++ }
++
++ case "includegraphics": {
++ throw new Error("KaTeX-a11y: includegraphics not implemented yet");
++ }
++
++ case "font": {
++ // TODO: callout the start/end of specific fonts
++ // TODO: map \BBb{N} to "the naturals" or something like that
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ break;
++ }
++
++ case "href": {
++ throw new Error("KaTeX-a11y: href not implemented yet");
++ }
++
++ case "cr": {
++ // This is used by environments.
++ throw new Error("KaTeX-a11y: cr not implemented yet");
++ }
++
++ case "underline": {
++ buildRegion(a11yStrings, function(a11yStrings) {
++ a11yStrings.push("start underline");
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ a11yStrings.push("end underline");
++ });
++ break;
++ }
++
++ case "xArrow": {
++ throw new Error("KaTeX-a11y: xArrow not implemented yet");
++ }
++
++ case "mclass": {
++ // \neq and \ne are macros so we let "htmlmathml" render the mathmal
++ // side of things and extract the text from that.
++ const atomType = tree.mclass.slice(1);
++ // $FlowFixMe: drop the leading "m" from the values in mclass
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ break;
++ }
++
++ case "mathchoice": {
++ // TODO: track which which style we're using, e.g. dispaly, text, etc.
++ // default to text style if even that may not be the correct style
++ buildA11yStrings(tree.text, a11yStrings, atomType);
++ break;
++ }
++
++ case "htmlmathml": {
++ buildA11yStrings(tree.mathml, a11yStrings, atomType);
++ break;
++ }
++
++ case "middle": {
++ buildString(tree.delim, atomType, a11yStrings);
++ break;
++ }
++
++ case "internal": {
++ // internal nodes are never included in the parse tree
++ break;
++ }
++
++ case "html": {
++ buildA11yStrings(tree.body, a11yStrings, atomType);
++ break;
++ }
++
++ default:
++ (tree.type: empty);
++ throw new Error("KaTeX a11y un-recognized type: " + tree.type);
++ }
++};
++
++const buildA11yStrings = (
++ tree: AnyParseNode | AnyParseNode[],
++ a11yStrings: NestedArray<string> = [],
++ atomType: Atom | "normal",
++) => {
++ if (tree instanceof Array) {
++ for (let i = 0; i < tree.length; i++) {
++ buildA11yStrings(tree[i], a11yStrings, atomType);
++ }
++ } else {
++ handleObject(tree, a11yStrings, atomType);
++ }
++
++ return a11yStrings;
++};
++
++
++const flatten = function(array) {
++ let result = [];
++
++ array.forEach(function(item) {
++ if (item instanceof Array) {
++ result = result.concat(flatten(item));
++ } else {
++ result.push(item);
++ }
++ });
++
++ return result;
++};
++
++const renderA11yString = function(text: string, settings?: SettingsOptions) {
++
++ const tree = katex.__parse(text, settings);
++ const a11yStrings = buildA11yStrings(tree, [], "normal");
++ return flatten(a11yStrings).join(", ");
++};
++
++export default renderA11yString;
--- /dev/null
--- /dev/null
++usr/share/info/dir
--- /dev/null
--- /dev/null
++Description: Don't use capture when running Core and Cremona tests on
++ 32-bit architectures. Otherwise, we run out of memory.
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Bug: https://github.com/Macaulay2/M2/issues/1834
++Origin: https://github.com/Macaulay2/M2/pull/1866
++Last-Update: 2021-01-24
++
++--- a/M2/Macaulay2/m2/examples.m2
+++++ b/M2/Macaulay2/m2/examples.m2
++@@ -116,6 +116,7 @@
++ -- TODO: remove this when the effects of capture on other packages is reviewed
++ (isTest or match({"FirstPackage", "Macaulay2Doc"}, pkg#"pkgname"))
++ and not match({"EngineTests", "ThreadedGB", "RunExternalM2", "DiffAlg"}, pkg#"pkgname")
+++ and not (match({"Core", "Cremona"}, pkg#"pkgname") and version#"pointer size" == 4)
++ -- FIXME: these are workarounds to prevent bugs, in order of priority for being fixed:
++ and not match("(gbTrace|NAGtrace)", inputs) -- cerr/cout directly from engine isn't captured
++ and not match("(notify|stopIfError|debuggingMode)", inputs) -- stopIfError and debuggingMode may be fixable
--- /dev/null
--- /dev/null
++Description: Don't use "capture" for DiffAlg package tests.
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Bug: https://github.com/Macaulay2/M2/issues/1728
++Applied-Upstream: 1.18, https://github.com/Macaulay2/M2/pull/1829
++Last-Update: 2021-01-18
++
++--- a/M2/Macaulay2/m2/examples.m2
+++++ b/M2/Macaulay2/m2/examples.m2
++@@ -115,7 +115,7 @@
++ inputs = replace("-\\*.*?\\*-", "", inputs);
++ -- TODO: remove this when the effects of capture on other packages is reviewed
++ (isTest or match({"FirstPackage", "Macaulay2Doc"}, pkg#"pkgname"))
++- and not match({"EngineTests", "ThreadedGB", "RunExternalM2"}, pkg#"pkgname")
+++ and not match({"EngineTests", "ThreadedGB", "RunExternalM2", "DiffAlg"}, pkg#"pkgname")
++ -- FIXME: these are workarounds to prevent bugs, in order of priority for being fixed:
++ and not match("(gbTrace|NAGtrace)", inputs) -- cerr/cout directly from engine isn't captured
++ and not match("(notify|stopIfError|debuggingMode)", inputs) -- stopIfError and debuggingMode may be fixable
--- /dev/null
--- /dev/null
++Description: Provide version#"git description".
++ Since we may not be building the package from a git repository, we
++ hardcode the git description ahead of time. This patch is
++ automatically updated by debian/scripts/m2-get-orig-source.sh.
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Forwarded: not-needed
++Last-Update: 2020-12-21
++
++--- a/M2/configure.ac
+++++ b/M2/configure.ac
++@@ -559,7 +559,7 @@
++ NEW_COMMITS=`$GIT rev-list $($GIT rev-list -1 HEAD $srcdir/VERSION)..HEAD --count`
++ GIT_COMMIT=`$GIT describe --dirty --always --match HEAD`
++ if test "$NEW_COMMITS-$GIT_COMMIT" = "-"
++-then GIT_DESCRIPTION=version-$PACKAGE_VERSION-unknown
+++then GIT_DESCRIPTION=version-1.17.1-0-385704bb5
++ else GIT_DESCRIPTION=version-$PACKAGE_VERSION-$NEW_COMMITS-$GIT_COMMIT
++ fi
++ AC_DEFINE_UNQUOTED(GIT_DESCRIPTION,"$GIT_DESCRIPTION",[summary of git status])
--- /dev/null
--- /dev/null
++Description: Increase the default printWidth for examples from 77 to 129
++ This decreases the probability of examples escaping the "reproduciblePaths"
++ function due to line wrapping.
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Forwarded: not-needed
++Last-Update: 2020-12-03
++
++--- a/M2/Macaulay2/m2/run.m2
+++++ b/M2/Macaulay2/m2/run.m2
++@@ -54,7 +54,7 @@
++ ArgSilent = 1 << 12 -* add --silent *-
++ ArgStop = 1 << 13 -* add --stop *-
++ ArgPrintWidth = 1 << 14 -* add --print-width 77 *-
++-ArgPrintWidthN = 77
+++ArgPrintWidthN = 129
++ -- suffixes
++ SetInputFile = 1 << 30 -* add <inf *-
++ SetOutputFile = 1 << 31 -* add >>tmpf *-
--- /dev/null
--- /dev/null
++Description: Reproducible version#"configure arguments"
++ We replace the build directory with "/build/path" in all the instances
++ of the -fdebug-prefix-map flag.
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Forwarded: not-needed
++Last-Update: 2020-09-18
++
++--- a/M2/configure.ac
+++++ b/M2/configure.ac
++@@ -6,7 +6,7 @@
++ AC_SUBST(CONFIGURED_FILES,"$ac_config_files")
++ AC_SUBST(CONFIG_ARGS,"$ac_configure_args")
++ echo "'$0' $ac_configure_args" > config.args
++-C_CONFIG_ARGS=` echo "$ac_configure_args" | sed -e 's=\\\\=\\\\\\\\=g' -e 's=\\"=\\\\"=g' `
+++C_CONFIG_ARGS=`echo "$ac_configure_args" | sed -e 's=\\\\=\\\\\\\\=g' -e 's=\\"=\\\\"=g' -e "s=$CURDIR=/build/path=g"`
++ AC_DEFINE_UNQUOTED(CONFIG_ARGS,"$C_CONFIG_ARGS",arguments used for configure)
++ AC_SUBST(CONFIG_CMD,"'$0' $ac_configure_args")
++
--- /dev/null
--- /dev/null
++git-description.patch
++reproducible-config-args.patch
++remove-build-paths-from-docs.patch
++use-canned-examples.patch
++skip-failing-core-tests.patch
++skip-failing-package-tests.patch
++use-debian-applications.patch
++use-dh-elpa.patch
++dont-capture-diffalg-tests.patch
++smaller-points-examples.patch
++dont-capture-check-core-32-bit.patch
--- /dev/null
--- /dev/null
++Description: Skip Core tests that have been known to fail on various
++ architectures.
++Bug: https://github.com/Macaulay2/M2/issues/1304
++Bug: https://github.com/Macaulay2/M2/issues/1577
++Bug: https://github.com/Macaulay2/M2/issues/1578
++Bug: https://github.com/Macaulay2/M2/issues/1580
++Bug: https://github.com/Macaulay2/M2/issues/1663
++Bug: https://github.com/Macaulay2/M2/issues/1742
++Bug: https://github.com/Macaulay2/M2/issues/1804
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Last-Update: 2020-11-03
++
++--- a/M2/Macaulay2/tests/normal/core-tests.m2
+++++ b/M2/Macaulay2/tests/normal/core-tests.m2
++@@ -1883,11 +1883,6 @@
++ J = substitute(I,S)
++ installHilbertFunction(J, hf)
++ gbTrace=3
++-time gens gb J
++---status: this is a strange one
++---status: it's a gb computation that seems to run out of memory far too soon
++---status: Mike?
++-selectInSubring(1,gens gb J)
++
++
++ --
++--- a/M2/Macaulay2/tests/ComputationsBook/Makefile.in
+++++ b/M2/Macaulay2/tests/ComputationsBook/Makefile.in
++@@ -2,7 +2,7 @@
++ include ../../../include/config.Makefile
++ VPATH = @srcdir@
++ CHAPTERS = completeIntersections constructions d-modules exterior-algebra geometry \
++- monomialIdeals preface programming schemes solving toricHilbertScheme varieties
+++ preface programming schemes solving toricHilbertScheme
++ .PHONY: changes capture
++ all:
++ $(CHAPTERS):; $(MKDIR_P) "$@"
++--- a/M2/Macaulay2/tests/normal/smith.m2
+++++ b/M2/Macaulay2/tests/normal/smith.m2
++@@ -27,7 +27,6 @@
++
++ R = QQ[x]
++ time (g,t,s) = smithNormalForm ( f = random(R^8,R^3,MaximalRank=>true) * matrix "14+x,,;,140-x2,;,,1261+2x" * random(R^3,R^10,MaximalRank=>true) );
++-time assert ( t*f*s == g )
++ time assert ( # pivots g == 3 )
++
++ S = QQ [x, MonomialOrder => {Position => Down}]
++--- a/M2/Macaulay2/tests/slow/forms.m2
+++++ b/M2/Macaulay2/tests/slow/forms.m2
++@@ -9,4 +9,3 @@
++ f = random(R^1,R^{r:-d}) * random(R^{r:-d},R^{r':-d});
++ gbTrace = 3;
++ M = image f;
++-time G = gb(M, DegreeLimit => d);
++--- a/M2/Macaulay2/tests/slow/isSubset.m2
+++++ b/M2/Macaulay2/tests/slow/isSubset.m2
++@@ -42,10 +42,3 @@
++ K = I+J;
++ f = J_(numgens J - 1);
++ m = a*b*c^6
++-assert( m % leadTerm K == 0 )
++-assert( m % K != m )
++-s = select( flatten entries leadTerm K, n -> m % leadMonomial n == 0 )
++-assert( m % ideal s == 0 )
++-assert( f % K == 0 )
++-assert isSubset(J,K)
++-assert ( gens gb gens gb K == gens gb K )
++--- a/M2/Macaulay2/tests/slow/plethysms.m2
+++++ b/M2/Macaulay2/tests/slow/plethysms.m2
++@@ -23,8 +23,6 @@
++ G = flagBundle {6,4}
++ (S,Q) = G.Bundles
++ E = exteriorPower_3 S
++-time apply(0 .. 20, i -> chi exteriorPower_i E)
++-assert( oo == (1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1) )
++ time integral ( chern_20 E * (chern_1 G.TangentBundle)^4 )
++ assert( oo == 14520000 )
++
++--- a/M2/Macaulay2/tests/threads/schur-2.m2
+++++ b/M2/Macaulay2/tests/threads/schur-2.m2
++@@ -4,4 +4,4 @@
++ S = schurRing(s,3);
++ rep = s_{5};
++ M = {1_S,s_{5},s_{10},s_{15},s_{20},s_{25},s_{30}};
++-for i to 15 do ( stderr << i << endl; schurResolution(rep,M,SyzygyLimit => 3) );
+++for i to 9 do ( stderr << i << endl; schurResolution(rep,M,SyzygyLimit => 3) );
++--- a/M2/Macaulay2/tests/normal/timing-quotient.m2
+++++ b/M2/Macaulay2/tests/normal/timing-quotient.m2
++@@ -214,10 +214,8 @@
++ -- version 1.8: 17.5 seconds
++ -- after fix: .166 seconds
++ assert Equation(numgens tim#1, 33)
++-assert BinaryOperation {symbol <, tim#0, .5 * standardSecond}
++
++ P=QQ[x,y,z,MonomialOrder=>Lex];
++ d=z^4+z^2*x*y^9+z*x^9*y+x^5*y^5;
++ phi=map(P,P,matrix{{x^13*y^4,x^3*y,x^20*y^6*z}});
++ tim = timing factor(phi(d));
++-assert BinaryOperation {symbol <, tim#0, .05 * standardSecond}
--- /dev/null
--- /dev/null
++Description: Skip package tests that have been known to fail on
++ various architectures.
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Bug: https://github.com/Macaulay2/M2/issues/190
++Bug: https://github.com/Macaulay2/M2/issues/334
++Bug: https://github.com/Macaulay2/M2/issues/1392
++Bug: https://github.com/Macaulay2/M2/issues/1539
++Bug: https://github.com/Macaulay2/M2/issues/1563
++Bug: https://github.com/Macaulay2/M2/issues/1564
++Bug: https://github.com/Macaulay2/M2/issues/1579
++Bug: https://github.com/Macaulay2/M2/issues/1581
++Bug: https://github.com/Macaulay2/M2/issues/1697
++Bug: https://github.com/Macaulay2/M2/issues/1707
++Bug: https://github.com/Macaulay2/M2/issues/1742
++Bug: https://github.com/Macaulay2/M2/issues/1745
++Bug: https://github.com/Macaulay2/M2/issues/1746
++Bug: https://github.com/Macaulay2/M2/issues/1747
++Bug: https://github.com/Macaulay2/M2/issues/1773
++Last-Update: 2021-01-01
++
++--- a/M2/Macaulay2/packages/SpecialFanoFourfolds.m2
+++++ b/M2/Macaulay2/packages/SpecialFanoFourfolds.m2
++@@ -2801,6 +2801,7 @@
++ ///
++
++ TEST ///
+++-* no-check-flag *-
++ K := ZZ/3331;
++ --
++ time X1 = specialGushelMukaiFourfold("sigma-plane",K,InputCheck=>0);
++@@ -2826,6 +2827,7 @@
++ ///
++
++ TEST///
+++-* no-check-flag *-
++ K = ZZ/65521;
++ X = for i from 1 to 21 list (
++ A = tables(i,K);
++@@ -2849,6 +2851,7 @@
++ ///
++
++ TEST ///
+++-* no-check-flag *-
++ for dgs in {(2,0,1),(3,1,1),(4,1,1),(5,1,1),(5,1,2),(4,3,1),(6,4,1),(8,5,1),(10,6,1),(12,7,1),(14,8,1),(16,9,1),(18,10,1)} do (
++ (d,g,s) = dgs;
++ <<"(d,g) = "<<(d,g)<<", Strategy=>"<<s<<endl;
++--- a/M2/Macaulay2/packages/GroebnerWalk.m2
+++++ b/M2/Macaulay2/packages/GroebnerWalk.m2
++@@ -726,6 +726,7 @@
++ ///
++
++ TEST /// -- groebnerWalk
+++-* no-check-flag *-
++ R1 = QQ[x,y,z, MonomialOrder=>Weights=>{1,1,10}]
++ I1 = ideal(y^2-x, z^3-x)
++ R2 = QQ[x,y,z, MonomialOrder=>Weights=>{10,1,1}]
++--- a/M2/Macaulay2/packages/LLLBases.m2
+++++ b/M2/Macaulay2/packages/LLLBases.m2
++@@ -1303,6 +1303,7 @@
++ -- kernelLLL ------
++ -------------------
++ TEST ///
+++-* no-check-flag *-
++
++ time m1 = map(ZZ^10, ZZ^10, (j,i) -> (i+1)^3 * (j+1)^2 + i + j + 2)
++ time m = syz m1
++@@ -1402,6 +1403,7 @@
++ assert (a == m)
++ ///
++ TEST ///
+++-* no-check-flag *-
++ setRandomSeed 0
++ m0 = random(ZZ^20, ZZ^30, Height=>100000)
++ m1 = syz m0;
++--- a/M2/Macaulay2/packages/SumsOfSquares.m2
+++++ b/M2/Macaulay2/packages/SumsOfSquares.m2
++@@ -1369,6 +1369,7 @@
++
++ --11
++ TEST /// --lowerBound
+++-* no-check-flag *-
++ debug needsPackage "SumsOfSquares"
++ results := checkLowerBound("CSDP")
++ assert all(results,t->t=!=false);
++--- a/M2/Macaulay2/packages/CoincidentRootLoci/tests.m2
+++++ b/M2/Macaulay2/packages/CoincidentRootLoci/tests.m2
++@@ -180,6 +180,7 @@
++ ///
++
++ TEST /// -- singularLocus
+++-* no-check-flag *-
++ X10 = coincidentRootLocus(toList(10:1),ZZ/101,Variable=>x)
++ A10 = {{},{{10}},{{10}},{{9,1}},{{10}},{{7,3},{8,2},{9,1}},{{8,1,1}},{{10}},{{6,4},{7,3},{9,1}},{{8,2}},{{6,2,2},{6,3,1},{7,2,1},{8,1,1}},{{7,1,1,1}},{},{{5,5},{6,4},{9,1}},{{5,5},{7,3},{8,2}},{{5,4,1},{6,3,1},{8,1,1}},{{5,3,2},{6,2,2},{7,2,1}},{{5,2,2,1},{5,3,1,1},{6,2,1,1},{7,1,1,1}},{{5,5},{6,1,1,1,1}},{{6,4}},{{5,4,1}},{{7,3}},{{4,3,3},{4,4,2},{5,3,2},{5,4,1},{6,3,1},{7,2,1}},{{4,3,3},{4,4,1,1},{5,3,1,1},{7,1,1,1}},{{4,4,2},{6,2,2}},{{4,2,2,2},{4,3,2,1},{4,4,1,1},{5,2,2,1},{6,2,1,1}},{{4,2,2,1,1},{4,3,1,1,1},{4,4,2},{5,2,1,1,1},{6,1,1,1,1}},{{4,4,1,1},{5,1,1,1,1,1}},{{4,3,3}},{{5,3,2}},{{3,3,2,2},{3,3,3,1},{4,3,2,1},{5,3,1,1}},{{3,3,3,1},{4,3,1,1,1}},{{3,3,2,2},{4,2,2,2},{5,2,2,1}},{{3,2,2,2,1},{3,3,2,1,1},{3,3,2,2},{4,2,2,1,1},{5,2,1,1,1}},{{3,2,2,1,1,1},{3,3,1,1,1,1},{3,3,2,1,1},{4,2,1,1,1,1},{5,1,1,1,1,1}},{{3,3,1,1,1,1},{4,1,1,1,1,1,1}},{},{{2,2,2,2,2},{3,2,2,2,1}},{{2,2,2,2,1,1},{3,2,2,1,1,1},{4,4,2}},{{2,2,2,1,1,1,1},{3,2,1,1,1,1,1},{4,4,1,1}},{{2,2,1,1,1,1,1,1},{3,1,1,1,1,1,1,1}},{}}
++ assert(sort apply(apply(subsets X10,singularLocus),L -> sort apply(L,partition)) === sort apply(A10,sort))
++--- a/M2/Macaulay2/packages/Matroids.m2
+++++ b/M2/Macaulay2/packages/Matroids.m2
++@@ -3638,6 +3638,7 @@
++ ///\r
++ \r
++ TEST ///\r
+++-* no-check-flag *-\r
++ M0 = matroid graph({{a,b},{b,c},{c,d},{d,e},{e,f},{f,g},{f,h},{c,h},{c,f},{a,g},{d,g}})\r
++ M1 = matroid graph({{a,b},{b,c},{c,d},{d,e},{e,f},{f,g},{f,h},{c,h},{c,f},{a,g},{a,h}})\r
++ T = ZZ[x,y]\r
++--- a/M2/Macaulay2/packages/VersalDeformations.m2
+++++ b/M2/Macaulay2/packages/VersalDeformations.m2
++@@ -1366,6 +1366,7 @@
++ ///
++
++ TEST ///
+++-* no-check-flag *-
++ needsPackage "Truncations"
++ S = ZZ/32003[a..d]
++ I = monomialIdeal(a^2,a*b,b^4,a*c^3)
++--- a/M2/Macaulay2/packages/DeterminantalRepresentations.m2
+++++ b/M2/Macaulay2/packages/DeterminantalRepresentations.m2
++@@ -1305,6 +1305,7 @@
++ -- TESTS
++
++ TEST /// -- Quadratic case: over QQ, RR, CC
+++-* no-check-flag *-
++ S = QQ[x1,x2,x3]
++ f = 1 - 8*x1*x2 - 4*x1*x3 - 100*x2^2 - 12*x2*x3 - x3^2 - 5*x1^2
++ M = first detRep(f, Tolerance => 1e-10)
++@@ -1517,6 +1518,7 @@
++ ///
++
++ TEST /// -- cholesky, randomPSD
+++-* no-check-flag *-
++ eps = 1e-15
++ A = randomPSD 5
++ E = eigenvectors(A, Hermitian => true)
++--- a/M2/Macaulay2/packages/Dmodules/DMODdoc.m2
+++++ b/M2/Macaulay2/packages/Dmodules/DMODdoc.m2
++@@ -2,7 +2,7 @@
++
++ TEST /// input "Dmodules/TST/gkz.tst.m2" ///
++ TEST /// input "Dmodules/TST/AnnFs.tst.m2" ///
++-TEST /// input "Dmodules/TST/DHom.tst.m2" ///
+++TEST ///-* no-check-flag *- input "Dmodules/TST/DHom.tst.m2" ///
++ TEST /// input "Dmodules/TST/Dbasic.tst.m2" ///
++ TEST /// input "Dmodules/TST/Ddual.tst.m2" ///
++ TEST /// input "Dmodules/TST/DeRham.tst.m2" ///
++--- a/M2/Macaulay2/packages/MinimalPrimes/tests.m2
+++++ b/M2/Macaulay2/packages/MinimalPrimes/tests.m2
++@@ -95,6 +95,7 @@
++ ///
++
++ TEST ///
+++-* no-check-flag *-
++ -- Over a tower of rings
++ R = QQ[b][u][x,r,v, MonomialOrder=>{Lex=>3}]
++ I = ideal(b^3-7*b^2+14*b-7,r^2-u*r+(-2*b^2+9*b-5)*u^2+b^2-4*b,x^2+(b-2)*x*r+r^2+b^2-4*b)
++@@ -638,6 +639,7 @@
++ ///
++
++ SIMPLETEST ///
+++-* no-check-flag *-
++ needsPackage "MinimalPrimes"
++ R = QQ[vars(0..8)];
++ I = ideal(b*d+a*e,c*d+a*f,c*e+b*f,b*g+a*h,c*g+a*i,c*h+b*i,e*g+d*h,f*g+d*i,f*h+e*i)
++@@ -648,6 +650,7 @@
++ ///
++
++ SIMPLETEST ///
+++-* no-check-flag *-
++ needsPackage "MinimalPrimes"
++ R = QQ[vars(0..8),MonomialOrder=>Lex];
++ I = ideal(b*d+a*e,c*d+a*f,c*e+b*f,b*g+a*h,c*g+a*i,c*h+b*i,e*g+d*h,f*g+d*i,f*h+e*i)
++@@ -1604,6 +1607,7 @@
++ ///
++
++ TEST ///
+++-* no-check-flag *-
++ -- this test occurs as a crash in github issue #190.
++ -- seems to work after recent changes to factory.
++ -- it might be too long for a test...
++@@ -1696,6 +1700,7 @@
++ ///
++
++ TEST ///
+++-* no-check-flag *-
++ -- permanents!
++ R = ZZ/32003[r,s,t,u,v,w,x,y,z]
++ I = ideal(
++--- a/M2/Macaulay2/tests/normal/alarm.m2
+++++ b/M2/Macaulay2/tests/normal/alarm.m2
++@@ -1,3 +1,4 @@
+++-* no-check-flag *-
++ -- test that alarms work
++
++ time try ( alarm(1); while true do 1 ) else true
++--- a/M2/Macaulay2/packages/PrimaryDecomposition/primaryDecomposition-test.m2
+++++ b/M2/Macaulay2/packages/PrimaryDecomposition/primaryDecomposition-test.m2
++@@ -1,3 +1,4 @@
+++-* no-check-flag *-
++ -- this example is provided by Amelia Taylor
++
++ k = QQ
++--- a/M2/Macaulay2/packages/InvariantRing/Tests.m2
+++++ b/M2/Macaulay2/packages/InvariantRing/Tests.m2
++@@ -105,6 +105,7 @@
++
++ -- Test 9
++ TEST ///
+++-* no-check-flag *-
++ R2 = QQ[x_1..x_4]
++ T2 = diagonalAction(matrix{{0,1,-1,1},{1,0,-1,-1}}, R2)
++ invariants2 = set {x_1*x_2*x_3,x_1^2*x_3*x_4}
++--- a/M2/Macaulay2/packages/RationalMaps.m2
+++++ b/M2/Macaulay2/packages/RationalMaps.m2
++@@ -2281,6 +2281,7 @@
++ -------------------------------------
++
++ TEST /// --test #23
+++-* no-check-flag *-
++ -- Let's find the inverse of the projection map from
++ -- the blow up of P^2 to P^2
++
++--- a/M2/Macaulay2/packages/Divisor.m2
+++++ b/M2/Macaulay2/packages/Divisor.m2
++@@ -4324,6 +4324,7 @@
++ ///
++
++ TEST /// --check #11, test functoriality for a finite map
+++-* no-check-flag *-
++ R = QQ[x,y,z,w]/ideal(z^2-y*w,y*z-x*w,y^2-x*z);
++ T = QQ[a,b];
++ h = map(T, R, {a^3, a^2*b, a*b^2, b^3}); --this is the natural inclusion map
++--- a/M2/Macaulay2/packages/Topcom.m2
+++++ b/M2/Macaulay2/packages/Topcom.m2
++@@ -395,6 +395,7 @@
++ ///
++
++ TEST ///
+++-* no-check-flag *-
++ needsPackage "Topcom"
++ -- test of isRegularTriangulation
++ A = transpose matrix {{0,3},{0,1},{-1,-1},{1,-1},{-4,-2},{4,-2}}
++--- a/M2/Macaulay2/tests/normal/core-tests.m2
+++++ b/M2/Macaulay2/tests/normal/core-tests.m2
++@@ -1,3 +1,4 @@
+++-* no-check-flag *-
++ -- these tests were in random places in Macaulay2Doc
++ -- TODO: move them somewhere appropriate
++ --
--- /dev/null
--- /dev/null
++Description: Remove examples showing less efficient algorithms from Points docs.
++ They were causing build failures on mipsel and riscv64.
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Bug: https://github.com/Macaulay2/M2/issues/1833
++Applied-Upstream: 1.18, https://github.com/Macaulay2/M2/pull/1838
++Last-Update: 2021-01-24
++
++--- a/M2/Macaulay2/packages/Points.m2
+++++ b/M2/Macaulay2/packages/Points.m2
++@@ -958,16 +958,9 @@
++ monomialIdeal G == inG
++ ///,
++ PARA{},
++- "Next a larger example that shows that the Buchberger-Moeller algorithm in ",
+++ "The Buchberger-Moeller algorithm in ",
++ TT "points", " may be faster than the alternative method using the intersection
++ of the ideals for each point.",
++- EXAMPLE lines ///
++- R = ZZ/32003[vars(0..4), MonomialOrder=>Lex]
++- M = random(ZZ^5, ZZ^150)
++- time J = affinePointsByIntersection(M,R);
++- time C = affinePoints(M,R);
++- J == C_2
++- ///,
++ SeeAlso => {affinePointsByIntersection}
++ }
++
++@@ -1148,15 +1141,6 @@
++ Text
++ This algorithm may be faster than
++ computing the intersection of the ideals of each projective point.
++-
++- Example
++- K = ZZ/32003
++- R = K[z_0..z_5]
++- M = random(ZZ^6,ZZ^150)
++- elapsedTime (inG,G) = projectivePoints(M,R);
++- elapsedTime H = projectivePointsByIntersection(M,R);
++- G == H
++-
++ Caveat
++ This function removes zero columns of @TT "M"@ and duplicate columns giving rise to the same projective point (which prevent the algorithm from terminating). The user can bypass this step with the option @TT "VerifyPoints"@.
++ SeeAlso
--- /dev/null
--- /dev/null
++Description: Used canned versions of examples that have been known to
++ fail on various architectures.
++Bug: https://github.com/Macaulay2/M2/issues/1429
++Bug: https://github.com/Macaulay2/M2/issues/1463
++Bug: https://github.com/Macaulay2/M2/issues/1539
++Bug: https://github.com/Macaulay2/M2/issues/1557
++Bug: https://github.com/Macaulay2/M2/issues/1676
++Bug: https://github.com/Macaulay2/M2/issues/1707
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Last-Update: 2020-12-27
++
++--- a/M2/Macaulay2/packages/AlgebraicSplines.m2
+++++ b/M2/Macaulay2/packages/AlgebraicSplines.m2
++@@ -2506,11 +2506,40 @@
++ Text
++ The above example shows that the Billera-Schenck-Stillman spline complex is the cokernel of the natural map between the complex
++ of ideals (given by idealsComplex) and the cellular chain complex of $\Delta$ relative to its boundary.
++- Example
++- V = {{1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1}, {-2, -2, -2}, {-2, 2, -2}, {2, 2, -2}, {2, -2, -2}, {-2, -2, 2}, {-2, 2, 2}, {2, 2, 2}, {2, -2, 2}};
++- F = {{0, 1, 2, 3, 4, 5}, {0, 8, 9, 12, 13}, {1, 6, 7, 10, 11}, {2, 7, 8, 11, 12}, {3, 6, 9, 10, 13}, {4, 10, 11, 12, 13}, {5, 6, 7, 8, 9}, {0, 2, 8, 12}, {0, 3, 9, 13}, {0, 4, 12, 13}, {0, 5, 8, 9}, {1, 2, 7, 11}, {1, 3, 6, 10}, {1, 4, 10, 11}, {1, 5, 6, 7}, {2, 4, 11, 12}, {3, 4, 10, 13}, {3, 5, 6, 9}, {2, 5, 7, 8}, {0, 2, 4, 12}, {0, 2, 5, 8}, {0, 3, 4, 13}, {0, 3, 5, 9}, {1, 2, 4, 11}, {1, 2, 5, 7}, {1, 3, 4, 10}, {1, 3, 5, 6}};
++- C = splineComplex(V,F,1);
++- associatedPrimes annihilator HH_2 C
+++ CannedExample
+++ i25 : V = {{1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1}, {-2, -2, -2}, {-2, 2, -2}, {2, 2, -2}, {2, -2, -2}, {-2, -2, 2}, {-2, 2, 2}, {2, 2, 2}, {2, -2, 2}};
+++
+++ i26 : F = {{0, 1, 2, 3, 4, 5}, {0, 8, 9, 12, 13}, {1, 6, 7, 10, 11}, {2, 7, 8, 11, 12}, {3, 6, 9, 10, 13}, {4, 10, 11, 12, 13}, {5, 6, 7, 8, 9}, {0, 2, 8, 12}, {0, 3, 9, 13}, {0, 4, 12, 13}, {0, 5, 8, 9}, {1, 2, 7, 11}, {1, 3, 6, 10}, {1, 4, 10, 11}, {1, 5, 6, 7}, {2, 4, 11, 12}, {3, 4, 10, 13}, {3, 5, 6, 9}, {2, 5, 7, 8}, {0, 2, 4, 12}, {0, 2, 5, 8}, {0, 3, 4, 13}, {0, 3, 5, 9}, {1, 2, 4, 11}, {1, 2, 5, 7}, {1, 3, 4, 10}, {1, 3, 5, 6}};
+++
+++ i27 : C = splineComplex(V,F,1);
+++
+++ i28 : associatedPrimes annihilator HH_2 C
+++
+++ o28 = {ideal (t , t , t ), ideal (t , t , t ), ideal (t , t , t ), ideal (t ,
+++ 3 2 0 3 2 1 3 1 0 2
+++ -----------------------------------------------------------------------
+++ t , t - t ), ideal (t , t , t + t ), ideal (t , t - t , t ), ideal
+++ 1 0 3 2 1 0 3 2 1 3 0
+++ -----------------------------------------------------------------------
+++ (t , t + t , t ), ideal (t - t , t , t ), ideal (t + t , t , t ),
+++ 2 1 3 0 2 3 1 0 2 3 1 0
+++ -----------------------------------------------------------------------
+++ ideal (t - 2t , t - 2t , t - 2t ), ideal (t - 2t , t - 2t , t +
+++ 2 3 1 3 0 3 2 3 1 3 0
+++ -----------------------------------------------------------------------
+++ 2t ), ideal (t - 2t , t + 2t , t - 2t ), ideal (t - 2t , t + 2t ,
+++ 3 2 3 1 3 0 3 2 3 1 3
+++ -----------------------------------------------------------------------
+++ t + 2t ), ideal (t + 2t , t + 2t , t - 2t ), ideal (t + 2t , t +
+++ 0 3 2 3 1 3 0 3 2 3 1
+++ -----------------------------------------------------------------------
+++ 2t , t + 2t ), ideal (t + 2t , t - 2t , t - 2t ), ideal (t + 2t ,
+++ 3 0 3 2 3 1 3 0 3 2 3
+++ -----------------------------------------------------------------------
+++ t - 2t , t + 2t ), ideal (t , t , t , t )}
+++ 1 3 0 3 3 2 1 0
+++
+++ o28 : List
++ Text
++ The above example showcases a fairly complex three dimensional polyhedral complex.
++ It is a three-dimensional analog of the Morgan-Scot partition in the sense that
++--- a/M2/Macaulay2/packages/MultiplicitySequence.m2
+++++ b/M2/Macaulay2/packages/MultiplicitySequence.m2
++@@ -493,11 +493,27 @@
++ Text
++ Given a monomial ideal I, this function computes the j-multiplicity of I
++ following the method of Jeffries-Montaño.
++- Example
++- R = QQ[x,y]
++- I = (ideal"xy5,x2y3,x3y2")^4
++- elapsedTime monjMult I
++- elapsedTime jMult I
+++ CannedExample
+++ i1 : R = QQ[x,y]
+++
+++ o1 = R
+++
+++ o1 : PolynomialRing
+++
+++ i2 : I = (ideal"xy5,x2y3,x3y2")^4
+++
+++ 4 20 5 18 6 17 6 16 7 15 8 14 7 14 8 13 9 12 10 11 8 12 9 11 10 10 11 9 12 8
+++ o2 = ideal (x y , x y , x y , x y , x y , x y , x y , x y , x y , x y , x y , x y , x y , x y , x y )
+++
+++ o2 : Ideal of R
+++
+++ i3 : elapsedTime monjMult I
+++ -- 0.0945551 seconds elapsed
+++
+++ o3 = 192
+++
+++ i4 : elapsedTime jMult I
+++ -- 1.15819 seconds elapsed
++ SeeAlso
++ multiplicitySequence
++ jMult
++--- a/M2/Macaulay2/packages/SpecialFanoFourfolds.m2
+++++ b/M2/Macaulay2/packages/SpecialFanoFourfolds.m2
++@@ -2591,7 +2591,61 @@
++ Outputs => {FunctionClosure => {"which takes the ideal of a (general) point ", TEX///$p\in\mathbb{P}^5$///, " and returns the unique rational curve of degree ", TEX///$e$///, ", ", TEX///$(3e-1)$///, "-secant to ", TEX///$S$///, ", and passing through ", TEX///$p$///, " (an error is thrown if such a curve does not exist or is not unique)"}},
++ EXAMPLE {"-- A general cubic fourfold of discriminant 26"|newline|"X = specialCubicFourfold(\"Farkas-Verra C26\",ZZ/33331);", "describe X", "time f = detectCongruence X;", "p = point ring X -- random point on P^5", "time C = f p -- 5-secant conic to the surface", "assert(codim C == 4 and degree C == 2 and codim(C+(first ideals X)) == 5 and degree(C+(first ideals X)) == 5 and isSubset(C, p))"},
++ PARA{"The same method can be also applied to ", ofClass SpecialGushelMukaiFourfold, ". In this case it will detect and return a congruence of (2e-1)-secant curves of degree e inside the unique del Pezzo fivefold containing the GM fourfold."},
++-EXAMPLE{"-- A general GM fourfold of discriminant 20"|newline|"X = specialGushelMukaiFourfold(\"surface of degree 9 and genus 2\",ZZ/33331);", "describe X", "time f = detectCongruence X;", "Y = source map X; -- del Pezzo fivefold containing X", "p = point Y -- random point on Y", "time C = f p -- 3-secant conic to the surface", "S = sub(first ideals X,Y);", "assert(dim C -1 == 1 and degree C == 2 and dim(C+S)-1 == 0 and degree(C+S) == 3 and isSubset(C, p))"},
+++EXAMPLE{PRE(///i7 : -- A general GM fourfold of discriminant 20
+++ X = specialGushelMukaiFourfold("surface of degree 9 and genus 2",ZZ/33331);
+++/// | ///
+++o7 : SpecialGushelMukaiFourfold (Gushel-Mukai fourfold containing a surface of degree 9 and sectional genus 2)
+++/// | ///
+++i8 : describe X
+++/// | ///
+++o8 = Special Gushel-Mukai fourfold of discriminant 20
+++ containing a surface in PP^8 of degree 9 and sectional genus 2
+++ cut out by 19 hypersurfaces of degree 2
+++ and with class in G(1,4) given by 6*s_(3,1)+3*s_(2,2)
+++ Type: ordinary
+++ (case 17 of Table 1 in arXiv:2002.07026)
+++/// | ///
+++i9 : time f = detectCongruence X;
+++S: surface of degree 9 and sectional genus 2 in PP^8 cut out by 19 hypersurfaces of degree 2
+++phi: quadratic rational map from 5-dimensional subvariety of PP^8 to PP^13
+++Z=phi(del Pezzo fivefold)
+++number lines containing in Z and passing through the point phi(p): 7
+++number 1-secant lines to S passing through p: 6
+++number 3-secant conics to S passing through p: 1
+++ -- used 19.3376 seconds
+++/// | ///
+++i10 : Y = source map X; -- del Pezzo fivefold containing X
+++/// | ///
+++i11 : p = point Y -- random point on Y
+++/// | ///
+++o11 = ideal (t + 14118t , t + 3234t , t - 16296t , t - 5674t , t -
+++ 7 8 6 8 5 8 4 8 3
+++ -----------------------------------------------------------------------
+++ 12127t , t - 1329t , t + 3304t , t + 779t )
+++ 8 2 8 1 8 0 8
+++/// | ///
+++o11 : Ideal of Y
+++/// | ///
+++i12 : time C = f p -- 3-secant conic to the surface
+++ -- used 0.347885 seconds
+++/// | ///
+++o12 = ideal (t - 1000t + 8254t - 12393t , t + 10116t + 7449t - 15895t ,
+++ 5 6 7 8 4 6 7 8
+++ -----------------------------------------------------------------------
+++ t + 10858t + 13401t + 13664t , t - 11215t + 13587t - 5150t , t -
+++ 3 6 7 8 2 6 7 8 1
+++ -----------------------------------------------------------------------
+++ 1898t + 4900t + 14451t , t - 7830t + 1802t - 14129t )
+++ 6 7 8 0 6 7 8
+++/// | ///
+++o12 : Ideal of Y
+++/// | ///
+++i13 : S = sub(first ideals X,Y);
+++/// | ///
+++o13 : Ideal of Y
+++/// | ///
+++i14 : assert(dim C -1 == 1 and degree C == 2 and dim(C+S)-1 == 0 and degree(C+S) == 3 and isSubset(C, p))
+++///)},
++ SeeAlso => {coneOfLines}}
++
++ document {Key => {SpecialCubicFourfold},
++--- a/M2/Macaulay2/packages/ThreadedGB.m2
+++++ b/M2/Macaulay2/packages/ThreadedGB.m2
++@@ -349,10 +349,46 @@
++ The interesting part of the output may be the actual lineages of the basis polynomials,
++ in addition to the Groebner basis itself.
++ Here is a verbose example when the Groebner basis is trivial.
++- Example
++- QQ[a..d]
++- I=ideal( -c^3+a^2+b*d, a*b*c-1,a*b*c)
++- T = tgb(I,2,Verbose=>true)
+++ CannedExample
+++ i10 : QQ[a..d]
+++
+++ o10 = QQ[a, b, c, d]
+++
+++ o10 : PolynomialRing
+++
+++ i11 : I=ideal( -c^3+a^2+b*d, a*b*c-1,a*b*c)
+++
+++ 3 2
+++ o11 = ideal (- c + a + b*d, a*b*c - 1, a*b*c)
+++
+++ o11 : Ideal of QQ[a, b, c, d]
+++
+++ i12 : T = tgb(I,2,Verbose=>true)
+++ You turned on Verbose! You will be notified of each new S-polynomial task created and each new GB element added to the HashTable as we go.
+++ Scheduling a task for lineage (0-1)
+++ Scheduling a task for lineage (0-2)
+++ Scheduling a task for lineage (1-2)
+++ Scheduling task for lineage ((0-1)-0)
+++ Scheduling task for lineage ((0-1)-1)
+++ Scheduling task for lineage ((0-1)-2)
+++ Adding the following remainder to GB: -1 from lineage (1-2)
+++ Adding the following remainder to GB: -a^3*b-a*b^2*d+c^2 from lineage (0-1)
+++ Scheduling task for lineage ((0-2)-0)
+++ Scheduling task for lineage ((0-2)-1)
+++ Scheduling task for lineage ((0-2)-2)
+++ Scheduling task for lineage ((0-2)-(1-2))
+++ Scheduling task for lineage ((0-2)-(0-1))
+++ Adding the following remainder to GB: -a^3*b-a*b^2*d from lineage (0-2)
+++ Found 1 or -1 in the Groebner basis; reducing now.
+++
+++ o12 = HashTable{(0-1) => null}
+++ (0-2) => null
+++ (1-2) => 1
+++ 0 => null
+++ 1 => null
+++ 2 => null
+++
+++ o12 : HashTable
++ Text
++ In particular, the lineages of null values tell us what S-polynomials didn't reduce to zero until $1$ was found as
++ a remainder.
++--- a/M2/Macaulay2/packages/Topcom.m2
+++++ b/M2/Macaulay2/packages/Topcom.m2
++@@ -350,11 +350,27 @@
++ triangulation. Notice that {\tt tri} is a triangulation of the
++ polytope which is the convex hull of the columns of $A$, which are
++ the only points allowed in the triangulation.
++- Example
++- A = transpose matrix {{0,3},{0,1},{-1,-1},{1,-1},{-4,-2},{4,-2}}
++- tri = {{0,1,2}, {1,3,5}, {2,3,4}, {0,1,5},
++- {0,2,4}, {3,4,5}, {1,2,3}}
++- isRegularTriangulation(A,tri)
+++ CannedExample
+++ i1 : A = transpose matrix {{0,3},{0,1},{-1,-1},{1,-1},{-4,-2},{4,-2}}
+++
+++ o1 = | 0 0 -1 1 -4 4 |
+++ | 3 1 -1 -1 -2 -2 |
+++
+++ 2 6
+++ o1 : Matrix ZZ <--- ZZ
+++
+++ i2 : tri = {{0,1,2}, {1,3,5}, {2,3,4}, {0,1,5},
+++ {0,2,4}, {3,4,5}, {1,2,3}}
+++
+++ o2 = {{0, 1, 2}, {1, 3, 5}, {2, 3, 4}, {0, 1, 5}, {0, 2, 4}, {3, 4, 5}, {1,
+++ ------------------------------------------------------------------------
+++ 2, 3}}
+++
+++ o2 : List
+++
+++ i3 : isRegularTriangulation(A,tri)
+++
+++ o3 = false
++ Text
++ Setting debugLevel to either 1,2, or 5 will give more detail about
++ what files are written to Topcom, and what the executable is.
++--- a/M2/Macaulay2/packages/TateOnProducts.m2
+++++ b/M2/Macaulay2/packages/TateOnProducts.m2
++@@ -5947,22 +5947,44 @@
++ huge rank and presentation matrices. In particular, the method directImageComplex becomes slow down.
++
++ The following is an example of direct images of the structure sheaf on a twisted cubic.
++- Example
++- kk=ZZ/101; d=6;
++- needsPackage "Resultants";
++- vd=veronese(1,d,kk);
++- R=target vd; S=source vd;
++-
++- M=R^{1:-1}; I=ann M; J=ker vd;
++-
++- RM=time directImageComplex(I,M,matrix vd);
++-
++- for i from min RM to max RM list (rank RM_i)
+++ CannedExample
+++ i1 : kk=ZZ/101; d=6;
+++
+++ i3 : needsPackage "Resultants";
+++
+++ i4 : vd=veronese(1,d,kk);
+++
+++ o4 : RingMap kk[t ..t ] <--- kk[x ..x ]
+++ 0 1 0 6
+++
+++ i5 : R=target vd; S=source vd;
+++
+++ i7 : M=R^{1:-1}; I=ann M; J=ker vd;
+++
+++ o8 : Ideal of R
+++
+++ o9 : Ideal of S
+++
+++ i10 : RM=time directImageComplex(I,M,matrix vd);
+++ -- used 46.0364 seconds
+++
+++ i11 : for i from min RM to max RM list (rank RM_i)
+++
+++ o11 = {36, 180, 360, 360, 180, 36}
+++
+++ o11 : List
++ Text
++ RM looks complicated since it is consisted of universal bundles on P^6, which are of high rank.
++- Example
++- retTable=time actionOnDirectImage(I,M,matrix vd);
++- keys retTable
+++ CannedExample
+++ i12 : retTable=time actionOnDirectImage(I,M,matrix vd);
+++ We take a finite projection from P^n to P^d as {x , x } -- used 47.1632 seconds
+++ 0,0 0,6
+++
+++ i13 : keys retTable
+++
+++ o13 = {0}
+++
+++ o13 : List
++ Text
++ We see that 0 is the only key, in other words, there is no other R^i vd_{*} except i=0.
++ To see whether it gives an action on S/J, we can use the test function isAction.
++@@ -5970,95 +5992,292 @@
++ Note that list retTable#i is consisted of maps of chain complexes R^i(\pi \cdot phi)_{*}(y_j) : C\to C(1) where
++ C represents the direct image R^i(\pi \cdot phi)_{*}F. In general, it does not give a right action on C itself.
++ The induced maps on cohomology groups provide a right action.
++- Example
++- isAction(J, apply(dim S, i->prune HH^0 retTable#0#i))
+++ CannedExample
+++ i14 : isAction(J, apply(dim S, i->prune HH^0 retTable#0#i))
+++
+++ o14 = true
++ Text
++ The following is a little more complicated example with nontrivial higher direct images.
++ Let X be the product of two quartic curves C, and f : X \to C be the second projection.
++ Let P, Q be two distinct points of C, and let L = O(P\times C + Q\times C + D) be a line bundle
++ on X where D is the diagonal. We want to compute the higher direct images R^i f_{*}L.
++ We choose C as the Fermat quartic, and choose P, Q as points on the intersection of C and the line V(x_2).
++- Example
++- kk=ZZ/1009;
++- (S,E)=productOfProjectiveSpaces({2,2},CoefficientField=>kk);
++- f1=S_0^4+S_1^4+S_2^4; f2=S_3^4+S_4^4+S_5^4;
++- IX=ideal (f1,f2);
++- -- 2 points on C. Note that the line passing through P and Q is V(x_2).
++- P=matrix{{1,192,0}}; Q=matrix{{192,1,0}};
++- varX=matrix{{S_0,S_1,S_2}}; varY=matrix{{S_3,S_4,S_5}};
++- PX=P||varX; QX=Q||varX;
++-
++- I1=ideal(f2, minors(2,PX)); -- ideal for P*C
++- I2=ideal(f2, minors(2,QX)); -- ideal for Q*C
++- I3=ideal(f1,f2, minors(2, varX||varY)); -- ideal for the diagonal D
++- I=intersect(I1,I2,I3); -- ideal for P*C+Q*C+D
++- SX=S/IX; Ldual=I/IX;
++-
++- betti (LX=Hom(Ldual, SX^1))
+++ CannedExample
+++ i15 : kk=ZZ/1009;
+++
+++ i16 : (S,E)=productOfProjectiveSpaces({2,2},CoefficientField=>kk);
+++
+++ i17 : f1=S_0^4+S_1^4+S_2^4; f2=S_3^4+S_4^4+S_5^4;
+++
+++ i19 : IX=ideal (f1,f2);
+++
+++ o19 : Ideal of S
+++
+++ i20 : P=matrix{{1,192,0}}; Q=matrix{{192,1,0}};
+++
+++ 1 3
+++ o20 : Matrix ZZ <--- ZZ
+++
+++ 1 3
+++ o21 : Matrix ZZ <--- ZZ
+++
+++ i22 : varX=matrix{{S_0,S_1,S_2}}; varY=matrix{{S_3,S_4,S_5}};
+++
+++ 1 3
+++ o22 : Matrix S <--- S
+++
+++ 1 3
+++ o23 : Matrix S <--- S
+++
+++ i24 : PX=P||varX; QX=Q||varX;
+++
+++ 2 3
+++ o24 : Matrix S <--- S
+++
+++ 2 3
+++ o25 : Matrix S <--- S
+++
+++ i26 : I1=ideal(f2, minors(2,PX)); -- ideal for P*C
+++
+++ o26 : Ideal of S
+++
+++ i27 : I2=ideal(f2, minors(2,QX)); -- ideal for Q*C
+++
+++ o27 : Ideal of S
+++
+++ i28 : I3=ideal(f1,f2, minors(2, varX||varY)); -- ideal for the diagonal D
+++
+++ o28 : Ideal of S
+++
+++ i29 : I=intersect(I1,I2,I3); -- ideal for P*C+Q*C+D
+++
+++ o29 : Ideal of S
+++
+++ i30 : SX=S/IX; Ldual=I/IX;
+++
+++ i32 : betti (LX=Hom(Ldual, SX^1))
+++
+++ 0 1
+++ o32 = total: 10 26
+++ 0: 1 .
+++ 1: 1 1
+++ 2: . 1
+++ 3: 8 24
+++
+++ o32 : BettiTally
++ Text
++ To compute its Tate resolution on the ambient space P^2 \times P^2, we first consider it as a sheaf on P^2 \times P^2,
++ and then take a linear presentation matrix via a truncation.
++- Example
++- phi = map(SX,S,vars SX);
++- betti (L=prune pushForward(phi,LX))
++- Ltr = (truncate ({2,2},L))**S^{{2,2}};
++- betti res Ltr
+++ CannedExample
+++ i33 : phi = map(SX,S,vars SX);
+++
+++ o33 : RingMap SX <--- S
+++
+++ i34 : betti (L=prune pushForward(phi,LX))
+++
+++ 0 1
+++ o34 = total: 10 27
+++ 0: 1 .
+++ 1: 1 1
+++ 2: . 1
+++ 3: 8 25
+++
+++ o34 : BettiTally
+++
+++ i35 : Ltr = (truncate ({2,2},L))**S^{{2,2}};
+++
+++ i36 : betti res Ltr
+++
+++ 0 1 2 3 4
+++ o36 = total: 60 176 184 80 12
+++ 0: 60 176 184 80 12
+++
+++ o36 : BettiTally
++ Text
++ We read off (a finite subquotient of) the Tate resolution of Rf_{*}L as follows.
++- Example
++- Q=symExt(presentation Ltr, E);
++- T=(res (coker Q,LengthLimit=>12))**E^{{2,2}}[4];
++- cohomologyMatrix (T, -{5,5},{3,3})
++- sT=strand(T,{0,0},{0});
++-
++- sTFull=new ChainComplex;
++- sTFull.ring = ring sT;
++- ma=6;
++- sTFull=(dual res (coker transpose (sT[ma]).dd_0, LengthLimit=>2*ma))[-ma];
++- (S',E')=productOfProjectiveSpaces({2},CoefficientField=>kk);
++- projOnE=map(E', E, toList(3:0)|(gens E'));
++- mi=min sTFull; ma=max sTFull;
++- W=new ChainComplex; W.ring = E';
++- apply(toList(mi..ma),i-> W_i = E'^(-apply(degrees sTFull_i,d->d_{1})));
++- apply(toList(mi+1..ma),i->W.dd_i = map(W_(i-1),W_i,projOnE sTFull.dd_i));
++- betti W
+++ CannedExample
+++ i37 : Q=symExt(presentation Ltr, E);
+++
+++ 184 60
+++ o37 : Matrix E <--- E
+++
+++ i38 : T=(res (coker Q,LengthLimit=>12))**E^{{2,2}}[4];
+++
+++ i39 : cohomologyMatrix (T, -{5,5},{3,3})
+++
+++ o39 = | 0 0 0 0 0 0 0 96k 0 |
+++ | 0 0 0 0 0 0 0 60k 88k |
+++ | 60h 48h 36h 24h 12h 3h+3 12 0 0 |
+++ | 36h2+20h 28h2+16h 20h2+12h 12h2+8h 4h2+4h 5h+1 12h+4 0 0 |
+++ | 92h2 72h2 52h2 32h2 12h2 8h 28h 0 0 |
+++ | 168h2 132h2 96h2 60h2 24h2 12h 48h 0 0 |
+++ | 244h2 192h2 140h2 88h2 36h2 16h 68h 0 0 |
+++ | 320h2 252h2 184h2 116h2 48h2 20h 88h 0 0 |
+++ | 396h2 312h2 228h2 144h2 60h2 24h 108h 0 0 |
+++
+++ 9 9
+++ o39 : Matrix (ZZ[h, k]) <--- (ZZ[h, k])
+++
+++ i40 : sT=strand(T,{0,0},{0});
+++
+++ i41 : sTFull=new ChainComplex;
+++
+++ i42 : sTFull.ring = ring sT;
+++
+++ i43 : ma=6;
+++
+++ i44 : sTFull=(dual res (coker transpose (sT[ma]).dd_0, LengthLimit=>2*ma))[-ma];
+++
+++ i45 : (S',E')=productOfProjectiveSpaces({2},CoefficientField=>kk);
+++
+++ i46 : projOnE=map(E', E, toList(3:0)|(gens E'));
+++
+++ o46 : RingMap E' <--- E
+++
+++ i47 : mi=min sTFull; ma=max sTFull;
+++
+++ i49 : W=new ChainComplex; W.ring = E';
+++
+++ i51 : apply(toList(mi..ma),i-> W_i = E'^(-apply(degrees sTFull_i,d->d_{1})));
+++
+++ i52 : apply(toList(mi+1..ma),i->W.dd_i = map(W_(i-1),W_i,projOnE sTFull.dd_i));
+++
+++ i53 : betti W
+++
+++ -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
+++ o53 = total: 24 20 16 12 9 8 9 12 16 20 24 28 32
+++ 0: 22 18 14 10 6 3 1 . . . . . .
+++ 1: 2 2 2 2 3 5 8 12 16 20 24 28 32
+++
+++ o53 : BettiTally
++ Text
++ One can check that W has two strands (corresponding to R^0f_{*}L and R^1f_{*}L, respectively).
++ By taking the Beilinson functor, one can check that R^0f_{*}L is the structure sheaf on C,
++ and R^1f_{*}L is a torsion sheaf supported on two points lying on the intersection of C and
++ the line V(x_2) other than P, Q.
++- Example
++- R0fL = prune HH^0 beilinson W
++- R1fL = prune HH^1 beilinson W
++-
++- degree R0fL
++- primaryDecomposition ann R0fL
++-
++- degree R1fL
++- primaryDecomposition ann R1fL
+++ CannedExample
+++ i54 : R0fL = prune HH^0 beilinson W
+++
+++ o54 = cokernel | x_(0,0)^4+x_(0,1)^4+x_(0,2)^4 |
+++
+++ 1
+++ o54 : S'-module, quotient of S'
+++
+++ i55 : R1fL = prune HH^1 beilinson W
+++
+++ o55 = cokernel | -131x_(0,2) 0 0 0 x_(0,0) x_(0,1) 0 0 -131x_(0,2) 0 -131x_(0,2) 0 |
+++ | x_(0,2) x_(0,1) x_(0,0) 0 0 0 0 0 0 0 0 0 |
+++ | 0 0 0 x_(0,2) -x_(0,1) x_(0,0)+439x_(0,1) 0 0 0 0 0 0 |
+++ | 0 0 0 0 0 0 x_(0,2) x_(0,1) x_(0,0) 0 0 0 |
+++ | 0 0 0 0 0 0 0 0 0 x_(0,2) x_(0,1) x_(0,0) |
+++
+++ 5
+++ o55 : S'-module, quotient of S'
+++
+++ i56 : degree R0fL
+++
+++ o56 = 4
+++
+++ i57 : primaryDecomposition ann R0fL
+++
+++ 4 4 4
+++ o57 = {ideal(x + x + x )}
+++ 0,0 0,1 0,2
+++
+++ o57 : List
+++
+++ i58 : degree R1fL
+++
+++ o58 = 2
+++
+++ i59 : primaryDecomposition ann R1fL
+++
+++ 2
+++ o59 = {ideal (x , x + 247x ), ideal (x , x + 192x ), ideal (x , x , x )}
+++ 0,2 0,0 0,1 0,2 0,0 0,1 0,1 0,0 0,2
+++
+++ o59 : List
++ Text
++ These module also can be seen as in the following way via a finite linear projection.
++ We take a further projection \pi:C\to P^1, and check whether these modules induce an action
++ on the direct image under \pi, in other words, provide {O_C}-module structures. As results,
++ these actions make (the sheafification of) M0 and M1 into {O_C}-modules which are identical to
++ R^0f_{*}L and R^1f_{*}L.
++- Example
++- J=ideal (S'_0^4+S'_1^4+S'_2^4);
++- retTable=actionOnDirectImage(J,W);
++- keys retTable
+++ CannedExample
+++ i60 : J=ideal (S'_0^4+S'_1^4+S'_2^4);
+++
+++ o60 : Ideal of S'
+++
+++ i61 : retTable=actionOnDirectImage(J,W);
+++ We take a finite projection from P^n to P^d as {x , x }
+++ 0,1 0,2
+++ i62 : keys retTable
+++
+++ o62 = {0, 1}
+++
+++ o62 : List
++ Text
++ We see that 0, 1 appear as keys, in other words, both R^0f_{*}L and R^1f_{*}L survives.
++- Example
++- prunedActionList = i->apply(dim S',j->prune HH^i retTable#i#j);
++- apply(keys retTable, i->isAction(J,prunedActionList(i)))
++-
++- M0=source (prunedActionList(0))_0
++- (rank M0, degree M0, betti res M0)
++- isIsomorphic(truncate(regularity M0, M0), truncate(regularity M0, dual dual M0))
++- dual dual M0
+++ CannedExample
+++ i63 : prunedActionList = i->apply(dim S',j->prune HH^i retTable#i#j);
+++
+++ i64 : apply(keys retTable, i->isAction(J,prunedActionList(i)))
+++
+++ o64 = {true, true}
+++
+++ o64 : List
+++
+++ i65 : M0=source (prunedActionList(0))_0
+++
+++ o65 = cokernel {2} | 0 -x_(0,1) 0 |
+++ {2} | x_(0,0) 0 0 |
+++ {2} | -x_(0,1) x_(0,0) 0 |
+++ {2} | 0 0 0 |
+++ {2} | 0 0 x_(0,0) |
+++ {2} | 0 0 -x_(0,1) |
+++ {3} | 0 0 0 |
+++ 7
+++ o65 : kk[x ..x ]-module, quotient of (kk[x ..x ])
+++ 0,0 0,1 0,0 0,1
+++
+++ i66 : (rank M0, degree M0, betti res M0)
+++
+++ 0 1
+++ o66 = (4, 4, total: 7 3)
+++ 2: 6 3
+++ 3: 1 .
+++
+++ o66 : Sequence
+++
+++ i67 : isIsomorphic(truncate(regularity M0, M0), truncate(regularity M0, dual dual M0))
+++
+++ o67 = true
+++
+++ i68 : dual dual M0
+++
+++ 4
+++ o68 = (kk[x ..x ])
+++ 0,0 0,1
+++
+++ o68 : kk[x ..x ]-module, free, degrees {3, 2, 1, 0}
+++ 0,0 0,1
+++
+++ i69 : M1=source (prunedActionList(1))_0
+++
+++ o69 = cokernel {2} | x_(0,1) 0 |
+++ {2} | 0 x_(0,1) |
+++
+++ 2
+++ o69 : kk[x ..x ]-module, quotient of (kk[x ..x ])
+++ 0,0 0,1 0,0 0,1
+++
+++ i70 : (rank M1, degree M1, betti res M1)
+++
+++ 0 1
+++ o70 = (0, 2, total: 2 2)
+++ 2: 2 2
++
++- M1=source (prunedActionList(1))_0
++- (rank M1, degree M1, betti res M1)
+++ o70 : Sequence
++ Text
++ Note that the sheafification of M0 (=R^0(\pi \cdot f)_{*}L) is a rank 4 vector bundle O \oplus O(-1) \oplus O(-2) \oplus O(-3) on P^1,
++ and the sheafification of M1 (= R^1(\pi \cdot f)_{*} L) is a torsion sheaf on P^1 supported on the double point at [1:0].
++--- a/M2/Macaulay2/packages/NoetherianOperators.m2
+++++ b/M2/Macaulay2/packages/NoetherianOperators.m2
++@@ -3158,25 +3158,114 @@
++ Next, we provide several examples to show the interplay between computing a set of Noetherian operators and then getting the back the original ideal.
++
++ The first example shows an ideal that can be described with two different sets of Noetherian operators (this example appeared in Example 7.8 of @ HREF("https://arxiv.org/abs/2001.04700", "Primary ideals and their differential equations")@).
++- Example
++- R = QQ[x_1,x_2,x_3,x_4]
++- MM = matrix {{x_3,x_1,x_2},{x_1,x_2,x_4}}
++- P = minors(2,MM)
++- M = ideal{x_1^2,x_2^2,x_3^2,x_4^2}
++- Q = joinIdeals(P,M);
++- L1 = noetherianOperators(Q) -- A set of Noetherian operators
++- Q1 = getIdealFromNoetherianOperators(L1, P);
++- Q == Q1
++- L2 = noetherianOperators(M) -- Another set of Noetherian operators
++- Q2 = getIdealFromNoetherianOperators(L2, P);
++- Q == Q2
+++ CannedExample
+++ i1 : R = QQ[x_1,x_2,x_3,x_4]
+++
+++ o1 = R
+++
+++ o1 : PolynomialRing
+++
+++ i2 : MM = matrix {{x_3,x_1,x_2},{x_1,x_2,x_4}}
+++
+++ o2 = | x_3 x_1 x_2 |
+++ | x_1 x_2 x_4 |
+++
+++ 2 3
+++ o2 : Matrix R <--- R
+++
+++ i3 : P = minors(2,MM)
+++
+++ 2 2
+++ o3 = ideal (- x + x x , - x x + x x , - x + x x )
+++ 1 2 3 1 2 3 4 2 1 4
+++
+++ o3 : Ideal of R
+++
+++ i4 : M = ideal{x_1^2,x_2^2,x_3^2,x_4^2}
+++
+++ 2 2 2 2
+++ o4 = ideal (x , x , x , x )
+++ 1 2 3 4
+++
+++ o4 : Ideal of R
+++
+++ i5 : Q = joinIdeals(P,M);
+++
+++ o5 : Ideal of R
+++
+++ i6 : L1 = noetherianOperators(Q) -- A set of Noetherian operators
+++
+++ 2 2 3 2 2 3 3 2 2
+++ o6 = {1, dx_2, dx_1, dx_2 , dx_1*dx_2, dx_1 , dx_2 , dx_1*dx_2 , dx_1 dx_2, dx_1 , 72x x dx_1 dx_2 + 180x x dx_1 dx_2 +
+++ 1 3 2 3
+++ ----------------------------------------------------------------------------------------------------------------------------
+++ 3
+++ 72x x dx_1*dx_2 }
+++ 3 4
+++
+++ o6 : List
+++
+++ i7 : Q1 = getIdealFromNoetherianOperators(L1, P);
+++
+++ o7 : Ideal of R
+++
+++ i8 : Q == Q1
+++
+++ o8 = true
+++
+++ i9 : L2 = noetherianOperators(M) -- Another set of Noetherian operators
+++
+++ o9 = {1, dx_4, dx_3, dx_2, dx_1, dx_3*dx_4, dx_2*dx_4, dx_1*dx_4, dx_2*dx_3, dx_1*dx_3, dx_1*dx_2, dx_2*dx_3*dx_4,
+++ ----------------------------------------------------------------------------------------------------------------------------
+++ dx_1*dx_3*dx_4, dx_1*dx_2*dx_4, dx_1*dx_2*dx_3, dx_1*dx_2*dx_3*dx_4}
+++
+++ o9 : List
+++
+++ i10 : Q2 = getIdealFromNoetherianOperators(L2, P);
+++
+++ o10 : Ideal of R
+++
+++ i11 : Q == Q2
+++
+++ o11 = true
++ Text
++ The following example was given as the running example in the Introduction of @ HREF("https://arxiv.org/abs/2001.04700", "Primary ideals and their differential equations")@.
++- Example
++- Q = ideal(3*x_1^2*x_2^2-x_2^3*x_3-x_1^3*x_4-3*x_1*x_2*x_3*x_4+2*x_3^2*x_4^2,3*x_1^3*x_2*x_4-3*x_1*x_2^2*x_3*x_4-3*x_1^2*x_3*x_4^2+3*x_2*x_3^2*x_4^2+2*x_2^3-2*x_3*x_4^2,3*x_2^4*x_3-6*x_1*x_2^2*x_3*x_4+3*x_1^2*x_3*x_4^2+x_2^3-x_3*x_4^2,4*x_1*x_2^3*x_3+x_1^4*x_4-6*x_1^2*x_2*x_3*x_4-3*x_2^2*x_3^2*x_4+4*x_1*x_3^2*x_4^2,x_2^5-x_1*x_2^3*x_4-x_2^2*x_3*x_4^2+x_1*x_3*x_4^3,x_1*x_2^4-x_2^3*x_3*x_4-x_1*x_2*x_3*x_4^2+x_3^2*x_4^3,x_1^4*x_2-x_2^3*x_3^2-2*x_1^3*x_3*x_4+2*x_1*x_2*x_3^2*x_4,x_1^5-4*x_1^3*x_2*x_3+3*x_1*x_2^2*x_3^2+2*x_1^2*x_3^2*x_4-2*x_2*x_3^3*x_4,3*x_1^4*x_3*x_4-6*x_1^2*x_2*x_3^2*x_4+3*x_2^2*x_3^3*x_4+2*x_1^3*x_2+6*x_1*x_2^2*x_3-6*x_1^2*x_3*x_4-2*x_2*x_3^2*x_4,4*x_2^3*x_3^3+4*x_1^3*x_3^2*x_4-12*x_1*x_2*x_3^3*x_4+4*x_3^4*x_4^2-x_1^4+6*x_1^2*x_2*x_3+3*x_2^2*x_3^2-8*x_1*x_3^2*x_4)
++- L = noetherianOperators(Q)
++- Q' = getIdealFromNoetherianOperators(L, P);
++- Q == Q'
+++ CannedExample
+++ i12 : Q = ideal(3*x_1^2*x_2^2-x_2^3*x_3-x_1^3*x_4-3*x_1*x_2*x_3*x_4+2*x_3^2*x_4^2,3*x_1^3*x_2*x_4-3*x_1*x_2^2*x_3*x_4-3*x_1^2*x_3*x_4^2+3*x_2*x_3^2*x_4^2+2*x_2^3-2*x_3*x_4^2,3*x_2^4*x_3-6*x_1*x_2^2*x_3*x_4+3*x_1^2*x_3*x_4^2+x_2^3-x_3*x_4^2,4*x_1*x_2^3*x_3+x_1^4*x_4-6*x_1^2*x_2*x_3*x_4-3*x_2^2*x_3^2*x_4+4*x_1*x_3^2*x_4^2,x_2^5-x_1*x_2^3*x_4-x_2^2*x_3*x_4^2+x_1*x_3*x_4^3,x_1*x_2^4-x_2^3*x_3*x_4-x_1*x_2*x_3*x_4^2+x_3^2*x_4^3,x_1^4*x_2-x_2^3*x_3^2-2*x_1^3*x_3*x_4+2*x_1*x_2*x_3^2*x_4,x_1^5-4*x_1^3*x_2*x_3+3*x_1*x_2^2*x_3^2+2*x_1^2*x_3^2*x_4-2*x_2*x_3^3*x_4,3*x_1^4*x_3*x_4-6*x_1^2*x_2*x_3^2*x_4+3*x_2^2*x_3^3*x_4+2*x_1^3*x_2+6*x_1*x_2^2*x_3-6*x_1^2*x_3*x_4-2*x_2*x_3^2*x_4,4*x_2^3*x_3^3+4*x_1^3*x_3^2*x_4-12*x_1*x_2*x_3^3*x_4+4*x_3^4*x_4^2-x_1^4+6*x_1^2*x_2*x_3+3*x_2^2*x_3^2-8*x_1*x_3^2*x_4)
+++
+++ 2 2 3 3 2 2 3 2 2 2 2 2 3 2 4 2
+++ o12 = ideal (3x x - x x - x x - 3x x x x + 2x x , 3x x x - 3x x x x - 3x x x + 3x x x + 2x - 2x x , 3x x - 6x x x x +
+++ 1 2 2 3 1 4 1 2 3 4 3 4 1 2 4 1 2 3 4 1 3 4 2 3 4 2 3 4 2 3 1 2 3 4
+++ ---------------------------------------------------------------------------------------------------------------------------
+++ 2 2 3 2 3 4 2 2 2 2 2 5 3 2 2 3 4 3
+++ 3x x x + x - x x , 4x x x + x x - 6x x x x - 3x x x + 4x x x , x - x x x - x x x + x x x , x x - x x x -
+++ 1 3 4 2 3 4 1 2 3 1 4 1 2 3 4 2 3 4 1 3 4 2 1 2 4 2 3 4 1 3 4 1 2 2 3 4
+++ ---------------------------------------------------------------------------------------------------------------------------
+++ 2 2 3 4 3 2 3 2 5 3 2 2 2 2 3 4 2 2
+++ x x x x + x x , x x - x x - 2x x x + 2x x x x , x - 4x x x + 3x x x + 2x x x - 2x x x , 3x x x - 6x x x x +
+++ 1 2 3 4 3 4 1 2 2 3 1 3 4 1 2 3 4 1 1 2 3 1 2 3 1 3 4 2 3 4 1 3 4 1 2 3 4
+++ ---------------------------------------------------------------------------------------------------------------------------
+++ 2 3 3 2 2 2 3 3 3 2 3 4 2 4 2 2 2 2
+++ 3x x x + 2x x + 6x x x - 6x x x - 2x x x , 4x x + 4x x x - 12x x x x + 4x x - x + 6x x x + 3x x - 8x x x )
+++ 2 3 4 1 2 1 2 3 1 3 4 2 3 4 2 3 1 3 4 1 2 3 4 3 4 1 1 2 3 2 3 1 3 4
+++
+++ o12 : Ideal of R
+++
+++ i13 : L = noetherianOperators(Q)
+++
+++ 2
+++ o13 = {1, dx_1, dx_1 - 2x dx_2}
+++ 2
+++
+++ o13 : List
+++
+++ i14 : Q' = getIdealFromNoetherianOperators(L, P);
+++
+++ o14 : Ideal of R
+++
+++ i15 : Q == Q'
+++
+++ o15 = true
++ Text
++ The next example was given by Palamodov to show that there exists primary ideals that cannot be described by using differential operators with constant coefficients.
++ Example
++--- a/M2/Macaulay2/packages/TestIdeals/compatiblySplitDoc.m2
+++++ b/M2/Macaulay2/packages/TestIdeals/compatiblySplitDoc.m2
++@@ -42,16 +42,47 @@
++ Then $uT$ is a Frobenius map on $E$, and the primes $P$ computed by this function are precisely those for which $uT$ restricts to a nonzero Frobenius map of the annihilator of $P$ on $E$.
++
++ The following is a simple example, which is split with the coordinate axes in $\mathbb{A}^2$.
++- Example
++- R = ZZ/3[s,t];
++- u = s^2*t^2;
++- compatibleIdeals u
+++ CannedExample
+++ i1 : R = ZZ/3[s,t];
+++
+++ i2 : u = s^2*t^2;
+++
+++ i3 : compatibleIdeals u
+++
+++ o3 = {ideal s, ideal (t, s), ideal t}
+++
+++ o3 : List
++ Text
++ Here is a more substantial example.
++- Example
++- R = ZZ/2[a,b,c,d,e,f];
++- u = d*(b*e - d*c)*(d - a*e - b*f + a*c*f);
++- print \ compatibleIdeals u;
+++ CannedExample
+++ i4 : R = ZZ/2[a,b,c,d,e,f];
+++
+++ i5 : u = d*(b*e - d*c)*(d - a*e - b*f + a*c*f);
+++
+++ i6 : print \ compatibleIdeals u;
+++ ideal d
+++ ideal (e, d)
+++ ideal (f, e, d)
+++ ideal (f, e, d, b)
+++ ideal (f, e, d, b, a)
+++ ideal (f, e, d, c, b, a)
+++ ideal (f, e, d, c, b)
+++ ideal (f, e, d, a*c + b)
+++ ideal (d, b, a)
+++ ideal (e, d, b, a)
+++ ideal (e, d, c, b, a)
+++ ideal (d, b, a, c*f + e)
+++ ideal (e, d, b)
+++ ideal (e, d, c, b)
+++ ideal (e, d, a*c + b)
+++ ideal (d, b)
+++ ideal (d, b, c*f + e)
+++ ideal (d, a*c*f + a*e + b*f)
+++ ideal (a*e + d, c*d + b*e, a*c + b)
+++ ideal (c*f + e, b*f + d, a*e + d, c*d + b*e, a*c + b)
+++ ideal(c*d + b*e)
+++ ideal (c*f + e, b*f + d, c*d + b*e)
+++ ideal(a*c*f + a*e + b*f + d)
++ Text
++ The option {\tt FrobeniusRootStrategy} is passed to internal @TO frobeniusRoot@ calls.
++ ///
--- /dev/null
--- /dev/null
++Description: Use applications provided by Debian packages.
++ In particular:
++ * gfanInterface - fig2dev
++ * Posets - xdg-open for default pdf viewer
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Forwarded: not-needed
++Last-Update: 2021-01-01
++
++--- a/M2/Macaulay2/packages/gfanInterface.m2
+++++ b/M2/Macaulay2/packages/gfanInterface.m2
++@@ -15,7 +15,7 @@
++ Keywords => {"Interfaces"},
++ Configuration => {
++ "path" => "",
++- "fig2devpath" => "",
+++ "fig2devpath" => "/usr/bin/",
++ "keepfiles" => true,
++ "verbose" => false,
++ "cachePolyhedralOutput" => true
++--- a/M2/Macaulay2/packages/Posets.m2
+++++ b/M2/Macaulay2/packages/Posets.m2
++@@ -21,7 +21,7 @@
++ Headline => "partially ordered sets (posets)",
++ Keywords => {"Combinatorics"},
++ Configuration => {
++- "DefaultPDFViewer" => "open", -- "open" for Macs and "evince" for Linux
+++ "DefaultPDFViewer" => "xdg-open", -- "open" for Macs and "evince" for Linux
++ "DefaultPrecompute" => true,
++ "DefaultSuppressLabels" => true
++ },
--- /dev/null
--- /dev/null
++Description: Modifications to work with dh_elpa.
++ * Strip down setupEmacs() function. We only set f12 as a global key
++ to start Macaulay2 inside Emacs. This also strips (load "M2-init")
++ from a user's existing .emacs-Macaulay2 file, which would cause
++ errors if they haven't installed elpa-macaulay2. We also warn the
++ user if elpa-macaulay2 isn't installed.
++ * Set the correct installation directory for the Emacs files in the
++ configure script.
++Author: Doug Torrance <dtorrance@piedmont.edu>
++Forwarded: not-needed
++Last-Update: 2021-01-01
++
++--- a/M2/Macaulay2/m2/files.m2
+++++ b/M2/Macaulay2/m2/files.m2
++@@ -385,12 +385,6 @@
++ ///
++
++ dotemacsFix0 = ///
++-;; this version will give an error if M2-init.el is not found:
++-(load "M2-init")
++-
++-;; this version will not give an error if M2-init.el is not found:
++-;(load "M2-init" t)
++-
++ ; You may comment out the following line with an initial semicolon if you
++ ; want to use your f12 key for something else. However, this action
++ ; will be undone the next time you run setup() or setupEmacs().
++@@ -468,10 +462,15 @@
++ setupEmacs = method()
++ setup = method()
++ mungeEmacs = () -> (
++- dotemacsFix = concatenate(emacsHeader, apply(emacsfixes, (var,dir,templ) -> fix(var,dir,"",templ)), dotemacsFix0);
+++ dotemacsFix = concatenate(emacsHeader, dotemacsFix0);
++ supplantStringFile(dotemacsFix,"~/"|M2emacs,false);
++- mungeFile("~/"|".emacs", ";; Macaulay 2 start", ";; Macaulay 2 end", M2emacsRead )
++- )
+++ ret := mungeFile("~/"|".emacs", ";; Macaulay 2 start", ";; Macaulay 2 end", M2emacsRead );
+++ if run("dpkg -s elpa-macaulay2 2> /dev/null | " |
+++ "grep -q \"^Status:.* installed\"") != 0 then
+++ stderr << "--warning: you must run \"apt install elpa-macaulay2\" "
+++ << "as root in order to use" << endl
+++ << " Macaulay2 with Emacs." << endl;
+++ ret)
++ prelim := () -> (
++ promptUser = true;
++ if prefixDirectory === null then error "can't determine Macaulay 2 prefix (prefixDirectory not set)";
++--- a/M2/configure.ac
+++++ b/M2/configure.ac
++@@ -2034,7 +2034,7 @@
++
++ AC_SUBST(packagesdir,$datadir/Macaulay2)
++ AC_SUBST(libm2dir,$libdir/Macaulay2)
++-AC_SUBST(emacsdir,$datadir/emacs/site-lisp/Macaulay2)
+++AC_SUBST(emacsdir,$datadir/emacs/site-lisp/elpa/macaulay2-$PACKAGE_VERSION)
++ AC_SUBST(librariesdir,$libm2dir/lib)
++ AC_SUBST(programsdir,$libexecdir/Macaulay2/bin)
++ AC_SUBST(licensesdir,$libexecdir/Macaulay2/program-licenses)
++@@ -2042,7 +2042,7 @@
++
++ AC_SUBST(tail_packagesdir,$tail_datadir/Macaulay2)
++ AC_SUBST(tail_libm2dir,$tail_libdir/Macaulay2)
++-AC_SUBST(tail_emacsdir,$tail_datadir/emacs/site-lisp/Macaulay2)
+++AC_SUBST(tail_emacsdir,$tail_datadir/emacs/site-lisp/elpa/macaulay2-$PACKAGE_VERSION)
++ AC_SUBST(tail_librariesdir,$tail_libm2dir/lib)
++ AC_SUBST(tail_programsdir,$tail_libexecdir/Macaulay2/bin)
++ AC_SUBST(tail_licensesdir,$tail_libexecdir/Macaulay2/program-licenses)
++@@ -2050,7 +2050,7 @@
++
++ AC_SUBST(pre_packagesdir,$pre_datadir/Macaulay2)
++ AC_SUBST(pre_libm2dir,$pre_libdir/Macaulay2)
++-AC_SUBST(pre_emacsdir,$pre_datadir/emacs/site-lisp/Macaulay2)
+++AC_SUBST(pre_emacsdir,$pre_datadir/emacs/site-lisp/elpa/macaulay2-$PACKAGE_VERSION)
++ AC_SUBST(pre_librariesdir,$pre_libm2dir/lib)
++ AC_SUBST(pre_programsdir,$pre_libexecdir/Macaulay2/bin)
++ AC_SUBST(pre_licensesdir,$pre_libexecdir/Macaulay2/program-licenses)
--- /dev/null
--- /dev/null
++#!/usr/bin/make -f
++
++include /usr/share/dpkg/architecture.mk
++
++export DEB_BUILD_MAINT_OPTIONS=hardening=+all
++
++ifeq (,$(filter terse,$(DEB_BUILD_OPTIONS)))
++export VERBOSE=1
++endif
++
++# needed for reproducible-config-args.patch
++export CURDIR
++
++%:
++ dh $@ --sourcedirectory=M2 --with elpa,linktree
++
++# use exec_prefix instead of prefix in libdir, as that's what's needed
++# to properly substitute paths in Layout#2,
++override_dh_auto_configure:
++ dh_auto_configure -- \
++ --libdir=\$${exec_prefix}/lib/$(DEB_HOST_MULTIARCH)
++
++# prevent html-check-links from failing to find KaTeX files before
++# they get added by dh_linktree
++KATEX_DIR := $(CURDIR)/M2/Macaulay2/packages/Style/katex
++KATEX_FILES := $(patsubst %, $(KATEX_DIR)/%, \
++ katex.min.css katex.min.js contrib/auto-render.min.js \
++ contrib/copy-tex.min.css contrib/copy-tex.min.js)
++
++execute_before_dh_auto_build: $(KATEX_FILES)
++
++$(KATEX_DIR)/%:
++ touch $@
++
++# since a "test" target exists, dh_auto_test defaults to using that, but
++# it just prints the values of some variables. we want the "check" target
++# instead to run the test suite
++# related: https://bugs.debian.org/924052
++override_dh_auto_test-arch:
++ cd M2 && make check
++
++override_dh_auto_test-indep:
++ cd M2 && make validate-html
++
++# remove empty directory
++execute_after_dh_install-arch:
++ rm -rf debian/macaulay2/usr/lib/$(DEB_HOST_MULTIARCH)/Macaulay2/lib
++
++# https://github.com/Macaulay2/M2/issues/1144
++execute_before_dh_link-indep:
++ jdupes -rl debian/macaulay2-common/usr/share/doc/Macaulay2
++
++# example output and package test files must be plain text
++override_dh_compress:
++ dh_compress -Xexample-output -X.m2
++
++execute_before_dh_elpa: debian/macaulay2-pkg.el
++
++debian/macaulay2-pkg.el: debian/macaulay2-pkg.el.in
++ sed -e 's|@VERSION@|$(shell cat M2/VERSION)|g' $< > $@
++
++# we use uscan to check for the most recent version, but to create an
++# orig tarball, we also need the contents of the M2-emacs submodule,
++# so use this target instead of uscan directly
++get-orig-source:
++ debian/scripts/m2-get-orig-source.sh
--- /dev/null
--- /dev/null
++-- function to help generate d/copyright paragraphs for Macaulay2 packages
++-- manually check each file to ensure the license information is correct
++copyrightHelper = pkgName -> (
++ pkg := needsPackage pkgName;
++ filename := "M2/Macaulay2/packages/" | pkgName |
++ if (options pkg)#AuxiliaryFiles then "*" else ".m2";
++ year := if (options pkg)#Date =!= null then
++ (first select(///[\d]{4}///, (options pkg)#Date)) | " " else "";
++ danOrMike := any(apply((options pkg)#Authors, author ->
++ last first author), name -> match({"Grayson", "Stillman"}, name));
++ stdio << "Files: " | filename | newline |
++ "Copyright: " |
++ demark(newline | " ",
++ apply(hashTable \ (options pkg)#Authors, author ->
++ year | author#Name |
++ (if author#?Email then " <" | author#Email | ">" else ""))) |
++ newline | "Comment: See Comment at the top of this file." | newline |
++ "License: " | (if danOrMike then "GPL-2+ and " else "") |
++ "public-domain" << endl
++)
++
++-- function to check that all packages are mentioned in d/copyright
++-- unless only authors are Dan and/or Mike (or Jane Doe for FirstPackage)
++missingPackages = pathToDCopyright -> (
++ dCopyright := get pathToDCopyright;
++ missing := select(separate(" ", version#"packages"), pkg ->
++ not match(pkg, dCopyright));
++ select(missing, pkg ->
++ not all(hashTable \ (readPackage pkg)#Authors, author ->
++ match({"Doe", "Grayson", "Stillman"}, author#Name)))
++)
--- /dev/null
--- /dev/null
++#!/bin/sh
++
++# generate Macaulay2 orig tarball for creating Debian packages
++# combines contents of M2 and M2-emacs git repositories and removes
++# any files specified by Files-Excluded in debian/copyright
++#
++# also updates git-description.patch and d/changelog with the corresponding
++# git description/version number
++#
++# options:
++# -u, --uscan
++# use uscan to determine newest stable version (default)
++#
++# -d, --dev
++# use 'development' branch
++#
++# -r, --ref <ref>
++# use branch or tag specificed by <ref>
++
++set -e
++
++if [ "x$1" = "x" -o "x$1" = "x-u" -o "x$1" = "x--uscan" ]
++then
++ echo -n "finding newest version using uscan ... "
++ VERSION=$(uscan --report-status | grep newversion | awk '{print $3}')
++ echo $VERSION
++ REF="release-$VERSION"
++elif [ $1 = "-r" -o $1 = "--ref" ]
++then
++ REF=$2
++elif [ $1 = "-d" -o $1 = "--dev" ]
++then
++ REF="development"
++else
++ echo "error: unknown command line argument"
++ exit 1
++fi
++echo "making tarball for ref '$REF'"
++
++git fetch https://github.com/Macaulay2/M2 $REF 2> /dev/null
++
++echo -n "determining version number ... "
++GIT_VERSION=$(git show FETCH_HEAD:M2/VERSION)
++NEW_COMMITS=$(git rev-list \
++ $(git rev-list -1 FETCH_HEAD M2/VERSION)..FETCH_HEAD --count)
++GIT_COMMIT=$(git rev-parse FETCH_HEAD) # cut -c 1-7 (or 9)
++
++if [ -z $VERSION ]
++then
++ VERSION=$GIT_VERSION+git$NEW_COMMITS.$(echo $GIT_COMMIT | cut -c 1-7)
++fi
++echo $VERSION
++
++GIT_DESCRIPTION=version-$GIT_VERSION-$NEW_COMMITS-$(echo $GIT_COMMIT | \
++ cut -c 1-9)
++echo "using git description ... $GIT_DESCRIPTION"
++
++echo -n "updating debian/patches/git-description.patch ... "
++quilt push debian/patches/git-description.patch > /dev/null
++sed -i "s/^then GIT_DESCRIPTION=.*/then GIT_DESCRIPTION=$GIT_DESCRIPTION/" \
++ M2/configure.ac
++quilt refresh > /dev/null
++quilt pop -a > /dev/null
++echo "done"
++
++echo -n "updating debian/changelog ... "
++dch -m -b -v $VERSION+ds-1 "" 2> /dev/null
++echo "done"
++
++echo -n "generating M2 tarball ... "
++git archive -o ../macaulay2_$VERSION.orig.tar FETCH_HEAD
++echo "done"
++
++M2_EMACS_PATH=M2/Macaulay2/editors/emacs
++echo -n "finding M2-emacs commit ... "
++M2_EMACS_COMMIT=$(git ls-tree FETCH_HEAD -- $M2_EMACS_PATH | awk '{print $3}')
++echo $M2_EMACS_COMMIT
++
++echo -n "generating M2-emacs tarball ... "
++git submodule update --quiet --init $M2_EMACS_PATH
++cd $M2_EMACS_PATH
++git archive -o "../../../../../M2-emacs.tar" --prefix $M2_EMACS_PATH/ \
++ $M2_EMACS_COMMIT
++cd ../../../..
++git submodule deinit --quiet $M2_EMACS_PATH
++echo "done"
++
++echo -n "merging tarballs ... "
++tar --concatenate --file ../macaulay2_$VERSION.orig.tar ../M2-emacs.tar
++rm ../M2-emacs.tar
++echo "done"
++
++echo -n "removing Files-Excluded from debian/copyright ... "
++FILES_EXCLUDED=$(awk '/^Files-Excluded:/ {print $2; flag = 1; next} \
++ /^\S/ {flag = 0} flag {print $1}' debian/copyright)
++for FILE in $FILES_EXCLUDED
++do
++ if tar -tf ../macaulay2_$VERSION.orig.tar | grep $FILE > /dev/null
++ then
++ tar --delete --wildcards --file ../macaulay2_$VERSION.orig.tar $FILE
++ else
++ MISSING_FILES="$MISSING_FILES $FILE"
++ fi
++done
++mv ../macaulay2_$VERSION.orig.tar ../macaulay2_$VERSION+ds.orig.tar
++echo "done"
++
++if [ ! -z "$MISSING_FILES" ]
++then
++ echo "warning: in Files-Excluded but not tarball:"
++ for FILE in $MISSING_FILES
++ do
++ echo " $FILE"
++ done
++fi
++
++echo -n "compressing ... "
++xz -fz ../macaulay2_$VERSION+ds.orig.tar
++echo "done"
++
++echo "orig tarball: ../macaulay2_$VERSION+ds.orig.tar.xz"
--- /dev/null
--- /dev/null
++>&2 echo "+-----------------------------------------------------------------+"
++>&2 echo "| Do NOT use this tarball. It is missing files from the M2-emacs |"
++>&2 echo "| submodule. Instead, run 'debian/rules get-orig-source'. |"
++>&2 echo "+-----------------------------------------------------------------+"
--- /dev/null
--- /dev/null
++3.0 (quilt)
--- /dev/null
--- /dev/null
++M2/Macaulay2/editors/emacs/M2-symbols.el.gz
--- /dev/null
--- /dev/null
++# Pre-generated example code used by Macaulay2's built-in help system.
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/AdjointIdeal/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/Bertini/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/CoincidentRootLoci/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/ConvexInterface/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/DecomposableSparseSystems/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/MapleInterface/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/MonodromySolver/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/NCAlgebra/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/NumericalSchubertCalculus/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/PHCpack/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/Parametrization/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/StatePolytope/examples/
++macaulay2 source: package-does-not-install-examples M2/Macaulay2/packages/Tropical/examples/
--- /dev/null
--- /dev/null
++extend-diff-ignore = "M2/submodules"
++extend-diff-ignore = "M2/BUILD"
++extend-diff-ignore = "M2/Macaulay2/m2/TAGS.doc"
++extend-diff-ignore = "M2/configure"
++extend-diff-ignore = "M2/include/M2/config.h.in"
--- /dev/null
--- /dev/null
++Test-Command:
++ M2 --silent -q -e 'stderr << netList {"BASIC TESTS"} << endl; exit 0' &&
++ M2 --silent --check 1 -q --stop -E "exit 0" &&
++ M2 --silent -q -e 'stderr << netList {"CORE TESTS"} << endl; exit 0' &&
++ M2 --silent --check 2 -q &&
++ M2 --silent -q -e 'stderr << netList {"PACKAGE TESTS"} << endl; exit 0' &&
++ M2 --silent --check 3 -q
++Depends: 4ti2,
++ cohomcalg,
++ coinor-csdp,
++ gfan,
++ nauty,
++ normaliz,
++ polymake,
++ topcom,
++ @
++Restrictions: allow-stderr
--- /dev/null
--- /dev/null
++Repository: https://github.com/Macaulay2/M2
++Bug-Database: https://github.com/Macaulay2/M2/issues
++Funding:
++ - NSF DMS 92-10805
++ - NSF DMS 92-10807
++ - NSF DMS 96-22608
++ - NSF DMS 96-23232
++ - NSF DMS 99-70085
++ - NSF DMS 99-70348
++ - NSF DMS 03-11378
++ - NSF DMS 03-11806
++ - NSF DMS 08-10918
++ - NSF DMS 08-10948
++ - NSF DMS 10-02171
++ - NSF DMS 10-02210
++ - NSF DMS 15-02209
++ - NSF DMS 15-02294
++ - NSF DMS 20-01206
++ - NSF DMS 20-01267
++ - NSF DMS 20-01367
++Reference:
++ Author: Grayson, Daniel R. and Stillman, Michael E.
++ Title: Macaulay2, a software system for research in algebraic geometry
++ Type: misc
++ URL: https://faculty.math.illinois.edu/Macaulay2/
++Webservice:
++ - http://web.macaulay2.com/
++ - https://www.unimelb-macaulay2.cloud.edu.au/
--- /dev/null
--- /dev/null
++version=4
++opts=dversionmangle=s/@DEB_EXT@//,repacksuffix=+ds \
++https://github.com/Macaulay2/M2/releases \
++/Macaulay2/M2/archive/release-@ANY_VERSION@@ARCHIVE_EXT@ debian \
++debian/scripts/m2-tarball-warning.sh