\begin{ccRefConcept}{PolynomialTraits_d} \ccDefinition A model of \ccc{PolynomialTraits_d} is associated to a type \ccc{Polynomial_d}. The type \ccc{Polynomial_d} represents a multivariate polynomial. 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. Note that univariate polynomials are not excluded by this concept. In this case $d$ is just set to one. \ccc{PolynomialTraits_d} provides two different views on the multivariate polynomial. \begin{itemize} \item The recursive view: In this view, the polynomials is considered as an element of $R[x_0,\dots,x_{d-2}][x_{d-1}]$. That is, the polynomial is treated as a univariate polynomial over the ring $R[x_0,\dots,x_{d-2}]$. \item The symmetric or multivariate view: This view is symmetric with respect to all variables, considering the polynomials as element of $R [x_0,\dots,x_{d-1}]$. \end{itemize} Many functors consider the polynomial as a univariate polynomial in one variable. By default this is the outermost variable $x_{d-1}$. However, in general it is possible to select a certain variable. \ccRefines \ccc{AlgebraicStructureTraits} \ccConstants \ccVariable{static 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 }{ Type representing $R[x_0,\dots,x_{d-2}]$.}\ccGlue \ccNestedType{Innermost_coefficient_type}{ Type representing the base ring $R$.} \ccNestedType{template struct Rebind} {This nested template class has to define a type \ccc{Other} which is a model of the concept \ccc{PolynomialTraits_d}, where \ccc{d} is the number of variables and \ccc{T} the \ccc{Innermost_coefficient_type}.} \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_type} 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{Degree_vector} { A model of \ccc{PolynomialTraits_d::DegreeVector}.} \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{Substitute} { A model of \ccc{PolynomialTraits_d::Substitute}.} \ccNestedType{Substitute_homogeneous} { A model of \ccc{PolynomialTraits_d::SubstituteHomogeneous}.} \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_type} is not \ccc{RealEmbeddable} this is \ccc{CGAL::Null_functor}.} \ccNestedType{Sign_at_homogeneous}{ A model of \ccc{PolynomialTraits_d::SignAtHomogeneous}.\\ In case \ccc{Innermost_coefficient_type} is not \ccc{RealEmbeddable} this is \ccc{CGAL::Null_functor}.} \ccNestedType{Compare}{ A model of \ccc{PolynomialTraits_d::Compare}. \\ In case \ccc{Innermost_coefficient_type} is not \ccc{RealEmbeddable} this is \ccc{CGAL::Null_functor}.} \ccNestedType{Univariate_content}{ In case \ccc{PolynomialTraits_d::Coefficient_type} is {\bf not} a model of \ccc{UniqueFactorizationDomain}, 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_type} is {\bf not} a model of \ccc{UniqueFactorizationDomain}, 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}.}\ccGlue \ccNestedType{Negate}{ A model of \ccc{PolynomialTraits_d::Negate}.}\ccGlue \ccNestedType{Invert}{ A model of \ccc{PolynomialTraits_d::Invert}.} \ccNestedType{Translate}{ A model of \ccc{PolynomialTraits_d::Translate}.}\ccGlue \ccNestedType{Translate_homogeneous} { A model of \ccc{PolynomialTraits_d::TranslateHomogeneous}.} \ccNestedType{Scale}{ A model of \ccc{PolynomialTraits_d::Scale}.}\ccGlue \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}.}\ccGlue \ccNestedType{Square_free_factorize} { In case \ccc{PolynomialTraits::Polynomial_d} is not a model of \ccc{UniqueFactorizationDomain}, this is of type \ccc{CGAL::Null_type}, otherwise this is a model of \ccc{PolynomialTraits_d::SquareFreeFactorize}.} %pseudo division \ccNestedType{Pseudo_division } { A model of \ccc{PolynomialTraits_d::PseudoDivision}.}\ccGlue \ccNestedType{Pseudo_division_remainder} { A model of \ccc{PolynomialTraits_d::PseudoDivisionRemainder}.}\ccGlue \ccNestedType{Pseudo_division_quotient } { A model of \ccc{PolynomialTraits_d::PseudoDivisionQuotient}.} %utcf \ccNestedType{Gcd_up_to_constant_factor} { A model of \ccc{PolynomialTraits_d::GcdUpToConstantFactor}.} \ccGlue \ccNestedType{Integral_division_up_to_constant_factor} { A model of \ccc{PolynomialTraits_d::IntegralDivisionUpToConstantFactor}.} \ccGlue \ccNestedType{Content_up_to_constant_factor} { A model of \ccc{PolynomialTraits_d::UnivariateContentUpToConstantFactor}.} \ccGlue \ccNestedType{Square_free_factorize_up_to_constant_factor} { A model of \ccc{PolynomialTraits_d::SquareFreeFactorizeUpToConstantFactor}.} %resultant \ccNestedType{Resultant}{ A model of \ccc{PolynomialTraits_d::Resultant}.} % This was added by Michael Kerber, no review so far %\ccNestedType{Polynomial_subresultants} %{ A model of \ccc{PolynomialTraits_d::PolynomialSubresultant}.} %\ccNestedType{Principal_subresultants} %{ A model of \ccc{PolynomialTraits_d::PrincipalSubresultant}.} %\ccNestedType{Sturm_habicht_sequence} %{ A model of \ccc{PolynomialTraits_d::SturmHabichtSequence}.} %\ccNestedType{Sturm_habicht_sequence_with_cofactors} %{ A model of \ccc{PolynomialTraits_d::SturmHabichtSequenceWithCofactors}.} %\ccNestedType{Principal_sturm_habicht_sequence} %{ A model of \ccc{PolynomialTraits_d::PrincipalSturmHabichtSequence}.} \ccSeeAlso \ccRefIdfierPage{Polynomial_d}\\ \ccHasModels \ccRefIdfierPage{CGAL::Polynomial_traits_d} \end{ccRefConcept}