複素数オブジェクト

type PyComplexObject

この PyObject のサブタイプは Python の複素数型を表現します。

Py_complex cval

C の Py_complex 表現による複素数の値。

バージョン 3.15 で非推奨、バージョン 3.20 で削除予定: Python の複素数と C の Py_complex 表現を相互に変換するには、PyComplex_AsCComplex() と PyComplex_FromCComplex() を使ってください。

PyTypeObject PyComplex_Type
次に属します: Stable ABI.

この PyTypeObject のインスタンスは Python の複素数型を表現します。 Pythonレイヤの complex と同じオブジェクトです。

int PyComplex_Check(PyObject *p)

引数が PyComplexObject か PyComplexObject のサブタイプであるときに真を返します。この関数は常に成功します。

int PyComplex_CheckExact(PyObject *p)

引数が PyComplexObject であるが PyComplexObject のサブタイプでないときに真を返します。この関数は常に成功します。

PyObject *PyComplex_FromDoubles(double real, double imag)
戻り値: 新しい参照。 次に属します: Stable ABI.

real と imag から新しい PyComplexObject オブジェクトを作成して返します。 エラーの場合は例外を設定して NULL を返します。

double PyComplex_RealAsDouble(PyObject *op)
次に属します: Stable ABI.

op の実数部分を C の double 型で返します。

op が Python の複素数オブジェクトでなく、__complex__() メソッドを持つ場合は、まずこのメソッドを呼び出し、op を Python の複素数オブジェクトに変換します。 __complex__() が定義されていなければ、代わりに PyFloat_AsDouble() を呼び出し、その結果を返します。

失敗すると、例外を設定して -1.0 を返します。 そのため、エラーの有無を確認するには PyErr_Occurred() を呼び出してください。

バージョン 3.13 で変更: 利用可能なら __complex__() を使うようになりました。

double PyComplex_ImagAsDouble(PyObject *op)
次に属します: Stable ABI.

op の虚数部分を C の double 型で返します。

op が Python の複素数オブジェクトでなく、__complex__() メソッドを持つ場合は、まずこのメソッドを呼び出し、op を Python の複素数オブジェクトに変換します。 __complex__() が定義されていなければ、代わりに PyFloat_AsDouble() を呼び出し、成功時に 0.0 を返します。

失敗すると、例外を設定して -1.0 を返します。 そのため、エラーの有無を確認するには PyErr_Occurred() を呼び出してください。

バージョン 3.13 で変更: 利用可能なら __complex__() を使うようになりました。

type Py_complex

この C 構造体は、Python の複素数オブジェクトをエクスポートする形式を定義します。

double real
double imag

構造体は次のように定義されています。

typedef struct {
    double real;
    double imag;
} Py_complex;
PyObject *PyComplex_FromCComplex(Py_complex v)
戻り値: 新しい参照。

C の Py_complex 値から、新しい Python の複素数オブジェクトを作成します。 エラーの場合は例外を設定して NULL を返します。

Py_complex PyComplex_AsCComplex(PyObject *op)

複素数 op の値を Py_complex として返します。

op が Python の複素数オブジェクトでなく、__complex__() メソッドを持つ場合は、まずこのメソッドを呼び出し、op を Python の複素数オブジェクトに変換します。 __complex__() が定義されていなければ、代わりに __float__() を使います。 __float__() も定義されていなければ、代わりに __index__() を使います。

失敗すると、例外を設定し、real を -1.0 にした Py_complex を返します。 そのため、エラーの有無を確認するには PyErr_Occurred() を呼び出してください。

バージョン 3.8 で変更: 可能であれば __index__() を使うようになりました。

C 構造体としての複素数

この API は、Py_complex 表現を使って複素数を扱う関数も提供します。 これらの構造体を引数として受け取り、結果として返す関数は、ポインタを介して参照するのではなく、値渡し を行う点に注意してください。

これらの関数は Python 3.15 以降、ソフト非推奨 です。 新しいコードでは、複素数演算にこの API を使うのは避けてください。 代わりに 数値プロトコル の API を使うか、double complex などのネイティブな複素数型を使ってください。

Py_complex _Py_c_sum(Py_complex left, Py_complex right)

二つの複素数の和を C の Py_complex 型で返します。

バージョン 3.15 で非推奨.

Py_complex _Py_c_diff(Py_complex left, Py_complex right)

二つの複素数の差を C の Py_complex 型で返します。

バージョン 3.15 で非推奨.

Py_complex _Py_c_neg(Py_complex num)

複素数 num の符号反転 C の Py_complex 型で返します。

バージョン 3.15 で非推奨.

Py_complex _Py_c_prod(Py_complex left, Py_complex right)

二つの複素数の積を C の Py_complex 型で返します。

バージョン 3.15 で非推奨.

Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)

二つの複素数の商を C の Py_complex 型で返します。

divisor がゼロの場合、この関数はゼロを返し、errno に EDOM を設定します。

バージョン 3.15 で非推奨.

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

num の exp 乗を、C の Py_complex 表現で返します。

num がゼロで、exp が正の実数でない場合、この関数はゼロを返し、errno に EDOM を設定します。

オーバーフロー時は errno に ERANGE を設定します。

バージョン 3.15 で非推奨.

double _Py_c_abs(Py_complex num)

複素数 num の絶対値を返します。

オーバーフロー時は errno に ERANGE を設定します。

バージョン 3.15 で非推奨.