シーケンス型プロトコル (sequence protocol)
******************************************

int PySequence_Check(PyObject *o)

   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)

   成功するとシーケンス *o* 中のオブジェクトの数を返し、失敗すると
   "-1" を返します。これは、Python の式 "len(o)" と同じになります。

PyObject* PySequence_Concat(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   成功すると *o1* と *o2* の連結 (concatenation) を返し、失敗すると
   "NULL" を返します。Python の式 "o1 + o2" と同じです。

PyObject* PySequence_Repeat(PyObject *o, Py_ssize_t count)
    *Return value: New reference.*

   成功するとオブジェクト *o* の *count* 回繰り返しを返し、失敗すると
   "NULL" を返します。Python の式 "o * count" と同じです。

PyObject* PySequence_InPlaceConcat(PyObject *o1, PyObject *o2)
    *Return value: New reference.*

   成功すると *o1* と *o2* の連結 (concatenation) を返し、失敗すると
   "NULL" を返します。*o1* が *in-place* 演算をサポートする場合、in-
   place 演算を行います。Python の式 "o1 += o2" と同じです。

PyObject* PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
    *Return value: New reference.*

   成功するとオブジェクト *o* の *count* 回繰り返しを返し、失敗すると
   "NULL" を返します。*o* が *in-place* 演算をサポートする場合、in-
   place 演算を行います。Python の式 "o *= count" と同じです。

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

   成功すると *o* の *i* 番目の要素を返し、失敗すると "NULL" を返しま
   す。Python の式 "o[i]" と同じです。

PyObject* PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
    *Return value: New reference.*

   成功すると *o* の *i1* から *i2* までの間のスライスを返し、失敗する
   と "NULL" を返します。Python の式 "o[i1:i2]" と同じです。

int PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v)

   *o* の *i* 番目の要素に *v* を代入します。 失敗すると、例外を送出し
   "-1" を返します; 成功すると "0" を返します。 これは Python の文
   "o[i] = v" と同じです。 この関数は *v* への参照を *盗み取りません*
   。

   If *v* is "NULL", the element is deleted, but this feature is
   deprecated in favour of using "PySequence_DelItem()".

int PySequence_DelItem(PyObject *o, Py_ssize_t i)

   *o* の *i* 番目の要素を削除します。失敗すると "-1" を返します。
   Python の文 "del o[i]" と同じです。

int PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, PyObject *v)

   *o* の *i1* から *i2* までの間のスライスに *v* を代入します。Python
   の文 "o[i1:i2] = v" と同じです。

int PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)

   シーケンスオブジェクト *o* の *i1* から *i2* までの間のスライスを削
   除します。失敗すると "-1" を返します。Python の文 "del o[i1:i2]" と
   同じです。

Py_ssize_t PySequence_Count(PyObject *o, PyObject *value)

   *o* における *value* の出現回数、すなわち  "o[key] == value" となる
   *key* の個数を返します。失敗すると "-1" を返します。Python の式
   "o.count(value)" と同じです。

int PySequence_Contains(PyObject *o, PyObject *value)

   *o* に *value* が入っているか判定します。*o* のある要素が *value*
   と等価 (equal) ならば "1" を返し、それ以外の場合には "0" を返します
   。エラーが発生すると "-1" を返します。Python の式 "value in o" と同
   じです。

Py_ssize_t PySequence_Index(PyObject *o, PyObject *value)

   "o[i] == value" となる最初に見つかったインデクス *i* を返します。エ
   ラーが発生すると "-1" を返します。Python の式 "o.index(value)" と同
   じです。

PyObject* PySequence_List(PyObject *o)
    *Return value: New reference.*

   シーケンスもしくはイテラブル *o* と同じ内容を持つリストオブジェクト
   を返します。 失敗したら "NULL" を返します。 返されるリストは新しく
   作られたことが保証されています。 これは Python の式 "list(o)" と同
   等です。

PyObject* PySequence_Tuple(PyObject *o)
    *Return value: New reference.*

   シーケンスあるいはイテラブルである *o* と同じ内容を持つタプルオブジ
   ェクトを返します。 失敗したら "NULL" を返します。*o* がタプルの場合
   、新たな参照を返します。 それ以外の場合、適切な内容が入ったタプルを
   構築して返します。 Pythonの式 "tuple(o)" と同等です。

PyObject* PySequence_Fast(PyObject *o, const char *m)
    *Return value: New reference.*

   シーケンスまたはイテラブルの *o* を``PySequence_Fast*`` ファミリの
   関数で利用できるオブジェクトとして返します。オブジェクトがシーケン
   スでもイテラブルでもない場合は、メッセージ *m* を持つ、
   >>:exec:`TypeError`<< を送出します。失敗したら "NULL" を返します。

   "PySequence_Fast*" ファミリの関数は、*o* が "PyTupleObject" または
   "PyListObject" と仮定し、*o* のデータフィールドに直接アクセスするた
   め、そのように名付けられています。

   CPythonの実装では、もし *o* が 既にシーケンスかタプルであれば、*o*
   そのものを返します。

Py_ssize_t PySequence_Fast_GET_SIZE(PyObject *o)

   Returns the length of *o*, assuming that *o* was returned by
   "PySequence_Fast()" and that *o* is not "NULL".  The size can also
   be retrieved by calling "PySequence_Size()" on *o*, but
   "PySequence_Fast_GET_SIZE()" is faster because it can assume *o* is
   a list or tuple.

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

   *o* が "NULL" でなく、 "PySequence_Fast()" が返したオブジェクトであ
   り、かつ *i* がインデクスの範囲内にあると仮定して、 *o* の *i* 番目
   の要素を返します。

PyObject** PySequence_Fast_ITEMS(PyObject *o)

   PyObject ポインタの背後にあるアレイを返します。この関数では、 *o*
   は "PySequence_Fast()" の返したオブジェクトであり、 "NULL" でないも
   のと仮定しています。

   リストのサイズが変更されるとき、メモリ再確保が要素の配列を再配置す
   るかもしれないことに注意してください。そのため、シーケンスの変更が
   発生しないコンテキストでのみ背後にあるポインタを使ってください。

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

   *o* の *i* 番目の要素を返し、失敗すると "NULL" を返します。
   "PySequence_GetItem()" の高速版であり、"PySequence_Check()" で *o*
   が真を返すかどうかの検証や、負の添え字の調整を行いません。
