Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Paper: Solving Polynomial Systems with phcpy #461

Merged
merged 70 commits into from Jul 3, 2019
Merged
Changes from 1 commit
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
98cfd3e
a very modest start of the paper ...
janverschelde Apr 23, 2019
1da4b1c
extended reference list, added two paragraphs of text and a figure
janverschelde Apr 27, 2019
7d64ccc
added section on CGI scripting and more references
janverschelde Apr 27, 2019
04b0bdd
changed python into python3
janverschelde Apr 28, 2019
65194dc
added one section on jupyterhub and more references
janverschelde Apr 28, 2019
825cd04
added a figure and a section on mechanism design
janverschelde Apr 29, 2019
6b5813f
added a section on mission and realization
janverschelde May 1, 2019
b9d6f33
added the beginning of a section on quality up
janverschelde May 3, 2019
211122f
added references to MixedVol, DEMiCs, QDlib
janverschelde May 4, 2019
3115b61
added version numbers, jump from 0.1.5 to 0.9.4
janverschelde May 8, 2019
c81e1c5
added another beginning of a section to the skeleton of the paper
janverschelde May 11, 2019
7292a40
nest some sections
JazzTap May 11, 2019
ca9fce0
gathering past and likely future uses of the library, by literature s…
JazzTap May 11, 2019
1369eeb
Merge pull request #1 from JazzTap/2019
janverschelde May 11, 2019
e5640f2
Eliminated the Belief Propagation section because the calculations in…
janverschelde May 13, 2019
8ba9500
added more references in the related software section
janverschelde May 13, 2019
e67a687
expanded the quality up section
janverschelde May 13, 2019
6e7442c
tuesday kickoff
JazzTap May 14, 2019
77a08cb
citation pass
JazzTap May 15, 2019
cc7e990
Merge branch '2019' of https://github.com/JazzTap/scipy_proceedings i…
JazzTap May 15, 2019
8f0401c
renamed the section title Intensive Methods into Solving Polynomial S…
janverschelde May 16, 2019
3845135
reference wrangling
JazzTap May 16, 2019
4143019
Merge remote-tracking branch 'verschelde/2019' into 2019
JazzTap May 16, 2019
bb7a135
incorporate survey of numerical alg geom
JazzTap May 17, 2019
132094c
Merge pull request #2 from JazzTap/2019
janverschelde May 17, 2019
1fbe1ed
updated version number to 0.9.5 and number of user accounts to 146
janverschelde May 17, 2019
d2c647f
bibliography - applications
JazzTap May 17, 2019
f18d0c5
Merge remote-tracking branch 'verschelde/2019' into 2019
JazzTap May 17, 2019
8417c31
direct manipulation, systems biology
JazzTap May 18, 2019
385d569
direct manipulation figure
JazzTap May 18, 2019
b14361d
continue staging references
JazzTap May 18, 2019
968a1de
rigid graph theory
JazzTap May 18, 2019
71e86db
added the use of the cyclic 4-roots problem in the SymPy online docum…
janverschelde May 19, 2019
b4ce013
Merge remote-tracking branch 'verschelde/2019' into 2019
JazzTap May 19, 2019
d97b36a
mentioned CASC 2018 paper after solving the cyclic 8-roots problem
janverschelde May 19, 2019
abffbcf
new picture visualizes elapsed performances
janverschelde May 19, 2019
cc7e89a
inserted figure on elapsed performances
janverschelde May 19, 2019
e625de3
more applications
JazzTap May 19, 2019
dc3855f
close out examples
JazzTap May 19, 2019
7eabc29
Merge branch '2019' into 2019
JazzTap May 19, 2019
b7c5c0e
Merge pull request #3 from JazzTap/2019
janverschelde May 19, 2019
6c8f06c
made a first pass through the paper, editing the mission section,
janverschelde May 20, 2019
3f1abee
added an explicit reference in the text to the Bertini book
janverschelde May 20, 2019
55479c9
Initial Review submission
loldja Jun 10, 2019
35d4c59
changed the make_paper.sh back to its original state
janverschelde Jun 17, 2019
ab5a616
corrected some (not all yet) of the mistakes pointed out in the reviews,
janverschelde Jun 17, 2019
15558b6
Revise text
JazzTap Jun 18, 2019
659917b
Merge pull request #4 from loldja/2019
janverschelde Jun 18, 2019
e8afc94
removed the inline high level comments
janverschelde Jun 18, 2019
79a1219
applied the changes as in the Revise text #5
janverschelde Jun 18, 2019
eb9e2f4
Merge branch '2019' into 2019
janverschelde Jun 18, 2019
e098efc
Merge pull request #5 from JazzTap/2019
janverschelde Jun 18, 2019
d36f46e
Update phcpy.rst
janverschelde Jun 18, 2019
490ef97
removed duplicate reference SymPyDocs
janverschelde Jun 18, 2019
8b79726
added a paragraph in the introduction describing homotopy continuation
janverschelde Jun 18, 2019
27efffc
added references for the three classes of homotopies, mentioned free …
janverschelde Jun 18, 2019
0a5dee1
changed 'Mission' as section header into 'A Scripting Interface for P…
janverschelde Jun 19, 2019
cae402d
added thesis dissertation of Xiangcheng Yu, figured out floating plac…
janverschelde Jun 19, 2019
c1faad6
Merge remote-tracking branch 'upstream/2019' into 2019
JazzTap Jun 20, 2019
cccce99
Lint text
JazzTap Jun 20, 2019
f3618ec
Add to abstract, rearrange introductions.
JazzTap Jun 20, 2019
fc57577
Merge remote-tracking branch 'upstream/2019' into 2019
JazzTap Jun 20, 2019
cfe0957
your own -> one's own
JazzTap Jun 20, 2019
24bfb76
Update phcpy.rst
JazzTap Jun 20, 2019
04e4800
Merge branch '2019' of https://github.com/janverschelde/scipy_proceed…
JazzTap Jun 21, 2019
aa13d03
merge references
JazzTap Jun 21, 2019
5c2e8da
reword direct manipulation
JazzTap Jun 21, 2019
12840a6
fix et al.
JazzTap Jun 21, 2019
d0df2eb
Merge pull request #6 from JazzTap/2019
janverschelde Jun 21, 2019
8617eee
fixed the hopotopies spelling mistake
janverschelde Jun 22, 2019
File filter...
Filter file types
Jump to…
Jump to file or symbol
Failed to load files and symbols.

Always

Just for now

Add to abstract, rearrange introductions.

  • Loading branch information...
JazzTap committed Jun 20, 2019
commit f3618ec5980fca1d267ee98e32149a296af05fcd
@@ -31,9 +31,9 @@ Solving Polynomial Systems with phcpy

.. class:: abstract

The solutions of a system of polynomials in several variables are often needed, e.g.: in the design of mechanical systems, and in phase-space analyses of nonlinear biological dynamics. Reliable, accurate, and comprehensive numerical solutions are available through PHCpack, a FOSS package for solving polynomial systems with homotopy continuation.
The solutions of a system of polynomials in several variables are often needed, e.g.: in the design of mechanical systems, and in phase-space analyses of nonlinear biological dynamics. Reliable, accurate, and comprehensive numerical solutions are available through PHCpack, a FOSS package for solving polynomial systems with homotopy continuation.

This paper explores the development of phcpy, a scripting interface for PHCpack, over the past five years. One result is the availability of phcpy through a JupyterHub server featuring Python2, Python3, and SageMath kernels.
This paper explores new developments in phcpy, a scripting interface for PHCpack, over the past five years. For instance, phcpy is now available online through a JupyterHub server featuring Python2, Python3, and SageMath kernels. As small systems are solved in real-time by phcpy, they are suitable for interactive exploration through the notebook interface. Meanwhile, phcpy supports GPU parallelization, improving the speed and quality of solutions to much larger polynomial systems. From various model design and analysis problems in STEM, certain classes of polynomial system frequently arise, to which phcpy is well-suited.

Introduction
============
@@ -46,12 +46,10 @@ and data persists in a session without temporary files.
This also makes PHCpack accessible from Jupyter notebooks,
including a JupyterHub server available online [Pascal]_.

*Solving* a system has evolved in meaning, from computing approximations of
all its isolated solutions, to finding the numerical irreducible decomposition
of the solution set. The numerical irreducible decomposition includes
not only the isolated solutions, but also the representations for all
positive dimensional solution sets. Such representations consist
of sets of *generic points*, partitioned along the irreducible factors.
phcpy takes as input a list of polynomials in several variables, with complex-valued floating-point coefficients.
This system is then numerically solved over the field of complex numbers, by using a homotopy continuation method to construct its embedding into a start system with known solutions, and tracking the solution paths to the given coefficient choices.
phcpy is also able to represent the numerical irreducible decomposition of the system's solution set,
which yields the *positive dimensional solution sets* containing infinitely many points, in addition to the isolated solutions.

The focus of this paper is on the application of new technology
to solve polynomial systems, in particular, cloud computing [BSVY15]_
@@ -114,28 +112,20 @@ for PHCpack's Macaulay2 bindings [GPV13]_.
User Interaction
================

CGI Scripting
Online access
-------------

In our first design of a web interface to ``phc``, we developed a collection of Python scripts (mediated through HTML forms), following common programming patterns [Chu06]_.

MySQLdb [MSDB]_ does the management of user data, including a) names and encrypted passwords, b) generic, random folder names to store data files, and c) file names with polynomial systems they have solved. With the module smtplib, we defined email exchanges for an automatic 2-step registration process and password recovery protocol.


As of the middle of May 2019, our web server has 146 user accounts, each having access to our new JupyterHub instance [JUPH]_.

JupyterHub
----------
With JupyterHub [JUPH]_, we provide online access [Pascal]_ to environments with Python and SageMath kernels pre-installed, both featuring phcpy and tutorials on its use (per next section). Since Jupyter is language-agnostic, execution environments in several dozen languages are possible. Our users can also run code in a Python Terminal session. As of the middle of May 2019, our web server has 146 user accounts, each having access to our JupyterHub instance, which is currently accepting public sign-ups.

With JupyterHub, we provide online access [Pascal]_ to environments with Python and SageMath kernels pre-installed, both featuring phcpy and tutorials on its use (per next section). Since Jupyter is language-agnostic, execution environments in several dozen languages are possible. Our users can also run code in a Python Terminal session.
In our first design of a web interface to ``phc``, we developed a collection of Python scripts (mediated through HTML forms), following common programming patterns [Chu06]_. MySQLdb [MSDB]_ does the management of user data, including a) names and encrypted passwords, b) generic, random folder names to store data files, and c) file names with polynomial systems they have solved. With the module smtplib, we defined email exchanges for an automatic 2-step registration process and password recovery protocol.

For the user administration, we refreshed our first web interface.
For the user administration of our JupyterHub, we refreshed this first web interface.
A custom JupyterHub Authenticator connects to the existing MySQL database
and triggers a SystemdSpawner that isolates the actions of users to separate
processes and logins in generic home folders.

The account management prompts by e-mail were hooked to new Tornado RequestHandler instances, which perform account registration and activation on the database, as well as password recovery and reset. Each such route serves HTML forms seamlessly with the JupyterHub interface, by extending its Jinja templates.

processes and logins in generic home folders. The email account management prompts
were hooked to new Tornado RequestHandler instances, which perform account registration
and activation in the database, as well as password recovery and reset. Each such route
serves HTML forms seamlessly with the JupyterHub interface, by extending its Jinja templates.

Code Snippets
-------------
@@ -169,7 +159,7 @@ Direct Manipulation

One consequence of the Jupyter notebook's rich output is the possibility of rich input, as explored through ipywidgets [IPYW]_ and interactive plotting libraries. The combination of rich input with fast numerical methods makes surprising interactions possible, such as interactive solution of Apollonius' Problem, which is to construct all circles tangent to three given circles in a plane.

The tutorial given in the phcpy documentation was adapted for a demo accompanying a SciPy poster in 2017, whose code [APP]_ will run on our JupyterHub (by copying over ``apollonius_d3.ipynb`` and ``apollonius_d3.js``).
The tutorial given in the phcpy documentation was adapted for a demo accompanying a SciPy poster in 2017, whose code [APP]_ will run on our JupyterHub (by copying over ``apollonius_d3.ipynb`` and ``apollonius_d3.js`` to your own user directory).

This system of 3 nonlinear constraints in 5 parameters for each of 8 possible tangent circles (some of which have imaginary position or radius in certain configurations) can be solved interactively by our system in real-time (Fig. :ref:`apollonius`), in response to interaction. In fact, Jupyter is a suitable environment for mapping algebraic inputs to their geometric representations (in a 2D plane), through its interaction with D3.js [D3]_ for nonstandard (non-chart) data visualizations.

@@ -370,10 +360,14 @@ for algebraic curves.
Positive Dimensional Solution Sets
----------------------------------

As solving evolved from approximating all isolated solutions
of a polynomial system into computing a numerical irreducible decomposition,
the meaning of a solution expanded as well.
To illustrate this expansion, consider the example of the twisted cubic,
*Solving* a system has evolved in meaning, from computing approximations of
all its isolated solutions, to finding the numerical irreducible decomposition
of the solution set. The numerical irreducible decomposition includes
not only the isolated solutions, but also the representations for all
positive dimensional solution sets. Such representations consist
of sets of *generic points*, partitioned along the irreducible factors.

To illustrate this expanded sense of a 'solution', we consider the twisted cubic,
known in algebraic geometry as the first nontrivial space curve.
We use this example to illustrate two different representations
of this space curve:
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.