o
    *Î®cÈl  ã                   @   sˆ   d dl mZmZ d dlmZmZmZmZmZm	Z	 d dl
mZ dd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    )Ú_GrowableGridÚArrowStringDescription)ÚDiagramGridÚObjectÚNamedMorphismÚDiagramÚXypicDiagramDrawerÚxypic_draw_diagram)Ú	FiniteSetc                  C   sN  t ddƒ} | jdksJ ‚| jdksJ ‚| d d u sJ ‚| d d u s#J ‚d| d< d| d< | d dks3J ‚| d dks;J ‚|  ¡  | jdksFJ ‚| jdksMJ ‚| d dksUJ ‚| d dks]J ‚| d d u seJ ‚|  ¡  | jdkspJ ‚| jdkswJ ‚| d dksJ ‚| d dks‡J ‚| d d u sJ ‚| d d u s—J ‚| d	 d u sŸJ ‚| d
 d u s§J ‚t ddƒ} d| d< d| d< |  ¡  | jdks¿J ‚| jdksÆJ ‚| d d u sÎJ ‚| d dksÖJ ‚| d dksÞJ ‚|  ¡  | jdkséJ ‚| jdksðJ ‚| d d u søJ ‚| d d u sJ ‚| d d u s
J ‚| d d u sJ ‚| d	 dksJ ‚| d
 dks%J ‚d S )Né   é   ©r   r   ©r   r   Útwoé   ©r   r   ©r   r   ©r   r   ©r   r   )r   ÚwidthÚheightÚ
append_rowÚappend_columnÚprepend_rowÚprepend_column)Úgrid© r   úJ/tmp/pip-target-vg8gfxp4/lib/python/sympy/categories/tests/test_drawing.pyÚtest_GrowableGrid   sT   

r   c            5      C   sB  t dƒ} t dƒ}t dƒ}t dƒ}t dƒ}t| |dƒ}t||dƒ}t|| dƒ}t||d	ƒ}t|gƒ}	t|	ƒ}
|
jd
ks<J ‚|
jdksCJ ‚|
d | ksKJ ‚|
d |ksSJ ‚|
j|tƒ iks]J ‚t||g|| diƒ}	t|	ƒ}
|
jd
kssJ ‚|
jd
kszJ ‚|
d | ks‚J ‚|
d |ksŠJ ‚|
d |ks’J ‚|
d d u sšJ ‚|
j|tƒ |tƒ || tdƒiks­J ‚t| | dƒ}t|||gƒ}	t|	ƒ}
|
jd
ksÅJ ‚|
jd
ksÌJ ‚|
d | ksÔJ ‚|
d |ksÜJ ‚|
d d u säJ ‚|
d |ksìJ ‚|
j|tƒ |tƒ |tƒ iksüJ ‚t||||gƒ}	t|	ƒ}
|
jdksJ ‚|
jd
ksJ ‚|
d | ks!J ‚|
d |ks*J ‚|
d |ks3J ‚|
d d u s<J ‚|
d |ksEJ ‚|
d d u sNJ ‚|
j|tƒ |tƒ |tƒ |tƒ iksbJ ‚t|
ƒdkskJ ‚t| |dƒ}t||dƒ}t||dƒ}t||d	ƒ}t||||gƒ}	t|	ƒ}
|
jdks—J ‚|
jdksŸJ ‚|
d | ks¨J ‚|
d |ks±J ‚|
d d u sºJ ‚|
d d u sÃJ ‚|
d |ksÌJ ‚|
d |ksÕJ ‚|
d d u sÞJ ‚|
d d u sçJ ‚|
d |ksðJ ‚|
j|tƒ |tƒ |tƒ |tƒ iksJ ‚t| |dƒ}t||dƒ}t| |dƒ}t||d	ƒ}t||||gƒ}	t|	ƒ}
|
jd
ks0J ‚|
jd
ks8J ‚|
d | ksAJ ‚|
d |ksJJ ‚|
d |ksSJ ‚|
d |ks\J ‚|
j|tƒ |tƒ |tƒ |tƒ ikspJ ‚t dƒ} t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t| |dƒ}t||dƒ}t||dƒ}t||dƒ}t| |dƒ}t||d	ƒ}t||d ƒ}t||d!ƒ}t| |d"ƒ}t||d#ƒ}t||d$ƒ}t||d%ƒ}t||d&ƒ}t|||||||||||||gƒ}	t|	ƒ}
|
jdksJ ‚|
jd'ksJ ‚|
d d u sJ ‚|
d | ksJ ‚|
d |ks&J ‚|
d |ks/J ‚|
d |ks8J ‚|
d |ksAJ ‚|
d |ksJJ ‚|
d |ksSJ ‚|
d |ks\J ‚|
d( d u seJ ‚|
d) |ksnJ ‚|
d* |kswJ ‚i }|||||||||||||fD ]}tƒ ||< qˆ|
j|ks™J ‚t d+ƒ}t d,ƒ}t d-ƒ}t d.ƒ}t d/ƒ}t d0ƒ} t d1ƒ}!t d2ƒ}"t||d3ƒ}#t||d4ƒ}$t||d5ƒ}%t||d5ƒ}&t|| d6ƒ}'t||!d7ƒ}(t| |"d8ƒ})t|!|"d9ƒ}*t||d:ƒ}+t|| d;ƒ},t||!d<ƒ}-t||"d<ƒ}.t|#|$|%|&|'|(|)|*|+|,|-|.gƒ}	t|	ƒ}
|
jd'ksJ ‚|
jdks%J ‚|
d d u s.J ‚|
d |ks7J ‚|
d | ks@J ‚|
d= d u sIJ ‚|
d d u sRJ ‚|
d |ks[J ‚|
d |ksdJ ‚|
d> d u smJ ‚|
d |!ksvJ ‚|
d |ksJ ‚|
d |ksˆJ ‚|
d? |"ks‘J ‚i }|#|$|%|&|'|(|)|*|+|,|-|.fD ]}tƒ ||< q¡|
j|ks²J ‚t dƒ} t dƒ}t dƒ}t dƒ}t dƒ}t| |dƒ}t||dƒ}t||dƒ}t||dƒ}t||||gƒ}	t|	d@dA}
|
jdBksôJ ‚|
jdksüJ ‚|
d | ksJ ‚|
d |ksJ ‚|
d |ksJ ‚|
d= |ks J ‚|
dC |ks)J ‚|
j|tƒ |tƒ |tƒ |tƒ iks=J ‚t|	d@dDdE}
|
jdksLJ ‚|
jdBksTJ ‚|
d | ks]J ‚|
d |ksfJ ‚|
d |ksoJ ‚|
d( |ksxJ ‚|
dF |ksJ ‚|
j|tƒ |tƒ |tƒ |tƒ iks•J ‚t| |dGƒ}/t| |dHƒ}0t||dIƒ}1t||dJƒ}2t||d3ƒ}#t||d4ƒ}$t|| dƒ}t|/|0|1|2|#|$g|diƒ}	t|	ƒ}
|
jdksØJ ‚|
jd
ksàJ ‚|
d | kséJ ‚|
d |ksòJ ‚|
d |ksûJ ‚|
d |ksJ ‚|
d |ksJ ‚|
d d u sJ ‚|tdƒi}|/|0|1|2|#|$fD ]}tƒ ||< q$|
j|ks5J ‚t|	d@dA}
|
jdBksCJ ‚|
jdksKJ ‚|
d |ksTJ ‚|
d |ks]J ‚|
d | ksfJ ‚|
d= |ksoJ ‚|
dC |ksxJ ‚|
j|ks€J ‚t|	t|t| |||ƒƒdK}
|
jdks–J ‚|
jd
ksžJ ‚|
d |ks§J ‚|
d | ks°J ‚|
d |ks¹J ‚|
d d u sÂJ ‚|
d |ksËJ ‚|
d |ksÔJ ‚|
j|ksÜJ ‚t dƒ} t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t| |dƒ}t||dƒ}t||dƒ}t||dƒ}t||dƒ}t||d	ƒ}t||d ƒ}t||d!ƒ}t| |d"ƒ}t||d#ƒ}t||d$ƒ}t||d%ƒ}t||d&ƒ}t|||||||||||||gƒ}	t|	ƒ}
|
jdBksoJ ‚|
jdkswJ ‚|
d d u s€J ‚|
d | ks‰J ‚|
d |ks’J ‚|
d= d u s›J ‚|
dC d u s¤J ‚|
d |ks­J ‚|
d |ks¶J ‚|
d |ks¿J ‚|
d> |ksÈJ ‚|
dL d u sÑJ ‚|
d |ksÚJ ‚|
d |ksãJ ‚|
d d u sìJ ‚|
d? |ksõJ ‚|
dM |ksþJ ‚i }|||||||||||||fD ]}tƒ ||< q|
j|ks J ‚t|	tt| ||||ƒt|||||ƒƒƒ}
|
jdNks<J ‚|
jdksDJ ‚|
d | ksMJ ‚|
d |ksVJ ‚|
d d u s_J ‚|
d= |kshJ ‚|
dC |ksqJ ‚|
dO d u szJ ‚|
d d u sƒJ ‚|
d |ksŒJ ‚|
d |ks•J ‚|
d> d u sžJ ‚|
dL |ks§J ‚|
dP |ks°J ‚|
d d u s¹J ‚|
d d u sÂJ ‚|
d |ksËJ ‚|
d? d u sÔJ ‚|
dM d u sÝJ ‚|
dQ |ksæJ ‚|
j|ksîJ ‚t|	| ||||f|||||hgƒ}
|
jdNk	sJ ‚|
jdk	sJ ‚|
d | k	sJ ‚|
d |k	s!J ‚|
d d u 	s*J ‚|
d= |k	s3J ‚|
dC |k	s<J ‚|
dO d u 	sEJ ‚|
d d u 	sNJ ‚|
d |k	sWJ ‚|
d |k	s`J ‚|
d> d u 	siJ ‚|
dL |k	srJ ‚|
dP |k	s{J ‚|
d d u 	s„J ‚|
d d u 	sJ ‚|
d |k	s–J ‚|
d? d u 	sŸJ ‚|
dM d u 	s¨J ‚|
dQ |k	s±J ‚|
j|k	s¹J ‚t|	t| ||||ƒd@dDdEœt|||||ƒd@dDdEœidDdR}
|
jdBk	sÞJ ‚|
jd
k	sæJ ‚|
d | k	sïJ ‚|
d |k	søJ ‚|
d |k
sJ ‚|
d= |k
s
J ‚|
dC |k
sJ ‚|
d |k
sJ ‚|
d |k
s%J ‚|
d |k
s.J ‚|
d> |k
s7J ‚|
dL |k
s@J ‚|
j|k
sHJ ‚t| |dƒ}t||dƒ}t||dƒ}3t||dƒ}4t|||3|4g|| d|4|3 diƒ}	t|	ƒ}
|
jd'k
s}J ‚|
jd
k
s…J ‚|
d | k
sŽJ ‚|
d |k
s—J ‚|
d |k
s J ‚|
d= |k
s©J ‚|
d |k
s²J ‚|
d d u 
s»J ‚|
d |k
sÄJ ‚|
d> d u 
sÍJ ‚|
j|tƒ |tƒ |3tƒ |4tƒ || tdƒ|4|3 tdƒik
síJ ‚t| |dƒ}t||dƒ}t||gƒ}	t|	ƒ}
|
jd'ksJ ‚|
jdksJ ‚|
d | ksJ ‚|
d |ks%J ‚|
d |ks.J ‚|
d= |ks7J ‚|
j|tƒ |tƒ iksEJ ‚t| | dƒ}t|gƒ}	t|	ƒ}
|
jdks\J ‚|
jdksdJ ‚|
d | ksmJ ‚t||dƒ}t||gƒ}	t|	ƒ}
|
jd
ks…J ‚|
jdksJ ‚|
d | ks–J ‚|
d |ksŸJ ‚d S )SNÚAÚBÚCÚDÚEÚfÚgÚhÚkr   r   r   r   Úuniquer   r   Úl_Ar   ©r   r   ©r   r   zD[[Object("A"), Object("B"), Object("D")], [None, Object("C"), None]]r   r   ©r   r   úA'úB'úC'úD'úE'ÚiÚjÚlÚmÚoÚpÚqÚrÚsé   )r   r   )r   r   )r   r   ÚA1ÚA2ÚA3ÚA4ÚA5ÚA6ÚA7ÚA8Úf1Úf2Úf3Úf5Úf6Úf7Úf8Úf9Úf10Úf11©r   r   ©r   r   ©r   r   Ú
sequential©Úlayouté   ©r   r;   T©rS   Ú	transpose)r;   r   Úm1Úm2Ús1Ús2)Úgroups©r   r;   ©r   r;   é   )r   rT   )r   rT   )r   rT   ©rW   )	r   r   r   r   r   r   Ú	morphismsr
   Ústr)5r   r    r!   r"   r#   r$   r%   r&   r'   Údr   r)   ÚA_ÚB_ÚC_ÚD_ÚE_r2   r3   r4   r5   r6   r7   r8   r9   r:   ra   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   Úf4rG   rH   rI   rJ   rK   rL   rM   Úf12rX   rY   rZ   r[   Úf_Úg_r   r   r   Útest_DiagramGridK   s   

ÿ ÿÿÿ""  ÿÿ""ÿ"ÿÿýû"þ
rm   c                  C   sD  t dƒ} t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t d	ƒ}t d
ƒ}	t dƒ}
t| |dƒ}t| |dƒ}t| |dƒ}t| |dƒ}t| |dƒ}t| |dƒ}t| |dƒ}t| |	dƒ}t| |
dƒ}t| |dƒ}t||||||||||g
ƒ}t|ƒ}|jdksJ ‚|jdksˆJ ‚|d |ksJ ‚|d |ks˜J ‚|d |ks J ‚|d |
ks¨J ‚|d |ks°J ‚|d |ks¸J ‚|d | ksÀJ ‚|d |ksÈJ ‚|d  d u sÐJ ‚|d! d u sØJ ‚|d" |	ksàJ ‚|d# |ksèJ ‚|d$ |ksðJ ‚|d% d u søJ ‚|d& d u sJ ‚i }||||||||||f
D ]}tƒ ||< q|j|ks J ‚d S )'Nr   r    r!   r"   r#   ÚFr-   r.   r/   r0   r1   rD   rE   rF   ri   rG   rH   rI   rJ   rK   rL   rT   r   r   r   r*   rN   rU   r   r   r+   rO   r]   r   r   r,   rP   r^   )r   r   r   r   r   r   r
   ra   )r   r    r!   r"   r#   rn   rd   re   rf   rg   rh   rD   rE   rF   ri   rG   rH   rI   rJ   rK   rL   rc   r   ra   r$   r   r   r   Útest_DiagramGrid_pseudopod/  sX   ro   c               
   C   sP  t ddd ddddddƒ	} t| ƒdksJ ‚t dddddddddƒ	} t| ƒdks(J ‚t dd	dddddddƒ	} t| ƒd
ks<J ‚t dddddddddƒ	} t| ƒdksPJ ‚t dddddddddƒ	} t| ƒdksdJ ‚t dddddddddƒ	} t| ƒdksxJ ‚t dddddddddƒ	} d| _t| ƒdksJ ‚t dddddddddƒ	} d| _t| ƒdks¦J ‚d S )NÚcmÚ rc   r9   Ú_r$   z\ar[dr]_{f}é   ú^z\ar@/^12cm/[dr]_{f}Úuz\ar@(r,u)[dr]_{f}ú{-->}z\ar@(r,u)@{-->}[dr]_{f}z\ar@/_12cm/@{-->}[dr]_{f})r   rb   Úarrow_style©Úastrr   r   r   Útest_ArrowStringDescriptionc  s$   rz   c                  C   sº   t dƒ} t dƒ}t dƒ}t dƒ}t dƒ}t| |dƒ}t||dƒ}t||dƒ}t||d	ƒ}t||||gƒ}	t|	d
d}
tƒ }| |	|
¡dksGJ ‚t|	d
dd}
tƒ }| |	|
¡dks[J ‚d S )Nr   r    r!   r"   r#   r$   r%   r&   r2   rQ   rR   zL\xymatrix{
A \ar[r]^{f} & B \ar[r]^{g} & C \ar[r]^{h} & D \ar[r]^{i} & E 
}
TrV   zP\xymatrix{
A \ar[d]^{f} \\
B \ar[d]^{g} \\
C \ar[d]^{h} \\
D \ar[d]^{i} \\
E 
}
©r   r   r   r   r   Údraw©r   r    r!   r"   r#   r$   r%   r&   r2   rc   r   Údrawerr   r   r   Útest_XypicDiagramDrawer_line  s    r   c                  C   s  t dƒ} t dƒ}t dƒ}t| |dƒ}t||dƒ}t||g|| diƒ}t|ƒ}tƒ }| ||¡dks4J ‚t|dd	}tƒ }| ||¡d
ksGJ ‚|j|||gddksTJ ‚dd„ }||jd< | ||¡dksgJ ‚dd„ }	|	|_| ||¡dksxJ ‚t|| dƒ}
t| |dƒ}t||dƒ}t||dƒ}t||
||||g|
| d|| diƒ}t|dd	}tƒ }|j|||
| | | || |
 | gddksÆJ ‚d S )Nr   r    r!   r$   r%   r(   zD\xymatrix{
A \ar[d]_{g\circ f} \ar[r]^{f} & B \ar[ld]^{g} \\
C & 
}
Tr`   zD\xymatrix{
A \ar[r]^{g\circ f} \ar[d]_{f} & C \\
B \ar[ru]_{g} & 
}
)Úmaskedz8\xymatrix{
A \ar[r]^{g\circ f} \ar[d]_{f} & C \\
B & 
}
c                 S   s   d| j  | _ d| _d S )Nz	\exists !rv   )Úlabelrw   rx   r   r   r   Ú	formatter½  s   
z3test_XypicDiagramDrawer_triangle.<locals>.formatterzS\xymatrix{
A \ar@{-->}[r]^{\exists !g\circ f} \ar[d]_{f} & C \\
B \ar[ru]_{g} & 
}
c                 S   s
   d| _ d S )Nz(0.45))Úlabel_displacementrx   r   r   r   Údefault_formatterÈ  s   
z;test_XypicDiagramDrawer_triangle.<locals>.default_formatterze\xymatrix{
A \ar@{-->}[r]^(0.45){\exists !g\circ f} \ar[d]_(0.45){f} & C \\
B \ar[ru]_(0.45){g} & 
}
rD   rE   Úg1Úg2zÇ\xymatrix{
A \ar[r]^{g_{2}\circ f_{2}} \ar[d]_{f} \ar@/^3mm/[d]^{f_{2}} & C \ar@/^3mm/[l]^{f_{1}\circ g_{1}} \ar@/^3mm/[ld]^{g_{1}} \\
B \ar@/^3mm/[u]^{f_{1}} \ar[ru]_{g} \ar@/^3mm/[ru]^{g_{2}} & 
}
)r   r   r   r   r   r|   Úarrow_formattersÚdefault_arrow_formatter)r   r    r!   r$   r%   rc   r   r~   r‚   r„   rD   rE   r…   r†   r   r   r   Ú test_XypicDiagramDrawer_trianglež  s:   
&*ÿr‰   c                  C   s<  t dƒ} t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t| |d	ƒ}t| |d
ƒ}	t||dƒ}
t||dƒ}t||dƒ}t||dƒ}t||dƒ}t||dƒ}t| |dƒ}t||dƒ}t||dƒ}t||dƒ}t||	|
|||||||||gƒ}t|ƒ}tƒ }| ||¡dks‰J ‚t|dd}tƒ }| ||¡dksœJ ‚d S )Nr<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   a  \xymatrix{
& A_{5} \ar[r]^{f_{5}} \ar[ldd]_{f_{6}} & A_{6} \ar[rdd]^{f_{7}} & \\
& A_{1} \ar[r]^{f_{1}} \ar[d]^{f_{2}} \ar[u]^{f_{9}} & A_{2} \ar[d]^{f_{3}} \ar[u]_{f_{10}} & \\
A_{7} \ar@/_3mm/[rrr]_{f_{8}} & A_{3} \ar[r]^{f_{3}} \ar[l]_{f_{11}} & A_{4} \ar[r]^{f_{11}} & A_{8} 
}
Tr`   a  \xymatrix{
& & A_{7} \ar@/^3mm/[ddd]^{f_{8}} \\
A_{5} \ar[d]_{f_{5}} \ar[rru]^{f_{6}} & A_{1} \ar[d]^{f_{1}} \ar[r]^{f_{2}} \ar[l]^{f_{9}} & A_{3} \ar[d]_{f_{3}} \ar[u]^{f_{11}} \\
A_{6} \ar[rrd]_{f_{7}} & A_{2} \ar[r]^{f_{3}} \ar[l]^{f_{10}} & A_{4} \ar[d]_{f_{11}} \\
& & A_{8} 
}
r{   )r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   ri   rG   rH   rI   rJ   rK   rL   rM   rj   rc   r   r~   r   r   r   Útest_XypicDiagramDrawer_cubeã  s6    
rŠ   c                  C   sZ  t dƒ} t dƒ}t dƒ}t dƒ}t| |dƒ}t||dƒ}t|| dƒ}t||dƒ}t||||gƒ}t|ƒ}	tƒ }
|
 ||	¡d	ksAJ ‚t|d
d}	tƒ }
|
 ||	¡dksTJ ‚|
j||	dddks`J ‚t|| dƒ}t| |dƒ}t||dƒ}t||||||gƒ}t|ƒ}	tƒ }
|
 ||	¡dksJ ‚t|d
d}	tƒ }
|
 ||	¡dks J ‚t| | dƒ}t||dƒ}t||dƒ}t|||||||||g	ƒ}t|ƒ}	tƒ }
|
 ||	¡dksÐJ ‚t|d
d}	tƒ }
|
 ||	¡dksãJ ‚t| | dƒ}t||dƒ}t||dƒ}t||||||||||||gƒ}t|ƒ}	tƒ }
|
 ||	¡dksJ ‚t|d
d}	tƒ }
|
 ||	¡dks+J ‚d S )Nr   r    r!   r"   r$   r%   r&   r'   zU\xymatrix{
A \ar[r]_{f} & B \ar[d]^{g} & D \ar[l]^{k} \ar@/_3mm/[ll]_{h} \\
& C & 
}
Tr`   zV\xymatrix{
A \ar[d]^{f} & \\
B \ar[r]^{g} & C \\
D \ar[u]_{k} \ar@/^3mm/[uu]^{h} & 
}
z@+1cm@dr)Údiagram_formatz^\xymatrix@+1cm@dr{
A \ar[d]^{f} & \\
B \ar[r]^{g} & C \\
D \ar[u]_{k} \ar@/^3mm/[uu]^{h} & 
}
Úh1Úh2z„\xymatrix{
A \ar[r]_{f} \ar@/^3mm/[rr]^{h_{2}} & B \ar[d]^{g} & D \ar[l]^{k} \ar@/_7mm/[ll]_{h} \ar@/_11mm/[ll]_{h_{1}} \\
& C & 
}
z…\xymatrix{
A \ar[d]^{f} \ar@/_3mm/[dd]_{h_{2}} & \\
B \ar[r]^{g} & C \\
D \ar[u]_{k} \ar@/^7mm/[uu]^{h} \ar@/^11mm/[uu]^{h_{1}} & 
}
r)   Úl_DÚl_CzÀ\xymatrix{
A \ar[r]_{f} \ar@/^3mm/[rr]^{h_{2}} \ar@(u,l)[]^{l_{A}} & B \ar[d]^{g} & D \ar[l]^{k} \ar@/_7mm/[ll]_{h} \ar@/_11mm/[ll]_{h_{1}} \ar@(r,u)[]^{l_{D}} \\
& C \ar@(l,d)[]^{l_{C}} & 
}
zÁ\xymatrix{
A \ar[d]^{f} \ar@/_3mm/[dd]_{h_{2}} \ar@(r,u)[]^{l_{A}} & \\
B \ar[r]^{g} & C \ar@(r,u)[]^{l_{C}} \\
D \ar[u]_{k} \ar@/^7mm/[uu]^{h} \ar@/^11mm/[uu]^{h_{1}} \ar@(l,d)[]^{l_{D}} & 
}
Ún_AÚn_DÚn_Ca  \xymatrix{
A \ar[r]_{f} \ar@/^3mm/[rr]^{h_{2}} \ar@(u,l)[]^{l_{A}} \ar@/^3mm/@(l,d)[]^{n_{A}} & B \ar[d]^{g} & D \ar[l]^{k} \ar@/_7mm/[ll]_{h} \ar@/_11mm/[ll]_{h_{1}} \ar@(r,u)[]^{l_{D}} \ar@/^3mm/@(d,r)[]^{n_{D}} \\
& C \ar@(l,d)[]^{l_{C}} \ar@/^3mm/@(d,r)[]^{n_{C}} & 
}
a  \xymatrix{
A \ar[d]^{f} \ar@/_3mm/[dd]_{h_{2}} \ar@(r,u)[]^{l_{A}} \ar@/^3mm/@(u,l)[]^{n_{A}} & \\
B \ar[r]^{g} & C \ar@(r,u)[]^{l_{C}} \ar@/^3mm/@(d,r)[]^{n_{C}} \\
D \ar[u]_{k} \ar@/^7mm/[uu]^{h} \ar@/^11mm/[uu]^{h_{1}} \ar@(l,d)[]^{l_{D}} \ar@/^3mm/@(d,r)[]^{n_{D}} & 
}
r{   )r   r    r!   r"   r$   r%   r&   r'   rc   r   r~   rŒ   r   r)   rŽ   r   Úl_A_Úl_D_Úl_C_r   r   r   Ú(test_XypicDiagramDrawer_curved_and_loops  s`   ÿ 	r–   c                  C   sš   t dƒ} t dƒ}t dƒ}t dƒ}t dƒ}t| |dƒ}t||dƒ}t||dƒ}t||d	ƒ}t||||gƒ}	t|	d
d}
tƒ }| |	|
¡t|	d
dksKJ ‚d S )Nr   r    r!   r"   r#   r$   r%   r&   r2   rQ   rR   )r   r   r   r   r   r|   r	   r}   r   r   r   Útest_xypic_draw_diagram‡  s    r—   N)Ú sympy.categories.diagram_drawingr   r   Úsympy.categoriesr   r   r   r   r   r	   Úsympy.sets.setsr
   r   rm   ro   rz   r   r‰   rŠ   r–   r—   r   r   r   r   Ú<module>   s     D   g4E7m