# Номер протоколу

int PyNumber_Check(PyObject *o)
  Part of the Stable ABI.

  Повертає `1`, якщо об’єкт o надає числові протоколи, і false в іншому випадку. Ця функція завжди успішна.

  Змінено в версії 3.8: Повертає `1`, якщо o є цілим індексом.

PyObject *PyNumber_Add(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат додавання o1 і o2 або `NULL` у разі помилки. Це еквівалент виразу Python `o1 + o2`.

PyObject *PyNumber_Subtract(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат віднімання o2 від o1 або `NULL` у разі помилки. Це еквівалент виразу Python `o1 - o2`.

PyObject *PyNumber_Multiply(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат множення o1 і o2 або `NULL` у разі помилки. Це еквівалент виразу Python `o1 * o2`.

PyObject *PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI since version 3.7.

  Повертає результат множення матриці на o1 та o2 або `NULL` у разі помилки. Це еквівалент виразу Python `o1 @ o2`.

  Added in version 3.5.

PyObject *PyNumber_FloorDivide(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає нижню частину o1, поділену на o2, або `NULL` у разі помилки. Це еквівалент виразу Python `o1 // o2`.

PyObject *PyNumber_TrueDivide(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Return a reasonable approximation for the mathematical value of o1 divided by o2, or `NULL` on failure. The return value is «approximate» because binary floating-point numbers are approximate; it is not possible to represent all real numbers in base two. This function can return a floating-point value when passed two integers. This is the equivalent of the Python expression `o1 / o2`.

PyObject *PyNumber_Remainder(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає залишок від ділення o1 на o2 або `NULL` у разі помилки. Це еквівалент виразу Python `o1 % o2`.

PyObject *PyNumber_Divmod(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Перегляньте вбудовану функцію `divmod()`. Повертає `NULL` у разі помилки. Це еквівалент виразу Python `divmod(o1, o2)`.

PyObject *PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3)
  Return value: New reference. Part of the Stable ABI.

  Перегляньте вбудовану функцію `pow()`. Повертає `NULL` у разі помилки. Це еквівалент виразу Python `pow(o1, o2, o3)`, де o3 є необов’язковим. Якщо o3 потрібно ігнорувати, передайте замість нього `Py_None` (передача `NULL` для o3 призведе до незаконного доступу до пам’яті).

PyObject *PyNumber_Negative(PyObject *o)
  Return value: New reference. Part of the Stable ABI.

  Повертає заперечення o у разі успіху або `NULL` у разі невдачі. Це еквівалент виразу Python `-o`.

PyObject *PyNumber_Positive(PyObject *o)
  Return value: New reference. Part of the Stable ABI.

  Повертає o у разі успіху або `NULL` у разі невдачі. Це еквівалент виразу Python `+o`.

PyObject *PyNumber_Absolute(PyObject *o)
  Return value: New reference. Part of the Stable ABI.

  Повертає абсолютне значення o або `NULL` у разі помилки. Це еквівалент виразу Python `abs(o)`.

PyObject *PyNumber_Invert(PyObject *o)
  Return value: New reference. Part of the Stable ABI.

  Повертає порозрядне заперечення o у разі успіху або `NULL` у разі невдачі. Це еквівалент виразу Python `~o`.

PyObject *PyNumber_Lshift(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат зсуву вліво o1 на o2 у разі успіху або `NULL` у разі помилки. Це еквівалент виразу Python `o1 << o2`.

PyObject *PyNumber_Rshift(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат зсуву праворуч o1 на o2 у разі успіху або `NULL` у разі помилки. Це еквівалент виразу Python `o1 >> o2`.

PyObject *PyNumber_And(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає «порозрядне та» o1 і o2 у разі успіху та `NULL` у разі помилки. Це еквівалент виразу Python `o1 & o2`.

PyObject *PyNumber_Xor(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає «порозрядне виняткове або» o1 на o2 у разі успіху або `NULL` у разі помилки. Це еквівалент виразу Python `o1 ^ o2`.

PyObject *PyNumber_Or(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає «порозрядне або» o1 і o2 у разі успіху або `NULL` у разі помилки. Це еквівалент виразу Python `o1 | o2`.

PyObject *PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат додавання o1 і o2 або `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 += o2`.

PyObject *PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат віднімання o2 від o1 або `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 -= o2`.

PyObject *PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат множення o1 і o2 або `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 *= o2`.

PyObject *PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI since version 3.7.

  Повертає результат множення матриці на o1 і o2 або `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 @= o2`.

  Added in version 3.5.

PyObject *PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає математичний рівень ділення o1 на o2 або `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 //= o2`.

PyObject *PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Return a reasonable approximation for the mathematical value of o1 divided by o2, or `NULL` on failure. The return value is «approximate» because binary floating-point numbers are approximate; it is not possible to represent all real numbers in base two. This function can return a floating-point value when passed two integers. The operation is done in-place when o1 supports it. This is the equivalent of the Python statement `o1 /= o2`.

PyObject *PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає залишок від ділення o1 на o2 або `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 %= o2`.

PyObject *PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)
  Return value: New reference. Part of the Stable ABI.

  Перегляньте вбудовану функцію `pow()`. Повертає `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 **= o2`, коли o3 дорівнює `Py_None`, або альтернативного варіанту `pow(o1, o2, o3)` інакше. Якщо o3 потрібно ігнорувати, передайте замість нього `Py_None` (передача `NULL` для o3 призведе до незаконного доступу до пам’яті).

PyObject *PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат зсуву ліворуч o1 на o2 у разі успіху або `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 <<= o2`.

PyObject *PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат зсуву праворуч o1 на o2 у разі успіху або `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 >>= o2`.

PyObject *PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає «порозрядне та» o1 і o2 у разі успіху та `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 &= o2`.

PyObject *PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає «порозрядне виняткове або» o1 на o2 у разі успіху або `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 ^= o2`.

PyObject *PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)
  Return value: New reference. Part of the Stable ABI.

  Повертає «порозрядне або» o1 і o2 у разі успіху або `NULL` у разі помилки. Операція виконується на місці, якщо o1 її підтримує. Це еквівалент оператора Python `o1 |= o2`.

PyObject *PyNumber_Long(PyObject *o)
  Return value: New reference. Part of the Stable ABI.

  Повертає o, перетворений на цілий об’єкт у разі успіху, або `NULL` у разі помилки. Це еквівалент виразу Python `int(o)`.

PyObject *PyNumber_Float(PyObject *o)
  Return value: New reference. Part of the Stable ABI.

  Повертає o, перетворений на об’єкт float у разі успіху, або `NULL` у разі помилки. Це еквівалент виразу Python `float(o)`.

PyObject *PyNumber_Index(PyObject *o)
  Return value: New reference. Part of the Stable ABI.

  Повертає o, перетворений на Python int у разі успіху або `NULL` з виключенням `TypeError`, яке виникає в разі помилки.

  Змінено в версії 3.10: Результат завжди має точний тип `int`. Раніше результат міг бути екземпляром підкласу `int`.

PyObject *PyNumber_ToBase(PyObject *n, int base)
  Return value: New reference. Part of the Stable ABI.

  Повертає ціле число n, перетворене на базу base як рядок. Аргумент base має бути одним із 2, 8, 10 або 16. Для base 2, 8 або 16 повернутий рядок має префікс базового маркера `'0b'`, `'0o'` або `'0x''` відповідно. Якщо n не є int Python, воно спочатку перетворюється за допомогою `PyNumber_Index()`.

Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)
  Part of the Stable ABI.

  Повертає o, перетворене на значення `Py_ssize_t`, якщо o можна інтерпретувати як ціле число. Якщо виклик не вдається, виникає виняток і повертається `-1`.

  Якщо o можна перетворити на Python int, але спроба перетворити на значення `Py_ssize_t` призведе до появи `OverflowError`, тоді аргумент exc є типом винятку, який викличе бути викликано (зазвичай `IndexError` або `OverflowError`). Якщо exc дорівнює `NULL`, тоді виняток очищається, а значення обрізається до `PY_SSIZE_T_MIN` для від’ємного цілого числа або `PY_SSIZE_T_MAX` для додатного цілого числа.

int PyIndex_Check(PyObject *o)
  Part of the Stable ABI since version 3.8.

  Повертає `1`, якщо o є цілим індексом (має заповнений слот `nb_index` структури `tp_as_number`), і `0` інакше. Ця функція завжди успішна.