diff --git a/mapytex/calculus/core/typing/add.py b/mapytex/calculus/core/typing/add.py index 9e6ae54..a639515 100644 --- a/mapytex/calculus/core/typing/add.py +++ b/mapytex/calculus/core/typing/add.py @@ -42,7 +42,7 @@ def moscalar_mostr(left, right): return MOpolynomial(right, [left, 1]) @add.register(MOstr, (MOnumber, MOFraction)) -def moscalar_mostr(left, right): +def mostr_moscalar(left, right): """ add a scalar with a letter to create a MOpolynomial >>> a = MOstr('x') @@ -56,7 +56,7 @@ def moscalar_mostr(left, right): return MOpolynomial(left, [right, 1]) @add.register((MOnumber, MOFraction), MOstrPower) -def moscalar_mostr(left, right): +def moscalar_mostrpower(left, right): """ add a scalar with a letter to create a MOpolynomial >>> a = MOnumber(2) @@ -70,7 +70,7 @@ def moscalar_mostr(left, right): return MOpolynomial(right.variable, {0: left, right.power: 1}) @add.register(MOstrPower, (MOnumber, MOFraction)) -def moscalar_mostr(left, right): +def mostrpower_moscalar(left, right): """ add a scalar with a letter to create a MOpolynomial >>> a = MOstrPower('x', 3) @@ -128,7 +128,10 @@ def moscalar_mopolynomial(left, right): >>> add(a, b) """ - new_coefs = right.coefficients + if 0 in right.coefficients.keys(): + raise NotImplementedError(f"Polynomial with constant ({right.coefficients[0]}), calculus to do") + + new_coefs = {**right.coefficients} #! Need to be add at the end to be printed at the beginning new_coefs[0] = left return MOpolynomial(right.variable, new_coefs) @@ -145,13 +148,16 @@ def mopolynomial_moscalar(left, right): >>> add(a, b) """ + if 0 in left.coefficients.keys(): + raise NotImplementedError("Polynomial with constant, calculus to do") + #! Need to be add at the beginning to be printed at the end new_coefs = {0: right} new_coefs = {**new_coefs, **left.coefficients} return MOpolynomial(left.variable, new_coefs) @add.register(MOstr, MOstrPower) -def moscalar_mostr(left, right): +def mostr_mostrpower(left, right): """ add a scalar with a letter to create a MOpolynomial >>> a = MOstr('x') @@ -167,7 +173,7 @@ def moscalar_mostr(left, right): return MOpolynomial(left , {1: 1, right.power: 1}) @add.register(MOstrPower, MOstr) -def moscalar_mostr(left, right): +def mostrpower_mostr(left, right): """ add a scalar with a letter to create a MOpolynomial >>> a = MOstrPower('x', 3) @@ -191,7 +197,10 @@ def mostr_mopolynomial(left, right): >>> add(a, b) """ - new_coefs = right.coefficients + if 1 in right.coefficients.keys(): + raise NotImplementedError("Polynomial with no constant, calculus to do") + + new_coefs = {**right.coefficients} #! Need to be add at the end to be printed at the beginning new_coefs[1] = 1 return MOpolynomial(right.variable, new_coefs) @@ -205,6 +214,9 @@ def mopolynomial_mostr(left, right): >>> add(a, b) """ + if 1 in left.coefficients.keys(): + raise NotImplementedError("Polynomial with no constant, calculus to do") + new_coefs = {1: 1} new_coefs = {**new_coefs, **left.coefficients} return MOpolynomial(left.variable, new_coefs) @@ -218,7 +230,10 @@ def mostrpower_mopolynomial(left, right): >>> add(a, b) """ - new_coefs = right.coefficients + if left.power in right.coefficients.keys(): + raise NotImplementedError("Degree in common, need to compute") + + new_coefs = {**right.coefficients} #! Need to be add at the end to be printed at the beginning new_coefs[left.power] = 1 return MOpolynomial(right.variable, new_coefs) @@ -232,6 +247,9 @@ def mopolynomial_mostrpower(left, right): >>> add(a, b) """ + if right.power in left.coefficients.keys(): + raise NotImplementedError("Degree in common, need to compute") + new_coefs = {right.power: 1} new_coefs = {**new_coefs, **left.coefficients} return MOpolynomial(left.variable, new_coefs) @@ -245,7 +263,10 @@ def momonomial_mopolynomial(left, right): >>> add(a, b) """ - new_coefs = right.coefficients + if left.power in right.coefficients.keys(): + raise NotImplementedError("Degree in common, need to compute") + + new_coefs = {**right.coefficients} #! Need to be add at the end to be printed at the beginning new_coefs[left.power] = left.coefficient return MOpolynomial(right.variable, new_coefs) @@ -259,6 +280,9 @@ def mopolynomial_momonomial(left, right): >>> add(a, b) """ + if right.power in left.coefficients.keys(): + raise NotImplementedError("Degree in common, need to compute") + new_coefs = {right.power: right.coefficient} new_coefs = {**new_coefs, **left.coefficients} return MOpolynomial(left.variable, new_coefs) @@ -274,6 +298,10 @@ def mopolynomial_mopolynomial(left, right): >>> add(b, a) """ + common_degree = set(left.monomials.keys()).intersection(right.monomials.keys()) + if common_degree: + raise NotImplementedError("Degree in common, need to compute") + new_coefs = {**right.coefficients, **left.coefficients} return MOpolynomial(right.variable, new_coefs) @@ -286,6 +314,9 @@ def mostr_monomial(left, right): >>> add(a, b) """ + if right.power == 1: + raise NotImplementedError("Monomial is deg 1, need to compute") + return MOpolynomial(right.variable, {right.power: right.coefficient, 1: 1} ) @@ -299,6 +330,9 @@ def monomial_mostr(left, right): >>> add(a, b) """ + if left.power == 1: + raise NotImplementedError("Monomial is deg 1, need to compute") + return MOpolynomial(left.variable, {1: 1, left.power: left.coefficient} ) @@ -312,6 +346,9 @@ def mostrpower_monomial(left, right): >>> add(a, b) """ + if left.power == right.power: + raise NotImplementedError("MostrPower and MOMonomial are same degree, need to compute") + return MOpolynomial(right.variable, {right.power: right.coefficient, left.power: 1} ) @@ -325,6 +362,9 @@ def monomial_mostrpower(left, right): >>> add(a, b) """ + if left.power == right.power: + raise NotImplementedError("MostrPower and MOMonomial are same degree, need to compute") + return MOpolynomial(left.variable, {right.power: 1, left.power: left.coefficient} ) @@ -338,6 +378,9 @@ def monomial_momonomial(left, right): >>> add(a, b) """ + if left.power == right.power: + raise NotImplementedError("MOMonomials are same degree, need to compute") + return MOpolynomial(left.variable, {right.power: right.coefficient, left.power: left.coefficient} )