スライスオブジェクト (slice object)
***********************************

PyTypeObject PySlice_Type
    * 次に属します: Stable ABI.*

   スライスオブジェクトの型オブジェクトです。これは、Pythonレイヤにお
   ける "slice" と同じオブジェクトです。

int PySlice_Check(PyObject *ob)

   *ob* がスライスオブジェクトの場合に真を返します; *ob* は "NULL" で
   あってはなりません。この関数は常に成功します。

PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

   指定された値を持つ新しいスライスオブジェクトを返します。 引数
   "start"、"stop"、"step" は、スライスオブジェクトの同名の属性の値と
   して使われます。 いずれの値も "NULL" で構いません。 その場合、対応
   する属性には "None" が使われます。

   新しいオブジェクトを割り当てられなかった場合は、例外を設定して
   "NULL" を返します。

int PySlice_GetIndices(PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
    * 次に属します: Stable ABI.*

   スライスオブジェクト *slice* における *start*, *stop*, および
   *step* のインデクス値を取得します。このときシーケンスの長さを
   *length* と仮定します。*length* よりも大きなインデクスになるとエラ
   ーとして扱います。

   成功した場合は "0" を返します。 エラーの場合は例外を設定せずに "-1"
   を返します。 ただし、いずれかのインデックスが "None" ではなく、整数
   に変換できなかった場合は、例外を設定して "-1" を返します。

   おそらく、あなたはこの関数を使いたくないでしょう。

   バージョン 3.2 で変更: 以前は、*slice* 引数の型は "PySliceObject*"
   でした。

int PySlice_GetIndicesEx(PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength)
    * 次に属します: Stable ABI.*

   "PySlice_GetIndices()" の実用的な代替です。 長さ "length" のシーケ
   ンスを仮定し、スライスオブジェクト "slice" から start、stop、step
   のインデックスを取得して、スライスの長さを "slicelength" に格納しま
   す。 範囲外のインデックスは、通常のスライスの処理と同じ方法で範囲内
   に収めます。 "length" は負であってはいけません。

   成功した場合は "0" を返し、エラーの場合は例外を設定して "-1" を返し
   ます。

   注釈:

     この関数は、サイズを変更できるシーケンスに対して安全ではないとさ
     れています。 "PySlice_Unpack()" と "PySlice_AdjustIndices()" の組
     み合わせに置き換えてください。 次の呼び出しを、

        if (PySlice_GetIndicesEx(slice, length, &start, &stop, &step, &slicelength) < 0) {
            // エラーを返す
        }

     次のように置き換えます。

        if (PySlice_Unpack(slice, &start, &stop, &step) < 0) {
            // エラーを返す
        }
        slicelength = PySlice_AdjustIndices(length, &start, &stop, step);

   バージョン 3.2 で変更: 以前は、*slice* 引数の型は "PySliceObject*"
   でした。

   バージョン 3.6.1 で変更: "Py_LIMITED_API" が設定されていない場合、
   または "0x03050400" 以上 "0x03060000" 未満か "0x03060100" 以上に設
   定されている場合、"PySlice_GetIndicesEx()" は "PySlice_Unpack()" と
   "PySlice_AdjustIndices()" を使うマクロとして実装されています。 引数
   "start"、"stop"、"step" は複数回評価されます。

   バージョン 3.6.1 で非推奨: "Py_LIMITED_API" が "0x03050400" 未満、
   または "0x03060000" 以上 "0x03060100" 未満に設定されている場合、
   "PySlice_GetIndicesEx()" は非推奨の関数です。

int PySlice_Unpack(PyObject *slice, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
    * 次に属します: Stable ABI (バージョン 3.7 より).*

   スライスオブジェクトの start、stop、step データメンバを C の整数と
   して取り出します。 "PY_SSIZE_T_MAX" を超える値は "PY_SSIZE_T_MAX"
   に切り下げます。 "PY_SSIZE_T_MIN" より小さい start と stop は
   "PY_SSIZE_T_MIN" に切り上げ、"-PY_SSIZE_T_MAX" より小さい step は
   "-PY_SSIZE_T_MAX" に切り上げます。 これらの調整によってエラーにはな
   りません。

   エラーの場合は例外を設定して "-1" を返し、成功した場合は "0" を返し
   ます。

   Added in version 3.6.1.

Py_ssize_t PySlice_AdjustIndices(Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step)
    * 次に属します: Stable ABI (バージョン 3.7 より).*

   指定された長さのシーケンスを仮定し、スライスの開始と終了のインデッ
   クスを調整します。 範囲外のインデックスは、通常のスライスの処理と同
   じ方法で範囲内に収めます。

   "length" は負であってはいけません。 "step" はゼロでも
   "-PY_SSIZE_T_MAX" 未満でもいけません。 "PySlice_Unpack()" の結果は
   これらの "step" の条件を満たします。

   スライスの長さを返します。 常に成功し、Python コードを呼び出しませ
   ん。

   Added in version 3.6.1.


Ellipsis オブジェクト
=====================

PyTypeObject PyEllipsis_Type
    * 次に属します: Stable ABI.*

   Python の "Ellipsis" オブジェクトの型です。 Python レベルの
   "types.EllipsisType" と同じです。

PyObject *Py_Ellipsis

   Python の "Ellipsis" オブジェクト。このオブジェクトにはメソッドがあ
   りません。 "Py_None" と同様、これは *immortal* でシングルトンなオブ
   ジェクトです。

   バージョン 3.12 で変更: "Py_Ellipsis" は immortal です。
