Exemple #1
0
 def metaMinusAndPlus(self, equation):
     resultMetaMinusAndPlus = []
     difficultyMetaMinusAndPlus = 0
     if equation.metaMinusIndexList != []:
         for index in equation.metaMinusIndexList:
             for metaMinusChar in metaMinusTable[equation.str[index]]:
                 newMetaMinusEquation = Equation(
                     self.replace_char(equation.str, metaMinusChar, index))
                 if newMetaMinusEquation.plusIndexList != []:
                     for newIndex in newMetaMinusEquation.plusIndexList:
                         if newIndex != index:
                             for plusChar in plusTable[
                                     newMetaMinusEquation.str[newIndex]]:
                                 newEquation = Equation(
                                     self.replace_char(
                                         newMetaMinusEquation.str, plusChar,
                                         newIndex))
                                 if DEBUG_MODE:
                                     print("metaMinusAndPlus:  ",
                                           newEquation.str,
                                           end="")
                                     if newEquation.checkRight():
                                         print(" Save!")
                                     else:
                                         print(" Drop")
                                 if newEquation.checkRight():
                                     resultMetaMinusAndPlus.append(
                                         newEquation)
                                 difficultyMetaMinusAndPlus += 1
     return difficultyMetaMinusAndPlus, resultMetaMinusAndPlus
Exemple #2
0
 def space2OneAndMinusTwo(self, equation):
     resultSpace2OneAndMinusTwo = []
     difficultySpace2OneAndMinusTwo = 0
     if equation.space2OneIndexList != []:
         for index in equation.space2OneIndexList:
             newSpace2OneEquation = Equation(
                 self.insert_char(equation.str, "1", index))
             if newSpace2OneEquation.minusTwoIndexList != []:
                 for newIndex in newSpace2OneEquation.minusTwoIndexList:
                     if newIndex != index:
                         for minusTwoChar in minusTwoTable[
                                 newSpace2OneEquation.str[newIndex]]:
                             newEquation = Equation(
                                 self.replace_char(newSpace2OneEquation.str,
                                                   minusTwoChar, newIndex))
                             if DEBUG_MODE:
                                 print("space2OneAndMinusTwo:  ",
                                       newEquation.str,
                                       end="")
                                 if newEquation.checkRight():
                                     print(" Save!")
                                 else:
                                     print(" Drop")
                             if newEquation.checkRight():
                                 resultSpace2OneAndMinusTwo.append(
                                     newEquation)
                             difficultySpace2OneAndMinusTwo += 1
     return difficultySpace2OneAndMinusTwo, resultSpace2OneAndMinusTwo
Exemple #3
0
 def plusAndMinus(self, equation):
     resultPlusAndMinus = []
     difficultyPlusAndMinus = 0
     if equation.plusIndexList != []:
         # 找到所有可以进行Plus操作的Char的Index
         for index in equation.plusIndexList:
             for plusChar in plusTable[equation.str[index]]:
                 # 对每个可以进行Plus操作的Char,用其所有可以变成的Char进行替换,生成新的Equation
                 newPlusEquation = Equation(
                     self.replace_char(equation.str, plusChar, index))
                 if newPlusEquation.minusIndexList != []:
                     # 在新的等式中,找到所有可以进行Minus操作的Char的Index
                     for newIndex in newPlusEquation.minusIndexList:
                         # 为减少重复,要求这里的Index与之前不同
                         if newIndex != index:
                             # 对每个可以进行Minus操作的Char,用其所有可以变成的Char进行替换,生成新的Equation
                             for minusChar in minusTable[
                                     newPlusEquation.str[newIndex]]:
                                 newEquation = Equation(
                                     self.replace_char(
                                         newPlusEquation.str, minusChar,
                                         newIndex))
                                 if DEBUG_MODE:
                                     print("plusAndMinus:  ",
                                           newEquation.str,
                                           end="")
                                     if newEquation.checkRight():
                                         print(" Save!")
                                     else:
                                         print(" Drop")
                                 # 如果正确,加入结果List
                                 if newEquation.checkRight():
                                     resultPlusAndMinus.append(newEquation)
                                 difficultyPlusAndMinus += 1
     return difficultyPlusAndMinus, resultPlusAndMinus
Exemple #4
0
 def plusTwoAndMinusTwo(self, equation):
     resultPlusTwoAndMinusTwo = []
     difficultyPlusTwoAndMinusTwo = 0
     if equation.plusTwoIndexList != []:
         for index in equation.plusTwoIndexList:
             for plusTwoChar in plusTwoTable[equation.str[index]]:
                 newPlusTwoEquation = Equation(
                     self.replace_char(equation.str, plusTwoChar, index))
                 if newPlusTwoEquation.minusTwoIndexList != []:
                     for newIndex in newPlusTwoEquation.minusTwoIndexList:
                         if newIndex != index:
                             for minusTwoChar in minusTwoTable[
                                     newPlusTwoEquation.str[newIndex]]:
                                 newEquation = Equation(
                                     self.replace_char(
                                         newPlusTwoEquation.str,
                                         minusTwoChar, newIndex))
                                 if DEBUG_MODE:
                                     print("plusTwoAndMinusTwo:  ",
                                           newEquation.str,
                                           end="")
                                     if newEquation.checkRight():
                                         print(" Save!")
                                     else:
                                         print(" Drop")
                                 if newEquation.checkRight():
                                     resultPlusTwoAndMinusTwo.append(
                                         newEquation)
                                 difficultyPlusTwoAndMinusTwo += 1
     return difficultyPlusTwoAndMinusTwo, resultPlusTwoAndMinusTwo
Exemple #5
0
 def metaAndMeta(self, equation):
     resultMetaAndMeta = []
     difficultyMetaAndMeta = 0
     if equation.metaIndexList != []:
         for index in equation.metaIndexList:
             for metaChar in metaTable[equation.str[index]]:
                 newMetaEquation = Equation(
                     self.replace_char(equation.str, metaChar, index))
                 if newMetaEquation.metaIndexList != []:
                     for newMetaIndex in newMetaEquation.metaIndexList:
                         if newMetaIndex != index:
                             for newMetaChar in metaTable[
                                     newMetaEquation.str[newMetaIndex]]:
                                 newEquation = Equation(
                                     self.replace_char(
                                         newMetaEquation.str, newMetaChar,
                                         newMetaIndex))
                                 if DEBUG_MODE:
                                     print("metaAndMeta:  ",
                                           newEquation.str,
                                           end="")
                                     if newEquation.checkRight():
                                         print(" Save!")
                                     else:
                                         print(" Drop")
                                 if newEquation.checkRight():
                                     resultMetaAndMeta.append(newEquation)
                                 difficultyMetaAndMeta += 1
     return difficultyMetaAndMeta, resultMetaAndMeta
Exemple #6
0
def run(str_test):
    """"
    for bonus degree 3  
print("------- voir si le degre de l'eqaution < 3 si oui resoudre l'equation si non exit---------------")
    """
    temp = Equation(0, 0)
    expression = temp.prepare_expression(str_test)
    if (len(expression[0]) and len(expression[1])):
        expression_minim_tab = temp.minimize_expression(expression)
        min_equation = temp.get_min_expression(expression_minim_tab)
        power_max = temp.get_max_power_equation(expression_minim_tab)
        print("Reduced form : {0}".format(min_equation))
        print("Polynomial degree : {0}".format(power_max))
        if (power_max > 2):
            print(
                "The Polynomial degree is stricly greater than 2, I can't solve"
            )
            exit(0)
        elif power_max == 2:
            temp.solve_second(expression_minim_tab)
        elif power_max == 1:
            temp.solve_first(expression_minim_tab)
        elif power_max == 0:
            if expression_minim_tab:
                print("There's no solution !!")
            else:
                print("All the X ∈ ℝ are the sollution !!")
    else:
        print(
            "Wrong format: Usage Python3 '[aX2 + bX + c = 0]' / a,b,c are double "
        )
Exemple #7
0
    def calculateGraphs(self):
        self.equations = []

        for eq in self.logic.getGraphs():
            equation = Equation(eq[0], eq[1])
            self.equations.append(equation)

        for i in range(len(self.equations)):
            self.equations[i].calculate_points(self.window[0], self.window[1],
                                               0.5)

        self.pointsToPixels()
Exemple #8
0
 def metaTwo(self, equation):
     resultMetaTwo = []
     difficultyMetaTwo = 0
     if equation.metaTwoIndexList != []:
         for index in equation.metaTwoIndexList:
             for metaTwoChar in metaTwoTable[equation.str[index]]:
                 newEquation = Equation(
                     self.replace_char(equation.str, metaTwoChar, index))
                 if DEBUG_MODE:
                     print("metaTwo:  ", newEquation.str, end="")
                     if newEquation.checkRight():
                         print(" Save!")
                     else:
                         print(" Drop")
                 if newEquation.checkRight():
                     resultMetaTwo.append(newEquation)
                 difficultyMetaTwo += 1
     return difficultyMetaTwo, resultMetaTwo
    def get_equation(
        self, **kwargs
    ):  #retrieves the coefficient and power values from the data (best fit equation)
        print("yes")
        for name, value in kwargs.items(
        ):  #sets the corresponding keyword argument (in this case it may be type information or base; this shall later be used to speed up the process)
            setattr(self, name, value)

        try:
            self.base  #attempts to see if a base value has been provided
        except AttributeError:
            self.base = len(
                self.x_coords
            ) - 1  #utilises best fit 'count of coordinates' to increase the accuracy or provide a possible equation which fits all coords
        print(self.base)

        self.equation_values = Differentiation.equation_obtain(
            self.y_coords, self.x_coords, self.category, self.base,
            0)  #returned values of coefficients and coordinates in tuples
        print("Equation:", self.equation_values)
        self.equation = Equation.Equation(self.equation_values)
        print(self.equation.equation)
Exemple #10
0
# IMPLIED. IN NO  EVENT WILL THE AUTHOR BE HELD LIABLE FOR ANY DAMAGES ARISING FROM
# THE USE OF THIS SOURCE-CODE. USE AT YOUR OWN RISK.

from Equation import *

EQUATION_ORDER = [
    'Pixel-Size',
    'DISPARITY',
    'ERROR DISPARITY',
]

EQUATION_DATA = {
    'Pixel-Size': {
        'DATA': Equation('PixelSize = SensorLength / NumPixel ', [
            EquationSymbol(name='PixelSize', min=1, max=20, value=17, unit=u'µm', factor=1e-6, isResult=True),
            EquationSymbol(name='SensorLength', min=1, max=50, value=17.408, unit='mm', factor=1e-3),
            EquationSymbol(name='NumPixel', min=600, max=2048, value=1024, unit='px'),
        ])
    },
    'DISPARITY': {
        'DATA': Equation('Disparity = (Focal * 1/PixelSize) * Base / Distance', [
            EquationSymbol(name='Distance', min=5, max=50, value=6, unit='m'),
            EquationSymbol(name='Disparity', min=0, max=160, value=64, unit='px', isResult=True),
            EquationSymbol(name='Base', min=1, max=200, value=40, unit='cm', factor=1e-2),
            EquationSymbol(name='Focal', min=1, max=30, value=15, unit='mm', factor=1e-3),
            EquationSymbol(name='PixelSize', min=1, max=20, value=17, unit=u'µm', factor=1e-6, extern='Pixel-Size'),
        ])
    },
    'ERROR DISPARITY': {
        'DATA': Equation('DistanceError = (Focal * 1/PixelSize) * Base / Disparity - (Focal * 1/PixelSize) * Base / (Disparity + AccuracyFactor*1./16)', [
            EquationSymbol(name='DistanceError', min=0, max=100, value=5, unit='m', factor=1, isResult=True),