- Fixed many SyntaxWarnings (using raw strings where strings came with 
  wrong escapes)
Index: geophar/wxgeometrie/API/filtres.py
===================================================================
--- geophar.orig/wxgeometrie/API/filtres.py
+++ geophar/wxgeometrie/API/filtres.py
@@ -65,7 +65,7 @@ def filtre_versions_anterieures(fgeo, ve
                     cer = match_obj.group("cer")
                     deb = match_obj.group("deb")
                     return deb + dte + "," + cer + "," + dte + ".point1 is " + pt
-                figures[i] = re.sub("(?P<deb>Intersection_droite_cercle[(])(?P<dte>[a-zA-Z_]\w*)[,](?P<cer>[A-Za-z_]\w*)[,](?P<pt>[a-zA-Z_]\w*)", corrige1, figures[i])
+                figures[i] = re.sub(r"(?P<deb>Intersection_droite_cercle[(])(?P<dte>[a-zA-Z_]\w*)[,](?P<cer>[A-Za-z_]\w*)[,](?P<pt>[a-zA-Z_]\w*)", corrige1, figures[i])
                 figures[i] = figures[i].replace(".ordonnee()", ".ordonnee")\
                                                 .replace(".abscisse()", ".abscisse")\
                                                 .replace(".x()", ".x")\
@@ -81,7 +81,7 @@ def filtre_versions_anterieures(fgeo, ve
                     vec = match_obj.group("vec")
                     pt = match_obj.group("pt")
                     return deb + pt + "," + vec
-                figures[i] = re.sub("(?P<deb>Droite_vectorielle[(])(?P<vec>[a-zA-Z_]\w*)[,](?P<pt>[A-Za-z_]\w*)", corrige2, figures[i])
+                figures[i] = re.sub(r"(?P<deb>Droite_vectorielle[(])(?P<vec>[a-zA-Z_]\w*)[,](?P<pt>[A-Za-z_]\w*)", corrige2, figures[i])
                 def corrige3(match_obj): #Mediatrice
                     return match_obj.group().replace("objet1=", "point1=")\
                                                             .replace("objet2=", "point2=")\
Index: geophar/tools/runtests.py
===================================================================
--- geophar.orig/tools/runtests.py
+++ geophar/tools/runtests.py
@@ -150,7 +150,7 @@ def test(*paths, **kwargs):
     return t.test(sort=sort)
 
 def doctest(*paths, **kwargs):
-    """
+    r"""
     Runs doctests in all *py files in the sympy directory which match
     any of the given strings in `paths` or all tests if paths=[].
 
Index: geophar/wxgeometrie/pylib/securite.py
===================================================================
--- geophar.orig/wxgeometrie/pylib/securite.py
+++ geophar/wxgeometrie/pylib/securite.py
@@ -90,10 +90,10 @@ keywords_milieu = set(('or', 'and', 'as'
 keywords_non_affectables = keywords.difference(keywords_affectables).difference(keywords_milieu)
 
 def keywords_interdits_presents(chaine):
-    return bool(re.search(r'(?<!\w)(' + '|'.join(keywords_interdits) + ')(?!\w)', chaine))
+    return bool(re.search(r'(?<!\w)(' + '|'.join(keywords_interdits) + r')(?!\w)', chaine))
 
 def expression_affectable(chaine):
-    return not bool(re.match('[ ]*(' + '|'.join(keywords_non_affectables) + ')(?!\w)', chaine))
+    return not bool(re.match('[ ]*(' + '|'.join(keywords_non_affectables) + r')(?!\w)', chaine))
 
 
 # Exemple d'usage :
Index: geophar/wxgeometrie/modules/traceur/suites.py
===================================================================
--- geophar.orig/wxgeometrie/modules/traceur/suites.py
+++ geophar/wxgeometrie/modules/traceur/suites.py
@@ -136,7 +136,7 @@ class CreerSuite(MyMiniFrame):
             n0 = self.n0.value()
 
             d = objets.suiteDroited = Droite(Point(0, 0), Point(1, 1))
-            d.label("$y\ =\ x$")
+            d.label(r"$y\ =\ x$")
             M = objets.suitePointM0 = Point(u0, 0)
             M.label("$u_%s$" %(n0))
 #            self.parent.suites["u"] = [d, M]
Index: geophar/wxgeometrie/modules/tablatex/tests/test_tabvar.py
===================================================================
--- geophar.orig/wxgeometrie/modules/tablatex/tests/test_tabvar.py
+++ geophar/wxgeometrie/modules/tablatex/tests/test_tabvar.py
@@ -209,7 +209,7 @@ f'(x)                                &
 """
         self.assert_tabvar(s, tab)
 
-        s = "$f(x)=(2x+3)\e^x$ sur $[0\,;\,+\oo[$"
+        s = r"$f(x)=(2x+3)\e^x$ sur $[0\,;\,+\oo[$"
         tab = \
 r'''\setlength{\TVextraheight}{\baselineskip}
 \[\begin{tabvar}{|C|CCC|}
@@ -285,7 +285,7 @@ r'''\setlength{\TVextraheight}{\baseline
 
     def test_issue_189(self, ):
         # Tableaux de signes et de variation avec des decimaux
-        s = 'f(x) = (x -4)\e^{-0,25x+5} sur [4;20]'
+        s = r'f(x) = (x -4)\e^{-0,25x+5} sur [4;20]'
         options = {'derivee': False, 'decimales': 3, 'stretch': False}
         tab = \
 r'''\setlength{\TVextraheight}{\baselineskip}
Index: geophar/wxgeometrie/modules/tablatex/tests/test_tabsign.py
===================================================================
--- geophar.orig/wxgeometrie/modules/tablatex/tests/test_tabsign.py
+++ geophar/wxgeometrie/modules/tablatex/tests/test_tabsign.py
@@ -137,7 +137,7 @@ $\frac{3x-2}{(x-1)^{2}}$ &           & $
 
 
     def test_latex(self, ):
-        s = '\dfrac{3x-2}{(x-1)^2}'
+        s = r'\dfrac{3x-2}{(x-1)^2}'
         tab = \
 r'''\providecommand{\geopharDB}[1]{$\left|\vphantom{\text{#1}}\right|$}
 \begin{center}
@@ -158,7 +158,7 @@ $\dfrac{3x-2}{(x-1)^{2}}$ &           &
 '''
         self.assert_tabsign(s, tab)
 
-        s = "g(x)=\dfrac{-x+1}{\e^{x}}"
+        s = r"g(x)=\dfrac{-x+1}{\e^{x}}"
         tab = \
 r'''\begin{center}
 \begin{tabular}{|c|ccccc|}
@@ -178,7 +178,7 @@ $g(x)$   &           & + &  0  & $-$ &
 '''
         self.assert_tabsign(s, tab)
 
-        s= "f'(x)=1-\e^{-x+2}"
+        s= r"f'(x)=1-\e^{-x+2}"
         tab = \
 r'''\begin{center}
 \begin{tabular}{|c|ccccc|}
@@ -276,7 +276,7 @@ $u(x)$ & \geopharDB{$u(x)$} &  +  &  0
 
 
     def test_issue_173(self, ):
-        s = "(1 - x)\e^{ 2x}"
+        s = r"(1 - x)\e^{ 2x}"
         tab = \
 r'''\begin{center}
 \begin{tabular}{|c|ccccc|}
Index: geophar/wxgeometrie/modules/tablatex/tabvar.py
===================================================================
--- geophar.orig/wxgeometrie/modules/tablatex/tabvar.py
+++ geophar/wxgeometrie/modules/tablatex/tabvar.py
@@ -278,7 +278,7 @@ x;\\sqrt{x};(\\sqrt{x})': 0;0;| << +oo;+
 
 
     # On élargit un peu la case (pour l'esthétique...)
-    ligne_variable = '\,\,%s\,\,' %  ligne_variable
+    ligne_variable = r'\,\,%s\,\,' %  ligne_variable
 
 
     # on découpe la chaîne, en une suite contenant soit les valeurs de x, f(x) (et éventuellement f'(x)),
Index: geophar/wxgeometrie/modules/exercice_tableau_signes/__init__.py
===================================================================
--- geophar.orig/wxgeometrie/modules/exercice_tableau_signes/__init__.py
+++ geophar/wxgeometrie/modules/exercice_tableau_signes/__init__.py
@@ -109,7 +109,7 @@ class ExercicesTableauxSignes(Exercice):
 
     def _formater(self, expression):
         expression = expression.replace('**', '^').replace('*', '').replace(' ', '')
-        if not re.match('-?(%s)?x?(\(.+\)(\^%s)?)?$' % (NBR, NBR), expression):
+        if not re.match(r'-?(%s)?x?(\(.+\)(\^%s)?)?$' % (NBR, NBR), expression):
             expression = '(' + expression + ')'
         return expression
 
Index: geophar/wxgeometrie/modules/exercice_inequations_produits/__init__.py
===================================================================
--- geophar.orig/wxgeometrie/modules/exercice_inequations_produits/__init__.py
+++ geophar/wxgeometrie/modules/exercice_inequations_produits/__init__.py
@@ -227,7 +227,7 @@ class ExercicesTableauxSignes(Panel_API_
 
     def _formater(self, expression):
         expression = expression.replace('**', '^').replace('*', '').replace(' ', '')
-        if not re.match('-?(%s)?x?(\(.+\)(\^%s)?)?$' % (NBR, NBR), expression):
+        if not re.match(r'-?(%s)?x?(\(.+\)(\^%s)?)?$' % (NBR, NBR), expression):
             expression = '(' + expression + ')'
         return expression
 
Index: geophar/wxgeometrie/mathlib/tests/test_parsers.py
===================================================================
--- geophar.orig/wxgeometrie/mathlib/tests/test_parsers.py
+++ geophar/wxgeometrie/mathlib/tests/test_parsers.py
@@ -167,7 +167,7 @@ class MathlibTest(tools.unittests.TestCa
                      "((1+10/100)*(1+5/100)*(1-7/100))**(((1)/(3)))")
         self.assert_latex("\\text{0.7}\\times (-50)^2-9\\times (-50)+200", "(0.7)*(-50)**2-9*(-50)+200")
         self.assert_latex("\\ln(2)+\\exp(3)+\\log(\\pi+1)", "ln(2)+exp(3)+log(pi+1)")
-        self.assert_latex("x\ge1\le3", "x>=1<=3")
+        self.assert_latex(r"x\ge1\le3", "x>=1<=3")
         self.assert_latex(r"100\left(\left(1+\dfrac{50}{100}\right)^\frac{1}{10}-1\right)",
                      "100*((1+((50)/(100)))**((1)/(10))-1)")
         self.assert_latex("M = \\begin{pmatrix}\n0,6 & 0,4\\\\\n0,75& 0,25\\\\\n\\end{pmatrix}",
@@ -188,7 +188,7 @@ class MathlibTest(tools.unittests.TestCa
         self.assert_not_NBR("5-6")
         self.assert_not_NBR(".")
         # Regression test for issue FS#252
-        self.assert_match('\(' + NBR_SIGNE, "(-2.3")
+        self.assert_match(r'\(' + NBR_SIGNE, "(-2.3")
 
     def test_VAR(self):
         self.assert_VAR("Arertytre")
Index: geophar/wxgeometrie/mathlib/tests/test_interprete.py
===================================================================
--- geophar.orig/wxgeometrie/mathlib/tests/test_interprete.py
+++ geophar/wxgeometrie/mathlib/tests/test_interprete.py
@@ -70,7 +70,7 @@ class MathlibTest(tools.unittests.TestCa
         self.assert_resultat('cos x>>taylor', \
                     '1 - x^2/2 + x^4/24 + O(x^5)', \
                    r'1 - \frac{x^{2}}{2} + \frac{x^{4}}{24} + \mathcal{O}\left(x^{5}\right)')
-        self.assert_resultat('limit(x^2-x, oo)', '+oo', '+\infty')
+        self.assert_resultat('limit(x^2-x, oo)', '+oo', r'+\infty')
 
     def test_exemples_de_base_algebre(self):
         self.assert_resultat('developpe((x-3)(x+7)(2y+x+5))', \
@@ -90,7 +90,7 @@ class MathlibTest(tools.unittests.TestCa
         self.assert_resultat('factorise(x^2+7x+53)', 'x^2 + 7 x + 53', 'x^{2} + 7 x + 53')
         self.assert_resultat('factor(exp(x)x^2+2x*exp(x)+exp(x))', \
                                         '(x + 1)^2 exp(x)', \
-                                        '\left(x + 1\\right)^{2} \\mathrm{e}^{x}')
+                                        r'\left(x + 1\right)^{2} \mathrm{e}^{x}')
         self.assert_resultat('evalue(pi-1)', '2,14159265358979324', '2,14159265358979324')
         self.assert_resultat('somme(x^2, (x, 1, 7))', '140', '140')
         self.assert_resultat('somme(x^2, x, 1, 7)', '140', '140')
@@ -117,7 +117,7 @@ class MathlibTest(tools.unittests.TestCa
         self.assert_resultat('abs(-24/5 - 2 i/5)', '2 sqrt(145)/5')
         self.assert_resultat('+oo - 2,5', '+oo', r'+\infty')
 
-    ''' CE TEST PART EN VRILLE : CONSTATÉ AVEC DEBIAN UNSTABLE, LE 10/08/2024
+    r''' CE TEST PART EN VRILLE : CONSTATÉ AVEC DEBIAN UNSTABLE, LE 10/08/2024
     @unittest.expectedFailure
     def test_exemples_de_base_canonique(self):
         """
@@ -154,7 +154,7 @@ class MathlibTest(tools.unittests.TestCa
         self.assertIn(r, ('{i ; -i}', '{-i ; i}'))
         self.assertIn(l, (r'$\left\{- \mathrm{i}\,;\,\mathrm{i}\right\}$',
                      r'$\left\{\mathrm{i}\,;\,- \mathrm{i}\right\}$'))
-        r, l = i.evaluer("resoudre(2+\i=\dfrac{2\i z}{z-1}")
+        r, l = i.evaluer(r"resoudre(2+\i=\dfrac{2\i z}{z-1}")
         self.assertEqual(r, '{3/5 + 4 i/5}')
         self.assertEqual(l, r'$\left\{\frac{3}{5} + \frac{4}{5} \mathrm{i}\right\}$')
         r, l = i.evaluer("resoudre(x^2=-1 et 2x=-2i")
@@ -330,7 +330,7 @@ class MathlibTest(tools.unittests.TestCa
     're(x)',
     ]"""
         i.load_state(etat_interne)
-        i.evaluer("-1+\i\sqrt{3}")
+        i.evaluer(r"-1+\i\sqrt{3}")
         self.assertDernier(i, '-1 + sqrt(3)*i')
         i.evaluer('-x**2 + 2*x - 3>>factor')
         self.assertDernier(i, '-x^2 + 2*x - 3')
@@ -472,7 +472,7 @@ class MathlibTest(tools.unittests.TestCa
         # sympy 1.0 : '5,28725822993202*10^-16'
         # Wofram Alpha (01/05/2016) : 5/9007199254740992~~5.55112×10^-16
         # On teste que ce soit en gros correct, sans se focaliser sur les décimales.
-        self.assertTrue(re.match("5,[0-9]+\*10\^\-16$", r))
+        self.assertTrue(re.match(r"5,[0-9]+\*10\^\-16$", r))
         self.assertTrue(re.match(r"\$5,[0-9]+[ ]\\cdot[ ]10\^{-16}\$$", l))
         # Second part of the issue (scientific notation handling).
         i.calcul_exact = False
Index: geophar/wxgeometrie/mathlib/printers.py
===================================================================
--- geophar.orig/wxgeometrie/mathlib/printers.py
+++ geophar/wxgeometrie/mathlib/printers.py
@@ -286,7 +286,7 @@ class CustomLatexPrinter(MyCustomPrinter
         if expr.vide:
             return r"\varnothing"
         tex = r"\cup".join(self._print(intervalle) for intervalle in expr.intervalles)
-        tex = tex.replace(r"\right\}\cup\left\{", "\,;\, ")
+        tex = tex.replace(r"\right\}\cup\left\{", r"\,;\, ")
         return tex
 
     def _print_Mul(self, expr):
@@ -300,7 +300,7 @@ class CustomLatexPrinter(MyCustomPrinter
 
     def _print_set(self, expr):
         if expr:
-            return r'\left\{%s\right\}' % '\,;\,'.join(self._print(val) for val in expr)
+            return r'\left\{%s\right\}' % r'\,;\,'.join(self._print(val) for val in expr)
         return r"\emptyset"
 
     def _print_Intervalle(self, expr):
@@ -319,7 +319,7 @@ class CustomLatexPrinter(MyCustomPrinter
         return r"%s%s;%s%s" % (left, self._print(expr.inf), self._print(expr.sup), right)
 
     def _print_tuple(self, expr):
-        return r"\left(" + ",\,".join(self._print(item) for item in expr) + r"\right)"
+        return r"\left(" + r",\,".join(self._print(item) for item in expr) + r"\right)"
 
     def _print_log(self, expr, exp=None):
         if len(expr.args) == 1 and isinstance(expr.args[0], (Symbol, Integer)):
Index: geophar/wxgeometrie/mathlib/parsers.py
===================================================================
--- geophar.orig/wxgeometrie/mathlib/parsers.py
+++ geophar/wxgeometrie/mathlib/parsers.py
@@ -99,7 +99,7 @@ NBR_VIRGULE = "(?:(?<![.A-Za-z0-9_])(?:[
 NBR_OR_VAR = "(?:" + NBR + "|" + VAR + ")"
 NBR_SIGNE_OR_VAR = "(?:" + NBR_SIGNE + "|" + VAR + ")"
 # Liste simple (non imbriquée)
-LISTE_SIMPLE = "\[[^][]+\]"
+LISTE_SIMPLE = r"\[[^][]+\]"
 # Matrice
 MATRICE = r"\[ ?(%s ?, ?)*(%s) ?\]" % (LISTE_SIMPLE, LISTE_SIMPLE)
 
@@ -141,7 +141,7 @@ def _arguments_latex(chaine, nbr_argumen
 
 
 def _convertir_latex_frac(chaine):
-    """Convertit \frac{a}{b}, \dfrac{a}{b} et \tfrac{a}{b} en ((a)/(b)).
+    r"""Convertit \frac{a}{b}, \dfrac{a}{b} et \tfrac{a}{b} en ((a)/(b)).
 
     >>> from wxgeometrie.mathlib.parsers import _convertir_latex_frac
     >>> _convertir_latex_frac('3+\dfrac{1}{2x+1}+5x+1')
@@ -219,7 +219,7 @@ def _ajouter_mult_manquants(formule, fon
         print('4', formule)
 
     # On remplace ")x" par ")*x"
-    formule = regsub("[)][ ]?\w", formule, lambda s: s[0] + '*' + s[-1])
+    formule = regsub(r"[)][ ]?\w", formule, lambda s: s[0] + '*' + s[-1])
     # TODO: traiter le cas des mots-clés
 
     # Cas des mots-clés: on supprime les '*' introduits à tort.
@@ -450,9 +450,9 @@ def traduire_formule(formule='', fonctio
         formule = formule.replace("{", "(").replace("}", ")")
         formule = regsub("[ ]?(left|right)[])([]", formule, lambda s: s[-1])
         # De même, les notations "times", "over" et "sup" d'OpenOffice.org sont converties.
-        formule = regsub("\Wtimes\W", formule, lambda s: (s[0] + '*' + s[-1]).strip())
-        formule = regsub("\Wover\W", formule, lambda s: (s[0] + '/' + s[-1]).strip())
-        formule = regsub("\Wsup\W", formule, lambda s: (s[0] + '**' + s[-1]).strip())
+        formule = regsub(r"\Wtimes\W", formule, lambda s: (s[0] + '*' + s[-1]).strip())
+        formule = regsub(r"\Wover\W", formule, lambda s: (s[0] + '/' + s[-1]).strip())
+        formule = regsub(r"\Wsup\W", formule, lambda s: (s[0] + '**' + s[-1]).strip())
         formule = formule.replace('infinity', 'oo')
 
     # Conversion des | | **non imbriqués** en abs().
@@ -467,7 +467,7 @@ def traduire_formule(formule='', fonctio
         print('5', formule)
 
     # n! devient factoriel(n).
-    formule = regsub("\w+[!]", formule, (lambda s: 'factoriel(%s)' % s[:-1]))
+    formule = regsub(r"\w+[!]", formule, (lambda s: 'factoriel(%s)' % s[:-1]))
 
 
     # (5 2) devient binomial(5, 2)
Index: geophar/wxgeometrie/geolib/feuille.py
===================================================================
--- geophar.orig/wxgeometrie/geolib/feuille.py
+++ geophar/wxgeometrie/geolib/feuille.py
@@ -820,7 +820,7 @@ class Interprete_feuille(object):
         commande = re.sub(r"(%s)[ ]*->[ ]*(%s)" % (VAR, VAR), _vecAB, commande)
 
         # 1,2 ou 1;2 ou 1 2 ou (1,2) ou (1;2) ou (1 2) *uniquement* -> Point(1,2)
-        m = re.match("(\()?(?P<x>%s)[ ]?[;, ][ ]?(?P<y>%s)(?(1)\))$" % (NBR_SIGNE, NBR_SIGNE), commande)
+        m = re.match(r"(\()?(?P<x>%s)[ ]?[;, ][ ]?(?P<y>%s)(?(1)\))$" % (NBR_SIGNE, NBR_SIGNE), commande)
         if m:
             commande = "Point(%(x)s,%(y)s)" % m.groupdict()
 
Index: geophar/wxgeometrie/geolib/angles.py
===================================================================
--- geophar.orig/wxgeometrie/geolib/angles.py
+++ geophar/wxgeometrie/geolib/angles.py
@@ -235,7 +235,7 @@ class Angle_oriente(Secteur_angulaire):
 
 
 class Angle(Secteur_angulaire):
-    """Un angle.
+    r"""Un angle.
 
     Un angle non orienté, défini par 3 points A, B, C -> angle /ABC\."""
 
