All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cc.redberry.rings.scaladsl.Syntax.scala Maven / Gradle / Ivy

The newest version!
package cc.redberry.rings.scaladsl

import scala.language.{implicitConversions, postfixOps}

trait RingSyntax {
  implicit def ringOps[E](lhs: E)(implicit ringSupport: RingSupport[E]): RingOps[E] = new RingOps[E](lhs)(ringSupport.ringEv(lhs))
}

trait PolynomialCfSyntax {
  implicit def polynomialOps[Poly <: IPolynomial[Poly], E](lhs: Poly)(implicit pRing: IPolynomialRing[Poly, E]): PolynomialCfOps[Poly, E] = new PolynomialCfOps[Poly, E](lhs)(pRing)
}

trait UnivariateSyntax {
  implicit def univariateOps[Poly <: IUnivariatePolynomial[Poly]](lhs: Poly)(implicit ringSupport: RingSupport[Poly]): UnivariateOps[Poly] = new UnivariateOps[Poly](lhs)(ringSupport.ringEv(lhs))
}

trait UnivariateCfSyntax {
  implicit def univariateCfOps[Poly <: IUnivariatePolynomial[Poly], E](lhs: Poly)(implicit ring: IUnivariateRing[Poly, E])
  : UnivariateCfOps[Poly, E] = new UnivariateCfOps[Poly, E](lhs)(ring)
}

trait MultivariateSyntax {
  implicit def multivariateOps[Poly <: AMultivariatePolynomial[_, Poly]]
  (lhs: Poly)(implicit ringSupport: RingSupport[Poly]): MultivariateOps[Poly]
  = new MultivariateOps[Poly](lhs)(ringSupport.ringEv(lhs))

  implicit def multivariateTermOps[Term <: AMonomial[Term], Poly <: AMultivariatePolynomial[Term, Poly]]
  (lhs: Poly)(implicit ringSupport: RingSupport[Poly]): MultivariateTermOps[Term, Poly]
  = new MultivariateTermOps[Term, Poly](lhs)(ringSupport.ringEv(lhs))

  implicit def multivariateTermOpsZp64
  (lhs: MultivariatePolynomialZp64)(implicit ringSupport: RingSupport[MultivariatePolynomialZp64])
  : MultivariateTermOps[MonomialZp64, MultivariatePolynomialZp64]
  = new MultivariateTermOps[MonomialZp64, MultivariatePolynomialZp64](lhs)(ringSupport.ringEv(lhs))

  implicit def multivariateTermOpsE[E]
  (lhs: MultivariatePolynomial[E])(implicit ringSupport: RingSupport[MultivariatePolynomial[E]])
  : MultivariateTermOps[Monomial[E], MultivariatePolynomial[E]]
  = new MultivariateTermOps[Monomial[E], MultivariatePolynomial[E]](lhs)(ringSupport.ringEv(lhs))
}

trait MultivariateCfSyntax {
  implicit def multivariateCfOps[Term <: AMonomial[Term], Poly <: AMultivariatePolynomial[Term, Poly], E]
  (lhs: Poly)(implicit ring: IMultivariateRing[Term, Poly, E]): MultivariateCfOps[Term, Poly, E]
  = new MultivariateCfOps[Term, Poly, E](lhs)(ring)

  implicit def multivariateCfOpsZp64
  (lhs: MultivariatePolynomialZp64)(implicit ring: IMultivariateRing[MonomialZp64, MultivariatePolynomialZp64, Long])
  : MultivariateCfOps[MonomialZp64, MultivariatePolynomialZp64, Long]
  = new MultivariateCfOps[MonomialZp64, MultivariatePolynomialZp64, Long](lhs)(ring)

  implicit def multivariateCfOpsE[E]
  (lhs: MultivariatePolynomial[E])(implicit ring: IMultivariateRing[Monomial[E], MultivariatePolynomial[E], E])
  : MultivariateCfOps[Monomial[E], MultivariatePolynomial[E], E]
  = new MultivariateCfOps[Monomial[E], MultivariatePolynomial[E], E](lhs)(ring)

  def multivariateImplicits[Term <: AMonomial[Term], Poly <: AMultivariatePolynomial[Term, Poly], E]
  (implicit ring: IMultivariateRing[Term, Poly, E])
  : Poly => MultivariateCfOps[Term, Poly, E] = p => new MultivariateCfOps[ring.MonomialType, ring.ElementType, ring.CoefficientType](p)(ring)
}

trait CfSyntax {
  implicit def cfOps[E, Poly <: IPolynomial[Poly]](self: E)(implicit pRing: IPolynomialRing[Poly, E])
  = new CfOps[E, Poly](self)(pRing)
}

trait IntegerSyntax {
  implicit def integerOps[E](self: Int)(implicit ring: Ring[E]) = new IntegerOps[E](self)(ring)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy