Add GPL License
[linpy.git] / pypol / linexprs.py
index c5f4336..3dd03ef 100644 (file)
@@ -1,3 +1,20 @@
+"""
+    This file is part of Linpy.
+
+    Linpy is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    Linpy is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with Linpy.  If not, see <http://www.gnu.org/licenses/>.
+"""
+
 import ast
 import functools
 import numbers
@@ -278,7 +295,7 @@ class Expression:
             string += ' + {}'.format(constant._repr_latex_().strip('$'))
         elif constant < 0:
             string += ' - {}'.format((-constant)._repr_latex_().strip('$'))
-        return '${}$'.format(string)
+        return '$${}$$'.format(string)
 
     def _parenstr(self, always=False):
         string = str(self)
@@ -359,7 +376,7 @@ class Symbol(Expression):
         return self.name
 
     def _repr_latex_(self):
-        return '${}$'.format(self.name)
+        return '$${}$$'.format(self.name)
 
     @classmethod
     def fromsympy(cls, expr):
@@ -401,7 +418,7 @@ class Dummy(Symbol):
         return '_{}'.format(self.name)
 
     def _repr_latex_(self):
-        return '${}_{{{}}}$'.format(self.name, self._index)
+        return '$${}_{{{}}}$$'.format(self.name, self._index)
 
 
 def symbols(names):
@@ -413,11 +430,13 @@ def symbols(names):
 class Rational(Expression, Fraction):
 
     def __new__(cls, numerator=0, denominator=None):
-        self = Fraction.__new__(cls, numerator, denominator)
+        self = object().__new__(cls)
         self._coefficients = {}
-        self._constant = Fraction(self)
+        self._constant = Fraction(numerator, denominator)
         self._symbols = ()
         self._dimension = 0
+        self._numerator = self._constant.numerator
+        self._denominator = self._constant.denominator
         return self
 
     def __hash__(self):
@@ -441,12 +460,12 @@ class Rational(Expression, Fraction):
 
     def _repr_latex_(self):
         if self.denominator == 1:
-            return '${}$'.format(self.numerator)
+            return '$${}$$'.format(self.numerator)
         elif self.numerator < 0:
-            return '$-\\frac{{{}}}{{{}}}$'.format(-self.numerator,
+            return '$$-\\frac{{{}}}{{{}}}$$'.format(-self.numerator,
                 self.denominator)
         else:
-            return '$\\frac{{{}}}{{{}}}$'.format(self.numerator,
+            return '$$\\frac{{{}}}{{{}}}$$'.format(self.numerator,
                 self.denominator)
 
     @classmethod
@@ -458,3 +477,5 @@ class Rational(Expression, Fraction):
             return Rational(expr)
         else:
             raise TypeError('expr must be a sympy.Rational instance')
+            
+# Copyright 2014 MINES ParisTech