Interface to PHC.¶
PHC computes numerical information about systems of polynomials over the complex numbers.
PHC implements polynomial homotopy methods to exploit structure in order to better approximate all isolated solutions. The package also includes extra tools to handle positive dimensional solution components.
AUTHORS:
PHC was written by J. Verschelde, R. Cools, and many others (?)
William Stein and Kelly ?? – first version of interface to PHC
Marshall Hampton – second version of interface to PHC
Marshall Hampton and Alex Jokela – third version, path tracking
- class sage.interfaces.phc.PHC[source]¶
Bases:
object
A class to interface with PHCpack, for computing numerical homotopies and root counts.
EXAMPLES:
sage: from sage.interfaces.phc import phc sage: R.<x,y> = PolynomialRing(CDF,2) sage: testsys = [x^2 + 1, x*y - 1] sage: phc.mixed_volume(testsys) # optional -- phc 2 sage: v = phc.blackbox(testsys, R) # optional -- phc sage: sols = v.solutions() # optional -- phc sage: sols.sort() # optional -- phc sage: sols # optional -- phc [[-1.00000000000000*I, 1.00000000000000*I], [1.00000000000000*I, -1.00000000000000*I]] sage: sol_dict = v.solution_dicts() # optional -- phc sage: x_sols_from_dict = [d[x] for d in sol_dict] # optional -- phc sage: x_sols_from_dict.sort(); x_sols_from_dict # optional -- phc [-1.00000000000000*I, 1.00000000000000*I] sage: residuals = [[test_equation.change_ring(CDF).subs(sol) for test_equation in testsys] for sol in v.solution_dicts()] # optional -- phc sage: residuals # optional -- phc [[0, 0], [0, 0]]
>>> from sage.all import * >>> from sage.interfaces.phc import phc >>> R = PolynomialRing(CDF,Integer(2), names=('x', 'y',)); (x, y,) = R._first_ngens(2) >>> testsys = [x**Integer(2) + Integer(1), x*y - Integer(1)] >>> phc.mixed_volume(testsys) # optional -- phc 2 >>> v = phc.blackbox(testsys, R) # optional -- phc >>> sols = v.solutions() # optional -- phc >>> sols.sort() # optional -- phc >>> sols # optional -- phc [[-1.00000000000000*I, 1.00000000000000*I], [1.00000000000000*I, -1.00000000000000*I]] >>> sol_dict = v.solution_dicts() # optional -- phc >>> x_sols_from_dict = [d[x] for d in sol_dict] # optional -- phc >>> x_sols_from_dict.sort(); x_sols_from_dict # optional -- phc [-1.00000000000000*I, 1.00000000000000*I] >>> residuals = [[test_equation.change_ring(CDF).subs(sol) for test_equation in testsys] for sol in v.solution_dicts()] # optional -- phc >>> residuals # optional -- phc [[0, 0], [0, 0]]
from sage.interfaces.phc import phc R.<x,y> = PolynomialRing(CDF,2) testsys = [x^2 + 1, x*y - 1] phc.mixed_volume(testsys) # optional -- phc v = phc.blackbox(testsys, R) # optional -- phc sols = v.solutions() # optional -- phc sols.sort() # optional -- phc sols # optional -- phc sol_dict = v.solution_dicts() # optional -- phc x_sols_from_dict = [d[x] for d in sol_dict] # optional -- phc x_sols_from_dict.sort(); x_sols_from_dict # optional -- phc residuals = [[test_equation.change_ring(CDF).subs(sol) for test_equation in testsys] for sol in v.solution_dicts()] # optional -- phc residuals # optional -- phc
- blackbox(polys, input_ring, verbose=False)[source]¶
Return as a string the result of running PHC with the given polynomials under blackbox mode (the ‘-b’ option).
INPUT:
polys
– list of multivariate polynomials (elements of a multivariate polynomial ring).input_ring
– for coercion of the variables into the desired ringverbose
– print lots of verbose information about what this function does
OUTPUT: a PHC_Object object containing the phcpack output string
EXAMPLES:
sage: from sage.interfaces.phc import * sage: R2.<x,y> = PolynomialRing(QQ,2) sage: start_sys = [x^6-y^2,y^5-1] sage: sol = phc.blackbox(start_sys, R2) # optional -- phc sage: len(sol.solutions()) # optional -- phc 30
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> R2 = PolynomialRing(QQ,Integer(2), names=('x', 'y',)); (x, y,) = R2._first_ngens(2) >>> start_sys = [x**Integer(6)-y**Integer(2),y**Integer(5)-Integer(1)] >>> sol = phc.blackbox(start_sys, R2) # optional -- phc >>> len(sol.solutions()) # optional -- phc 30
from sage.interfaces.phc import * R2.<x,y> = PolynomialRing(QQ,2) start_sys = [x^6-y^2,y^5-1] sol = phc.blackbox(start_sys, R2) # optional -- phc len(sol.solutions()) # optional -- phc
- mixed_volume(polys, verbose=False)[source]¶
Compute the mixed volume of the polynomial system given by the input polys.
INPUT:
polys
– list of multivariate polynomials (elements of a multivariate polynomial ring).verbose
– print lots of verbose information about what this function does
OUTPUT: the mixed volume
EXAMPLES:
sage: from sage.interfaces.phc import * sage: R2.<x,y,z> = PolynomialRing(QQ,3) sage: test_sys = [(x+y+z)^2-1,x^2-x,y^2-1] sage: phc.mixed_volume(test_sys) # optional -- phc 4
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> R2 = PolynomialRing(QQ,Integer(3), names=('x', 'y', 'z',)); (x, y, z,) = R2._first_ngens(3) >>> test_sys = [(x+y+z)**Integer(2)-Integer(1),x**Integer(2)-x,y**Integer(2)-Integer(1)] >>> phc.mixed_volume(test_sys) # optional -- phc 4
from sage.interfaces.phc import * R2.<x,y,z> = PolynomialRing(QQ,3) test_sys = [(x+y+z)^2-1,x^2-x,y^2-1] phc.mixed_volume(test_sys) # optional -- phc
- path_track(start_sys, end_sys, input_ring, c_skew=0.001, saved_start=None)[source]¶
This function computes homotopy paths between the solutions of
start_sys
andend_sys
.INPUT:
start_sys
– a square polynomial system, given as a list of polynomialsend_sys
– same type asstart_sys
input_ring
– for coercion of the variables into the desired ringc_skew
– (optional) the imaginary part of homotopy multiplier; nonzero values are often necessary to avoid intermediate path collisionssaved_start
– (optional) a phc output file; if not given, start system solutions are computed via thephc.blackbox
function
OUTPUT: list of paths as dictionaries, with the keys variables and t-values on the path
EXAMPLES:
sage: from sage.interfaces.phc import * sage: R2.<x,y> = PolynomialRing(QQ,2) sage: start_sys = [x^6-y^2,y^5-1] sage: sol = phc.blackbox(start_sys, R2) # optional -- phc sage: start_save = sol.save_as_start() # optional -- phc sage: end_sys = [x^7-2,y^5-x^2] # optional -- phc sage: sol_paths = phc.path_track(start_sys, end_sys, R2, saved_start = start_save) # optional -- phc sage: len(sol_paths) # optional -- phc 30
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> R2 = PolynomialRing(QQ,Integer(2), names=('x', 'y',)); (x, y,) = R2._first_ngens(2) >>> start_sys = [x**Integer(6)-y**Integer(2),y**Integer(5)-Integer(1)] >>> sol = phc.blackbox(start_sys, R2) # optional -- phc >>> start_save = sol.save_as_start() # optional -- phc >>> end_sys = [x**Integer(7)-Integer(2),y**Integer(5)-x**Integer(2)] # optional -- phc >>> sol_paths = phc.path_track(start_sys, end_sys, R2, saved_start = start_save) # optional -- phc >>> len(sol_paths) # optional -- phc 30
from sage.interfaces.phc import * R2.<x,y> = PolynomialRing(QQ,2) start_sys = [x^6-y^2,y^5-1] sol = phc.blackbox(start_sys, R2) # optional -- phc start_save = sol.save_as_start() # optional -- phc end_sys = [x^7-2,y^5-x^2] # optional -- phc sol_paths = phc.path_track(start_sys, end_sys, R2, saved_start = start_save) # optional -- phc len(sol_paths) # optional -- phc
- plot_paths_2d(start_sys, end_sys, input_ring, c_skew=0.001, endpoints=True, saved_start=None, rand_colors=False)[source]¶
Return a graphics object of solution paths in the complex plane.
INPUT:
start_sys
– a square polynomial system, given as a list of polynomialsend_sys
– same type as start_sysinput_ring
– for coercion of the variables into the desired ringc_skew
– (optional) the imaginary part of homotopy multiplier; nonzero values are often necessary to avoid intermediate path collisionsendpoints
– (optional) whether to draw in the ends of paths as pointssaved_start
– (optional) a phc output file; if not given, start system solutions are computed via thephc.blackbox
function
OUTPUT: lines and points of solution paths
EXAMPLES:
sage: from sage.interfaces.phc import * sage: from sage.structure.sage_object import SageObject sage: R2.<x,y> = PolynomialRing(QQ,2) sage: start_sys = [x^5-y^2,y^5-1] sage: sol = phc.blackbox(start_sys, R2) # optional -- phc sage: start_save = sol.save_as_start() # optional -- phc sage: end_sys = [x^5-25,y^5-x^2] # optional -- phc sage: testing = phc.plot_paths_2d(start_sys, end_sys, R2) # optional -- phc sage: type(testing) # optional -- phc (normally use plot here) <class 'sage.plot.graphics.Graphics'>
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> from sage.structure.sage_object import SageObject >>> R2 = PolynomialRing(QQ,Integer(2), names=('x', 'y',)); (x, y,) = R2._first_ngens(2) >>> start_sys = [x**Integer(5)-y**Integer(2),y**Integer(5)-Integer(1)] >>> sol = phc.blackbox(start_sys, R2) # optional -- phc >>> start_save = sol.save_as_start() # optional -- phc >>> end_sys = [x**Integer(5)-Integer(25),y**Integer(5)-x**Integer(2)] # optional -- phc >>> testing = phc.plot_paths_2d(start_sys, end_sys, R2) # optional -- phc >>> type(testing) # optional -- phc (normally use plot here) <class 'sage.plot.graphics.Graphics'>
from sage.interfaces.phc import * from sage.structure.sage_object import SageObject R2.<x,y> = PolynomialRing(QQ,2) start_sys = [x^5-y^2,y^5-1] sol = phc.blackbox(start_sys, R2) # optional -- phc start_save = sol.save_as_start() # optional -- phc end_sys = [x^5-25,y^5-x^2] # optional -- phc testing = phc.plot_paths_2d(start_sys, end_sys, R2) # optional -- phc type(testing) # optional -- phc (normally use plot here)
- start_from(start_filename_or_string, polys, input_ring, path_track_file=None, verbose=False)[source]¶
This computes solutions starting from a phcpack solution file.
INPUT:
start_filename_or_string
– the filename for a phcpack start system, or the contents of such a file as a string. Variable names must match the inputring variables. The value of the homotopy variable t should be 1, not 0.polys
– list of multivariate polynomials (elements of a multivariate polynomial ring).input_ring: for coercion of the variables into the desired ring.
path_track_file: whether to save path-tracking information
verbose
– print lots of verbose information about what this function does
OUTPUT: a solution in the form of a PHCObject
EXAMPLES:
sage: from sage.interfaces.phc import * sage: R2.<x,y> = PolynomialRing(QQ,2) sage: start_sys = [x^6-y^2,y^5-1] sage: sol = phc.blackbox(start_sys, R2) # optional -- phc sage: start_save = sol.save_as_start() # optional -- phc sage: end_sys = [x^7-2,y^5-x^2] # optional -- phc sage: sol = phc.start_from(start_save, end_sys, R2) # optional -- phc sage: len(sol.solutions()) # optional -- phc 30
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> R2 = PolynomialRing(QQ,Integer(2), names=('x', 'y',)); (x, y,) = R2._first_ngens(2) >>> start_sys = [x**Integer(6)-y**Integer(2),y**Integer(5)-Integer(1)] >>> sol = phc.blackbox(start_sys, R2) # optional -- phc >>> start_save = sol.save_as_start() # optional -- phc >>> end_sys = [x**Integer(7)-Integer(2),y**Integer(5)-x**Integer(2)] # optional -- phc >>> sol = phc.start_from(start_save, end_sys, R2) # optional -- phc >>> len(sol.solutions()) # optional -- phc 30
from sage.interfaces.phc import * R2.<x,y> = PolynomialRing(QQ,2) start_sys = [x^6-y^2,y^5-1] sol = phc.blackbox(start_sys, R2) # optional -- phc start_save = sol.save_as_start() # optional -- phc end_sys = [x^7-2,y^5-x^2] # optional -- phc sol = phc.start_from(start_save, end_sys, R2) # optional -- phc len(sol.solutions()) # optional -- phc
- class sage.interfaces.phc.PHC_Object(output_file_contents, input_ring)[source]¶
Bases:
object
A container for data from the PHCpack program - lists of float solutions, etc. Currently the file contents are kept as a string; for really large outputs this would be bad.
INPUT:
output_file_contents
– the string output of PHCpackinput_ring
– for coercion of the variables into the desired ring
EXAMPLES:
sage: from sage.interfaces.phc import phc sage: R2.<x,y> = PolynomialRing(QQ,2) sage: start_sys = [(x-1)^2+(y-1)-1, x^2+y^2-1] sage: sol = phc.blackbox(start_sys, R2) # optional -- phc sage: str(sum([x[0] for x in sol.solutions()]).real())[0:3] # optional -- phc '2.0'
>>> from sage.all import * >>> from sage.interfaces.phc import phc >>> R2 = PolynomialRing(QQ,Integer(2), names=('x', 'y',)); (x, y,) = R2._first_ngens(2) >>> start_sys = [(x-Integer(1))**Integer(2)+(y-Integer(1))-Integer(1), x**Integer(2)+y**Integer(2)-Integer(1)] >>> sol = phc.blackbox(start_sys, R2) # optional -- phc >>> str(sum([x[Integer(0)] for x in sol.solutions()]).real())[Integer(0):Integer(3)] # optional -- phc '2.0'
from sage.interfaces.phc import phc R2.<x,y> = PolynomialRing(QQ,2) start_sys = [(x-1)^2+(y-1)-1, x^2+y^2-1] sol = phc.blackbox(start_sys, R2) # optional -- phc str(sum([x[0] for x in sol.solutions()]).real())[0:3] # optional -- phc
- classified_solution_dicts()[source]¶
Return a dictionary of lists of dictionaries of solutions.
Its not as crazy as it sounds; the keys are the types of solutions as classified by phcpack: regular vs. singular, complex vs. real
INPUT:
None
OUTPUT: a dictionary of lists of dictionaries of solutions
EXAMPLES:
sage: from sage.interfaces.phc import phc sage: R.<x,y> = PolynomialRing(CC,2) sage: p_sys = [x^10-y,y^2-1] sage: sol = phc.blackbox(p_sys,R) # optional -- phc sage: classifieds = sol.classified_solution_dicts() # optional -- phc sage: str(sum([q[y] for q in classifieds['real']]))[0:3] # optional -- phc '2.0'
>>> from sage.all import * >>> from sage.interfaces.phc import phc >>> R = PolynomialRing(CC,Integer(2), names=('x', 'y',)); (x, y,) = R._first_ngens(2) >>> p_sys = [x**Integer(10)-y,y**Integer(2)-Integer(1)] >>> sol = phc.blackbox(p_sys,R) # optional -- phc >>> classifieds = sol.classified_solution_dicts() # optional -- phc >>> str(sum([q[y] for q in classifieds['real']]))[Integer(0):Integer(3)] # optional -- phc '2.0'
from sage.interfaces.phc import phc R.<x,y> = PolynomialRing(CC,2) p_sys = [x^10-y,y^2-1] sol = phc.blackbox(p_sys,R) # optional -- phc classifieds = sol.classified_solution_dicts() # optional -- phc str(sum([q[y] for q in classifieds['real']]))[0:3] # optional -- phc
- save_as_start(start_filename=None, sol_filter='')[source]¶
Save a solution as a phcpack start file. The usual output is just as a string, but it can be saved to a file as well. Even if saved to a file, it still returns the output string.
EXAMPLES:
sage: from sage.interfaces.phc import phc sage: R2.<x,y> = PolynomialRing(QQ,2) sage: start_sys = [x^3-y^2,y^5-1] sage: sol = phc.blackbox(start_sys, R2) # optional -- phc sage: start_save = sol.save_as_start() # optional -- phc sage: end_sys = [x^7-2,y^5-x^2] # optional -- phc sage: sol = phc.start_from(start_save, end_sys, R2) # optional -- phc sage: len(sol.solutions()) # optional -- phc 15
>>> from sage.all import * >>> from sage.interfaces.phc import phc >>> R2 = PolynomialRing(QQ,Integer(2), names=('x', 'y',)); (x, y,) = R2._first_ngens(2) >>> start_sys = [x**Integer(3)-y**Integer(2),y**Integer(5)-Integer(1)] >>> sol = phc.blackbox(start_sys, R2) # optional -- phc >>> start_save = sol.save_as_start() # optional -- phc >>> end_sys = [x**Integer(7)-Integer(2),y**Integer(5)-x**Integer(2)] # optional -- phc >>> sol = phc.start_from(start_save, end_sys, R2) # optional -- phc >>> len(sol.solutions()) # optional -- phc 15
from sage.interfaces.phc import phc R2.<x,y> = PolynomialRing(QQ,2) start_sys = [x^3-y^2,y^5-1] sol = phc.blackbox(start_sys, R2) # optional -- phc start_save = sol.save_as_start() # optional -- phc end_sys = [x^7-2,y^5-x^2] # optional -- phc sol = phc.start_from(start_save, end_sys, R2) # optional -- phc len(sol.solutions()) # optional -- phc
- solution_dicts(get_failures=False)[source]¶
Return a list of solutions in dictionary form: variable:value.
INPUT:
self
– for access to self_out_file_contents, the string of raw PHCpack outputget_failures
– boolean (default:False
); the default is to not process failed homotopies. These either lie on positive-dimensional components or at infinity.
OUTPUT:
solution_dicts: a list of dictionaries. Each dictionary element is of the form variable:value, where the variable is an element of the input_ring, and the value is in ComplexField.
EXAMPLES:
sage: from sage.interfaces.phc import * sage: R.<x,y,z> = PolynomialRing(QQ,3) sage: fs = [x^2-1,y^2-x,z^2-y] sage: sol = phc.blackbox(fs,R) # optional -- phc sage: s_list = sol.solution_dicts() # optional -- phc sage: s_list.sort() # optional -- phc sage: s_list[0] # optional -- phc {y: 1.00000000000000, z: -1.00000000000000, x: 1.00000000000000}
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> R = PolynomialRing(QQ,Integer(3), names=('x', 'y', 'z',)); (x, y, z,) = R._first_ngens(3) >>> fs = [x**Integer(2)-Integer(1),y**Integer(2)-x,z**Integer(2)-y] >>> sol = phc.blackbox(fs,R) # optional -- phc >>> s_list = sol.solution_dicts() # optional -- phc >>> s_list.sort() # optional -- phc >>> s_list[Integer(0)] # optional -- phc {y: 1.00000000000000, z: -1.00000000000000, x: 1.00000000000000}
from sage.interfaces.phc import * R.<x,y,z> = PolynomialRing(QQ,3) fs = [x^2-1,y^2-x,z^2-y] sol = phc.blackbox(fs,R) # optional -- phc s_list = sol.solution_dicts() # optional -- phc s_list.sort() # optional -- phc s_list[0] # optional -- phc
- solutions(get_failures=False)[source]¶
Return a list of solutions in the ComplexField.
Use the variable_list function to get the order of variables used by PHCpack, which is usually different than the term order of the input_ring.
INPUT:
self
– for access to self_out_file_contents, the string of raw PHCpack outputget_failures
– boolean (default:False
); the default is to not process failed homotopies. These either lie on positive-dimensional components or at infinity.
OUTPUT: solutions: a list of lists of ComplexField-valued solutions
EXAMPLES:
sage: from sage.interfaces.phc import * sage: R2.<x1,x2> = PolynomialRing(QQ,2) sage: test_sys = [x1^5-x1*x2^2-1, x2^5-x1*x2-1] sage: sol = phc.blackbox(test_sys, R2) # optional -- phc sage: len(sol.solutions()) # optional -- phc 25
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> R2 = PolynomialRing(QQ,Integer(2), names=('x1', 'x2',)); (x1, x2,) = R2._first_ngens(2) >>> test_sys = [x1**Integer(5)-x1*x2**Integer(2)-Integer(1), x2**Integer(5)-x1*x2-Integer(1)] >>> sol = phc.blackbox(test_sys, R2) # optional -- phc >>> len(sol.solutions()) # optional -- phc 25
from sage.interfaces.phc import * R2.<x1,x2> = PolynomialRing(QQ,2) test_sys = [x1^5-x1*x2^2-1, x2^5-x1*x2-1] sol = phc.blackbox(test_sys, R2) # optional -- phc len(sol.solutions()) # optional -- phc
- variable_list()[source]¶
Return the variables, as strings, in the order in which PHCpack has processed them.
EXAMPLES:
sage: from sage.interfaces.phc import * sage: R2.<x1,x2> = PolynomialRing(QQ,2) sage: test_sys = [x1^5-x1*x2^2-1, x2^5-x1*x2-1] sage: sol = phc.blackbox(test_sys, R2) # optional -- phc sage: sol.variable_list() # optional -- phc ['x1', 'x2']
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> R2 = PolynomialRing(QQ,Integer(2), names=('x1', 'x2',)); (x1, x2,) = R2._first_ngens(2) >>> test_sys = [x1**Integer(5)-x1*x2**Integer(2)-Integer(1), x2**Integer(5)-x1*x2-Integer(1)] >>> sol = phc.blackbox(test_sys, R2) # optional -- phc >>> sol.variable_list() # optional -- phc ['x1', 'x2']
from sage.interfaces.phc import * R2.<x1,x2> = PolynomialRing(QQ,2) test_sys = [x1^5-x1*x2^2-1, x2^5-x1*x2-1] sol = phc.blackbox(test_sys, R2) # optional -- phc sol.variable_list() # optional -- phc
- sage.interfaces.phc.get_classified_solution_dicts(output_file_contents, input_ring, get_failures=True)[source]¶
Return a dictionary of lists of dictionaries of variable:value (key:value) pairs. Only used internally; see the classified_solution_dict function in the PHC_Object class definition for details.
INPUT:
output_file_contents
– phc solution output as a stringinput_ring
– a PolynomialRing that variable names can be coerced into
OUTPUT: a dictionary of lists if dictionaries of solutions, classifies by type
EXAMPLES:
sage: from sage.interfaces.phc import * sage: R2.<x1,x2> = PolynomialRing(QQ,2) sage: test_sys = [(x1-2)^5-x2, (x2-1)^5-1] sage: sol = phc.blackbox(test_sys, R2) # optional -- phc sage: sol_classes = get_classified_solution_dicts(sol.output_file_contents,R2) # optional -- phc sage: len(sol_classes['real']) # optional -- phc 1
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> R2 = PolynomialRing(QQ,Integer(2), names=('x1', 'x2',)); (x1, x2,) = R2._first_ngens(2) >>> test_sys = [(x1-Integer(2))**Integer(5)-x2, (x2-Integer(1))**Integer(5)-Integer(1)] >>> sol = phc.blackbox(test_sys, R2) # optional -- phc >>> sol_classes = get_classified_solution_dicts(sol.output_file_contents,R2) # optional -- phc >>> len(sol_classes['real']) # optional -- phc 1
from sage.interfaces.phc import * R2.<x1,x2> = PolynomialRing(QQ,2) test_sys = [(x1-2)^5-x2, (x2-1)^5-1] sol = phc.blackbox(test_sys, R2) # optional -- phc sol_classes = get_classified_solution_dicts(sol.output_file_contents,R2) # optional -- phc len(sol_classes['real']) # optional -- phc
- sage.interfaces.phc.get_solution_dicts(output_file_contents, input_ring, get_failures=True)[source]¶
Return a list of dictionaries of variable:value (key:value) pairs. Only used internally; see the solution_dict function in the PHC_Object class definition for details.
INPUT:
output_file_contents
– phc solution output as a stringinput_ring
– a PolynomialRing that variable names can be coerced into
OUTPUT: list of dictionaries of solutions
EXAMPLES:
sage: from sage.interfaces.phc import * sage: R2.<x1,x2> = PolynomialRing(QQ,2) sage: test_sys = [(x1-1)^5-x2, (x2-1)^5-1] sage: sol = phc.blackbox(test_sys, R2) # optional -- phc sage: test = get_solution_dicts(sol.output_file_contents,R2) # optional -- phc sage: str(sum([q[x1].real() for q in test]))[0:4] # optional -- phc '25.0'
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> R2 = PolynomialRing(QQ,Integer(2), names=('x1', 'x2',)); (x1, x2,) = R2._first_ngens(2) >>> test_sys = [(x1-Integer(1))**Integer(5)-x2, (x2-Integer(1))**Integer(5)-Integer(1)] >>> sol = phc.blackbox(test_sys, R2) # optional -- phc >>> test = get_solution_dicts(sol.output_file_contents,R2) # optional -- phc >>> str(sum([q[x1].real() for q in test]))[Integer(0):Integer(4)] # optional -- phc '25.0'
from sage.interfaces.phc import * R2.<x1,x2> = PolynomialRing(QQ,2) test_sys = [(x1-1)^5-x2, (x2-1)^5-1] sol = phc.blackbox(test_sys, R2) # optional -- phc test = get_solution_dicts(sol.output_file_contents,R2) # optional -- phc str(sum([q[x1].real() for q in test]))[0:4] # optional -- phc
- sage.interfaces.phc.get_variable_list(output_file_contents)[source]¶
Return the variables, as strings, in the order in which PHCpack has processed them.
EXAMPLES:
sage: from sage.interfaces.phc import * sage: R2.<x1,x2> = PolynomialRing(QQ,2) sage: test_sys = [(x1-2)^5-x2, (x2-1)^5-1] sage: sol = phc.blackbox(test_sys, R2) # optional -- phc sage: get_variable_list(sol.output_file_contents) # optional -- phc ['x1', 'x2']
>>> from sage.all import * >>> from sage.interfaces.phc import * >>> R2 = PolynomialRing(QQ,Integer(2), names=('x1', 'x2',)); (x1, x2,) = R2._first_ngens(2) >>> test_sys = [(x1-Integer(2))**Integer(5)-x2, (x2-Integer(1))**Integer(5)-Integer(1)] >>> sol = phc.blackbox(test_sys, R2) # optional -- phc >>> get_variable_list(sol.output_file_contents) # optional -- phc ['x1', 'x2']
from sage.interfaces.phc import * R2.<x1,x2> = PolynomialRing(QQ,2) test_sys = [(x1-2)^5-x2, (x2-1)^5-1] sol = phc.blackbox(test_sys, R2) # optional -- phc get_variable_list(sol.output_file_contents) # optional -- phc
- sage.interfaces.phc.random() x in the interval [0, 1). ¶