\begin{ccRefConcept}{PolynomialTraits_d} \ccDefinition A model of \ccc{PolynomialTraits_d} is associated to an type \ccc{Polynomial_d}, representing a multivariate polynomial \footnote{Univariate polynomials are not excluded by this concept.}. The number of variables is denoted as the dimension $d$ of the polynomial, it is arbitrary but fixed for a certain model of this concept. \ccc{PolynomialTraits_d} provides two different views on the multivariate polynomial. \begin{itemize} \item A recursive view, that sees the polynomial as an element of $R[x_0,\dots,x_{d-2}][x_{d-1}]$. In this view, the polynomial is handled as an univariate polynomial over the ring $R[x_0,\dots,x_{d-2}]$. \item A symmetric view, which is symmetric with respect to all variables, seeing the polynomials as element of $R[x_0,\dots,x_{d-1}]$. \end{itemize} The default view is the recursive view, therefore all functors are designed such that there default version performs the operation with respect to this view. \ccRefines \ccConstants \ccVariable{const int d;}{The dimension and the number of variables respectively.} \ccTypes \ccNestedType{Polynomial_d}{ Type representing $R[x_0,\dots,x_{d-1}]$.}\ccGlue \ccNestedType{Coefficient }{ Type representing $R[x_0,\dots,x_{d-2}]$.}\ccGlue \ccNestedType{Innermost_coefficient}{ Type representing the base ring $R$.} \ccHeading{Functors} In case a functor is not provided it is set to \ccc{CGAL::Null_functor}. %,e.g., \ccc{Sign_at} if \ccc{Innermost_coefficient} is not \ccc{RealEmbeddable}. \ccSetTwoColumns{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}{} \ccNestedType{Construct_polynomial} {A model of \ccc{PolynomialTraits_d::ConstructPolynomial}.} \ccNestedType{Get_coefficient} {A model of \ccc{PolynomialTraits_d::GetCoefficient}.} \ccNestedType{Get_innermost_coefficient} {A model of \ccc{PolynomialTraits_d::GetInnermostCoefficient}.} \ccNestedType{Swap} { A model of \ccc{PolynomialTraits_d::Swap}.} \ccNestedType{Move} { A model of \ccc{PolynomialTraits_d::Move}.} \ccNestedType{Degree} { A model of \ccc{PolynomialTraits_d::Degree}.} \ccNestedType{Total_degree} { A model of \ccc{PolynomialTraits_d::TotalDegree}.} \ccNestedType{Leading_coefficient} { A model of \ccc{PolynomialTraits_d::LeadingCoefficient}.} \ccNestedType{Innermost_leading_coefficient} {A model of \ccc{PolynomialTraits_d::InnermostLeadingCoefficient}.} \ccNestedType{Canonicalize} { A model of \ccc{PolynomialTraits_d::Canonicalize}.} \ccNestedType{Differentiate} { A model of \ccc{PolynomialTraits_d::Differentiate}.} %Evaluation \ccNestedType{Evaluate} { A model of \ccc{PolynomialTraits_d::Evaluate}.} \ccNestedType{Evaluate_homogeneous} { A model of \ccc{PolynomialTraits_d::EvaluateHomogeneous}.} \ccNestedType{Is_zero_at} { A model of \ccc{PolynomialTraits_d::IsZeroAt}.} \ccNestedType{Is_zero_at_homogeneous} { A model of \ccc{PolynomialTraits_d::IsZeroAtHomogeneous}.} \ccNestedType{Sign_at}{ A model of \ccc{PolynomialTraits_d::SignAt}. In case \ccc{Innermost_coefficient} is not \ccc{RealEmbeddable} this is \ccc{CGAL::Null_functor}.} \ccNestedType{Sign_at_homogeneous}{ A model of \ccc{PolynomialTraits_d::SignHomogeneous}. In case \ccc{Innermost_coefficient} is not \ccc{RealEmbeddable} this is \ccc{CGAL::Null_functor}.} \ccNestedType{Compare}{ A model of \ccc{PolynomialTraits_d::Compare}. In case \ccc{Innermost_coefficient} is not \ccc{LessThanComparable} this is \ccc{CGAL::Null_functor}.} \ccHeading{For \ccc{PolynomialToolBox}: } \ccNestedType{Univariate_content}{ In case \ccc{PolynomialTraits_d::Coefficient} is {\bf not} a model of \ccc{UFDomain}, this is \ccc{CGAL::Null_type}, otherwise this is a model of \ccc{PolynomialTraits_d::UnivariateContent}.} \begin{ccAdvanced} \ccNestedType{Multivariate_content}{ In case \ccc{PolynomialTraits_d::Innermost_coefficient} is {\bf not} a model of \ccc{UFDomain}, this is \ccc{CGAL::Null_type}, otherwise this is a model of \ccc{PolynomialTraits_d::MultivariateContent}.} \end{ccAdvanced} %Manipulation \ccNestedType{Shift}{ A model of \ccc{PolynomialTraits_d::Shift}.} \ccNestedType{Negate}{ A model of \ccc{PolynomialTraits_d::Negate}.} \ccNestedType{Invert}{ A model of \ccc{PolynomialTraits_d::Invert}.} \ccNestedType{Translate}{ A model of \ccc{PolynomialTraits_d::Translate}.} \ccNestedType{Translate_homogeneous}{ A model of \ccc{PolynomialTraits_d::TranslateHomogeneous}.} \ccNestedType{Scale}{ A model of \ccc{PolynomialTraits_d::Scale}.} \ccNestedType{Scale_homogeneous}{ A model of \ccc{PolynomialTraits_d::ScaleHomogeneous}.} \begin{ccAdvanced} //\ccNestedType{Scale_up}{ A model of \ccc{PolynomialTraits_d::ScaleUp, return $p(a*x)$}.} //\ccNestedType{Scale_down}{ A model of \ccc{PolynomialTraits_d::ScaleDown, return $b^{degree}*p(x/b)$}.} \end{ccAdvanced} %unary operations \ccNestedType{Make_square_free}{ A model of \ccc{PolynomialTraits_d::MakeSquareFree}.} \ccNestedType{Square_free_factorization}{ In case \ccc{PolynomialTraits::Polynomial_d} is not a model of \ccc{UFDomain}, this is of type \ccc{CGAL::Null_type}, otherwise this is a model of \ccc{PolynomialTraits_d::SquareFreeFactorization}.} %pseudo division \ccNestedType{Pseudo_division }{ A model of \ccc{PolynomialTraits_d::Pseudo_division}.} \ccNestedType{Pseudo_division_remainder}{ A model of \ccc{PolynomialTraits_d::Pseudo_division_remainder}.} \ccNestedType{Pseudo_division_quotient }{ A model of \ccc{PolynomialTraits_d::Pseudo_division_quotient}.} %utcf \ccNestedType{Gcd_up_to_constant_factor}{ A model of \ccc{PolynomialTraits_d::GcdUpToConstantFactor}.} \ccNestedType{Integral_division_up_to_constant_factor}{ A model of \ccc{PolynomialTraits_d::IntegralDivisionUpToConstantFactor}.} \ccNestedType{Content_up_to_constant_factor}{ A model of \ccc{PolynomialTraits_d::ContentUpToConstantFactor}.} \ccNestedType{Square_free_factorization_up_to_constant_factor}{ A model of \ccc{PolynomialTraits_d::SquareFreeFactorizationUpToConstantFactor}.} %resultant \ccNestedType{Resultant}{ A model of \ccc{PolynomialTraits_d::Resultant}.} \ccSeeAlso \ccRefIdfierPage{AlgebraicStructureTraits}\\ \ccRefIdfierPage{Polynomial_d}\\ \end{ccRefConcept}