2011-08-31 35 views
7

Estoy usando Sphinx para generar documentación del código. ¿Alguien sabe si hay una forma de controlar el formateo de los números de coma flotante generados a partir de los argumentos predeterminados?Formato de punto flotante Sphinx

Por ejemplo si tengo la siguiente función:

def f(x = 0.97): 
    return x+1 

La documentación generada termina pareciéndose a:

foo(x = 0.96999999999997) 

Obviamente, esto es un problema de punto flotante de precisión, pero hay una manera de hacer que la documentación no se vea tan fea?

Respuesta

1

Puede anular una firma de función con la directiva .. autofunction::. Así que para hacer frente a su ejemplo, una función definida como foo(x=0.97) en el módulo bar:

.. automodule:: bar 

    .. autofunction:: foo(x=0.97) 

Y el documento resultante será usar la firma proporcionada en lugar de la versión interpretada por el número muy largo.

Puede hacer esto de manera equivalente con .. autoclass:: y .. automethod:: y similares. Este es el uso que está documentado en "Opciones y uso avanzado" en this part of the sphinx.ext.autodoc documentos.

0

No he utilizado Sphinx, así que no estoy seguro de que esto funcione, pero mi hipótesis es que repr() se utiliza para determinar el formato de la documentación. Usted puede tratar de subclases float con un método personalizado __repr__ que devolverá un número más agradable mirar para ver si eso ayuda:

class my_float(float): 
    def __repr__(self): 
     return str(self) 

>>> float(0.97) 
0.96999999999999997 
>>> my_float(0.97) 
0.97 

>>> def foo(x = my_float(0.97)): 
...  return x+1 
... 
>>> foo() 
1.97 
+0

Gracias por la respuesta. Realmente estaba esperando una solución del lado de la documentación que no incluyera modificar la fuente real del proyecto. – ctrlc

Cuestiones relacionadas