Objetos números complexos

Os objetos números complexos do Python são implementados como dois tipos distintos quando visualizados na API C: um é o objeto Python exposto aos programas Python e o outro é uma estrutura C que representa o valor real do número complexo. A API fornece funções para trabalhar com ambos.

Números complexos como estruturas C.

Observe que as funções que aceitam essas estruturas como parâmetros e as retornam como resultados o fazem por valor em vez de desreferenciá-las por meio de ponteiros. Isso é consistente em toda a API.

type Py_complex

A estrutura C que corresponde à parte do valor de um objeto de número complexo Python. A maioria das funções para lidar com objetos de números complexos usa estruturas desse tipo como valores de entrada ou saída, conforme apropriado.

double real
double imag

A estrutura é definida como:

typedef struct {
    double real;
    double imag;
} Py_complex;
Py_complex _Py_c_sum(Py_complex left, Py_complex right)

Retorna a soma de dois números complexos, utilizando a representação C Py_complex.

Py_complex _Py_c_diff(Py_complex left, Py_complex right)

Retorna a diferença entre dois números complexos, utilizando a representação C Py_complex.

Py_complex _Py_c_neg(Py_complex num)

Retorna a negação do número complexo num, utilizando a representação C Py_complex.

Py_complex _Py_c_prod(Py_complex left, Py_complex right)

Retorna o produto de dois números complexos, utilizando a representação C Py_complex.

Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)

Retorna o quociente de dois números complexos, utilizando a representação C Py_complex.

Se divisor é nulo, este método retorna zero e define errno para EDOM.

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

Retorna a exponenciação de num por exp, utilizando a representação C Py_complex

Se num for nulo e exp não for um número real positivo, este método retorna zero e define errno para EDOM.

Set errno to ERANGE on overflows.

Números complexos como objetos Python

type PyComplexObject

Este subtipo de PyObject representa um objeto Python de número complexo.

PyTypeObject PyComplex_Type
Parte da ABI Estável.

Esta instância de PyTypeObject representa o tipo de número complexo Python. É o mesmo objeto que complex na camada Python.

int PyComplex_Check(PyObject *p)

Retorna true se seu argumento é um PyComplexObject ou um subtipo de PyComplexObject. Esta função sempre tem sucesso.

int PyComplex_CheckExact(PyObject *p)

Retorna true se seu argumento é um PyComplexObject, mas não um subtipo de PyComplexObject. Esta função sempre tem sucesso.

PyObject *PyComplex_FromCComplex(Py_complex v)
Retorna valor: Nova referência.

Cria um novo objeto de número complexo Python a partir de um valor C Py_complex. Retorna NULL com uma exceção definida ao ocorrer um erro.

PyObject *PyComplex_FromDoubles(double real, double imag)
Retorna valor: Nova referência. Parte da ABI Estável.

Retorna um novo objeto PyComplexObject de real e imag. Retorna NULL com uma exceção definida ao ocorrer um erro.

double PyComplex_RealAsDouble(PyObject *op)
Parte da ABI Estável.

Retorna a parte real de op como um double C.

Se op não é um objeto de número complexo Python, mas tem um método __complex__(), este método será primeiro chamado para converter op em um objeto de número complexo Python. Se __complex__() não estiver definido, ele volta a chamar PyFloat_AsDouble() e retorna seu resultado.

Em caso de falha, este método retorna -1.0 com uma exceção definida, então deve-se chamar PyErr_Occurred() para verificar se há erros.

Alterado na versão 3.13: Usa __complex__(), se disponível.

double PyComplex_ImagAsDouble(PyObject *op)
Parte da ABI Estável.

Retorna a parte imaginária de op como um double C.

Se op não é um objeto de número complexo Python, mas tem um método __complex__(), este método será primeiro chamado para converter op em um objeto de número complexo Python. Se __complex__() não estiver definido, ele volta a chamar PyFloat_AsDouble() e retorna 0.0 em caso de sucesso.

Em caso de falha, este método retorna -1.0 com uma exceção definida, então deve-se chamar PyErr_Occurred() para verificar se há erros.

Alterado na versão 3.13: Usa __complex__(), se disponível.

Py_complex PyComplex_AsCComplex(PyObject *op)

Retorna o valor Py_complex do número complexo op.

Se op não é um objeto de número complexo Python, mas tem um método __complex__(), este método será primeiro chamado para converter op em um objeto de número complexo Python. Se __complex__() não for definido, então ele recorre a __float__(). Se __float__() não estiver definido, então ele volta para __index__().

Em caso de falha, este método retorna Py_complex com real definido para -1.0 e com uma exceção definida, então deve-se chamar PyErr_Occurred() para verificar se há erros.

Alterado na versão 3.8: Usa __index__(), se disponível.