no more float ready for decimal!

This commit is contained in:
Benjamin Bertrand
2016-02-15 15:20:24 +03:00
parent ab8b80758c
commit 821810ca47
4 changed files with 25 additions and 43 deletions

View File

@@ -7,7 +7,8 @@
from .generic import Stack, flatten_list, expand_list, isNumber, isOperator, isNumerand
from .str2tokens import str2tokens
from .operator import op
from .explicable import Explicable, Explicable_int, Explicable_float
from .explicable import Explicable, Explicable_int, Explicable_Decimal
from decimal import Decimal
from .random_expression import RdExpression
@@ -28,9 +29,9 @@ def pstf_factory(pstf_tokens):
>>> type(pstf_factory([2]))
<class 'pymath.calculus.explicable.Explicable_int'>
>>> pstf_factory([2.45])
2.45
Decimal('2.45')
>>> type(pstf_factory([2.45]))
<class 'pymath.calculus.explicable.Explicable_float'>
<class 'pymath.calculus.explicable.Explicable_Decimal'>
>>> from .fraction import Fraction
>>> f = Fraction(1,2)
>>> pstf_factory([f])
@@ -42,8 +43,10 @@ def pstf_factory(pstf_tokens):
except TypeError:
if isinstance(pstf_tokens[0], int):
return Explicable_int(pstf_tokens[0])
elif isinstance(pstf_tokens[0], Decimal):
return Explicable_Decimal(pstf_tokens[0])
elif isinstance(pstf_tokens[0], float):
return Explicable_float(pstf_tokens[0])
return Explicable_Decimal(Decimal(str(pstf_tokens[0])))
elif hasattr(pstf_tokens[0], 'STR_RENDER'):
return pstf_tokens[0]
else:
@@ -52,8 +55,10 @@ def pstf_factory(pstf_tokens):
if l_pstf_token == 1:
if isinstance(pstf_tokens[0], int):
return Explicable_int(pstf_tokens[0])
elif isinstance(pstf_tokens[0], Decimal):
return Explicable_Decimal(pstf_tokens[0])
elif isinstance(pstf_tokens[0], float):
return Explicable_float(pstf_tokens[0])
return Explicable_Decimal(Decimal(str(pstf_tokens[0])))
elif hasattr(pstf_tokens[0], 'STR_RENDER'):
return pstf_tokens[0]
else:
@@ -151,32 +156,6 @@ class Expression(Explicable):
)
)
# if len(expression.postfix_tokens) == 1:
# token = expression.postfix_tokens[0]
# if isinstance(token, Explicable_int) or isinstance(token, int):
# return Explicable_int(token)
# # TODO: J'en arrive au soucis même soucis qu'avec les fractions qui une fois simplifiée devrait être des Explicable_int. Mais comment on ne redéfini pas les opérations, ce sont les opérations des int qui se font et donc on perd toute l'historique. |sam. févr. 13 18:57:45 EAT 2016
# if isinstance(token, Explicable_float) or isinstance(token, float):
# return Explicable_float(token)
# elif hasattr(token, 'simplify') and hasattr(token, 'explain'):
# ans = expression.postfix_tokens[0]
# return ans
# elif isinstance(token, str):
# from .polynom import Polynom
# return Polynom([0,1], letter = token)
# else:
# raise ValueError(
# "Unknow token type in Expression: {}".format(
# type(token)))
# else:
# expression._isExpression = 1
# return expression
expression._isExpression = 1
return expression
@@ -202,8 +181,8 @@ class Expression(Explicable):
except AttributeError:
if isinstance(self.postfix_tokens[0],int):
self.simplified = Explicable_int(self.postfix_tokens[0])
elif isinstance(self.postfix_tokens[0],float):
self.simplified = Explicable_float(self.postfix_tokens[0])
elif isinstance(self.postfix_tokens[0],Decimal):
self.simplified = Explicable_Decimal(self.postfix_tokens[0])
else:
self.simplified = self