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

int PySequence_Check(PyObject *o)

   オブジェクトがシーケンス型プロトコルを提供している場合は "1" を、そ
   うでない場合は "0" を返します。 "__getitem__()" メソッドを持つ
   Python クラスについては、それらが "dict" のサブクラスでない限り、
   "1" を返すのに注意してください。そうなる理由は、一般的なケースでは
   オブジェクトがどの種類のキーをサポートしているかを判別するのが不可
   能だからです。 この関数は常に成功します。

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* への参照を *盗み取りません*
   。

   *v* が "NULL" の場合はその要素が削除されますが、この機能は非推奨で
   あり、 "PyObject_DelAttr()" を使うのが望ましいです。

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)

   *o* が "NULL" でなく、 "PySequence_Fast()" が返したオブジェクトであ
   ると仮定して、 *o* の長さを返します。 *o* のサイズは
   "PySequence_Size()" を呼び出しても得られますが、
   "PySequence_Fast_GET_SIZE()" の方が *o* をリストかタプルであると仮
   定して処理するため、より高速です。

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*
   が真を返すかどうかの検証や、負の添え字の調整を行いません。
