2015-08-12 9 views
5

Siamo in grado di registrare un tipo personalizzato per dire numpy.polynomial.polynomial con motore di visualizzazione ipython come seguirevisualizzazione personalizzata Uscita per Elenco dei ObjA

ip = get_ipython() 

foramtter = ip.display_formatter.formatters['text/latex'] 

foramtter.for_type_by_name('numpy.polynomial.polynomial', 
          'Polynomial', display_func) 

Vorrei utilizzare il metodo di .for_type_by_name (...) per registrare un display personalizzato per un elenco di un tipo specifico, ad esempio ObjA non solo il tipo ObjA stesso.

Come posso farlo?

Btw, non ho accesso alla classe che restituisce l'elenco di ObjA.

+0

Si consiglia di aggiungere un tag python e fornire ulteriori dettagli. – cel

+0

Hmm ... Ripensando a questa domanda, credo che ci debba essere un modo più pulito creando un formattatore personalizzato come [Sage fa questo] (https://github.com/sagemath/sage/blob/master/src/sage /repl/display/formatter.py) e sostituendo 'text/plain'. Non ho tempo per provare e venire con lo snippet di lavoro al momento, mi dispiace. – drdaeman

risposta

0

Come creare un formattatore per gli oggetti list che agisce solo quando visualizza un elenco di ObjA?

from decimal import Decimal # Decimal is my ObjA here 

ip = get_ipython() 
formatter = ip.display_formatter.formatters['text/latex'] 

def format_list(obj): 
    if not isinstance(obj, list): 
     return None 
    if not all(isinstance(item, Decimal) for item in obj): 
     return None 
    return "$$[%s]$$" % ";".join(map(str, obj)) 

formatter.for_type_by_name('builtins', 'list', format_list) 

Sembra che se la funzione di formattazione ritorna None, il formattatore viene ignorato. Almeno per me funziona:

In[2]: [Decimal("1"), Decimal("2"), "not a decimal"] 
Out[2]: [Decimal("1"), Decimal("2"), "not a decimal"] 

In[3]: [Decimal("1"), Decimal("2")] 
Out[3] 1, 2 # LaTeX-formatted, yeah 

Questo è un hack piuttosto sporca, ma purtroppo non vedo nessun altro modo (oltre scimmia patch DisplayFormatter, che è ancora più sporco, anche se dovrebbe essere più potente). Se c'è, la speranza qualcuno ci illuminerebbe.