74 lines
1.7 KiB
Python
74 lines
1.7 KiB
Python
#!/usr/bin/env python
|
|
# encoding: utf-8
|
|
|
|
|
|
from .operator import Operator
|
|
from ..generic import flatten_list
|
|
|
|
class Pw(Operator):
|
|
|
|
""" The operator ^
|
|
|
|
>>> pw = Pw()
|
|
>>> pw
|
|
^
|
|
>>> pw(2, 3)
|
|
8
|
|
>>> pw.__tex__('2','3')
|
|
'2^{ 3 }'
|
|
>>> pw.__tex__('2','-3')
|
|
'2^{ -3 }'
|
|
>>> pw.__tex__('-2','3')
|
|
'( -2 )^{ -3 }'
|
|
>>> pw.__txt__('2','3')
|
|
'2 ^ 3'
|
|
>>> pw.__txt__('-2','3')
|
|
'( -2 ) ^ 3'
|
|
>>> pw.__txt__('2','-3')
|
|
'2 ^ ( -3 )'
|
|
"""
|
|
|
|
_CARACT = {
|
|
"operator" : "^", \
|
|
"name" : "pw",\
|
|
"priority" : 6, \
|
|
"arity" : 2, \
|
|
"actions" : ("__pow__",""), \
|
|
"txt" : "{op1} ^ {op2}",\
|
|
"tex" : "{op1}^{{ {op2} }}",\
|
|
}
|
|
|
|
def __init__(self):
|
|
""" Initiate Pw Operator """
|
|
super(Pw, self).__init__(**self._CARACT)
|
|
|
|
def __call__(self, op1, op2):
|
|
""" Calling this operator performs the rigth calculus """
|
|
return getattr(op1, "__pow__")(op2)
|
|
|
|
def l_parenthesis(self, opl, str_join=False):
|
|
""" Add parenthesis for left operand if necessary """
|
|
ans = opl
|
|
try:
|
|
if opl.mainOp.priority < self.priority:
|
|
ans = flatten_list(["(", opl, ")"])
|
|
except AttributeError as e:
|
|
# op has not the attribute priority
|
|
pass
|
|
try:
|
|
if int(opl) < 0:
|
|
ans = ["(", opl, ")"]
|
|
except ValueError:
|
|
pass
|
|
|
|
ans = flatten_list([ans])
|
|
if str_join:
|
|
ans = ' '.join([str(i) for i in ans])
|
|
return ans
|
|
|
|
|
|
# -----------------------------
|
|
# Reglages pour 'vim'
|
|
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
|
|
# cursor: 16 del
|