package org.geogebra.common.kernel.algos; import java.math.BigInteger; import java.util.HashMap; import java.util.HashSet; import org.geogebra.common.kernel.prover.NoSymbolicParametersException; import org.geogebra.common.kernel.prover.polynomial.PPolynomial; import org.geogebra.common.kernel.prover.polynomial.PVariable; /** * This interface describes the symbolic parameters of algorithms * * @author Simon Weitzhofer * */ public interface SymbolicParametersAlgo { /** * Getter for the SymbolicParameters * * @return the SymbolicParameters */ public SymbolicParameters getSymbolicParameters(); /** * Calculates the set of free variables. * * @param variables * all free variables used * @throws NoSymbolicParametersException * thrown if no symbolic parameters are available. * */ public void getFreeVariables(HashSet<PVariable> variables) throws NoSymbolicParametersException; /** * Calculates the maximum degree of the variables * * @return the degrees of the coordinates * @throws NoSymbolicParametersException * thrown if no symbolic parameters are available. */ public int[] getDegrees() throws NoSymbolicParametersException; /** * Returns which methods might be able to verify the statement * * @return a vector of booleans of size four. The items indicate whether: * <ol start="0" type="1"> * <li>Recios method might be possible</li> * <li>Botanas method might be possible</li> * <li>OpenGeoProver might be possible</li> * <li>PureSymbolic method might be possible</li> * </ol> * */ // public boolean[] possiblyWorkingMethods(); /** * Calculates the homogeneous coordinates of the object when substituting * the variables by its values. * * @param values * The values the variables are substituted with * @return the coordinates * @throws NoSymbolicParametersException * is thrown if it is not possible to obtain the exact * coordinates */ public BigInteger[] getExactCoordinates( final HashMap<PVariable, BigInteger> values) throws NoSymbolicParametersException; /** * Calculates the polynomial describing the algorithm or statement * * @return the polynomial * @throws NoSymbolicParametersException * if it is not possible to obtain an algebraic description */ public PPolynomial[] getPolynomials() throws NoSymbolicParametersException; /** * See AlgoElement.remove() */ public void remove(); }