o
    g’×ió  ã                   @   sÀ   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	Z	ej
jZej
jZej
jZedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdd„ ZdS )é    N)Úsuppress)Úuse_backendc                 C   sŠ  | j | }}| d¡}ttg|j¢R ƒ | d|¡jdks J ‚W d   ƒ n1 s*w   Y  ttg|j¢R ƒ | d|¡jdksDJ ‚W d   ƒ n1 sNw   Y  ttg|j¢R ƒ | d|¡jdkshJ ‚W d   ƒ n1 srw   Y  t tt	g|j¢R ¡ | d|¡ W d   ƒ n1 s“w   Y  t tt	g|j¢R ¡ | d|¡ W d   ƒ n1 s´w   Y  ttg|j¢R ƒ | d|¡jd	ksÎJ ‚W d   ƒ n1 sØw   Y  t tt	g|j¢R ¡ | d
|¡ W d   ƒ n1 sùw   Y  ttg|j¢R ƒ | d|¡jdksJ ‚W d   ƒ n	1 sw   Y  | d¡}ttg|j¢R ƒ | d|¡ W d   ƒ n	1 sDw   Y  t tt	g|j¢R ¡ | d|¡ W d   ƒ n	1 sfw   Y  | d¡}ttg|j¢R ƒ | d|¡jdks†J ‚W d   ƒ n	1 s‘w   Y  ttg|j¢R ƒ | d|¡jdks¬J ‚W d   ƒ n	1 s·w   Y  ttg|j¢R ƒ | d|¡jdksÒJ ‚W d   ƒ n	1 sÝw   Y  ttg|j¢R ƒ | d|¡jdksøJ ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ | d|¡jdksJ ‚W d   ƒ n	1 s)w   Y  ttg|j¢R ƒ | d|¡jdksDJ ‚W d   ƒ n	1 sOw   Y  ttt
g|j¢R ƒ |jd|jddddjdkspJ ‚W d   ƒ n	1 s{w   Y  | d¡}ttg|j¢R ƒ | d|¡jdks›J ‚W d   ƒ n	1 s¦w   Y  | d¡}t tt	g|j¢R ¡ | d|¡ W d   ƒ n	1 sÍw   Y  ttg|j¢R ƒ | dt dgg¡¡jdksíJ ‚W d   ƒ n	1 søw   Y  ttg|j¢R ƒ | d t dg¡¡jdksJ ‚W d   ƒ n	1 s"w   Y  d!|jvrSttt
g|j¢R ƒ | d"d#¡d#ksCJ ‚W d   ƒ n	1 sNw   Y  t tt	g|j¢R ¡ | dt dg¡¡ W d   ƒ n	1 stw   Y  t tt	g|j¢R ¡ | d t dgg¡¡ W d   ƒ n	1 s›w   Y  | d$¡}ttg|j¢R ƒ | d%|¡jdks»J ‚W d   ƒ n	1 sÆw   Y  | d&¡}ttg|j¢R ƒ |jd'|dd(jd)ksèJ ‚W d   ƒ n	1 sów   Y  | d)¡}ttg|j¢R ƒ | d*|¡jd	ksJ ‚W d   ƒ n	1 sw   Y  | d+¡}ttg|j¢R ƒ | d,|¡jd-ks>J ‚W d   ƒ n	1 sIw   Y  ttg|j¢R ƒ | d.|¡jd-ksdJ ‚W d   ƒ n	1 sow   Y  ttg|j¢R ƒ |jd/|d0d1jd2ksŒJ ‚W d   ƒ n	1 s—w   Y  ttg|j¢R ƒ |jd3|dd4jd-ks´J ‚W d   ƒ n	1 s¿w   Y  ttg|j¢R ƒ |jd5t d#g¡dd4jdksàJ ‚W d   ƒ n	1 sëw   Y  ttg|j¢R ƒ |jd6t d#g¡dd7d8jd&ksJ ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ |jd5| d#g¡dd4jdks9J ‚W d   ƒ n	1 sDw   Y  ttg|j¢R ƒ |jd6| d#g¡dd7d8jd&ksfJ ‚W d   ƒ n	1 sqw   Y  | d9¡}ttg|j¢R ƒ |jd5|dd4jdks“J ‚W d   ƒ n	1 sžw   Y  ttg|j¢R ƒ |jd6|dd7d8jd&ks¼J ‚W d   ƒ n	1 sÇw   Y  | d¡}ttg|j¢R ƒ | d:|¡jd;ksçJ ‚W d   ƒ n	1 sòw   Y  | d<¡}ttg|j¢R ƒ | d=|¡jd>ksJ ‚W d   ƒ n	1 sw   Y  | d?¡}ttg|j¢R ƒ |jd@|dAdBgdCjdDksAJ ‚W d   ƒ n	1 sLw   Y  | dE¡}ttg|j¢R ƒ |jdF|dAdGgdHdIgdJjdKkssJ ‚W d   ƒ n	1 s~w   Y  | d¡}ttg|j¢R ƒ | dL|¡jdMksžJ ‚W d   ƒ n	1 s©w   Y  | dN¡}ttg|j¢R ƒ | dO|¡jdPksÉJ ‚W d   ƒ n	1 sÔw   Y  | d	¡}t tt	g|j¢R ¡ | dO|¡ W d   ƒ n	1 sûw   Y  | d¡}t tt	g|j¢R ¡ | dQ|¡ W d   ƒ n	1 s"w   Y  | d¡}t tt	g|j¢R ¡ | dR|¡ W d   ƒ n	1 sIw   Y  t tt	g|j¢R ¡ | dS|¡ W d   ƒ n	1 skw   Y  | dT¡}ttg|j¢R ƒ |jdU|dAdVjdWksJ ‚W d   ƒ n	1 s˜w   Y  | dX¡}ttg|j¢R ƒ |jdY|dAdAgdZjd[ks¼J ‚W d   ƒ n	1 sÇw   Y  | d\¡}ttg|j¢R ƒ |jd]|d^d_jd`kséJ ‚W d   ƒ n	1 sôw   Y  ttg|j¢R ƒ |jd]|dAd_jd`ksJ ‚W d   ƒ n	1 sw   Y  | d¡}ttg|j¢R ƒ |jda|dAdAdbjdcks?J ‚W d   ƒ n	1 sJw   Y  | d¡}| dd¡}de|jv	rdf|jv	rttg|j¢R ƒ | dg||¡jdhks|J ‚W d   ƒ n	1 s‡w   Y  ttg|j¢R ƒ | di||¡jdhks£J ‚W d   ƒ n	1 s®w   Y  ttg|j¢R ƒ | dj||¡jdhksÊJ ‚W d   ƒ n	1 sÕw   Y  ttg|j¢R ƒ | dk||¡jdhksñJ ‚W d   ƒ n	1 süw   Y  t tt	g|j¢R ¡ | dl||¡jdhk	sJ ‚W d   ƒ n	1 	s%w   Y  de|jv	r]df|jv	r]ttg|j¢R ƒ | dm||¡jd>k	sMJ ‚W d   ƒ n	1 	sXw   Y  de|jv	r—df|jv	r—ttg|j¢R ƒ dndo„ |jdp|dHd(D ƒdqdrgk	s‡J ‚W d   ƒ n	1 	s’w   Y  t ttg|j¢R ¡ | dm|¡ W d   ƒ n	1 	s´w   Y  t tt	g|j¢R ¡ | ds|¡ W d   ƒ n	1 	sÖw   Y  de|jv
rdf|jv
rttg|j¢R ƒ |jdt||dAdujdvk
s J ‚W d   ƒ n	1 
sw   Y  t tt	g|j¢R ¡ | dw|d#¡ W d   ƒ n	1 
s.w   Y  | d¡}d!|jv
rxdf|jv
rxdx|jv
rxttg|j¢R ƒ | dy|t dzg¡ d{¡¡jd|k
shJ ‚W d   ƒ n	1 
ssw   Y  df|jv
rÑttg|j¢R ƒ | d}|dz¡jd|k
s•J ‚W d   ƒ n	1 
s w   Y  | d¡}ttg|j¢R ƒ | d}||¡jd|k
sÁJ ‚W d   ƒ n	1 
sÌw   Y  |jd	d~d}| d€¡}de|jvr$df|jvr$ttg|j¢R ƒ | d||¡\}}W d   ƒ n	1 sw   Y  | d‚¡}ttg|j¢R ƒ" | dƒ|¡}|d jd„ks+J ‚|d# jd…ks5J ‚W d   ƒ n	1 s@w   Y  t d¡}ttg|j¢R ƒ9 |jd†|dGdHd‡}|d jdˆksgJ ‚|d# jd‰ksqJ ‚|dA jdŠks{J ‚|dG jd‹ks…J ‚W d   ƒ n	1 sw   Y  t tt	g|j¢R ¡ |jdŒ|dGdHd‡ W d   ƒ n	1 sµw   Y  | d¡}| dŽ¡}ttg|j¢R ƒ | d||¡jdksÛJ ‚W d   ƒ n	1 sæw   Y  | d¡}ttg|j¢R ƒ" |jd‘|d|d’\}}|jdŽksJ ‚|jdksJ ‚W d   ƒ n	1 sw   Y  | d…¡}ttg|j¢R ƒ | d“||¡jd”ks@J ‚W d   ƒ n	1 sKw   Y  ttg|j¢R ƒ | d•||¡jd–ksgJ ‚W d   ƒ n	1 srw   Y  ttg|j¢R ƒ | d—||¡jd˜ksŽJ ‚W d   ƒ n	1 s™w   Y  ttg|j¢R ƒ | d™||¡jd‹ksµJ ‚W d   ƒ n	1 sÀw   Y  de|jvrdf|jvrttg|j¢R ƒ | dš||¡jd”ksèJ ‚W d   ƒ n	1 sów   Y  ttg|j¢R ƒ | d›||¡jd‹ksJ ‚W d   ƒ n	1 sw   Y  t tt	g|j¢R ¡ | dœ||¡ W d   ƒ d S 1 s>w   Y  d S )N©é
   é   é   za b c -> (a b) c 1)éÈ   r   r   za b c -> (a b) c 1 1 1)r   r   r   r   r   za (a + b) c -> (a b) c 1za b c -> a c b -> b c aza b c -> a b©r   r   za b c -> a b c cúa b c©r   Úxz
([x)] -> x)r   r   r   r   za a a a -> aza a a b -> a b©r   r   za a b a -> a bza b a a -> a bzb a a a -> a bzb a c a -> a b c©r   r   r   r   ©ÚaÚbÚc©éd   z
(a a) -> az
a a -> a az1 1 ->r   © z1 ->Úarrayapiz->r   )r   r   r   r   za a b c -> (a b) c 1)r   z ( a   b  ) ->   b   a   ©r   )r   r   z(a) (b) -> b a)r   r   r   é   zb s... c -> b (s...) c)r   i  r   zb ... c -> b (...) cz$b (s...) (r...) c -> b (s...) r... c)r   r   )Úr)r   r   r   r   r   z b s... c x... -> x... b (s...) c)r   z1 -> (x)z
1 -> (x y)r   ©r   Úy©r   za b c d... -> a b c (d...))r   r   r   r   )r   r   r   r   za (b...) c d -> a (b... c) d)r   r   r   )r   r   r   r   é   z(a (b... c) d... e -> a (b...) (c d...) er   é   ©r   )r   r   é   r   )r   r   é   é   z"a b (c...) (d...) -> a c... b d...r   r    r!   )r   Úd)r   r   r   r   r    r!   za... -> 1 (a...))r   r   )r   r   r   z((s1...) (s2...) h -> 1 h (s1...) (s2...))r   r   r   r   za b c -> (a b) c dza b... c... -> a (b...) c...za b... -> a b)r   r   r   r!   z0a (b...) (e f...) (d c) -> a d (b...) (e f...) c©r#   )r   r   r   r   r   )r   r   r   r!   é   é   z0a b c d... (e f...) -> a b c d... ((e 2 2) f...))Úf)r   r   r   r!   r%   é0   )r   r   r   z(s s2)... c -> s... s2... c)r   r   ©Ús2)r   r   r   r   r   z"(a b) (c d) (e f) -> a (b c d e) f)r   r'   )r   éú   r   ©r   z
torch.vmapúmlx.vmapza, b -> (a + b)©é   za, b -> (a+ b)za, b -> (a +b)za, b ->(a+b)za, b -> (b + a)za, b -> a b (1 + 1)c                 S   s   g | ]}|j ‘qS r   ©Úshape)Ú.0r   r   r   úN/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/test/test_shapes.pyÚ
<listcomp>Å   s    z!test_shape_id.<locals>.<listcomp>z(a + b) -> a, b 1)r    )r!   r   z(a + b) -> a b (1 + 1)za, (b c) -> c (a + b)©r   )r   r   za, -> (a +)Údaskzb c, 1 -> b (c + 1)g      E@Úfloat32©r   é   zb c, -> b (c + 1)Úbool©Údtype)r    r   r   r   z h w, b h w c -> 1 h w 1, b h w c)r   r   z(a + b) a -> a, b a©r   ©r   r   z%(a + b) (c + d) -> a c, a d, b c, b d)r   r#   )r%   r!   )r%   r    )r   r!   )r   r    z%(a + b) (c + d) -> a d, a c, b c, b d)r   r   r9   r   )r   r   z!b c, b s... c -> b (1 + (s...)) c)r   éo   r   z!b (1 + (s...)) c -> b c, b s... c)Úsza b, a b -> a (b + b))r   r!   za b, a b -> (b + b) a)r!   r   zb a, b a -> (b + b) a©r    r   zb a, b a -> a (b + b)za b1, a b2 -> a (b1 + b2)zb1 a, b2 a -> a (b1 + b2)za b1, a b2 -> a ((a b1) + b2))ÚeinxÚfullr   ÚOperationNotSupportedErrorÚ
exceptionsÚidr1   ÚpytestÚraisesÚ	EinxErrorÚBackendResolutionErrorÚnpÚasarrayÚnameÚ	to_tensorÚ
ValueErrorÚastypeÚzeros)Úsetup_backendrB   Úsetupr   r   r@   Úzr   r   r3   Útest_shape_id   sD  
ÿÿÿÿÿÿÿÿ
ÿÿ
ÿÿÿÿÿÿ$ÿ
ÿ
ÿ$ÿ"ÿÿÿÿ
ÿ
ÿ
ÿ
ÿÿÿÿ&ÿ(ÿ&ÿ(ÿ
ÿ ÿ
ÿ
ÿ
"ÿ
(ÿ
ÿ
ÿ
ÿ
ÿ
ÿÿ
ÿ
"ÿ
ÿÿ
 ÿ

ÿÿÿÿÿÿ*ÿÿÿ ÿÿ
$*ÿÿ
ÿ
ÿ
ý
ûÿ

ÿ
ý
ÿÿÿÿÿÿ$ÿrU   c           	      C   s   | j | }}| d¡}| d¡}ttg|j¢R ƒ | d||¡jdks&J ‚W d   ƒ n1 s0w   Y  ttg|j¢R ƒ | d||¡jdksKJ ‚W d   ƒ n1 sUw   Y  t tt	g|j¢R ¡ | d||¡ W d   ƒ n1 sww   Y  t tt	g|j¢R ¡ | d||¡ W d   ƒ n1 s™w   Y  t tt	g|j¢R ¡ | d|¡ W d   ƒ n1 sºw   Y  t tt	g|j¢R ¡ | d	||¡ W d   ƒ n1 sÜw   Y  t tt	g|j¢R ¡ | d
||¡ W d   ƒ n1 sþw   Y  ttg|j¢R ƒ | d||¡jdksJ ‚W d   ƒ n	1 s%w   Y  ttg|j¢R ƒ | d||¡jdksAJ ‚W d   ƒ n	1 sLw   Y  | d¡}| d¡}ttg|j¢R ƒ | d||¡jdksrJ ‚W d   ƒ n	1 s}w   Y  ttg|j¢R ƒ | d||¡jdks™J ‚W d   ƒ n	1 s¤w   Y  ttg|j¢R ƒ |jd||jddjdksÃJ ‚W d   ƒ n	1 sÎw   Y  | d¡}ttg|j¢R ƒ | d||¡jdksïJ ‚W d   ƒ n	1 súw   Y  t tt	g|j¢R ¡ | d||¡ W d   ƒ n	1 sw   Y  | d¡}t tt
g|j¢R ¡ | d||¡ W d   ƒ n	1 sEw   Y  t tt
g|j¢R ¡ | d|¡ W d   ƒ n	1 sgw   Y  | d¡}| d¡}ttg|j¢R ƒ | d||¡jdksJ ‚W d   ƒ n	1 s˜w   Y  ttg|j¢R ƒ | d||¡jdks´J ‚W d   ƒ n	1 s¿w   Y  ttg|j¢R ƒ | d||¡jdksÛJ ‚W d   ƒ n	1 sæw   Y  | d¡}| d¡}ttg|j¢R ƒ | d ||¡jdksJ ‚W d   ƒ n	1 sw   Y  | d!¡}| d"¡}ttg|j¢R ƒ | d#||¡jd$ks=J ‚W d   ƒ n	1 sHw   Y  ttg|j¢R ƒ | d%||¡jdksdJ ‚W d   ƒ n	1 sow   Y  | d&¡}ttg|j¢R ƒ |jd'||jd(d)jd*ks“J ‚W d   ƒ n	1 sžw   Y  d+|jv rµd,|jv rµ|jd-ksßttg|j¢R ƒ |jd.||jd(d/jd0ksÏJ ‚W d   ƒ n	1 sÚw   Y  | d1¡}ttg|j¢R ƒ |jd2||d3d(d4jd5ksþJ ‚W d   ƒ n	1 s	w   Y  | d6¡}| d7¡}| d8¡}ttg|j¢R ƒ | d9||¡jd!ks4J ‚W d   ƒ n	1 s?w   Y  | d!¡}| d$¡}ttg|j¢R ƒ | d9||¡jd!kseJ ‚W d   ƒ n	1 spw   Y  | d:¡}| d:¡}t tt	g|j¢R ¡ |jd;||d(d<d= W d   ƒ n	1 s w   Y  | d¡}| d¡}| d>¡}ttg|j¢R ƒ | d?|||¡jd@ksÌJ ‚W d   ƒ n	1 s×w   Y  ttg|j¢R ƒ | dA|||¡jd@ksôJ ‚W d   ƒ n	1 sÿw   Y  | dB¡}| d!¡}| d>¡}ttg|j¢R ƒ | dC|||¡jd@ks+J ‚W d   ƒ n	1 s6w   Y  ttg|j¢R ƒ | dD|||¡jd@ksSJ ‚W d   ƒ n	1 s^w   Y  t tt	g|j¢R ¡ | dE|||¡ W d   ƒ n	1 s‚w   Y  | dF¡}| dG¡}ttg|j¢R ƒ | dH||¡jd!ks¨J ‚W d   ƒ n	1 s³w   Y  | dI¡}| dG¡}t tt	g|j¢R ¡ | dJ||¡ W d   ƒ n	1 sàw   Y  | d¡}| d!¡}t tt	g|j¢R ¡ | dK||¡ W d   ƒ n	1 sw   Y  t tt	g|j¢R ¡ | dL|¡ W d   ƒ n	1 s/w   Y  t tt	g|j¢R ¡ | dM|¡ W d   ƒ n	1 sQw   Y  ttt
g|j¢R ƒ | dN|¡jdOksmJ ‚W d   ƒ d S 1 syw   Y  d S )PNr   r   za..., a... -> 1r   z[a...], [a...] -> 1za..., [a]... -> 1za b1, c b2 -> a cza b -> aza b, a c -> bza [b], a [b] -> 1z([a () b] ()), [a b] -> 1z[([a () b] ())], [[a] b] -> 1r   )r   r"   za b c, a d -> 1 b c d)r   r   r   r"   z[a] b c, [a] d -> 1 b c dr"   r$   ©r   r   r   za a [b], c c [b] -> a cz[a a] b, [a a] c -> b cza b c -> a b cza b c, a -> a b cr	   )r   r/   za b, b c -> a c©r   r/   za [b], [b] c -> a cza [b...], [b...] c -> a c©r   r   r/   za b, a b c -> a cr   r.   za, a ->r   za, c -> a c)r    é€   rY   é   z!b s... [c1], [c1] c2 -> b s... c2é    )Úc2)r    rY   rY   r[   ÚtorchÚcompile©r   r   r   zb [s...] c, [s...] s2 -> b s2 cr)   )r    r[   rZ   )r   r   rZ   r[   z.b (s [s2])... [c1], [s2... c1] c2 -> b s... c2r   )r*   r\   )r    é@   r`   r[   )r    rZ   rZ   rZ   )r9   r   )r9   z... b, ... -> b)r   r    r   z#b t (h ck), b t (h cv) -> b h ck cvT)ÚhÚgraph)r   r"   z[a] b, [a c], d [c] -> b d)r   r   za b, a c, d c -> b d)r   r   r"   z[a] b [c], [a], d [c] -> b dza b c, a, d c -> b dz[a] b c, a, d [c] -> b d©r   r   r   ©r   za [b] 1, [b] -> a©r   r   z[a b], [b] ->z[a a], [a] ->z[a b] ->z
a b -> b aza b, c -> b a cr   )rB   rC   r   rD   rE   Údotr1   rG   rH   rI   rO   rM   Úversion)	rR   rB   rS   r   r   ÚwÚkÚvrT   r   r   r3   Útest_shape_dot  s0  

ÿÿÿÿÿÿÿÿÿ

ÿÿ"ÿ
ÿÿ
ÿÿ

ÿÿÿ

ÿ

ÿÿ
"ÿ$"ÿ
"ÿ


ÿ

ÿ

ÿ


ÿÿ


ÿÿÿ

ÿ

ÿ

ÿÿÿ$ÿrk   c              	   C   sV  | j | }}| d¡}ttg|j¢R ƒ | d|¡jdks J ‚W d   ƒ n1 s*w   Y  ttg|j¢R ƒ | d|¡jdksDJ ‚W d   ƒ n1 sNw   Y  ttg|j¢R ƒ | d|¡jdkshJ ‚W d   ƒ n1 srw   Y  ttg|j¢R ƒ | d|¡jdksŒJ ‚W d   ƒ n1 s–w   Y  t tt	g|j¢R ¡ | d|¡ W d   ƒ n1 s·w   Y  | d¡}ttg|j¢R ƒ | 
d|¡jdksÖJ ‚W d   ƒ n1 sàw   Y  ttg|j¢R ƒ | d|¡jdksúJ ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ | d|¡jdks J ‚W d   ƒ n	1 s+w   Y  ttg|j¢R ƒ | d|¡jdksFJ ‚W d   ƒ n	1 sQw   Y  ttg|j¢R ƒ | d|¡jdkslJ ‚W d   ƒ n	1 sww   Y  d	|jv rŽd
|jv rŽ|jdks´ttg|j¢R ƒ | d|¡jdks¤J ‚W d   ƒ n	1 s¯w   Y  ttg|j¢R ƒ | d|¡jdksÊJ ‚W d   ƒ n	1 sÕw   Y  ttg|j¢R ƒ | d|¡jdksðJ ‚W d   ƒ n	1 sûw   Y  ttg|j¢R ƒ | d|¡jdksJ ‚W d   ƒ n	1 s!w   Y  |jddd}ttg|j¢R ƒ | d|¡jdksCJ ‚W d   ƒ n	1 sNw   Y  ttg|j¢R ƒ | d|¡jdksiJ ‚W d   ƒ n	1 stw   Y  | d¡}t tt	g|j¢R ¡ | 
d|¡ W d   ƒ n	1 s›w   Y  | d¡}ttg|j¢R ƒ | 
d|¡jdks»J ‚W d   ƒ n	1 sÆw   Y  ttg|j¢R ƒ | 
d|¡jdksáJ ‚W d   ƒ n	1 sìw   Y  | d¡}ttg|j¢R ƒ |jd|ddjdksJ ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ | d|¡jdks4J ‚W d   ƒ n	1 s?w   Y  ttg|j¢R ƒ | d|¡jdksZJ ‚W d   ƒ n	1 sew   Y  ttg|j¢R ƒ | d|¡jdks€J ‚W d   ƒ n	1 s‹w   Y  ttg|j¢R ƒ |jd|ddjdks¨J ‚W d   ƒ n	1 s³w   Y  | d ¡}ttg|j¢R ƒ | d!|¡jd"ksÓJ ‚W d   ƒ n	1 sÞw   Y  ttg|j¢R ƒ | d#|¡jd"ksùJ ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ | d$|¡jd%ksJ ‚W d   ƒ n	1 s*w   Y  | d&¡}ttg|j¢R ƒ | d'|¡jd(ksJJ ‚W d   ƒ n	1 sUw   Y  ttg|j¢R ƒ | d)|¡jd*kspJ ‚W d   ƒ n	1 s{w   Y  ttg|j¢R ƒ | d+t d,d-g¡¡jd.ks›J ‚W d   ƒ n	1 s¦w   Y  ttg|j¢R ƒ | d/t d,gd-gg¡¡jd0ksÈJ ‚W d   ƒ n	1 sÓw   Y  ttg|j¢R ƒ | d+t d,gd1 ¡¡jd.ksôJ ‚W d   ƒ n	1 sÿw   Y  | d2¡}ttg|j¢R ƒ | 
d3|¡jd4ksJ ‚W d   ƒ n	1 s*w   Y  ttg|j¢R ƒ | 
d5|¡jd4ksEJ ‚W d   ƒ n	1 sPw   Y  ttg|j¢R ƒ |j
d6|d7d8jd9ksmJ ‚W d   ƒ n	1 sxw   Y  ttg|j¢R ƒ | 
d:|¡jd*ks“J ‚W d   ƒ n	1 sžw   Y  | d;¡}ttg|j¢R ƒ | 
d<|¡jdks¾J ‚W d   ƒ n	1 sÉw   Y  | d=¡}t tt	g|j¢R ¡ | 
d>|¡ W d   ƒ n	1 sðw   Y  ttg|j¢R ƒ | 
d|¡jd?ksJ ‚W d   ƒ n	1 sw   Y  | d=¡}ttg|j¢R ƒ | 
d@|¡jd?ks6J ‚W d   ƒ n	1 sAw   Y  ttg|j¢R ƒ | 
dA|¡jd?ks\J ‚W d   ƒ n	1 sgw   Y  ttg|j¢R ƒ | 
dB|¡jd?ks‚J ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ | 
dC|¡jd?ks¨J ‚W d   ƒ n	1 s³w   Y  t ¡ ä t dDt¡ | dE¡}ttg|j¢R ƒ |j
dF|dGdHjdIksàJ ‚W d   ƒ n	1 sëw   Y  ttg|j¢R ƒ |j
dF|dGdHjdIksJ ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ |j
dJ|dGdHjd0ks0J ‚W d   ƒ n	1 s;w   Y  ttg|j¢R ƒ |j
dK|dGdHjd0ksXJ ‚W d   ƒ n	1 scw   Y  ttg|j¢R ƒ |j
dL|dGdHjdMks€J ‚W d   ƒ n1 s‹w   Y  W d   ƒ d S W d   ƒ d S 1 s¤w   Y  d S )NNr   z
a b -> 1 a)r   r   z[a] br   z[a] b -> 1 bz[([a] ())] b -> 1 bz
a [b] -> 1r]   r^   r_   r:   r;   r   za [b] c -> a b)r   r   r/   za a [b] -> az[a a] b -> br.   )r   r   r   z(a [b]) c 1r   r   )r   r   r   z([a b]) c 1)r   r   r   z[(a b)] c 1)r   r   z[(a...)] c 1z(b... [a...]) c 1)r   r   )r   r   r   r   z
1 [a...] b)r   r   z
1 [a]... bz1 ([a])... b)r   r   r   r   )rZ   r   r   r/   r`   z(b rg) pv [s...] c)rZ   r   r`   za [...])rZ   z[a]ç        ç      ð?r   z[a] 1r   r   )rZ   é   z[b] a [])rn   z[b] a [...]zb [p] -> b p2r%   )Úp2)rZ   r%   z16 [a]rc   za [b] 1 -> arV   z
a a b -> br,   z[...] bz[s...] bz[s]... bz[(...)]... bÚignore)r   r   r    r   z[a] b c [d]T)Úkeepdims)r   r   r    r   z[...]z[a...]z[a]...)r   r   r   r   )rB   rC   r   rD   rE   Úmeanr1   rG   rH   rI   ÚsumÚvarÚstdÚprodrM   rg   Úcount_nonzeroÚminÚmaxÚ	logsumexpÚallÚanyrK   rL   ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarning©rR   rB   rS   r   r   r   r3   Útest_shape_reduce™  sH  
ÿÿÿÿÿ
ÿÿÿÿÿ$ÿÿÿÿÿÿ
ÿ
ÿÿ
ÿÿÿÿÿ
ÿÿÿ
ÿÿ$ÿ(ÿ&ÿ
ÿÿÿÿ
ÿ
ÿÿ
ÿÿÿÿ

ÿÿÿÿ ÿõ$õr‚   c                    s.  | j | }‰ˆ d¡}ˆ d¡}ttgˆj¢R ƒ | d||¡jdks&J ‚W d   ƒ n1 s0w   Y  ttgˆj¢R ƒ | d||¡jdksKJ ‚W d   ƒ n1 sUw   Y  tdƒD ]'}ttgˆj¢R ƒ | d||¡jdksvJ ‚W d   ƒ n1 s€w   Y  q^t 	tt
gˆj¢R ¡ | d||¡ W d   ƒ n1 s£w   Y  ˆjd	d
d}ˆ d¡}ˆ d¡}ttgˆj¢R ƒ | d||¡jdksÏJ ‚W d   ƒ n1 sÙw   Y  ttgˆj¢R ƒ | d||¡jdksôJ ‚W d   ƒ n1 sþw   Y  ttgˆj¢R ƒ | d||¡jdksJ ‚W d   ƒ n	1 s%w   Y  ttgˆj¢R ƒ | d||¡jdksAJ ‚W d   ƒ n	1 sLw   Y  ttgˆj¢R ƒ | d||¡jdkshJ ‚W d   ƒ n	1 ssw   Y  ttgˆj¢R ƒ | d||¡jdksJ ‚W d   ƒ n	1 sšw   Y  ttgˆj¢R ƒ | d||¡jdks¶J ‚W d   ƒ n	1 sÁw   Y  ttgˆj¢R ƒ | d||¡jdksÝJ ‚W d   ƒ n	1 sèw   Y  ttgˆj¢R ƒ | d||¡jdksJ ‚W d   ƒ n	1 sw   Y  ttgˆj¢R ƒ | d||¡jdks+J ‚W d   ƒ n	1 s6w   Y  ttgˆj¢R ƒ | d||¡jdksRJ ‚W d   ƒ n	1 s]w   Y  ttgˆj¢R ƒ | d||¡jdksyJ ‚W d   ƒ n	1 s„w   Y  ttgˆj¢R ƒ | d||¡jdks J ‚W d   ƒ n	1 s«w   Y  dˆjv r¼dˆjv sãttgˆj¢R ƒ | d||¡jdksÓJ ‚W d   ƒ n	1 sÞw   Y  ttgˆj¢R ƒ | d||¡jdksúJ ‚W d   ƒ n	1 sw   Y  ttgˆj¢R ƒ | d|||¡jdks"J ‚W d   ƒ n	1 s-w   Y  ˆjdd
d}ˆjdd
d}ttgˆj¢R ƒ | d||¡jdksWJ ‚W d   ƒ n	1 sbw   Y  ttgˆj¢R ƒ | d||¡jdks~J ‚W d   ƒ n	1 s‰w   Y  ˆ d	¡}ˆ d¡}ˆ d¡}ttgˆj¢R ƒ | d|||¡jdksµJ ‚W d   ƒ n	1 sÀw   Y  ttgˆj¢R ƒ | d|||¡jdksÝJ ‚W d   ƒ n	1 sèw   Y  ttgˆj¢R ƒ | d|||¡jdksJ ‚W d   ƒ n	1 sw   Y  ttgˆj¢R ƒ | d|||¡jdks-J ‚W d   ƒ n	1 s8w   Y  ttgˆj¢R ƒ | d|||¡jdksUJ ‚W d   ƒ n	1 s`w   Y  ˆ d¡}ˆ d¡}ttgˆj¢R ƒ | d||¡jdks†J ‚W d   ƒ n	1 s‘w   Y  ttgˆj¢R ƒ | d||¡jdks­J ‚W d   ƒ n	1 s¸w   Y  ttgˆj¢R ƒ | d||¡jdksÔJ ‚W d   ƒ n	1 sßw   Y  ttgˆj¢R ƒ | d||¡jdksûJ ‚W d   ƒ n	1 sw   Y  ttgˆj¢R ƒ | d|d¡jdks"J ‚W d   ƒ n	1 s-w   Y  ttgˆj¢R ƒ | dd|¡jdksIJ ‚W d   ƒ n	1 sTw   Y  dˆjvrÙdˆjvrÙttgˆj¢R ƒ | d|t dg¡ d¡¡jdksƒJ ‚W d   ƒ n	1 sŽw   Y  dˆjv r«dˆjv r«dˆjv r«dˆjv sÙttgˆj¢R ƒ | dt dg¡ d¡|¡jdksÉJ ‚W d   ƒ n	1 sÔw   Y  t 	tt
gˆj¢R ¡ | d ||¡ W d   ƒ n	1 s÷w   Y  ttgˆj¢R ƒ | d|ˆj¡jdksJ ‚W d   ƒ n	1 sw   Y  ttgˆj¢R ƒ | d!||¡jdks;J ‚W d   ƒ n	1 sFw   Y  ttgˆj¢R ƒ | d"|d¡jd#ksbJ ‚W d   ƒ n	1 smw   Y  ttgˆj¢R ƒ | d$||¡jdks‰J ‚W d   ƒ n	1 s”w   Y  dˆjv r«dˆjv r«ˆj d%ksá‡fd&d'„}ttgˆj¢R ƒ | d(|t!j"|d)d*d+d,œd-¡jdksÑJ ‚W d   ƒ n	1 sÜw   Y  ˆ d.¡}ˆ d¡}t 	tt
gˆj¢R ¡ | d/||¡ W d   ƒ n	1 s	w   Y  ˆ d0¡}ˆ d1¡}ttgˆj¢R ƒ | d2||¡jd0ks/J ‚W d   ƒ n	1 s:w   Y  ˆ d3¡}ˆ d4¡}ttgˆj¢R ƒ | d5||¡jd4ks`J ‚W d   ƒ n	1 skw   Y  ˆ d3¡}ˆ d6¡}t 	tt
gˆj¢R ¡ | d7||¡ W d   ƒ n	1 s˜w   Y  g d8¢}d9d:„ ‰ |D ]m\}	}
‡fd;d<„|
D ƒ‰‡ fd=d<„|
D ƒ‰tt#|
ƒƒD ]O‰‡‡‡fd>d<„tt#|
ƒƒD ƒ}d? $‡fd@d<„tt#|
ƒƒD ƒ¡dA }ttgˆj¢R ƒ t%||	ƒ|g|¢R Ž jdBksJ ‚W d   ƒ n	1 sw   Y  qÃq§d S )CNrc   )é   za b 1, l -> b l a 1)r   rƒ   r   r   za b 1, l -> a b l)r   r   rƒ   r   za b 1, l -> b l a 1, b l a 1re   r:   r;   ÚvmapÚmlxza b, a b 1, l -> b l a 1r   r   za, a bza b, aza b, bza b, a bza b, rm   z, a br   r6   za b, 1r7   r]   r^   Úgpuz1, a bza a, a -> a aza, az	b, -> b 3)r   r   za a, a -> ar_   c                    s
   ˆ   | ¡S ©N©rC   )r1   r   r   ©rS   r   r3   Úparam†  s   
z%test_shape_elementwise.<locals>.paramz... c, cr   TF)r   r   r   r>   za b, c)r   rY   éÄ   r`   )r   r    rZ   z#b h w (g c), b (g) c -> b h w (g c)r	   rX   za b, a b c -> a b c)r/   r   zba c, i c -> i ba))Úadd©r7   r7   )Úsubtractr   )Úmultiplyr   )Útrue_divider   )Úfloor_divider   )Údivider   )Úlogical_and©r:   r:   )Ú
logical_orr”   )Úwhere)r:   r7   r7   )Úlessr   )Ú
less_equalr   )Úgreaterr   )Úgreater_equalr   )Úequalr   )Ú	not_equalr   )Úmaximumr   )Úminimumr   )Ú	logaddexpr   c                 S   s&   | dkrdS | dkrdS t d| › ƒ‚)Nr7   rm   r:   TzUnsupported dtype: )rO   r;   r   r   r3   Úcreate_scalarµ  s
   z-test_shape_elementwise.<locals>.create_scalarc                    s   g | ]
}ˆ j d |dd‘qS )r=   r   ©r<   Úvaluerˆ   ©r2   r<   r‰   r   r3   r4   ¾  ó    z*test_shape_elementwise.<locals>.<listcomp>c                    s   g | ]}ˆ |ƒ‘qS r   r   r£   )r    r   r3   r4   ¿  s    c                    s$   g | ]}|ˆkrˆ ˆ nˆ| ‘qS r   r   ©r2   Úi)Úscalar_argsÚscalar_indexÚtensor_argsr   r3   r4   Â  s   $ ú, c                    s   g | ]
}|ˆ kr
d nd‘qS )Ú r   r   r¥   )r¨   r   r3   r4   Ã  r¤   z -> ar=   )&rB   rC   r   rD   rE   rŒ   r1   ÚrangerG   rH   rI   rŽ   r   r   r‘   r’   r   rž   r—   r˜   r™   rš   r›   rM   rœ   rŸ   r–   r“   r•   rK   rL   rP   rg   Ú	functoolsÚpartialÚlenÚjoinÚgetattr)rR   rB   r   r   Ú_ÚmaskrT   rŠ   ÚopsÚopÚdtypesÚargsÚexprr   )r    r§   r¨   rS   r©   r3   Útest_shape_elementwise  sb  

ÿÿÿ€ÿ

ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ


ÿÿÿÿÿ

ÿÿÿÿÿÿ*ÿ0*ÿÿÿÿÿÿ$.ÿ

ÿ

ÿ

ÿ

ÿ$$ÿ€ýür¹   c              	   C   sþ  | j | }}d|jv rtjdd | d¡}ttg|j¢R ƒ | d|¡j	dks+J ‚W d   ƒ n1 s5w   Y  ttg|j¢R ƒ | d|¡j	dksOJ ‚W d   ƒ n1 sYw   Y  ttg|j¢R ƒ | d|¡j	d	kssJ ‚W d   ƒ n1 s}w   Y  ttg|j¢R ƒ | d
|¡j	d	ks—J ‚W d   ƒ n1 s¡w   Y  ttg|j¢R ƒ | d|¡j	dks»J ‚W d   ƒ n1 sÅw   Y  ttg|j¢R ƒ | d|¡j	dksßJ ‚W d   ƒ n1 séw   Y  t 
ttg|j¢R ¡ | d|¡ W d   ƒ n	1 sw   Y  t 
ttg|j¢R ¡ | d|¡ W d   ƒ n	1 s-w   Y  t 
ttg|j¢R ¡ | d|¡ W d   ƒ n	1 sOw   Y  t 
ttg|j¢R ¡ |jd|dd W d   ƒ n	1 ssw   Y  ttg|j¢R ƒ | d|¡j	dksŽJ ‚W d   ƒ n	1 s™w   Y  ttg|j¢R ƒ | d|¡j	dks´J ‚W d   ƒ n	1 s¿w   Y  ttg|j¢R ƒ | d|¡j	dksÚJ ‚W d   ƒ n	1 såw   Y  ttg|j¢R ƒ | d|¡j	dks J ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ | d|¡j	dks&J ‚W d   ƒ n	1 s1w   Y  tttg|j¢R ƒ |jd|jdddddj	dksSJ ‚W d   ƒ n	1 s^w   Y  | d¡}ttg|j¢R ƒ |jd |dd!j	dks€J ‚W d   ƒ n	1 s‹w   Y  t 
ttg|j¢R ¡ |jd"|dd! W d   ƒ n	1 s¯w   Y  ttg|j¢R ƒ |jd#|dd!j	d	ksÌJ ‚W d   ƒ n	1 s×w   Y  | d$¡}ttg|j¢R ƒ |jd%|dd&j	dksùJ ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ |jd'|dd&j	dks!J ‚W d   ƒ n	1 s,w   Y  ttg|j¢R ƒ |jd(|dd&j	dksIJ ‚W d   ƒ n	1 sTw   Y  | d¡}ttg|j¢R ƒ |jd)|dd&j	d*ksvJ ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ |jd+|dd&j	d*ksžJ ‚W d   ƒ n	1 s©w   Y  ttg|j¢R ƒ |jd,|dd&j	d*ksÆJ ‚W d   ƒ n	1 sÑw   Y  | d¡}ttg|j¢R ƒ |jd-|dd&j	dksóJ ‚W d   ƒ n	1 sþw   Y  | d.¡}t 
ttg|j¢R ¡ |jd/|dd& W d   ƒ n	1 s'w   Y  ttg|j¢R ƒ |jd0|dd&j	dksDJ ‚W d   ƒ n	1 sOw   Y  ttg|j¢R ƒ |jd1|dd&j	d2kslJ ‚W d   ƒ d S 1 sxw   Y  d S )3Nr-   z6Problems with mlx.vmap, causes "Aborted (core dumped)")Úreason©r    rZ   rZ   r   ú	b [h w] c)r    r   r   zb [h w] c -> b [2] czb [h w] c -> [2] b c)r   r    r   zb [h w] c -> [i] b czb [h w] c -> ([2] b) c)é   r   z[b] h [w] c -> [2] h c)r   rZ   r   zb [h w] c -> b [3] czb [h w] c -> b [1] cúb [h w] c -> b czb [h w] c -> b [i] cr   )r¦   z	b [h] w c)r    r   rZ   r   zb [h] w c -> b [1] w czb [h] w c -> b w c)r    rZ   r   zb [h->1] w czb [h->] w cr    rZ   )r   ra   rh   r   )r`   rZ   r   z(b [h]) w cr   z(b [h]) [w] cz(b [h]) [w] c -> [2] b c©r    é   r   zb ([h w]) c)ra   zb [(h w)] czb [(h h)] cz	b ([h]) c)r    r   r   z	b [(h)] czb [h] cz	b [h h] c)r    r    rZ   rZ   r   zb b [h h] czb b [h h] c -> b [2] czb b [h h] c -> c b [2])r   r    r   )rB   rM   rG   ÚxfailrC   r   rD   rE   Úargmaxr1   rH   rI   ÚargminrJ   r   r   r   r3   Útest_shape_argfindÈ  sÀ   

ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&ÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿ
ÿÿ$ÿrÄ   c                    sÖ  | j | }‰ ˆ  d¡‰ˆ jddd‰ˆ jddd‰ˆ  d¡}ttgˆ j¢R ƒ | dˆˆ¡jdks4J ‚W d   ƒ n1 s>w   Y  ttgˆ j¢R ƒ! | dˆˆd	d
d…f ˆd	dd…f ¡jdksfJ ‚W d   ƒ n1 spw   Y  ttgˆ j¢R ƒ | dˆˆd ˆd ¡jdksJ ‚W d   ƒ n1 sšw   Y  ttgˆ j¢R ƒ | dˆˆ¡jdksµJ ‚W d   ƒ n1 s¿w   Y  ttgˆ j¢R ƒ | dˆˆd ˆd ¡jdksßJ ‚W d   ƒ n1 séw   Y  ttgˆ j¢R ƒ | dˆˆd ˆd ¡jdks
J ‚W d   ƒ n	1 sw   Y  ttgˆ j¢R ƒ | dˆˆd ˆd ¡jdks6J ‚W d   ƒ n	1 sAw   Y  ttgˆ j¢R ƒ | dˆˆd ˆd ¡jdksbJ ‚W d   ƒ n	1 smw   Y  ttgˆ j¢R ƒ | dˆˆd ˆd ¡jdksŽJ ‚W d   ƒ n	1 s™w   Y  dˆ jv r°dˆ jv r°ˆ jdks
ttgˆ j¢R ƒ |jdˆ‡ fdd„ddjdksÍJ ‚W d   ƒ n	1 sØw   Y  ttgˆ j¢R ƒ |jdˆ‡ fdd„ddjdksúJ ‚W d   ƒ n	1 sw   Y  ttgˆ j¢R ƒ | d ˆˆ¡jdks!J ‚W d   ƒ n	1 s,w   Y  ttgˆ j¢R ƒ | d!ˆˆ¡jdksHJ ‚W d   ƒ n	1 sSw   Y  ttgˆ j¢R ƒ | d"ˆˆd
 ¡jdksqJ ‚W d   ƒ n	1 s|w   Y  |j	|j
|jfD ]û}ttgˆ j¢R ƒ |d#ˆˆ|ƒjdks£J ‚W d   ƒ n	1 s®w   Y  ttgˆ j¢R ƒ |d$ˆˆ|ƒjdksÊJ ‚W d   ƒ n	1 sÕw   Y  ttgˆ j¢R ƒ |d%ˆˆd ˆd |ƒjdksöJ ‚W d   ƒ n	1 sw   Y  ttgˆ j¢R ƒ |d&ˆˆd ˆd |ƒjdks"J ‚W d   ƒ n	1 s-w   Y  ttgˆ j¢R ƒ |d'ˆˆd ˆd |d
 ƒjdksPJ ‚W d   ƒ n	1 s[w   Y  ttgˆ j¢R ƒ |d(ˆˆd ˆd |d) ƒjdks~J ‚W d   ƒ n	1 s‰w   Y  ttgˆ j¢R ƒ |d*ˆˆd
 |d
 ƒjdks©J ‚W d   ƒ n	1 s´w   Y  ttgˆ j¢R ƒ |d#ˆˆ|ƒjdksÐJ ‚W d   ƒ n	1 sÛw   Y  ttgˆ j¢R ƒ |d+ˆˆ|d
 ƒjdksùJ ‚W d   ƒ n	1 sw   Y  ttgˆ j¢R ƒ |d,ˆˆd
 |ƒjdks"J ‚W d   ƒ n	1 s-w   Y  ttgˆ j¢R ƒ |d*ˆˆd
 |d
 ƒjdksMJ ‚W d   ƒ n	1 sXw   Y  t ttgˆ j¢R ¡ |d-ˆˆd
 |d
 ƒ W d   ƒ n	1 sw   Y  q‰ˆ  d¡‰ˆ jdd.d‰ttgˆ j¢R ƒ | dˆˆ¡jdks©J ‚W d   ƒ n	1 s´w   Y  ˆ  d/¡‰ˆ jddd‰ˆ  d¡}ttgˆ j¢R ƒ | d0ˆˆ¡jdksáJ ‚W d   ƒ n	1 sìw   Y  ˆ  d1¡‰ˆ jd2dd
d3‰ˆ  d4¡}ttgˆ j¢R ƒ | d5ˆˆ¡jdksJ ‚W d   ƒ n	1 s%w   Y  ttgˆ j¢R ƒ | d6ˆˆd d …d
f ¡jdksGJ ‚W d   ƒ n	1 sRw   Y  |j	|j
|jfD ]]}ttgˆ j¢R ƒ |d7ˆˆ|ƒjd/ksxJ ‚W d   ƒ n	1 sƒw   Y  ttgˆ j¢R ƒ! |d8ˆˆd d …d
f |d d …d
f ƒjd/ks«J ‚W d   ƒ n	1 s¶w   Y  q_ˆ  d9¡‰ˆ jd2dd‰ˆ  d4¡}ttgˆ j¢R ƒ |jd:ˆˆd;d<jdksçJ ‚W d   ƒ n	1 sòw   Y  ttgˆ j¢R ƒ |jd=ˆˆd d …d
f d;d<jdksJ ‚W d   ƒ n	1 s!w   Y  |j	|j
|jfD ]]}ttgˆ j¢R ƒ |d>ˆˆ|ƒjd?ksGJ ‚W d   ƒ n	1 sRw   Y  ttgˆ j¢R ƒ! |d@ˆˆd d …d
f |d d …d
f ƒjd?kszJ ‚W d   ƒ n	1 s…w   Y  q.ˆ  d/¡‰t ttgˆ j¢R ¡ | dAˆ¡ W d   ƒ n	1 s®w   Y  t ttgˆ j¢R ¡ | dBˆ¡ W d   ƒ n	1 sÐw   Y  t ttgˆ j¢R ¡ | 	dCˆ¡ W d   ƒ n	1 sòw   Y  t ttgˆ j¢R ¡ | 	dBˆ¡ W d   ƒ n	1 sw   Y  ˆ  d/¡‰ˆ jdDdd‰ˆ  dE¡}ttgˆ j¢R ƒ | dFˆˆ¡jdEksAJ ‚W d   ƒ n	1 sLw   Y  ttgˆ j¢R ƒ | dGˆˆd
 ¡jdEksjJ ‚W d   ƒ n	1 suw   Y  |j	|j
|jfD ]|}ttgˆ j¢R ƒ |dHˆˆ|ƒjd/ks›J ‚W d   ƒ n	1 s¦w   Y  ttgˆ j¢R ƒ |dIˆˆ|ƒjd/ksÂJ ‚W d   ƒ n	1 sÍw   Y  ttgˆ j¢R ƒ |dJˆˆd
 |d
 ƒjd/ksíJ ‚W d   ƒ n	1 søw   Y  q‚ˆ  dK¡‰ˆ jddd‰ˆ  d¡}t ttgˆ j¢R ¡ | dLˆˆ¡ W d   ƒ n	1 s.w   Y  ˆ  dM¡‰ˆ jdNdd‰ttgˆ j¢R ƒ | dOˆˆ¡jdNksVJ ‚W d   ƒ n	1 saw   Y  ttgˆ j¢R ƒ | dPˆˆ¡jdNks}J ‚W d   ƒ n	1 sˆw   Y  ttgˆ j¢R ƒ | dQˆˆ¡jdNks¤J ‚W d   ƒ n	1 s¯w   Y  t ttgˆ j¢R ¡ | dRˆˆ¡ W d   ƒ n	1 sÒw   Y  ˆ  dS¡‰ˆ jdTdd‰ˆ jdUdd‰ˆ  dV¡}ˆ  dW¡}ttgˆ j¢R ƒ | 	d#ˆˆ|¡jdSk	sJ ‚W d   ƒ n	1 	sw   Y  ttgˆ j¢R ƒ | 	dXˆˆ|¡jdSk	s4J ‚W d   ƒ n	1 	s?w   Y  ttgˆ j¢R ƒ | 	dYˆˆ|¡jdSk	s\J ‚W d   ƒ n	1 	sgw   Y  ˆ  dZ¡‰ˆ jd[dd‰ˆ  d[¡}ttgˆ j¢R ƒ | d\ˆˆ¡jd[k	s”J ‚W d   ƒ n	1 	sŸw   Y  ttgˆ j¢R ƒ | 	d]ˆˆ|¡jdZk	s¼J ‚W d   ƒ n	1 	sÇw   Y  d^d_d_d;dd`œ}‡ fdadb„}dˆ jv 	rìdˆ jv 	rìˆ jdcksçg dd¢}g de¢}g df¢}	dgdhg}
|D ]»‰|
D ]µ}d }tttgˆ j¢R ƒ |j|› diˆ jdjfi |¤Žj}W d   ƒ n	1 
s,w   Y  |d u 
r8
q|D ]7‰ttgˆ j¢R ƒ" |jˆ› diˆ› dk|› ˆ j|fi |¤Žj|k
s`J ‚W d   ƒ n	1 
skw   Y  
q:|	D ]A‰|	D ];‰ttgˆ j¢R ƒ& |jˆ› diˆ› diˆ› dk|› ˆ j||fi |¤Žj|k
s¢J ‚W d   ƒ n	1 
s­w   Y  
qx
qt
q	qþ|D ]+‰d }tttgˆ j¢R ƒ  |jˆ dldm¡ dndm¡› diˆ jdjfi |¤Žj}W d   ƒ n	1 
sïw   Y  |d u 
rû
q¼|
D ]ç}dodp„ |D ƒ}|D ]I‰t‡‡fdqdr„|D ƒƒrPttgˆ j¢R ƒ' |j	ˆ› diˆ› di|› dkˆ› ˆ j|ˆ jfi |¤Žj|ks@J ‚W d   ƒ n	1 sKw   Y  q|	D ]Ž‰|	D ]ˆ‰t‡‡‡fdsdr„|D ƒƒrßttgˆ j¢R ƒ+ |j	ˆ› diˆ› diˆ› di|› dkˆ› 	ˆ j||ˆ jfi |¤Žj|ks•J ‚W d   ƒ n	1 s w   Y  ttgˆ j¢R ƒ( |j	ˆ› diˆ› diˆ› di|› ˆ j||ˆ jfi |¤Žj|ksÏJ ‚W d   ƒ n	1 sÚw   Y  qXqT
qý
q¼d S d S )tN)r    rZ   é   r   )r    rY   r   Úint64r;   )rY   r    r   )r    rY   r   zb [h w] c, b p [2] -> b p czb [h w] c, b p [1, 1] -> b p c.r   r   r   zb [h w] c, b p [,] -> b p c).r   ).r   zb [h w] c, p b [2] -> b p czb [h w] c, b p, b p -> b p cz"b [h w] c, b (p [1]), b p -> b p czb [h w] c, b p, p b -> b p czb [h w] c, p, p b -> b p c)r   .r   z"b [h w] c, b (p [1]), p b -> b p cr]   r^   r_   c                    ó   ˆ j | dddS ©NrÆ   r   r¡   rˆ   r0   r‰   r   r3   Ú<lambda>3  ó    z"test_shape_index.<locals>.<lambda>rY   )Úpzb [h w] c, b p [l] -> b p cc                    rÇ   rÈ   rˆ   r0   r‰   r   r3   rÉ   5  rÊ   zb [16 w] c, b p [2] -> b p czb [16 17] c, b p [2] -> b p czb [h w] c, p [2] -> b p cz&b [h w] c, b p [2], b p c -> b [h w] czb [h w] c, b p [2], b p cz'b [h w] c, b p, b p, b p c -> b [h w] cz'b [h w] c, b p, p b, b p c -> b [h w] cz%b [h w] c, b p, p b, p c -> b [h w] cz#b [h w] c, b p, p b, c -> b [h w] c)r   r   z"b [h w] c, p [2], p c -> b [h w] cz$b [h w] c, b p [2], p c -> b [h w] cz$b [h w] c, p [2], b p c -> b [h w] cz"b [h w] c, p [2], p c -> b [w h] cÚint32r»   zb [h h] c, b p [2] -> b p c)rZ   r    r   rZ   )r   r    rY   r¡   )r   r    rY   z[w] b c [h], [2] b p -> b p cz[w] b c [h], [2] p -> b p cz([w] b c [h], [2] b p, c b p -> b [w h] cz$[w] b c [h], [2] p, c p -> b [w h] c)rZ   r    r(   z[w] b (c [h]), [2] b p -> b p cr   r5   z[w] b (c [h]), [2] p -> b p cz,[w] b (c [h]), [2] b p, c b p -> b ([w h]) cr¿   z([w] b (c [h]), [2] p, c p -> b ([w h]) cr¾   r¼   zb [h w] c -> b [h w] c)r    r   r    r   r   )r    r   r    r   r   z#b [h w] c, b p q r [2] -> b p q r cz!b [h w] c, p q r [2] -> b p q r cz.b [h w] c, b p q r [2], b p q r c -> b [h w] cz.b [h h] c, b p q r [2], b p q r c -> b [h h] cz*b [h w] c, p q r [2], p q r c -> b [h w] c)r    r   r   r   zb ([1 1]) c, b p [2] -> b p c)r    r   r!   ©r    r   zb t [d], b t -> b tz... [d], ... -> ...zb t [d], b (t [1]) -> b (t 1)zb t [d], b (t [1]) -> b (t [1]))r    rY   rY   r   )r    r   r   )r    r   )r    r   r   rA   z$b [h w] c, b p [2], b c -> b [h w] cz$b [h w] c, b [2], b p c -> b [h w] c)r    rY   rZ   )r    rY   z
b p [i,->]zb p [i,,->i]r    rZ   )r   ra   rh   r   rË   c                    s   ˆ j | ddS )NrÆ   r;   rˆ   r0   r‰   r   r3   Úmake_coords»  s   z%test_shape_index.<locals>.make_coords)r   r    r   )z([h] b) [w] cz	[h] c [w]z[h w])z	b (p [2])z[2] pz[2])zp brË   z[1]zb p czc (p b)rª   rl   z -> ú[r«   ú]c                 S   s   h | ]}|  ¡ r|’qS r   )Úisalpha©r2   r   r   r   r3   Ú	<setcomp>Ù  s    z#test_shape_index.<locals>.<setcomp>c                 3   s    | ]	}|ˆ ˆ v V  qd S r‡   r   rÒ   r   r   r3   Ú	<genexpr>Û  s   € z#test_shape_index.<locals>.<genexpr>c                 3   s     | ]}|ˆ ˆ ˆ v V  qd S r‡   r   rÒ   )r   Úy1Úy2r   r3   rÔ   à  s   € )rB   rC   r   rD   rE   Úget_atr1   rM   rg   Úset_atÚadd_atÚsubtract_atrG   rH   rI   rJ   rŒ   Úreplacer{   )rR   rB   rT   rµ   Úz2ÚconstsrÎ   ÚxsÚysÚys2Úzsr1   Úz_axesr   )rS   r   r   rÕ   rÖ   r3   Útest_shape_index  s  

ÿ4ÿ$ÿÿ$ÿ&ÿ&ÿ&ÿ&ÿ$(ÿ(ÿÿÿ ÿÿÿ&ÿ&ÿ*ÿ*ÿ$ÿÿ ÿ ÿ$ÿÿ€
ÿ

ÿ

ÿ(ÿÿ4ÿ€

 ÿ,ÿÿ4ÿ€
ÿÿÿÿ

ÿ ÿÿÿ$ÿ€

ÿ
ÿÿÿÿ


ÿÿÿ

ÿÿ$"ÿ
6ÿ€>ÿ€ÿÿ÷
2ÿ
@ÿ€HÿBÿ€üÿúærã   c                 C   sò	  | j | }}| d¡}ttg|j¢R ƒ | d|¡jdks J ‚W d   ƒ n1 s*w   Y  ttg|j¢R ƒ | d|¡jdksDJ ‚W d   ƒ n1 sNw   Y  ttg|j¢R ƒ | d|¡jdkshJ ‚W d   ƒ n1 srw   Y  ttg|j¢R ƒ | d|¡jdksŒJ ‚W d   ƒ n1 s–w   Y  ttg|j¢R ƒ | d|¡jdks°J ‚W d   ƒ n1 sºw   Y  ttg|j¢R ƒ | d|¡jdksÔJ ‚W d   ƒ n1 sÞw   Y  ttg|j¢R ƒ |j	d|ddjdksúJ ‚W d   ƒ n	1 sw   Y  ttg|j¢R ƒ |j	d|ddjdks"J ‚W d   ƒ n	1 s-w   Y  ttg|j¢R ƒ | 
d|¡jdksHJ ‚W d   ƒ n	1 sSw   Y  ttg|j¢R ƒ | 
d|¡jdksnJ ‚W d   ƒ n	1 syw   Y  ttg|j¢R ƒ |j
d|dd	jd
ks–J ‚W d   ƒ n	1 s¡w   Y  ttg|j¢R ƒ |j
d|dd	jdks¾J ‚W d   ƒ n	1 sÉw   Y  ttg|j¢R ƒ |jd|ddjdksæJ ‚W d   ƒ n	1 sñw   Y  t ttg|j¢R ¡ |j	d|dd W d   ƒ n	1 sw   Y  ttg|j¢R ƒ |jd|ddjdks2J ‚W d   ƒ n	1 s=w   Y  ttg|j¢R ƒ |j	d|dddjdks[J ‚W d   ƒ n	1 sfw   Y  | d¡}ttg|j¢R ƒ | d|¡jdks†J ‚W d   ƒ n	1 s‘w   Y  ttg|j¢R ƒ | d|¡jdks¬J ‚W d   ƒ n	1 s·w   Y  ttg|j¢R ƒ |j	d|ddjdksÔJ ‚W d   ƒ n	1 sßw   Y  ttg|j¢R ƒ |j	d|ddjdksüJ ‚W d   ƒ n	1 sw   Y  d|jv rd|jv r|jdksjttg|j¢R ƒ | 
d|¡jdks4J ‚W d   ƒ n	1 s?w   Y  ttg|j¢R ƒ | 
d|¡jdksZJ ‚W d   ƒ n	1 sew   Y  | d¡}d|jv rd|jv r|jdks§ttg|j¢R ƒ | 
d|¡jdks—J ‚W d   ƒ n	1 s¢w   Y  ttg|j¢R ƒ | d|¡jdks½J ‚W d   ƒ n	1 sÈw   Y  t ttg|j¢R ¡ | d|¡ W d   ƒ n	1 sêw   Y  t ttg|j¢R ¡ | d|¡ W d   ƒ n	1 sw   Y  ttg|j¢R ƒ | d|¡jdks'J ‚W d   ƒ n	1 s2w   Y  ttg|j¢R ƒ |j	d|ddjdksOJ ‚W d   ƒ n	1 sZw   Y  ttg|j¢R ƒ |j	d|ddjdkswJ ‚W d   ƒ n	1 s‚w   Y  t ttg|j¢R ¡ |j	d|dd W d   ƒ n	1 s¦w   Y  t ttg|j¢R ¡ |j	d|dd W d   ƒ n	1 sÊw   Y  | d ¡}t ttg|j¢R ¡ | 
d!|¡ W d   ƒ d S 1 sòw   Y  d S )"Nr   za [b] -> a [b]za [b]r   )Úshiftrd   za [b] -> (a [b]) cr   r5   )r   r   za [b] -> a ([b] c)rW   z	(a [b]) cr   r   z	a [shift]z	a ([b c]))r   r   )rä   r   )r   r   r   za [b c] -> a [b c]za [b b] -> a [b b]r]   r^   )r   r½   r   )r   r    r   za [b c]r   r   )r   r   r   r   r8   z[a b] -> [b a])rB   rC   r   rD   rE   Úflipr1   ÚsortÚargsortÚrollÚsoftmaxÚlog_softmaxrG   rH   rI   rM   rg   rO   r   r   r   r3   Útest_shape_preserve_shapeç  sÎ   
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ
ÿÿÿÿ$ÿÿ
$ÿÿÿÿÿÿÿÿÿ
$ÿrë   c                  C   sÆ  dd l } |  d¡}t d|¡sJ ‚t d|¡rJ ‚t t¡ t d|¡ W d   ƒ n1 s/w   Y  t d|¡ |  d¡}t d|¡sGJ ‚|  d¡}t d|¡sTJ ‚|  d	¡}t d
|¡saJ ‚tjd
|ddskJ ‚tjd
|ddruJ ‚tjd
|ddddddœks…J ‚t t¡ t d
|¡ W d   ƒ n1 s›w   Y  t d||¡}|d dkr¹|d dkr¹|d dks»J ‚t 	d|d ¡\}}|d	krÌ|dksÎJ ‚t 	d||¡\}}|d	krß|d	ksáJ ‚d S )Nr   )r   r   r    r
   za bza b c d)r!   r    z(a b) cza b...)r   r    z	(a + b) cr   r   r   r   r   r    r   za b, c br   r   r   r   za b, b arÍ   )
ÚnumpyrQ   rB   ÚmatchesrG   rH   rI   rF   Ú
solve_axesÚsolve_shapes)rK   r   ÚaxesÚshape0Úshape1r   r   r3   Útest_shape_solve8  s4   
ÿ


 ÿ(ró   )rG   Úconftestr­   rB   rì   rK   Ú
contextlibr   r   r}   ÚerrorsrD   rI   rJ   rU   rk   r‚   r¹   rÄ   rã   rë   ró   r   r   r   r3   Ú<module>   s@    
  
 
 
 -
N
 P
P