# Протокол послідовності

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

  Return `1` if the object provides the sequence protocol, and `0` otherwise. Note that it returns `1` for Python classes with a `__getitem__()` method, unless they are `dict` subclasses, since in general it is impossible to determine what type of keys the class supports. This function always succeeds.

Py_ssize_t PySequence_Size(PyObject *o)
Py_ssize_t PySequence_Length(PyObject *o)
  Part of the Stable ABI.

  Повертає кількість об’єктів у послідовності o в разі успіху та `-1` в разі невдачі. Це еквівалентно виразу Python `len(o)`.

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

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

PyObject *PySequence_Repeat(PyObject *o, Py_ssize_t count)
  Return value: New reference. Part of the Stable ABI.

  Повертає результат повторення об’єкта послідовності o count разів або `NULL` у разі помилки. Це еквівалент виразу Python `o * count`.

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

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

PyObject *PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
  Return value: New reference. Part of the Stable ABI.

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

PyObject *PySequence_GetItem(PyObject *o, Py_ssize_t i)
  Return value: New reference. Part of the Stable ABI.

  Повертає i-й елемент o або `NULL` у разі помилки. Це еквівалент виразу Python `o[i]`.

PyObject *PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
  Return value: New reference. Part of the Stable ABI.

  Повертає зріз об’єкта послідовності o між i1 і i2 або `NULL` у разі помилки. Це еквівалент виразу Python `o[i1:i2]`.

int PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v)
  Part of the Stable ABI.

  Призначте об’єкт v до iго елемента o. Викликати виняток і повертати `-1` у разі помилки; повернути `0` в разі успіху. Це еквівалент оператора Python `o[i] = v`. Ця функція не викрадає посилання на v.

  Якщо v має значення `NULL`, елемент видаляється, але ця функція застаріла на користь використання `PySequence_DelItem()`.

int PySequence_DelItem(PyObject *o, Py_ssize_t i)
  Part of the Stable ABI.

  Видалити ith елемент об’єкта o. Повертає `-1` у разі помилки. Це еквівалент оператора Python `del o[i]`.

int PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, PyObject *v)
  Part of the Stable ABI.

  Призначте об’єкт послідовності v фрагменту в об’єкті послідовності o від i1 до i2. Це еквівалент оператора Python `o[i1:i2] = v`.

int PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
  Part of the Stable ABI.

  Видалити фрагмент у послідовному об’єкті o від i1 до i2. Повертає `-1` у разі помилки. Це еквівалент оператора Python `del o[i1:i2]`.

Py_ssize_t PySequence_Count(PyObject *o, PyObject *value)
  Part of the Stable ABI.

  Повертає кількість входжень value у o, тобто повертає кількість ключів, для яких `o[key] == value`. У разі помилки поверніть `-1`. Це еквівалентно виразу Python `o.count(value)`.

int PySequence_Contains(PyObject *o, PyObject *value)
  Part of the Stable ABI.

  Визначте, чи o містить value. Якщо елемент у o дорівнює value, поверніть `1`, інакше поверніть `0`. У разі помилки повертає `-1`. Це еквівалентно виразу Python `значення в o`.

int PySequence_In(PyObject *o, PyObject *value)
  Part of the Stable ABI.

  Alias for `PySequence_Contains()`.

  Застаріло починаючи з версії 3.14: The function is soft deprecated and should no longer be used to write new code.

Py_ssize_t PySequence_Index(PyObject *o, PyObject *value)
  Part of the Stable ABI.

  Повертає перший індекс i, для якого `o[i] == значення`. У разі помилки повертає `-1`. Це еквівалентно виразу Python `o.index(value)`.

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

  Повертає об’єкт списку з тим же вмістом, що й послідовність або ітерація o, або `NULL` у разі помилки. Повернений список гарантовано буде новим. Це еквівалентно виразу Python `list(o)`.

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

  Повертає об’єкт кортежу з тим самим вмістом, що й послідовність або повторюваний o, або `NULL` у разі помилки. Якщо o є кортежем, буде повернуто нове посилання, інакше буде створено кортеж із відповідним вмістом. Це еквівалентно виразу Python `tuple(o)`.

PyObject *PySequence_Fast(PyObject *o, const char *m)
  Return value: New reference. Part of the Stable ABI.

  Повертає послідовність або ітерацію o як об’єкт, який можна використовувати іншою сім’єю функцій `PySequence_Fast*`. Якщо об’єкт не є послідовністю або ітерацією, викликає `TypeError` з m як текст повідомлення. Повертає `NULL` у разі помилки.

  Функції `PySequence_Fast*` названо так, оскільки вони припускають, що o є `PyTupleObject` або `PyListObject` і мають прямий доступ до полів даних o.

  Як деталь реалізації CPython, якщо o вже є послідовністю або списком, він буде повернутий.

Py_ssize_t PySequence_Fast_GET_SIZE(PyObject *o)

  Повертає довжину o, припускаючи, що o було повернуто `PySequence_Fast()` і що o не є `NULL`. Розмір також можна отримати, викликавши `PySequence_Size()` на o, але `PySequence_Fast_GET_SIZE()` швидше, тому що він може припускати, що o є списком або кортежем.

PyObject *PySequence_Fast_GET_ITEM(PyObject *o, Py_ssize_t i)
  Return value: Borrowed reference.

  Повертає i-й елемент o, припускаючи, що o було повернуто `PySequence_Fast()`, o не є `NULL` і що i знаходиться в межах.

PyObject **PySequence_Fast_ITEMS(PyObject *o)

  Повертає базовий масив покажчиків PyObject. Припускає, що o було повернуто `PySequence_Fast()` і o не є `NULL`.

  Зверніть увагу: якщо розмір списку змінено, перерозподіл може перемістити масив елементів. Отже, використовуйте покажчик базового масиву лише в контекстах, де послідовність не може змінитися.

PyObject *PySequence_ITEM(PyObject *o, Py_ssize_t i)
  Return value: New reference.

  Повертає i-й елемент o або `NULL` у разі помилки. Швидша форма `PySequence_GetItem()`, але без перевірки того, що `PySequence_Check()` на o є істинним, і без коригування негативних індексів.