Remove Polynomial interface, fix consequent platform clashes. Add invariance.

This commit is contained in:
Gleb Minaev 2022-07-27 14:31:55 +03:00
parent 0c6ad35c13
commit c2025ee1c9
5 changed files with 160 additions and 23 deletions

View File

@ -19,7 +19,7 @@ import kotlin.math.max
* *
* @param C the type of constants. * @param C the type of constants.
*/ */
public data class LabeledPolynomial<C> public data class LabeledPolynomial<out C>
@PublishedApi @PublishedApi
internal constructor( internal constructor(
/** /**
@ -63,7 +63,7 @@ internal constructor(
* @usesMathJax * @usesMathJax
*/ */
public val coefficients: Map<Map<Symbol, UInt>, C> public val coefficients: Map<Map<Symbol, UInt>, C>
) : Polynomial<C> { ) {
override fun toString(): String = "LabeledPolynomial$coefficients" override fun toString(): String = "LabeledPolynomial$coefficients"
} }

View File

@ -19,7 +19,7 @@ import kotlin.math.min
* *
* @param C the type of constants. * @param C the type of constants.
*/ */
public data class ListPolynomial<C>( public data class ListPolynomial<out C>(
/** /**
* List that contains coefficients of the polynomial. * List that contains coefficients of the polynomial.
* *
@ -48,7 +48,7 @@ public data class ListPolynomial<C>(
* @usesMathJax * @usesMathJax
*/ */
public val coefficients: List<C> public val coefficients: List<C>
) : Polynomial<C> { ) {
override fun toString(): String = "ListPolynomial$coefficients" override fun toString(): String = "ListPolynomial$coefficients"
} }

View File

@ -18,7 +18,7 @@ import kotlin.math.max
* *
* @param C the type of constants. * @param C the type of constants.
*/ */
public data class NumberedPolynomial<C> public data class NumberedPolynomial<out C>
@PublishedApi @PublishedApi
internal constructor( internal constructor(
/** /**
@ -47,7 +47,7 @@ internal constructor(
* @usesMathJax * @usesMathJax
*/ */
public val coefficients: Map<List<UInt>, C> public val coefficients: Map<List<UInt>, C>
) : Polynomial<C> { ) {
override fun toString(): String = "NumberedPolynomial$coefficients" override fun toString(): String = "NumberedPolynomial$coefficients"
} }

View File

@ -11,11 +11,6 @@ import kotlin.js.JsName
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
/**
* Abstraction of polynomials.
*/
public interface Polynomial<C>
/** /**
* Abstraction of ring of polynomials of type [P] over ring of constants of type [C]. * Abstraction of ring of polynomials of type [P] over ring of constants of type [C].
* *
@ -23,24 +18,27 @@ public interface Polynomial<C>
* @param P the type of polynomials. * @param P the type of polynomials.
*/ */
@Suppress("INAPPLICABLE_JVM_NAME", "PARAMETER_NAME_CHANGED_ON_OVERRIDE") // FIXME: Waiting for KT-31420 @Suppress("INAPPLICABLE_JVM_NAME", "PARAMETER_NAME_CHANGED_ON_OVERRIDE") // FIXME: Waiting for KT-31420
public interface PolynomialSpace<C, P: Polynomial<C>> : Ring<P> { public interface PolynomialSpace<C, P> : Ring<P> {
/** /**
* Returns sum of the constant and the integer represented as a constant (member of underlying ring). * Returns sum of the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to adding [other] copies of unit of underlying ring to [this]. * The operation is equivalent to adding [other] copies of unit of underlying ring to [this].
*/ */
@JvmName("plusConstantInt")
public operator fun C.plus(other: Int): C public operator fun C.plus(other: Int): C
/** /**
* Returns difference between the constant and the integer represented as a constant (member of underlying ring). * Returns difference between the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to subtraction [other] copies of unit of underlying ring from [this]. * The operation is equivalent to subtraction [other] copies of unit of underlying ring from [this].
*/ */
@JvmName("minusConstantInt")
public operator fun C.minus(other: Int): C public operator fun C.minus(other: Int): C
/** /**
* Returns product of the constant and the integer represented as a constant (member of underlying ring). * Returns product of the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to sum of [other] copies of [this]. * The operation is equivalent to sum of [other] copies of [this].
*/ */
@JvmName("timesConstantInt")
public operator fun C.times(other: Int): C public operator fun C.times(other: Int): C
/** /**
@ -48,18 +46,21 @@ public interface PolynomialSpace<C, P: Polynomial<C>> : Ring<P> {
* *
* The operation is equivalent to adding [this] copies of unit of underlying ring to [other]. * The operation is equivalent to adding [this] copies of unit of underlying ring to [other].
*/ */
@JvmName("plusIntConstant")
public operator fun Int.plus(other: C): C public operator fun Int.plus(other: C): C
/** /**
* Returns difference between the integer represented as a constant (member of underlying ring) and the constant. * Returns difference between the integer represented as a constant (member of underlying ring) and the constant.
* *
* The operation is equivalent to subtraction [this] copies of unit of underlying ring from [other]. * The operation is equivalent to subtraction [this] copies of unit of underlying ring from [other].
*/ */
@JvmName("minusIntConstant")
public operator fun Int.minus(other: C): C public operator fun Int.minus(other: C): C
/** /**
* Returns product of the integer represented as a constant (member of underlying ring) and the constant. * Returns product of the integer represented as a constant (member of underlying ring) and the constant.
* *
* The operation is equivalent to sum of [this] copies of [other]. * The operation is equivalent to sum of [this] copies of [other].
*/ */
@JvmName("timesIntConstant")
public operator fun Int.times(other: C): C public operator fun Int.times(other: C): C
/** /**
@ -167,27 +168,33 @@ public interface PolynomialSpace<C, P: Polynomial<C>> : Ring<P> {
/** /**
* Returns sum of the constant represented as a polynomial and the polynomial. * Returns sum of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("plusConstantPolynomial")
public operator fun C.plus(other: P): P public operator fun C.plus(other: P): P
/** /**
* Returns difference between the constant represented as a polynomial and the polynomial. * Returns difference between the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("minusConstantPolynomial")
public operator fun C.minus(other: P): P public operator fun C.minus(other: P): P
/** /**
* Returns product of the constant represented as a polynomial and the polynomial. * Returns product of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("timesConstantPolynomial")
public operator fun C.times(other: P): P public operator fun C.times(other: P): P
/** /**
* Returns sum of the constant represented as a polynomial and the polynomial. * Returns sum of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("plusPolynomialConstant")
public operator fun P.plus(other: C): P public operator fun P.plus(other: C): P
/** /**
* Returns difference between the constant represented as a polynomial and the polynomial. * Returns difference between the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("minusPolynomialConstant")
public operator fun P.minus(other: C): P public operator fun P.minus(other: C): P
/** /**
* Returns product of the constant represented as a polynomial and the polynomial. * Returns product of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("timesPolynomialConstant")
public operator fun P.times(other: C): P public operator fun P.times(other: C): P
/** /**
@ -252,7 +259,7 @@ public interface PolynomialSpace<C, P: Polynomial<C>> : Ring<P> {
* @param A the type of algebraic structure (precisely, of ring) provided for constants. * @param A the type of algebraic structure (precisely, of ring) provided for constants.
*/ */
@Suppress("INAPPLICABLE_JVM_NAME") // FIXME: Waiting for KT-31420 @Suppress("INAPPLICABLE_JVM_NAME") // FIXME: Waiting for KT-31420
public interface PolynomialSpaceOverRing<C, P: Polynomial<C>, out A: Ring<C>> : PolynomialSpace<C, P> { public interface PolynomialSpaceOverRing<C, P, out A: Ring<C>> : PolynomialSpace<C, P> {
/** /**
* Underlying ring of constants. Its operations on constants are inherited by local operations on constants. * Underlying ring of constants. Its operations on constants are inherited by local operations on constants.
@ -264,18 +271,21 @@ public interface PolynomialSpaceOverRing<C, P: Polynomial<C>, out A: Ring<C>> :
* *
* The operation is equivalent to adding [other] copies of unit of underlying ring to [this]. * The operation is equivalent to adding [other] copies of unit of underlying ring to [this].
*/ */
@JvmName("plusConstantInt")
public override operator fun C.plus(other: Int): C = ring { addMultipliedByDoubling(this@plus, one, other) } public override operator fun C.plus(other: Int): C = ring { addMultipliedByDoubling(this@plus, one, other) }
/** /**
* Returns difference between the constant and the integer represented as a constant (member of underlying ring). * Returns difference between the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to subtraction [other] copies of unit of underlying ring from [this]. * The operation is equivalent to subtraction [other] copies of unit of underlying ring from [this].
*/ */
@JvmName("minusConstantInt")
public override operator fun C.minus(other: Int): C = ring { addMultipliedByDoubling(this@minus, one, -other) } public override operator fun C.minus(other: Int): C = ring { addMultipliedByDoubling(this@minus, one, -other) }
/** /**
* Returns product of the constant and the integer represented as a constant (member of underlying ring). * Returns product of the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to sum of [other] copies of [this]. * The operation is equivalent to sum of [other] copies of [this].
*/ */
@JvmName("timesConstantInt")
public override operator fun C.times(other: Int): C = ring { multiplyByDoubling(this@times, other) } public override operator fun C.times(other: Int): C = ring { multiplyByDoubling(this@times, other) }
/** /**
@ -283,18 +293,21 @@ public interface PolynomialSpaceOverRing<C, P: Polynomial<C>, out A: Ring<C>> :
* *
* The operation is equivalent to adding [this] copies of unit of underlying ring to [other]. * The operation is equivalent to adding [this] copies of unit of underlying ring to [other].
*/ */
@JvmName("plusIntConstant")
public override operator fun Int.plus(other: C): C = ring { addMultipliedByDoubling(other, one, this@plus) } public override operator fun Int.plus(other: C): C = ring { addMultipliedByDoubling(other, one, this@plus) }
/** /**
* Returns difference between the integer represented as a constant (member of underlying ring) and the constant. * Returns difference between the integer represented as a constant (member of underlying ring) and the constant.
* *
* The operation is equivalent to subtraction [this] copies of unit of underlying ring from [other]. * The operation is equivalent to subtraction [this] copies of unit of underlying ring from [other].
*/ */
@JvmName("minusIntConstant")
public override operator fun Int.minus(other: C): C = ring { addMultipliedByDoubling(-other, one, this@minus) } public override operator fun Int.minus(other: C): C = ring { addMultipliedByDoubling(-other, one, this@minus) }
/** /**
* Returns product of the integer represented as a constant (member of underlying ring) and the constant. * Returns product of the integer represented as a constant (member of underlying ring) and the constant.
* *
* The operation is equivalent to sum of [this] copies of [other]. * The operation is equivalent to sum of [this] copies of [other].
*/ */
@JvmName("timesIntConstant")
public override operator fun Int.times(other: C): C = ring { multiplyByDoubling(other, this@times) } public override operator fun Int.times(other: C): C = ring { multiplyByDoubling(other, this@times) }
/** /**
@ -341,69 +354,81 @@ public interface PolynomialSpaceOverRing<C, P: Polynomial<C>, out A: Ring<C>> :
* @param P the type of polynomials. * @param P the type of polynomials.
*/ */
@Suppress("INAPPLICABLE_JVM_NAME") // FIXME: Waiting for KT-31420 @Suppress("INAPPLICABLE_JVM_NAME") // FIXME: Waiting for KT-31420
public interface MultivariatePolynomialSpace<C, V, P: Polynomial<C>>: PolynomialSpace<C, P> { public interface MultivariatePolynomialSpace<C, V, P>: PolynomialSpace<C, P> {
/** /**
* Returns sum of the variable represented as a monic monomial and the integer represented as a constant polynomial. * Returns sum of the variable represented as a monic monomial and the integer represented as a constant polynomial.
*/ */
@JvmName("plusVariableInt") @JvmName("plusVariableInt")
@JsName("plusVariableInt")
public operator fun V.plus(other: Int): P public operator fun V.plus(other: Int): P
/** /**
* Returns difference between the variable represented as a monic monomial and the integer represented as a constant polynomial. * Returns difference between the variable represented as a monic monomial and the integer represented as a constant polynomial.
*/ */
@JvmName("minusVariableInt") @JvmName("minusVariableInt")
@JsName("minusVariableInt")
public operator fun V.minus(other: Int): P public operator fun V.minus(other: Int): P
/** /**
* Returns product of the variable represented as a monic monomial and the integer represented as a constant polynomial. * Returns product of the variable represented as a monic monomial and the integer represented as a constant polynomial.
*/ */
@JvmName("timesVariableInt") @JvmName("timesVariableInt")
@JsName("timesVariableInt")
public operator fun V.times(other: Int): P public operator fun V.times(other: Int): P
/** /**
* Returns sum of the integer represented as a constant polynomial and the variable represented as a monic monomial. * Returns sum of the integer represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("plusIntVariable") @JvmName("plusIntVariable")
@JsName("plusIntVariable")
public operator fun Int.plus(other: V): P public operator fun Int.plus(other: V): P
/** /**
* Returns difference between the integer represented as a constant polynomial and the variable represented as a monic monomial. * Returns difference between the integer represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("minusIntVariable") @JvmName("minusIntVariable")
@JsName("minusIntVariable")
public operator fun Int.minus(other: V): P public operator fun Int.minus(other: V): P
/** /**
* Returns product of the integer represented as a constant polynomial and the variable represented as a monic monomial. * Returns product of the integer represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("timesIntVariable") @JvmName("timesIntVariable")
@JsName("timesIntVariable")
public operator fun Int.times(other: V): P public operator fun Int.times(other: V): P
/** /**
* Returns sum of the variable represented as a monic monomial and the constant represented as a constant polynomial. * Returns sum of the variable represented as a monic monomial and the constant represented as a constant polynomial.
*/ */
@JvmName("plusVariableConstant") @JvmName("plusVariableConstant")
@JsName("plusVariableConstant")
public operator fun V.plus(other: C): P public operator fun V.plus(other: C): P
/** /**
* Returns difference between the variable represented as a monic monomial and the constant represented as a constant polynomial. * Returns difference between the variable represented as a monic monomial and the constant represented as a constant polynomial.
*/ */
@JvmName("minusVariableConstant") @JvmName("minusVariableConstant")
@JsName("minusVariableConstant")
public operator fun V.minus(other: C): P public operator fun V.minus(other: C): P
/** /**
* Returns product of the variable represented as a monic monomial and the constant represented as a constant polynomial. * Returns product of the variable represented as a monic monomial and the constant represented as a constant polynomial.
*/ */
@JvmName("timesVariableConstant") @JvmName("timesVariableConstant")
@JsName("timesVariableConstant")
public operator fun V.times(other: C): P public operator fun V.times(other: C): P
/** /**
* Returns sum of the constant represented as a constant polynomial and the variable represented as a monic monomial. * Returns sum of the constant represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("plusConstantVariable") @JvmName("plusConstantVariable")
@JsName("plusConstantVariable")
public operator fun C.plus(other: V): P public operator fun C.plus(other: V): P
/** /**
* Returns difference between the constant represented as a constant polynomial and the variable represented as a monic monomial. * Returns difference between the constant represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("minusConstantVariable") @JvmName("minusConstantVariable")
@JsName("minusConstantVariable")
public operator fun C.minus(other: V): P public operator fun C.minus(other: V): P
/** /**
* Returns product of the constant represented as a constant polynomial and the variable represented as a monic monomial. * Returns product of the constant represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("timesConstantVariable") @JvmName("timesConstantVariable")
@JsName("timesConstantVariable")
public operator fun C.times(other: V): P public operator fun C.times(other: V): P
/** /**

View File

@ -14,7 +14,7 @@ import kotlin.jvm.JvmName
/** /**
* Abstraction of rational function. * Abstraction of rational function.
*/ */
public interface RationalFunction<C, P: Polynomial<C>> { public interface RationalFunction<C, P> {
public val numerator: P public val numerator: P
public val denominator: P public val denominator: P
public operator fun component1(): P = numerator public operator fun component1(): P = numerator
@ -30,24 +30,27 @@ public interface RationalFunction<C, P: Polynomial<C>> {
* @param R the type of rational functions. * @param R the type of rational functions.
*/ */
@Suppress("INAPPLICABLE_JVM_NAME", "PARAMETER_NAME_CHANGED_ON_OVERRIDE") // FIXME: Waiting for KT-31420 @Suppress("INAPPLICABLE_JVM_NAME", "PARAMETER_NAME_CHANGED_ON_OVERRIDE") // FIXME: Waiting for KT-31420
public interface RationalFunctionSpace<C, P: Polynomial<C>, R: RationalFunction<C, P>> : Ring<R> { public interface RationalFunctionSpace<C, P, R: RationalFunction<C, P>> : Ring<R> {
/** /**
* Returns sum of the constant and the integer represented as a constant (member of underlying ring). * Returns sum of the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to adding [other] copies of unit of underlying ring to [this]. * The operation is equivalent to adding [other] copies of unit of underlying ring to [this].
*/ */
@JvmName("plusConstantInt")
public operator fun C.plus(other: Int): C public operator fun C.plus(other: Int): C
/** /**
* Returns difference between the constant and the integer represented as a constant (member of underlying ring). * Returns difference between the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to subtraction [other] copies of unit of underlying ring from [this]. * The operation is equivalent to subtraction [other] copies of unit of underlying ring from [this].
*/ */
@JvmName("minusConstantInt")
public operator fun C.minus(other: Int): C public operator fun C.minus(other: Int): C
/** /**
* Returns product of the constant and the integer represented as a constant (member of underlying ring). * Returns product of the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to sum of [other] copies of [this]. * The operation is equivalent to sum of [other] copies of [this].
*/ */
@JvmName("timesConstantInt")
public operator fun C.times(other: Int): C public operator fun C.times(other: Int): C
/** /**
@ -55,18 +58,21 @@ public interface RationalFunctionSpace<C, P: Polynomial<C>, R: RationalFunction<
* *
* The operation is equivalent to adding [this] copies of unit of underlying ring to [other]. * The operation is equivalent to adding [this] copies of unit of underlying ring to [other].
*/ */
@JvmName("plusIntConstant")
public operator fun Int.plus(other: C): C public operator fun Int.plus(other: C): C
/** /**
* Returns difference between the integer represented as a constant (member of underlying ring) and the constant. * Returns difference between the integer represented as a constant (member of underlying ring) and the constant.
* *
* The operation is equivalent to subtraction [this] copies of unit of underlying ring from [other]. * The operation is equivalent to subtraction [this] copies of unit of underlying ring from [other].
*/ */
@JvmName("minusIntConstant")
public operator fun Int.minus(other: C): C public operator fun Int.minus(other: C): C
/** /**
* Returns product of the integer represented as a constant (member of underlying ring) and the constant. * Returns product of the integer represented as a constant (member of underlying ring) and the constant.
* *
* The operation is equivalent to sum of [this] copies of [other]. * The operation is equivalent to sum of [this] copies of [other].
*/ */
@JvmName("timesIntConstant")
public operator fun Int.times(other: C): C public operator fun Int.times(other: C): C
/** /**
@ -83,18 +89,21 @@ public interface RationalFunctionSpace<C, P: Polynomial<C>, R: RationalFunction<
* *
* The operation is equivalent to adding [other] copies of unit polynomial to [this]. * The operation is equivalent to adding [other] copies of unit polynomial to [this].
*/ */
@JvmName("plusPolynomialInt")
public operator fun P.plus(other: Int): P public operator fun P.plus(other: Int): P
/** /**
* Returns difference between the constant and the integer represented as a polynomial. * Returns difference between the constant and the integer represented as a polynomial.
* *
* The operation is equivalent to subtraction [other] copies of unit polynomial from [this]. * The operation is equivalent to subtraction [other] copies of unit polynomial from [this].
*/ */
@JvmName("minusPolynomialInt")
public operator fun P.minus(other: Int): P public operator fun P.minus(other: Int): P
/** /**
* Returns product of the constant and the integer represented as a polynomial. * Returns product of the constant and the integer represented as a polynomial.
* *
* The operation is equivalent to sum of [other] copies of [this]. * The operation is equivalent to sum of [other] copies of [this].
*/ */
@JvmName("timesPolynomialInt")
public operator fun P.times(other: Int): P public operator fun P.times(other: Int): P
/** /**
@ -102,18 +111,21 @@ public interface RationalFunctionSpace<C, P: Polynomial<C>, R: RationalFunction<
* *
* The operation is equivalent to adding [this] copies of unit polynomial to [other]. * The operation is equivalent to adding [this] copies of unit polynomial to [other].
*/ */
@JvmName("plusIntPolynomial")
public operator fun Int.plus(other: P): P public operator fun Int.plus(other: P): P
/** /**
* Returns difference between the integer represented as a polynomial and the constant. * Returns difference between the integer represented as a polynomial and the constant.
* *
* The operation is equivalent to subtraction [this] copies of unit polynomial from [other]. * The operation is equivalent to subtraction [this] copies of unit polynomial from [other].
*/ */
@JvmName("minusIntPolynomial")
public operator fun Int.minus(other: P): P public operator fun Int.minus(other: P): P
/** /**
* Returns product of the integer represented as a polynomial and the constant. * Returns product of the integer represented as a polynomial and the constant.
* *
* The operation is equivalent to sum of [this] copies of [other]. * The operation is equivalent to sum of [this] copies of [other].
*/ */
@JvmName("timesIntPolynomial")
public operator fun Int.times(other: P): P public operator fun Int.times(other: P): P
/** /**
@ -235,27 +247,33 @@ public interface RationalFunctionSpace<C, P: Polynomial<C>, R: RationalFunction<
/** /**
* Returns sum of the constant represented as a polynomial and the polynomial. * Returns sum of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("plusConstantPolynomial")
public operator fun C.plus(other: P): P public operator fun C.plus(other: P): P
/** /**
* Returns difference between the constant represented as a polynomial and the polynomial. * Returns difference between the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("minusConstantPolynomial")
public operator fun C.minus(other: P): P public operator fun C.minus(other: P): P
/** /**
* Returns product of the constant represented as a polynomial and the polynomial. * Returns product of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("timesConstantPolynomial")
public operator fun C.times(other: P): P public operator fun C.times(other: P): P
/** /**
* Returns sum of the constant represented as a polynomial and the polynomial. * Returns sum of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("plusPolynomialConstant")
public operator fun P.plus(other: C): P public operator fun P.plus(other: C): P
/** /**
* Returns difference between the constant represented as a polynomial and the polynomial. * Returns difference between the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("minusPolynomialConstant")
public operator fun P.minus(other: C): P public operator fun P.minus(other: C): P
/** /**
* Returns product of the constant represented as a polynomial and the polynomial. * Returns product of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("timesPolynomialConstant")
public operator fun P.times(other: C): P public operator fun P.times(other: C): P
/** /**
@ -270,30 +288,37 @@ public interface RationalFunctionSpace<C, P: Polynomial<C>, R: RationalFunction<
/** /**
* Returns the same polynomial. * Returns the same polynomial.
*/ */
@JvmName("unaryPlusPolynomial")
public operator fun P.unaryPlus(): P = this public operator fun P.unaryPlus(): P = this
/** /**
* Returns negation of the polynomial. * Returns negation of the polynomial.
*/ */
@JvmName("unaryMinusPolynomial")
public operator fun P.unaryMinus(): P public operator fun P.unaryMinus(): P
/** /**
* Returns sum of the polynomials. * Returns sum of the polynomials.
*/ */
@JvmName("plusPolynomialPolynomial")
public operator fun P.plus(other: P): P public operator fun P.plus(other: P): P
/** /**
* Returns difference of the polynomials. * Returns difference of the polynomials.
*/ */
@JvmName("minusPolynomialPolynomial")
public operator fun P.minus(other: P): P public operator fun P.minus(other: P): P
/** /**
* Returns product of the polynomials. * Returns product of the polynomials.
*/ */
@JvmName("timesPolynomialPolynomial")
public operator fun P.times(other: P): P public operator fun P.times(other: P): P
/** /**
* Returns quotient of the polynomials as rational function. * Returns quotient of the polynomials as rational function.
*/ */
@JvmName("divPolynomialPolynomial")
public operator fun P.div(other: P): R public operator fun P.div(other: P): R
/** /**
* Raises [arg] to the integer power [exponent]. * Raises [arg] to the integer power [exponent].
*/ */
@JvmName("powerPolynomial")
public fun power(arg: P, exponent: UInt) : P public fun power(arg: P, exponent: UInt) : P
/** /**
@ -308,87 +333,107 @@ public interface RationalFunctionSpace<C, P: Polynomial<C>, R: RationalFunction<
/** /**
* Returns sum of the constant represented as a rational function and the rational function. * Returns sum of the constant represented as a rational function and the rational function.
*/ */
@JvmName("plusConstantRational")
public operator fun C.plus(other: R): R public operator fun C.plus(other: R): R
/** /**
* Returns difference between the constant represented as a polynomial and the rational function. * Returns difference between the constant represented as a polynomial and the rational function.
*/ */
@JvmName("minusConstantRational")
public operator fun C.minus(other: R): R public operator fun C.minus(other: R): R
/** /**
* Returns product of the constant represented as a polynomial and the rational function. * Returns product of the constant represented as a polynomial and the rational function.
*/ */
@JvmName("timesConstantRational")
public operator fun C.times(other: R): R public operator fun C.times(other: R): R
/** /**
* Returns quotient of the constant represented as a polynomial and the rational function. * Returns quotient of the constant represented as a polynomial and the rational function.
*/ */
@JvmName("divConstantRational")
public operator fun C.div(other: R): R public operator fun C.div(other: R): R
/** /**
* Returns sum of the rational function and the constant represented as a rational function. * Returns sum of the rational function and the constant represented as a rational function.
*/ */
@JvmName("plusRationalConstant")
public operator fun R.plus(other: C): R public operator fun R.plus(other: C): R
/** /**
* Returns difference between the rational function and the constant represented as a rational function. * Returns difference between the rational function and the constant represented as a rational function.
*/ */
@JvmName("minusRationalConstant")
public operator fun R.minus(other: C): R public operator fun R.minus(other: C): R
/** /**
* Returns product of the rational function and the constant represented as a rational function. * Returns product of the rational function and the constant represented as a rational function.
*/ */
@JvmName("timesRationalConstant")
public operator fun R.times(other: C): R public operator fun R.times(other: C): R
/** /**
* Returns quotient of the rational function and the constant represented as a rational function. * Returns quotient of the rational function and the constant represented as a rational function.
*/ */
@JvmName("divRationalConstant")
public operator fun R.div(other: C): R public operator fun R.div(other: C): R
/** /**
* Converts the constant [value] to rational function. * Converts the constant [value] to rational function.
*/ */
@JvmName("numberConstant")
public fun number(value: C): R = one * value public fun number(value: C): R = one * value
/** /**
* Converts the constant to rational function. * Converts the constant to rational function.
*/ */
@JvmName("asRationalFunctionConstant")
public fun C.asRationalFunction(): R = number(this) public fun C.asRationalFunction(): R = number(this)
/** /**
* Returns sum of the polynomial represented as a rational function and the rational function. * Returns sum of the polynomial represented as a rational function and the rational function.
*/ */
@JvmName("plusPolynomialRational")
public operator fun P.plus(other: R): R public operator fun P.plus(other: R): R
/** /**
* Returns difference between the polynomial represented as a polynomial and the rational function. * Returns difference between the polynomial represented as a polynomial and the rational function.
*/ */
@JvmName("minusPolynomialRational")
public operator fun P.minus(other: R): R public operator fun P.minus(other: R): R
/** /**
* Returns product of the polynomial represented as a polynomial and the rational function. * Returns product of the polynomial represented as a polynomial and the rational function.
*/ */
@JvmName("timesPolynomialRational")
public operator fun P.times(other: R): R public operator fun P.times(other: R): R
/** /**
* Returns quotient of the polynomial represented as a polynomial and the rational function. * Returns quotient of the polynomial represented as a polynomial and the rational function.
*/ */
@JvmName("divPolynomialRational")
public operator fun P.div(other: R): R public operator fun P.div(other: R): R
/** /**
* Returns sum of the rational function and the polynomial represented as a rational function. * Returns sum of the rational function and the polynomial represented as a rational function.
*/ */
@JvmName("plusRationalPolynomial")
public operator fun R.plus(other: P): R public operator fun R.plus(other: P): R
/** /**
* Returns difference between the rational function and the polynomial represented as a rational function. * Returns difference between the rational function and the polynomial represented as a rational function.
*/ */
@JvmName("minusRationalPolynomial")
public operator fun R.minus(other: P): R public operator fun R.minus(other: P): R
/** /**
* Returns product of the rational function and the polynomial represented as a rational function. * Returns product of the rational function and the polynomial represented as a rational function.
*/ */
@JvmName("timesRationalPolynomial")
public operator fun R.times(other: P): R public operator fun R.times(other: P): R
/** /**
* Returns quotient of the rational function and the polynomial represented as a rational function. * Returns quotient of the rational function and the polynomial represented as a rational function.
*/ */
@JvmName("divRationalPolynomial")
public operator fun R.div(other: P): R public operator fun R.div(other: P): R
/** /**
* Converts the polynomial [value] to rational function. * Converts the polynomial [value] to rational function.
*/ */
@JvmName("numberPolynomial")
public fun number(value: P): R = one * value public fun number(value: P): R = one * value
/** /**
* Converts the polynomial to rational function. * Converts the polynomial to rational function.
*/ */
@JvmName("asRationalFunctionPolynomial")
public fun P.asRationalFunction(): R = number(this) public fun P.asRationalFunction(): R = number(this)
/** /**
@ -462,7 +507,7 @@ public interface RationalFunctionSpace<C, P: Polynomial<C>, R: RationalFunction<
@Suppress("INAPPLICABLE_JVM_NAME") // FIXME: Waiting for KT-31420 @Suppress("INAPPLICABLE_JVM_NAME") // FIXME: Waiting for KT-31420
public interface RationalFunctionSpaceOverRing< public interface RationalFunctionSpaceOverRing<
C, C,
P: Polynomial<C>, P,
R: RationalFunction<C, P>, R: RationalFunction<C, P>,
out A: Ring<C> out A: Ring<C>
> : RationalFunctionSpace<C, P, R> { > : RationalFunctionSpace<C, P, R> {
@ -477,18 +522,21 @@ public interface RationalFunctionSpaceOverRing<
* *
* The operation is equivalent to adding [other] copies of unit of underlying ring to [this]. * The operation is equivalent to adding [other] copies of unit of underlying ring to [this].
*/ */
@JvmName("plusConstantInt")
public override operator fun C.plus(other: Int): C = ring { addMultipliedByDoubling(this@plus, one, other) } public override operator fun C.plus(other: Int): C = ring { addMultipliedByDoubling(this@plus, one, other) }
/** /**
* Returns difference between the constant and the integer represented as a constant (member of underlying ring). * Returns difference between the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to subtraction [other] copies of unit of underlying ring from [this]. * The operation is equivalent to subtraction [other] copies of unit of underlying ring from [this].
*/ */
@JvmName("minusConstantInt")
public override operator fun C.minus(other: Int): C = ring { addMultipliedByDoubling(this@minus, one, -other) } public override operator fun C.minus(other: Int): C = ring { addMultipliedByDoubling(this@minus, one, -other) }
/** /**
* Returns product of the constant and the integer represented as a constant (member of underlying ring). * Returns product of the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to sum of [other] copies of [this]. * The operation is equivalent to sum of [other] copies of [this].
*/ */
@JvmName("timesConstantInt")
public override operator fun C.times(other: Int): C = ring { multiplyByDoubling(this@times, other) } public override operator fun C.times(other: Int): C = ring { multiplyByDoubling(this@times, other) }
/** /**
@ -496,18 +544,21 @@ public interface RationalFunctionSpaceOverRing<
* *
* The operation is equivalent to adding [this] copies of unit of underlying ring to [other]. * The operation is equivalent to adding [this] copies of unit of underlying ring to [other].
*/ */
@JvmName("plusIntConstant")
public override operator fun Int.plus(other: C): C = ring { addMultipliedByDoubling(other, one, this@plus) } public override operator fun Int.plus(other: C): C = ring { addMultipliedByDoubling(other, one, this@plus) }
/** /**
* Returns difference between the integer represented as a constant (member of underlying ring) and the constant. * Returns difference between the integer represented as a constant (member of underlying ring) and the constant.
* *
* The operation is equivalent to subtraction [this] copies of unit of underlying ring from [other]. * The operation is equivalent to subtraction [this] copies of unit of underlying ring from [other].
*/ */
@JvmName("minusIntConstant")
public override operator fun Int.minus(other: C): C = ring { addMultipliedByDoubling(-other, one, this@minus) } public override operator fun Int.minus(other: C): C = ring { addMultipliedByDoubling(-other, one, this@minus) }
/** /**
* Returns product of the integer represented as a constant (member of underlying ring) and the constant. * Returns product of the integer represented as a constant (member of underlying ring) and the constant.
* *
* The operation is equivalent to sum of [this] copies of [other]. * The operation is equivalent to sum of [this] copies of [other].
*/ */
@JvmName("timesIntConstant")
public override operator fun Int.times(other: C): C = ring { multiplyByDoubling(other, this@times) } public override operator fun Int.times(other: C): C = ring { multiplyByDoubling(other, this@times) }
/** /**
@ -564,7 +615,7 @@ public interface RationalFunctionSpaceOverRing<
@Suppress("INAPPLICABLE_JVM_NAME") // FIXME: Waiting for KT-31420 @Suppress("INAPPLICABLE_JVM_NAME") // FIXME: Waiting for KT-31420
public interface RationalFunctionSpaceOverPolynomialSpace< public interface RationalFunctionSpaceOverPolynomialSpace<
C, C,
P: Polynomial<C>, P,
R: RationalFunction<C, P>, R: RationalFunction<C, P>,
out AP: PolynomialSpace<C, P>, out AP: PolynomialSpace<C, P>,
> : RationalFunctionSpace<C, P, R> { > : RationalFunctionSpace<C, P, R> {
@ -579,18 +630,21 @@ public interface RationalFunctionSpaceOverPolynomialSpace<
* *
* The operation is equivalent to adding [other] copies of unit of underlying ring to [this]. * The operation is equivalent to adding [other] copies of unit of underlying ring to [this].
*/ */
@JvmName("plusConstantInt")
public override operator fun C.plus(other: Int): C = polynomialRing { this@plus + other } public override operator fun C.plus(other: Int): C = polynomialRing { this@plus + other }
/** /**
* Returns difference between the constant and the integer represented as a constant (member of underlying ring). * Returns difference between the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to subtraction [other] copies of unit of underlying ring from [this]. * The operation is equivalent to subtraction [other] copies of unit of underlying ring from [this].
*/ */
@JvmName("minusConstantInt")
public override operator fun C.minus(other: Int): C = polynomialRing { this@minus - other } public override operator fun C.minus(other: Int): C = polynomialRing { this@minus - other }
/** /**
* Returns product of the constant and the integer represented as a constant (member of underlying ring). * Returns product of the constant and the integer represented as a constant (member of underlying ring).
* *
* The operation is equivalent to sum of [other] copies of [this]. * The operation is equivalent to sum of [other] copies of [this].
*/ */
@JvmName("timesConstantInt")
public override operator fun C.times(other: Int): C = polynomialRing { this@times * other } public override operator fun C.times(other: Int): C = polynomialRing { this@times * other }
/** /**
@ -598,18 +652,21 @@ public interface RationalFunctionSpaceOverPolynomialSpace<
* *
* The operation is equivalent to adding [this] copies of unit of underlying ring to [other]. * The operation is equivalent to adding [this] copies of unit of underlying ring to [other].
*/ */
@JvmName("plusIntConstant")
public override operator fun Int.plus(other: C): C = polynomialRing { this@plus + other } public override operator fun Int.plus(other: C): C = polynomialRing { this@plus + other }
/** /**
* Returns difference between the integer represented as a constant (member of underlying ring) and the constant. * Returns difference between the integer represented as a constant (member of underlying ring) and the constant.
* *
* The operation is equivalent to subtraction [this] copies of unit of underlying ring from [other]. * The operation is equivalent to subtraction [this] copies of unit of underlying ring from [other].
*/ */
@JvmName("minusIntConstant")
public override operator fun Int.minus(other: C): C = polynomialRing { this@minus - other } public override operator fun Int.minus(other: C): C = polynomialRing { this@minus - other }
/** /**
* Returns product of the integer represented as a constant (member of underlying ring) and the constant. * Returns product of the integer represented as a constant (member of underlying ring) and the constant.
* *
* The operation is equivalent to sum of [this] copies of [other]. * The operation is equivalent to sum of [this] copies of [other].
*/ */
@JvmName("timesIntConstant")
public override operator fun Int.times(other: C): C = polynomialRing { this@times * other } public override operator fun Int.times(other: C): C = polynomialRing { this@times * other }
/** /**
@ -626,18 +683,21 @@ public interface RationalFunctionSpaceOverPolynomialSpace<
* *
* The operation is equivalent to adding [other] copies of unit polynomial to [this]. * The operation is equivalent to adding [other] copies of unit polynomial to [this].
*/ */
@JvmName("plusPolynomialInt")
public override operator fun P.plus(other: Int): P = polynomialRing { this@plus + other } public override operator fun P.plus(other: Int): P = polynomialRing { this@plus + other }
/** /**
* Returns difference between the constant and the integer represented as a polynomial. * Returns difference between the constant and the integer represented as a polynomial.
* *
* The operation is equivalent to subtraction [other] copies of unit polynomial from [this]. * The operation is equivalent to subtraction [other] copies of unit polynomial from [this].
*/ */
@JvmName("minusPolynomialInt")
public override operator fun P.minus(other: Int): P = polynomialRing { this@minus - other } public override operator fun P.minus(other: Int): P = polynomialRing { this@minus - other }
/** /**
* Returns product of the constant and the integer represented as a polynomial. * Returns product of the constant and the integer represented as a polynomial.
* *
* The operation is equivalent to sum of [other] copies of [this]. * The operation is equivalent to sum of [other] copies of [this].
*/ */
@JvmName("timesPolynomialInt")
public override operator fun P.times(other: Int): P = polynomialRing { this@times * other } public override operator fun P.times(other: Int): P = polynomialRing { this@times * other }
/** /**
@ -645,18 +705,21 @@ public interface RationalFunctionSpaceOverPolynomialSpace<
* *
* The operation is equivalent to adding [this] copies of unit polynomial to [other]. * The operation is equivalent to adding [this] copies of unit polynomial to [other].
*/ */
@JvmName("plusIntPolynomial")
public override operator fun Int.plus(other: P): P = polynomialRing { this@plus + other } public override operator fun Int.plus(other: P): P = polynomialRing { this@plus + other }
/** /**
* Returns difference between the integer represented as a polynomial and the constant. * Returns difference between the integer represented as a polynomial and the constant.
* *
* The operation is equivalent to subtraction [this] copies of unit polynomial from [other]. * The operation is equivalent to subtraction [this] copies of unit polynomial from [other].
*/ */
@JvmName("minusIntPolynomial")
public override operator fun Int.minus(other: P): P = polynomialRing { this@minus - other } public override operator fun Int.minus(other: P): P = polynomialRing { this@minus - other }
/** /**
* Returns product of the integer represented as a polynomial and the constant. * Returns product of the integer represented as a polynomial and the constant.
* *
* The operation is equivalent to sum of [this] copies of [other]. * The operation is equivalent to sum of [this] copies of [other].
*/ */
@JvmName("timesIntPolynomial")
public override operator fun Int.times(other: P): P = polynomialRing { this@times * other } public override operator fun Int.times(other: P): P = polynomialRing { this@times * other }
/** /**
@ -711,27 +774,33 @@ public interface RationalFunctionSpaceOverPolynomialSpace<
/** /**
* Returns sum of the constant represented as a polynomial and the polynomial. * Returns sum of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("plusConstantPolynomial")
public override operator fun C.plus(other: P): P = polynomialRing { this@plus + other } public override operator fun C.plus(other: P): P = polynomialRing { this@plus + other }
/** /**
* Returns difference between the constant represented as a polynomial and the polynomial. * Returns difference between the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("minusConstantPolynomial")
public override operator fun C.minus(other: P): P = polynomialRing { this@minus - other } public override operator fun C.minus(other: P): P = polynomialRing { this@minus - other }
/** /**
* Returns product of the constant represented as a polynomial and the polynomial. * Returns product of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("timesConstantPolynomial")
public override operator fun C.times(other: P): P = polynomialRing { this@times * other } public override operator fun C.times(other: P): P = polynomialRing { this@times * other }
/** /**
* Returns sum of the constant represented as a polynomial and the polynomial. * Returns sum of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("plusPolynomialConstant")
public override operator fun P.plus(other: C): P = polynomialRing { this@plus + other } public override operator fun P.plus(other: C): P = polynomialRing { this@plus + other }
/** /**
* Returns difference between the constant represented as a polynomial and the polynomial. * Returns difference between the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("minusPolynomialConstant")
public override operator fun P.minus(other: C): P = polynomialRing { this@minus - other } public override operator fun P.minus(other: C): P = polynomialRing { this@minus - other }
/** /**
* Returns product of the constant represented as a polynomial and the polynomial. * Returns product of the constant represented as a polynomial and the polynomial.
*/ */
@JvmName("timesPolynomialConstant")
public override operator fun P.times(other: C): P = polynomialRing { this@times * other } public override operator fun P.times(other: C): P = polynomialRing { this@times * other }
/** /**
@ -746,26 +815,32 @@ public interface RationalFunctionSpaceOverPolynomialSpace<
/** /**
* Returns the same polynomial. * Returns the same polynomial.
*/ */
@JvmName("unaryPlusPolynomial")
public override operator fun P.unaryPlus(): P = polynomialRing { +this@unaryPlus } public override operator fun P.unaryPlus(): P = polynomialRing { +this@unaryPlus }
/** /**
* Returns negation of the polynomial. * Returns negation of the polynomial.
*/ */
@JvmName("unaryMinusPolynomial")
public override operator fun P.unaryMinus(): P = polynomialRing { -this@unaryMinus } public override operator fun P.unaryMinus(): P = polynomialRing { -this@unaryMinus }
/** /**
* Returns sum of the polynomials. * Returns sum of the polynomials.
*/ */
@JvmName("plusPolynomialPolynomial")
public override operator fun P.plus(other: P): P = polynomialRing { this@plus + other } public override operator fun P.plus(other: P): P = polynomialRing { this@plus + other }
/** /**
* Returns difference of the polynomials. * Returns difference of the polynomials.
*/ */
@JvmName("minusPolynomialPolynomial")
public override operator fun P.minus(other: P): P = polynomialRing { this@minus - other } public override operator fun P.minus(other: P): P = polynomialRing { this@minus - other }
/** /**
* Returns product of the polynomials. * Returns product of the polynomials.
*/ */
@JvmName("timesPolynomialPolynomial")
public override operator fun P.times(other: P): P = polynomialRing { this@times * other } public override operator fun P.times(other: P): P = polynomialRing { this@times * other }
/** /**
* Raises [arg] to the integer power [exponent]. * Raises [arg] to the integer power [exponent].
*/ */
@JvmName("powerPolynomial")
public override fun power(arg: P, exponent: UInt) : P = polynomialRing { power(arg, exponent) } public override fun power(arg: P, exponent: UInt) : P = polynomialRing { power(arg, exponent) }
/** /**
@ -796,7 +871,7 @@ public interface RationalFunctionSpaceOverPolynomialSpace<
@Suppress("INAPPLICABLE_JVM_NAME") // FIXME: Waiting for KT-31420 @Suppress("INAPPLICABLE_JVM_NAME") // FIXME: Waiting for KT-31420
public abstract class PolynomialSpaceOfFractions< public abstract class PolynomialSpaceOfFractions<
C, C,
P: Polynomial<C>, P,
R: RationalFunction<C, P>, R: RationalFunction<C, P>,
> : RationalFunctionSpace<C, P, R> { > : RationalFunctionSpace<C, P, R> {
@ -897,11 +972,13 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns quotient of the polynomials as rational function. * Returns quotient of the polynomials as rational function.
*/ */
@JvmName("divPolynomialPolynomial")
public override operator fun P.div(other: P): R = constructRationalFunction(this, other) public override operator fun P.div(other: P): R = constructRationalFunction(this, other)
/** /**
* Returns sum of the constant represented as a rational function and the rational function. * Returns sum of the constant represented as a rational function and the rational function.
*/ */
@JvmName("plusConstantRational")
public override operator fun C.plus(other: R): R = public override operator fun C.plus(other: R): R =
constructRationalFunction( constructRationalFunction(
other.denominator * this + other.numerator, other.denominator * this + other.numerator,
@ -910,6 +987,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns difference between the constant represented as a polynomial and the rational function. * Returns difference between the constant represented as a polynomial and the rational function.
*/ */
@JvmName("minusConstantRational")
public override operator fun C.minus(other: R): R = public override operator fun C.minus(other: R): R =
constructRationalFunction( constructRationalFunction(
other.denominator * this - other.numerator, other.denominator * this - other.numerator,
@ -918,6 +996,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns product of the constant represented as a polynomial and the rational function. * Returns product of the constant represented as a polynomial and the rational function.
*/ */
@JvmName("timesConstantRational")
public override operator fun C.times(other: R): R = public override operator fun C.times(other: R): R =
constructRationalFunction( constructRationalFunction(
this * other.numerator, this * other.numerator,
@ -926,6 +1005,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns quotient of the constant represented as a polynomial and the rational function. * Returns quotient of the constant represented as a polynomial and the rational function.
*/ */
@JvmName("divConstantRational")
public override operator fun C.div(other: R): R = public override operator fun C.div(other: R): R =
constructRationalFunction( constructRationalFunction(
this * other.denominator, this * other.denominator,
@ -935,6 +1015,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns sum of the constant represented as a rational function and the rational function. * Returns sum of the constant represented as a rational function and the rational function.
*/ */
@JvmName("plusRationalConstant")
public override operator fun R.plus(other: C): R = public override operator fun R.plus(other: C): R =
constructRationalFunction( constructRationalFunction(
numerator + denominator * other, numerator + denominator * other,
@ -943,6 +1024,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns difference between the constant represented as a rational function and the rational function. * Returns difference between the constant represented as a rational function and the rational function.
*/ */
@JvmName("minusRationalConstant")
public override operator fun R.minus(other: C): R = public override operator fun R.minus(other: C): R =
constructRationalFunction( constructRationalFunction(
numerator - denominator * other, numerator - denominator * other,
@ -951,6 +1033,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns product of the constant represented as a rational function and the rational function. * Returns product of the constant represented as a rational function and the rational function.
*/ */
@JvmName("timesRationalConstant")
public override operator fun R.times(other: C): R = public override operator fun R.times(other: C): R =
constructRationalFunction( constructRationalFunction(
numerator * other, numerator * other,
@ -959,6 +1042,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns quotient of the rational function and the constant represented as a rational function. * Returns quotient of the rational function and the constant represented as a rational function.
*/ */
@JvmName("divRationalConstant")
public override operator fun R.div(other: C): R = public override operator fun R.div(other: C): R =
constructRationalFunction( constructRationalFunction(
numerator, numerator,
@ -968,11 +1052,13 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Converts the constant [value] to rational function. * Converts the constant [value] to rational function.
*/ */
@JvmName("numberConstant")
public override fun number(value: C): R = constructRationalFunction(polynomialNumber(value)) public override fun number(value: C): R = constructRationalFunction(polynomialNumber(value))
/** /**
* Returns sum of the polynomial represented as a rational function and the rational function. * Returns sum of the polynomial represented as a rational function and the rational function.
*/ */
@JvmName("plusPolynomialRational")
public override operator fun P.plus(other: R): R = public override operator fun P.plus(other: R): R =
constructRationalFunction( constructRationalFunction(
other.denominator * this + other.numerator, other.denominator * this + other.numerator,
@ -981,6 +1067,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns difference between the polynomial represented as a polynomial and the rational function. * Returns difference between the polynomial represented as a polynomial and the rational function.
*/ */
@JvmName("minusPolynomialRational")
public override operator fun P.minus(other: R): R = public override operator fun P.minus(other: R): R =
constructRationalFunction( constructRationalFunction(
other.denominator * this - other.numerator, other.denominator * this - other.numerator,
@ -989,6 +1076,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns product of the polynomial represented as a polynomial and the rational function. * Returns product of the polynomial represented as a polynomial and the rational function.
*/ */
@JvmName("timesPolynomialRational")
public override operator fun P.times(other: R): R = public override operator fun P.times(other: R): R =
constructRationalFunction( constructRationalFunction(
this * other.numerator, this * other.numerator,
@ -997,6 +1085,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns quotient of the polynomial represented as a polynomial and the rational function. * Returns quotient of the polynomial represented as a polynomial and the rational function.
*/ */
@JvmName("divPolynomialRational")
public override operator fun P.div(other: R): R = public override operator fun P.div(other: R): R =
constructRationalFunction( constructRationalFunction(
this * other.denominator, this * other.denominator,
@ -1006,6 +1095,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns sum of the polynomial represented as a rational function and the rational function. * Returns sum of the polynomial represented as a rational function and the rational function.
*/ */
@JvmName("plusRationalPolynomial")
public override operator fun R.plus(other: P): R = public override operator fun R.plus(other: P): R =
constructRationalFunction( constructRationalFunction(
numerator + denominator * other, numerator + denominator * other,
@ -1014,6 +1104,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns difference between the polynomial represented as a rational function and the rational function. * Returns difference between the polynomial represented as a rational function and the rational function.
*/ */
@JvmName("minusRationalPolynomial")
public override operator fun R.minus(other: P): R = public override operator fun R.minus(other: P): R =
constructRationalFunction( constructRationalFunction(
numerator - denominator * other, numerator - denominator * other,
@ -1022,6 +1113,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns product of the polynomial represented as a rational function and the rational function. * Returns product of the polynomial represented as a rational function and the rational function.
*/ */
@JvmName("timesRationalPolynomial")
public override operator fun R.times(other: P): R = public override operator fun R.times(other: P): R =
constructRationalFunction( constructRationalFunction(
numerator * other, numerator * other,
@ -1030,6 +1122,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Returns quotient of the rational function and the polynomial represented as a rational function. * Returns quotient of the rational function and the polynomial represented as a rational function.
*/ */
@JvmName("divRationalPolynomial")
public override operator fun R.div(other: P): R = public override operator fun R.div(other: P): R =
constructRationalFunction( constructRationalFunction(
numerator, numerator,
@ -1039,6 +1132,7 @@ public abstract class PolynomialSpaceOfFractions<
/** /**
* Converts the polynomial [value] to rational function. * Converts the polynomial [value] to rational function.
*/ */
@JvmName("numberPolynomial")
public override fun number(value: P): R = constructRationalFunction(value) public override fun number(value: P): R = constructRationalFunction(value)
/** /**
@ -1110,97 +1204,114 @@ public abstract class PolynomialSpaceOfFractions<
public interface MultivariateRationalFunctionSpace< public interface MultivariateRationalFunctionSpace<
C, C,
V, V,
P: Polynomial<C>, P,
R: RationalFunction<C, P> R: RationalFunction<C, P>
>: RationalFunctionSpace<C, P, R> { >: RationalFunctionSpace<C, P, R> {
/** /**
* Returns sum of the variable represented as a monic monomial and the integer represented as a constant polynomial. * Returns sum of the variable represented as a monic monomial and the integer represented as a constant polynomial.
*/ */
@JvmName("plusVariableInt") @JvmName("plusVariableInt")
@JsName("plusVariableInt")
public operator fun V.plus(other: Int): P public operator fun V.plus(other: Int): P
/** /**
* Returns difference between the variable represented as a monic monomial and the integer represented as a constant polynomial. * Returns difference between the variable represented as a monic monomial and the integer represented as a constant polynomial.
*/ */
@JvmName("minusVariableInt") @JvmName("minusVariableInt")
@JsName("minusVariableInt")
public operator fun V.minus(other: Int): P public operator fun V.minus(other: Int): P
/** /**
* Returns product of the variable represented as a monic monomial and the integer represented as a constant polynomial. * Returns product of the variable represented as a monic monomial and the integer represented as a constant polynomial.
*/ */
@JvmName("timesVariableInt") @JvmName("timesVariableInt")
@JsName("timesVariableInt")
public operator fun V.times(other: Int): P public operator fun V.times(other: Int): P
/** /**
* Returns sum of the integer represented as a constant polynomial and the variable represented as a monic monomial. * Returns sum of the integer represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("plusIntVariable") @JvmName("plusIntVariable")
@JsName("plusIntVariable")
public operator fun Int.plus(other: V): P public operator fun Int.plus(other: V): P
/** /**
* Returns difference between the integer represented as a constant polynomial and the variable represented as a monic monomial. * Returns difference between the integer represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("minusIntVariable") @JvmName("minusIntVariable")
@JsName("minusIntVariable")
public operator fun Int.minus(other: V): P public operator fun Int.minus(other: V): P
/** /**
* Returns product of the integer represented as a constant polynomial and the variable represented as a monic monomial. * Returns product of the integer represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("timesIntVariable") @JvmName("timesIntVariable")
@JsName("timesIntVariable")
public operator fun Int.times(other: V): P public operator fun Int.times(other: V): P
/** /**
* Returns sum of the variable represented as a monic monomial and the constant represented as a constant polynomial. * Returns sum of the variable represented as a monic monomial and the constant represented as a constant polynomial.
*/ */
@JvmName("plusVariableConstant") @JvmName("plusVariableConstant")
@JsName("plusVariableConstant")
public operator fun V.plus(other: C): P public operator fun V.plus(other: C): P
/** /**
* Returns difference between the variable represented as a monic monomial and the constant represented as a constant polynomial. * Returns difference between the variable represented as a monic monomial and the constant represented as a constant polynomial.
*/ */
@JvmName("minusVariableConstant") @JvmName("minusVariableConstant")
@JsName("minusVariableConstant")
public operator fun V.minus(other: C): P public operator fun V.minus(other: C): P
/** /**
* Returns product of the variable represented as a monic monomial and the constant represented as a constant polynomial. * Returns product of the variable represented as a monic monomial and the constant represented as a constant polynomial.
*/ */
@JvmName("timesVariableConstant") @JvmName("timesVariableConstant")
@JsName("timesVariableConstant")
public operator fun V.times(other: C): P public operator fun V.times(other: C): P
/** /**
* Returns sum of the constant represented as a constant polynomial and the variable represented as a monic monomial. * Returns sum of the constant represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("plusConstantVariable") @JvmName("plusConstantVariable")
@JsName("plusConstantVariable")
public operator fun C.plus(other: V): P public operator fun C.plus(other: V): P
/** /**
* Returns difference between the constant represented as a constant polynomial and the variable represented as a monic monomial. * Returns difference between the constant represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("minusConstantVariable") @JvmName("minusConstantVariable")
@JsName("minusConstantVariable")
public operator fun C.minus(other: V): P public operator fun C.minus(other: V): P
/** /**
* Returns product of the constant represented as a constant polynomial and the variable represented as a monic monomial. * Returns product of the constant represented as a constant polynomial and the variable represented as a monic monomial.
*/ */
@JvmName("timesConstantVariable") @JvmName("timesConstantVariable")
@JsName("timesConstantVariable")
public operator fun C.times(other: V): P public operator fun C.times(other: V): P
/** /**
* Represents the variable as a monic monomial. * Represents the variable as a monic monomial.
*/ */
@JvmName("unaryPlusVariable") @JvmName("unaryPlusVariable")
@JsName("unaryPlusVariable")
public operator fun V.unaryPlus(): P public operator fun V.unaryPlus(): P
/** /**
* Returns negation of representation of the variable as a monic monomial. * Returns negation of representation of the variable as a monic monomial.
*/ */
@JvmName("unaryMinusVariable") @JvmName("unaryMinusVariable")
@JsName("unaryMinusVariable")
public operator fun V.unaryMinus(): P public operator fun V.unaryMinus(): P
/** /**
* Returns sum of the variables represented as monic monomials. * Returns sum of the variables represented as monic monomials.
*/ */
@JvmName("plusVariableVariable") @JvmName("plusVariableVariable")
@JsName("plusVariableVariable")
public operator fun V.plus(other: V): P public operator fun V.plus(other: V): P
/** /**
* Returns difference between the variables represented as monic monomials. * Returns difference between the variables represented as monic monomials.
*/ */
@JvmName("minusVariableVariable") @JvmName("minusVariableVariable")
@JsName("minusVariableVariable")
public operator fun V.minus(other: V): P public operator fun V.minus(other: V): P
/** /**
* Returns product of the variables represented as monic monomials. * Returns product of the variables represented as monic monomials.
*/ */
@JvmName("timesVariableVariable") @JvmName("timesVariableVariable")
@JsName("timesVariableVariable")
public operator fun V.times(other: V): P public operator fun V.times(other: V): P
/** /**
@ -1218,11 +1329,13 @@ public interface MultivariateRationalFunctionSpace<
* Represents the [variable] as a rational function. * Represents the [variable] as a rational function.
*/ */
@JvmName("numberVariable") @JvmName("numberVariable")
@JsName("numberVariable")
public fun number(variable: V): R = number(polynomialNumber(variable)) public fun number(variable: V): R = number(polynomialNumber(variable))
/** /**
* Represents the variable as a rational function. * Represents the variable as a rational function.
*/ */
@JvmName("asRationalFunctionVariable") @JvmName("asRationalFunctionVariable")
@JsName("asRationalFunctionVariable")
public fun V.asRationalFunction(): R = number(this) public fun V.asRationalFunction(): R = number(this)
/** /**
@ -1339,7 +1452,7 @@ public interface MultivariateRationalFunctionSpace<
public interface MultivariateRationalFunctionSpaceOverMultivariatePolynomialSpace< public interface MultivariateRationalFunctionSpaceOverMultivariatePolynomialSpace<
C, C,
V, V,
P: Polynomial<C>, P,
R: RationalFunction<C, P>, R: RationalFunction<C, P>,
out AP: MultivariatePolynomialSpace<C, V, P>, out AP: MultivariatePolynomialSpace<C, V, P>,
> : RationalFunctionSpaceOverPolynomialSpace<C, P, R, AP>, MultivariateRationalFunctionSpace<C, V, P, R> { > : RationalFunctionSpaceOverPolynomialSpace<C, P, R, AP>, MultivariateRationalFunctionSpace<C, V, P, R> {
@ -1516,7 +1629,7 @@ public interface MultivariateRationalFunctionSpaceOverMultivariatePolynomialSpac
public abstract class MultivariatePolynomialSpaceOfFractions< public abstract class MultivariatePolynomialSpaceOfFractions<
C, C,
V, V,
P: Polynomial<C>, P,
R: RationalFunction<C, P>, R: RationalFunction<C, P>,
> : MultivariateRationalFunctionSpace<C, V, P, R>, PolynomialSpaceOfFractions<C, P, R>() { > : MultivariateRationalFunctionSpace<C, V, P, R>, PolynomialSpaceOfFractions<C, P, R>() {
/** /**
@ -1568,7 +1681,6 @@ public abstract class MultivariatePolynomialSpaceOfFractions<
/** /**
* Returns product of the rational function and the variable represented as a rational function. * Returns product of the rational function and the variable represented as a rational function.
*/ */
@JvmName("timesRationalVariable")
public override operator fun R.times(other: V): R = public override operator fun R.times(other: V): R =
constructRationalFunction( constructRationalFunction(
numerator * other, numerator * other,