U
    •Ê¹jô« ã                  @  sbD  d Z ddlmZ 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	m
Z
mZmZmZmZ ddlZddlm  mZ ddlZddlZddlmZ ddlmZmZmZmZmZ ddlmZ ddlmZmZm Z  dd	l!m"Z" d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd€d�d‚dƒd„d…d†d‡dˆd‰dŠd‹dŒd�dŽd�d�d‘d’d“d”d•d–d—d˜d™dšd›dœd�dždŸd d¡d¢d£d¤d¥d¦d§d¨d©dªd«d¬d­d®d¯d°d±d²d³d´dµd¶d·d¸d¹dºd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇdÈdÉdÊdËdÌdÍdÎdÏdÐdÑdÒdÓdÔdÕdÖd×dØdÙdÚdÛdÜdÝdÞdßdàdádâdãdädådædçdèdédêdëdìdídîdïdðdñdòdódôdõdöd÷dødùdúdûdüdýdþdÿ�d �d�d�d�d�d�d�d�d�d	�d
�d�d�gZ#ej$e j%�d�d�Z&�d�d„ Z'�d�dœ�d�d„Z(ej)�d�d„ ƒZ*e&�dƒej)�d�dœ�d�d„ƒƒZ+e&�dƒej)�d�dœ�d�d„ƒƒZ,e&�dƒe -�d¡ej)�d�dœ�d dÑ„ƒƒƒZ.e&�d!ƒe -�d¡ej)�d�dœ�d"dÐ„ƒƒƒZ/e&�d#ƒej)�dF�d�dœ�d$d„ƒƒZ0e&�d%ƒej)�dG�d�dœ�d&dí„ƒƒZ1e&�d'ƒej)�dH�d�dœ�d(dÕ„ƒƒZ2e&�d)ƒej)�d�dœ�d*d“„ƒƒZ3e&�d+ƒej)�d�dœ�d,d<„ƒƒZ4e&�d-ƒe 5�d.�d.�d.�d/¡ej)�dI�d�dœ�d1d„ƒƒƒZ6e 5�d.�d.�d2¡ej)�d�dœ�d3�d4„ƒƒZ7ej)�d�dœ�d5�d6„ƒZ8ej)�d�dœ�d7�d8„ƒZ9e&�d9ƒej)�d�dœ�d:dL„ƒƒZ:e&�d;ƒej)�d�dœ�d<dN„ƒƒZ;e&�d=ƒej)�d�dœ�d>dø„ƒƒZ<e&�d?ƒej)�d�dœ�d@dÈ„ƒƒZ=e&�dAƒe 5�d.�dB¡ej)�d�dœ�dCd$„ƒƒƒZ>e&�dDƒe 5�d.�dB¡ej)�d�dœ�dEdê„ƒƒƒZ?e&�dFƒej)�d�dœ�dG�dH„ƒƒZ@e&�dIƒej)�d�dœ�dJd�„ƒƒZAe&�dKƒej)�d�dœ�dLd „ƒƒZBe&�dMƒej)�d�dœ�dNd†„ƒƒZCe&�dOƒe 5�d.�d.�d.dîdî¡ej)�d�dœ�dPd„ƒƒƒZDe&�dQƒej)�d�dœ�dRd™„ƒƒZEe&�dSƒej)�d�dœ�dTdç„ƒƒZFe&�dUƒej)�d�dœ�dVdÔ„ƒƒZGe&�dWƒej-�d�dX�dY�dZ�ej)�d�dœ�d[dñ„ƒƒƒZHe&�d\ƒej)�d�dœ�d]dÞ„ƒƒZIe&�d^ƒej)�d�dœ�d_d6„ƒƒZJe&�d`ƒej)�d�dœ�dadð„ƒƒZKe&�dbƒej)�d�dœ�dcd„ƒƒZLe&�ddƒej)�d�dœ�ded„ƒƒZMe&�dfƒej)�d�dœ�dgd„ƒƒZNe&�dhƒej)�d�dœ�did„ƒƒZOe&�djƒej-�d�dkd�dZ�ej)�d�dœ�dldÛ„ƒƒƒZPe&�dmƒej)�d�dœ�dndÜ„ƒƒZQe -�d¡ej)�d�dœ�do�dp„ƒƒZRej)�d�dœ�dq�dr„ƒZSej)�dJ�ds�dt„ƒZTej)�dud§„ ƒZUe&�dve'�dw�dxƒg�dy�e&�dze'�d{�d|ƒg�dy�e&�d}e'�d~�d�d€�d��g�dy�ej)�dK�d�d�d‚�dƒœ�d„�d…„ƒƒƒƒZVe&�d†ƒe 5�d.�dB�d‡¡ej)�d�dœ�dˆd9„ƒƒƒZWe&�d‰ƒej)�d�dœ�dŠ�d‹„ƒƒZXe&�dŒƒej)�d�dœ�d��dŽ„ƒƒZYe&�d�ƒej)�d�dœ�d�dî„ƒƒZZe&�d‘ƒe -�d¡ej)�d�dœ�d’d¢„ƒƒƒZ[e&�d“ƒe -�d¡ej)�d�dœ�d”dH„ƒƒƒZ\e&�d•ƒe -�d¡ej)�d�dœ�d–d"„ƒƒƒZ]e&�d—ƒe -�d�d¡ej)�d�dœ�d˜dG„ƒƒƒZ^e&�d™ƒe -�d¡e 5�d.�d.�dB�dš�d.¡ej)�d�dœ�d›dA„ƒƒƒƒZ_e&�dœƒe -�d¡e 5�d.�d.�d.�dB�dB�dB�d.�dB�dB¡	ej)�d�dœ�d�d@„ƒƒƒƒZ`e&�džƒej-�d�d€�dŸ�ej)�dL�d�dœ�d dß„ƒƒƒZae&�d¡ƒe -�d¡e 5�d.�dB�dB¡ej)�d�dœ�d¢d÷„ƒƒƒƒZbe&�d£ƒe 5�d.�d¤¡ej)�d�dœ�d¥dª„ƒƒƒZce&�d¦ƒe -�d¡ej)�d�dœ�d§�d„ƒƒƒZde&�d¨ƒej)�d�dœ�d©�d„ƒƒZee&�dªƒe 5�d.�dB�dB�dB¡ej)�dM�d�dœ�d«dü„ƒƒƒZfe&�d¬ƒe 5�d.�d.�dB�dB¡ej)�dN�d�dœ�d­dæ„ƒƒƒZge&�d®ƒej)�dO�d�dœ�d¯dþ„ƒƒZhe&�d°ƒe 5�d.�d¤�dB�dB¡ej)�dP�d�dœ�d±då„ƒƒƒZie&�d²ƒej)�dQ�d�dœ�d³dý„ƒƒZje&�d´ƒe 5�d.�dB�dB¡ej)�dR�d�dœ�dµdú„ƒƒƒZke&�d¶ƒe -�d¡e 5�d.�dB�d.¡ej)�d�dœ�d·dÙ„ƒƒƒƒZle&�d¸ƒej)�d�dœ�d¹dè„ƒƒZme&�dºƒej)�dS�d�dœ�d»dé„ƒƒZne&�d¼ƒej)�d�dœ�d½d®„ƒƒZoe&�d¾ƒej)�d�dœ�d¿dÝ„ƒƒZpe&�dÀƒej)�d�dœ�dÁd�„ƒƒZqej)�d�dœ�dÂ�dÃ„ƒZre&�dÄƒe -�d¡ej)�d�dœ�dÅdÊ„ƒƒƒZse&�dÆƒe -�d¡ej)�d�dœ�dÇdË„ƒƒƒZte&�dÈƒej)�d�dœ�dÉd&„ƒƒZue&�dÊƒej)�d�dœ�dËdM„ƒƒZve&�dÌƒej)�d�dœ�dÍ�dÎ„ƒƒZwe&�dÏƒe 5�d.dîdî¡ej)�d�dœ�dÐdô„ƒƒƒZxe&�dÑƒe -�d¡e 5�d.�d/�dš¡ej)�dT�d�dÒ�dÓ�d‚�dÔœ�dÕdl„ƒƒƒƒZye&�dÖƒe 5�d.�dB¡ej)�d�dœ�d×dV„ƒƒƒZze&�dØƒe 5�d.�dB�d‡¡ej)�dU�d�dœ�dÙdá„ƒƒƒZ{e&�dÚƒej)�d�dœ�dÛdâ„ƒƒZ|e&�dÜƒej)�dÝdU„ ƒƒZ}e&�dÞe'�dßej~jj€j��dà�d€�dá�e(�dßƒg�dy�e&�dâe'�dãej~jj€j‚�dä�d€�dá�e(�dãƒg�dy�e&�dåe'�dæej~jj€jƒ�dç�d€�dá�e(�dæƒg�dy�ej)�dè�dé„ ƒƒƒƒZ„e&�dêƒe„d‡ej~jj€j��dà�d�dá�ƒZ…e&�dëƒe„dˆej~jj€j‚�dä�d�dá�ƒZ†e&�dìƒe„d‰ej~jj€jƒ�dç�d�dá�ƒZ‡e&�díe'�dîej~jj€j�ƒe(�dîƒg�dy�e&�dïe'�dðej~jj€j‚ƒe(�dðƒg�dy�e&�dñe'�dòej~jj€jƒƒe(�dòƒg�dy�ej)�dó�dô„ ƒƒƒƒZˆe&�dõe'�dö�d÷ej~jj€j�ƒe(�döƒg�dy�e&�døe'�dù�d÷ej~jj€j‚ƒe(�dùƒg�dy�e&�dúe'�dû�d÷ej~jj€jƒƒe(�dûƒg�dy�e&�düe'�dý�dþej~jj€j�e…ƒe(�dýƒg�dy�e&�dÿe'�d �dþej~jj€j‚e†ƒe(�d ƒg�dy�e&�de'�d�dþej~jj€jƒe‡ƒe(�dƒg�dy�ej)�dV�d�d„ƒƒƒƒƒƒƒZ‰ej)�d�dœ�d�d„ƒZŠej)�d	�d
„ ƒZ‹e&�dƒej)�d�dœ�dd+„ƒƒZŒej)�d�dÒ�dÒ�dœ�d�d„ƒZ�e&�dƒe&�dƒe&�dƒej)�d�dœ�ddÉ„ƒƒƒƒZŽe&�dƒe&�dƒe&�dƒej)�d�dœ�ddÏ„ƒƒƒƒZ�e&�dƒej)�d�dÒ�dÒ�dÒ�dÒ�dœ�dd¨„ƒƒZ�e&�de'�d�dç�dƒe(�dƒg�dy�e&�de'�d�d �dƒe(�dƒg�dy�e&�d!e'�d"�d#�dƒe(�d"ƒg�dy�e&�d$e'�d%�dçdsƒe(�d%ƒg�dy�e&�d&e'�d'�d dsƒe(�d'ƒg�dy�e&�d(e'�d)�d#dsƒe(�d)ƒg�dy�ej)�d�d�d�d*œ�d+�d,„ƒƒƒƒƒƒƒZ‘e&�d-ƒej)�d�dœ�d.�d/„ƒƒZ’e&�d0ƒej)�d�dœ�d1d„ƒƒZ“e&�d2ƒej)�d3d„ ƒƒZ”ej)�d4�d„ ƒZ•ej)�d5�d5�d6œ�d7�d	„ƒZ–e&�d8ƒej)�d�dœ�d9�d:„ƒƒZ—e&�d;ƒe -�d�d¡ej)�d�dœ�d<dD„ƒƒƒZ˜e&�d=ƒe -�d�d¡e–ej)�d�dœ�d>d˜„ƒƒƒƒZ™e&�d?ƒe -�d�d¡ej)�d�dœ�d@dX„ƒƒƒZšej)�d�dœ�dA�dB„ƒZ›e&�dCƒe -�d�d¡ej)�d�dœ�dDdƒ„ƒƒƒZœej)�d�dœ�dE�dF„ƒZ�e&�dGƒe -�d�d¡e–ej)�d�dœ�dHdS„ƒƒƒƒZže&�dIƒe -�d�d¡e–ej)�d�dœ�dJdk„ƒƒƒƒZŸe&�dKƒej)�d�dœ�dL�dM„ƒƒZ e&�dNƒej)�d�dœ�dO�dP„ƒƒZ¡e&�dQƒej)�d�dœ�dR�dS„ƒƒZ¢e&�dTƒe•�dUƒej)�d�dœ�dVd{„ƒƒƒZ£e&�dWƒe•�dUƒej)�d�dœ�dXd}„ƒƒƒZ¤e&�dYƒe•�dUƒej)�d�dœ�dZd~„ƒƒƒZ¥e&�d[ƒej)�d�dœ�d\d|„ƒƒZ¦e&�d]ƒej)�d�dœ�d^�d_„ƒƒZ§e&�d`ƒej)�d�dœ�da�db„ƒƒZ¨e&�dcƒe 5�d.�d.�d.�dB¡ej)�dW�d�dœ�dd�d„ƒƒƒZ©e&�deƒe 5�d.�dB�d‡¡ej)�dX�d�dœ�dfdv„ƒƒƒZªe&�dgƒe 5�d.�dB�dB¡ej)�d�dœ�dh�di„ƒƒƒZ«e&�djƒe 5�d.�d.�d.�d¤�d¤�d¤�dB�d¤�dB�dB�dB�dB�dB¡ej)�dY�d�dœ�dk�dl„ƒƒƒZ¬e&�dmƒe 5�d.�d.�d.�d¤�d2�d¤�dB¡ej)�d�dœ�dn�do„ƒƒƒZ­e&�dpƒe 5�d.�d.�d.�d¤�d¤�d¤�dB�d¤�dB¡	ej)�d�dœ�dqd5„ƒƒƒZ®e&�drƒe 5�d.�d.�d.�d¤�d.�d¤�dB¡ej)�d�dœ�dsd1„ƒƒƒZ¯e&�dtƒe 5�d.�d.�d.�d¤�d.�d¤�dB¡ej)�d�dœ�dud2„ƒƒƒZ°e&�dvƒe 5�d.�d.�d.�d¤�d.�d¤�dB¡ej)�d�dœ�dwd3„ƒƒƒZ±e&�dxƒe 5�d.�d.�d.�d¤�d¤�d¤�dB�d¤¡ej)�d�dœ�dyd.„ƒƒƒZ²e&�dzƒe 5�d.�d.�d.�d¤�d¤�d¤�dB�d¤¡ej)�d�dœ�d{d/„ƒƒƒZ³e&�d|ƒe 5�d.�d.�d.�d¤�d¤�d¤�dB�d¤¡ej)�d�dœ�d}d0„ƒƒƒZ´e&�d~ƒe 5�d.�d.�d.�d.�d.�dB�d/�d/�dB¡	ej)�d�dœ�dd„ƒƒƒZµe&�d€ƒe -�d�d€�d€�d€¡e 5�d.�d¤�d.�d.�d/¡ej)�d�dÒ�d��dÒ�dÒ�dÓ�d‚�dƒœ�d„d—„ƒƒƒƒZ¶e&�d…ƒe -�d�d€�d€�d€¡e 5�d.�d¤�d.�d.�d/�dš¡ej)�d�dÒ�d��dÒ�dÒ�dÓ�d‚�dÒ�d†œ�d‡dj„ƒƒƒƒZ·e&�dˆƒe 5�d.�d.�d.�d.�d.�dš�d/�d/�dš¡	ej)�d�d‚�d‰�d‰�d‚�dŠœ�d‹dd„ƒƒƒZ¸e&�dŒƒe 5�d.�dB�dB�dB¡ej)�d�dœ�d�dû„ƒƒƒZ¹e&�dŽƒe -�d¡e 5�d.dîdîdî¡ej)�d�dœ�d�d?„ƒƒƒƒZºe&�d�ƒe -�d¡ej)�d�dœ�d‘dÚ„ƒƒƒZ»e&�d’ƒe 5�d.�dB�d.¡ej)�d�dœ�d“db„ƒƒƒZ¼e&�d”ƒej)�d�dœ�d•da„ƒƒZ½e&�d–ƒej)�d�dœ�d—d`„ƒƒZ¾e&�d˜ƒej)�d�dœ�d™d_„ƒƒZ¿e&�dšƒe 5�d.�d.�dš�dš¡ej)�dZ�d�dœ�d›d#„ƒƒƒZÀe&�dœƒej)�d�dœ�d�dù„ƒƒZÁe&�džƒe 5�d.�d.�dB�d/¡ej)�d�dœ�dŸd7„ƒƒƒZÂe&�d ƒej)�d�dœ�d¡d©„ƒƒZÃe&�d¢ƒej)�d�dœ�d£d*„ƒƒZÄe&�d¤ƒej)�d�dœ�d¥d
„ƒƒZÅe&�d¦ƒej)�d�dœ�d§dw„ƒƒZÆe&�d¨ƒej)�d�dœ�d©dy„ƒƒZÇe&�dªƒej)�d�dœ�d«dx„ƒƒZÈe&�d¬ƒej)�d�dœ�d­d­„ƒƒZÉe&�d®ƒej)�d�dœ�d¯d)„ƒƒZÊe&�d°ƒe 5�d.�d.¡ej)�d�dœ�d±d(„ƒƒƒZËe&�d²ƒe 5�d.�d.¡ej)�d�dœ�d³d'„ƒƒƒZÌe&�d´ƒej)�d[�d�dœ�dµdŠ„ƒƒZÍe&�d¶ƒe -�d�d¡ej)�d�dœ�d·d‹„ƒƒƒZÎe&�d¸ƒej)�d\�d�dœ�d¹d�„ƒƒZÏe&�dºƒe -�d�d¡ej)�d�dœ�d»dŽ„ƒƒƒZÐe&�d¼ƒe -�d¡e 5�d.�d¤�dB¡ej)�d�dœ�d½d„ƒƒƒƒZÑe&�d¾ƒe -�d¡e 5�d.�d¤�dB¡ej)�d�dœ�d¿d„ƒƒƒƒZÒe&�dÀƒe -�d¡e 5�d.�d.�dB¡ej)�d�dœ�dÁd„ƒƒƒƒZÓe&�dÂƒej)�d�dœ�dÃdF„ƒƒZÔe&�dÄƒe&�dÅƒe 5�d.�d/�dB¡ej)�d�dœ�dÆd>„ƒƒƒƒZÕe&�dÇe'�dÇƒg�dy�e&�dÈe'�dÈƒg�dy�e&�dÉe'�dÉƒg�dy�e&�dÊe'�dÊƒg�dy�e&�dËe'�dËƒg�dy�e&�dÌe'�dÌƒg�dy�ej)�d�dœ�dÍ�dÎ„ƒƒƒƒƒƒƒZÖe&�dÏƒe 5�d.dî�d¤�dB�d.¡ej)�d]�d�dœ�dÐd „ƒƒƒZ×e&�dÑƒe 5�d.�d.�d.�dB¡ej)�d�dœ�dÒd-„ƒƒƒZØe&�dÓƒe 5�d.�dB�dB¡ej)�d�dœ�dÔ�dÕ„ƒƒƒZÙe&�dÖƒe 5�d.�dB�dB�dB¡ej)�d�dœ�d×�dØ„ƒƒƒZÚe&�dÙƒe Û�dÚ�dÛ�dÜ¡ej)�d�dœ�dÝ�dÞ„ƒƒƒZÜe&�dßƒe Û�dÚ�dÛ�dÜ¡ej)�d�dœ�dà�dá„ƒƒƒZÝe&�dâƒe Û�dÚ�dÛ�dÜ¡ej)�d�dœ�dã�dä„ƒƒƒZÞe&�dåƒe Û�dÚ�dÛ�dÜ¡ej)�d�dœ�dæ�dç„ƒƒƒZße&�dèƒe Û�dÚ�dÛ�dÜ¡ej)�d�dœ�dé�dê„ƒƒƒZàe&�dëƒe Û�dÚ�dÛ�dÜ¡ej)�d�dœ�dì�dí„ƒƒƒZáe&�dîƒe Û�dÚ�dÛ�dÜ¡ej)�d�dœ�dï�dð„ƒƒƒZâe&�dñƒe Û�dÚ�dÛ�dÜ¡ej)�d�dœ�dò�dó„ƒƒƒZãe&�dôƒe Û�dÚ�dÛ�dÜ¡ej)�d�dœ�dõ�dö„ƒƒƒZäe&�d÷ƒe 5�d.�dB�d.�d.�d.�d.¡ej)�d^�d�dœ�dødC„ƒƒƒZåe&�dùƒe 5�d.�dB�d.�d.�d.�d.¡ej)�d_�d�dœ�dúdB„ƒƒƒZæe&�dûƒej)�d`�d�dœ�düdš„ƒƒZçe&�dýƒej)�d�dœ�dþdÖ„ƒƒZèe&�dÿƒej)�da�d�dœ�d dó„ƒƒZée&�dƒej)�db�d�dœ�dd„ƒƒZêe&�dƒe 5�d.�dB�d.�d.�d.¡ej)�dc�d�dœ�d�d„ƒƒƒZëe&�dƒe 5�d.�dB�d.�d.�d.�d.¡ej)�dd�d�dœ�d�d
„ƒƒƒZìe&�dƒej)�de�d�dœ�dd�„ƒƒZíe&�d	ƒej)�d�dœ�d
�d„ƒƒZîe&�dƒe 5�d.�dB�d.�d.�d.¡ej)�df�d�dœ�dd¥„ƒƒƒZïe&�dƒe 5�d.�dB�d.�d.�d.�d.¡ej)�dg�d�dœ�dd¤„ƒƒƒZðe&�dƒej)�dh�d�dœ�ddœ„ƒƒZñe&�dƒej)�di�d�dœ�ddQ„ƒƒZòe&�dƒej)�dj�d�dœ�ddP„ƒƒZóe&�dƒej)�dk�d�dœ�dd›„ƒƒZôe&�dƒej)�d�dœ�ddI„ƒƒZõe&�dƒej)�d�dœ�ddà„ƒƒZöe&�dƒe -�d¡e 5�d.�d/�d/¡ej)�d�dÒ�dÓ�dÓ�dœ�dd]„ƒƒƒƒZ÷e&�dƒe -�d¡e 5�d.¡ej)�d�dœ�dd\„ƒƒƒƒZøe&�d ƒej-�d�dkd�dZ�e 5�d.¡ej)�d�dœ�d!d[„ƒƒƒƒZùe&�d"ƒe 5�d.¡ej)�d�dœ�d#dò„ƒƒƒZúe&�d$ƒe 5�d.�d/¡ej)�d�dœ�d%dZ„ƒƒƒZûe&�d&ƒe 5�d.�d/¡ej)�d�dœ�d'dã„ƒƒƒZüe&�d(ƒej)�d�dœ�d)d„ƒƒZýe&�d*ƒe 5�d.�dB¡ej)�d�dœ�d+dÿ„ƒƒƒZþe&�d,ƒe 5�d.�dB�dB�d‡¡ej)�dl�d�dœ�d-dä„ƒƒƒZÿe&�d.ƒej)�d�dœ�d/d¡„ƒƒ�Z e&�d0ƒe 5�d.�dB�dB�dB�dB�d‡¡ej)�dm�d�dœ�d1dö„ƒƒƒ�Ze&�d2ƒej)�d�dœ�d3d4„ƒƒ�Ze&�d4ƒej)�d�dœ�d5dõ„ƒƒ�Ze&�d6ƒej)�d�dœ�d7dÎ„ƒƒ�Ze&�d8ƒej)�dn�d�dœ�d9dÍ„ƒƒ�Ze&�d:ƒe 5�d.�dB¡ej)�d�dœ�d;d«„ƒƒƒ�Ze&�d<ƒe 5�d.�dB¡ej)�d�dœ�d=d¬„ƒƒƒ�Zej)�do�d�dœ�d>�d?„ƒ�Ze 5�d.�d.�d.�dB�dB�d/�dB�dB�dB¡	ej)�d�dœ�d@�dA„ƒƒ�Z	e 5�d.�d.�d.�d.�dB�dB�d/�dB�dB¡	ej)�d�dœ�dB�dC„ƒƒ�Z
e&�dDƒej)�d�dœ�dEd‚„ƒƒ�Ze&�dFƒej)�d�dœ�dGd�„ƒƒ�Ze&�dHe'�dIƒe(�dJƒg�dy�e&�dKe'�dLƒe(�dMƒg�dy�e&�dNe'�dOƒe(�dPƒg�dy��d�dQœ�dR�dS„ƒƒƒ�Ze&�dTƒe 5�d.�dB¡ej)�d�dœ�dU�dV„ƒƒƒ�Ze&�dWƒej)�d�dœ�dXd:„ƒƒ�Ze&�dYƒe 5�d.�dB¡ej)�d�dœ�dZd,„ƒƒƒ�Ze&�d[ƒe 5�d.�d.�dB¡ej)�d�dœ�d\�d]„ƒƒƒ�Ze&�d^ƒe 5�d.�d.�dBdî�d.¡ej)�d�dœ�d_�d`„ƒƒƒ�Ze&�daƒej)�d�dœ�dbdÅ„ƒƒ�Ze&�dcƒej)�d�dœ�dddÄ„ƒƒ�Ze&�deƒej)�d�dœ�dfdÇ„ƒƒ�Ze&�dgƒej)�d�dœ�dhdÃ„ƒƒ�Ze&�diƒej)�dp�d�dœ�djdÆ„ƒƒ�Ze&�dkƒej)�dq�d�dœ�dldÂ„ƒƒ�Ze&�dmƒe 5�d.�d/�d/�dB�d‡¡ej)�d�dœ�dndÓ„ƒƒƒ�Ze&�doƒej)�dr�d�dœ�dpd„ƒƒ�Ze&�dqƒe 5�d.¡ej)�d�dœ�drdu„ƒƒƒ�Ze&�dsƒe 5�d.¡ej)�d�dœ�dtdE„ƒƒƒ�Ze&�duƒe -�d�d€�d€¡e 5�d.�dB�dB¡ej)�d�dœ�dvdK„ƒƒƒƒ�Ze&�dwƒe 5�d.¡ej)�d�dœ�dxdŸ„ƒƒƒ�Ze&�dyƒej)�ds�d�dœ�dzdž„ƒƒ�Ze&�d{ƒe 5�d.¡ej)�d�dœ�d|dg„ƒƒƒ�Z e&�d}ƒej)�d�dœ�d~�d„ƒƒ�Z!e&�d€ƒej)�d�dœ�d��d‚„ƒƒ�Z"e&�dƒƒe 5�d.�dB�dB�dB¡ej)�d�dœ�d„d–„ƒƒƒ�Z#e&�d…ƒe 5�d.�d.�dš¡ej)�d�d†�d†�d‚�d‡œ�dˆd„ƒƒƒ�Z$e&�d‰ƒe 5�d.�d.�dš¡ej)�d�d†�d†�d‚�d‡œ�dŠd„ƒƒƒ�Z%e&�d‹ƒe 5�d.�dB�d.�d.¡ej)�d�dœ�dŒdØ„ƒƒƒ�Z&e&�d�ƒe 5�d.�dB�d.�d.¡ej)�d�dœ�dŽd×„ƒƒƒ�Z'e&�d�ƒej)�d�dœ�d�dz„ƒƒ�Z(e&�d‘ƒej)�d�dœ�d’de„ƒƒ�Z)e&�d“ƒej)�d�dœ�d”�d•„ƒƒ�Z*e&�d–ƒe–ej)�d�dœ�d—�d˜„ƒƒƒ�Z+e&�d™ƒej)�d�dœ�dšd£„ƒƒ�Z,e&�d›ƒe 5�d.�dB�d.�d.¡ej)�dt�d�dœ�dœdR„ƒƒƒ�Z-e 5�d.�d¤�dB�dB¡ej)�d�dœ�d��dž„ƒƒ�Z.e&�dŸƒej)�d�dœ�d dì„ƒƒ�Z/e&�d¡ƒej)�d�dœ�d¢�d„ƒƒ�Z0e&�d£ƒej)�d�dœ�d¤�d„ƒƒ�Z1e&�d¥ƒej)�d�dœ�d¦dë„ƒƒ�Z2e&�d§ƒe 5�d.�d¤�dB¡ej)�d�dœ�d¨d€„ƒƒƒ�Z3e&�d©ƒej)�d�dœ�dªd„ƒƒ�Z4e&�d«ƒej)�d�dœ�d¬dt„ƒƒ�Z5e&�d­ƒej)�d�dœ�d®dn„ƒƒ�Z6e&�d¯ƒej)�d�dœ�d°d„„ƒƒ�Z7e&�d±ƒej)�d�dœ�d²d…„ƒƒ�Z8e&�d³ƒej)�d�dœ�d´dc„ƒƒ�Z9e&�dµƒe 5�d.�d.�d¤�dš�d.¡ej)�d�d†�d†�d¶�d‚�d†�d·œ�d¸dq„ƒƒƒ�Z:e&�d¹ƒe 5�d.�d/�d¤�dš�d.¡ej)�d�d†�dÓ�d¶�d‚�d†�d·œ�dºdr„ƒƒƒ�Z;e&�d»ƒe 5�d.�d.�d¤�dš�d.¡ej)�d�d†�d†�d¼�d‚�d†�d·œ�d½dp„ƒƒƒ�Z<e&�d¾ƒe 5�d.�d.�dB¡ej)�du�d�dœ�dÀdo„ƒƒƒ�Z=e&�dÁƒe 5�d.�d¤�dš¡ej)�dv�d�dœ�dÂdO„ƒƒƒ�Z>e&�dÃƒe 5�d.�dB�dš�d.¡ej)�dw�d�dœ�dÄd”„ƒƒƒ�Z?e&�dÅƒej)�d�dœ�dÆd„ƒƒ�Z@e&�dÇƒe 5�d.�d2¡ej)�dx�d�dÈ�dÉœ�dÊdŒ„ƒƒƒ�ZAe&�dËƒej)�d�dœ�dÌdÌ„ƒƒ�ZBe&�dÍƒe 5�d.�d2¡ej)�dy�d�d†�d�dÎœ�dÏdT„ƒƒƒ�ZCe&�dÐƒe -�d�d€�d€�d€¡e 5�d.�dB�d.�d.�d/�dB¡ej)�d�dœ�dÑdW„ƒƒƒƒ�ZDe&�dÒƒe 5�d.�d.�dB¡ej)�d�dœ�dÓ�dÔ„ƒƒƒ�ZEe&�dÕƒej)�d�dœ�dÖd;„ƒƒ�ZFe&�d×ƒej)�d�dœ�dØ�dÙ„ƒƒ�ZGe&�dÚƒej)�d�dœ�dÛ�dÜ„ƒƒ�ZHe&�dÝƒej)�d�dœ�dÞdh„ƒƒ�ZIe&�dßƒej)�d�dœ�dàdï„ƒƒ�ZJej)�d�dœ�dá�dâ„ƒ�ZKej)�d�dœ�dã�dä„ƒ�ZLe&�dåƒe 5�d.�d.�dB�dš¡ej)�d�dœ�dædi„ƒƒƒ�ZMe&�dçƒe 5�d.�d.�dB¡ej)�d�dœ�dèd’„ƒƒƒ�ZNe&�déƒe -�d¡e 5�d.�d.�d¤�dB¡ej)�dz�d�dœ�dêd„ƒƒƒƒ�ZOe&�dëƒej)�d�dœ�dì�dí„ƒƒ�ZPe&�dîƒej)�d�dœ�dï�dð„ƒƒ�ZQe&�dñƒej)�d�dœ�dòds„ƒƒ�ZRe&�dóƒe 5�d.�dš�dB�d.�d.�d.�d.¡ej)�d{�d�dô�dõœ�dödY„ƒƒƒ�ZSe&�d÷ƒej)�d�dœ�død•„ƒƒ�ZTe&�dùƒej)�d�dœ�dúd=„ƒƒ�ZUe&�dûƒe 5�d.dîdî¡ej)�d�dœ�düd‘„ƒƒƒ�ZVe&�dýƒe 5�d.�d.¡ej)�d�dœ�dþdJ„ƒƒƒ�ZWe&�dÿƒej)�d|�d�dœ�d d^„ƒƒ�ZXe&�dƒe 5�d.�d¤�d¤¡ej)�d�dœ�ddÒ„ƒƒƒ�ZYe&�dƒe 5�d.�d.�dB¡ej)�d}�d�dœ�dd8„ƒƒƒ�ZZe&�dƒej)�d~�d�dœ�dd%„ƒƒ�Z[e&�d	ƒej)�d�dœ�d
dm„ƒƒ�Z\e&�dƒej)�d�dœ�dd!„ƒƒ�Z]e&�dƒ�d�d�dœ�ddf„ƒ�Z^e&�dƒej)�d�dœ�dd°„ƒƒ�Z_e&�dƒej)�d�dœ�dd¯„ƒƒ�Z`e&�dƒej)�d�dœ�dd¼„ƒƒ�Zae&�dƒej)�d�dœ�ddº„ƒƒ�Zbe&�dƒej)�d€�d�dœ�dd»„ƒƒ�Zce&�dƒej)�d�dœ�dd²„ƒƒ�Zde&�dƒ�d�dœ�dd¶„ƒ�Zee&�dƒej)�d�dœ�dd·„ƒƒ�Zfe&�dƒej)�d�d �d!œ�d"d¸„ƒƒ�Zge&�d#ƒej)�d�dœ�d$d¾„ƒƒ�Zhe&�d%ƒej)�d�dœ�d&dÁ„ƒƒ�Zie&�d'ƒej)�d�dœ�d(dÀ„ƒƒ�Zje&�d)ƒej)�d�dœ�d*d´„ƒƒ�Zke&�d+ƒej)�d�dœ�d,d½„ƒƒ�Zle&�d-ƒej)�d�d.�d!œ�d/d³„ƒƒ�Zme&�d0ƒej)�d�d1�d!œ�d2d¹„ƒƒ�Zne&�d3ƒej)�d�d1�d!œ�d4dµ„ƒƒ�Zoe&�d5ƒej)�d�dœ�d6d±„ƒƒ�Zpe&�d7ƒej)�d�dÒ�d8œ�d9d¿„ƒƒ�Zqe&�d:ƒej)�d�dœ�d;d¦„ƒƒ�Zre&�d<ƒe&�d=ƒej)�d�dÒ�d>œ�d?�d„ƒƒƒ�Zse&�d@ƒe&�dAƒej)�d�dÒ�d>œ�dB�d „ƒƒƒ�Zte&�dCƒej)�d�d†�d†�dDœ�dEd„ƒƒ�ZudS (�  zhThis file exports ONNX ops for opset 9.

Opset 9 is supported by ONNX release 1.4.1
release on 01/23/19
é    )ÚannotationsN)ÚCallableÚListÚOptionalÚSequenceÚTupleÚUnion)Ú_C)Ú
_constantsÚ_deprecationÚ_type_utilsÚerrorsÚsymbolic_helper)ÚGLOBALS)Ú	_beartypeÚ	jit_utilsÚregistration)ÚNumberÚabsÚacosÚaddÚaddcmulÚaddmmÚaliasÚamaxÚaminÚaminmaxÚarangeÚargmaxÚargminÚ
as_stridedÚ	as_tensorÚasinÚatanÚatan2ÚbaddbmmÚ
batch_normÚ	bernoulliÚbitwise_notÚ
bitwise_orÚbmmÚbroadcast_tensorsÚbroadcast_toÚ	bucketizeÚcatÚcdistÚceilÚ	clamp_maxÚ	clamp_minÚclampÚcloneÚconstant_pad_ndÚ
contiguousÚconv_tbcÚconv_transpose1dÚconv_transpose2dÚconv_transpose3dÚconv1dÚconv2dÚconv3dÚconvert_element_typeÚconvolutionÚcosÚcosine_similarityÚcrossÚcumsumÚdetachÚdimÚdivÚdotÚdropoutÚeluÚembedding_bagÚ	embeddingÚ
empty_likeÚemptyÚeqÚerfÚexpÚ	expand_asÚexpandÚeyeÚfillÚflattenÚfloor_divideÚfloorÚfloordivÚfrobenius_normÚ	full_likeÚfullÚgatherÚgeÚgeluÚget_pool_ceil_paddingÚgluÚ
group_normÚgtÚhann_windowÚ
hardshrinkÚhardsigmoidÚ	hardswishÚhardtanhÚ	index_addÚ
index_copyÚ
index_fillÚ	index_putÚindex_selectÚindexÚinstance_normÚis_floating_pointÚ	is_pinnedÚisnanÚitemÚkl_divÚ
layer_normÚleÚ
leaky_reluÚlerpÚliftÚlinalg_crossÚlinalg_matrix_normÚlinalg_normÚlinalg_vector_normÚlinearÚlinspaceÚlog_sigmoidÚlog_softmaxÚlogÚlog10Úlog1pÚlog2Úlogical_andÚlogical_notÚ
logical_orÚlogical_xorÚlogitÚ	logsumexpÚ	lstm_cellÚlstmÚltÚmasked_fillÚmasked_fill_ÚmatmulÚmax_pool1d_with_indicesÚmax_pool2d_with_indicesÚmax_pool3d_with_indicesÚmaxÚmaximumÚmeshgridÚminÚminimumÚmishÚmmÚmovedimÚmse_lossÚmulÚmultinomialÚmvÚnarrowÚnative_layer_normÚneÚnegÚ	new_emptyÚnew_fullÚnew_onesÚ	new_zerosÚnonzero_numpyÚnonzeroÚnormÚnumelÚnumpy_TÚone_hotÚ	ones_likeÚonesÚonnx_placeholderÚoverload_by_arg_countÚpadÚpairwise_distanceÚpermuteÚpixel_shuffleÚpixel_unshuffleÚpowÚpreluÚprim_constant_chunkÚprim_constant_splitÚprim_constantÚ	prim_dataÚprim_deviceÚ
prim_dtypeÚprim_ifÚprim_layoutÚprim_list_constructÚprim_list_unpackÚ	prim_loopÚprim_maxÚprim_minÚ
prim_shapeÚprim_tolistÚprim_tuple_constructÚ	prim_typeÚprim_unchecked_castÚprim_uninitializedÚ	rand_likeÚrandÚrandint_likeÚrandintÚ
randn_likeÚrandnÚ
reciprocalÚreflection_padÚreluÚrelu6Ú	remainderÚrepeat_interleaveÚrepeatÚreplication_padÚ
reshape_asÚreshapeÚrollÚrreluÚrsqrtÚrsubÚscalar_tensorÚscatter_addÚscatterÚselectÚseluÚsigmoidÚsignÚsiluÚsinÚsizeÚsliceÚsoftmaxÚsoftplusÚ
softshrinkÚsortÚsplit_with_sizesÚsplitÚsqrtÚsquareÚsqueezeÚstackÚstd_meanÚstdÚsubÚtÚtakeÚtanÚtanhÚ
tanhshrinkÚtensorÚ	thresholdÚtoÚtopkÚ	transposeÚtrue_divideÚtype_asÚunbindÚunfoldÚunsafe_chunkÚunsafe_split_with_sizesÚunsafe_splitÚ	unsqueezeÚunsupported_complex_operatorsÚnoop_complex_operatorsÚunusedÚvar_meanÚvarÚview_asÚviewÚwhereÚwrap_logical_op_with_cast_toÚwrap_logical_op_with_negationÚ
zeros_likeÚzerosÚzeroé	   )Úopsetc                    s   ‡ ‡fdd„}|S )z_Returns a decorator that calls the decorated (higher-order) function with the given parameters.c                   s
   | ˆ ˆŽS ©N© ©Úfn©ÚargsÚkwargsr  úY/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/onnx/symbolic_opset9.pyÚ_apply+  s    z_apply_params.<locals>._applyr  )r  r  r!  r  r  r   Ú_apply_params(  s    r"  Ústr©Únamec                   s   ‡ fdd„}|S )z5Exports the function in the current global namespace.c                   s   | t ƒ ˆ < t ˆ ¡ | S r  )ÚglobalsÚ__all__Úappend©Úfuncr$  r  r   Úwrapper4  s    

z_export.<locals>.wrapperr  )r%  r+  r  r$  r   Ú_export1  s    r,  c                 C  s   |   d¡}| tj ¡ ¡ |S )z%Represents "missing" optional inputs.úprim::Constant)ÚopÚsetTyper	   ÚOptionalTypeZofTensor)ÚgÚnr  r  r   r  <  s    
zaten::_shape_as_tensorzjit_utils.GraphContext©r1  c                 C  s   |   d|¡S ©NÚShape©r.  ©r1  Úinputr  r  r   Ú_shape_as_tensorD  s    r9  zaten::_reshape_from_tensorc                 C  s*   t |tƒr| jd|žddiŽ}t| ||ƒS )NÚConcatÚaxis_ir   )r:  )Ú
isinstanceÚlistr.  rÛ   )r1  r8  Úshaper  r  r   Ú_reshape_from_tensorJ  s    
r?  zaten::reshapeTc                 C  s   t  | ||¡S r  )r   Ú_reshape_helper©r1  Úselfr>  r  r  r   rÛ   R  s    zaten::reshape_asc                 C  s   |   d|¡}t| ||ƒS r4  ©r.  rÛ   ©r1  rB  Úotherr>  r  r  r   rÚ   Y  s    z	aten::addc                 C  sZ   t  |¡r&t  |¡r&t  dddd|¡S |rLt  t  |¡¡dkrL|  d||¡}|  d||¡S )NÚAddr  é   z)Add between list of tensors not supportedé   ÚMul)r   Ú	_is_valueÚ_is_tensor_listÚ _onnx_opset_unsupported_detailedÚ_scalarÚ_maybe_get_scalarr.  ©r1  rB  rE  Úalphar  r  r   r   a  s        ÿz	aten::subc                 C  s4   |r&t  t  |¡¡dkr&|  d||¡}|  d||¡S )NrH  rI  ÚSub)r   rM  rN  r.  rO  r  r  r   r÷   m  s    z
aten::rsubc                 C  s   t | |||d�S )N)rP  )r÷   rO  r  r  r   rß   u  s    z	aten::mulc                 C  s4   t  |¡r"t  |¡r"|  d||¡S |  d||¡S d S )NÚAndrI  )r   Ú_is_boolr.  ©r1  rB  rE  r  r  r   r�   {  s    z	aten::divc                 G  s.   t |ƒdkrt| ||ƒS t| ||f|žŽ S d S ©Nr   )Úlenr  Ú_div_rounding_mode)r1  rB  rE  r  r  r  r   rF   …  s    zaten::addcmulÚvÚfç      ð?c              	   C  s2   | j dt |g¡d�}t| |t| t| ||ƒ|ƒƒS ©NÚConstant©Zvalue_t)r.  Útorchrý   r   r�   )r1  rB  Ztensor1Ztensor2ÚvalueZ
value_tensr  r  r   r   Ž  s    Úsc                 C  sT   |d krt | ||ƒS |dkr(t| ||ƒS |dkr<t| ||ƒS t d|› d�|¡‚d S )NrW   ÚtrunczUnsupported rounding mode: "z$". Expected None, "floor" or "trunc")r  Ú_floor_divideÚ_trunc_divider   ÚSymbolicValueError)r1  rB  rE  Zrounding_moder  r  r   rW  –  s    
þrW  c                 C  s˜   |   d||¡}| j d|tjjd�}tj |tjj¡}|tjjkr€t 	|¡sjt 	|¡rj| j d|tjj
d�}q”| j d|| ¡ d�}n| j d|tjj
d�}|S )NÚDivÚCast©Zto_i)r.  Ú_C_onnxÚTensorProtoDataTypeÚINT64r   ÚJitScalarTypeÚ
from_valueÚ	UNDEFINEDr   Ú_is_fpÚFLOATÚ	onnx_type)r1  rB  rE  ÚoutÚscalar_typer  r  r   rc  ¦  s      ÿýrc  c                 C  sè   t  |¡st  |¡r,t| ||ƒ}|  d|¡S |  d||¡}| jdtjdtjd�d�}|  dt  | ||¡t  | ||¡¡}|  d||  d	||¡¡}|  d
||  d|  d||¡¡¡}| jdtjdtjd�d�}	|  d	||	¡}
|  d||
¡S d S )NÚFloorre  r\  r   ©Údtyper]  ÚXorrQ  rI  rR  ÚNotÚEqualrH  )r   rn  r  r.  r^  rý   Úint64Z
_lt_helper)r1  rB  rE  rq  rF   r  ÚnegativeÚmodZ
fixup_maskÚoneÚfixupr  r  r   rb  Æ  s    ý rb  zaten::floor_dividec                 C  s   t | ||ƒS r  )rc  rT  r  r  r   rV   ß  s    zaten::floordivc                 C  s   t | ||ƒS r  )rV   rT  r  r  r   rX   æ  s    zaten::true_dividec                 C  sŽ   t  |¡st  |¡r"|  d||¡S t ¡ }tjj}|tjksJ|tj	ksJt
‚t ¡ tj	kr`tjj}| jd||d�}| jd||d�}|  d||¡S )a  Division where both inputs are cast to floating types

    If both inputs are floating, performs div as usual
    If only one input is a floating type, the other input is cast to its type
    If neither input is a floating type, both inputs are cast to the default scalar type
    re  rf  rg  )r   rn  r.  r^  Úget_default_dtyperh  ri  ro  ÚfloatÚdoubleÚAssertionErrorÚDOUBLE)r1  rB  rE  rr  Zonnx_scalar_typer  r  r   r  ì  s    zaten::reciprocalc                 C  s*   t  |¡s| jd|tjjd�}|  d|¡S )Nrf  rg  Ú
Reciprocal)r   rn  r.  rh  ri  ro  ©r1  rB  r  r  r   rÒ   	  s    
z	aten::catÚic                   s¦   t  |¡}g ‰ |D ]&}t  |¡r.t  |d¡s.qˆ  |¡ qtˆ ƒdksJt‚t‡ fdd„ˆ D ƒƒsdt‚| ¡  	¡  ˆ D ]}| ¡  
|¡ qtt  |¡}| jd|žd|iŽS )Nr   c                 3  sF   | ]>}t  ˆ d  ¡dkp<t  |¡dkp<t  |¡t  ˆ d  ¡kV  qdS ©r   N)r   Ú_get_tensor_rank©Ú.0rø   ©Znonempty_tensorsr  r   Ú	<genexpr>"  s   üÿÿzcat.<locals>.<genexpr>r:  r;  )r:  )r   Ú_unpack_listÚ_is_constantÚ_get_tensor_dim_sizer(  rV  r�  ÚallÚnodeZremoveAllInputsZaddInputr.  )r1  Útensor_listrE   Útensorsrø   r  rŠ  r   r.     s$    
 ÿû
zaten::stackc                   s.   ‡ ‡fdd„t  |¡D ƒ}ˆjd|ždˆ iŽS )Nc                   s   g | ]}t  ˆ|ˆ g¡‘qS r  ©r   Ú_unsqueeze_helperrˆ  ©rE   r1  r  r   Ú
<listcomp>5  s   ÿzstack.<locals>.<listcomp>r:  r;  )r:  )r   rŒ  r.  )r1  r‘  rE   Z
unsqueezedr  r•  r   rô   1  s    þz
aten::listc                 C  s   |S r  r  r„  r  r  r   Ú_list<  s    r—  zaten::mmc                 C  s,   | j dt dg¡d�}| j d|||ddd�S )Nr\  rH  r]  ÚGemmç        rZ  ©Zbeta_fÚalpha_f©r.  r^  rý   )r1  rB  rE  ÚCr  r  r   rš   B  s    z	aten::bmmc                 C  s   |   d||¡S ©NÚMatMulr6  rT  r  r  r   r*   K  s    zaten::matmulc                 C  s   |   d||¡S rž  r6  rT  r  r  r   r�   Q  s    zaten::addmmc              	   C  sH  d }t  |¡}t  |¡}t  |¡}	|d k	r0|}n|d k	r>|}n|	d k	rJ|	}t  |¡}
t  |¡}dd„ }|d k	�r&||
dƒs†||dƒ�r&|  d||¡}|}t  |¡}t  |¡}|dkrÞ| jdtj|| ¡ d�d�}|  d	||¡}|dk�r| jdtjt  |¡| ¡ d�d�}|  d	||¡}|  d
||¡S | jd|||t  |¡t  |¡d�S )Nc                 S  s   | d k	o| |kS r  r  )rX  Úur  r  r   Úis_not_none_nori  s    zaddmm.<locals>.is_not_none_noré   rŸ  rH  r\  rt  r]  rI  rF  r˜  rš  )r   Ú_try_get_scalar_typer‡  r.  rM  r^  rý   ru  )r1  rB  Zmat1Zmat2ÚbetarP  rr  Úself_scalar_typeZmat1_scalar_typeZmat2_scalar_typeZ	mat1_rankZ	mat2_rankr¡  Zres1Zres2r  r  r   r   W  s\    





ÿÿ

 ÿ
 ÿþúz	aten::negc                 C  s   |   d|¡S )NZNegr6  r„  r  r  r   r£   �  s    z
aten::sqrtc                 C  sT   t j |t jj¡t jjt jjt jjt jjt jjhkrH| j	d|t
jjd�}|  	d|¡S )Nrf  rg  ÚSqrt)r   rk  rl  rm  ÚUINT8ÚINT8ÚINT16ÚINTrj  r.  rh  ri  ro  r„  r  r  r   rñ   •  s     ÿûþ
zaten::rsqrtc                 C  s"   |   dt t d¡|¡t| |ƒ¡S )Nre  rH  )r.  r   Ú_if_scalar_type_asr^  r¯   rñ   r„  r  r  r   rÞ   §  s
      ÿz
aten::tanhg      €?é€   )ÚscaleZ
zero_pointc                 C  s   |   d|¡S )NÚTanhr6  r„  r  r  r   rû   ¯  s    z	aten::sinc                 C  s   |   d|¡S )NZSinr6  r„  r  r  r   rè   ·  s    z	aten::cosc                 C  s   |   d|¡S )NZCosr6  r„  r  r  r   r@   ½  s    z	aten::tanc                 C  s   |   d|¡S )NZTanr6  r„  r  r  r   rú   Ã  s    z
aten::asinc                 C  s   |   d|¡S )NZAsinr6  r„  r  r  r   r"   É  s    z
aten::acosc                 C  s   |   d|¡S )NZAcosr6  r„  r  r  r   r   Ï  s    z
aten::atanc                 C  s   |   d|¡S )NÚAtanr6  r„  r  r  r   r#   Õ  s    zaten::atan2c              
   C  s˜   |   d||¡}|   d|¡}| j dt d¡d�}| j dt tj¡d�}|   d||¡}|   d||   d||¡|   d	||¡¡}|   d
||¡}	|   d|	||¡}
|
S )Nre  r¯  r\  r   r]  ÚGreaterÚWhererF  rQ  ÚLess)r.  r^  rý   ÚmathÚpi)r1  rB  rE  Úsloper#   Z
const_zeroZconst_piZ"condition_second_or_third_quadrantZsecond_third_quadrantZcondition_14_or_23_quadrantÚresultr  r  r   r$   Û  s    üzaten::sigmoidg      p?c                 C  s   |   d|¡S )NÚSigmoidr6  r„  r  r  r   rå   ò  s    z
aten::signc                 C  s   |   d|¡S )NZSignr6  r„  r  r  r   ræ   ú  s    c                 C  sR   t |ƒt |ƒkst‚t |ƒdkr>|d dkr>|d tjkr>|S | jd||||d�S )NrH  r   ÚSlice)Úaxes_iZstarts_iZends_i)rV  r�  r
   Ú	INT64_MAXr.  )r1  r8  ÚaxesÚstartsÚendsr  r  r   Ú_slice   s    &r¾  c                 C  sL   t j |t jj¡}|t jjkrHt |¡sH|t jjkrH| jd|tj	jd�}|S ©Nrf  rg  )
r   rk  rl  rm  r   rn  rj  r.  rh  ri  ©r1  rB  rr  r  r  r   Ú_maybe_cast_reduce_op_input	  s     ÿÿ
þrÁ  c                   s   t jd‡ ‡fdd„	ƒ}|S )Nc                   sx   t | |ƒ}|d ks|tƒ kr*t | |ˆ¡S ˆ r2dnd}t ||d¡t |dd¡ }}ˆ r\|n|g}| jˆ|||d�S d S )NÚisr…  rE   Úkeepdim©r¹  Ú
keepdims_i)rÁ  Útupler   Z_handle_reduce_dim_noneÚ
_get_constr.  )r1  rB  rE   rÃ  ÚdescZdim_list©Úallow_multi_dim_supportÚonnx_op_namer  r   Úsymbolic  s    
  ÿþz%_reduce_op_symbolic.<locals>.symbolic)NN)r   Úbeartype)rË  rÊ  rÌ  r  rÉ  r   Ú_reduce_op_symbolic  s    rÎ  c                   s    t  ˆ ¡tj‡ fdd„ƒƒ}|S )Nc                   s`   ˆ | f|žŽ }|D ],}|j }t|ƒt|ƒkr|| f|žŽ   S qt dˆ j› �dt|ƒ› d�¡S )Nzaten::úwith ú
 arguments)Z_arg_descriptorsrV  r   Ú_unimplementedÚ__name__)r1  r  Z	overloadsÚoverloadZarg_descriptorsr  r  r   r+  1  s    
 ÿz&overload_by_arg_count.<locals>.wrapper)Ú	functoolsÚwrapsr   rÍ  )r  r+  r  r  r   r±   /  s    
z	aten::sumZ	ReduceSumÚsum)Zdecoratez
aten::meanÚ
ReduceMeanÚmeanz
aten::prodÚ
ReduceProdÚprodF©rÊ  Úbool)Úonnx_opr%  rÊ  c                   s$   t | ˆ d�‰t‡ ‡‡fdd„ƒ}|S )NrÛ  c                   s`   t  d¡t  dd¡‡‡fdd„ƒƒ}ˆ r,dnd}t  d¡t  d|dd¡‡‡fdd	„ƒƒ}||fS )
NTrX  Únonec                   sž   d }|  ¡  ¡ dkrBt |dd¡}t |¡ ¡ }| jd||d�}n|  ¡  ¡ dkr`t ˆ d|¡S ˆ| |ƒ}|d k	rštj 	|¡ ¡ }||krš| jd||d�}|S ©Núonnx::Constantr…  ru  rf  rg  r-  ©
r�  Úkindr   rÇ  r   rk  rp  r.  rÑ  rl  )r1  rB  ru  Ú
dtype_onnxr¶  Úresult_dtype_onnx©r%  rÌ  r  r   Úreduce_nodimO  s    
ÿz8_reduce_with_dtype.<locals>.reduce.<locals>.reduce_nodimrÂ  r…  c                   s¢   d }|  ¡  ¡ dkrBt |dd¡}t |¡ ¡ }| jd||d�}n|  ¡  ¡ dkr`t ˆ d|¡S ˆ| |||ƒ}|d k	ržtj 	|¡ ¡ }||krž| jd||d�}|S rß  rá  )r1  rB  rE   rÃ  ru  rã  r¶  rä  rå  r  r   Ú
reduce_dimd  s    ÿz6_reduce_with_dtype.<locals>.reduce.<locals>.reduce_dim)r   Úquantized_argsÚ
parse_args)r1  r  r  ræ  Zdim_descrç  ©rÊ  r%  rÌ  r  r   ÚreduceM  s    
z"_reduce_with_dtype.<locals>.reduce)rÎ  r±   )rÝ  r%  rÊ  rë  r  rê  r   Ú_reduce_with_dtype@  s    	 ÿ+rì  zaten::cumsumrÞ  c                 C  sJ   t  ¡ r6| ¡  ¡ dkr&t  dd|¡S | jd||d�S t  ddd|¡ d S )Nr-  rC   ru  ©Údim_ir  rG  )r   Úis_caffe2_aten_fallbackr�  râ  rÑ  ÚatÚ_onnx_opset_unsupported)r1  r8  rE   ru  r  r  r   rC   |  s
    zaten::_sample_dirichletc                 C  s8   t  ¡ r,t  |¡s t  dd|¡S |  d|¡S t  d|¡S )NÚ_sample_dirichletz#We are not able to export generator©r   rï  Ú_is_nonerÑ  rð  Ú_onnx_unsupported©r1  rB  Ú	generatorr  r  r   rò  ˆ  s    
  ÿrò  zaten::_standard_gammac                 C  s8   t  ¡ r,t  |¡s t  dd|¡S |  d|¡S t  d|¡S )NÚ_standard_gammaznot able to export generatorró  rö  r  r  r   rø  ”  s    
  ÿrø  zaten::tc                 C  s6   t  |¡}|d ks|dk r&|  d|¡S | jd|dd�S )Nr¢  ÚIdentityÚ	Transpose)rH  r   ©Zperm_i)r   r‡  r.  )r1  rB  Úrankr  r  r   rø   ¡  s    
zaten::numpy_Tc                 C  s8   t  |¡}|d k	st‚tttd|ƒƒƒ}| jd||d�S ©Nr   rú  rû  )r   r‡  r�  r=  ÚreversedÚranger.  )r1  r8  ÚndimÚpermr  r  r   r¬   ­  s    
zaten::expandc              	   C  s´   t  |d¡}t  |¡s,| jdt |¡d�}n2t  |¡r^t  | t| |dƒ| jdt 	dg¡d�¡}t
jj}t| ||ƒ}t| || jdt 	d¡d�ƒ}t| |  d||¡||ƒ}|  d||¡S ©NrÂ  r\  r]  r   éÿÿÿÿrx  ÚExpand©r   Ú_maybe_get_constrJ  r.  r^  Ú
LongTensorÚ_is_packed_listr@  rô   rý   r   rk  rj  r®   r�   r  )r1  rB  ré   Zimplicitru  r¯   Úneg_onesr  r  r   rR   ·  s    

 
 ÿzaten::broadcast_toc              	   C  s´   t  |d¡}t  |¡s,| jdt |¡d�}n2t  |¡r^t  | t| |dƒ| jdt 	dg¡d�¡}t
jj}t| ||ƒ}t| || jdt 	d¡d�ƒ}t| |  d||¡||ƒ}|  d||¡S r  r  )r1  rB  ré   ru  r¯   r	  r  r  r   r,   Ì  s    

 
 ÿzaten::expand_asc                 C  s    t  |d¡}t|tjƒr†|j}| tj¡}g }t| 	¡ ƒD ]J}t 
| |¡ |¡ |¡|¡r:| |¡ | jd|j|dd� |¡d�}q:|  d|¡}|  d||¡S )Nrø   r\  T)rÃ  r]  r5  r  )r   r  r<  r^  ÚTensorru  rÿ   r€  rÿ  rE   ÚequalrØ  r	  rQ   r(  r.  )r1  rB  rE  Zself_tÚ	orig_typeÚdimsÚdr>  r  r  r   rQ   á  s    
 ÿzaten::embeddingÚbc                 C  s<   |rt jrt d|¡‚|dkr.t jr.t d¡ |  d||¡S )Nz‚Unsupported: ONNX export of embedding with scale_grad_by_freq=True for training mode. ONNX does not support scaling the gradients.r   z¢Warning: ONNX export of embedding with padding_idx >= 0 for training mode. ONNX does not support not updating the embedding vector at padding_idx during training.ÚGather)r   Zexport_trainingr   rd  ÚwarningsÚwarnr.  )r1  ÚweightÚindicesÚpadding_idxÚscale_grad_by_freqÚsparser  r  r   rK   õ  s    
ýÿzaten::embedding_bagc
           
      C  sF   t  |¡st  d¡S t  ¡ r:| jd|||d|||||	d�
S t  d|¡S )Nz%embedding_bag with per_sample_weightsrJ   é   )ÚoutputsZscale_grad_by_freq_iZmode_iZsparse_iZinclude_last_offset_iZpadding_idx_i)r   rô  rõ  rï  rð  )
r1  Zembedding_matrixr  Úoffsetsr  Úmoder  Zper_sample_weightsZinclude_last_offsetr  r  r  r   rJ     s$    
ÿöz
aten::size)Zquantize_outputc                 C  sh   |d kr|   d|¡S t |d¡dk rZt |¡}|d k	rZt |d¡| }| j dt |¡d�}t | ||¡S )Nr5  r…  r   r\  r]  )r.  r   r  r‡  r^  rý   Z_size_helper©r1  rB  rE   rü  r  r  r   ré   6  s    
zaten::transposec                 C  s€   ||kr|S t  |¡}|d k	rTtt|ƒƒ}|| ||  ||< ||< | jd||d�S t  ¡ rp| jd|d||d�S t d|¡‚d S )Nrú  rû  r  Úint)Úoverload_nameZdim0_iZdim1_izAUnsupported: ONNX export of transpose for tensor of unknown rank.)	r   r‡  r=  rÿ  r.  rï  rð  r   rd  )r1  rB  Zdim0Zdim1rü  r»  r  r  r   r  D  s    
þzaten::permuterÂ  c                 C  s*   |t tdt|ƒƒƒkr|S | jd||d�S rý  )r=  rÿ  rV  r.  )r1  rB  r  r  r  r   r´   ]  s    z
aten::viewc                 C  s   t | ||ƒS r  )rÛ   )r1  rB  ré   r  r  r   r  f  s    zaten::view_asc                 C  s   |   d|¡}t| ||ƒS r4  rC  rD  r  r  r   r  m  s    zaten::unsafe_chunkc           	      C  s„   |d krt  dddd|¡S t  ||¡}|d kr<t  dd|¡S || d | }|g||  }|| }|rp| |¡ | jd||||d�S )	Nr  r  rG  ú'Dynamic number of outputs not supportedúunknown dimension sizerH  ÚSplit©Zsplit_ir;  r  )r   rL  rŽ  rÑ  r(  r.  )	r1  rB  ÚchunksrE   Ú_outputsré   Ú
split_sizeÚsplitsÚleftoverr  r  r   r  t  s*        ÿ  ÿ
zaten::splitc           
      C  sÈ   t  ||¡st  dddd|¡S t  | ¡ d¡}| ¡ dkrJt| ||||ƒS t  |dd¡}t  ||¡}|d kr�|d k	r~|| }nt  dddd	|¡S |g||  }|| }	|	r´| 	|	¡ | j
d
||||d�S )Nrð   r  rG  r  r_  r   r…  r%  z$Unknown dimension size not supportedr!  r"  )r   Ú_is_split_staticrL  Ú	_node_getr�  rE   rï   rÇ  rŽ  r(  r.  )
r1  rB  Úsplit_size_or_sizesrE   r$  Z	split_valr%  ré   r&  r'  r  r  r   rð   ‰  s8        ÿ
    ÿ
zaten::unsafe_splitc                 C  s   t | ||||ƒS r  )rð   )r1  rB  r*  rE   r$  r  r  r   r  ¥  s    zaten::split_with_sizesc                 C  s2   t  ||¡st  dddd|¡S | jd||||d�S )Nrï   r  rG  r  r!  r"  )r   r(  rL  r.  ©r1  rB  Zsplit_sizesrE   r$  r  r  r   rï   ­  s        ÿzaten::unsafe_split_with_sizesc                 C  s   t | ||||ƒS r  )rï   r+  r  r  r   r  ¸  s    zaten::unbindc                   s^   |d krt  dddd|¡S ˆjd|dg| ˆ |d�}|dkrB|gn|}‡ ‡fdd	„|D ƒ}|S )
Nr  r  rG  r  r!  rH  r"  c                   s   g | ]}t  ˆ|ˆ g¡‘qS r  )r   Ú_squeeze_helper)r‰  rq  r•  r  r   r–  Ë  s    zunbind.<locals>.<listcomp>)r   rL  r.  )r1  rB  rE   r$  r  Zsqueezed_outputsr  r•  r   r  À  s        ÿÿzaten::selectc                 C  st   t  |¡}t  |¡s^|dk r^|dkr,tj}n|d }t j| ||g|g|gd�}t  | ||g¡S | jd|||d�S d S )Nr   r  rH  ©r»  r¼  r½  r  ©r;  )r   rN  rJ  r
   rº  Ú_slice_helperr,  r.  )r1  rB  rE   rm   Z	end_indexZ
slice_noder  r  r   rã   Ñ  s    
    ÿzaten::squarec                 C  s   |   d||¡S ©NrI  r6  r„  r  r  r   rò   å  s    zaten::squeezec                 C  sJ  |d kr|   d|¡S t |dd¡}|dk r†t |¡}|d k	rxt dt|ƒ d d d t|| ƒ d	 d
 ¡ ||7 }nt dd|¡S t ||¡}|d krÞt dt|ƒ d d t|ƒ d d d d ¡ tj	| ||gd�S |dk�rt dt|ƒ d d t|ƒ d d d d ¡ |S t dt|ƒ d d ¡ tj	| ||gd�S )NZSqueezer…  rE   r   z'ONNX export squeeze with negative axis ú- might cause the onnx model to be incorrect. ú(Negative axis is not supported in ONNX. úAxis is converted to ú& based on input shape at export time. úCPassing an tensor of different rank in execution will be incorrect.ró   ú%negative axis with unknown input rankz5This model contains a squeeze operation on dimension z on an input z7with unknown shape. Note that if the size of dimension z of the input zVis not 1, the ONNX model will return an error. Opset version 11 supports squeezing on zMnon-singleton dimensions, it is recommended to export this model using opset zversion 11 or higher.©r¹  rH  z. The size of z%this dimension in the given input is z. The model will zWbe exported without the squeeze node. If the model is intended to be used with dynamic z-input shapes, please use opset version 11 to zexport the model.z. If the model is z_intended to be used with dynamic input shapes, please use opset version 11 to export the model.)
r.  r   rÇ  r‡  r  r  r#  rÑ  rŽ  r,  )r1  rB  rE   Zsqueeze_dimrü  Údim_sizer  r  r   ró   ë  s¤    
ÿþýü
ûúùÿ

  ÿÿþýüûúùøÿ
ÿþýüûúùøÿÿþýÿzaten::preluc              	   C  sª   t  |¡}t  |¡}t|ƒ}|d k	rp|dkrJt  | |ttd|d ƒƒ¡}n&|dkrp|dgkrpt  | |dg¡}d}|d k	rœ|d k	rœ||ksœtd|› d|› �ƒ‚|  	d||¡S )Nr¢  rH  r   z)rank(x) should be >= rank(slope) but got z < ÚPRelu)
r   r‡  Ú_get_tensor_sizesrV  r”  r=  rÿ  r,  r�  r.  )r1  rB  r  Ú	self_rankZweight_sizesZweight_rankr  r  r   r¸   +  s&    

  ÿÿþz
aten::siluc                 C  s   |   d||   d|¡¡S )NrI  r·  r6  r7  r  r  r   rç   C  s    z
aten::mishc                 C  s   |   d||   d|   d|¡¡¡S )NrI  r®  ÚSoftplusr6  r7  r  r  r   r™   I  s    c              
   O  s  |  dd¡}|  dtjj¡}t|ƒ}tj |d ¡}t |d ¡ oT|dkpTtj	|k }|râ|D ]F}	|	 
¡ r^tj |	¡}
|
|kr^t d|› d| ¡ › d|
 ¡ › �|	¡‚q^t|ƒD ]2\}}	|	 
¡ r®t |	¡s®| jd|	| ¡ d	�||< q®| j|f|ž|Ž}|�r| jd|| ¡ d	�}|S )
a·  Some PyTorch operators (e.g., Clip/Min/ReLU/Pad) are super set of ONNX in terms of data types.
    This function maximizes the exportability of PyTorch-ONNX by allowing ONNX-unsupported PyTorch
    operator data type. For example, `Cast<int>(Clip<float>(Cast<float>(INPUT)))` can be used to mimic
    `Clip<int>(INPUT)` (opset version < 12).

    Args:
        g (torch._C.Graph): graph to write the ONNX representation into.
        op_name (str): operator name in ONNX.
        *args (tuple): operands to the operator.
        **kwargs (dict): attributes to the operator along with "opset_before" (optional, None by default)
            indicating the smallest opset version to trigger such casting behavior and "target_float_t"
            (optional, torch.onnx.JitScalarType.FLOAT by default) indicating the data type of internal operator.

    Returns:
        Optional[torch._C.Value, Tuple[torch._C.Value, ...]]: output(s) of the operator.
    Úopset_beforeNÚtarget_float_tr   z
Inputs of z must have same dtype.Got z and rf  rg  )Úpopr   rk  ro  r=  rl  r   rn  r   Úexport_onnx_opset_versionZisCompleteTensorr   rd  Zscalar_nameÚ	enumerater.  rp  )r1  Zop_namer  r  r=  r>  ÚinputsZdtype_0Zrequire_castr8  Zinput_scalar_typer…  rB  r  r  r   Ú_op_with_optional_float_castO  s6    ÿýýrC  z
aten::reluc                 C  s   t | d|dd�S )NÚRelué   ©r=  ©rC  r7  r  r  r   rÔ   …  s    zaten::relu6c                 C  s   t | |ddƒS )Nr   é   )r3   r7  r  r  r   rÕ   Œ  s    z
aten::ceilc                 C  s   |   d|¡S )NÚCeilr6  r7  r  r  r   r0   “  s    zaten::floorc                 C  s   |   d|¡S )Nrs  r6  r7  r  r  r   rW   ™  s    z	aten::lenc                 C  s.   t | || jdt dg¡d�ƒ}t | |dg¡S ©Nr\  r   r]  )ré   r.  r^  r  r   r,  )r1  rB  Zsz_0r  r  r   Ú_lenŸ  s    rK  zaten::thresholdc                 C  sD   t  |¡dkrt  dd|¡S t  |¡dkr8t  dd|¡S |  d|¡S )Nr   rþ   znon-zero thresholdznon-zero valuerD  )r   rM  rÑ  r.  )r1  rB  rþ   r_  r  r  r   rþ   ¦  s
    zaten::leaky_reluú_C.Valuer  ©r1  r8  Znegative_slopeZinplacec                 C  s   | j d||d�S )NÚ	LeakyRelu©r›  r6  rM  r  r  r   rv   ²  s    z	aten::gluc                 C  sP   t  ||¡}|d k	r$|d dks$t‚| jd||dd�\}}|  d||  d|¡¡S )Nr¢  r   r!  )r;  r  rI  r·  )r   rŽ  r�  r.  )r1  r8  rE   r8  ÚfirstÚsecondr  r  r   r`   À  s
    zaten::softmaxc              
   C  sb  t  |¡}|d k	rÔ|dk r"|| }||d k}|rptt|ƒƒ}|d ||  ||< |d< | jd||d�}|d }| jd||d�}|r¼| ¡  ¡ dkr¼t  |d	d
¡}| jd|t 	|¡ 
¡ d�}|rÐ| jd||d�}|S |  d|| jd||gdd�¡}|  d|¡}	t j| |	|gd�}
|  d|	|
¡}|�r^| ¡  ¡ dk�r^t  |d	d
¡}| jd|t 	|¡ 
¡ d�}|S )Nr   rH  r  rú  rû  ZSoftmaxr.  r-  r…  ru  rf  rg  rQ  Ú	ReduceMaxrÄ  ÚExpr7  re  )r   r‡  r=  rÿ  r.  r�  râ  rÇ  r   rk  rp  Ú_reducesum_helper)r1  r8  rE   ru  Ú	input_dimÚis_transpose_requiredr»  rë   Úparsed_dtyperP   rÖ  r  r  r   rë   Ì  sB    
ý  ÿzaten::softplusc                 C  s@   t  |d¡}|dkr4|  d|  d|  d||¡¡|¡S |  d|¡S )NrY  rH  re  r<  rI  )r   r  r.  )r1  rB  r¤  rþ   Z
beta_constr  r  r   rì     s     zaten::get_pool_ceil_paddingc                   sÜ   t  | ¡}|d k	r$|tˆƒ d … nd ‰ˆd ksBtdd„ ˆD ƒƒrPt  dd| ¡S ‡‡‡‡fdd„tdtˆƒƒD ƒ‰ ‡ ‡‡‡fdd„tdtˆ ƒƒD ƒ‰ ‡ ‡‡‡‡fd	d„tdtˆƒƒD ƒ‰‡‡‡fd
d„tdtˆƒƒD ƒ‰ˆS )Nc                 s  s   | ]}|d kV  qd S r  r  ©r‰  r…  r  r  r   r‹    s     z(get_pool_ceil_padding.<locals>.<genexpr>r_   úinput size not accessiblec              	     sB   g | ]:}t t ˆ | d ˆ|   ˆ|  tˆ| ƒ ¡ƒd ‘qS ©r¢  rH  )r  r³  r0   r  rX  )rE   Úkernel_sizeÚpaddingÚstrider  r   r–     s   þ0ÿz)get_pool_ceil_padding.<locals>.<listcomp>r   c                   sD   g | ]<}ˆ | d  ˆ|  ˆ| ˆ|  kr8ˆ | d  nˆ | ‘qS ©rH  r  rX  )Úceiled_output_dimrE   r\  r]  r  r   r–  &  s   þ"ÿc                   sP   g | ]H}ˆ| d krdn2ˆ| ˆ| dˆ|   ˆ | d  ˆ|  d    ‘qS )rH  r   r¢  r  rX  )r_  rE   r[  r\  r]  r  r   r–  ,  s   û
ÿ*ÿc                   sd   g | ]\}ˆ| d ˆ|   ˆ | krTˆ| ˆ | d k rDt ˆ| ƒq^t ˆ | d ƒn
t ˆ| ƒ‘qS rZ  ©r  rX  )r[  r\  Úpadding_ceilr  r   r–  6  s   þûÿý)r   r:  rV  ÚanyrÑ  rÿ  )r8  r[  r]  r\  Úsizesr  )r_  rE   r[  r\  ra  r]  r   r_     s*    
  ÿýüù
ø
zaten::max_pool1dZ
max_pool1drH  )Úreturn_indiceszaten::max_pool2dZ
max_pool2dr¢  zaten::max_pool3dZ
max_pool3dé   c              	     sD   t  dddddd¡t  dddddd¡tj‡ ‡‡‡fdd„ƒƒƒ}|S )NTFrX  rÂ  r…  c                   s<  t ˆ|ƒƒdhkr t ˆ d|¡S |s(|}tˆ|ƒƒ}|rdt||||ƒ}|tdd„ t||ƒD ƒƒ }n|d }ˆ|ƒ|ˆ|ƒdœ}ˆ�r| jd|fddi|—Ž\}	}
| jd|dd	d
„ tˆƒD ƒdd
„ tˆƒD ƒd�\}}tj| |dd
„ tˆƒD ƒt	ˆdƒƒt	ˆdƒƒd�}t
| |
|ƒ}
|	|
fS | jd|fddi|—Ž}	|	S d S )NrH  Údilationc                 s  s   | ]\}}|| V  qd S r  r  ©r‰  Úar  r  r  r   r‹  k  s     z1_max_pool.<locals>.symbolic_fn.<locals>.<genexpr>r¢  )Úkernel_shape_iÚpads_iÚ	strides_iÚMaxPoolr  c                 S  s   g | ]}d ‘qS r^  r  ©r‰  Ú_r  r  r   r–  †  s     z2_max_pool.<locals>.symbolic_fn.<locals>.<listcomp>c                 S  s   g | ]}d ‘qS r^  r  rm  r  r  r   r–  ‡  s     )r  ri  rk  c                 S  s   g | ]}d | ‘qS )r¢  r  rX  r  r  r   r–  �  s     r   r-  )Úsetr   rÑ  rÆ  r_   Úzipr.  rÿ  r/  r=  r÷   )r1  r8  r[  r]  r\  rf  Ú	ceil_modera  r  Úrr  rn  Zflattened_indicesr`  ©r%  Úndimsrd  Útuple_fnr  r   Úsymbolic_fn`  sB    ýû


ûz_max_pool.<locals>.symbolic_fn©r   rè  ré  r   rÍ  )r%  ru  rt  rd  rv  r  rs  r   Ú	_max_poolC  s
    4rx  zaten::max_pool1d_with_indiceszaten::max_pool2d_with_indiceszaten::max_pool3d_with_indiceszaten::avg_pool1dZ
avg_pool1dzaten::avg_pool2dZ
avg_pool2dzaten::avg_pool3dZ
avg_pool3dc                   sJ   t  d¡t  ddddddd¡tjdddddd	d	d
œ‡ ‡fdd„ƒƒƒ}|S )NTrX  rÂ  r…  rÞ  rL  úSequence[int]zUnion[int, Sequence[int]]r  )r8  r[  r]  r\  rq  Úcount_include_padc              	     s´   |s|}t  ˆ||||ˆ ¡}t|tƒs*t‚|}|r\t| d|d| d dddd�}dt|ƒ }|rŒt||||ƒ}	|td	d
„ t|	|ƒD ƒƒ }n|d }| j	d|ˆ|ƒˆ|ƒ|d�}
|
S )NÚPad)r   r   r¢  Úconstantr™  rG  ©rj  Úmode_sZvalue_fr=  ©r   c                 s  s   | ]\}}|| V  qd S r  r  rg  r  r  r   r‹  ñ  s    z1_avg_pool.<locals>.symbolic_fn.<locals>.<genexpr>ÚAveragePool)ri  rk  rj  )
r   Z_avgpool_helperr<  rÆ  r�  rC  rV  r_   rp  r.  )r1  r8  r[  r]  r\  rq  rz  Zdivisor_overrideZadjusted_paddingra  Úoutput©r%  ru  r  r   rv  Ë  sJ         ÿ
ù	
ÿûz_avg_pool.<locals>.symbolic_fn)Nrw  )r%  ru  rv  r  r‚  r   Ú	_avg_pool´  s    	 ø&1rƒ  zaten::adaptive_avg_pool1dZadaptive_avg_pool1dr€  zaten::adaptive_avg_pool2dZadaptive_avg_pool2dzaten::adaptive_avg_pool3dZadaptive_avg_pool3dzaten::adaptive_max_pool1dZadaptive_max_pool1drl  zaten::adaptive_max_pool2dZadaptive_max_pool2dzaten::adaptive_max_pool3dZadaptive_max_pool3dc                   s(   t  dd¡tj‡ ‡‡‡fdd„ƒƒ}|S )NTFc              	     s¨  ˆ}zt  ˆd¡‰W n  tk
r4   t  d|¡ Y S X ˆdgtˆƒ kr\ˆdkr\|  d|¡S t  |¡}z|dd … ‰ W n tk
rŽ   d ‰ Y nX ˆ d ksªtdd„ ˆ D ƒƒrÚˆdgtˆƒ krÌ|  d	|¡d fS t  ˆd
|¡S ‡ ‡fdd„t	dtˆ ƒƒD ƒ}|dgt|ƒ k�r>ˆdgtˆƒ k�r0|  d	|¡d fS t  ˆd|¡S ‡ ‡fdd„t	dtˆ ƒƒD ƒ}ˆdk�rŠˆ| |||dtˆ ƒ dtˆ ƒ dƒS | jˆ|ˆ|ƒˆ|ƒd�}|S )NrÂ  z4adaptive pooling, since output_size is not constant.rH  r€  ZGlobalAveragePoolr¢  c                 s  s   | ]}|d kV  qd S r  r  rX  r  r  r   r‹  a  s     z6_adaptive_pool.<locals>.symbolic_fn.<locals>.<genexpr>ZGlobalMaxPoolrY  c                   s   g | ]}ˆ | ˆ|  ‘qS r  r  rX  ©rE   Úoutput_sizer  r   r–  h  s     z7_adaptive_pool.<locals>.symbolic_fn.<locals>.<listcomp>r   z-output size that are not factor of input sizec                   s    g | ]}t ˆ | ˆ|  ƒ‘qS r  r`  rX  r„  r  r   r–  o  s     rl  r  r^  F)ri  rk  )
r   Ú
_parse_argÚ	Exceptionrõ  rV  r.  r:  rb  rÑ  rÿ  )r1  r8  r…  Zoutput_size_valuerc  r{  Úkr�  ©r  r%  ru  Útyper„  r   rv  C  sJ     ÿ


  ÿ  ÿ
$z#_adaptive_pool.<locals>.symbolic_fn)r   rè  r   rÍ  )r%  rŠ  ru  r  rv  r  r‰  r   Ú_adaptive_pool  s    A
1r‹  r  ©rE   c                 C  sF   t |dd… ƒdg| d t|ƒ   }|ddd… |ddd…  }|S )zèGenerate paddings in ONNX order based on pad in pytorch.
    Args:
        dim: the dimension of the tensor.
        pad: the paddings in pytorch.
            The order is dim_n_begin, dim_n_end, dim_n-1_begin, dim_n-1_end, ...
    Nr   r¢  éþÿÿÿr  )r=  rV  )rE   r²   Úpaddingsr  r  r   Ú_prepare_onnx_paddingsy  s    &r�  c              
   C  sh   t  | d¡}t  |¡rdt  |¡rdt  |¡}zdd„ |D ƒ}W n& tk
rb   t  dddd| ¡ Y S X |S )NrÂ  c                 S  s   g | ]}t  |d d¡‘qS )r…  r\  )r   rÇ  )r‰  rX  r  r  r   r–  ‘  s    z)_convert_padding_node.<locals>.<listcomp>r{  r  rG  z)The sizes of the padding must be constant)r   r  rJ  r  rŒ  r‡  rL  )r8  r\  Ú
input_listr  r  r   Ú_convert_padding_node‹  s     
ÿ
    ÿ
r‘  zaten::constant_pad_ndc              
   C  sl   d}zt  |dd¡}W n& tk
r<   t  dddd|¡ Y S X t|ƒ}tt  |¡|ƒ}t| d||||dd�S )	Nr|  rY  r_  r{  r  rG  z*The value for the padding must be constantr}  )r   rÇ  r‡  rL  r‘  r�  r‡  rC  )r1  r8  r\  r_  r  rŽ  r  r  r   r5   �  s,        ÿ
      ÿ)r1  r8  r²   c                 C  sH  t |ƒ}t|ƒd dkst‚t|ƒd }|}t|ƒD �]}|d| d   }|d| d   }g }	|dkr–tj| |d| g| gtjgd�}
|	 |
¡ |dk s¦|dk rît	 
d| ¡}t	 
d| ¡ }tj| |d| g|g|gd�}|	 |¡ n
|	 |¡ |dk�r*tj| |d| gdg|gd�}|	 |¡ | jd|	ždd| iŽ}q4|S )Nr¢  r   rH  r-  r:  r;  )r:  )r‘  rV  r�  rÿ  r   r/  r
   rº  r(  Úbuiltinsr”   r.  )r1  r8  r²   r\  r   ÚcurÚidxZpad_rZpad_lr’  ÚleftÚstartÚendÚmiddleÚrightr  r  r   Ú_pad_circular±  sP        ÿ
û

    ÿ
rš  zaten::reflection_pad1dzaten::reflection_pad2dzaten::reflection_pad3dc                 C  s0   d}t |ƒ}tt |¡|ƒ}t| d|||dd�S )NÚreflectr{  rG  ©rj  r~  r=  ©r‘  r�  r   r‡  rC  ©r1  r8  r\  r  rŽ  r  r  r   rÓ   Û  s         ÿzaten::replication_pad1dzaten::replication_pad2dzaten::replication_pad3dc                 C  s0   d}t |ƒ}tt |¡|ƒ}t| d|||dd�S )NÚedger{  rG  rœ  r�  rž  r  r  r   rÙ   è  s         ÿz	aten::pad©r1  r8  r²   r  r_  c                 C  st   t  |d¡}|dkr t| ||ƒS |dkr4t| ||ƒS |dkrJt| |||ƒS |dkr^t| ||ƒS t d|› �|¡‚d S )Nr`  Z	replicater›  r|  ZcircularzUnrecognized padding mode )r   r†  rÙ   rÓ   r5   rš  r   rd  r   r  r  r   r²   õ  s    	zaten::upsample_nearest1dZupsample_nearest1dZnearestzaten::upsample_nearest2dZupsample_nearest2dr  zaten::upsample_nearest3dZupsample_nearest3dé   zaten::upsample_linear1dZupsample_linear1dzaten::upsample_bilinear2dZupsample_bilinear2dzaten::upsample_trilinear3dZupsample_trilinear3d)r%  rE   Úinterpolate_modec                   s   ‡ ‡‡fdd„}|S )Nc                   sb   t  | ˆ|¡\}}t  ˆ¡ t  |¡}|r8t  ˆd|¡S |d krPt  | ||ˆ ¡}| jd||ˆd�S )Nzalign_corners == TrueÚUpsample©r~  )r   Z_get_interpolate_attributesZ_interpolate_warningrN  rÑ  Z_interpolate_size_to_scalesr.  )r1  r8  r…  r  ÚscalesÚalign_corners©rE   r¢  r%  r  r   rv  7  s"      ÿ

   ÿz!_interpolate.<locals>.symbolic_fnr  )r%  rE   r¢  rv  r  r§  r   Ú_interpolate  s    ,r¨  zaten::__interpolatec           	      C  s*   t  | |||||¡\}}| jd|||d�S )Nr£  r¤  )r   Z _interpolate_get_scales_and_moder.  )	r1  r8  ré   Zscale_factorr  r¦  Zrecompute_scale_factorZ	antialiasr¥  r  r  r   Ú__interpolateH  s         ÿr©  zaten::bitwise_notc                 C  s"   t  |¡st d|¡‚|  d|¡S ©NzOONNX export does NOT support exporting bitwise Not for non-boolean input valuesrw  ©r   rS  r   rd  r.  r7  r  r  r   r(   Z  s    
ýzaten::bitwise_orc                 C  s:   t  |¡st d|¡‚t  |¡s,t d|¡‚|  d||¡S )NzVONNX export does NOT support exporting bitwise OR for non-boolean input values. self: zWONNX export does NOT support exporting bitwise OR for non-boolean input values. other: ÚOrr«  rT  r  r  r   r)   f  s    
ý
ýc                   s   ‡ fdd„}|S )Nc                   s   t  ˆ ¡‡ ‡fdd„ƒ}|S )Nc                   s,   t ƒ dˆ› � }ˆ | || |dƒ|| |dƒƒS )NZ_cast_F)r&  )r1  r8  rE  Zto_cast_func)r  Úto_typer  r   Úwrap_with_cast{  s    zGwrap_logical_op_with_cast_to.<locals>.decorator.<locals>.wrap_with_cast©rÔ  rÕ  )r  r®  ©r­  r  r   Ú	decoratorz  s    z/wrap_logical_op_with_cast_to.<locals>.decoratorr  )r­  r±  r  r°  r   r  x  s    r   )r*  Úreturnc                   s   t  ˆ ¡‡ fdd„ƒ}|S )Nc                   s   |   dˆ | ||ƒ¡S )Nrw  r6  ©r1  r8  rE  r)  r  r   Úwrap_with_not‡  s    z4wrap_logical_op_with_negation.<locals>.wrap_with_notr¯  )r*  r´  r  r)  r   r  …  s    zaten::__not_c                 C  s"   t  |¡st d|¡‚|  d|¡S rª  r«  r„  r  r  r   Ú__not_Ž  s    
ýrµ  zaten::eqc                 C  sÆ   t | ¡ tjƒr:t | ¡ tjƒr:| jdtjdtjd�d�S | ¡ }| ¡ }| 	¡ | 	¡   krfdkr¸n nN| 
d¡| 
d¡  krŠdkr¸n n*| jdtj| d¡| d¡ktjd�d�S |  d||¡S )	Nr\  Trt  r]  rà  r_  r`  rx  )r<  rŠ  r	   ÚDeviceObjTyper.  r^  rý   rÜ  r�  râ  ÚkindOfr`  )r1  rB  rE  Z	self_nodeZ
other_noder  r  r   rN   š  s"     ÿ $þþzaten::nec                 C  s   t | ||ƒS r  )rN   rT  r  r  r   r¢   ¶  s    zaten::gtc                 C  s   t | ||ƒS r  ©Ú_gt_implr³  r  r  r   rb   ¾  s    c                 C  sJ   t  |¡r<t  |¡r<| jd|tjjd�}| jd|tjjd�}|  d||¡S )Nrf  rg  r°  ©r   rS  r.  rh  ri  ÚINT32r³  r  r  r   r¹  Å  s    r¹  zaten::ltc                 C  s   t | ||ƒS r  ©Ú_lt_implr³  r  r  r   r�   Í  s    c                 C  sJ   t  |¡r<t  |¡r<| jd|tjjd�}| jd|tjjd�}|  d||¡S )Nrf  rg  r²  rº  r³  r  r  r   r½  Ô  s    r½  zaten::gec                 C  s   t | ||ƒS r  r¼  r³  r  r  r   r]   Ü  s    zaten::lec                 C  s   t | ||ƒS r  r¸  r³  r  r  r   ru   ä  s    zaten::__and_c                 C  s:   t  |¡st d|¡‚t  |¡s,t d|¡‚|  d||¡S )NzOONNX export does NOT support exporting bitwise AND for non-boolean input valuesrR  r«  r³  r  r  r   Ú__and_ì  s    
ý
ýr¾  zaten::__or_c                 C  s:   t  |¡st d|¡‚t  |¡s,t d|¡‚|  d||¡S )NzNONNX export does NOT support exporting bitwise OR for non-boolean input valuesr¬  r«  r³  r  r  r   Ú__or_þ  s    
ý
ýr¿  zaten::__xor_c                 C  s:   t  |¡st d|¡‚t  |¡s,t d|¡‚|  d||¡S )NzOONNX export does NOT support exporting bitwise XOR for non-boolean input valuesrv  r«  r³  r  r  r   Ú__xor_	  s    
ý
ýrÀ  zaten::logical_andZBoolc                 C  s   |   d||¡S )NrR  r6  r³  r  r  r   r…   "	  s    zaten::logical_orc                 C  s   |   d||¡S )Nr¬  r6  r³  r  r  r   r‡   )	  s    zaten::logical_xorc                 C  s   |   d||¡S )Nrv  r6  r³  r  r  r   rˆ   0	  s    zaten::logical_notc                 C  s   |   d| j d|tjjd�¡S )Nrw  rf  rg  ©r.  rh  ri  ÚBOOLr7  r  r  r   r†   7	  s    zaten::__rshift_c                 C  s¢   t j |¡}t j |t jj¡|kr6| jd|| ¡ d�}| jdtjdtjd�d�}t	 
|¡sn| jd|tjjd�}|  d||¡}| jd|| ¡ d�}|  d||¡}|S )	Nrf  rg  r\  r¢  rt  r]  ÚPowre  ©r   rk  rl  rm  r.  rp  r^  rý   Úfloat32r   rn  rh  ri  ro  )r1  rB  rE  r¥  ÚtwoÚtwo_powÚrshiftr  r  r   Ú	__rshift_=	  s*    ÿÿý
ýrÉ  zaten::__lshift_c                 C  s¢   t j |¡}t j |t jj¡|kr6| jd|| ¡ d�}| jdtjdtjd�d�}t	 
|¡sn| jd|tjjd�}|  d||¡}| jd|| ¡ d�}|  d||¡}|S )	Nrf  rg  r\  r¢  rt  r]  rÃ  rI  rÄ  )r1  rB  rE  r¥  rÆ  rÇ  Úlshiftr  r  r   Ú	__lshift_[	  s*    ÿÿý
ýrË  zaten::wherec              	   C  s`   t  |¡s| jd|tjjd�}|d krPt| |ƒ}t  | || jdt 	d¡d�|¡S |  d|||¡S )Nrf  rg  r\  rH  r]  r±  )
r   rS  r.  rh  ri  rÂ  r©   Z_unbind_helperr^  rý   )r1  Ú	conditionrB  rE  r$  r  r  r   r  y	  s    

   ÿzaten::log_softmaxc           	      C  sà   t  |¡}|d krt  dd¡S |dk r.|| }||d k}|r|tt|ƒƒ}|d ||  ||< |d< | jd||d�}|d }| jd||d	�}|rÈ| ¡  ¡ d
krÈt  |dd¡}| jd|t	 
|¡ ¡ d�}|rÜ| jd||d�}|S )NrE   úfONNX and PyTorch use different strategies to split the input. Input rank must be known at export time.r   rH  r  rú  rû  Z
LogSoftmaxr.  r-  r…  ru  rf  rg  )r   r‡  rÑ  r=  rÿ  r.  r�  râ  rÇ  r   rk  rp  )	r1  r8  rE   ru  rU  rV  r»  Z	return_oprW  r  r  r   r€   ˆ	  s2    
þ  ÿzaten::_log_softmaxc                 C  s>   |r2t j |t jj¡t jjkr2| jd|tjjd�}t	| ||ƒS r¿  )
r   rk  rl  rm  ÚHALFr.  rh  ri  ro  r€   )r1  r8  rE   Zhalf_to_floatr  r  r   Ú_log_softmaxª	  s    ÿ ÿýþrÏ  zaten::_convolutionc                 C  s"  t  |¡}z|dd … }W n tk
r2   d }Y nX |d ksNtdd„ |D ƒƒrZt d|¡‚||g}t  |¡s„t  |¡dkr„| |¡ |dd … ||| ||	dœ}tdd„ |D ƒƒrÖ|sºt	‚t
|ƒt
|ƒksÎt	‚||d< | j|râd	nd
f|ž|Ž}t  |¡�st  |¡dk�r|  d||¡S |S d S )Nr¢  c                 s  s   | ]}|d kV  qd S r  r  rX  r  r  r   r‹  Ö	  s     z_convolution.<locals>.<genexpr>úDUnsupported: ONNX export of convolution for kernel of unknown shape.rH  )ri  rk  rj  Údilations_iÚgroup_ic                 s  s   | ]}|d kV  qdS r†  r  )r‰  Úor  r  r   r‹  î	  s     Zoutput_padding_iZConvTransposeÚConvrF  )r   r:  r‡  rb  r   rd  rô  r‡  r(  r�  rV  r.  )r1  r8  r  Úbiasr]  r\  rf  Ú
transposedÚoutput_paddingÚgroupsZ	benchmarkZdeterministicÚcudnn_enabledZ
allow_tf32Úweight_sizeÚkernel_shaper  r  r2  r  r  r   Ú_convolution¹	  sB    

þÿþ

ù
ÿþrÜ  zaten::_convolution_modec                 C  sô   t  |¡}z|dd … }	W n tk
r2   d }	Y nX |	d ksNtdd„ |	D ƒƒrZt d|¡‚||g}
t  |¡s„t  |¡dkr„|
 |¡ |dkr’d}n|dkržd	}|dd … ||||d
œ}| j	d|
ž|Ž}t  |¡sìt  |¡dkrì|  	d||¡S |S d S )Nr¢  c                 s  s   | ]}|d kV  qd S r  r  rX  r  r  r   r‹  
  s     z$_convolution_mode.<locals>.<genexpr>rÐ  rH  ÚvalidZVALIDÚsameZ
SAME_UPPER)ri  rk  Z
auto_pad_srÑ  rÒ  rÔ  rF  )rÔ  )
r   r:  r‡  rb  r   rd  rô  r‡  r(  r.  )r1  r8  r  rÕ  r]  r\  rf  rØ  rÚ  rÛ  r  r  r2  r  r  r   Ú_convolution_mode
  sB    

þÿþ

ûÿþrß  zaten::convolutionc
           
      C  s"   t | |||||||||	d d d d ƒS r  ©rÜ  )
r1  r8  r  rÕ  r]  r\  rf  rÖ  r×  rØ  r  r  r   r?   C
  s     òzaten::conv1dc           	      C  s\   t  |d¡}|dkr*t| |||||||ƒS t  |d¡}t| ||||||dd|d d d d ƒS d S ©Nr`  )rÝ  rÞ  rÂ  Fr  ©r   r†  rß  rÜ  ©	r1  r8  r  rÕ  r]  r\  rf  rØ  Zstr_paddingr  r  r   r;   d
  s:    øòzaten::conv2dc           	      C  s\   t  |d¡}|dkr*t| |||||||ƒS t  |d¡}t| ||||||dd|d d d d ƒS d S rá  râ  rã  r  r  r   r<   Š
  s:    øòzaten::conv3dc           	      C  s\   t  |d¡}|dkr*t| |||||||ƒS t  |d¡}t| ||||||dd|d d d d ƒS d S rá  râ  rã  r  r  r   r=   °
  s:    øòzaten::conv_transpose1dc	           	      C  s"   t | ||||||d||d d d d ƒS ©NTrà  ©	r1  r8  r  rÕ  r]  r\  r×  rØ  rf  r  r  r   r8   Ö
  s     òzaten::conv_transpose2dc	           	      C  s"   t | ||||||d||d d d d ƒS rä  rà  rå  r  r  r   r9   ö
  s     òzaten::conv_transpose3dc	           	      C  s"   t | ||||||d||d d d d ƒS rä  rà  rå  r  r  r   r:     s     òzaten::batch_normc
                 C  sæ   t  |d¡ t ¡ rDt  |||||g¡sDtjdk rDt  dddd|¡S t  | |||||¡\}}}}| j	d||||||d| |s€dndd�	}
|s�|
S |
\}}}}}| 
| ¡ ¡ | 
| ¡ ¡ | d	| ¡  ¡ | d	| ¡  ¡ |S d S )
Nr&   é   ZBatchNormalizationr  zaAll input tensors must have the same `dtype`. Turn off Autocast or export using opset version 15.rH  r¡  )Ú	epsilon_fZ
momentum_fr  zbatch_norm_dead_output-)r   Úcheck_training_moder^  Zis_autocast_enabledZargs_have_same_dtyper   r@  rL  Z_batchnorm_helperr.  r/  rŠ  ZsetDebugNameZ	debugName)r1  r8  r  rÕ  Úrunning_meanÚrunning_varÚtrainingÚmomentumÚepsrÙ  rq  ÚresZnew_running_meanZnew_running_varZ
saved_meanZ	saved_varr  r  r   r&   6  sV    ÿÿþûú	     ÿ
÷zaten::native_layer_normry  z#Tuple[_C.Value, _C.Value, _C.Value])r1  r8  Únormalized_shaper  rÕ  rí  r²  c                 C  sv  dd„ t t|ƒddƒD ƒ}t | d¡}t | |¡}| jd||d�}	t| ||	ƒ}
tj |
¡tjj	k}|rŒtj |¡}| jd|
t |¡ 
¡ d	�}
| jdt| |
|ƒ|d�}t| |  d
||¡ƒ}|  d|
|¡}|rðtj |¡}| jd|t |¡ 
¡ d	�}|d k�st |¡�st| ||ƒ}|d k�s4t |¡�s4t| ||ƒ}|�rb| jd|t |¡ 
¡ d	�}|  d|¡}n
t| |ƒ}||	|fS )Nc                 S  s   g | ]
}| ‘qS r  r  rX  r  r  r   r–  |  s     z%native_layer_norm.<locals>.<listcomp>r   r  ç       @r×  r7  rf  rg  rF  re  rƒ  )rÿ  rV  r   Z_generate_wrapped_numberr.  r÷   r   rk  rl  rÎ  rp  r·   rñ   rô  r�   r   rÒ   )r1  r8  rï  r  rÕ  rí  r»  Ztwo_cstZeps_cstrØ  Ú	numeratorZis_type_halfZ	eps_dtypeZvarianceÚdenominatorÚ
normalizedZinput_dtypeZrdenominatorr  r  r   r¡   p  sN    
ÿÿ  ÿ  ÿ  ÿ
zaten::layer_norm)r1  r8  rï  r  rÕ  rí  Úcudnn_enabler²  c           	   	   C  s<   t  ¡ r | jd||||||d�S t| |||||ƒ\}}}|S )Nrt   )Znormalized_shape_iÚeps_fZcudnn_enable_i)r   rï  rð  r¡   )	r1  r8  rï  r  rÕ  rí  rô  ró  rn  r  r  r   rt   ®  s    ù	zaten::instance_normr   )r1  Úuse_input_statsrì  rí  rÙ  c
                 C  s,  t  |d¡ t  |d¡}
|d ks*t  |¡rl|
d kr>t d|¡‚tjdg|
 tj	 
|¡ ¡ d�}| jd|d�}|d ks~t  |¡rÀ|
d kr’t d|¡‚tjdg|
 tj	 
|¡ ¡ d�}| jd|d�}|d ksät  |¡sä|d ksät  |¡rø| jd	||||d
�S t  |¡}| ¡ }|d }|d k�r(t d|¡‚|d }d|d< || |d< t| || jdtj|gtjd�d�ƒ}t| || jdtj|gtjd�d�ƒ}t| || jdtj|gtjd�d�ƒ}t| || jdtj|gtjd�d�ƒ}|  d|| jdt |¡d�¡}t| |||||||||	ƒ
}t| || jdt |¡d�ƒS d S )Nrn   rH  zCUnsupported: ONNX export of instance_norm for unknown channel size.rZ  rt  r\  r]  r™  ÚInstanceNormalization©rç  r   zJUnsupported: ONNX export of instance_norm training for unknown batch size.ZReshape)r   rè  rŽ  rô  r   rd  r^  rý   r   rk  rl  ru  r.  r:  ÚcopyrØ   ry  r  r&   r  )r1  r8  r  rÕ  ré  rê  rö  rì  rí  rÙ  Úchannel_sizeÚweight_valueÚ
bias_valueÚ
input_sizeZinput_size_reshaper2  ÚcÚweight_Úbias_Zrunning_mean_Zrunning_var_Úinput_reshapedrq  r  r  r   rn   É  s¤    þþþþÿþýü

ý  ÿ  ÿýýýözaten::unfoldc                   sî   t  ¡ rˆjdˆˆ ||d�S t  ˆ¡}z|ˆ  }W n tk
rJ   d }Y nX |d k	rÜtd||ƒ}t||d |ƒ}‡ ‡‡fdd„t||ƒD ƒ}	t|ƒ}
ttd|
ƒƒ‰ˆ 	ˆ 
ˆ ¡¡ ‡ ‡‡fdd„|	D ƒ}ˆjd|žd	ˆ iŽS t  d
dˆ¡S d S )Nr  )Zdimension_iZsize_iZstep_ir   rH  c              	     s*   g | ]"\}}t jˆˆˆ g|g|gd �‘qS )r-  ©r   r/  )r‰  ÚlowÚhi)Ú	dimensionr1  r8  r  r   r–  <  s   ý    ÿzunfold.<locals>.<listcomp>c              
     s(   g | ] }t  ˆˆjd |ˆd�ˆ g¡‘qS )rú  rû  )r   r”  r.  rˆ  )r  r1  r  r  r   r–  E  s   ý  ÿr:  r;  ZUnfoldrY  )r:  )r   rï  rð  r:  r‡  rÿ  rp  rV  r=  r(  r?  r.  rÑ  )r1  r8  r  ré   Ústeprc  ZsizedimZlow_indicesZ
hi_indicesrô   r   r	  r  )r  r1  r8  r  r   r  +  s2    

üü  ÿz	aten::eluc                 C  sJ   |r|dkrt  dd|¡S |r4|dkr4t  dd|¡S | jd|t  |¡d�S )NrZ  r­  zdoes not support scale in EluÚinput_scalez#does not support input_scale in EluÚElurO  )r   rÑ  r.  rM  )r1  r8  rP  r­  r  r  r  r   rI   R  s      ÿ  ÿz
aten::seluc                 C  s   |   d|¡S )NZSelur6  r7  r  r  r   rä   c  s    zaten::index_selectc                 C  s   t  | |||¡S r  )r   Ú_select_helper)r1  rB  rE   rm   r  r  r   rl   j  s    zaten::index_putc                 C  s„   t  |¡rt  |¡}n|g}t  ¡ rD|g| ||g }| jd|žŽ S t  |d¡}t|ƒdkrp|rlt| ||ƒS |S t  ddd|¡ d S )Nrk   r  r   r  rG  )rk   )	r   r  rŒ  rï  rð  r†  rV  r   rñ  )r1  rB  Zindices_list_valueÚvaluesÚ
accumulateZindices_listr  r  r  r   rk   t  s    
zaten::index_fillc           	      C  sr   t  |d¡}t  ¡ r*| jd|||d|d�S t  | |||¡\}}t  |¡}t  ||¡}t| ||d ƒ}t| ||||ƒS )Nr…  rj   Z
int_Scalar)r  rî  )	r   r†  rï  rð  Ú_index_fill_reshape_helperrN  r«  rR   râ   )	r1  rB  rE   rm   r_  Ú	dim_valueÚexpanded_index_shapeÚexpanded_indexZexpanded_valuer  r  r   rj   ˆ  s(    ú	   ÿ
zaten::index_copyc                 C  sL   t  |d¡}t  ¡ r(| jd||||d�S t  | |||¡\}}t| ||||ƒS )Nr…  ri   rí  )r   r†  rï  rð  r  râ   )r1  rB  rE   rm   Úsourcer  r  r  r  r  r   ri      s       ÿzaten::bucketizec                 C  s¸   t jj}|rt jj}| jd|  d|¡|  d|¡dd�}t |¡}|d k	sLt‚tt	d|d ƒƒ}t
| t | ||¡|d ƒ}	|rˆt| ||	ƒ}
nt| ||	ƒ}
| jd|
|d�}tj| |dgdd�S )	Nr:  r5  r   r.  rH  rf  rg  rÄ  )rh  ri  rj  r»  r.  r   r‡  r�  r=  rÿ  rR   r”  r]   rb   rT  )r1  rB  Z
boundariesZ	out_int32r™  Zout_typeÚ	new_shapeZtensor_rankZunsqueeze_axesZexpanded_boundariesÚcondZcond_outr  r  r   r-   ¬  s$    "
ü
zaten::type_asc                 C  sj   t  |¡}t  |¡}||kr(|d k	r(|S |d k	rD| jd|| ¡ d�S t  ¡ rZ|  d||¡S t d|¡‚d S )Nrf  rg  r  z–Unsupported: ONNX export of type_as for tensor of unknown dtype. Please check if the dtype of the parameter passed to the type_as function is correct.)r   r£  r.  rp  rï  rð  r   rd  )r1  rB  rE  Ú
self_dtypeZother_dtyper  r  r   r  Ò  s     

ýüzaten::cosine_similarityc           	      C  s¨   t  ¡ r| jd||||d�S t j| t| ||ƒ|gdd�}t j| t| ||ƒ|gdd�}t j| t| ||ƒ|gdd�}t| t| t| ||ƒƒ| jdt 	|g¡d�ƒ}t
| ||ƒS )NrA   )rî  rõ  r   rÄ  r\  r]  )r   rï  rð  rT  r�   r”   rñ   r.  r^  rý   rF   )	r1  Úx1Úx2rE   rí  rB   Zx1_l2Zx2_l2Zdiv_tensr  r  r   rA   ì  s4     
  ÿ 
  ÿ 
  ÿ  ÿzaten::pairwise_distancec                 C  s„   t  |¡s | jdt |g¡d�}t| | jdtjdgtjd�d�t| ||ƒƒ}t j| t	| t
| ||ƒ|ƒdgt  |d¡d�}t	| ||ƒS )Nr\  r]  rH  rt  r  r…  rÄ  )r   rJ  r.  r^  rý   rF   r  r   rT  r·   r÷   r†  )r1  Zinput1Zinput2Úprí  rÃ  Zinv_pZ	summationr  r  r   r³     s    

ý
üzaten::clonec                 C  s   |S r  r  )r1  r8  Zunused_memory_formatr  r  r   r4     s    z	aten::absc                 C  s   |   d|¡S )NÚAbsr6  r„  r  r  r   r     s    z	aten::logc                 C  s   |   d|¡S )NÚLogr6  r„  r  r  r   r�   !  s    zaten::log1pc              	   C  s    t | t| t t d¡|¡|ƒƒS )NrH  )r�   r   r   r«  r^  r¯   r„  r  r  r   rƒ   '  s    zaten::log10c              	   C  s*   d}|   dt| |ƒ| j dt |g¡d�¡S )NgUµ»±k@re  r\  r]  ©r.  r�   r^  rý   )r1  rB  Z_ln10r  r  r   r‚   -  s    z	aten::powc                 C  sb   t j |¡}t |¡s2t jj}| jd|| ¡ d�}t |¡sP| jd|| ¡ d�}|  d||¡}|S )Nrf  rg  rÃ  )r   rk  rl  r   rn  ro  r.  rp  )r1  rB  ÚexponentZf_dtyper·   r  r  r   r·   4  s    

ýzaten::clampc              	   C  s|   t  |¡rt| ||ƒS t  |¡r,t| ||ƒS t  |¡rdt  |¡rdt| d|t  |d¡t  |d¡dd�S t| t| ||ƒ|ƒS d S )NÚCliprY  é   ©Úmin_fÚmax_fr=  )r   rô  r1   r2   r�  rC  r†  )r1  rB  r—   r”   r  r  r   r3   E  s    



ú	zaten::clamp_minc                 C  sZ   t  |¡r$t| d|t  |d¡dd�S tj |¡}| jd|| ¡ d�}t| d||dd�S d S )	Nr  rY  r  )r  r=  rf  rg  ÚMaxrF  ©	r   r�  rC  r†  r   rk  rl  r.  rp  )r1  rB  r—   ru  r  r  r   r2   \  s    
   
 ÿzaten::clamp_maxc                 C  sZ   t  |¡r$t| d|t  |d¡dd�S tj |¡}| jd|| ¡ d�}t| d||dd�S d S )	Nr  rY  r  )r  r=  rf  rg  ÚMinrF  r!  )r1  rB  r”   ru  r  r  r   r1   j  s    
   
 ÿz	aten::maxc                 C  sˆ   |d kr |d kr | j d|dd�S |d kr:t| d||dd�S t |dd¡}t |dd	¡}| j d||g|d
�}| j d|||d�}||fS d S )NrR  r   ©rÅ  r   r  rF  r…  rE   rÃ  rÄ  ÚArgMax©r;  rÅ  ©r.  rC  r   rÇ  )r1  rB  Údim_or_yrÃ  rE   r”   r  r  r  r   r”   x  s    zaten::maximumc                 C  s   t | ||d�S ©N)r'  )r”   r³  r  r  r   r•   �  s    z	aten::minc                 C  sˆ   |d kr |d kr | j d|dd�S |d kr:t| d||dd�S t |dd¡}t |dd	¡}| j d||g|d
�}| j d|||d�}||fS d S )NÚ	ReduceMinr   r#  r"  r  rF  r…  rE   rÃ  rÄ  ÚArgMinr%  r&  )r1  rB  r'  rÃ  rE   r—   r  r  r  r   r—   ”  s    zaten::minimumc                 C  s   t | ||d�S r(  )r—   r³  r  r  r   r˜   §  s    z
aten::amaxc                 C  s   | j d|||d�S )NrR  rÄ  r6  ©r1  rB  rE   rÃ  r  r  r   r   ®  s    z
aten::aminc                 C  s   | j d|||d�S )Nr)  rÄ  r6  r+  r  r  r   r   ¶  s    zaten::aminmaxc                 C  sJ   d|i}t  |¡s*t  |dd¡}|g|d< | jd|f|Ž| jd|f|ŽfS )NrÅ  r…  rE   r¹  r)  rR  )r   rô  rÇ  r.  )r1  rB  rE   rÃ  Zreduce_kwargsr  r  r   r   ¾  s    

 ÿÿz	aten::expc                 C  s   |   d|¡S )NrS  r6  r„  r  r  r   rP   Í  s    zaten::dropout_zaten::dropoutc                 C  s.   t  |d¡ |s|S | jd||dd�\}}|S )NrH   ZDropoutr¢  )Zratio_fr  )r   rè  r.  )r1  r8  r  Útrainrr  rn  r  r  r   rH   Ó  s
    zaten::alpha_dropout_zaten::feature_alpha_dropout_zaten::feature_dropout_zaten::feature_alpha_dropoutzaten::alpha_dropoutzaten::feature_dropoutc                   s$   t  ddd¡tj‡ fdd„ƒƒ}|S )NrX  rÞ  r  c                   s   |rt  ˆ d|¡S |S )Nztraining mode)r   rÑ  )r1  r8  r  r,  r$  r  r   Úfeature_dropoutô  s    z-_unsupported_dropout.<locals>.feature_dropout©r   ré  r   rÍ  )r%  r-  r  r$  r   Ú_unsupported_dropoutà  s    r/  z
aten::normc                 C  st   |dkrt dƒ}n|dkr$t dƒ}nt d|¡‚|| |||d�}|d k	rpt |dd¡}| jd	|t |¡ ¡ d
�}|S )NrH  ZReduceL1r¢  ZReduceL2z)ONNX export only p-norms with p of 1 or 2)rE   rÃ  r…  ru  rf  rg  )	rÎ  r   rd  r   rÇ  r.  r   rk  rp  )r1  rB  r  rE   rÃ  ru  rY  r¶  r  r  r   rª   ÿ  s    

 ÿzaten::conv_tbcc              	   C  s~   t  ¡ r| jd||||d�S | jd|dddgd�}| jd|dddgd�}t| |||dg|gdgdƒ}| jd|dddgd�S d S )Nr7   )Zpad_irú  rH  r¢  r   rû  )r   rï  rð  r.  r;   )r1  r8  r  rÕ  r²   Úconvr  r  r   r7     s    zaten::_uniquec                 C  s,   t  ¡ r| jd|||dd�S t  d|¡S d S )NÚ_uniquer¢  )Úsorted_iÚreturn_inverse_ir  )r   rï  rð  rõ  )r1  r8  ÚsortedÚreturn_inverser  r  r   r1  $  s    ûr1  zaten::_unique2c                 C  s2   t  ¡ r| jd||||dd�S t  ddd|¡ d S )NÚ_unique2re  )r2  r3  Zreturn_counts_ir  r  rG  )r   rï  rð  rñ  )r1  r8  r4  r5  Zreturn_countsr  r  r   r6  4  s    ú	r6  zaten::_cast_Bytez2.0z
the futurez8Avoid using this function and create a Cast node insteadc                 C  s   | j d|tjjd�S r¿  )r.  rh  ri  r§  ©r1  r8  Znon_blockingr  r  r   Ú
_cast_ByteE  s    r8  zaten::_cast_Charc                 C  s   | j d|tjjd�S r¿  )r.  rh  ri  r¨  r7  r  r  r   Ú
_cast_CharP  s    r9  zaten::_cast_Shortc                 C  s   | j d|tjjd�S r¿  )r.  rh  ri  r©  r7  r  r  r   Ú_cast_Short[  s    r:  zaten::_cast_Intc                 C  s   | j d|tjjd�S r¿  )r.  rh  ri  r»  r7  r  r  r   Ú	_cast_Intf  s    r;  zaten::_cast_Longc                 C  s   | j d|tjjd�S r¿  )r.  rh  ri  rj  r7  r  r  r   Ú
_cast_Longq  s    r<  zaten::_cast_Halfc                 C  s   | j d|tjjd�S r¿  )r.  rh  ri  ZFLOAT16r7  r  r  r   Ú
_cast_Half|  s    r=  zaten::_cast_Floatc                 C  s   | j d|tjjd�S r¿  )r.  rh  ri  ro  r7  r  r  r   Ú_cast_Float‡  s    r>  zaten::_cast_Doublec                 C  s   | j d|tjjd�S r¿  )r.  rh  ri  r‚  r7  r  r  r   Ú_cast_Double’  s    r?  zaten::_cast_Boolc                 C  s   | j d|tjjd�S r¿  rÁ  r7  r  r  r   Ú
_cast_Bool�  s    r@  zaten::emptyc                 C  s   t | |||||ƒS r  )r  )r1  rc  ru  ÚlayoutÚdeviceÚ
pin_memoryÚmemory_formatr  r  r   rM   ¨  s    zaten::empty_likec                 C  s   t | |||||ƒS r  )r  )r1  r8  ru  rA  rB  rC  rD  r  r  r   rL   ·  s    zaten::new_emptyc                 C  s2   t  |¡}t  |¡r |d k	r |}t| |||||ƒS r  )r   r£  rô  rM   ©r1  rB  rc  ru  rA  rB  rC  r  r  r  r   r¤   Æ  s    
zaten::scalar_tensorc                 G  s<   t  |dd¡}|d krtjj}| jd|t |¡ ¡ d�}|S )Nr…  ru  rf  rg  )r   rÇ  r   rk  ro  r.  rp  )r1  Zscalarru  Úoptionsr  r  r   rà   Ñ  s
    zaten::tensorc                 C  s  t  |dd¡}t  |¡r¨|d kr6tj t  |¡d ¡}tƒ }t  |¡D ]L}| jdt	 
dg¡d�}t  | ||¡}| jd|t |¡ ¡ d�}| |¡ qF| jd|žd
diŽS |d kr¼tj |¡}t  |¡rìt  |¡sÚt  |¡rì| jd|ddd�}| jd|t |¡ ¡ d�S )Nr…  ru  r   r\  rH  r]  rf  rg  r:  r;  ZConcatFromSequence)r;  Z
new_axis_i)r:  )r   rÇ  r  r   rk  rl  rŒ  r=  r.  r^  r  r@  rp  r(  Z_is_listrK  Z_is_scalar_list)r1  Údataru  rB  Úrequires_gradr�  rø   Zshape_referencer  r  r   rý   Û  s,    
ÿ
ÿþzaten::as_tensorc                 C  s   t | |||ƒS r  )rý   )r1  rG  ru  rB  r  r  r   r!   ø  s    zaten::zerosc                 C  sz   |d krt jj}n
t  |¡}t |d¡}t|tƒrZt|ƒdkrZ| jdt	 
g ¡ t	j¡d�}| jd|t	j
dg| ¡ d�d�S )NrÂ  r   r\  r]  ÚConstantOfShapert  ©r   rk  ro  r   r  r<  r=  rV  r.  r^  rý   rÿ   ry  ru  ©r1  rc  ru  rA  rB  rC  rr  Úsizes_r  r  r   r  þ  s    

ýzaten::zeros_likec           	      C  sT   |   d|¡}t |¡r*tj |tjj¡}n
t |¡}| j d|tjdg| 	¡ d�d�S )Nr5  rI  r   rt  r]  ©
r.  r   rô  r   rk  rl  ro  r^  rý   ru  ©	r1  r8  ru  rA  rB  rC  rD  r>  rr  r  r  r   r    s    
 ÿ
ýzaten::new_zerosc                 C  s2   t  |¡}t  |¡r |d k	r |}t| |||||ƒS r  )r   r£  rô  r  rE  r  r  r   r§   +  s    
z
aten::zeroc                 C  s   t  |¡}t| ||ƒS r  )r   r£  r  )r1  rB  r  r  r  r   r  7  s    
z
aten::onesc                 C  sz   |d krt jj}n
t  |¡}t |d¡}t|tƒrZt|ƒdkrZ| jdt	 
g ¡ t	j¡d�}| jd|t	j
dg| ¡ d�d�S )NrÂ  r   r\  r]  rI  rH  rt  rJ  rK  r  r  r   r¯   >  s    

ýzaten::ones_likec           	      C  sT   |   d|¡}t |¡r*tj |tjj¡}n
t |¡}| j d|tjdg| 	¡ d�d�S )Nr5  rI  rH  rt  r]  rM  rN  r  r  r   r®   P  s    
 ÿ
ýzaten::new_onesc                 C  s2   t  |¡}t  |¡r |d k	r |}t| |||||ƒS r  )r   r£  rô  r¯   rE  r  r  r   r¦   j  s    
z
aten::fullc              	   C  sä   t  |d¡}t  |¡rX|d kr&tjjn|}t| ||||ƒ}t| ||| jdt	 
d¡d�ƒS t  |dd¡}|d krxtjj}	n
t |¡}	t  |d¡}
t|
tƒrÀt|
ƒdkrÀ| jdt	 
g ¡ t	j¡d�}| jd	|| d¡ |	 ¡ ¡d�S d S )
Nrø   r\  rH  r]  r…  ru  rÂ  r   rI  )r   r  rJ  r   rk  ro  r  r   r.  r^  rý   rÇ  r<  r=  rV  rÿ   ry  r  ru  )r1  rc  r_  ru  rA  rB  rC  Úconst_valueÚtmprr  rL  r  r  r   r[   u  s"    


ýzaten::full_likec              	   C  s¼   t  |d¡}t  |dd¡}|d kr6tj |tjj¡}n
t |¡}t  |¡rŒt| ||||ƒ}	| j	d|| 
¡ d�}t| |	|| j	dt d¡d�ƒS |  	d	|¡}
| j	d
|
tj|g| ¡ d�d�S d S )NrY  r…  ru  rf  rg  r\  rH  r]  r5  rI  rt  )r   r  rÇ  r   rk  rl  ro  rJ  r  r.  rp  r   r^  rý   ru  )r1  r8  Ú
fill_valueru  rA  rB  rC  rD  rr  rP  r>  r  r  r   rZ   �  s$     ÿ

ýzaten::new_fullc           	      C  s4   t  |¡}t  |¡r |d k	r |}t| ||||||ƒS r  )r   r£  rô  r[   )	r1  rB  ré   rQ  ru  rA  rB  rC  r  r  r  r   r¥   °  s    
ú	aten::eyec                 G  sÒ   t |ƒdkrX|\}}}}}t | |dg¡}| jd||dd�}t| ||||ƒ}	|  d|	¡S t |ƒdkrº|\}}
}}}}| jdt | |dg¡t | |
dg¡dd�}t| ||||ƒ}	|  d|	¡S t ddt |ƒ› d	�¡S )
Nr¡  r   r:  r.  ZEyeLikerH  rR  rÏ  rÐ  )rV  r   r”  r.  r  rÑ  )r1  r  r2  ru  rA  rB  rC  r8  r>  rý   Úmr  r  r   rS   Â  s"    üúaten::slicec                 G  s2  t |ƒdk�rr|\}}}}t |d¡}|dkr:t d|¡‚| ¡  ¡ dkoXt| ¡ t	j
ƒ}| ¡  ¡ dkoxt| ¡ t	j
ƒ}| ¡  ¡ dk}	| ¡  ¡ dk}
|s¢|	r¼|sª|
r¼| ¡  ¡ dk�rtjtjjkrØt d|¡‚nBt | |dg¡}t | |dg¡}t | |dg¡}|  d	||||¡S nT|�r&dn
t |d¡}|�r>tjn
t |d¡}t |d¡}tj| ||g|g|gd
�S n¨t |ƒdk�r|\}}}d}| ¡  ¡ dk�o®t| ¡ t	j
ƒ}| ¡  ¡ dk�oÐt| ¡ t	j
ƒ}|�rÜdn
t |d¡}|�rôtjn
t |d¡}tj| ||g|g|gd
�S t ddt |ƒ› d�¡S )Nr  r…  rH  z"step!=1 is currently not supportedr-  rà  z³Unsupported: ONNX export of Slice with dynamic inputs. DynamicSlice is a deprecated experimental op. Please use statically allocated variables or export to a higher opset version.r   ZDynamicSlicer-  re  rT  rÏ  rÐ  )rV  r   r†  r   rd  r�  râ  r<  rŠ  r	   ZNoneTyper   Úoperator_export_typerh  ZOperatorExportTypesZONNXr”  r.  r
   rº  r/  rÑ  )r1  rB  r  rE   r–  r—  r  Zis_start_noneZis_end_noneZis_start_onnx_constZis_end_onnx_constZstart_unsqueezedZend_unsqueezedZdim_unsqueezedr  r  r   rê   Û  sš     ÿ ÿÿÿþþýüûÿ

ý    ÿ
 ÿ ÿÿ

ý    ÿzaten::hardtanh©r1  rB  Zmin_valZmax_valc                 C  s   t | d|||dd�S )Nr  r  r  rG  rV  r  r  r   rg   %  s         ÿzaten::hardswishc                 C  s   t | |ƒ}|  d||¡S r0  )re   r.  )r1  rB  Úhsr  r  r   rf   /  s    
zaten::hardsigmoidc                 C  s   | j d|dd�S )NÚHardSigmoidgUUUUUUÅ?rO  r6  r„  r  r  r   re   8  s    zaten::tanhshrinkc                 C  s   |   d|t| |ƒ¡S )NrQ  )r.  rû   r„  r  r  r   rü   C  s    zaten::hardshrinkc                 C  sx   t j |t jj¡}| jdtj|| ¡ d�d�}t| t	| ||ƒt
| |t| |ƒƒƒ}|  d||| jdtjd| ¡ d�d�¡S ©Nr\  rt  r]  r±  r   )r   rk  rl  ro  r.  r^  rý   ru  r‡   rb   r�   r£   )r1  rB  Úlambdrr  Úlambd_opr  r  r  r   rd   J  s$     ÿþ"þüzaten::softshrinkc           	      C  s¸   t j |t jj¡}| jdtj|| ¡ d�d�}t| ||ƒ}|  d|t	| ||ƒ| jdtjd| ¡ d�d�¡}t
| |t| |ƒƒ}|  d|t| ||ƒ| jdtjd| ¡ d�d�¡}t| ||ƒS rY  )r   rk  rl  ro  r.  r^  rý   ru  rb   r÷   r�   r£   r   )	r1  rB  rZ  rr  r[  Zgt_condZgt_outZlt_condZlt_outr  r  r   rí   a  s:     ÿþ
þü	
þü	zaten::aliasc                 C  s   |S r  r  r„  r  r  r   r   ƒ  s    zaten::unsqueezec                 C  s~   |dk rlt  |¡}|d k	r^t dt|ƒ d d d t|| d ƒ d d ¡ || d }nt  d	d
|¡S t j| ||gd�S )Nr   z)ONNX export unsqueeze with negative axis r1  r2  r3  rH  r4  r5  r	  r6  r7  )r   r‡  r  r  r#  rÑ  r”  r  r  r  r   r	  ‰  s6    
ÿþýüûúùÿ
  ÿz
aten::sortc                 C  sp   |d k	rt  dd|¡ t  |¡}z|| }W n tk
rD   d }Y nX |d kr\t  dd|¡S | jd|||dd�S )NZSortz'Out parameter is not supported for sortrY  ÚTopKr¢  ©Zk_ir;  r  )r   rÑ  r:  r‡  r.  )r1  rB  rE   Z	decendingrq  Z
self_sizesr8  r  r  r   rî   ¤  s      ÿ

zaten::numelc                 C  s   |   d|¡}| j d|dd�S )Nr5  rÙ  r   r#  r6  rA  r  r  r   r«   »  s    z
aten::topkc                 C  s<   |d k	rt  dd|¡ |s(t  dd|¡ | jd|||dd�S )Nr\  z'Out parameter is not supported for topkzAscending TopK is not supportedr¢  r]  )r   rÑ  r.  )r1  rB  rˆ  rE   Úlargestr4  rq  r  r  r   r   Â  s      ÿzprim::convert_element_typec                 G  s,   t  |d dd¡}| jd|t |¡ ¡ d�S )Nr   r…  ru  rf  rg  )r   rÇ  r.  r   rk  rp  )r1  rB  r  ru  r  r  r   r>   Ñ  s    zaten::toc                 G  s¤  t jdd„ ƒ}||ƒr|S t|ƒdkrê|d }t |d ¡r”|d  ¡  ¡ dkr”t |d  ¡ d¡}t|t	j
ƒr”t|jƒdkr�| ¡ }t|ƒ}n|}t |¡sªt|t	j
ƒrÎtj |d ¡}| jd|| ¡ d�S | jd|t |¡ ¡ d�S n®t|ƒd	k�r$t |d
 dd¡}| jd|t |¡ ¡ d�S t|ƒdk�r^t |d dd¡}| jd|t |¡ ¡ d�S t|ƒdk�r˜t |d dd¡}| jd|t |¡ ¡ d�S t d|¡S )Nc                 S  sœ   t | ƒdkrL| d  ¡  ¡ dkpJ| d  ¡  tj ¡ ¡pJt| d  ¡ tj	ƒS t | ƒdkrrt
 | d dd¡}|d kS t | ƒdkr˜t
 | d dd¡}|d kS d	S )
Nr  r   úprim::devicer¡  rH  r…  ru  )rH  é   F)rV  r�  râ  rŠ  ÚisSubtypeOfr	   ÚListTypeÚofIntsr<  r¶  r   rÇ  )r  ru  r  r  r   Úis_aten_to_device_onlyÛ  s    ÿýz"to.<locals>.is_aten_to_device_onlyr  r   rà  r_  rf  rg  r¡  rH  r…  ru  rH  r`  zUnknown aten::to signature)r   rÍ  rV  r   rJ  r�  râ  r)  r<  r^  r
  r>  rr   r  r   rk  rl  r.  rp  rÇ  rõ  )r1  rB  r  rd  ru  Ztvalr  r  r   rÿ   Ø  sD    
ÿþ
ýzaten::repeatc                 C  s0   t jj}t| ||ƒ}|  d||¡}|  d||¡S )Nr  ZTile)r   rk  rj  r®   r.  )r1  rB  Úrepeatsru  Zshape_r  r  r   rØ   %  s    zaten::repeat_interleavec              
   C  s¸  |}t  |¡r@t  | || jdt dg¡d�¡}tjdtjd�}n
t  |¡}t  |¡}t  	|¡}t  	|¡}|d kr|t
 d|¡‚|d kr�t
 d|¡‚|d kr¤t
 d|¡‚|dk r¸|t|ƒ7 }| ¡ }	t|ƒD ] \}
}|d krÈd	\||
< |	|
< qÈ|dk�s|d
k�r<|d d
k�r<|| dk�r,t  dddd|¡S t  | |||¡S |d
k�rª|| dk�rft  dddd|¡S |d d k�r†t  dddd|¡S |d || k�s tdƒ‚|d }nt
 d|¡‚tƒ }t  | ||d¡}t  | |||¡}d\||< |	|< t|ƒD ]®\}
}t| ||
 |d
 ƒ}| jdt |	d |d
 … ¡d�|| jdt |	|d
 d … ¡d�g}| jd|žddiŽ}t| ||d ƒ}t j| || jdt |¡d�dd�}| |¡ �qô| jd|žd|iŽS )Nr\  r  r]  r   rt  zGUnsupported: ONNX export of repeat_interleave for unknown repeats rank.zGUnsupported: ONNX export of repeat_interleave for unknown repeats size.zEUnsupported: ONNX export of repeat_interleave for unknown input size.)r   r  rH  r×   r  é   z3Unsupported along dimension with unknown input sizez*Unsupported for cases with dynamic repeatsz2repeats must have the same size as input along dimz%repeats must be 0-dim or 1-dim tensor)r  rH  r:  r;  ©Z	allowzero)r:  )r:  )r   rô  r@  r.  r^  rý   ry  rN  r‡  r:  r   rd  rV  rù  rA  rL  Z-_repeat_interleave_single_value_repeat_helperr�  r=  Z_repeat_interleave_split_helperr	  r  rR   r(  )r1  rB  re  rE   r…  r8  Zrepeats_dimZrepeats_sizesZinput_sizesZinput_sizes_tempr”  rý  ZrepsZfinal_splitsZr_splitsZi_splitsZr_splitZi_splitZr_concatr  r  r   r×   .  s¶    
  ÿ



þþþ"û   ÿ
ûûÿþ
ýüzaten::pixel_shufflec           	      C  s¦  t  |¡}t|ƒdkr$t  dd|¡S tdd„ |dd … D ƒƒ�rt j| t  | |ddg¡| jd	t 	d
d||d
d
g¡d�d
d�}| jd|d
dddddgd�}t j| || jd	t 	d
d
ddd
d
g¡d�d
d�}t j| || jd	t 	d
d
d
d
ddg¡d�d
d�}t  
| |ddg¡S |d | | }t j| || jd	t 	d||||d |d g¡d�d
d�}| jd|d
dddddgd�}t j| || jd	t 	d||d | |d | g¡d�d
d�S d S )Nr  rµ   úonly support 4d inputc                 s  s   | ]}|d kV  qd S r  r  rX  r  r  r   r‹  ¡  s     z pixel_shuffle.<locals>.<genexpr>rH  r¢  re  r\  r   r  r]  rg  rú  r¡  rû  ©r   r:  rV  rÑ  rb  r@  r”  r.  r^  rý   r,  )	r1  rB  Zupscale_factorr  Ú
after_viewÚafter_transposeÚ	reshape_hÚ	reshape_wÚoutput_channelr  r  r   rµ   ˜  s‚    
  ÿþù	üüúÿþð

üÿþòzaten::pixel_unshufflec           
      C  s®  t  |¡}t|ƒdkr$t  dd|¡S tdd„ |dd … D ƒƒ�rt j| t  | |dg¡| jdt 	d	d	d
|d	g¡d�d	d�}t j| || jdt 	d	d	d	d	d
|g¡d�d	d�}| jd|d	dddddgd�}t j| || jdt 	d	d
ddd	d	g¡d�d	d�}t  
| |ddg¡S |d | | }t j| || jdt 	d
|d |d | ||d | |g¡d�d	d�}	| jd|	d	dddddgd�}t j| || jdt 	d
||d | |d | g¡d�d	d�S d S )Nr  rµ   rh  c                 s  s   | ]}|d kV  qd S r  r  rX  r  r  r   r‹  ê  s     z"pixel_unshuffle.<locals>.<genexpr>rH  re  r\  r   r  r]  rg  rú  r¡  r¢  rû  ri  )
r1  rB  Zdownscale_factorr  rl  rm  rk  Zfinal_reshapern  rj  r  r  r   r¶   á  s|    
  ÿüüü

úÿþð

üÿþòc           *        s  t  dˆ d d d d ¡ dddd	d
ddddddg}ttdd„ |D ƒ|ƒƒ}|rXdnd‰ˆdkrŠtˆ ƒˆˆ d|	  krŠt dd|¡S tˆ ƒˆˆ d|	  ks¦t‚‡ ‡fdd„tdtˆ ƒˆƒD ƒ‰|
ràˆj	d|dddgd�}|rö|röt dd|¡S ˆ 
d¡�r|ˆdd …  ¡  }d‰ˆ d }t |d¡‰ˆd k�rFt dd|¡S |	 }|}g }ˆdk�shˆd k�rn|}nˆdk�r„|\}}g }|d k�r–tˆƒn|}ˆd k�r°d!d"d#g‰nˆdk�rÄd"d$d%g‰tjd&d'„ ƒ‰tj‡‡‡‡‡‡fd(d)„ƒ}tj‡‡‡‡‡‡fd*d+„ƒ}tj‡‡fd,d-„ƒ}tˆƒD �]R}|�rnˆdk�rL||ƒ\}}}n||ƒ\}}tˆƒ}||d f}nªˆdk�r´|d| ƒ\}} }!|d| d ƒ\}"}#}$ˆj	d.|!|$dd/�}n,|d| ƒ\}} |d| d ƒ\}"}#tˆƒ}ˆj	d.||"dd/�}ˆj	d.| |#dd/�}d| d| d f}|||||g}%|% ||f|žŽ ¡ ˆdk�rX|% ||f|žŽ ¡ |�rbi nd0d1i}&ˆdk�r¬|	�r„||g}'n|g}'ˆj	d;|%ždˆ|'d2œ|&—Ž\}}(nVˆd k�rØˆj	d<|%ždˆdd3œ|&—Ž\}}(n*ˆdk�rˆj	d=|%žd4ˆd5œ|&—Ž\}}(})|	�rJˆj	d|dddd4gd�}tjˆ|ˆj	d6t ddd7g¡d8�dd9�}nt ˆ|dg¡}| |(¡ ˆdk�r&| |)¡ �q&|
�r˜ˆj	d|dddgd�}ˆdk�r¦|(nˆj	d>|žd:diŽ}ˆdk�sÎˆd k�rÖ||fS ˆdk�rˆdk�rî|)nˆj	d?|žd:diŽ}|||fS d S )@NzVExporting a model to ONNX with a batch_size other than 1, with a variable length with z can cause an error z9when running the ONNX model with a different batch size. z4Make sure to save the model with a batch size of 1, z=or define the initial states (h0/c0) as inputs of the model. rD  r®  r·  ZAffinerN  ZThresholdedReluZ
ScaledTanhrX  r  ZSoftsignr<  c                 S  s   g | ]}|  ¡ ‘qS r  )Úlower)r‰  Zact_funr  r  r   r–  N  s     z _generic_rnn.<locals>.<listcomp>r  r¢  ÚLSTMrH  zLSTMs with projectionsc                   s   g | ]}ˆ ||ˆ … ‘qS r  r  rX  )Úall_weightsÚweights_per_layerr  r   r–  W  s   ÿr   rú  rû  zRNN/GRU/LSTMzdropout in training modeÚRNNzunknown hidden sizeÚGRU)rH  r¢  )r   rH  )r¢  re  )re  r  )rH  re  c                   s*   ‡ ‡‡fdd„|D ƒ}ˆ j d|žddiŽS )Nc              	     s2   g | ]*\}}t jˆ ˆd g|ˆ g|ˆ gd�‘qS )r   r-  r  )r‰  ÚxÚy©r1  r2  Úwr  r   r–  †  s   ÿz8_generic_rnn.<locals>.reform_weights.<locals>.<listcomp>r:  r;  r   )r:  r6  )r1  rx  r2  Z	intervalsZslicesr  rw  r   Úreform_weights„  s    þz$_generic_rnn.<locals>.reform_weightsc                   s`   ˆ|  }ˆdkr|\}}n,ˆdks*ˆdkrF‡ ‡‡‡fdd„|D ƒ\}}t ‡ fdd„||fD ƒƒS )Nrs  rt  rp  c                 3  s   | ]}ˆˆ |ˆˆƒV  qd S r  r  ©r‰  rx  ©r1  Úhidden_sizeÚreform_permutationry  r  r   r‹  ’  s    zB_generic_rnn.<locals>.transform_weights_no_bias.<locals>.<genexpr>c                 3  s   | ]}t  ˆ |d g¡V  qdS r†  r“  ©r‰  ru  r3  r  r   r‹  •  s    )rÆ  )Úlayer_indexÚweightsÚ	weight_ihÚ	weight_hh©r1  r|  Úlayer_weightsr}  ry  Úvariantr  r   Útransform_weights_no_biasŒ  s    
ÿ
ÿz/_generic_rnn.<locals>.transform_weights_no_biasc                   s|   ˆ|  }ˆdkr|\}}}}n0ˆdks.ˆdkrN‡ ‡‡‡fdd„|D ƒ\}}}}ˆ j d||dd�}t‡ fd	d„|||fD ƒƒS )
Nrs  rt  rp  c                 3  s   | ]}ˆˆ |ˆˆƒV  qd S r  r  rz  r{  r  r   r‹  Ÿ  s    z:_generic_rnn.<locals>.transform_weights.<locals>.<genexpr>r:  r   r.  c                 3  s   | ]}t  ˆ |d g¡V  qdS r†  r“  r~  r3  r  r   r‹  £  s   ÿ)r.  rÆ  )r  r€  r�  r‚  Zbias_ihZbias_hhÚbias_concatrƒ  r  r   Útransform_weights™  s    ÿþz'_generic_rnn.<locals>.transform_weightsc                   s&   ˆdkr| S t jˆ | dg|g|gd�S )NrH  r   r-  r  )ru  r–  r—  )r1  Ú
num_layersr  r   Úretrieve_state¨  s    ÿ    ÿýz$_generic_rnn.<locals>.retrieve_stater:  r.  Zdirection_sÚbidirectional)r  Úhidden_size_iZactivations_s)r  rŒ  Zlinear_before_reset_ire  )r  rŒ  r\  r  r]  rg  r;  )rs  )rt  )rp  )r:  )r:  )r  r  Údictrp  rV  r   rÑ  r�  rÿ  r.  Ú
startswithro  rŽ  r  r   rÍ  r(  r@  r^  r  r,  )*r1  r…  r8  Zinitial_statesrq  Ú
has_biasesr‰  rH   r,  r‹  Úbatch_firstÚbatch_sizesZonnxActivationsZvariantToOnnxActivationMapZnonlinearityÚw_hhZunidirectionalZprev_outputÚh_outsZh0Zc0Úc_outsZsequence_lensr†  rˆ  rŠ  r…  r�  r‚  r‡  Zstate_indicesZweight_ih_fZweight_hh_fZbias_fZweight_ih_bZweight_hh_bZbias_brB  Úextra_kwargsZ
activationZh_outZc_outr  )	rq  r1  r|  r„  r‰  r}  ry  r…  rr  r   Ú_generic_rnn'  s:   þýüûúÿõÿÿþ  ÿ
  ÿ




	




 ÿþûú
 ÿþûú
 ÿÿ ÿÿü

"
"r–  c
                 C  s2   t  |¡t  |¡ }
}t| d||
|||||||	ƒS )Nrp  ©r   rŒ  r–  )r1  r8  Úhidden_vÚweight_vr�  r‰  rH   r,  r‹  r�  Úhiddenr  r  r  r   Ú
_lstm_full  s$    ÿþõr›  c
                 C  s4   t  |¡t  |¡ }
}t| d||
||||||	|d�S )Nrp  ©r‘  r—  )r1  r8  r‘  r˜  r™  r�  r‰  rH   r,  r‹  rš  r  r  r  r   Ú_lstm_packed-  s$    ÿþõr�  z
aten::lstmc                 G  s.   t  |d ¡rt| f|žŽ S t| f|žŽ S d S ©Nre  )r   rK  r�  r›  ©r1  r  r  r  r   rŒ   M  s    zaten::lstm_cellc                   s    t  ˆ |dg¡}t  |¡}‡ fdd„|D ƒ}t  |¡rB||||fn||f}t  |¡rXdnd}	tˆ d||||	dddddd�\}
}}t  ˆ |dg¡t  ˆ |dg¡fS )	Nr   c                   s   g | ]}t  ˆ |d g¡‘qS r  r“  r~  r3  r  r   r–  [  s     zlstm_cell.<locals>.<listcomp>TFrp  rH  )r‰  rH   r,  r‹  r�  )r   r”  rŒ  Z
_is_tensorr–  r,  )r1  rB  rš  Zw_ihr’  Zb_ihZb_hhr8  r  r�  rn  r“  r”  r  r3  r   r‹   V  s4    
ÿõ  ÿþz	aten::grurt  Zgruzaten::rnn_tanhZRNN_TANHZrnn_tanhzaten::rnn_reluZRNN_RELUZrnn_relu©râ  c                   sd   t  ddddddddd¡	tj‡fdd„ƒƒ‰ t  ddddddddd¡	‡fdd„ƒ‰‡ ‡fdd	„}|S )
NrX  r…  rY  c
                   s&   t  |¡}
t| ˆ |||
||||||	ƒS r  r—  )r1  r8  rš  r™  r�  r‰  rH   r,  r‹  r�  r  r   r  r   Ú	_rnn_fullz  s    
õz"_one_hidden_rnn.<locals>._rnn_fullc
                   s(   t  |¡}
t| ˆ |||
|||||	|d�S )Nrœ  r—  )r1  r8  r‘  rš  r™  r�  r‰  rH   r,  r‹  r  r   r  r   Ú_rnn_packed—  s    
õz$_one_hidden_rnn.<locals>._rnn_packedc                   s.   t  |d ¡rˆ| f|žŽ S ˆ | f|žŽ S d S rž  )r   rK  rŸ  )r¡  r¢  r  r   rÌ  ³  s    z!_one_hidden_rnn.<locals>.symbolicr.  )râ  rÌ  r  )r¡  r¢  râ  r   Ú_one_hidden_rnnr  s    r£  zaten::_dim_arangec                 C  sX   |   d|¡}| j d|| j dt |¡d�dd�}t ¡ rB|   d|¡S t| |dd d d ƒS d S )	Nr5  r  r\  r]  r   r.  z_caffe2::Ranger  )r.  r^  rý   r   rï  r   )r1  ÚlikerE   Z
like_shapeÚstopr  r  r   Ú_dim_arange¼  s       ÿr¦  zaten::detachc                 C  s   |S r  r  r7  r  r  r   rD   Ë  s    zaten::contiguousc                 C  s   |dkrt  d|¡‚|S )Nr¢  z-onnx memory_format support is not implemented)r   rd  )r1  r8  rD  r  r  r   r6   Ò  s     ÿzaten::_pack_padded_sequencec                 C  s|   |r| j d|dddgd�}| ¡  tjj ¡ ¡s<t d|¡‚t	j
 |t	j
j¡t	j
jkrj| j d|tjjd�}| j d	||dd
�S )Nrú  rH  r   r¢  rû  z*'lengths' must be a Tensor for ONNX exportrf  rg  zprim::PackPadded©r  )r.  rŠ  ra  r^  r	   Z
TensorTypeÚgetr   rd  r   rk  rl  rm  rª  rh  ri  r»  )r1  r8  Úlengthsr�  r  r  r   Ú_pack_padded_sequenceÝ  s      ÿ ÿýÿrª  zaten::_pad_packed_sequencec                 C  s8   | j d||dd�\}}|r0| j d|dddgd�}||fS )Nzprim::PadPackedr¢  r§  rú  rH  r   rû  r6  )r1  rG  r‘  r�  Zpadding_valueÚtotal_lengthr©  r  r  r   Ú_pad_packed_sequence÷  s    r¬  zaten::randintc                 G  s  t  |dd¡}t  |dd¡}t  |dd¡}|d kr<tjj}n
t |¡}|d krZt  d|¡‚|d krnt  d|¡‚t  |d¡}	t  |	¡r¶| jd|t	j
dgt	jd	�d
�}
| jd|
||d�}n| jd|	||d�}tjj}| jd|| ¡ d�}||k�r| jd|| ¡ d�}|S )Nr…  ru  r  ÚhighrÏ   rÂ  rI  r   rt  r]  ÚRandomUniformLike©Úlow_fÚhigh_fÚRandomUniform)Úshape_ir°  r±  rf  rg  )r   rÇ  r   rk  rj  rõ  r  rJ  r.  r^  rý   r  rp  )r1  r  r­  Úshapesru  rF  Úlow_iÚhigh_irr  r>  Úshape_constrÑ   Ú	int_dtyperÏ   r  r  r   rÏ     sD    


ýüü
zaten::randint_likec                 G  s¼   t  |dd¡}t  |dd¡}t  |dd¡}|d kr<tjj}n
t |¡}|d krZt  d|¡‚|d krnt  d|¡‚| jd|||d�}	tjj}
| jd|	|
 ¡ d	�}|
|kr¸| jd|| ¡ d	�}|S )
Nr…  ru  r  r­  rÏ   r®  r¯  rf  rg  )r   rÇ  r   rk  rj  rõ  r.  rp  )r1  rB  r  r­  ru  rF  rµ  r¶  rr  rÑ   r¸  rÏ   r  r  r   rÎ   7  s*    

üzaten::randnc                 G  s†   t  |dd¡}|d kr tjj}n
t |¡}t  |d¡}t  |¡rr| jd|tj	dgtj
d�d�}| jd|| ¡ d	�S | jd
|| ¡ d�S )Nr…  ru  rÂ  rI  r   rt  r]  ÚRandomNormalLike©Údtype_iZRandomNormal©r³  r»  ©r   rÇ  r   rk  ro  r  rJ  r.  r^  rý   r  rp  ©r1  r´  ru  rF  rr  r>  r·  r  r  r   rÑ   U  s*    


ýýýz
aten::randc                 G  s†   t  |dd¡}|d kr tjj}n
t |¡}t  |d¡}t  |¡rr| jd|tj	dgtj
d�d�}| jd|| ¡ d	�S | jd
|| ¡ d�S )Nr…  ru  rÂ  rI  r   rt  r]  r®  rº  r²  r¼  r½  r¾  r  r  r   rÍ   p  s*    


ýýýzaten::randn_likec                 C  sH   t  |dd¡}|d kr*tj |tjj¡}n
t |¡}| jd|| ¡ d�S )Nr…  ru  r¹  rº  ©r   rÇ  r   rk  rl  ro  r.  rp  )r1  rB  ru  rA  rB  rC  rD  rr  r  r  r   rÐ   ‹  s     ÿ
zaten::rand_likec                 C  sB   t  |dd¡}|d kr(tj |tjj¡}| jd|t |¡ ¡ d�S )Nr…  ru  r®  rº  r¿  )r1  rB  ru  rA  rB  rC  rD  r  r  r   rÌ      s     ÿ  ÿzaten::rreluc                 C  s@   |s || d }| j d||d�S | j d|||d�}|   d||¡S )Nrð  rN  rO  r®  )r±  r°  r9  r6  )r1  r8  ro  Úupperrë  r÷  rµ  r  r  r  r   rÝ   µ  s
    zaten::bernoullic           	      C  sÀ   |d k	r t  |¡s t  dd|¡ |d k	r@t  |¡s@t  dd|¡ tj |tjj¡}|tjjkrlt  dd|¡S | jd|dd| ¡ d�}|d k	ršt  |¡sš|n|}|  d	||¡}| jd
|| ¡ d�S )NZ	Bernoulliz,out parameter is not supported for bernoulliz(generator is not supported for bernoulliúinput dtype not accessibler®  rZ  r™  )r±  r°  r»  r²  rf  rg  )	r   rô  rÑ  r   rk  rl  rm  r.  rp  )	r1  r8  r  r÷  rq  ru  ZrandsZprobr�  r  r  r   r'   À  s@      ÿ  ÿ ÿ  ÿûzaten::log_sigmoidc                 C  s   |   d|¡}|   d|¡S )Nr·  r  r6  )r1  r8  r  r  r  r   r   à  s    z	aten::erfc                 C  s   |   d|¡S )NÚErfr6  r7  r  r  r   rO   è  s    zaten::flattenc                 C  sº   t  |¡}|d kr t  dd|¡S |dkr8t  | |dg¡S |dkrL|  d|¡S |dk r\|| }|dkr€||d kr€| jd||d�S |dkr¨||d kr¨| jd||d d�S t  | ||||¡S )	NrE   rÍ  r   rH  rù  ÚFlattenr.  r¢  )r   r‡  rÑ  r@  r.  Z_flatten_helper)r1  r8  Z	start_dimZend_dimrE   r  r  r   rU   ï  s$    
üzaten::nonzeroc                 C  s   t | |  d|¡ƒS )z/Emitted from `torch.nonzero(x, as_tuple=False)`ZNonZero)rø   r.  r7  r  r  r   r©     s    zaten::nonzero_numpyc                 C  s   t | t| |ƒd|d�S )NrH  )r$  )r  r©   )r1  r8  r$  r  r  r   r¨     s    zaten::isnanc                 C  s   |   d|¡}|S )NZIsNaNr6  )r1  r8  r�  r  r  r   rq     s    z	aten::anyc              	   G  sŠ   t |ƒdkr|d }d\}}n$|\}}}t |d¡g}t |d¡}| jd|tjjd�}tj| |||d�}t| || jdt	j
dt	jd	�d
�ƒS )NrH  r   rU  r…  rf  rg  rÄ  r\  rt  r]  )rV  r   r†  r.  rh  ri  rj  rT  rb   r^  rý   Úlong)r1  r  r8  rE   rÃ  Z	input_sumr  r  r   Ú_any$  s    

   ÿrÅ  z	aten::allc              	   G  sP   |   d|d ¡}t|ƒdkr.|   dt| |ƒ¡S |   dt| ||d |d ƒ¡S d S )Nrw  r   rH  r¢  )r.  rV  rÅ  )r1  r  r8  r  r  r   Ú_all7  s    rÆ  zaten::narrowc                 C  s   t j| ||g|g|| gd�S )Nr-  r  )r1  r8  rE   r–  Úlengthr  r  r   r    C  s        ÿzaten::argmaxztorch._C.Value©r1  r8  rE   rÃ  c                 C  s   t  | |||d¡S )Nr$  ©r   Z_argmin_argmax_helperrÈ  r  r  r   r   L  s    	zaten::argminc                 C  s   t  | |||d¡S )Nr*  rÉ  rÈ  r  r  r   r   X  s    	zaten::scatterc                 C  s‚   t j |t jj¡}t |¡}t |¡r:| jd||||d�S t j |¡}||krb| jd|| ¡ d�}| jd||t	| ||ƒ|d�S d S )NZScatterr.  rf  rg  )
r   rk  rl  rm  r   rN  rJ  r.  rp  rQ   )r1  rB  rE   rm   ÚsrcZsrc_typer¥  r  r  r   râ   d  s     ÿ

zaten::scatter_addc                 C  sz   t  |¡}|d kr t  dd|¡S t j|dd�}|rP| jdtj|| ¡ d�d�}nt| ||ƒ}t  	| ||||¡}t
| ||ƒS )Nrá   rÁ  F)Zallow_nonstaticr\  rt  r]  )r   r£  rÑ  r:  r.  r^  r  ru  r  Z_scatter_helperr   )r1  rB  rE   rm   rÊ  rr  rc  Zto_addr  r  r   rá   w  s    
  ÿz
aten::log2c              	   C  s(   d}|   dt| |ƒ| j dt |¡d�¡S )Ngï9úþB.æ?re  r\  r]  r  )r1  rB  Z_ln2r  r  r   r„   ‰  s    zaten::is_floating_pointc                 C  s6   t  |¡r | jdt dg¡d�S | jdt dg¡d�S ©Nr\  rH  r]  r   )r   rn  r.  r^  Ú
BoolTensorr„  r  r  r   ro   �  s    
zaten::__is_c                 C  sL   t  |¡r@t  |¡r*| jdt dg¡d�S | jdt dg¡d�S t| ||ƒS rË  )r   rô  r.  r^  rÌ  rN   rT  r  r  r   Ú__is_˜  s
    

rÍ  zaten::__isnot_c                 C  s   t | ||ƒS r  )rÍ  rT  r  r  r   Ú__isnot_¢  s    rÎ  zaten::one_hotc                 C  sn   | j dt ddg¡d�}tj |tjj¡tjjtjjtjj	tjj
hkrZ| j d|tjjd�}| j d|||dd	�S )
Nr\  r   rH  r]  rf  rg  ÚOneHotr  r.  )r.  r^  r  r   rk  rl  rm  r§  r¨  rª  r©  rh  ri  rj  )r1  rB  Znum_classesr
  r  r  r   r­   ©  s     ÿüþzaten::gatherc           	   	   C  s²   t  |d¡rt  dd|¡S tj |¡}| jdt ddg¡d�}t	| || jdt |g¡d�ƒ}| jd| jd	||||d
�| 
¡ d�}|  dt  | ||d g¡|¡}t j| ||gdd�S )Nr…  r\   zsparse_grad == Truer\  r   rH  r]  rf  rÏ  r.  rg  rI  rÄ  )r   r  rÑ  r   rk  rl  r.  r^  r  ré   rp  r”  rT  )	r1  rB  rE   rm   Zsparse_gradrr  r
  Údepthr�   r  r  r   r\   º  s    ýc              	   C  s:  |d kr(| j d|dd�}|}t| |ƒ}nb| j d|||d�}| j d||dd�}|   d|¡}| j d|| j dt |¡d	�dd
�}| j d|dd�}|   d||¡}	|   d|	|	¡}
|d kr²dn|}| j d|
||d�}|d krÔd}|dk�r2| j d|tjjd�}| j dtj|tjd�d	�}|   d||¡}|   d||   d||¡¡}||fS )Nr×  r   r#  rÄ  rH  r5  r  r\  r]  r.  rÙ  rQ  rI  rf  rg  rt  re  )r.  r«   r^  rý   rh  ri  ro  r  )r1  r8  rE   Z
correctionrÃ  rØ  Zt_meanZnum_elementsZredudced_dimsZsub_vZsqr_subZkeepdim_meanr  r|  r�   r  r  r   Ú	_var_meanÎ  s<    ü
  ÿrÑ  z	aten::stdc                 G  s    t | |f|žŽ \}}|  d|¡S ©Nr¦  ©r  r.  ©r1  r8  r  r  rn  r  r  r   rö   ò  s    z	aten::varc                 G  s   t | |f|žŽ \}}|S r  )r  rÔ  r  r  r   r  ù  s    zaten::var_meanc                 G  s4   t |ƒdkr t| |d |d d ƒS t| |f|žŽ S d S )NrH  r   )rV  rÑ  )r1  r8  r  r  r  r   r     s    zaten::std_meanc                 G  s$   t | |f|žŽ \}}|  d|¡|fS rÒ  rÓ  )r1  r8  r  r  rØ  r  r  r   rõ     s    zaten::logsumexpc                 C  s   | j d|||d�S )NZReduceLogSumExprÄ  r6  rÈ  r  r  r   rŠ     s    úaten::arangec           
        s´  t  ¡ rˆ jd|žŽ S tjdd„ ƒ}tj‡ fdd„ƒ}t|ƒdksNt|ƒdkrÜt|ƒdkr`d }n||d ƒ}t jˆ |d	 |d
�\}}}}t  ˆ |d	g¡}||ƒ}t  ˆ t	ˆ t
ˆ ||d d ƒƒdg¡}	ˆ jd|	t |¡ ¡ d�S t|ƒdksöt|ƒdk�rÞt|ƒdk�r
d }n||d ƒ}t jˆ |d	 |d |d |d�\}}}}t  ˆ |d	g¡}t  ˆ |d	g¡}t  ˆ |d	g¡}|ˆ  dˆ  d||¡|¡ƒ}t  ˆ t	ˆ t
ˆ |d d d ƒƒdg¡}	ˆ  dˆ  d|	|¡|¡}	ˆ jd|	t |¡ ¡ d�S t|ƒdk�rœ||d ƒ}t jˆ |d	 |d |d�\}}}}t  ˆ |d	g¡}t  ˆ |d	g¡}|ˆ  d||¡ƒ}ˆ  dt  ˆ t	ˆ t
ˆ ||f|dd … žŽ ƒdg¡|¡}	ˆ jd|	t |¡ ¡ d�S t  ddt|ƒ› d�¡S )Nr   c                 S  s   t  | d¡} | S )Nr…  )r   r  rt  r  r  r   Ú_get_arange_dtype"  s    z!arange.<locals>._get_arange_dtypec                   s.   t  | ¡r*ˆ jdˆ  d| ¡tjj ¡ d�} | S )Nrf  rI  rg  )r   rn  r.  r   rk  rj  rp  )Úrange_tensorr3  r  r   Ú_float_step_convert'  s    


ýz#arange.<locals>._float_step_convertr¢  r¡  rH  r   )r—  ru  rf  rg  r  r`  re  )r–  r—  r  ru  re  rQ  rF  rI  rH  )r–  r—  ru  rÕ  rÏ  rÐ  )r   )r   rï  rð  r   rÍ  rV  Z_arange_cast_helperr”  r,  r©   r¯   r.  r   rk  rp  rÑ  )
r1  r  rÖ  rØ  ru  r—  r–  r  r×  Zarange_tensorr  r3  r   r     sž    
	  ÿ  ÿ  ÿ    ÿ  ÿ  ÿ   ÿ  ÿû  ÿzaten::linspacec           
      C  sT   t  | |d ¡}t| t| ||ƒt| || jdtjdtjd�d�ƒƒ}	t| t	| ||	ƒ|ƒS )Nr\  rH  rt  r]  )
r   Z_arange_helperrF   r÷   r.  r^  rý   ry  r   r�   )
r1  r–  r—  Zstepsru  rA  rB  rC  r×  r  r  r  r   r~   o  s    
 ýz
aten::liftc                 C  s   |S r  r  r„  r  r  r   rx   }  s    zaten::masked_fillc                 C  s6   | j d|tjjd�}t |¡}|   d|t ||¡|¡S )Nrf  rg  r±  )r.  rh  ri  rÂ  r   rN  r«  ©r1  rB  Úmaskr_  r  r  r   rŽ   „  s    
zaten::masked_fill_c                 C  s   t | |||ƒS r  )rŽ   rÙ  r  r  r   r�   Œ  s    úaten::indexc                   s,  t  ¡ rˆjdˆ|dd�S t  |¡r0t  |¡}n|g}tj‡‡fdd„ƒ‰‡fdd„|D ƒ}t|ƒdkr€t jˆˆd	|d	 d
d�S dd„ t	|ƒD ƒ‰ tˆ ƒd	kr¢ˆS tˆ ƒdkrÈt
ˆˆˆ d	 |ˆ d	  ƒS t  ˆ¡}|d krèt  ddˆ¡S t dtj› d�¡ tˆ ƒ}tˆˆƒ‰‡‡fdd„t|ƒD ƒ‰ˆjdˆˆ ‡ fdd„t|ƒD ƒ d�‰ˆjdˆ|d�‰|ˆ d  }ˆˆ d  }t|d ddƒD ]@}ˆ d|ˆ |  |¡}	ˆ d||	¡}ˆ d|ˆˆ |  ¡}�q„t
ˆˆd	|ƒ‰tˆ|ƒ}
ˆ ttˆ d	 ˆ d d ƒƒk�rîˆjdt dg¡d�g‡ ‡fdd„t|ƒD ƒ }ˆjd#|ždd	iŽ}t  ˆˆ|¡‰ttdˆ d	 d ƒƒd	g ttˆ d	 d || d ƒƒ }ˆjdˆ|d�‰‡fd d„tˆ d	 ƒD ƒ|
g ‡ ‡fd!d„tˆ d	 |ƒD ƒ }ˆjd$|ždd	iŽ}n,ˆjd|
f‡ ‡fd"d„t|ƒD ƒždd	iŽ}t  ˆˆ|¡S d S )%Nrm   r
  )r  c                   sh   t  | ¡sdtj | tjj¡tjjks.t  | ¡rdˆ jdk rDt	 
dˆ¡‚t d¡ t  ˆ tˆ | ƒdg¡} | S )Nr  z?Exporting masked indices are only supported after ONNX opset 9.z—Exporting aten::index operator with indices of type Byte. Only 1-D indices are supported. In any other case, this will produce an incorrect ONNX graph.rH  )r   rô  r   rk  rl  rm  r§  rS  r  r   rd  r  r  r,  r©   )rm   r„  r  r   Útry_mask_to_index�  s(    
 ÿýÿû
þÿz index.<locals>.try_mask_to_indexc                   s   g | ]}ˆ |ƒ‘qS r  r  )r‰  r”  )rÜ  r  r   r–  ³  s     zindex.<locals>.<listcomp>rH  r   F)Zapply_reshapec                 S  s   g | ]\}}t  |¡s|‘qS r  )r   rô  )r‰  r…  r”  r  r  r   r–  Ë  s    
 rÛ  zšoperator of advanced indexing on tensor of unknown rank. Try turning on shape inference during export: torch.onnx._export(..., onnx_shape_inference=True).z=Exporting aten::index operator of advanced indexing in opset zÀ is achieved by combination of multiple ONNX operators, including Reshape, Transpose, Concat, and Gather. If indices include negative values, the exported graph will produce incorrect results.c              
     s0   g | ](}ˆ j d ˆˆ j dt |g¡d�dd�‘qS )r  r\  r]  r   r.  )r.  r^  r  ©r‰  rE   )r1  Úshape_tensorr  r   r–  ê  s   úürú  c                   s   g | ]}|ˆ kr|‘qS r  r  rX  )Úadv_idx_indicesr  r   r–  ø  s      rû  rÃ  r.  r  r¢  rI  rF  r\  r]  c                   s   g | ]}|ˆ krˆ| ‘qS r  r  rX  ©rß  Údim_tensor_listr  r   r–    s     r:  r;  c                   s   g | ]}ˆ | ‘qS r  r  rX  )rá  r  r   r–  %  s     c                   s   g | ]}|ˆ krˆ| ‘qS r  r  rX  rà  r  r   r–  '  s   þc                   s   g | ]}|ˆ krˆ| ‘qS r  r  rX  rà  r  r   r–  2  s   þ)r:  )r:  )r   rï  rð  r  rŒ  r   rÍ  rV  r	  rA  rl   r‡  rÑ  r  r  r   r@  r9  rÿ  r.  r=  r^  r  r@  )r1  rB  rm   r  rü  Zadv_idx_countZcum_adv_indexZ
multiplierr…  Z	adv_indexZcum_adv_index_shape_tensorZfolded_adv_idx_shape_listZfolded_adv_idx_shapeZadv_idx_permuteZfinal_shape_listZfinal_shaper  )rß  rá  r1  rB  rÞ  rÜ  r   rm   ’  sÖ    
    ÿÿ   
ÿ
û	ÿ
ù
ÿý  
ÿ
ÿÿÿþ ÿÿÿÿþÿÿþþÿ	þþýøzaten::linalg_normzOptional[Sequence[int]])r1  rB  ÚordrE   rÃ  ru  c                 C  sÜ   d }|d kr|t  |¡r<t  | |dg¡}| jdt dg¡d�}t  |¡}|d kr\t  dd|¡S |dkrrt  |d¡}q´d	dg}n8t	|ƒdkr´t  |¡r¨| jdt dg¡d�}t  |d¡}|rÊt
| |||||ƒS t| |||||ƒS )
Nr  r\  r¢  r]  rE   ú(Input rank must be known at export time.rH  rY  r   )r   rô  r@  r.  r^  r  r‡  rÑ  r†  rV  r|   rz   )r1  rB  râ  rE   rÃ  ru  Ú	ord_valueÚself_dimr  r  r   r{   =  s,    

  ÿ

zaten::linalg_vector_normc                 C  sô   |d krt  | |dg¡}d}|tjkrB| jd|  d|¡||d�}n®|tj krj| jd|  d|¡||d�}n†|dkr„t  dd	d
d|¡S | jdtj|tjd�d�}t j	| |  d|  d|¡|¡||d�}|  d||  d| jdtjdtjd�d�|¡¡}|S )Nr  FrR  r  rÄ  r)  r   r|   r  rG  zord=0 not supportedr\  rt  r]  rÃ  re  rH  )
r   r@  r³  Úinfr.  rL  r^  rý   rÅ  rT  )r1  rB  râ  rE   rÃ  ru  r¶  Zord_opr  r  r   r|   a  s@    
    ÿ   ÿýý	zaten::linalg_matrix_normz	List[int]c              	   C  s²  t  |d¡}|dkr"t| |||ƒS |dkr8t  dd|¡S t  |d¡}|d krZt| |||ƒS |dksj|dkrxt  dd	|¡S t  |¡}|d kr˜t  dd
|¡S |d dk r´|d  |7  < |d dk rÐ|d  |7  < |tjksè|tj k�r|d |d  |d< |d< |d |d k�r*|�s*|d  d8  < t j| |  d|¡|d g|d�}|dk�r€t	| || jdt
 |d g¡d�|d�\}	}
n*t| || jdt
 |d g¡d�|d�\}	}
|	S d S )Nr`  ZfroZnuczlinalg.matrix_normzord==nucrY  r¢  r�  zord==2rã  r   rH  r  rÄ  r\  r]  )r'  rÃ  )r   r†  rY   rÑ  r‡  r³  ræ  rT  r.  r”   r^  r  r—   )r1  rB  râ  rE   rÃ  ru  rä  rå  rÖ  r¶  r  r  r  r   rz   Š  sZ    
  ÿ 
  ÿ
üü
zaten::linalg_crossr  c                 C  s   t | |||ƒS r  )rB   )r1  r8  rE  rE   r  r  r   ry   È  s    zaten::frobenius_normc                 C  s,   |   d||¡}tj| |||d�}|   d|¡S )NrI  rÄ  r¦  )r.  r   rT  )r1  rB  rE   rÃ  ZsqrZsumsqrr  r  r   rY   Ï  s    zaten::multinomialc                 C  sZ   |d k	r t  |¡s t  dd|¡ |s:|dkr:t  dd|¡ t| |ƒ}| jd|tjj|d�S )NZMultinomialz*generator is not supported for multinomialrH  zGreplacement=False when num_samples > 1 is not supported for multinomial)r»  Zsample_size_i)r   rô  rÑ  r�   r.  rh  ri  rj  )r1  r8  Znum_samplesÚreplacementr÷  Z	log_inputr  r  r   rž   Ø  s&      ÿý
üzaten::baddbmmc           
      C  s\   t j |¡}t| ||ƒ}t| || jd|| ¡ d�ƒ}t| || jd|| ¡ d�ƒ}	t| ||	ƒS r¿  )r   rk  rl  r�   r�   r.  rp  r   )
r1  rB  Zbatch1Zbatch2r¤  rP  rr  Z	batch_mulZmul_aZmul_br  r  r   r%   ò  s    ýýzaten::meshgridzOptional[str])r1  Úindexingc                   s0  |d krd}n|dkr(t  d|› �|¡‚|dkrJ|d |d  |d< |d< ‡ fdd„t |¡D ƒ}‡ fd	d„|D ƒ}ˆ jd|žddiŽ}g }t|ƒD ]h\}}ˆ jdtjdtjd�d�gt	|ƒ }	|| |	|< t
ˆ |ˆ jd|	žddiŽƒ}
| ˆ  d|
|¡¡ q”|dk�r"|d |d  |d< |d< ˆ jd|žŽ S )NÚij>   Úxyré  zUnsupported indexing: rê  rH  r   c                   s,   g | ]$}t  ˆ |ˆ jd t dg¡d�¡‘qS )r\  r  r]  )r   r@  r.  r^  r  rˆ  r3  r  r   r–    s   ý  ÿzmeshgrid.<locals>.<listcomp>c                   s   g | ]}ˆ   d |¡‘qS )r5  r6  rˆ  r3  r  r   r–    s     r:  r;  r\  rt  r]  r  úprim::ListConstruct)r:  )r:  )rë  )r   rd  r   rŒ  r.  rA  r^  r¯   ry  rV  r?  r(  )r1  r‘  rè  r’  Ztensors_shapeZ	out_shaperq  r…  rø   r³  Z
t_reshapedr  r3  r   r–     s2     ÿ
üÿ
zaten::remainderc                 C  s(   t | ||ƒ}|  d||¡}|  d||¡S )NrI  rQ  )rb  r.  )r1  r8  rE  rF   Zquor  r  r   rÖ   %  s    z
aten::gelu)r1  rB  Úapproximatec                 C  s&  |dkr°t  dt j ¡}d}tj|tjd�}tj|tjd�}tjdtjd�}tjdtjd�}t| |t| ||ƒƒ}	t| |t| |t| ||	ƒƒƒ}
t| |t| |t| ||  d|
¡ƒƒƒS d}|  d	|  d
|tj|tjd�¡¡}t| || jdtjdtjd�d�ƒ}t| t| ||ƒ| jdtjdtjd�d�ƒS d S )Nrû   r¢  g÷Hmâä¦?rt  rZ  ç      à?r®  gÍ;fž ö?rÂ  re  r\  rH  r]  )	r³  rñ   r´  r^  rý   r€  r�   r   r.  )r1  rB  rì  ZkBetaZkKappar¤  Úkappar|  ZhalfZ	self_cubeÚinnerZ_sqrt2rO   Zerf_plusoner  r  r   r^   -  s,    $"  ÿ
ýzaten::group_normc              
   C  sÈ  t  ¡ r | jd||||||d�S t  |d¡}|d k	rD|| dksDt‚t  |¡}|d krdt  dd|¡S d|dg}	t  | || jdt	 
|	¡d�¡}
| jdt	jd	g| tj |¡ ¡ d
�d�}| jdt	jdg| tj |¡ ¡ d
�d�}| jd|
|||d�}t  | ||  d|¡¡}|d k�s"| ¡  ¡ �rLt	jd	gtj |¡ ¡ d
�}| jd|d�}|d k�sd| ¡  ¡ �rŽt	jdgtj |¡ ¡ d
�}| jd|d�}ttd|d ƒƒ}t| t| |t  | ||¡ƒt  | ||¡ƒS )Nra   )Znum_groups_irõ  Zcudnn_enabled_irH  r   zunknown input rankr  r\  r]  rZ  rt  r™  r÷  rø  r5  )r   rï  rð  rŽ  r�  r‡  rÑ  r@  r.  r^  r  rý   r   rk  rl  ru  r�  Ú
mustBeNoner=  rÿ  r   r�   r”  )r1  r8  Z
num_groupsr  rÕ  rí  rÙ  rú  Z
input_rankr>  r  rÿ  r   Znorm_reshapedrª   rû  rü  r»  r  r  r   ra   J  s|    ù


  ÿþþþþ    ÿ ÿ ÿýzaten::_weight_normc                 C  sž   t  |¡}|d k	rttt|ƒƒ}|d k	rH|dk r6||7 }|dkrH| |¡ t| |d|dƒ}|  d||¡}|  d||¡S t  ¡ rŽ| jd|||d�S t	 
d|¡‚d S )	Nr  r¢  rH  re  rI  Ú_weight_normrí  zDUnsupported: ONNX export of _weight_norm for tensor of unknown rank.)r   r‡  r=  rÿ  Úremoverª   r.  rï  rð  r   rd  )r1  r™  Zweight_grE   rü  r»  Znorm_vrF   r  r  r   rñ  “  s"    

þrñ  z	aten::dimc                 C  s   |   d|¡}|   d|¡S )zFImplement the dim functionality available for a pytorch tensor in ONNXr5  ÚSizer6  rA  r  r  r   rE   °  s    zaten::__contains_c                 C  sd   t  |¡}tdd„ |D ƒƒrTt  |¡rT| jdt t  | ¡ d¡dd„ |D ƒk¡d�S t	 
d|¡‚d S )Nc                 s  s   | ]}t  |¡V  qd S r  )r   r�  r~  r  r  r   r‹  ½  s    z__contains_.<locals>.<genexpr>r\  r_  c                 s  s   | ]}t  | ¡ d ¡V  qdS )r_  N)r   r)  r�  r~  r  r  r   r‹  Ä  s     r]  zJUnsupported: ONNX export of __contains__ for non-constant list or element.)r   rŒ  r�  r�  r.  r^  rý   r)  r�  r   rd  )r1  rB  ÚelementZunpacked_listr  r  r   Ú__contains_¹  s$    
ÿþÿÿþþrõ  zaten::__getitem_c                 C  s    t | || jdt dg¡d�|ƒS rJ  )rã   r.  r^  rý   )r1  rB  r…  r  r  r   Ú
__getitem_Î  s    rö  z
aten::itemc                 C  s   |S r  r  r„  r  r  r   rr   Ô  s    z
aten::takec              
   C  sD   t  | || jdtjdgtjd�d�¡}t| |d|ƒ}t| ||ƒ}|S )Nr\  r  rt  r]  r   )r   r@  r.  r^  rý   ry  rl   rÚ   )r1  rB  rm   Zself_flattenedrq  r  r  r   rù   Ú  s      ÿc                 C  s&   t | ||ƒ}t| |ƒ}t| ||ƒ}|S r  )r÷   rP   r�   )r1  r8  ÚtargetÚdiff_Zexp_r�  r  r  r   Ú_kl_div_log_target_implå  s    
rù  c           	      C  sZ   t | |ƒ}t| ||ƒ}t| ||ƒ}t| |ƒ}t| || jdt d¡d�ƒ}t| |||ƒ}|S rJ  )	r�   r÷   r�   r  rb   r.  r^  rý   r  )	r1  r8  r÷  Zlog_rø  Z
output_posZzeros_Zmask_r�  r  r  r   Ú_kl_div_non_log_target_implí  s    

rú  zaten::kl_divc                 C  sj   |rt | ||ƒ}nt| ||ƒ}|dkr*|S |dkrB| jd|dd�S |dkrZtj| |dd�S t d|¡S d S )Nr   rH  r×  r#  r¢  z4kl_div with reduction other than none, mean, or sum.)rù  rú  r.  r   rT  rõ  )r1  r8  r÷  Ú	reductionZ
log_targetr�  r  r  r   rs   ø  s     ÿzaten::mse_lossc                 C  sh   t | t| ||ƒt| ||ƒƒ}|dkr(|S |dkr@| jd|dd�S |dkrXtj| |dd�S t d|¡S d S )Nr   rH  r×  r#  r¢  z6mse_loss with reduction other than none, mean, or sum.)r�   r÷   r.  r   rT  rõ  )r1  r8  r÷  rû  r�  r  r  r   rœ     s     ÿzaten::as_stridedc                 C  s¸  t  |d¡}t|ƒ}t  | || jdtjdgtjd�d�¡}t  |¡sÀtjdgtj	d�}t
t||ƒƒD ]6\}\}	}
dg| }d||< |t |	¡ |¡|
  }qd|r¨|| }|  d|| jd|d�¡S d }t
|ƒD ]´\}}
dg| }d||< t| || jdt dg¡d�| jdt |¡d�ƒ}	t  | t| |	d	d d d ƒ| jdt |¡d�¡}|  d
|| jdt |
g¡d�¡}|d k�rr|}qÌ|  d||¡}qÌ|�r¦|  d||  dt |g¡¡¡}|  d||¡S d S )NrÂ  r\  r  rt  r]  r   rH  r  r  rI  rF  )r   r  rV  r@  r.  r^  rý   ry  rJ  rÄ  rA  rp  r   r  rã   )r1  rB  rc  ÚstridesÚoffsetrü  Zself_1dÚindr…  ré   r]  Zr_sizeZtmp_indr  r  r   r      sT      ÿ


üý  ÿ
zaten::__derive_indexc              	   C  s   |   d||   d||¡¡S )NrF  rI  r6  )r1  rm   r–  r  r  r  r   Ú__derive_indexN  s    rÿ  zaten::__range_lengthc                 C  s6   |   d||¡}|   dt| ||ƒ¡}| j d|tjjd�S )NrQ  rI  rf  rg  )r.  r  rh  ri  rj  )r1  Úlor  r  r÷   rF   r  r  r   Ú__range_lengthT  s    r  zaten::linearc                 C  s˜   t  |¡}t| |ƒ}|dkrp| ¡  ¡ sp| jdtjdtjd�d�}| jdtjdtjd�d�}t	| |||||ƒ}n$t
| ||ƒ}| ¡  ¡ s”t| ||ƒ}|S )Nr¢  r\  rH  rt  r]  )r   r‡  rø   r�  rð  r.  r^  rý   ry  r   r�   r   )r1  r8  r  rÕ  rü  rP  r¤  r�  r  r  r   r}   d  s    

zaten::hann_windowzOptional[int])r1  ru  c              	   C  sÜ   |d kr.t  ¡ }|r|js t j}tj |¡}	n
t |¡}	t| |dd d d ƒ}
| jd|
t	j
jd�}t| | jdt jtjt jd�d�|ƒ}|dkr¬t| || jdt jdt jd�d�ƒ}t| ||ƒ}| jdt| t| |ƒƒ|	 ¡ d�}|S )	Nr  rf  rg  r\  rt  r]  FrH  )r^  r~  ro   r  r   rk  Z
from_dtyper   r.  rh  ri  ro  r�   rý   r³  r´  r÷   r  rF   rò   rè   rp  )r1  Zwindow_lengthZperiodicru  rA  rB  rC  rH  Zdtype_rr  Zn_arrayr�  r  r  r   rc   u  s4    

  ÿ  ÿýzaten::mvc                 C  s   t | ||ƒS r  ©r�   )r1  rB  Zvecr  r  r   rŸ   ž  s    z	aten::dotc                 C  s   t | ||ƒS r  r  rT  r  r  r   rG   ¤  s    zaten::movedimc           
      C  sæ   |  d¡}|  d¡}| ¡ | ¡ ks(t‚||k ¡ r8|S t |¡}|d k	sNt‚tt|ƒƒ}| ¡ }| ¡ }t	| 
¡ | 
¡ ƒD ] \}}	|||	< d||< d||	< q|dd„ |D ƒ}dd„ |D ƒ}t	||ƒD ]\}}	|||	< qÄ| jd||d�S )Nr  c                 S  s   g | ]}|d kr|‘qS ©r  r  rÝ  r  r  r   r–  Ä  s      zmovedim.<locals>.<listcomp>c                 S  s   g | ]}|d kr|‘qS r  r  rÝ  r  r  r   r–  Å  s      rú  rû  )r  ré   r�  r�  r   r‡  r=  rÿ  rù  rp  Útolistr.  )
r1  rB  r  Zdestinationr;  r  Zsrc_dimsZdst_dimsrÊ  Údstr  r  r   r›   ª  s&    




z
aten::fillc                 C  s    t j |t jj¡}t| |||ƒS r  )r   rk  rl  ro  rZ   )r1  rB  r_  rr  r  r  r   rT   Í  s
     ÿzaten::index_addc                   sª  t  d¡ |r0t t |¡¡dkr0t dd|¡S t ˆ d¡‰ ˆ d krPt d|¡‚t 	|¡}t 	|¡}|d kst|d kr€t d|¡‚||kr´|| }t
|ƒD ]}	t | |t 	|¡g¡}q˜t |ˆ ¡}
t |ˆ ¡}|
d k	rð|d k	rð|
|krðt d|¡‚tt
|ƒƒ}d	d
„ t
|ƒD ƒ}‡ fdd
„t
|ƒD ƒ}tj| ||||d�}t| ||ƒ}t
ˆ ƒD ]}	t | |dg¡}�qLt
|ˆ  d ƒD ]}	t | |t 	|¡g¡}�qtt| |ˆ t| ||ƒ|ƒS )NzyWarning: ONNX export does not support duplicated values in 'index' field, this will cause the ONNX model to be incorrect.rH  rh   z
alpha != 1r…  zXONNX export does NOT support exporting 'index_add_()' function with unknown 'dim' value.z~ONNX export does NOT support exporting 'index_add_()' function while the rank of self tensor or tensor to be added is unknown.zoONNX export does not support exporting 'index_add_()' function with duplicated values in 'index' parameter yet.c                 S  s   g | ]}d ‘qS r  r  rX  r  r  r   r–    s     zindex_add.<locals>.<listcomp>c                   s   g | ]}|ˆ krt jnd ‘qS r^  )ÚsysÚmaxsizerX  rŒ  r  r   r–    s     r-  r   )r  r  r   rM  rN  rÑ  r  r   rd  r‡  rÿ  r”  rŽ  r=  r/  rQ   rá   )r1  rB  rE   rm   rE  rP  Zself_dim_rankZother_dim_rankÚdeltar…  Zother_dim_sizeZself_dim_sizeZnew_shape_axesZnew_shape_startsZnew_shape_endsr  r  rŒ  r   rh   ×  sl    ÿý

ý  
ÿý    ÿ  
ÿz
aten::rollc                 C  s¨   t |ƒt |ƒkst‚|}tt |ƒƒD ]~}g }tj| ||| g||  gtjgd�}| |¡ tj| ||| gdg||  gd�}| |¡ | jd|žd|| iŽ}q$|S )Nr-  r   r:  r;  )r:  )	rV  r�  rÿ  r   r/  r  r  r(  r.  )r1  rB  Zshiftsr  r¶  r…  r´  r>  r  r  r   rÜ     s,       
 ÿ
    
ÿ
zaten::crossc                 C  sp   t  ||¡}t| |dg|gƒ}t| |dg|gƒ}t| |dg|gƒ}t| |dg|gƒ}t| t| ||ƒt| ||ƒƒS )Nr¢  rH  )r   Z_get_dim_for_crossrÜ   r÷   r�   )r1  r8  rE  rE   Zroll_x_1Zroll_y_1Zroll_x_2Zroll_y_2r  r  r   rB   4  s    zaten::cdistrð  Ú#use_mm_for_euclid_dist_if_necessaryc                 C  sR   t  |¡}|d k	st‚t  | ||d g¡}t  | ||d g¡}t| |||ddd�S )NrH  r¢  g�íµ ÷Æ°>F)rí  rÃ  )r   r‡  r�  r”  r³   )r1  r  r  r  Zcompute_moderü  Zbroadcasted_x1Zbroadcasted_x2r  r  r   r/   H  s    
     ÿz
aten::lerpc                 C  sx   |   d||¡}t| |   d|| j dt d¡d�¡|   d||   d||¡¡|   d||   d||   d| j dt d¡d�|¡¡¡ƒS )	NrQ  r²  r\  rí  r]  rF  rI  rZ  )r.  r  r^  rý   )r1  rB  r—  r  Údiffr  r  r   rw   `  s    ýýüzaten::broadcast_tensorsc                   sP   t  |¡}tˆ |d ƒ‰|D ]}tˆ ˆ|ƒ‰q‡ ‡fdd„|D ƒ}ˆ jd|žŽ S )Nr   c                   s   g | ]}t ˆ |ˆƒ‘qS r  )rQ   rˆ  ©r1  Zt_with_final_shaper  r   r–  �  s     z%broadcast_tensors.<locals>.<listcomp>rë  )rë  )r   rŒ  r  r   r.  )r1  rB  Zall_tensorsrø   Zt_listr  r  r   r+   v  s    
zaten::is_pinnedc                 C  s   d S r  r  )r1  rB  rB  r  r  r   rp   …  s    úprim::ConstantSplitc                 C  s^   t  ||¡}|d kr"t  dd|¡S |g||  }|| }|rF| |¡ | jd|||t|ƒd�S )Nr  r   r!  r"  )r   rŽ  rÑ  r(  r.  rV  )r1  rB  r%  rE   ré   r&  r'  r  r  r   rº   ‹  s      ÿ
úprim::ConstantChunkc                 C  s@   t  ||¡}|d kr"t  dd|¡S || d | }t| |||ƒS )Nr  r   rH  )r   rŽ  rÑ  rº   )r1  rB  r#  rE   r8  r%  r  r  r   r¹   ž  s      ÿzprim::shapec                 C  s   |   d|¡S r4  r6  r„  r  r  r   rÆ   ª  s    z	prim::maxc                 C  s   t | d||dd�S )Nr   r  rF  rG  rT  r  r  r   rÄ   °  s    z	prim::minc                 C  sB   |s6t  |¡r,t| || jdt dg¡d�ƒ}t| |ƒS t| ||ƒS rJ  )r   r  rô   r.  r^  rý   r—   rT  r  r  r   rÅ   ¶  s
    

z
prim::datac                 C  s   |S r  r  r„  r  r  r   r¼   À  s    zprim::layoutc                 C  s   | j dt d¡d�S rJ  rœ  r„  r  r  r   rÀ   Æ  s    rë  c                 O  s   d S r  r  ©r1  rB  r  r  r  r   rÁ   Í  s    zprim::ListUnpackzOptional[List[_C.Value]])r1  r²  c                 O  s2   t |ƒdkr.|d  ¡  ¡ dkr.t |d ¡S d S )NrH  r   rë  )rV  r�  râ  r   rŒ  r  r  r  r   rÂ   Ó  s     zprim::TupleConstructc                 O  s   d S r  r  r  r  r  r   rÈ   à  s    zprim::Uninitializedc                 O  s   d S r  r  r  r  r  r   rË   æ  s    zprim::unchecked_castc                 C  s   |S r  r  r„  r  r  r   rÊ   ð  s    zprim::dtypec                 C  s.   t  |¡}|d krtjj}| jdt |¡d�S r[  )r   r£  r   rk  ro  r.  r^  rý   rÀ  r  r  r   r¾   ö  s    
úprim::tolistc                 C  s&   t  |d¡}|dkr"t  dd|¡S |S )zÂtolist is currently supported only for 1D input tensors.

    dim_val and elem_ty_val represent dimension and type annotations
    that need to match dimension and type of the input tensor.
    r…  rH  r  zdim_val > 1)r   r  rÑ  )r1  r8  Zdim_valZelem_ty_valrE   r  r  r   rÇ      s    r_  ÚNonec                 O  s>   | j  ¡  ¡ }t|tjƒrd S t dd| ¡ › d�| j  ¡ ¡S )Nr_  z,output type should be 'DeviceObjType', not 'ú')	Úoriginal_noder�  rŠ  r<  r	   r¶  r   rÑ  râ  )r1  rB  r  Úoutput_typer  r  r   r½     s    ýz
prim::LoopzList[_C.Value]c                 O  s   | j }| j}| j}tj}tj}t| ¡ ƒ}tj	| df|ž| 
¡ t|ƒdœŽ\}	}
}t||
ƒD ]˜\}}t| ¡ ƒD ]l\}}|dkrž|t|ƒk rž| ||  ¡ ¡ |dkrp|d t|ƒk rpt| ¡ tjƒsp| ||d   ¡ ¡ qptj ||j||d¡ q\tj ||¡}tj�rtj |||¡ |S )NZLoop©r  Zn_blocksr   rH  F)r  ÚenvÚparams_dictr   rU  r@  rÆ  Úblocksr   Úadd_op_with_blocksÚoutputsSizerV  rp  rA  rB  r/  rŠ  r<  r	   r0  r^  Ú_jit_pass_onnx_blockÚblockÚ%_jit_pass_fixup_onnx_controlflow_nodeÚonnx_shape_inferenceÚ(_jit_pass_onnx_node_shape_type_inference)r1  rB  Úattrsr�  r  r  rU  Úopset_versionÚ
old_blocksÚnew_op_outputsÚnew_block_contextsÚnew_nodeÚ	old_blockÚnew_block_contextr…  Zb_inÚfixed_outputsr  r  r   rÃ     sX     ÿÿ ÿÿþýû ÿ  ÿzprim::Ifc                 O  sž  | j }| j}| j}| j}tj}tj}|d  ¡  ¡ dk}	|	�rt	 
|d  ¡ d¡ ¡ }
t|
tƒrht|
ƒnt|
ƒ}|rxdnd}t| ¡ ƒ| }tj ||||d¡}t| ¡ ƒ}t| ¡ ƒ}g }tt|ƒƒD ]B}|| |krôt d|| › d�|| ¡‚|||  }| |¡ qÈ|S t| ¡ ƒ}tj| df|ž| ¡ t|ƒd	œŽ\}}}t||ƒD ] \}}tj ||j||d
¡ �qNtj ||¡}tj �r–tj !|||¡ |S d S )Nr   rà  r_  rH  TzThe sub block ATen output z is not in env.ÚIfr  F)"r  r  r  r  r   rU  r@  r�  râ  r   r)  r  r<  r=  r�  rÜ  r  r^  r	   r  r  rÿ  rV  r   rd  r(  rÆ  r   r  r  rp  r  r  r  )r1  rB  r  r2  r  r  r  rU  r   Z	static_ifZ
input_flagrO  Z	block_idxZ	current_bZif_output_listZcurrent_b_listZfinal_b_listr”  Zonnx_br!  r"  r#  r$  r%  r&  r'  r  r  r   r¿   S  sz    ÿûþ ÿÿ ÿû ÿ  ÿr-  c                   s*  ˆ j }| ¡ rd S t| ¡  ¡ tjƒr*d S | d¡dkrNˆ jdt	 
|d¡d�S | d¡dkrrˆ jdt	 
|d¡d�S | ¡  ¡  tj ¡ ¡s¢| ¡  ¡  tj ¡ ¡r¾ˆ jdt t	 
|d¡¡d�S | ¡  ¡  tj ¡ ¡�r ‡ fdd„t	 
|d¡D ƒ}ˆ jd|žŽ S t d
| d¡› dtj› d�| ¡ ¡‚d S )Nr_  rø   r\  r]  r`  ©Zvalue_sc                   s   g | ]}ˆ j d |d�‘qS )r\  r)  r6  )r‰  r`  r3  r  r   r–  Ã  s   ÿz!prim_constant.<locals>.<listcomp>rë  z"Unsupported prim::Constant kind: 'z'. Please send a bug report at Ú.)rë  )r  rð  r<  r�  rŠ  r	   r¶  r·  r.  r   r)  ra  rb  rc  ZofFloatsr^  rý   Z	ofStringsr   rd  r
   ZPYTORCH_GITHUB_ISSUES_URL)r1  rB  r  r�  Zstr_constantsr  r3  r   r»   ¬  s6    ÿþ ÿ

þýú
prim::type)r1  Údevice_valuec                 O  sJ   |  ¡  ¡ dkr<t |  ¡  ¡ ¡}|d k	r<| jdt|ƒd�S t dd|¡S )Nr_  r\  r)  r+  z,Device type cannot be statically determined.)	r�  râ  r   Zget_device_from_valuer8  r.  r#  r   rÑ  )r1  r,  r  r  rB  r  r  r   rÉ   Ð  s    ýzonnx::Placeholderc                 O  s"   | j }| j}| j}tj |||¡S r  )r  r  r  r^  r	   Z'_jit_onnx_convert_pattern_from_subblock)r1  rB  r  r�  r  r  r  r  r   r°   ß  s    zaten::resolve_conjzaten::resolve_negr7  c                 C  s   |S r  r  r7  r  r  r   r  é  s    	zaten::_conjzaten::conj_physicalc                 C  s    t  |¡rt  d|¡S t| |ƒS )Nz aten::_conj, aten::conj_physical)r   Zis_complex_valuerõ  r  r7  r  r  r   r
  õ  s    	
þzaten::logit)r1  rB  rí  c                 C  s²   | j dt d¡d�}t |¡s†| j d|tj |¡ ¡ d�}|   d||¡}|   d||¡}|   d|||¡}|   d	||¡}|   d|||¡}n|}|   d||¡}	|   d
||	¡}
|   d|
¡S )Nr\  rZ  r]  rf  rg  rQ  r°  r±  r²  re  r  )	r.  r^  rý   r   rô  r   rk  rl  rp  )r1  rB  rí  r|  Zone_sub_epsZself_less_equal_one_sub_epsZtemporary_selfZtemporary_self_less_epsÚzr÷   rF   r  r  r   r‰   	  s     
  ÿ)N)N)N)rZ  )T)T)N)N)N)N)N)N)r   N)N)F)N)N)NNN)N)N)FF)NN)NN)N)FN)NNNFN)F)NNF)NN)F)NNNFN)F)F)NNNFN)F)F)NNNFN)F)N)N)NN)NN)NNFN)NNFN)NNN)N)F)r  )NF)FN)N)rÞ  )N)TNNNNF)N)N)rð  r	  )N)N(v  Ú__doc__Ú
__future__r   r’  rÔ  r³  r  r  Útypingr   r   r   r   r   r   r^  Ztorch._C._onnxr	   Z_onnxrh  Ztorch.nn.modules.utilsZ
torch.onnxr
   r   r   r   r   Ztorch.onnx._globalsr   Ztorch.onnx._internalr   r   r   Ztorch.typesr   r'  ÚpartialZonnx_symbolicZ_onnx_symbolicr"  r,  rÍ  r  r9  r?  rè  rÛ   rÚ   r   r÷   rß   r�   rF   ré  r   rW  rc  rb  rV   rX   r  rÒ   r.   rô   r—  rš   r*   r�   r   r£   rñ   rÞ   rû   rè   r@   rú   r"   r   r#   r$   rå   ræ   r¾  rÁ  rÎ  r±   rì  rC   rò  rø  rø   r¬   rR   r,   rQ   rK   rJ   ré   r  r´   r  r  r  rð   r  rï   r  r  rã   rò   ró   r¸   rç   r™   rC  rÔ   rÕ   r0   rW   rK  rþ   rv   r`   rë   rì   r_   ÚnnÚmodulesÚutilsZ_singleZ_pairZ_triplerx  r‘   r’   r“   rƒ  r‹  r�  r‘  r5   rš  rÓ   rÙ   r²   r¨  r©  r(   r)   r  r  rµ  rN   r¢   rb   r¹  r�   r½  r]   ru   r¾  r¿  rÀ  r…   r‡   rˆ   r†   rÉ  rË  r  r€   rÏ  rÜ  rß  r?   r;   r<   r=   r8   r9   r:   r&   r¡   rt   rn   r  rI   rä   rl   rk   rj   ri   r-   r  rA   r³   r4   r   r�   rƒ   r‚   r·   r3   r2   r1   r”   r•   r—   r˜   r   r   r   rP   rH   r/  rª   r7   r1  r6  Ú
deprecatedr8  r9  r:  r;  r<  r=  r>  r?  r@  rM   rL   r¤   rà   rý   r!   r  r  r§   r  r¯   r®   r¦   r[   rZ   r¥   rS   rê   rg   rf   re   rü   rd   rí   r   r	  rî   r«   r   r>   rÿ   rØ   r×   rµ   r¶   r–  r›  r�  rŒ   r‹   r£  r¦  rD   r6   rª  r¬  rÏ   rÎ   rÑ   rÍ   rÐ   rÌ   rÝ   r'   r   rO   rU   r©   r¨   rq   rÅ  rÆ  r    r   r   râ   rá   r„   ro   rÍ  rÎ  r­   r\   rÑ  rö   r  r  rõ   rŠ   r   r~   rx   rŽ   r�   rm   r{   r|   rz   ry   rY   rž   r%   r–   rÖ   r^   ra   rñ  rE   rõ  rö  rr   rù   rù  rú  rs   rœ   r    rÿ  r  r}   rc   rŸ   rG   r›   rT   rh   rÜ   rB   r/   rw   r+   rp   rº   r¹   rÆ   rÄ   rÅ   r¼   rÀ   rÁ   rÂ   rÈ   rË   rÊ   r¾   rÇ   r½   rÃ   r¿   r»   rÉ   r°   r  r
  r‰   r  r  r  r   Ú<module>   sT   € € ý  		


5
þ*4	






*!

ÿÿ
>5

	
ü*
	>+ 
  ÿüþ	 
  ÿüþ	 
  ÿüþ	;
üÿ
üÿ
üÿ
þþþþþþ8  
ÿüþ	  
ÿüþ	  
ÿüþ	
üùþ
üùþ
üùþ7 )		(þþþþþþþþþþþþ,

             ÿòCù	7*"#"#"#&&&*74:8**_$


  ÿ#


	 
ÿ
þ 
ÿ
þ 
ÿ$ýýýýýýýýý ù    ùÿ	    ÿ     ùÿ
    ùÿ	ÿ    ø	øH
(



 K  ÿhFC ô f** ÿ ÿC*   ù   ù




(	(	 "Q *0!0&0;    ÿ$(E	

",	"     ø"& E  û
2W""	"