Doctest for operator_set
This commit is contained in:
parent
1e3e0418df
commit
5002fbe4ae
@ -10,6 +10,7 @@ from .par import Par
|
|||||||
from .pw import Pw
|
from .pw import Pw
|
||||||
from .sub import Sub
|
from .sub import Sub
|
||||||
from .sub1 import Sub1
|
from .sub1 import Sub1
|
||||||
|
from .operator import Operator
|
||||||
|
|
||||||
|
|
||||||
class Operator_set(object):
|
class Operator_set(object):
|
||||||
@ -20,19 +21,33 @@ class Operator_set(object):
|
|||||||
self._operators = {}
|
self._operators = {}
|
||||||
|
|
||||||
def get_op(self, op, arity = 2):
|
def get_op(self, op, arity = 2):
|
||||||
"""Return the corresponding operator
|
r"""Return the corresponding operator
|
||||||
|
|
||||||
:op: symbole of the op
|
:op: symbole of the op
|
||||||
:arity: the arity
|
:arity: the arity (default is 2)
|
||||||
|
|
||||||
>>> op = Operator_set()
|
>>> op = Operator_set()
|
||||||
|
>>> op.store_operator(Add())
|
||||||
>>> op.get_op('+')
|
>>> op.get_op('+')
|
||||||
'+'
|
+
|
||||||
|
>>> mul = op.get_op('*')
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
KeyError: '* (arity: 2) is not available'
|
||||||
|
>>> op.store_operator(Mul())
|
||||||
>>> mul = op.get_op('*')
|
>>> mul = op.get_op('*')
|
||||||
>>> mul.tex
|
>>> mul.tex
|
||||||
'{op1} \\\\times {op2}'
|
'{op1} \\times {op2}'
|
||||||
>>> mul.txt
|
>>> mul.txt
|
||||||
'{op1} * {op2}'
|
'{op1} * {op2}'
|
||||||
|
>>> op.store_operator(Sub1())
|
||||||
|
>>> sub1 = op.get_op('-')
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
KeyError: '- (arity: 2) is not available'
|
||||||
|
>>> sub1 = op.get_op('-', 1)
|
||||||
|
>>> sub1.tex
|
||||||
|
'- {op1}'
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
return getattr(self, self._operators[(op, arity)])
|
return getattr(self, self._operators[(op, arity)])
|
||||||
@ -40,7 +55,17 @@ class Operator_set(object):
|
|||||||
raise KeyError("{theOp} (arity: {arity}) is not available".format(theOp = op, arity = arity))
|
raise KeyError("{theOp} (arity: {arity}) is not available".format(theOp = op, arity = arity))
|
||||||
|
|
||||||
def can_be_operator(cls, symbole):
|
def can_be_operator(cls, symbole):
|
||||||
""" Tell if the symbole can be an operator """
|
r"""
|
||||||
|
Tell if the symbole can be an operator
|
||||||
|
|
||||||
|
>>> op = Operator_set()
|
||||||
|
>>> op.can_be_operator("+")
|
||||||
|
False
|
||||||
|
>>> op.store_operator(Add())
|
||||||
|
>>> op.can_be_operator("+")
|
||||||
|
True
|
||||||
|
|
||||||
|
"""
|
||||||
if type(symbole) == str:
|
if type(symbole) == str:
|
||||||
return symbole in [i[0] for i in cls._operators]
|
return symbole in [i[0] for i in cls._operators]
|
||||||
else:
|
else:
|
||||||
@ -50,10 +75,23 @@ class Operator_set(object):
|
|||||||
""" Save the operator as a method and
|
""" Save the operator as a method and
|
||||||
|
|
||||||
:param operator: the operator (the class) (it will be accessible through .name method name.
|
:param operator: the operator (the class) (it will be accessible through .name method name.
|
||||||
|
|
||||||
|
>>> op = Operator_set()
|
||||||
|
>>> op._operators
|
||||||
|
{}
|
||||||
|
>>> op.store_operator(Add())
|
||||||
|
>>> op._operators
|
||||||
|
{('+', 2): 'add'}
|
||||||
|
>>> op.store_operator("+")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: + is not en Operator it's a <class 'str'>
|
||||||
"""
|
"""
|
||||||
# TODO: faire une vérif si on peut utiliser operator_name |mar. févr. 23 09:09:44 EAT 2016
|
if isinstance(operator, Operator):
|
||||||
self._operators[operator.uniq_desc()] = operator.name
|
self._operators[operator.uniq_desc()] = operator.name
|
||||||
setattr(self, operator.name, operator)
|
setattr(self, operator.name, operator)
|
||||||
|
else:
|
||||||
|
raise ValueError("{} is not en Operator it's a {}".format(operator, type(operator)))
|
||||||
|
|
||||||
|
|
||||||
op = Operator_set()
|
op = Operator_set()
|
||||||
@ -65,16 +103,6 @@ op.store_operator(Pw())
|
|||||||
op.store_operator(Sub())
|
op.store_operator(Sub())
|
||||||
op.store_operator(Sub1())
|
op.store_operator(Sub1())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Reglages pour 'vim'
|
# Reglages pour 'vim'
|
||||||
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
|
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
|
||||||
|
Loading…
Reference in New Issue
Block a user