# -*- coding: iso-8859-1 -*-
from __future__ import division # 1/2 == .5 (par defaut, 1/2 == 0)

##############################

# IMPORTANT : setattr et getattr ne sont pas traités.

methodes = """repr
                        str
                        hash
                        nonzero
                        unicode
                        call
                        len
                        getitem
                        setitem
                        delitem
                        iter
                        contains
                        iadd
                        isub
                        imul
                        idiv
                        itruediv
                        ifloordiv
                        imod
                        ipow
                        ilshift
                        irshift
                        iand
                        ixor
                        ior
                        neg
                        pos
                        abs
                        invert
                        complex
                        int
                        long
                        float
                        oct
                        hex
                        coerce
                        
                            """

methodes_arithmetiques = """                        
                        lt
                        le
                        eq
                        ne
                        gt
                        ge
                        cmp
                        rcmp
                        add
                        sub
                        mul
                        floordiv
                        mod
                        divmod
                        pow
                        lshift
                        rshift
                        and
                        xor
                        or
                        div
                        truediv
                        radd
                        rsub
                        rmul
                        rdiv
                        rtruediv
                        rfloordiv
                        rmod
                        rdivmod
                        rpow
                        rlshift
                        rrshift
                        rand
                        rxor
                        ror

                        
                            """
##############################

methodes = list(set(methode.strip() for methode in methodes.splitlines() if methode.strip()))
methodes.sort()
methodes_arithmetiques = list(set(methode.strip() for methode in methodes_arithmetiques.splitlines() if methode.strip()))
methodes_arithmetiques.sort()
texte = ""

for methode in methodes_arithmetiques:
    texte += """
    def __%(methode)s__(self, *args, **kw):
        if param.debug:    warning("Utilisation d'un objet Argument, à la place de son contenu.")
        if hasattr(self.__objet__, "__%(methode)s__"):
            return self.__objet__.__%(methode)s__(*args, **kw)
        else:
            return NotImplemented
            """ %locals()
                                                          

for methode in methodes:
    texte += """
    def __%(methode)s__(self, *args, **kw):
        if param.debug:    warning("Utilisation d'un objet Argument, à la place de son contenu.")
        if hasattr(self.__objet__, "__%(methode)s__"):
            return self.__objet__.__%(methode)s__(*args, **kw)
        else:
            raise AttributeError, repr(self.__objet__) + " has no attribute '" + "__%(methode)s__" + "'"
            """ %locals()

print texte
