o
    i9                     @   s2   d dl m  mZ d dlmZ d dlZdd ZdS )    N)pytreec              	      s   ddl m} | i 	dd	fdd	ddddd	dd
d
ddddfdddd 
fdd  	
f	dd| }j|| dddd S )Nr   )Digraphc                    s<    } d7  t |}| d urt| vsJ |t| < |S )N   )strid)objnode_id)next_node_idpythonid_to_nodeid N/home/ubuntu/.local/lib/python3.10/site-packages/einx/_src/tracer/visualize.pynew_node_id   s   zvisualize.<locals>.new_node_idboxfilledz#aa7777)shapestyle	fillcolorovalz#7777aaz#77aa77c                    s
  t | ttB tB tjB tjB rt| S t | trd|  dS | d u r$dS t | tr:dd	t
 |  dd|   S t | tr\t| dkrGdnd	}d
d	t
 |  | dd|   S t | tr| jd urk | jnd}| jd urw | jnd}| jd ur | jnd}d| d| d| dd|   S t | tjjjrdd	t
 | j dd|   S t | tjjjrd| jd urd	t
 | jnd dd|   S t | tjrdd|   S t | tjr| jd u rdd|   S d| j dd|   S tdt|  )N"None[z, ]z - r   , ()zslice(zTensor(zConvertibleTensor(TracerGraphzGraph("z")Unsupported type: )
isinstanceintfloatboolnpfloatingintegerr   listjoinmaptuplelenslicestartstopsteptracer	signature	classicalTensorr   ConvertibleTensorr   r   nameNotImplementedErrortype)xcommar,   r-   r.   )_value_to_strr   r   r9      s6   

"
&
"$2
z visualize.<locals>._value_to_strc                 S   s   | j jS N)	__class____name__)opr   r   r   
_op_to_str>   s   zvisualize.<locals>._op_to_strc                    sr    }j || fi  |D ]} |}|| q|D ]}|}j ||fi  || qd S r:   )nodeedge)textinputsoutputsop_idinputinput_idoutput	output_id)
_add_valuer9   dotr   	op_kwargsvalue_kwargsr   r   _add_opA   s   zvisualize.<locals>._add_opc                    s  t | ttB tB tB tjB tjB s| d u r& }j|| fi 	 |S t	| v r2t	|  S t | t
jre| jd urS| j| jjt| jj t	|  S | }j|| fi 	 |S t | trwd| | g t	|  S t | trd| | g t	|  S t | trd| j| j| jg| g t	|  S t | t
jr| j |  j | fi  | jD ]}|}j| ddd q fdd}t|| j  S td	t|  )
Nzcreate-listzcreate-tuplezcreate-slicedashedbluer   colorc                    s    | }j |ddd d S )NrN   redrP   )r@   )rG   rH   )rI   rJ   graph_idr   r   _add_out_edgep   s   z4visualize.<locals>._add_value.<locals>._add_out_edger   )r   r   r    r!   r"   r#   r$   r%   r?   r   r/   r   originrB   r   flattenrG   r&   r)   r+   r,   r-   r.   r   r@   r(   r5   r6   )r7   r   rE   rF   rT   )	rM   rI   r>   r9   rJ   graph_kwargsr   r
   rL   )rS   r   rI   N   sB   *
 




zvisualize.<locals>._add_valueoctagonz#ffaa00r:   )graphvizr   r?   )r7   r   rH   r   )rM   rI   r>   r9   rJ   rW   r   r	   rK   r
   rL   r   	visualize   s   +rZ   )einx._src.tracer_srcr/   einx._src.utilr   numpyr#   rZ   r   r   r   r   <module>   s    