# 8.3 Sequence protocol

int `PySequence_Check`(PyObject *o)
  Return 1 if the object provides sequence protocol, and 0 otherwise. This function always succeeds.

PyObject* `PySequence_Concat`(PyObject *o1, PyObject *o2)
  Return the concatenation of `o1` and `o2` on success, and NULL on failure. This is the equivalent of the Python expression: `o1+o2`.

PyObject* `PySequence_Repeat`(PyObject *o, int count)
  Return the result of repeating sequence object `o` `count` times, or NULL on failure. This is the equivalent of the Python expression: `o*count`.

PyObject* `PySequence_GetItem`(PyObject *o, int i)
  Return the ith element of `o`, or NULL on failure. This is the equivalent of the Python expression: `o[i]`.

PyObject* `PySequence_GetSlice`(PyObject *o, int i1, int i2)
  Return the slice of sequence object `o` between `i1` and `i2`, or NULL on failure. This is the equivalent of the Python expression, `o[i1:i2]`.

int `PySequence_SetItem`(PyObject *o, int i, PyObject *v)
  Assign object `v` to the `i`th element of `o`. Returns -1 on failure. This is the equivalent of the Python statement, `o[i]=v`.

int `PySequence_DelItem`(PyObject *o, int i)
  Delete the `i`th element of object `v`. Returns -1 on failure. This is the equivalent of the Python statement: `del o[i]`.

int `PySequence_SetSlice`(PyObject *o, int i1, int i2, PyObject *v)
  Assign the sequence object `v` to the slice in sequence object `o` from `i1` to `i2`. This is the equivalent of the Python statement, `o[i1:i2]=v`.

int `PySequence_DelSlice`(PyObject *o, int i1, int i2)
  Delete the slice in sequence object, `o`, from `i1` to `i2`. Returns -1 on failure. This is the equivalent of the Python statement: `del o[i1:i2]`.

PyObject* `PySequence_Tuple`(PyObject *o)
  Returns the `o` as a tuple on success, and NULL on failure. This is equivalent to the Python expression: `tuple(o)`.

int `PySequence_Count`(PyObject *o, PyObject *value)
  Return the number of occurrences of `value` on `o`, that is, return the number of keys for which `o[key]==value`. On failure, return -1. This is equivalent to the Python expression: `o.count(value)`.

int `PySequence_In`(PyObject *o, PyObject *value)
  Determine if `o` contains `value`. If an item in `o` is equal to `value`, return 1, otherwise return 0. On error, return -1. This is equivalent to the Python expression: `value in o`.

int `PySequence_Index`(PyObject *o, PyObject *value)
  Return the first index for which `o[i]==value`. On error, return -1. This is equivalent to the Python expression: `o.index(value)`.