Home | History | Annotate | Download | only in cpython
      1 from cpython.ref cimport PyObject
      2 
      3 cdef extern from "Python.h":
      4 
      5     #####################################################################
      6     # 6.2 Number Protocol
      7     #####################################################################
      8 
      9     bint PyNumber_Check(object o)
     10     # Returns 1 if the object o provides numeric protocols, and false
     11     # otherwise. This function always succeeds.
     12 
     13     object PyNumber_Add(object o1, object o2)
     14     # Return value: New reference.
     15     # Returns the result of adding o1 and o2, or NULL on failure. This
     16     # is the equivalent of the Python expression "o1 + o2".
     17 
     18     object PyNumber_Subtract(object o1, object o2)
     19     # Return value: New reference.
     20     # Returns the result of subtracting o2 from o1, or NULL on
     21     # failure. This is the equivalent of the Python expression "o1 -
     22     # o2".
     23 
     24     object PyNumber_Multiply(object o1, object o2)
     25     # Return value: New reference.
     26     # Returns the result of multiplying o1 and o2, or NULL on
     27     # failure. This is the equivalent of the Python expression "o1 *
     28     # o2".
     29 
     30     object PyNumber_Divide(object o1, object o2)
     31     # Return value: New reference.
     32     # Returns the result of dividing o1 by o2, or NULL on
     33     # failure. This is the equivalent of the Python expression "o1 /
     34     # o2".
     35 
     36     object PyNumber_FloorDivide(object o1, object o2)
     37     # Return value: New reference.
     38     # Return the floor of o1 divided by o2, or NULL on failure. This
     39     # is equivalent to the ``classic'' division of integers.
     40 
     41     object PyNumber_TrueDivide(object o1, object o2)
     42     # Return value: New reference.
     43     # Return a reasonable approximation for the mathematical value of
     44     # o1 divided by o2, or NULL on failure. The return value is
     45     # ``approximate'' because binary floating point numbers are
     46     # approximate; it is not possible to represent all real numbers in
     47     # base two. This function can return a floating point value when
     48     # passed two integers.
     49 
     50     object PyNumber_Remainder(object o1, object o2)
     51     # Return value: New reference.
     52     # Returns the remainder of dividing o1 by o2, or NULL on
     53     # failure. This is the equivalent of the Python expression "o1 %
     54     # o2".
     55 
     56     object PyNumber_Divmod(object o1, object o2)
     57     # Return value: New reference.
     58     # See the built-in function divmod(). Returns NULL on
     59     # failure. This is the equivalent of the Python expression
     60     # "divmod(o1, o2)".
     61 
     62     object PyNumber_Power(object o1, object o2, object o3)
     63     # Return value: New reference.
     64     # See the built-in function pow(). Returns NULL on failure. This
     65     # is the equivalent of the Python expression "pow(o1, o2, o3)",
     66     # where o3 is optional. If o3 is to be ignored, pass Py_None in
     67     # its place (passing NULL for o3 would cause an illegal memory
     68     # access).
     69 
     70     object PyNumber_Negative(object o)
     71     # Return value: New reference.
     72     # Returns the negation of o on success, or NULL on failure. This
     73     # is the equivalent of the Python expression "-o".
     74 
     75     object PyNumber_Positive(object o)
     76     # Return value: New reference.
     77     # Returns o on success, or NULL on failure. This is the equivalent
     78     # of the Python expression "+o".
     79 
     80     object PyNumber_Absolute(object o)
     81     # Return value: New reference.
     82     # Returns the absolute value of o, or NULL on failure. This is the
     83     # equivalent of the Python expression "abs(o)".
     84 
     85     object PyNumber_Invert(object o)
     86     # Return value: New reference.
     87     # Returns the bitwise negation of o on success, or NULL on
     88     # failure. This is the equivalent of the Python expression "~o".
     89 
     90     object PyNumber_Lshift(object o1, object o2)
     91     # Return value: New reference.
     92     # Returns the result of left shifting o1 by o2 on success, or NULL
     93     # on failure. This is the equivalent of the Python expression "o1
     94     # << o2".
     95 
     96     object PyNumber_Rshift(object o1, object o2)
     97     # Return value: New reference.
     98     # Returns the result of right shifting o1 by o2 on success, or
     99     # NULL on failure. This is the equivalent of the Python expression
    100     # "o1 >> o2".
    101 
    102     object PyNumber_And(object o1, object o2)
    103     # Return value: New reference.
    104     # Returns the ``bitwise and'' of o1 and o2 on success and NULL on
    105     # failure. This is the equivalent of the Python expression "o1 &
    106     # o2".
    107 
    108     object PyNumber_Xor(object o1, object o2)
    109     # Return value: New reference.
    110     # Returns the ``bitwise exclusive or'' of o1 by o2 on success, or
    111     # NULL on failure. This is the equivalent of the Python expression
    112     # "o1 ^ o2".
    113 
    114     object PyNumber_Or(object o1, object o2)
    115     # Return value: New reference.
    116     # Returns the ``bitwise or'' of o1 and o2 on success, or NULL on failure. This is the equivalent of the Python expression "o1 | o2".
    117 
    118     object PyNumber_InPlaceAdd(object o1, object o2)
    119     # Return value: New reference.
    120     # Returns the result of adding o1 and o2, or NULL on failure. The
    121     # operation is done in-place when o1 supports it. This is the
    122     # equivalent of the Python statement "o1 += o2".
    123 
    124     object PyNumber_InPlaceSubtract(object o1, object o2)
    125     # Return value: New reference.
    126     # Returns the result of subtracting o2 from o1, or NULL on
    127     # failure. The operation is done in-place when o1 supports
    128     # it. This is the equivalent of the Python statement "o1 -= o2".
    129 
    130     object PyNumber_InPlaceMultiply(object o1, object o2)
    131     # Return value: New reference.
    132     # Returns the result of multiplying o1 and o2, or NULL on
    133     # failure. The operation is done in-place when o1 supports
    134     # it. This is the equivalent of the Python statement "o1 *= o2".
    135 
    136     object PyNumber_InPlaceDivide(object o1, object o2)
    137     # Return value: New reference.
    138     # Returns the result of dividing o1 by o2, or NULL on failure. The
    139     # operation is done in-place when o1 supports it. This is the
    140     # equivalent of the Python statement "o1 /= o2".
    141 
    142     object PyNumber_InPlaceFloorDivide(object o1, object o2)
    143     # Return value: New reference.
    144     # Returns the mathematical floor of dividing o1 by o2, or NULL on
    145     # failure. The operation is done in-place when o1 supports
    146     # it. This is the equivalent of the Python statement "o1 //=
    147     # o2".
    148 
    149     object PyNumber_InPlaceTrueDivide(object o1, object o2)
    150     # Return value: New reference.
    151     # Return a reasonable approximation for the mathematical value of
    152     # o1 divided by o2, or NULL on failure. The return value is
    153     # ``approximate'' because binary floating point numbers are
    154     # approximate; it is not possible to represent all real numbers in
    155     # base two. This function can return a floating point value when
    156     # passed two integers. The operation is done in-place when o1
    157     # supports it.
    158 
    159     object PyNumber_InPlaceRemainder(object o1, object o2)
    160     # Return value: New reference.
    161     # Returns the remainder of dividing o1 by o2, or NULL on
    162     # failure. The operation is done in-place when o1 supports
    163     # it. This is the equivalent of the Python statement "o1 %= o2".
    164 
    165     object PyNumber_InPlacePower(object o1, object o2, object o3)
    166     # Return value: New reference.
    167     # See the built-in function pow(). Returns NULL on failure. The
    168     # operation is done in-place when o1 supports it. This is the
    169     # equivalent of the Python statement "o1 **= o2" when o3 is
    170     # Py_None, or an in-place variant of "pow(o1, o2, o3)"
    171     # otherwise. If o3 is to be ignored, pass Py_None in its place
    172     # (passing NULL for o3 would cause an illegal memory access).
    173 
    174     object PyNumber_InPlaceLshift(object o1, object o2)
    175     # Return value: New reference.
    176     # Returns the result of left shifting o1 by o2 on success, or NULL
    177     # on failure. The operation is done in-place when o1 supports
    178     # it. This is the equivalent of the Python statement "o1 <<= o2".
    179 
    180     object PyNumber_InPlaceRshift(object o1, object o2)
    181     # Return value: New reference.
    182     # Returns the result of right shifting o1 by o2 on success, or
    183     # NULL on failure. The operation is done in-place when o1 supports
    184     # it. This is the equivalent of the Python statement "o1 >>= o2".
    185 
    186     object PyNumber_InPlaceAnd(object o1, object o2)
    187     # Return value: New reference.
    188     # Returns the ``bitwise and'' of o1 and o2 on success and NULL on
    189     # failure. The operation is done in-place when o1 supports
    190     # it. This is the equivalent of the Python statement "o1 &= o2".
    191 
    192     object PyNumber_InPlaceXor(object o1, object o2)
    193     # Return value: New reference.
    194     # Returns the ``bitwise exclusive or'' of o1 by o2 on success, or
    195     # NULL on failure. The operation is done in-place when o1 supports
    196     # it. This is the equivalent of the Python statement "o1 ^= o2".
    197 
    198     object PyNumber_InPlaceOr(object o1, object o2)
    199     # Return value: New reference.
    200     # Returns the ``bitwise or'' of o1 and o2 on success, or NULL on
    201     # failure. The operation is done in-place when o1 supports
    202     # it. This is the equivalent of the Python statement "o1 |= o2".
    203 
    204     int PyNumber_Coerce(PyObject **p1, PyObject **p2) except -1
    205     # This function takes the addresses of two variables of type
    206     # PyObject*. If the objects pointed to by *p1 and *p2 have the
    207     # same type, increment their reference count and return 0
    208     # (success). If the objects can be converted to a common numeric
    209     # type, replace *p1 and *p2 by their converted value (with 'new'
    210     # reference counts), and return 0. If no conversion is possible,
    211     # or if some other error occurs, return -1 (failure) and don't
    212     # increment the reference counts. The call PyNumber_Coerce(&o1,
    213     # &o2) is equivalent to the Python statement "o1, o2 = coerce(o1,
    214     # o2)".
    215 
    216     object PyNumber_Int(object o)
    217     # Return value: New reference.
    218     # Returns the o converted to an integer object on success, or NULL
    219     # on failure. If the argument is outside the integer range a long
    220     # object will be returned instead. This is the equivalent of the
    221     # Python expression "int(o)".
    222 
    223     object PyNumber_Long(object o)
    224     # Return value: New reference.
    225     # Returns the o converted to a long integer object on success, or
    226     # NULL on failure. This is the equivalent of the Python expression
    227     # "long(o)".
    228 
    229     object PyNumber_Float(object o)
    230     # Return value: New reference.
    231     # Returns the o converted to a float object on success, or NULL on
    232     # failure. This is the equivalent of the Python expression
    233     # "float(o)".
    234 
    235     object PyNumber_Index(object o)
    236     # Returns the o converted to a Python int or long on success or
    237     # NULL with a TypeError exception raised on failure.
    238 
    239     Py_ssize_t PyNumber_AsSsize_t(object o, object exc) except? -1
    240     # Returns o converted to a Py_ssize_t value if o can be
    241     # interpreted as an integer. If o can be converted to a Python int
    242     # or long but the attempt to convert to a Py_ssize_t value would
    243     # raise an OverflowError, then the exc argument is the type of
    244     # exception that will be raised (usually IndexError or
    245     # OverflowError). If exc is NULL, then the exception is cleared
    246     # and the value is clipped to PY_SSIZE_T_MIN for a negative
    247     # integer or PY_SSIZE_T_MAX for a positive integer.
    248 
    249     bint PyIndex_Check "__Pyx_PyIndex_Check" (object)
    250     # Returns True if o is an index integer (has the nb_index slot of
    251     # the tp_as_number structure filled in).
    252