複素数オブジェクト (complex number object)
******************************************

Python の複素数オブジェクトは、C API 側から見ると二つの別個の型として
実装されています: 一方は Python プログラムに対して公開されている
Python のオブジェクトで、他方は実際の複素数値を表現する C の構造体です
。API では、これら双方を扱う関数を提供しています。


C 構造体としての複素数
======================

複素数の C 構造体を引数として受理したり、戻り値として返したりする関数
は、ポインタ渡しを行うのではなく *値渡し* を行うので注意してください。
これは API 全体を通して一貫しています。

Py_complex

   Python 複素数オブジェクトの値の部分に対応する C の構造体です。複素
   数オブジェクトを扱うほとんどの関数は、この型の構造体を場合に応じて
   入力や出力として使います。構造体は以下のように定義されています:

      typedef struct {
         double real;
         double imag;
      } Py_complex;

Py_complex _Py_c_sum(Py_complex left, Py_complex right)

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

Py_complex _Py_c_diff(Py_complex left, Py_complex right)

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

Py_complex _Py_c_neg(Py_complex complex)

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

Py_complex _Py_c_prod(Py_complex left, Py_complex right)

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

Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)

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

   *divisor* が null の場合は、このメソッドはゼロを返し、 "errno" に
   "EDOM" をセットします。

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

   指数 *exp* の *num* 乗を C の "Py_complex" 型で返します。

   *num* が null で *exp* が正の実数でない場合は、このメソッドはゼロを
   返し、 "errno" に "EDOM" をセットします。


Python オブジェクトとしての複素数型
===================================

PyComplexObject

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

PyTypeObject PyComplex_Type

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

int PyComplex_Check(PyObject *p)

   引数が "PyComplexObject" 型か "PyComplexObject" 型のサブタイプのと
   きに真を返します。

   バージョン 2.2 で変更: サブタイプを引数にとれるようになりました.

int PyComplex_CheckExact(PyObject *p)

   引数が "PyComplexObject" 型で、かつ "PyComplexObject" 型のサブタイ
   プでないときに真を返します。

   バージョン 2.2 で追加.

PyObject* PyComplex_FromCComplex(Py_complex v)
    *Return value: New reference.*

   C の "Py_complex" 型から Python の複素数値を生成します。

PyObject* PyComplex_FromDoubles(double real, double imag)
    *Return value: New reference.*

   新たな "PyComplexObject" オブジェクトを *real* と *imag* から生成し
   ます。

double PyComplex_RealAsDouble(PyObject *op)

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

double PyComplex_ImagAsDouble(PyObject *op)

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

Py_complex PyComplex_AsCComplex(PyObject *op)

   複素数値 *op* から "Py_complex" 型を生成します。失敗時は実数として
   の -1.0 を返します。

   バージョン 2.6 で変更: *op* が Python の複素数オブジェクトではない
   が、 "__complex__()" メソッドを持っていた場合、このメソッドが最初に
   呼ばれ、 *op* が Python の複素数オブジェクトに変換されます。
