estrategia de generación de hipótesis inf cuando no se le preguntó específicamente

votos
1
from functools import partial
import hypothesis as h
import hypothesis.strategies as hs
import hypothesis.extra.numpy as hnp
import numpy as np


floats_notnull = partial(hs.floats, allow_nan=False, allow_infinity=False)
complex_notnull = partial(hs.complex_numbers, allow_nan=False, allow_infinity=False)

data_strategy_real = hnp.arrays(
    np.float64,
    hs.tuples(hs.integers(min_value=2, max_value=50),
              hs.integers(min_value=2, max_value=5)),
    floats_notnull()
)

data_strategy_complex = hnp.arrays(
    np.complex64,
    hs.tuples(hs.integers(min_value=2, max_value=50), hs.just(1)),
    complex_notnull()
)

data_strategy = hs.one_of(data_strategy_real, data_strategy_complex)

Si ejecuta data_strategy.example()un par de veces, usted notará que algunos de los valores en el resultado tienen partes reales o imaginarias infinitas. Mi intención era no permitir específicamente infinitas partes o NaN.

¿Qué estoy haciendo mal?

Actualizar : si uso

data_strategy = hs.lists(complex_notnull, min_size=2, max_size=50)

y convertir eso en una matriz dentro de mi prueba, el problema parece desaparecer. Se desbordan los números complejos? Hasta ahora no recibo la desaprobación habitual advertencia sobre el desbordamiento de hipótesis.

Y si uso

data_strategy = data_strategy_real

no hay infs aparecen.

Publicado el 19/09/2018 a las 17:06
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
2

El tipo complex64 es demasiado pequeño y es desbordante. De alguna manera hipótesis está fallando a atrapar a este.

Sí, la causa de este problema es que se está generando de 64 bits flotadores finitos, luego echarlos a 32 bits (ya que complex64es un par de flotadores de 32 bits). Usted puede arreglar que con el width=32argumento de que floats():

floats_notnull_32 = partial(hs.floats, allow_nan=False, allow_infinity=False, width=32)

Y que no está recibiendo el cheque desbordamiento habitual debido a que sólo ha implementado para los flotadores y enteros en el momento. He abierto la edición # 1591 para comprobar los tipos complejos y de cadena también.

Respondida el 21/09/2018 a las 00:56
fuente por usuario

votos
0

El complex64tipo es demasiado pequeño y es desbordante. De alguna manera hipótesis está fallando a atrapar a este.

El cambio a complex128solucionado el problema por el momento.

Respondida el 19/09/2018 a las 17:30
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more