Example #1
0
def sympyfy(liste_calculs):
    """Convertit une liste de chaînes de caractères 'liste_calculs' contenant
    des polynômes en liste de chaînes de caractères au format Sympy"""
    ls = []
    for calcul in liste_calculs:
        if isinstance(calcul,  basestring): calcul = splitting(calcul)
        s = ""
        puiss = 0
        for i in range(len(calcul)):
            el = calcul[i]
            if el[:9] == "Polynome(":
                # Doit-on entourer ce polynôme de parenthèses ?
                p = eval(el)
                if i+1 < len(calcul): q = calcul[i+1]
                else: q= ""
                if (s and s[-1] in "*-" and (len(p)>1 or p.monomes[0][0]<0)) \
                    or (q and q == "*" and len(p)>1) \
                    or ((len(p)>1 or p.monomes[0][0]!=1) and q and q == "**"):
                    s += "(" + str(p) +")"
                elif s and s[-1] == "+" and p.monomes[0][0]<0:
                    s = s[:-1]
                    s += str(p)
                else:
                    s += str(p)
            elif EstNombre(el):
                if el[0]=="(": s += "(" + decimaux(el[1:-1]) + ")"
                else: s += decimaux(el)
            elif el == "**":
                s += "**{"
                puiss += 1
            elif el == "(":
                if puiss: puiss += 1
                s += "("
            elif el == ")":
                if puiss: puiss -= 1
                s += ")"
            else :
                # "+", "-", "*", "/"
                s += el
            if puiss == 1:
                puiss = 0
                s += "}"
        s = s.replace("\\,x", "*x")
        s = s.replace("\\,", "")
        s = s.replace("**{", "**")
        s = s.replace("^{", "**")
        s = s.replace("}", "")
#        s = s.replace("(", "\\left( ")
#        s = s.replace(")", "\\right) ")
#        s = s.replace("**{", "^{")
#        s = s.replace("*", "\\times ")
#        s = s.replace("/", "\\div ")
        if not ls or s != ls[-1]:
            ls.append(s)
    return ls
Example #2
0
 def __str__(self):
     """str(self)
     Renvoie une version LaTeX du polynôme"""
     var = self.var
     s = ""
     for m in self.monomes:
         if isinstance(m, list):
             if m[1] > 1:
                 # Monôme de degré au moins 2
                 if m[0] == 1:
                     s = s + "+" + var + "^{" + str(m[1]) + "}"
                 elif m[0] == -1:
                     s = s + "-" + var + "^{" + str(m[1]) + "}"
                 elif m[0] > 0:
                     s = s + "+" +decimaux(m[0], 1) + r"\," + var + "^{" + str(m[1]) + "}"
                 else:
                     s = s + decimaux(m[0], 1) + r"\," + var + "^{" + str(m[1]) + "}"
             elif m[1] == 1:
                 # Monôme de degré 1
                 if m[0] == 1:
                     s = s + "+" + var
                 elif m[0] == -1:
                     s = s + "-" + var
                 elif m[0] > 0:
                     s = s + "+" + decimaux(m[0], 1) + r"\," + var
                 else:
                     s = s + decimaux(m[0], 1) + r"\," + var
             else:
                 # Monôme de degré 0
                 if m[0] < 0:
                     s = s + decimaux(m[0], 1)
                 else:
                     s = s + "+" + decimaux(m[0], 1)
     # supprime le + en début de séquence
     s = s.lstrip("+")
     if not s: s="0"
     return s
Example #3
0
def plotify(calcul):
    r"""**plotify**\ (*calcul*)

    Convertit la chaîne de caractères `calcul` contenant
    des polynômes une chaîne de caractères au format psplot

    **TODO :** intégrer cela dans :mod:`outils.Affichage` et gérer l'ensemble des
    classes de Pyromaths.

    :param calcul: le calcul à traiter
    :type calcul: string

    >>> from pyromaths.outils import Priorites3
    >>> Priorites3.plotify('Polynome([[Fraction(-5, 192), 4], [Fraction(2, 96), 3], [Fraction(41, 48), 2], [Fraction(-7, 12), 1], [-4, 0]], "x", False)')
    -5/192*x^4+2/96*x^3+41/48*x^2-7/12*x^1-4

    :rtype: str
    """
    from pyromaths.classes.PolynomesCollege import Polynome
    from pyromaths.classes.Fractions import Fraction
    from Affichage import decimaux

    if isinstance(calcul, basestring): calcul = splitting(calcul)
    s = ""
    puiss = 0
    for i in range(len(calcul)):
        el = calcul[i]
        if el[:9] == "Polynome(":
            # Doit-on entourer ce polynôme de parenthèses ?
            p = eval(el)
            if i + 1 < len(calcul): q = calcul[i + 1]
            else: q = ""
            """ 3 cas :
            * {*,-}(2x+3) ou {*,-}(-2x)
            * (2x+3)*...
            * (2x+1)**2"""
            res = []
            for m in p.monomes:
                texte = ''
                if isinstance(m[0], Fraction): texte = str(m[0].n) + "/" + str(m[0].d)
                elif isinstance(m[0], (float, int)): texte = str(m[0])
                if m[1]: texte += "*x^%s" % m[1]
                res.append(texte)
            t = "+".join(res)
            t = t.replace("+-", "-")
            if (s and s[-1] in "*-" and (len(p) > 1 or p.monomes[0][0] < 0)) \
                or (q and q == "*" and len(p) > 1) \
                or ((len(p) > 1 or p.monomes[0][0] != 1) and q and q == "**"):
                s += "(" + t + ")"
            elif s and s[-1] == "+" and p.monomes[0][0] < 0:
                s = s[:-1]
                s += t
            else:
                s += t
        elif el[:9] == "Fraction(":
            # Doit-on entourer cette fraction de parenthèses ?
            p = el[9:-1].split(",")
            if len(p) == 2:
                texfrac = p[0] + "/" + p[1]
            else:
                raise ValueError(_(u'On ne devrait pas rencontrer de fraction non simplifiée ici'))
            if i + 1 < len(calcul): q = calcul[i + 1]
            else: q = ""
            if (eval(p[0]) < 0 or p[1] != "1") and q and q == "**":
                s += "( " + texfrac + " )"
            else:
                s += texfrac
        elif EstNombre(el):
            if el[0] == "(": s += "(" + decimaux(el[1:-1]) + ")"
            else: s += decimaux(el)
        elif el == "**":
            s += "^("
            puiss += 1
        elif el == "(":
            if puiss: puiss += 1
            s += "("
        elif el == ")":
            if puiss: puiss -= 1
            s += ")"
        else :
            # "+", "-", "*", "/"
            s += el
        if puiss == 1 and s[-1] != "":
            puiss = 0
            s += ")"
    s = s.replace("**{", "^(")
    s = s.replace(r"\,", "*")
    return s
Example #4
0
def texify(liste_calculs):
    r"""**texify**\ (*liste_calculs*)

    Convertit la liste de chaînes de caractères `liste_calculs` contenant
    des polynômes en liste de chaînes de caractères au format TeX

    **TODO :** intégrer cela dans :mod:`outils.Affichage` et gérer l'ensemble des
    classes de Pyromaths.

    :param calcul: le calcul à traiter
    :type calcul: string

    >>> from pyromaths.outils import Priorites3
    >>> from pyromaths.classes.PolynomesCollege import Polynome
    >>> l = [['4', '+', '5', '-', '6'], ['9', '-', '6'], ['3']]
    >>> Priorites3.texify(l)
    ['4+5-6', '9-6', '3']
    >>> Priorites3.texify(Priorites3.priorites('(-7)+8-Polynome([[-4, 1], [-9, 2], [-5, 0]], "x")'))
    ['1-\\left( -4\\,x-9\\,x^{2}-5\\right) ', '1+4\\,x+9\\,x^{2}+5', '9\\,x^{2}+4\\,x+6']
    >>> Priorites3.texify([['Fraction(5,6)', '**', '2']])
    ['\\left(  \\dfrac{5}{6} \\right) ^{2}']

    :rtype: list
    """
    from pyromaths.classes.PolynomesCollege import Polynome
    from pyromaths.classes.Fractions import Fraction
    from pyromaths.classes.SquareRoot import SquareRoot
    from Affichage import decimaux
    ls = []
    enluminures = {'indice': r'_{', 'cancel':r'\cancel{'}
    isEnlumine = {'indice': False, 'cancel':False}
    for calcul in liste_calculs:
        if isinstance(calcul, basestring): calcul = splitting(calcul)
        s = ""
        puiss = 0
        for index in range(len(calcul)):
            el = calcul[index]
            for cle in isEnlumine.keys():
                if isEnlumine[cle] and (not isinstance(el, list) or el[1] != cle):
                    s += '}'
                    isEnlumine[cle] = False
            if isinstance(el, list):
                if not isEnlumine[el[1]]:
                    s += enluminures[el[1]]
                    isEnlumine[el[1]] = True
                el = el[0]
            if el[:9] == "Polynome(":
                # Doit-on entourer ce polynôme de parenthèses ?
                p = eval(el)
                if index + 1 < len(calcul): q = calcul[index + 1]
                else: q = ""
                """ 3 cas :
                * {*,-}(2x+3) ou {*,-}(-2x)
                * (2x+3)*...
                * (2x+1)**2"""
                if (s and s[-1] in "*-" and (len(p) > 1 or p.monomes[0][0] < 0)) \
                    or (q and q == "*" and len(p) > 1) \
                    or ((len(p) > 1 or (p.monomes[0][0] != 1 and p.monomes[0][1] > 0) or \
                         p.monomes[0][0] < 0 or \
                         (p.monomes[0][0] != 1 and isinstance(p.monomes[0][0], Fraction) and p.monomes[0][0].d != 1)) and q and q == "**"):
                    s += "(" + str(p) + ")"
                elif s and s[-1] == "+" and p.monomes[0][0] < 0:
                    s = s[:-1]
                    s += str(p)
                else:
                    s += str(p)
            elif el[:9] == "Fraction(":
                # Doit-on entourer cette fraction de parenthèses ?
                p = splitting(el[9:-1])
                # Gère le cas ou la fraction comprend des objets SquareRoot
                t = [""]
                for i in range(len(p)):
                    if p[i] == ',': t.append("")
                    else: t[-1] += p[i]
                p = t
                if len(p) == 2:
                    # texfrac = str(Fraction(eval(p[0]), eval(p[1])))
                    texfrac = str(Fraction(p[0], p[1]))
                else:
                    texfrac = str(Fraction(p[0], p[1], p[2]))
                if index + 1 < len(calcul): q = calcul[index + 1]
                else: q = ""
                if (eval(p[0]) < 0 or p[1] != "1") and q == "**":
                    s += "( " + texfrac + " )"
                else:
                    s += texfrac
            elif el[:11] == "SquareRoot(":
                p = eval(el)
                if index + 1 < len(calcul): q = calcul[index + 1]
                else: q = ""
                """ 3 cas :
                * {*,-}(2x+3) ou {*,-}(-2x)
                * (2x+3)*...
                * (2x+1)**2"""
                if (s and s[-1] in "*-" and (len(p) > 1 or p[0][0] < 0)) \
                    or (q and q == "*" and len(p) > 1) \
                    or ((len(p) > 1 or (p[0][0] != 1 and p[0][1] > 0) or \
                         p[0][0] < 0 or \
                         (p[0][0] != 1 and isinstance(p[0][0], Fraction) and p[0][0].d != 1)) and q and q == "**"):
                    s += "(" + str(p) + ")"
                elif s and s[-1] == "+" and p[0][0] < 0:
                    s = s[:-1]
                    s += str(p)
                else:
                    s += str(p)
            elif EstNombre(el):
                if index + 1 < len(calcul): q = calcul[index + 1]
                else: q = ""
                if el[0] == "(": s += "(" + decimaux(el[1:-1]) + ")"

                elif el[0] == '-' and ((s and s[-1] in "+/*-") \
                    or (q and q == "**")):
                    s += "(" + decimaux(el) + ")"

                else: s += decimaux(el)
            elif el == "**":
                s += "**{"
                puiss = 1
            elif el == "(":
                if puiss: puiss += 1
                s += "("
            elif el == ")":
                if puiss: puiss -= 1
                s += ")"
            else :
                # "+", "-", "*", "/"
                s += el
            if puiss == 1 and s[-1] != r"{":
                puiss = 0
                s += "}"
        for cle in isEnlumine.keys():
            if isEnlumine[cle] and (not isinstance(el, list) or el[1] != cle):
                s += '}'
        s = s.replace("**{", "^{")
        s = s.replace("(", "\\left( ")
        s = s.replace(")", "\\right) ")
        s = s.replace("\\left\\left", "\\left ")
        s = s.replace("\\right\\right", "\\right ")
        s = s.replace("*", "\\times ")
        s = s.replace("/", "\\div ")
        if not ls or s != ls[-1]:
            ls.append(s)
    return ls
Example #5
0
def traite_operation(operateur, calcul, pre, post, solution):
    pattern = r"""
            (                   #groupe 0
                ^\(*                #le calcul est au début (aux parenthèses près)
                                    #les signes +/- font parti du groupe 2
            |                   #ou
                ^.*?[\+\-]?         #il y a des calculs avant, le 1er signe +/-
                                    #est un opérateur
            )                   #fin du groupe 0
            (                   #groupe 1
                (?:                 #regroupement 1 (non groupe)
                    [\+\-]?                 #un éventuel signe
                    \(                      #une parenthèse ouvrante
                    [\+\-]?                 #un éventuel signe
                    \d+\.?\d*(?:e[\+\-]\d+)? #on cherche un nombre avec une
                                            #éventuelle partie décimale et un
                                            #éventuel exposant
                    \)                     #une parenthèse fermante
                |                   #ou
                    [\+\-]?                 #un éventuel signe
                    \d+\.?\d*(?:e[\+\-]\d+)? #on cherche un nombre avec une
                                            #éventuelle partie décimale et un
                                            #éventuel exposant
                |                   #ou
                    \w+                     #un littéral
                )                   #fin du regroupement 1
                {0}                 #opération
                (?:                 #regroupement 2 (non groupe)
                    [\+\-]?                 #un éventuel signe
                    \(                     #une parenthèse ouvrante
                    [\+\-]?                 #un éventuel signe
                    \d+\.?\d*(?:e[\+\-]\d+)? #on cherche un nombre avec une
                                            #éventuelle partie décimale et un
                                            #éventuel exposant
                    \)                     #une parenthèse fermante
                |                   #ou
                    [\+\-]?                 #un éventuel signe
                    \d+\.?\d*(?:e[\+\-]\d+)? #on cherche un nombre avec une
                                            #éventuelle partie décimale et un
                                            #éventuel exposant
                |                           #ou
                    \w+                     #un littéral
                )                   #fin du regroupement 2
            )                   #fin du groupe 1
            (.*?)$              #tout le reste
            """.format(operateur)
    test = re.search(pattern, calcul, re.VERBOSE)
    while test:
        sous_calcul = test.groups()
        print(sous_calcul)
        print(pre, post)
        sous_resultat = eval(sous_calcul[1])
        if isinstance(sous_resultat, list):
            for element in sous_resultat:
                solution.extend([pre +
                             sous_calcul[0] +
                             str(element) +
                             sous_calcul[2] +
                             post])
            a = sous_resultat[-1]
            sous_resultat = 'a'
        elif (sous_calcul[0] and sous_calcul[0][-1] == '(') and \
           (sous_calcul[2][0] and sous_calcul[2][0] == ')') and \
           (post[:2] != '**' or sous_resultat > 0):
            #permet de supprimer les parenthèses
            solution.extend([pre +
                             sous_calcul[0][:-1] +
                             decimaux(sous_resultat, True) +
                             sous_calcul[2][1:] +
                             post])
        else:
            solution.extend([pre +
                             sous_calcul[0] +
                             decimaux(sous_resultat, True) +
                             sous_calcul[2] +
                             post])
        calcul = sous_calcul[0] + decimaux(sous_resultat, True) + sous_calcul[2]
        test = re.search(pattern, calcul, re.VERBOSE)
    return (calcul, pre, post, solution)
Example #6
0
def plotify(calcul):
    r"""**plotify**\ (*calcul*)

    Convertit la chaîne de caractères `calcul` contenant
    des polynômes une chaîne de caractères au format psplot

    **TODO :** intégrer cela dans :mod:`outils.Affichage` et gérer l'ensemble des
    classes de Pyromaths.

    :param calcul: le calcul à traiter
    :type calcul: string

    >>> from pyromaths.outils import Priorites3
    >>> Priorites3.plotify('Polynome([[Fraction(-5, 192), 4], [Fraction(2, 96), 3], [Fraction(41, 48), 2], [Fraction(-7, 12), 1], [-4, 0]], "x", False)')
    '-5/192*x^4+2/96*x^3+41/48*x^2-7/12*x^1-4'

    :rtype: str
    """
    from pyromaths.classes.PolynomesCollege import Polynome
    from pyromaths.classes.Fractions import Fraction
    from Affichage import decimaux

    if isinstance(calcul, basestring): calcul = splitting(calcul)
    s = ""
    puiss = 0
    for i in range(len(calcul)):
        el = calcul[i]
        if el[:9] == "Polynome(":
            # Doit-on entourer ce polynôme de parenthèses ?
            p = eval(el)
            if i + 1 < len(calcul): q = calcul[i + 1]
            else: q = ""
            """ 3 cas :
            * {*,-}(2x+3) ou {*,-}(-2x)
            * (2x+3)*...
            * (2x+1)**2"""
            res = []
            for m in p.monomes:
                texte = ''
                if isinstance(m[0], Fraction): texte = str(m[0].n) + "/" + str(m[0].d)
                elif isinstance(m[0], (float, int)): texte = str(m[0])
                if m[1]: texte += "*x^%s" % m[1]
                res.append(texte)
            t = "+".join(res)
            t = t.replace("+-", "-")
            if (s and s[-1] in "*-" and (len(p) > 1 or p.monomes[0][0] < 0)) \
                or (q and q == "*" and len(p) > 1) \
                or ((len(p) > 1 or p.monomes[0][0] != 1) and q and q == "**"):
                s += "(" + t + ")"
            elif s and s[-1] == "+" and p.monomes[0][0] < 0:
                s = s[:-1]
                s += t
            else:
                s += t
        elif el[:9] == "Fraction(":
            # Doit-on entourer cette fraction de parenthèses ?
            p = el[9:-1].split(",")
            if len(p) == 2:
                texfrac = p[0] + "/" + p[1]
            else:
                raise ValueError(u'On ne devrait pas rencontrer de fraction non simplifiée ici')
            if i + 1 < len(calcul): q = calcul[i + 1]
            else: q = ""
            if (eval(p[0]) < 0 or p[1] != "1") and q and q == "**":
                s += "( " + texfrac + " )"
            else:
                s += texfrac
        elif EstNombre(el):
            if el[0] == "(": s += "(" + decimaux(el[1:-1]) + ")"
            else: s += decimaux(el)
        elif el == "**":
            s += "^("
            puiss += 1
        elif el == "(":
            if puiss: puiss += 1
            s += "("
        elif el == ")":
            if puiss: puiss -= 1
            s += ")"
        else :
            # "+", "-", "*", "/"
            s += el
        if puiss == 1 and s[-1] != "":
            puiss = 0
            s += ")"
    s = s.replace("**{", "^(")
    s = s.replace(r"\,", "*")
    return s
Example #7
0
def texify(liste_calculs):
    r"""**texify**\ (*liste_calculs*)

    Convertit la liste de chaînes de caractères `liste_calculs` contenant
    des polynômes en liste de chaînes de caractères au format TeX

    **TODO :** intégrer cela dans :mod:`outils.Affichage` et gérer l'ensemble des
    classes de Pyromaths.

    :param calcul: le calcul à traiter
    :type calcul: string

    >>> from pyromaths.outils import Priorites3
    >>> from pyromaths.classes.PolynomesCollege import Polynome
    >>> l = [['4', '+', '5', '-', '6'], ['9', '-', '6'], ['3']]
    >>> Priorites3.texify(l)
    ['4+5-6', '9-6', '3']
    >>> Priorites3.texify(Priorites3.priorites('(-7)+8-Polynome([[-4, 1], [-9, 2], [-5, 0]], "x")'))
    ['1-\\left( -4\\,x-9\\,x^{2}-5\\right) ', '1+4\\,x+9\\,x^{2}+5', '9\\,x^{2}+4\\,x+6']
    >>> Priorites3.texify([['Fraction(5,6)', '**', '2']])
    ['\\left(  \\dfrac{5}{6} \\right) ^{2}']

    :rtype: list
    """
    from pyromaths.classes.PolynomesCollege import Polynome
    from pyromaths.classes.Fractions import Fraction
    from pyromaths.classes.SquareRoot import SquareRoot
    from Affichage import decimaux
    ls = []
    enluminures = {'indice': r'_{', 'cancel':r'\cancel{'}
    isEnlumine = {'indice': False, 'cancel':False}
    for calcul in liste_calculs:
        if isinstance(calcul, basestring): calcul = splitting(calcul)
        s = ""
        puiss = 0
        for index in range(len(calcul)):
            el = calcul[index]
            for cle in isEnlumine.keys():
                if isEnlumine[cle] and (not isinstance(el, list) or el[1] != cle):
                    s += '}'
                    isEnlumine[cle] = False
            if isinstance(el, list):
                if not isEnlumine[el[1]]:
                    s += enluminures[el[1]]
                    isEnlumine[el[1]] = True
                el = el[0]
            if el[:9] == "Polynome(":
                # Doit-on entourer ce polynôme de parenthèses ?
                p = eval(el)
                if index + 1 < len(calcul): q = calcul[index + 1]
                else: q = ""
                """ 3 cas :
                * {*,-}(2x+3) ou {*,-}(-2x)
                * (2x+3)*...
                * (2x+1)**2"""
                if (s and s[-1] in "*-" and (len(p) > 1 or p.monomes[0][0] < 0)) \
                    or (q and q == "*" and len(p) > 1) \
                    or ((len(p) > 1 or (p.monomes[0][0] != 1 and p.monomes[0][1] > 0) or \
                         p.monomes[0][0] < 0 or \
                         (p.monomes[0][0] != 1 and isinstance(p.monomes[0][0], Fraction) and p.monomes[0][0].d != 1)) and q and q == "**"):
                    s += "(" + str(p) + ")"
                elif s and s[-1] == "+" and p.monomes[0][0] < 0:
                    s = s[:-1]
                    s += str(p)
                else:
                    s += str(p)
            elif el[:9] == "Fraction(":
                # Doit-on entourer cette fraction de parenthèses ?
                p = splitting(el[9:-1])
                # Gère le cas ou la fraction comprend des objets SquareRoot
                t = [""]
                for i in range(len(p)):
                    if p[i] == ',': t.append("")
                    else: t[-1] += p[i]
                p = t
                if len(p) == 2:
                    # texfrac = str(Fraction(eval(p[0]), eval(p[1])))
                    texfrac = str(Fraction(p[0], p[1]))
                else:
                    texfrac = str(Fraction(p[0], p[1], p[2]))
                if index + 1 < len(calcul): q = calcul[index + 1]
                else: q = ""
                if (eval(p[0]) < 0 or p[1] != "1") and q == "**":
                    s += "( " + texfrac + " )"
                else:
                    s += texfrac
            elif el[:11] == "SquareRoot(":
                p = eval(el)
                if index + 1 < len(calcul): q = calcul[index + 1]
                else: q = ""
                """ 3 cas :
                * {*,-}(2x+3) ou {*,-}(-2x)
                * (2x+3)*...
                * (2x+1)**2"""
                if (s and s[-1] in "*-" and (len(p) > 1 or p[0][0] < 0)) \
                    or (q and q == "*" and len(p) > 1) \
                    or ((len(p) > 1 or (p[0][0] != 1 and p[0][1] > 0) or \
                         p[0][0] < 0 or \
                         (p[0][0] != 1 and isinstance(p[0][0], Fraction) and p[0][0].d != 1)) and q and q == "**"):
                    s += "(" + str(p) + ")"
                elif s and s[-1] == "+" and p[0][0] < 0:
                    s = s[:-1]
                    s += str(p)
                else:
                    s += str(p)
            elif EstNombre(el):
                if index + 1 < len(calcul): q = calcul[index + 1]
                else: q = ""
                if el[0] == "(": s += "(" + decimaux(el[1:-1]) + ")"

                elif el[0] == '-' and ((s and s[-1] in "+/*-") \
                    or (q and q == "**")):
                    s += "(" + decimaux(el) + ")"

                else: s += decimaux(el)
            elif el == "**":
                s += "**{"
                puiss = 1
            elif el == "(":
                if puiss: puiss += 1
                s += "("
            elif el == ")":
                if puiss: puiss -= 1
                s += ")"
            else :
                # "+", "-", "*", "/"
                s += el
            if puiss == 1 and s[-1] != r"{":
                puiss = 0
                s += "}"
        for cle in isEnlumine.keys():
            if isEnlumine[cle] and (not isinstance(el, list) or el[1] != cle):
                s += '}'
        s = s.replace("**{", "^{")
        s = s.replace("(", "\\left( ")
        s = s.replace(")", "\\right) ")
        s = s.replace("\\left\\left", "\\left ")
        s = s.replace("\\right\\right", "\\right ")
        s = s.replace("*", "\\times ")
        s = s.replace("/", "\\div ")
        if not ls or s != ls[-1]:
            ls.append(s)
    return ls