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

PyTypeObject PySlice_Type
    * Part of the Stable ABI.*

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

int PySlice_Check(PyObject *ob)

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

PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
    *Return value: New reference.** Part of the 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)
    * Part of the Stable ABI.*

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

   Returns "0" on success and "-1" on error with no exception set
   (unless one of the indices was not "None" and failed to be
   converted to an integer, in which case "-1" is returned with an
   exception set).

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

   バージョン 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)
    * Part of the Stable ABI.*

   "PySlice_GetIndices()" の便利な代替です。  *slice* における、
   *start*,  *stop* および *step* のインデクス値を取得をします。シーケ
   ンスの長さを *length* 、スライスの長さを *slicelength* に格納します
   。境界外のインデクスは通常のスライスと一貫した方法でクリップされま
   す。

   成功のときには "0" を、エラーのときには例外をセットして "-1" を返し
   ます。

   注釈:

     This function is considered not safe for resizable sequences. Its
     invocation should be replaced by a combination of
     "PySlice_Unpack()" and "PySlice_AdjustIndices()" where

        if (PySlice_GetIndicesEx(slice, length, &start, &stop, &step, &slicelength) < 0) {
            // return error
        }

     is replaced by

        if (PySlice_Unpack(slice, &start, &stop, &step) < 0) {
            // return error
        }
        slicelength = PySlice_AdjustIndices(length, &start, &stop, step);

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

   バージョン 3.6.1 で変更: If "Py_LIMITED_API" is not set or set to
   the value between "0x03050400" and "0x03060000" (not including) or
   "0x03060100" or higher "PySlice_GetIndicesEx()" is implemented as a
   macro using "PySlice_Unpack()" and "PySlice_AdjustIndices()".
   Arguments *start*, *stop* and *step* are evaluated more than once.

   バージョン 3.6.1 で非推奨: If "Py_LIMITED_API" is set to the value
   less than "0x03050400" or between "0x03060000" and "0x03060100"
   (not including) "PySlice_GetIndicesEx()" is a deprecated function.

int PySlice_Unpack(PyObject *slice, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
    * Part of the Stable ABI since version 3.7.*

   Extract the start, stop and step data members from a slice object
   as C integers.  Silently reduce values larger than "PY_SSIZE_T_MAX"
   to "PY_SSIZE_T_MAX", silently boost the start and stop values less
   than "PY_SSIZE_T_MIN" to "PY_SSIZE_T_MIN", and silently boost the
   step values less than "-PY_SSIZE_T_MAX" to "-PY_SSIZE_T_MAX".

   Return "-1" on error, "0" on success.

   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)
    * Part of the Stable ABI since version 3.7.*

   Adjust start/end slice indices assuming a sequence of the specified
   length. Out of bounds indices are clipped in a manner consistent
   with the handling of normal slices.

   Return the length of the slice.  Always successful.  Doesn't call
   Python code.

   Added in version 3.6.1.


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

PyObject *Py_Ellipsis

   The Python "Ellipsis" object.  This object has no methods.  Like
   "Py_None", it is an immortal. singleton object.

   バージョン 3.12 で変更: "Py_Ellipsis" is immortal.
