
    AVh	                       d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZm Z m!Z! ddl"m#Z#  eddddddddd	      Z$dde#e!e$f   de#e!e$f   fdZ%  ed       ejL                  e%            Z'de#e!e$f   de#e!e$f   fdZ( eddd d!dddddddd"d#d$d%d&d'd(d)d*      Z)dd+e#e e!   e)f   de#e!e)f   fd,Z*  ed-       ejL                  e*            Z+d+e#e e!   e)f   de#e!e)f   fd.Z, ed/dd d!ddd      Z-dde#e!e-f   de#e!e-f   fd0Z.  ed1       ejL                  e.            Z/de#e!e-f   de#e!e-f   fd2Z0 ed3dd d!ddd      Z1ejd                  ejf                   ed4d5      dde#e!e1f   de#e!e1f   fd6                     Z4  ed7       ejL                  e4            Z5e4jl                  jn                  Z8de#e!e1f   de#e!e1f   fd8Z9 ed9dd d!dddddddd:d*      Z:dde#e!e:f   d;e#e!e:f   de#e!e:f   fd<Z;  ed=       ejL                  e;            Z<de#e!e:f   d;e#e!e:f   de#e!e:f   fd>Z= ed?dd d!dddddddd"d#d$d%d&d'd(d)d*d@      Z>dd+e#e e!   e>f   de#e!e>f   fdAZ?  edB       ejL                  e?            Z@d+e#e e!   e>f   de#e!e>f   fdCZA edDdd d!dddddddd'd(d)d*      ZBdde#e!eBf   d;e#e!eBf   de#e!eBf   fdEZC  edF       ejL                  eC            ZDde#e!eBf   d;e#e!eBf   de#e!eBf   fdGZE edHdd      ZFddJe#e!ej                  f   dKe#e!eFf   dLeHde#e!ej                  f   fdMZI  edN       ejL                  eI            ZJdJe#e!ej                  f   dKe#e!eFf   dLeHde#e!ej                  f   fdOZK edPd d!      ZL edQdd      ZMej                  dfdJe#e!eLf   dReMde#e!eMf   fdSZO  edT       ejL                  eO            ZPdJe#e!eLf   dReMde#e!eMf   fdUZQ edVdd      ZRddJe#e!ej                  f   dKe#e!eRf   dLeHde#e!ej                  f   fdWZS  edX       ejL                  eS            Z!dJe#e!ej                  f   dKe#e!eRf   dLeHde#e!ej                  f   fdYZT edZdd d!dddddddd"d#d$d%d&d'd(d)d*      ZUdde#e!eUf   d;e#e!eUf   d[eVde#e!ej                  f   fd\ZW  ed]       ejL                  eW            ZXde#e!eUf   d;e#e!eUf   d[eVde#e!ej                  f   fd^ZY ed_dd`dddddddd"d#d$d%d&d'd(d)d*      ZZ edaddd      Z[ edbdddd'      Z\ej                  dfdJe#e!eZf   dce#e!e[f   dde\de#e!e\f   fdeZ^  edf       ejL                  e^            Z_dJe#e!eZf   dce#e!e[f   dde\de#e!e\f   fdgZ` edhdd`dddddddd"d#d$d%d&d'd(d)d*      Za edidd      Zb edjdd      Zcej                  dfdJe#e!eaf   dce#e!ebf   ddecde#e!ecf   fdkZd  edl       ejL                  ed            ZedJe#e!eaf   dce#e!ebf   ddecde#e!ecf   fdmZf edndd d!ddd      Zgejd                  ejf                   edodp      dde#e!egf   de#e!egf   fdq                     Zh  edr       ejL                  eh            Ziehjl                  jn                  Zjde#e!egf   de#e!egf   fdsZk edtdd d!ddd      Zlejd                  ejf                   edudv      dde#e!elf   de#e!elf   fdw                     Zm  edx       ejL                  em            Znemjl                  jn                  Zode#e!elf   de#e!elf   fdyZp edzdd d!ddd      Zqejd                  ejf                   ed{d|      dde#e!eqf   de#e!eqf   fd}                     Zr  ed~       ejL                  er            Zserjl                  jn                  Ztde#e!eqf   de#e!eqf   fdZu eddddd      Zvejd                  ejf                   edd      dd;e#e!evf   de#e!evf   de#e!evf   fd                     Zw  ed       ejL                  ew            Zxewjl                  jn                  Zyd;e#e!evf   de#e!evf   de#e!evf   fdZz eddd d!ddd      Z{ejd                  ejf                   edd      dde#e!e{f   de#e!e{f   fd                     Z|  ed       ejL                  e|            Z}e|jl                  jn                  Z~de#e!e{f   de#e!e{f   fdZ eddd d!ddddd	      Zdde#e!ef   d;e#e!ef   deHdeHdeHdeHde#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   d;e#e!ef   deHdeHdeHdeHde#e!ef   fdZ eddd d!ddddddd'd(d)d*      Zdde#e!ef   d;e#e!ef   deHdeHdeHdeHde#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   d;e#e!ef   deHdeHdeHdeHde#e!ef   fdZ eddd d!dddddddd*      Z eddd d!dddddddd*      Z eddd d!dddddd
      Zdde#e!ef   d;e#e!ef   dRedeHdeHdeHdeHde#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   d;e#e!ef   dRedeHdeHdeHdeHde#e!ef   fdZ eddd      Zejd                  ejf                   edddg       ed      dde#e!ef   de#e!ef   de#e!ef   de#e!ef   fd                            Z  ed       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   de#e!ef   de#e!ef   fdZ eddddd      Zdde#e!ej(                  f   de#e!ej(                  f   de#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zde#e!ej(                  f   de#e!ej(                  f   de#e!ef   de#e!ef   fdZ eddddd      ZddJe#e!ef   de#e!ej(                  f   fdZ  ed       ejL                  e            ZdJe#e!ef   de#e!ej(                  f   fdZ ed Z ed Zdde#e!ef   dedeHde#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   dedeHde#e!ef   fdZ eddddd      Zdde#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   de#e!ef   fdZ eddd d!dddddddd"d#d$d%d&d'd(d)d*      Zdde#e!ef   de#e!ef   de#e!ef   de#e!ef   fdZ  ed«       ejL                  e            Zde#e!ef   de#e!ef   de#e!ef   de#e!ef   fdÄZ eddd      Z edd d!      ZejV                  dfde#e!ef   de#e!ef   dRede#e!ef   fdȄZ  edɫ       ejL                  e            Zde#e!ef   de#e!ef   dRede#e!ef   fdʄZ edd d!      Z eddd      Zej                  dfde#e!ef   dRede#e!ef   fd̈́Z  edΫ       ejL                  e            Zde#e!ef   dRede#e!ef   fdτZ edd d!d@      ZddJe#e!ef   de#e!ef   fdфZ  edҫ       ejL                  e            ZdJe#e!ef   de#e!ef   fdӄZ eddd d!ddd      Zejd                  ejf                   edd֫      dde#e!ef   de#e!ef   fdׄ                     Z  edث       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fdلZ eddd d!ddd      Zejd                  ejf                   eddܫ      dde#e!ef   de#e!ef   fd݄                     Z  edޫ       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fd߄Z edddddddddd'd(d)d*      Zejd                  ejf                   edddg       ed      dde#e!ef   de#e!ef   de#e!ef   fd                            Z  ed       ejL                  eë            Zejl                  jn                  Zde#e!ef   de#e!ef   de#e!ef   fdZ eddd d!dddddddd"d#d$d%d&d'd(d)d*      Z eddd      ZȐdde#e!ef   dKe#e!ef   deHdeHde#e!ef   f
dZ  ed       ejL                  eɫ            Zde#e!ef   dKe#e!ef   deHdeHde#e!ef   f
dZ eddd d!dddddddd"d#d$d%d&d'd(d)d*      Z eddd      Z͐dde#e!ef   dKe#e!ef   deHdeHde#e!ef   f
dZ  ed       ejL                  eΫ            Zde#e!ef   dKe#e!ef   deHdeHde#e!ef   f
dZ eddddd      Z eddd      ZҐdde#e!ef   dKe#e!ef   deHdeHde#e!ef   f
dZ  ed       ejL                  eӫ            Zde#e!ef   dKe#e!ef   deHdeHde#e!ef   f
dZ eddd      Z eddddd      ZאddJe#e!ef   de#e!ef   de#e!ef   deHde#e!ef   f
dZ  ed       ejL                  eث            ZdJe#e!ef   de#e!ef   de#e!ef   deHde#e!ef   f
dZ eddddd      Zejd                  ejf                   edddg       ed      dde#e!ef   de#e!ef   fd                             Z  ed       ejL                  eܫ            Zejl                  jn                  Zde#e!ef   de#e!ef   fdZ eddd d!dddddddd'd(d)d*      Zdde#e!ef   d;e#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   d;e#e!ef   de#e!ef   fdZ eddd d!ddd      Zdde#e!ef   d;e#e!ef   de#e!ef   fdZ  ed	       ejL                  e            Zde#e!ef   d;e#e!ef   de#e!ef   fd
Z ed Zdde#e!ef   d;e#e!ef   deHde#e!ej                  f   fdZ  ed       ejL                  e            Zde#e!ef   d;e#e!ef   deHde#e!ej                  f   fdZ eddddd      Zejd                  ejf                   edddg       ed      dde#e!ef   de#e!ef   fd                            Z  ed       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fdZ eddddd      Zejd                  ejf                   edddg       ed      dde#e!ef   de#e!ef   fd                            Z  ed       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fdZ eddddd      Zdde#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   de#e!ef   fdZ ed dd d!dddddddd"d#d$d%d&d'd(d)d*      Z ed!dd      ZddJe#e!ef   dKe#e!ef   dLeHde#e!ef   fd"Z  ed#       ejL                  e            ZdJe#e!ef   dKe#e!ef   dLeHde#e!ef   fd$Z ed%dd d!ddd      Zdde#e!ef   de#e!ef   fd&Z   ed'       ejL                  e             Zde#e!ef   de#e!ef   fd(Z ed)dd d!ddd      Zejd                  ejf                   ed*d*d+g       ed+      dde#e!ef   de#e!ef   fd,                            Z  ed-       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fd.Z ed/dddd      Zdde#e!ef   de#e!ef   fd0Z	  ed1       ejL                  e	            Z
de#e!ef   de#e!ef   fd2Z ed3dd d!dddddddd'd(d)d*      Zejd                  ejf                   ed4g       ed4      dde#e!ef   d;e#e!ef   de#e!ef   fd5                            Z  ed6       ejL                  e            Zejl                  jn                  Zde#e!ef   d;e#e!ef   de#e!ef   fd7Z ed8ddddddddd'd(d)d*      Zejd                  ejf                   ed9d:g d;       ed<d=      dde#e!ef   d;e#e!ef   de#e!ef   fd>                            Z  ed?       ejL                  e            Zejl                  jn                  Zde#e!ef   d;e#e!ef   de#e!ef   fd@Z edAddddddddd'd(d)d*      Zejd                  ejf                   edBdC      dde#e!ef   d;e#e!ef   de#e!ej                  f   fdD                     Z  edE       ejL                  e            Zejl                  jn                  Zde#e!ef   d;e#e!ef   de#e!ej                  f   fdFZ edGddddddddd'd(d)d*      Zejd                  ejf                   edHdI      dde#e!ef   d;e#e!ef   de#e!ej                  f   fdJ                     Z  edK       ejL                  e            Zejl                  jn                  Zde#e!ef   d;e#e!ef   de#e!ej                  f   fdLZ edMdddd      Z  edNdd      Z!ejD                  dfdOe#e!e f   dPe#e!e f   dQe#e!ej(                  f   dRe!de#e!e!f   f
dSZ#  edT       ejL                  e#            Z$dOe#e!e f   dPe#e!e f   dQe#e!ej(                  f   dRe!de#e!e!f   f
dUZ% edVdddd      Z&ejd                  ejf                   edWdWdXg       edX      dde#e!e&f   de#e!e&f   de#e!e&f   fdY                            Z'  edZ       ejL                  e'            Z(e'jl                  jn                  Z)de#e!e&f   de#e!e&f   de#e!e&f   fd[Z* ed\dd      Z+dde#e!e+f   de#e!e+f   de#e!e+f   fd]Z,  ed^       ejL                  e,            Z-de#e!e+f   de#e!e+f   de#e!e+f   fd_Z. ed`dddd      Z/ejd                  ejf                   edadadbg       edb      dde#e!e/f   de#e!e/f   de#e!e/f   fdc                            Z0  edd       ejL                  e0            Z1e0jl                  jn                  Z2de#e!e/f   de#e!e/f   de#e!e/f   fdeZ3 edfd d!      Z4 edgdd      Z5ej                  dfdJe#e!e4f   dRe5de#e!e5f   fdhZ6  edi       ejL                  e6            Z7dJe#e!e4f   dRe5de#e!e5f   fdjZ8 edkdd d!ddddddd      Z9dde#e!e9f   de#e!e9f   fdlZ:  edm       ejL                  e:            Z;de#e!e9f   de#e!e9f   fdnZ< edodd d!ddd      Z=dd;e#e!e=f   dpe#e!e=f   de#e!e=f   fdqZ>  edr       ejL                  e>            Z?d;e#e!e=f   dpe#e!e=f   de#e!e=f   fdsZ@ edtdddd      ZAejd                  ejf                   edug dv       edwdx      dde#e!eAf   de#e!ej                  f   fdy                            ZB  edz       ejL                  eB            ZCeBjl                  jn                  ZDde#e!eAf   de#e!ej                  f   fd{ZE ed|dddd      ZFejd                  ejf                   ed}g d~       edd      dde#e!eFf   de#e!ej                  f   fd                            ZG  ed       ejL                  eG            ZHeGjl                  jn                  ZIde#e!eFf   de#e!ej                  f   fdZJ eddddd      ZKejd                  ejf                   edg d       edd      dde#e!eKf   de#e!ej                  f   fd                            ZL  ed       ejL                  eL            ZMeLjl                  jn                  ZNde#e!eKf   de#e!ej                  f   fdZO edddddddddd'd(d)d*      ZPejd                  ejf                   edd      dde#e!ePf   d;e#e!ePf   de#e!ej                  f   fd                     ZQ  ed       ejL                  eQ            ZReQjl                  jn                  ZSde#e!ePf   d;e#e!ePf   de#e!ej                  f   fdZT edddddddddd'd(d)d*      ZUejd                  ejf                   edd      dde#e!eUf   d;e#e!eUf   de#e!ej                  f   fd                     ZV  ed       ejL                  eV            ZWeVjl                  jn                  ZXde#e!eUf   d;e#e!eUf   de#e!ej                  f   fdZY eddddd      ZZejd                  ejf                   edddg       ed      dde#e!eZf   de#e!eZf   fd                            Z[  ed       ejL                  e[            Z\e[jl                  jn                  Z]de#e!eZf   de#e!eZf   fdZ^ eddddd      Z_ eddd      Z`dde#e!e_f   de#e!e_f   de#e!e`f   de#e!e_f   fdZa  ed       ejL                  ea            Zbde#e!e_f   de#e!e_f   de#e!e`f   de#e!e_f   fdZc eddd d!ddd      Zdejd                  ejf                   edddg       ed      dde#e!edf   de#e!edf   fd                            Ze  ed       ejL                  ee            Zfeejl                  jn                  Zgde#e!edf   de#e!edf   fdZh eddd d!ddd      Ziejd                  ejf                   edddg       ed      dde#e!eif   de#e!eif   fd                            Zj  ed       ejL                  ej            Zkejjl                  jn                  Zlde#e!eif   de#e!eif   fdZmejd                  ejf                   edd      dde#e!ej                  f   d;e#e!ej                  f   de#e!ej                  f   fd                     Zn  ed       ejL                  en            Zoenjl                  jn                  Zpde#e!ej                  f   d;e#e!ej                  f   de#e!ej                  f   fdZqejd                  ejf                   edd      dde#e!ej                  f   de#e!ej                  f   fd                     Zr  ed       ejL                  er            Zserjl                  jn                  Ztde#e!ej                  f   de#e!ej                  f   fdZuejd                  ejf                   edd      dde#e!ej                  f   d;e#e!ej                  f   de#e!ej                  f   fd                     Zv  ed       ejL                  ev            Zwevjl                  jn                  Zxde#e!ej                  f   d;e#e!ej                  f   de#e!ej                  f   fdZy eddd d!dddddd'd(d)d*      Zzdde#e!ezf   de#e!ezf   deHdeHdeHdeHde#e!ezf   fdƄZ{  edǫ       ejL                  e{            Z|de#e!ezf   de#e!ezf   deHdeHdeHdeHde#e!ezf   fdȄZ} edddddddddd"d#d$d%d&d'd(d)d*      Z~ eddd      ZddJe#e!e~f   dKe#e!ef   dLeHde#e!e~f   fd˄Z  ed̫       ejL                  e            ZdJe#e!e~f   dKe#e!ef   dLeHde#e!e~f   fd̈́Z edddddddddd'd(d)d*      Zejd                  ejf                   edϐdЫ      dde#e!ef   d;e#e!ef   de#e!ef   fdф                     Z  edҫ       ejL                  e            Zejl                  jn                  Zde#e!ef   d;e#e!ef   de#e!ef   fdӄZ eddd d!dddddddd"d#d$d%d&d'd(d)d*      Z eddd      ZddJe#e!ef   dKe#e!ef   dLeHde#e!ef   fdքZ  ed׫       ejL                  e            ZdJe#e!ef   dKe#e!ef   dLeHde#e!ef   fd؄Z edddddddddd"d#d$d%d&d'd(d)d*      Z eddd      ZddJe#e!ef   dKe#e!ef   dLeHde#e!ef   fdۄZ  edܫ       ejL                  e            ZdJe#e!ef   dKe#e!ef   dLeHde#e!ef   fd݄Z edddddddddd'd(d)d*      Zejd                  ejf                   edߐd      dde#e!ef   d;e#e!ef   de#e!ef   fd                     Z  ed       ejL                  e            Zejl                  jn                  Zde#e!ef   d;e#e!ef   de#e!ef   fdZ edddddddd      Zdde#e!ef   d;e#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   d;e#e!ef   de#e!ef   fdZ eddd d!dddddddd'd(d)d*      Zdde#e!ef   d;e#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   d;e#e!ef   de#e!ef   fdZ eddd d!ddd      Zdde#e!ef   d;e#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   d;e#e!ef   de#e!ef   fdZ eddddd      Zdde#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   de#e!ef   fdZ eddd d!ddddddd      Zejd                  ejf                   edd      dde#e!ef   de#e!ef   fd                     Z  ed       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fdZ eddd      Zejd                  ejf                   ed      dde#e!ef   de#e!ef   de#e!ef   fd                     Z  ed       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   de#e!ef   fd Z ed Zdde#e!ef   d;e#e!ef   deHde#e!ej                  f   fdZ  ed       ejL                  e            Zde#e!ef   d;e#e!ef   deHde#e!ej                  f   fdZ eddd      Zejd                  ejf                   edddg       ed      dde#e!ef   de#e!ef   de#e!ef   fd                            Z  ed	       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   de#e!ef   fd
Z eddd d!ddddddd      Zdde#e!ef   d;e#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   d;e#e!ef   de#e!ef   fdZ eddd d!dddddddd"d#d$d%d&d'd(d)d*      Z eddd      ZddJe#e!ef   dKe#e!ef   dLeHde#e!ef   fdZ  ed       ejL                  e            ZdJe#e!ef   dKe#e!ef   dLeHde#e!ef   fdZ ej                  dg d      Z edd"d#d$d%d&      Z edd"d#d$d%d&      ZƐddJe#e!ef   de#e!ej                  f   de#e!ej                  f   defdZ  ed       ejL                  eȫ            ZdJe#e!ef   de#e!ej                  f   de#e!ej                  f   defdZ ej                  dg d      Z ed d"d#d$d%d&      Z ed!d"d#d$d%d&      Z ed"d"d#d$d%d&      Zej                  dfde#e!ef   d;e#e!ef   d#e#e!ej                  f   d$e#e!ej                  f   d%e#e!ej                  f   d&e#e!ej                  f   d'efd(Z  ed)       ejL                  eЫ            Zde#e!ef   d;e#e!ef   d#e#e!ej                  f   d$e#e!ej                  f   d%e#e!ej                  f   d&e#e!ej                  f   d'efd*Z ej                  d+g d,      Z ed-d"d#d$d%d&      Z ed.d"d#d$d%d&      Z ed/d"d#d$d%d&      Z ed0d"d#d$d%d&      Zej                  dIdIej                  dfde#e!ef   de#e!ef   d1e#e!ej                  f   d2e#e!ej                  f   d3e#e!ej                  f   d4e#e!ej                  f   d'e֐deHdeHd5efd6Z  ed7       ejL                  e٫            Zde#e!ef   de#e!ef   d1e#e!ej                  f   d2e#e!ej                  f   d3e#e!ej                  f   d4e#e!ej                  f   d'e֐deHdeHd5efd8Z ej                  d9g d      Z ed:d"d#d$d%d&      Z ed;d"d#d$d%d&      Z ed<d"d#d$d%d&      Zej                  dfde#e!ef   d;e#e!ef   d#e#e!ej                  f   d$e#e!ej                  f   d%e#e!ej                  f   d&e#e!ej                  f   d'efd=Z  ed>       ejL                  e            Zde#e!ef   d;e#e!ef   d#e#e!ej                  f   d$e#e!ej                  f   d%e#e!ej                  f   d&e#e!ej                  f   d'efd?Z ed@dd      Z edAdddd      ZddBe#e!ej                  f   dOe#e!ef   de#e!ef   de#e!ef   deHde#e!ef   fdCZ  edD       ejL                  e            ZdBe#e!ej                  f   dOe#e!ef   de#e!ef   de#e!ef   deHde#e!ef   fdEZ edFddddddddd'd(      Zdde#e!ef   dGe#e!ef   dHe#e!ef   de#e!ef   fdIZ  edJ       ejL                  e            Zde#e!ef   dGe#e!ef   dHe#e!ef   de#e!ef   fdKZ edLd d!      Z edMdd      Zej                  dfdJe#e!ef   dRede#e!ef   fdNZ  edO       ejL                  e            ZdJe#e!ef   dRede#e!ef   fdPZ edQdd d!dddddddd'd(d)d*      Zejd                  ejf                   edR      dde#e!ef   d;e#e!ef   de#e!ef   fdS                     Z  edT       ejL                  e            Zejl                  jn                  Zde#e!ef   d;e#e!ef   de#e!ef   fdUZ edVdd d!ddddddd      Zejd                  ejf                   edWdWdXg       edX      dde#e!ef   de#e!ef   fdY                            Z  edZ       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fd[Z ed\dd d!ddd      Zdd;e#e!ef   dpe#e!ef   de#e!ef   fd]Z  ed^       ejL                  e            Zd;e#e!ef   dpe#e!ef   de#e!ef   fd_Z ej                  d`dadbg      Z  edcd"d#d$d%d&      ZddJe#e!ef   de#e!ej                  f   de#e!ej                  f   fddZ  ede       ejL                  e            ZdJe#e!ef   de#e!ej                  f   de#e!ej                  f   fdfZ ej                  dgdadbg      Z edhd"d#d$d%d&      ZddJe#e!ef   de#e!ej                  f   de#e!ej                  f   deVfdiZ  edj       ejL                  e            ZdJe#e!ef   de#e!ej                  f   de#e!ej                  f   deVfdkZ	 ej                  dlg d      Z
 edmd"d#d$d%d&      Z ednd"d#d$d%d&      ZddJe#e!ef   de#e!ej                  f   de#e!ej                  f   doe#e!ej                  f   dpe#e!ej                  f   defdqZ  edr       ejL                  e            ZdJe#e!ef   de#e!ej                  f   de#e!ej                  f   doe#e!ej                  f   dpe#e!ej                  f   defdsZ ej                  dtg d      Z edud"d#d$d%d&      Z edvd"d#d$d%d&      Zej                  dfdJe#e!ef   de#e!ej                  f   de#e!ej                  f   doe#e!ej                  f   dpe#e!ej                  f   defdwZ  edx       ejL                  e            ZdJe#e!ef   de#e!ej                  f   de#e!ej                  f   doe#e!ej                  f   dpe#e!ej                  f   defdyZ edzdddd      Zejd                  ejf                   ed{d{d|g       ed|      dde#e!ef   de#e!ef   fd}                            Z  ed~       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fdZ eddd d!ddddddd      Zdde#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   de#e!ef   fdZ eddd d!ddd      Zdde#e!ef   de#e!ef   fdZ   ed       ejL                  e             Z!de#e!ef   de#e!ef   fdZ" eddd d!ddd      Z#dd;e#e!e#f   dpe#e!e#f   de#e!e#f   fdZ$  ed       ejL                  e$            Z%d;e#e!e#f   dpe#e!e#f   de#e!e#f   fdZ& edddddddddd'd(d)d*      Z' eddd      Z(ejd                  ejf                   edddg       ed      dde#e!e'f   de#e!e(f   de#e!e'f   fd                            Z)  ed       ejL                  e)            Z*e)jl                  jn                  Z+de#e!e'f   de#e!e(f   de#e!e'f   fdZ, edddddddddd'd(d)d*      Z- eddd      Z. eddd      Z/dde#e!e-f   de#e!e.f   de#e!e/f   de#e!e-f   fdZ0  ed       ejL                  e0            Z1de#e!e-f   de#e!e.f   de#e!e/f   de#e!e-f   fdZ2 eddd d!dddddddd"d#d$d%d&d'd(d)d*      Z3 eddd      Z4ejd                  ejf                   edddg       ed      dde#e!e3f   de#e!e4f   de#e!e3f   fd                            Z5  ed       ejL                  e5            Z6e5jl                  jn                  Z7de#e!e3f   de#e!e4f   de#e!e3f   fdZ8 edddddddddd'd(d)d*      Z9 eddd      Z:ejd                  ejf                   edddg       ed      dde#e!e9f   de#e!e:f   de#e!e9f   fd                            Z;  ed       ejL                  e;            Z<e;jl                  jn                  Z=de#e!e9f   de#e!e:f   de#e!e9f   fdZ> edddddddddd'd(d)d*      Z? eddd      Z@ eddd      ZAdde#e!e?f   de#e!e@f   de#e!eAf   de#e!e?f   fdZB  ed       ejL                  eB            ZCde#e!e?f   de#e!e@f   de#e!eAf   de#e!e?f   fdZD eddd d!dddddddd"d#d$d%d&d'd(d)d*      ZE eddd      ZFejd                  ejf                   edddg       ed      dde#e!eEf   de#e!eFf   de#e!eEf   fd                            ZG  ed       ejL                  eG            ZHeGjl                  jn                  ZIde#e!eEf   de#e!eFf   de#e!eEf   fdZJ eddd d!dddddddd"d#d$d%d&d'd(d)d*      ZK eddd      ZL eddd      ZMdde#e!eKf   de#e!eLf   de#e!eMf   de#e!eKf   fdZN  ed       ejL                  eN            ZOde#e!eKf   de#e!eLf   de#e!eMf   de#e!eKf   fdZP eddd d!dddddddd"d#d$d%d&d'd(d)d*      ZQ eddd      ZRejd                  ejf                   edddg       ed      dde#e!eQf   de#e!eRf   de#e!eQf   fd                            ZS  ed«       ejL                  eS            ZTeSjl                  jn                  ZUde#e!eQf   de#e!eRf   de#e!eQf   fdÄZV eddd d!dddddddd"d#d$d%d&d'd(d)d*      ZW eddd      ZX eddd      ZYdde#e!eWf   de#e!eXf   de#e!eYf   de#e!eWf   fdǄZZ  edȫ       ejL                  eZ            Z[de#e!eWf   de#e!eXf   de#e!eYf   de#e!eWf   fdɄZ\ edʎ Z]dde#e!ej                  f   de#e!e]f   d;e#e!e]f   de#e!e]f   fd̄Z^  edͫ       ejL                  e^            Z_de#e!ej                  f   de#e!e]f   d;e#e!e]f   de#e!e]f   fd΄Z` edώ Zadde#e!ej                  f   de#e!eaf   de#e!eaf   de#e!eaf   fdфZb  edҫ       ejL                  eb            Zcde#e!ej                  f   de#e!eaf   de#e!eaf   de#e!eaf   fdӄZd eddd d!ddd      Zedde#e!eef   de#e!eef   fdՄZf  ed֫       ejL                  ef            Zgde#e!eef   de#e!eef   fdׄZh eddd d!ddd      Zidd;e#e!eif   dpe#e!eif   de#e!eif   fdلZj  edګ       ejL                  ej            Zkd;e#e!eif   dpe#e!eif   de#e!eif   fdۄZl eddd d!ddddddd      Zmdde#e!emf   de#e!emf   fd݄Zn  edޫ       ejL                  en            Zode#e!emf   de#e!emf   fd߄Zp eddd d!ddd      Zqejd                  ejf                   edd      dde#e!eqf   de#e!eqf   fd                     Zr  ed       ejL                  er            Zserjl                  jn                  Ztde#e!eqf   de#e!eqf   fdZu eddd d!ddd      Zvejd                  ejf                   edd      dde#e!evf   de#e!evf   fd                     Zw  ed       ejL                  ew            Zxewjl                  jn                  Zyde#e!evf   de#e!evf   fdZz eddd      Z{ej                  dfde#e!ej(                  f   de#e!ej(                  f   de#e!ej(                  f   dRe{de#e!e{f   f
dZ|  ed       ejL                  e|            Z}de#e!ej(                  f   de#e!ej(                  f   de#e!ej(                  f   dRe{de#e!e{f   f
dZ~ eddd      Z eddddd      Zdde#e!ej                  f   dOe#e!ef   de#e!ej                  f   de#e!ef   de#e!ef   deHde#e!ef   fdZ  ed       ejL                  e            Zde#e!ej                  f   dOe#e!ef   de#e!ej                  f   de#e!ef   de#e!ef   deHde#e!ef   fdZ eddd      Z eddd      Zdde#e!ef   de#e!ef   deHdeHdeHdeHde#e!ej                  f   fdZ  ed       ejL                  e            Zde#e!ef   de#e!ef   deHdeHdeHdeHde#e!ej                  f   fd Z eddddd      Z eddd      Z eddd      Zdde#e!ef   de#e!ef   de#e!ef   deHde#e!ef   f
dZ  ed       ejL                  e            Zde#e!ef   de#e!ef   de#e!ef   deHde#e!ef   f
dZ eddddd      Z ed	dd      Z ed
dd      Zdde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   de#e!ef   f
dZ  ed       ejL                  e            Zde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   de#e!ef   f
dZ ej                  dddg      Z eddddd      Z eddd      Z eddd      Zdde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   fdZ  ed       ejL                  e            Zde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   fdZ eddddd      Z eddd      Z eddd      Z eddd      Zdde#e!ef   de#e!ef   de#e!ef   de#e!ef   deHde#e!ef   fdZ  ed       ejL                  e            Zde#e!ef   de#e!ef   de#e!ef   de#e!ef   deHde#e!ef   fd Z ed!dddd      Z ed"dd      Z ed#dd      Zdde#e!ef   de#e!ef   de#e!ef   deHde#e!ef   f
d$Z  ed%       ejL                  e            Zde#e!ef   de#e!ef   de#e!ef   deHde#e!ef   f
d&Z ed'dddd      Z ed(dd      Z ed)dd      Zdde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   de#e!ef   f
d*Z  ed+       ejL                  e            Zde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   de#e!ef   f
d,Z ej                  d-ddg      Z ed.dddd      Z ed/dd      Z ed0dd      Zdde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   fd1Z  ed2       ejL                  e            Zde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   fd3Z ed4dddd      Z ed5dd      Z ed6dd      Z ed7dd      Zdde#e!ef   de#e!ef   de#e!ef   de#e!ef   deHde#e!ef   fd8Z  ed9       ejL                  e            Zde#e!ef   de#e!ef   de#e!ef   de#e!ef   deHde#e!ef   fd:Z ed;ddddddddd'd(d)d*      Z ed<dd      Z ed=dd      Zdde#e!ef   de#e!ef   de#e!ef   deHde#e!ef   f
d>Z  ed?       ejL                  e            Zde#e!ef   de#e!ef   de#e!ef   deHde#e!ef   f
d@Z edAdddd      Z edBdd      Z edCdd      ZŐdde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   de#e!ef   f
dDZ  edE       ejL                  eƫ            Zǐde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   de#e!ef   f
dFZ ej                  dGddg      Z edHdddd      Z edIdd      Z edJdd      Z̐dde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   fdKZ  edL       ejL                  eͫ            Zΐde#e!ef   de#e!ef   de#e!ef   de#e!ej(                  f   fdMZ edNddddddddd'd(d)d*      Z edOdd      Z edPdd      Z edQdd      ZӐdde#e!ef   de#e!ef   de#e!ef   de#e!ef   deHde#e!ef   fdRZ  edS       ejL                  eԫ            ZՐde#e!ef   de#e!ef   de#e!ef   de#e!ef   deHde#e!ef   fdTZ edUdd d!ddd      Zאdde#e!ef   de#e!ef   fdVZ  edW       ejL                  eث            Zde#e!ef   de#e!ef   fdXZ edYdd d!ddd      Zېdd;e#e!ef   dpe#e!ef   de#e!ef   fdZZ  ed[       ejL                  eܫ            Zd;e#e!ef   dpe#e!ef   de#e!ef   fd\Z ed]dd d!dddddddd'd(d)d*      Zejd                  ejf                   ed^d_      dde#e!ef   de#e!ef   fd`                     Z  eda       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fdbZ edcdd d!ddddd	      Zejd                  ejf                   edddddeg       ede      dde#e!ef   d;e#e!ef   de#e!ef   fdf                            Z  edg       ejL                  e            Zejl                  jn                  Zde#e!ef   d;e#e!ef   de#e!ef   fdhZ edidd d!dddddddd'd(d)d*      Zdde#e!ef   d;e#e!ef   de#e!ef   fdjZ  edk       ejL                  e            Zde#e!ef   d;e#e!ef   de#e!ef   fdlZ edmdd d!dddddddd"d#d$d%d&d'd(d)d*      Z edndd      ZddJe#e!ef   dKe#e!ef   dLeHde#e!ef   fdoZ  edp       ejL                  e            ZdJe#e!ef   dKe#e!ef   dLeHde#e!ef   fdqZ edrdd d!ddd      Zejd                  ejf                   edsdt      dde#e!ef   de#e!ef   fdu                     Z  edv       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fdwZ edxdd d!ddd      Zejd                  ejf                   edydzd{      dde#e!ef   de#e!ef   fd|                     Z  ed}       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   fd~Z eddd d!ddd      Zdd;e#e!ef   dpe#e!ef   de#e!ef   fdZ  ed       ejL                  e            Zd;e#e!ef   dpe#e!ef   de#e!ef   fdZ eddd d!dddddddd'd(d)d*      Z ejd                  ejf                   ed      dde#e!e f   d;e#e!e f   de#e!e f   fd                     Z  ed       ejL                  e            Zejl                  jn                  Zde#e!e f   d;e#e!e f   de#e!e f   fdZ eddddddd      Zejd                  ejf                   ed      dde#e!ef   d;e#e!ef   de#e!ef   fd                     Z  ed       ejL                  e            Zejl                  jn                  Zde#e!ef   d;e#e!ef   de#e!ef   fdZ	 edddddddddd'd(d)d*      Z
 eddd      Z eddd      Zejd                  ejf                   edddg       ed      dde#e!e
f   de#e!ef   de#e!ef   de#e!e
f   fd                            Z  ed       ejL                  e            Zejl                  jn                  Zde#e!e
f   de#e!ef   de#e!ef   de#e!e
f   fdZ edddddddddd'd(d)d*      Z eddd      Z eddd      Zejd                  ejf                   edddg       ed      dde#e!ef   de#e!ef   de#e!ef   de#e!ef   fd                            Z  ed       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   de#e!ef   de#e!ef   fdZ eddd d!dddddddd"d#d$d%d&d'd(d)d*      Z eddd      Z eddd      Zejd                  ejf                   edddg       ed      dde#e!ef   de#e!ef   de#e!ef   de#e!ef   fd                            Z  ed       ejL                  e            Zejl                  jn                  Zde#e!ef   de#e!ef   de#e!ef   de#e!ef   fdZ eddd d!dddddddd"d#d$d%d&d'd(d)d*      Z edddd      Z  eddd      Z!ejd                  ejf                   edddg       ed      dde#e!ef   de#e!e f   de#e!e!f   de#e!ef   fd                            Z"  ed       ejL                  e"            Z#e"jl                  jn                  Z$de#e!ef   de#e!e f   de#e!e!f   de#e!ef   fdZ% eddd d!ddd      Z&dde#e!e&f   d;e#e!e&f   de#e!e&f   fdZ'  ed       ejL                  e'            Z(de#e!e&f   d;e#e!e&f   de#e!e&f   fdZ) eddd d!ddd      Z*dde#e!e*f   d;e#e!e*f   de#e!e*f   fdZ+  ed       ejL                  e+            Z,de#e!e*f   d;e#e!e*f   de#e!e*f   fdZ- eddd d!ddd      Z.ejd                  ejf                   ed      dde#e!e.f   d;e#e!e.f   de#e!e.f   fd                     Z/  ed       ejL                  e/            Z0e/jl                  jn                  Z1de#e!e.f   d;e#e!e.f   de#e!e.f   fdZ2 eddd      Z3ejd                  ejf                   edddg       ed      dde#e!e3f   de#e!e3f   de#e!e3f   fd                            Z4  ed       ejL                  e4            Z5e4jl                  jn                  Z6de#e!e3f   de#e!e3f   de#e!e3f   fdZ7y(  zUPython wrappers around TensorFlow ops.

This file is MACHINE GENERATED! Do not edit.
    N)
pywrap_tfe)context)core)execute)dtypes)annotation_types)op_def_registry)ops)op_def_library)deprecated_endpoints)dispatch)	tf_export)TypeVarListAny)	AnnotatedTV_Abs_T_atypes.BFloat16_atypes.Float32_atypes.Float64_atypes.Half_atypes.Int16_atypes.Int32_atypes.Int64_atypes.Int8xreturnc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)a  Computes the absolute value of a tensor.

  Given a tensor `x`, this operation returns a tensor containing the absolute
  value of each element in `x`. For example, if x is an input element and y is
  an output element, this operation computes \\(y = |x|\\).

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int8`, `int16`, `int32`, `int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  AbsNnamectxr   r!   T)_contextr   _thread_local_datais_eagerr   TFE_Py_FastPathExecute_core_NotOkStatusException_opsraise_from_not_ok_status_FallbackException_abs_eager_fallback_SymbolicException_op_def_library_apply_op_helper_executemust_record_gradient_get_attr_typeinputsrecord_gradientr   r!   _ctxtld_resulte__op_outputs_attrs_inputs_flats              R/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/ops/gen_math_ops.py_absrB      s7    
			0h..0$#\\11eT1gn (88!QXQK'""$3%%c*+F::L|VW.('	.' && -
##At,,## 
 
$D" "## 
0    C D C;;DDD& &D<;D<zraw_ops.Absc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   Abs   r5   attrsr"   r!   r   )r2   args_to_matching_eager_dtypesbfloat16halffloat32float64int8int16int32int64r   r3   r6   r   r!   r"   _attr_Tr@   r?   r:   s          rA   r.   r.   H   s    111#sW=M=Mw||]d]l]lnun}n}  @G  @L  @L  NU  N[  N[  ]d  ]j  ]j  ls  ly  ly  =|  }-'4A,>&VQ|6!$41'""$|VW.('	.    TV_AccumulateNV2_T_atypes.Complex128_atypes.Complex64_atypes.QInt16_atypes.QInt32_atypes.QInt8_atypes.QUInt16_atypes.QUInt8_atypes.UInt16_atypes.UInt32_atypes.UInt64_atypes.UInt8r5   c                 V   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| d|      }|S t        | t        t        f      st!        d| z        t#        |       }t%        j&                  |d      }t)        j*                  d| ||      \  }}}	}
|
dd }t%        j,                         rYd|	j/                  d      d|	j1                  d      d|	j3                  d      f}|	j4                  }t%        j6                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y Kw xY w)	a  Returns the element-wise sum of a list of tensors.

  `tf.accumulate_n_v2` performs the same operation as `tf.add_n`, but does not
  wait for all of its inputs to be ready before beginning to sum. This can
  save memory if inputs are ready at different times, since minimum temporary
  storage is proportional to the output size rather than the inputs size.

  Unlike the original `accumulate_n`, `accumulate_n_v2` is differentiable.

  Returns a `Tensor` of same shape and type as the elements of `inputs`.

  Args:
    inputs: A list of at least 1 `Tensor` objects with the same type in: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
      A list of `Tensor` objects, each with same shape and type.
    shape: A `tf.TensorShape` or list of `ints`.
      Shape of elements of `inputs`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `inputs`.
  AccumulateNV2shapeN)rc   r!   r"   CExpected list for 'inputs' argument to 'accumulate_nv2' Op, not %r.)r5   rc   r!   Nr$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   accumulate_nv2_eager_fallbackr/   
isinstancelisttuple	TypeErrorlenr2   
make_shaper0   r1   r3   _get_attr_intr4   get_attrr5   r6   )r5   rc   r!   r8   r9   r:   r;   _attr_Nr<   r=   r>   r?   r@   s                rA   accumulate_nv2rp   W   s   , 
			0h..0$#\\11otVWe=gn 
FT5M	*
	')/	01 1 K'


eW
-%'88e$@!QXQK'""$3$$S)30B0B30Gs||G,.F::Lvw8('	.5 && -
##At,,## 
*
Dd4 4## 
s0    D7 7E>
E%%E>=E>F F('F(zraw_ops.AccumulateNV2c                    t        | t        t        f      st        d| z        t	        |       }t        j                  |d      }t        j                  t        |       |t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  t        j.                  t        j0                  t        j2                  t        j4                  t        j6                  g      \  }} t        |       }d|d|d|f}t        j8                  dd||||      }t        j:                         rt        j<                  d|||       |\  }|S )	Nrd   rc   re   r$   s   AccumulateNV2rE   rF   rb   )rg   rh   ri   rj   rk   r2   rl   rH   rI   rL   rM   rP   uint8rO   rN   	complex64rQ   qint8quint8qint32rJ   qint16quint16uint16
complex128rK   uint32uint64r   r3   r6   )	r5   rc   r!   r"   ro   rS   r@   r?   r:   s	            rA   rf   rf      s;   	FT5M	*
	')/	01 1 K'


eW
-%33DL#Y`YhYhjqjwjw  zA  zG  zG  IP  IV  IV  X_  Xd  Xd  fm  fw  fw  y@  yF  yF  HO  HU  HU  W^  We  We  gn  gu  gu  w~  wG  wG  IP  IW  IW  Y`  Yh  Yh  jq  jx  jx  zA  zL  zL  NU  NZ  NZ  \c  \j  \j  ls  lz  lz  H}  ~/'6f,#w7&-q#)s?'""$vw8('	.rT   	TV_Acos_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)a  Computes acos of x element-wise.

  
    Provided an input tensor, the `tf.math.acos` operation returns the inverse cosine of each element of the tensor. If `y = tf.math.cos(x)` then, `x = tf.math.acos(y)`.

    Input range is `[-1, 1]` and the output has a range of `[0, pi]`.

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  AcosNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   acos_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   acosr      s7    
			0h..0$#\\11fdAgn (88!$ !QXQK'""$3%%c*+F::Lfg/('	.' && -
##At,,## 
 
$D" "## 
rC   zraw_ops.Acosc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   AcosrE   rF   r   r2   rH   rI   rJ   rK   rL   rM   rs   rz   r   r3   r6   rR   s          rA   r   r          111#sW=M=Mw||]d]l]lnun}n}  @G  @Q  @Q  SZ  Se  Se  =h  i-'4A,>&WaF!$41'""$fg/('	.rT   
TV_Acosh_Tz
math.acoshacoshc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)aj  Computes inverse hyperbolic cosine of x element-wise.

  Given an input tensor, the function computes inverse hyperbolic cosine of every element.
  Input range is `[1, inf]`. It returns `nan` if the input lies outside the range.

  ```python
  x = tf.constant([-2, -0.5, 1, 1.2, 200, 10000, float("inf")])
  tf.math.acosh(x) ==> [nan nan 0. 0.62236255 5.9914584 9.903487 inf]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  AcoshNr     r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_acoshNotImplementedacosh_eager_fallbackr/   rj   
ValueError	_dispatchr   r   dictOpDispatcherNOT_SUPPORTEDr0   r1   r2   r3   r4   r5   r6   r7   s              rA   r   r         * 
			0h..0$#\\11gtQ gn, $	
D
DGn$n	
)::14!Aq#x QK'""$3%%c*+F::Lvw0('	.W && -
##At,,## 
%d*dg		&!
$D" "## 
z" ""2tad+g 
	..<<	<  Z	  
  
TAD)
G i,,:::n	
P    C& 3G &D-9DD-,D-1E 	E G,AG GAHHzraw_ops.Acoshc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   AcoshrE   rF   r   r   rR   s          rA   r   r   2      111#sW=M=Mw||]d]l]lnun}n}  @G  @Q  @Q  SZ  Se  Se  =h  i-'4A,>&XqV!$41'""$vw0('	.rT   TV_Add_T_atypes.Stringyc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Returns x + y element-wise.

  *NOTE*: `Add` supports broadcasting. `AddN` does not. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Given two input tensors, the `tf.add` operation computes the sum for every element in the tensor.

  Both input and output have a range `(-inf, inf)`.

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `int16`, `int32`, `int64`, `complex64`, `complex128`, `string`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  AddNr    r   r   r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   add_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s               rA   addr   A  s=   $ 
			0h..0$#\\11eT1a!gn (88ad$!QXQK'""$3%%c*+F::L|VW.('	.' && -
##At,,## 

QTt% %## 
0    C D"C==DDD) )D?>D?zraw_ops.Addc                 V   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   s   AddrE   rF   r   )r2   rH   rI   rJ   rK   rL   rM   rr   rN   rO   rP   rQ   rs   rz   stringr   r3   r6   	r   r   r!   r"   rS   	_inputs_Tr@   r?   r:   s	            rA   r   r   r  sa   661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  Wc  Wc  el  er  er  t{  tA  tA  CJ  CP  CP  RY  Rc  Rc  el  ew  ew  y@  yG  yG  EJ  K'9&1aQ,>&VQ|6!$41'""$|VW.('	.rT   	TV_AddN_T_atypes.Variantc                     t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | t        t        f      st!        d| z        t#        |       }t%        j&                  d| |      \  }}}}	|	dd }t)        j*                         rHd|j-                  d      d|j/                  d      f}
|j0                  }t)        j2                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y "w xY w)a   Add all input tensors element wise.

    Inputs must be of same size and shape.

    ```python
    x = [9, 7, 10]
    tf.math.add_n(x) ==> 26
    ```

  Args:
    inputs: A list of at least 1 `Tensor` objects with the same type in: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`, `variant`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `inputs`.
  AddNNr    :Expected list for 'inputs' argument to 'add_n' Op, not %r.)r5   r!   re   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   add_n_eager_fallbackr/   rg   rh   ri   rj   rk   r0   r1   r2   r3   rm   r4   r5   r6   )r5   r!   r8   r9   r:   r;   ro   r<   r=   r>   r?   r@   s               rA   add_nr     sy   " 
			0h..0$#\\11fdF$gn 
FT5M	*
	 &	'( ( K''88vD*!QXQK'""$3$$S)30B0B30GHF::Lfg/('	.1 && -
##At,,## 
!
t' '## 
s0    D E D;;EEE& &E=<E=zraw_ops.AddNc                    t        | t        t        f      st        d| z        t	        |       }t        j                  t        |       |t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  t        j.                  t        j0                  t        j2                  t        j4                  t        j6                  g      \  }} t        |       }d|d|f}t        j8                  dd||||      }t        j:                         rt        j<                  d|||       |\  }|S )Nr   re   r$   s   AddNrE   rF   r   )rg   rh   ri   rj   rk   r2   rH   rI   rL   rM   rP   rr   rO   rN   rs   rQ   rt   ru   rv   rJ   rw   rx   ry   rz   rK   r{   r|   variantr   r3   r6   )r5   r!   r"   ro   rS   r@   r?   r:   s           rA   r   r     s9   	FT5M	*
	 &	'( ( K'33DL#Y`YhYhjqjwjw  zA  zG  zG  IP  IV  IV  X_  Xd  Xd  fm  fw  fw  y@  yF  yF  HO  HU  HU  W^  We  We  gn  gu  gu  w~  wG  wG  IP  IW  IW  Y`  Yh  Yh  jq  jx  jx  zA  zL  zL  NU  NZ  NZ  \c  \j  \j  ls  lz  lz  |C  |K  |K  HN  O/'6f,#w'&WaF!$41'""$fg/('	.rT   
TV_AddV2_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Returns x + y element-wise.

  *NOTE*: `Add` supports broadcasting. `AddN` does not. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `uint16`, `uint32`, `uint64`, `int8`, `int16`, `int32`, `int64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  AddV2Nr    r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   add_v2_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   s               rA   add_v2r     s=    
			0h..0$#\\11gtQ#gn (881&!QXQK'""$3%%c*+F::Lvw0('	.' && -
##At,,## 
"
QTt% %## 
r   zraw_ops.AddV2c                    t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   g      \  }}|\  } }| |g}d|f}t        j"                  dd||||      }t        j$                         rt        j&                  d|||       |\  }|S )Nr$   s   AddV2rE   rF   r   )r2   rH   rI   rJ   rK   rL   rM   rr   ry   r{   r|   rN   rO   rP   rQ   rs   rz   r   r3   r6   r   s	            rA   r   r     s   661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  We  We  gn  gu  gu  w~  wE  wE  GN  GS  GS  U\  Ub  Ub  dk  dq  dq  sz  s@  s@  BI  BS  BS  U\  Ug  Ug  Ej  k'9&1aQ,>&XqV!$41'""$vw0('	.rT   TV_All_TidxFinputaxis	keep_dimsc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rHd|	j%                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Computes the "logical and" of elements across dimensions of a tensor.

  Reduces `input` along the dimensions given in `axis`. Unless
  `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in
  `axis`. If `keep_dims` is true, the reduced dimensions are
  retained with length 1.

  Args:
    input: A `Tensor` of type `bool`. The tensor to reduce.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      The dimensions to reduce. Must be in the range
      `[-rank(input), rank(input))`.
    keep_dims: An optional `bool`. Defaults to `False`.
      If true, retain reduced dimensions with length 1.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  Allr   Nr   r!   r"   Fr   reduction_indicesr   r!   Tidx)r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _all_eager_fallbackr/   r2   	make_boolr0   r1   r3   _get_attr_boolr4   r5   r6   r   r   r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   _allr     z   ( 
			0h..0$#\\11eT5$Y@gn I  K8)'88Udi!QX QK'""$3--k:F  (*F::L|VW.('	.1 && -
##At,,## 
 
4A A## 
0    C= =ED++EEE E/.E/zraw_ops.Allc                    |d}t        j                  |d      }t        j                  |g|t        j                  t        j
                  gt        j                        \  }\  }t        j                  | t        j                        } | |g}d|d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )NFr   r   s   AllrE   rF   r   r2   r   rH   rI   rP   rQ   r+   convert_to_tensorboolr   r3   r6   	r   r   r   r!   r"   
_attr_Tidxr@   r?   r:   s	            rA   r   r   @      I  K8) 77gmmU\UbUbEegngtgtu*gt

 
 
5%,FJ7&VQ|6!$41'""$|VW.('	.rT   
TV_Angle_TTV_Angle_ToutToutc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| d|      }|S |t        j                  }t        j                   |d      }t#        j$                  d| ||      \  }}}}	|	dd }t        j&                         rHd|j)                  d      d|j)                  d      f}
|j*                  }t        j,                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)aj  Returns the argument of a complex number.

  Given a tensor `input` of complex numbers, this operation returns a tensor of
  type `float` that is the argument of each element in `input`. All elements in
  `input` must be complex numbers of the form \\(a + bj\\), where *a*
  is the real part and *b* is the imaginary part.

  The argument returned by this operation is of the form \\(atan2(b, a)\\).

  For example:

  ```
  # tensor 'input' is [-2.25 + 4.75j, 3.25 + 5.75j]
  tf.math.angle(input) ==> [2.0132, 1.056]
  ```

  @compatibility(numpy)
  Equivalent to np.angle.
  @end_compatibility

  Args:
    input: A `Tensor`. Must be one of the following types: `complex64`, `complex128`.
    Tout: An optional `tf.DType` from: `tf.float32, tf.float64`. Defaults to `tf.float32`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `Tout`.
  Angler   Nr   r!   r"   r   r   r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   angle_eager_fallbackr/   rI   rL   r2   	make_typer0   r1   r3   r4   r5   r6   r   r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s               rA   angler   T  sq   : 
			0h..0$#\\11gtUFD2gn 
\??D			D&	)$'88u4d4!QXQK'""$3%%c*F  (*F::Lvw0('	./ && -
##At,,## 
!
d41 1## 
0    D	 	ED77EEE# #E:9E:zraw_ops.Anglec                    |t         j                  }t        j                  |d      }t        j                  | g|t         j
                  t         j                  gt         j
                        \  }\  } | g}d|d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr   r$   s   AnglerE   rF   r   
rI   rL   r2   r   rH   rs   rz   r   r3   r6   r   r   r!   r"   rS   r@   r?   r:   s           rA   r   r     s    	\??D			D&	)$55ugsWEVEVX_XjXjDmov  pA  pA  B'8E,&$'&XqV!$41'""$vw0('	.rT   TV_Any_Tidxc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rHd|	j%                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Computes the "logical or" of elements across dimensions of a tensor.

  Reduces `input` along the dimensions given in `axis`. Unless
  `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in
  `axis`. If `keep_dims` is true, the reduced dimensions are
  retained with length 1.

  Args:
    input: A `Tensor` of type `bool`. The tensor to reduce.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      The dimensions to reduce. Must be in the range
      `[-rank(input), rank(input))`.
    keep_dims: An optional `bool`. Defaults to `False`.
      If true, retain reduced dimensions with length 1.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  r   r   Nr   Fr   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _any_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   r   s                rA   _anyr     r   r   zraw_ops.Anyc                    |d}t        j                  |d      }t        j                  |g|t        j                  t        j
                  gt        j                        \  }\  }t        j                  | t        j                        } | |g}d|d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )NFr   r   s   AnyrE   rF   r   r   r   s	            rA   r   r     r   rT   TV_ApproximateEqual_T	tolerancec           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rHd|	j%                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Returns the truth value of abs(x-y) < tolerance element-wise.

  Args:
    x: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
    y: A `Tensor`. Must have the same type as `x`.
    tolerance: An optional `float`. Defaults to `1e-05`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  ApproximateEqualr   N)r   r!   r"   h㈵>)r   r   r   r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-    approximate_equal_eager_fallbackr/   r2   
make_floatr0   r1   r3   r4   rn   r5   r6   )r   r   r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   approximate_equalr     su    
			0h..0$#\\11 $1k9Fgn I!!)[9)'88a1	F!QXQK'""$3%%c*Kll;')F::LL&';('	./ && -
##At,,## 
-
Q)$D: :## 
r   zraw_ops.ApproximateEqualc                 `   |d}t        j                  |d      }t        j                  | |g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  g      \  }}|\  } }| |g}d|d|f}t        j.                  dd||||      }	t        j0                         rt        j2                  d|||	       |	\  }	|	S )Nr   r   r$   s   ApproximateEqualrE   rF   r   )r2   r   rH   rI   rL   rM   rP   rr   rO   rN   rs   rQ   rt   ru   rv   rJ   rw   rx   ry   rz   rK   r{   r|   r   r3   r6   )
r   r   r   r!   r"   rS   r   r@   r?   r:   s
             rA   r   r      s   I!!)[9)661vsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  ct  ct  v}  vC  vC  EL  ER  ER  T[  Tb  Tb  dk  dr  dr  t{  tD  tD  FM  FT  FT  V]  Ve  Ve  gn  gu  gu  w~  wI  wI  KR  KW  KW  Y`  Yg  Yg  ip  iw  iw  Ez  {'9&1aQ,+y1&0!L#)s?'""$L&';('	.rT   TV_ArgMax_T_atypes.BoolTV_ArgMax_TidxTV_ArgMax_output_type	dimensionoutput_typec           	      "   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |t        j                  }t        j                   |d      }t#        j$                  d| |||      \  }}}	}
|
dd }t        j&                         rYd|	j)                  d      d|	j)                  d      d|	j)                  d      f}|	j*                  }t        j,                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y 0w xY w)as  Returns the index with the largest value across dimensions of a tensor.

  Note that in case of ties the identity of the return value is not guaranteed.

  Usage:
    ```python
    import tensorflow as tf
    a = [1, 10, 26.9, 2.8, 166.32, 62.3]
    b = tf.math.argmax(input = a)
    c = tf.keras.backend.eval(b)
    # c = 4
    # here a[4] = 166.32 which is the largest element of a across axis 0
    ```

  Args:
    input: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`, `qint8`, `quint8`, `qint32`, `qint16`, `quint16`, `bool`.
    dimension: A `Tensor`. Must be one of the following types: `int16`, `int32`, `int64`.
      int16, int32 or int64, must be in the range `[-rank(input), rank(input))`.
      Describes which dimension of the input Tensor to reduce across. For vectors,
      use dimension = 0.
    output_type: An optional `tf.DType` from: `tf.int16, tf.uint16, tf.int32, tf.int64`. Defaults to `tf.int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `output_type`.
  ArgMaxr   Nr   r!   r"   r   r   r   r!   r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   arg_max_eager_fallbackr/   rI   rQ   r2   r   r0   r1   r3   r4   r5   r6   r   r   r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   arg_maxr   5     6 
			0h..0$#\\11heY{Lgn --K"";>+'88!QX QK'""$3%%c*F  (-  /1F ::L,1('	.3 && -
##At,,## 
#
$DJ J## 
0    D E#/E

E#"E#'E7 7FFzraw_ops.ArgMaxc                    |t         j                  }t        j                  |d      }t        j                  | g|t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                   t         j"                  t         j$                  t         j&                  t         j(                  t         j*                  g      \  }\  } t        j                  |g|t         j                  t         j                  t         j                  gt         j                        \  }\  }| |g}d|d|d|f}t        j,                  dd||||      }	t        j.                         rt        j0                  d|||	       |	\  }	|	S )Nr   r$   r   s   ArgMaxrE   rF   r   rI   rQ   r2   r   rH   rL   rM   rP   rr   rO   rN   rJ   ry   rK   r{   r|   rt   ru   rv   rw   rx   r   r   r3   r6   
r   r   r   r!   r"   rS   r   r@   r?   r:   s
             rA   r   r   u  sP   --K"";>+55ugsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  cp  cp  ry  rB  rB  DK  DR  DR  T[  T`  T`  bi  bp  bp  ry  r@  r@  BI  BO  BO  QX  Q_  Q_  ah  ao  ao  qx  q  q  AH  AP  AP  RY  R^  R^  Ea  b'8E%<<i[#PWP]P]_f_l_lnun{n{O~  AH  AN  AN  O*ly#,&*m[I&Y,f!$41'""$,1('	.rT   TV_ArgMin_TTV_ArgMin_TidxTV_ArgMin_output_typec           	      "   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |t        j                  }t        j                   |d      }t#        j$                  d| |||      \  }}}	}
|
dd }t        j&                         rYd|	j)                  d      d|	j)                  d      d|	j)                  d      f}|	j*                  }t        j,                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y 0w xY w)aK  Returns the index with the smallest value across dimensions of a tensor.

  Note that in case of ties the identity of the return value is not guaranteed.

  Usage:
    ```python
    import tensorflow as tf
    a = [1, 10, 26.9, 2.8, 166.32, 62.3]
    b = tf.math.argmin(input = a)
    c = tf.keras.backend.eval(b)
    # c = 0
    # here a[0] = 1 which is the smallest element of a across axis 0
    ```

  Args:
    input: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`, `qint8`, `quint8`, `qint32`, `qint16`, `quint16`, `bool`.
    dimension: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      int32 or int64, must be in the range `[-rank(input), rank(input))`.
      Describes which dimension of the input Tensor to reduce across. For vectors,
      use dimension = 0.
    output_type: An optional `tf.DType` from: `tf.int32, tf.int64`. Defaults to `tf.int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `output_type`.
  ArgMinr   Nr   r   r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   arg_min_eager_fallbackr/   rI   rQ   r2   r   r0   r1   r3   r4   r5   r6   r   s                rA   arg_minr     r   r   zraw_ops.ArgMinc                    |t         j                  }t        j                  |d      }t        j                  | g|t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                   t         j"                  t         j$                  t         j&                  t         j(                  t         j*                  g      \  }\  } t        j                  |g|t         j                  t         j                  gt         j                        \  }\  }| |g}d|d|d|f}t        j,                  dd||||      }	t        j.                         rt        j0                  d|||	       |	\  }	|	S )Nr   r$   r   s   ArgMinrE   rF   r   r   r   s
             rA   r   r     s8   --K"";>+55ugsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  cp  cp  ry  rB  rB  DK  DR  DR  T[  T`  T`  bi  bp  bp  ry  r@  r@  BI  BO  BO  QX  Q_  Q_  ah  ao  ao  qx  q  q  AH  AP  AP  RY  R^  R^  Ea  b'8E%<<i[#PWP]P]_f_l_lOoqxq~q~*ly#,&*m[I&Y,f!$41'""$,1('	.rT   	TV_Asin_Tz	math.asinasinc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes the trignometric inverse sine of x element-wise.

  The `tf.math.asin` operation returns the inverse of `tf.math.sin`, such that
  if `y = tf.math.sin(x)` then, `x = tf.math.asin(y)`.

  **Note**: The output of `tf.math.asin` will lie within the invertible range
  of sine, i.e [-pi/2, pi/2].

  For example:

  ```python
  # Note: [1.047, 0.785] ~= [(pi/3), (pi/4)]
  x = tf.constant([1.047, 0.785])
  y = tf.math.sin(x) # [0.8659266, 0.7068252]

  tf.math.asin(y) # [1.047, 0.785] = x
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  AsinNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_asinr   asin_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r       : 
			0h..0$#\\11fdAgn, #	
D
DGn$n	
)::!$ Aq#x QK'""$3%%c*+F::Lfg/('	.W && -
##At,,## 
$d*dg		& 
$D" "## 
z" """dQT*g 
	..<<	<  Z	  
  
D14(
G i,,:::n	
r   zraw_ops.Asinc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   AsinrE   rF   r  r   rR   s          rA   r  r  2  r   rT   
TV_Asinh_Tz
math.asinhasinhc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes inverse hyperbolic sine of x element-wise.

    Given an input tensor, this function computes inverse hyperbolic sine
    for every element in the tensor. Both input and output has a range of
    `[-inf, inf]`.

    ```python
    x = tf.constant([-float("inf"), -2, -0.5, 1, 1.2, 200, 10000, float("inf")])
    tf.math.asinh(x) ==> [-inf -1.4436355 -0.4812118 0.8813736 1.0159732 5.991471 9.903487 inf]
    ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  AsinhNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_asinhr   asinh_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  A  s   , 
			0h..0$#\\11gtQ gn, $	
D
DGn$n	
)::14!Aq#x QK'""$3%%c*+F::Lvw0('	.W && -
##At,,## 
%d*dg		&!
$D" "## 
z" ""2tad+g 
	..<<	<  Z	  
  
TAD)
G i,,:::n	
r   zraw_ops.Asinhc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   AsinhrE   rF   r  r   rR   s          rA   r  r    r   rT   	TV_Atan_Tz	math.atanatanc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes the trignometric inverse tangent of x element-wise.

  The `tf.math.atan` operation returns the inverse of `tf.math.tan`, such that
  if `y = tf.math.tan(x)` then, `x = tf.math.atan(y)`.

  **Note**: The output of `tf.math.atan` will lie within the invertible range
  of tan, i.e (-pi/2, pi/2).

  For example:

  ```python
  # Note: [1.047, 0.785] ~= [(pi/3), (pi/4)]
  x = tf.constant([1.047, 0.785])
  y = tf.math.tan(x) # [1.731261, 0.99920404]

  tf.math.atan(y) # [1.047, 0.785] = x
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  AtanNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_atanr   atan_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r    r  r   zraw_ops.Atanc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   AtanrE   rF   r  r   rR   s          rA   r  r    r   rT   
TV_Atan2_Tz
math.atan2atan2c           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)au  Computes arctangent of `y/x` element-wise, respecting signs of the arguments.

  This is the angle \\( \theta \in [-\pi, \pi] \\) such that
  \\[ x = r \cos(\theta) \\]
  and
  \\[ y = r \sin(\theta) \\]
  where \\(r = \sqrt{x^2 + y^2} \\).

  For example:

  >>> x = [1., 1.]
  >>> y = [1., -1.]
  >>> print((tf.math.atan2(y,x) * (180 / np.pi)).numpy())
  [ 45. -45.]

  Args:
    y: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    x: A `Tensor`. Must have the same type as `y`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `y`.
  Atan2Nr    r   )r   r   r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_atan2r   atan2_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   )r   r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s               rA   r  r    s'   6 
			0h..0$#\\11gtQ#gn, $	
AttGn$n	
)::1&Aq#x QK'""$3%%c*+F::Lvw0('	.W && -
##At,,## 
%a-g		&!
QTt% %## 
z" ""2ta140g 
	..<<	<  Z	  
  
TA.
G i,,:::n	
P    C) 5G )D0<DD0/D04E E G1AGGAH#!H#zraw_ops.Atan2c                 f   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   Atan2rE   rF   r  
r2   rH   rI   rJ   rK   rL   rM   r   r3   r6   )	r   r   r!   r"   rS   r   r@   r?   r:   s	            rA   r  r  U  s    661vsWEUEUW^WcWceletetv}  wF  wF  EI  J'9&1aQ,>&XqV!$41'""$vw0('	.rT   
TV_Atanh_Tz
math.atanhatanhc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes inverse hyperbolic tangent of x element-wise.

    Given an input tensor, this function computes inverse hyperbolic tangent
    for every element in the tensor. Input range is `[-1,1]` and output range is
    `[-inf, inf]`. If input is `-1`, output will be `-inf` and if the
    input is `1`, output will be `inf`. Values outside the range will have
    `nan` as output.

    ```python
    x = tf.constant([-float("inf"), -1, -0.5, 1, 0, 0.5, 10, float("inf")])
    tf.math.atanh(x) ==> [nan -inf -0.54930615 inf  0. 0.54930615 nan nan]
    ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  AtanhNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_atanhr   atanh_eager_fallbackr/   rj   r   r   r   r"  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r"  r"  e  s   0 
			0h..0$#\\11gtQ gn, $	
D
DGn$n	
)::14!Aq#x QK'""$3%%c*+F::Lvw0('	.W && -
##At,,## 
%d*dg		&!
$D" "## 
z" ""2tad+g 
	..<<	<  Z	  
  
TAD)
G i,,:::n	
r   zraw_ops.Atanhc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   AtanhrE   rF   r$  r   rR   s          rA   r&  r&    r   rT   TV_BatchMatMul_Tadj_xadj_ygrad_xgrad_yc                    t         j                   xs t        j                         }|j                  }|j                  r$	 t	        j
                  |d|| |d|d|d|d|      }	|	S |d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }t        j                   d| ||||||	      \  }}}}|dd }	t        j"                         r{d
|j%                  d
      d|j'                  d      d|j'                  d      d|j'                  d      d|j'                  d      f
}|j(                  }t        j*                  d|||	       |	\  }	|	S # t        j                  $ r }
t        j                  |
|       Y d}
~
nd}
~
wt        j                  $ r Y nw xY w	 t        | |||||||      S # t        j                  $ r Y w xY w)a  Multiplies slices of two tensors in batches.

  Multiplies all slices of `Tensor` `x` and `y` (each slice can be
  viewed as an element of a batch), and arranges the individual results
  in a single output tensor of the same batch size. Each of the
  individual slices can optionally be adjointed (to adjoint a matrix
  means to transpose and conjugate it) before multiplication by setting
  the `adj_x` or `adj_y` flag to `True`, which are by default `False`.

  The input tensors `x` and `y` are 2-D or higher with shape `[..., r_x, c_x]`
  and `[..., r_y, c_y]`.

  The output tensor is 2-D or higher with shape `[..., r_o, c_o]`, where:

      r_o = c_x if adj_x else r_x
      c_o = r_y if adj_y else c_y

  It is computed as:

      output[..., :, :] = matrix(x[..., :, :]) * matrix(y[..., :, :])

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int32`, `int64`, `complex64`, `complex128`.
      2-D or higher with shape `[..., r_x, c_x]`.
    y: A `Tensor`. Must have the same type as `x`.
      2-D or higher with shape `[..., r_y, c_y]`.
    adj_x: An optional `bool`. Defaults to `False`.
      If `True`, adjoint the slices of `x`. Defaults to `False`.
    adj_y: An optional `bool`. Defaults to `False`.
      If `True`, adjoint the slices of `y`. Defaults to `False`.
    grad_x: An optional `bool`. Defaults to `False`.
    grad_y: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  BatchMatMulr)  r*  r+  r,  Nr)  r*  r+  r,  r!   r"   Fr   r   r)  r*  r+  r,  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   batch_mat_mul_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   r   r   r)  r*  r+  r,  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                   rA   batch_mat_mulr3    s   L 
			0h..0$#\\11mT1a%%&(F,g n ]E


UG
,%
]E


UG
,%^Ffh/&^Ffh/&'88auE&$41!QX QK'""$3%%c*G  )7  )8  *H  *	,F
 ::L|VW6('	.K && -
##At,,## 
)
Qe5  ## 
0    "F GF55GGG% %G<;G<zraw_ops.BatchMatMulc                    |d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }t        j                  | |g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}	|	\  } }| |g}
d|d|d|d|d|f
}t        j                  dd|
|||	      }t        j                         rt        j                  d
|
||       |\  }|S )NFr)  r*  r+  r,  r$   s   BatchMatMulrE   rF   r.  )r2   r   rH   rI   rJ   rK   rL   rM   rP   rQ   rs   rz   r   r3   r6   r   r   r)  r*  r+  r,  r!   r"   rS   r   r@   r?   r:   s                rA   r1  r1    s   
]E


UG
,%
]E


UG
,%^Ffh/&^Ffh/&661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  Wd  Wd  fm  fw  fw  y@  yK  yK  EN  O'9&1aQ,'5'5(F
F&^Q|#)s?'""$|VW6('	.rT   TV_BatchMatMulV2_Tc                    t         j                   xs t        j                         }|j                  }|j                  r$	 t	        j
                  |d|| |d|d|d|d|      }	|	S |d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }t        j                   d| ||||||	      \  }}}}|dd }	t        j"                         r{d
|j%                  d
      d|j'                  d      d|j'                  d      d|j'                  d      d|j'                  d      f
}|j(                  }t        j*                  d|||	       |	\  }	|	S # t        j                  $ r }
t        j                  |
|       Y d}
~
nd}
~
wt        j                  $ r Y nw xY w	 t        | |||||||      S # t        j                  $ r Y w xY w)a  Multiplies slices of two tensors in batches.

  Multiplies all slices of `Tensor` `x` and `y` (each slice can be
  viewed as an element of a batch), and arranges the individual results
  in a single output tensor of the same batch size. Each of the
  individual slices can optionally be adjointed (to adjoint a matrix
  means to transpose and conjugate it) before multiplication by setting
  the `adj_x` or `adj_y` flag to `True`, which are by default `False`.

  The input tensors `x` and `y` are 2-D or higher with shape `[..., r_x, c_x]`
  and `[..., r_y, c_y]`.

  The output tensor is 2-D or higher with shape `[..., r_o, c_o]`, where:

      r_o = c_x if adj_x else r_x
      c_o = r_y if adj_y else c_y

  It is computed as:

      output[..., :, :] = matrix(x[..., :, :]) * matrix(y[..., :, :])

  *NOTE*: `BatchMatMulV2` supports broadcasting in the batch dimensions. More
  about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html).

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int16`, `int32`, `int64`, `uint8`, `uint16`, `uint32`, `uint64`, `complex64`, `complex128`.
      2-D or higher with shape `[..., r_x, c_x]`.
    y: A `Tensor`. Must have the same type as `x`.
      2-D or higher with shape `[..., r_y, c_y]`.
    adj_x: An optional `bool`. Defaults to `False`.
      If `True`, adjoint the slices of `x`. Defaults to `False`.
    adj_y: An optional `bool`. Defaults to `False`.
      If `True`, adjoint the slices of `y`. Defaults to `False`.
    grad_x: An optional `bool`. Defaults to `False`.
    grad_y: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  BatchMatMulV2r)  r*  r+  r,  Nr/  Fr0  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   batch_mat_mul_v2_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   r2  s                   rA   batch_mat_mul_v2r;  9  s   T 
			0h..0$#\\11otQ7E7E&(F,g n ]E


UG
,%
]E


UG
,%^Ffh/&^Ffh/&'881eF &T3!QX QK'""$3%%c*G  )7  )8  *H  *	,F
 ::Lvw8('	.K && -
##At,,## 
,
Qe5  ## 
r4  zraw_ops.BatchMatMulV2c                 T   |d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }t        j                  | |g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   g      \  }}	|	\  } }| |g}
d|d|d|d|d|f
}t        j"                  dd|
|||	      }t        j$                         rt        j&                  d
|
||       |\  }|S )NFr)  r*  r+  r,  r$   s   BatchMatMulV2rE   rF   r9  )r2   r   rH   rI   rJ   rK   rL   rM   rO   rP   rQ   rr   ry   r{   r|   rs   rz   r   r3   r6   r6  s                rA   r:  r:    s   
]E


UG
,%
]E


UG
,%^Ffh/&^Ffh/&661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  Wd  Wd  fm  fs  fs  u|  uB  uB  DK  DR  DR  T[  Tb  Tb  dk  dr  dr  t{  tE  tE  GN  GY  GY  E\  ]'9&1aQ,'5'5(F
F&-q#)s?'""$vw8('	.rT   TV_BatchMatMulV3_TaTV_BatchMatMulV3_TbTV_BatchMatMulV3_Toutc                 v   t         j                   xs t        j                         }|j                  }	|	j                  r&	 t	        j
                  |d|| |d|d|d|d|d|      }
|
S t        j                  |d      }|d	}t        j                  |d      }|d	}t        j                  |d      }|d	}t        j                  |d      }|d	}t        j                  |d      }t!        j"                  d| |||||||
	      \  }}}}|dd }
t        j$                         rd|j'                  d      d|j'                  d      d|j'                  d      d|j)                  d      d|j)                  d      d|j)                  d      d|j)                  d      f}|j*                  }t        j,                  d|||
       |
\  }
|
S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||||||	      S # t        j                  $ r Y w xY w)a  Multiplies slices of two tensors in batches.

  Multiplies all slices of `Tensor` `x` and `y` (each slice can be
  viewed as an element of a batch), and arranges the individual results
  in a single output tensor of the same batch size. Each of the
  individual slices can optionally be adjointed (to adjoint a matrix
  means to transpose and conjugate it) before multiplication by setting
  the `adj_x` or `adj_y` flag to `True`, which are by default `False`.

  The input tensors `x` and `y` are 2-D or higher with shape `[..., r_x, c_x]`
  and `[..., r_y, c_y]`.

  The output tensor is 2-D or higher with shape `[..., r_o, c_o]`, where:

      r_o = c_x if adj_x else r_x
      c_o = r_y if adj_y else c_y

  It is computed as:

      output[..., :, :] = matrix(x[..., :, :]) * matrix(y[..., :, :])

  *NOTE*: `BatchMatMulV3` supports broadcasting in the batch dimensions. More
  about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html).

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `int16`, `int32`, `int64`, `complex64`, `complex128`.
      2-D or higher with shape `[..., r_x, c_x]`.
    y: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `int16`, `int32`, `int64`, `complex64`, `complex128`.
      2-D or higher with shape `[..., r_y, c_y]`.
    Tout: A `tf.DType` from: `tf.bfloat16, tf.half, tf.float32, tf.float64, tf.int16, tf.int32, tf.int64, tf.complex64, tf.complex128`.
      If not spcified, Tout is the same type to input type.
    adj_x: An optional `bool`. Defaults to `False`.
      If `True`, adjoint the slices of `x`. Defaults to `False`.
    adj_y: An optional `bool`. Defaults to `False`.
      If `True`, adjoint the slices of `y`. Defaults to `False`.
    grad_x: An optional `bool`. Defaults to `False`.
    grad_y: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `Tout`.
  BatchMatMulV3r   r)  r*  r+  r,  N)r   r)  r*  r+  r,  r!   r"   F)r   r   r   r)  r*  r+  r,  r!   TaTb)r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   batch_mat_mul_v3_eager_fallbackr/   r2   r   r   r0   r1   r3   r4   r   r5   r6   )r   r   r   r)  r*  r+  r,  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                    rA   batch_mat_mul_v3rE    sV   X 
			0h..0$#\\11otQ64%&(F<g n 
		D&	)$
]E


UG
,%
]E


UG
,%^Ffh/&^Ffh/&'881E &vDB!QX QK'""$C&&t,dC4F4Ft4Lc((0'  )7  )8  *H  *,F ::Lvw8('	.O && -
##At,,## 
,
QTeFd. . ## 
s0    $G H	G00H	H	H! !H87H8zraw_ops.BatchMatMulV3c	                    t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }t        j                  | g|t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }	\  } t        j                  |g|t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }
\  }| |g}d|	d|
d|d|d|d|d|f}t        j                   d	d
||||      }t        j"                         rt        j$                  d|||       |\  }|S )Nr   Fr)  r*  r+  r,  rB  rC  s   BatchMatMulV3rE   rF   rA  )r2   r   r   rH   rI   rJ   rK   rL   rM   rr   rN   rO   rP   rQ   rs   rz   r   r3   r6   )r   r   r   r)  r*  r+  r,  r!   r"   _attr_Ta_attr_Tbr@   r?   r:   s                 rA   rD  rD    s   			D&	)$
]E


UG
,%
]E


UG
,%^Ffh/&^Ffh/&22A3g>N>NPWP\P\^e^m^movo~o~  AH  AN  AN  PW  P\  P\  ^e  ^k  ^k  mt  mz  mz  |C  |I  |I  KR  K\  K\  ^e  ^p  ^p  >s  t.(DQ22A3g>N>NPWP\P\^e^m^movo~o~  AH  AN  AN  PW  P\  P\  ^e  ^k  ^k  mt  mz  mz  |C  |I  |I  KR  K\  K\  ^e  ^p  ^p  >s  t.(DQQ,(D(FD'5	5(FHf6&-q#)s?'""$vw8('	.rT   TV_Betainc_Tzmath.betaincbetainc)v1abc                 \   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        | |||fd      }|t        ur|S 	 t/        j0                  d| |||      \  }}}	}
|
dd }t3        j4                         r7d|	j7                  d      f}|	j8                  }t3        j:                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||fd      }|t        ur|S t        | ||||      S # t        j                  $ r Y t        t         f$ rJ t#        j$                  t&        dt)        | |||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rJ t#        j$                  t&        dt)        | |||            }|t"        j*                  j,                  ur|cY S  w xY w)al  Compute the regularized incomplete beta integral \\(I_x(a, b)\\).

  The regularized incomplete beta integral is defined as:


  \\(I_x(a, b) = \frac{B(x; a, b)}{B(a, b)}\\)

  where


  \\(B(x; a, b) = \int_0^x t^{a-1} (1 - t)^{b-1} dt\\)


  is the incomplete beta function and \\(B(a, b)\\) is the *complete*
  beta function.

  Args:
    a: A `Tensor`. Must be one of the following types: `float32`, `float64`.
    b: A `Tensor`. Must have the same type as `a`.
    x: A `Tensor`. Must have the same type as `a`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `a`.
  BetaincNr    r   )rL  rM  r   r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_betaincr   betainc_eager_fallbackr/   rj   r   r   r   rJ  r   r   r   r0   r1   r2   r3   r4   r5   r6   )rL  rM  r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   rJ  rJ  2  s7   < 
			0h..0$#\\11iq!Q(gn, &	
Aq$$ Gn$n	
)::Q!qt-Aq#x QK'""$3%%c*+F::L<2('	.W && -
##At,,## 
'aD
D"g		&#
Q$( (## 
z" ""RQ!$7g 
	..<<	<  Z	  
  
2ta15
G i,,:::n	
sP    C, 7G ,D3?DD32D37E! E! !G7AGGAH+)H+zraw_ops.Betaincc                 0   t        j                  | ||g|t        j                  t        j                  g      \  }}|\  } }}| ||g}d|f}t        j
                  dd||||      }	t        j                         rt        j                  d|||	       |	\  }	|	S )Nr$   s   BetaincrE   rF   rO  r2   rH   rI   rL   rM   r   r3   r6   )
rL  rM  r   r!   r"   rS   r   r@   r?   r:   s
             rA   rQ  rQ    s    661ay#Y`YhYhGkl'9)1aQ,>&Z<v!$41'""$<2('	.rT   TV_Bincount_Tarrsizeweightsc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        j                  d| |||      \  }}}	}
|
dd }t        j                          r7d|	j#                  d      f}|	j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Counts the number of occurrences of each value in an integer array.

  Outputs a vector with length `size` and the same dtype as `weights`. If
  `weights` are empty, then index `i` stores the number of times the value `i` is
  counted in `arr`. If `weights` are non-empty, then index `i` stores the sum of
  the value in `weights` at each index where the corresponding value in `arr` is
  `i`.

  Values in `arr` outside of the range [0, size) are ignored.

  Args:
    arr: A `Tensor` of type `int32`. int32 `Tensor`.
    size: A `Tensor` of type `int32`. non-negative int32 scalar `Tensor`.
    weights: A `Tensor`. Must be one of the following types: `int32`, `int64`, `float32`, `float64`.
      is an int32, int64, float32, or float64 `Tensor` with the same
      shape as `arr`, or a length-0 `Tensor`, in which case it acts as all weights
      equal to 1.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `weights`.
  BincountNr    )rU  rV  rW  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   bincount_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   )rU  rV  rW  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   bincountr[    sD   . 
			0h..0$#\\11j$T74gn (88$dD!QXQK'""$3%%c*+F::LL&'3('	.' && -
##At,,## 
$
tW4T3 3## 
0    C D$C??DDD, ,EEzraw_ops.Bincountc                    t        j                  |g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  }t        j                  | t        j                        } t        j                  |t        j                        }| ||g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   BincountrE   rF   rY  )r2   rH   rI   rP   rQ   rL   rM   r+   r   r   r3   r6   )	rU  rV  rW  r!   r"   rS   r@   r?   r:   s	            rA   rZ  rZ    s     77	3X_XeXegngvgvx  yH  yH  IK  L':GsGMM2#			gmm	4$tW%,>&[!L#)s?'""$L&'3('	.rT   TV_Bucketize_Tc                 B   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| d|      }|S t        |t        t        f      st!        d|z        |D cg c]  }t#        j$                  |d       }}t'        j(                  d| ||      \  }}}	}
|
dd }t#        j*                         rHd|	j-                  d      d|	j/                  d      f}|	j0                  }t#        j2                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y <w xY wc c}w )a  Bucketizes 'input' based on 'boundaries'.

  For example, if the inputs are
      boundaries = [0, 10, 100]
      input = [[-5, 10000]
               [150,   10]
               [5,    100]]

  then the output will be
      output = [[0, 3]
                [3, 2]
                [1, 3]]

  Args:
    input: A `Tensor`. Must be one of the following types: `int32`, `int64`, `float32`, `float64`.
      Any shape of Tensor contains with int or float type.
    boundaries: A list of `floats`.
      A sorted list of floats gives the boundary of the buckets.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `int32`.
  	Bucketize
boundariesN)ra  r!   r"   BExpected list for 'boundaries' argument to 'bucketize' Op, not %r.)r   ra  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   bucketize_eager_fallbackr/   rg   rh   ri   rj   r2   r   r0   r1   r3   r4   rn   r5   r6   )r   ra  r!   r8   r9   r:   r;   _fr<   r=   r>   r?   r@   s                rA   	bucketizere    s   0 
			0h..0$#\\11k4jBgn 
Ju	.
	"$.	/0 0 AKK"##B5K*K'885ZdD!QXQK'""$3%%c*Lll<(*F::L\674('	.3 && -
##At,,## 
%
JTt= =## 
 Ls6    D( F(E/;EE/.E/3F FFzraw_ops.Bucketizec                    t        |t        t        f      st        d|z        |D cg c]  }t	        j
                  |d       }}t	        j                  | g|t        j                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|d|f}t	        j                  dd||||      }t	        j                         rt	        j                  d|||       |\  }|S c c}w )Nrb  ra  r$   s	   BucketizerE   rF   r`  )rg   rh   ri   rj   r2   r   rH   rI   rP   rQ   rL   rM   r   r3   r6   )	r   ra  r!   r"   rd  rS   r@   r?   r:   s	            rA   rc  rc    s   	Ju	.
	"$.	/0 0 AKK"##B5K*K55ugsW]]T[TaTacjcrcrt{  uD  uD  EG  H'8E,,
3&\1\#)s?'""$\674('	. Ls   C7) TV_Cast_SrcTr   r   rV   rW   _atypes.Float16r   r   _atypes.Float8e4m3b11fnuz_atypes.Float8e4m3fn_atypes.Float8e4m3fnuz_atypes.Float8e5m2_atypes.Float8e5m2fnuzr   r   r   _atypes.Int4r   r   rX   rY   rZ   r[   r\   _atypes.Resourcer   r]   r^   _atypes.UInt4r_   r`   r   ) TV_Cast_DstTr   r   rV   rW   rh  r   r   ri  rj  rk  rl  rm  r   r   r   rn  r   r   rX   rY   rZ   r[   r\   ro  r   r]   r^   rp  r_   r`   r   DstTTruncatec           
      4   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| d|d|      }|S t        j                  |d      }|d}t        j                  |d      }t!        j"                  d| |||      \  }}}	}
|
dd }t        j$                         rYd|	j'                  d      d|	j'                  d      d|	j)                  d      f}|	j*                  }t        j,                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y 8w xY w)	zCast x of type SrcT to y of DstT.

  Args:
    x: A `Tensor`.
    DstT: A `tf.DType`.
    Truncate: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `DstT`.
  Castrr  rs  N)rr  rs  r!   r"   F)r   rr  rs  r!   SrcT)r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   cast_eager_fallbackr/   r2   r   r   r0   r1   r3   r4   r   r5   r6   )r   rr  rs  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   castrx  1  s    
			0h..0$#\\11fdAvtZCgn 
		D&	)$H*5('88!$>!QXQK'""$c((0&  (*  ,.F ::Lfg/('	.3 && -
##At,,## 
 
$$@ @## 
s0    D% %E,8EE,+E,0F   FFzraw_ops.Castc                 L   t        j                  |d      }|d}t        j                  |d      }t        j                  | g|g       \  }\  } | g}d|d|d|f}t        j                  dd||||      }t        j
                         rt        j                  d|||       |\  }|S )	Nrr  Frs  rv  s   CastrE   rF   ru  )r2   r   r   rH   r   r3   r6   )	r   rr  rs  r!   r"   
_attr_SrcTr@   r?   r:   s	            rA   rw  rw  b  s    			D&	)$H*5(44aS#rB*dq,Jj(C&WaF!$41'""$fg/('	.rT   	TV_Ceil_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)a  Returns element-wise smallest integer not less than x.

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  CeilNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   ceil_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   ceilr  u  s7    
			0h..0$#\\11fdAgn (88!$ !QXQK'""$3%%c*+F::Lfg/('	.' && -
##At,,## 
 
$D" "## 
rC   zraw_ops.Ceilc                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   CeilrE   rF   r}  r   rR   s          rA   r~  r~        111#sW=M=Mw||]d]l]lnun}n}  =A  B-'4A,>&WaF!$41'""$fg/('	.rT   TV_ClipByValue_Ttclip_value_minclip_value_maxc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        j                  d| |||      \  }}}	}
|
dd }t        j                          r7d|	j#                  d      f}|	j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a.  Clips tensor values to a specified min and max.

  Given a tensor `t`, this operation returns a tensor of the same type and
  shape as `t` with its values clipped to `clip_value_min` and `clip_value_max`.
  Any values less than `clip_value_min` are set to `clip_value_min`. Any values
  greater than `clip_value_max` are set to `clip_value_max`.

  Args:
    t: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
      A `Tensor`.
    clip_value_min: A `Tensor`. Must have the same type as `t`.
      A 0-D (scalar) `Tensor`, or a `Tensor` with the same shape
      as `t`. The minimum value to clip by.
    clip_value_max: A `Tensor`. Must have the same type as `t`.
      A 0-D (scalar) `Tensor`, or a `Tensor` with the same shape
      as `t`. The maximum value to clip by.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `t`.
  ClipByValueNr    )r  r  r  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _clip_by_value_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   )r  r  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   _clip_by_valuer    sJ   , 
			0h..0$#\\11mT1nnFgn (88>&44A!QX QK'""$3%%c*+F::L|VW6('	.) && -
##At,,## 
*
^^$DB B## 
r\  zraw_ops.ClipByValuec                 .   t        j                  | ||g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  g      \  }}|\  } }}| ||g}d|f}t        j,                  dd||||      }	t        j.                         rt        j0                  d|||	       |	\  }	|	S )Nr$   s   ClipByValuerE   rF   r  r2   rH   rI   rL   rM   rP   rr   rO   rN   rs   rQ   rt   ru   rv   rJ   rw   rx   ry   rz   rK   r{   r|   r   r3   r6   )
r  r  r  r!   r"   rS   r   r@   r?   r:   s
             rA   r  r    s   66>>7Z\_bibqbqsz  tC  tC  EL  ER  ER  T[  Ta  Ta  cj  cp  cp  ry  r~  r~  @G  @Q  @Q  SZ  S`  S`  bi  bo  bo  qx  q  q  AH  AO  AO  QX  Qa  Qa  cj  cq  cq  sz  sB  sB  DK  DR  DR  T[  Tf  Tf  ho  ht  ht  v}  vD  vD  FM  FT  FT  bW  X'9(1%1nn^^4,>&^Q|#)s?'""$|VW6('	.rT   TV_Complex_TTV_Complex_Toutrealimagc           	          t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |t        j                  }t        j                   |d      }t#        j$                  d| |||      \  }}}	}
|
dd }t        j&                         rHd|	j)                  d      d|	j)                  d      f}|	j*                  }t        j,                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Converts two real numbers to a complex number.

  Given a tensor `real` representing the real part of a complex number, and a
  tensor `imag` representing the imaginary part of a complex number, this
  operation returns complex numbers elementwise of the form \\(a + bj\\), where
  *a* represents the `real` part and *b* represents the `imag` part.

  The input tensors `real` and `imag` must have the same shape.

  For example:

  ```
  # tensor 'real' is [2.25, 3.25]
  # tensor `imag` is [4.75, 5.75]
  tf.complex(real, imag) ==> [[2.25 + 4.75j], [3.25 + 5.75j]]
  ```

  Args:
    real: A `Tensor`. Must be one of the following types: `float32`, `float64`.
    imag: A `Tensor`. Must have the same type as `real`.
    Tout: An optional `tf.DType` from: `tf.complex64, tf.complex128`. Defaults to `tf.complex64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `Tout`.
  Complexr   Nr   )r  r  r   r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _complex_eager_fallbackr/   rI   rs   r2   r   r0   r1   r3   r4   r5   r6   )r  r  r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   _complexr    sy   6 
			0h..0$#\\11itT649gn 
\D			D&	)$'884d?!QXQK'""$3%%c*F  (*F::L<2('	./ && -
##At,,## 
$
4d6 6## 
s0    D ED99EEE& &E=<E=zraw_ops.Complexc                    |t         j                  }t        j                  |d      }t        j                  | |g|t         j
                  t         j                  gt         j
                        \  }}|\  } }| |g}d|d|f}t        j                  dd||||      }	t        j                         rt        j                  d|||	       |	\  }	|	S )Nr   r$   s   ComplexrE   rF   r  )
rI   rs   r2   r   rH   rL   rM   r   r3   r6   )
r  r  r   r!   r"   rS   r   r@   r?   r:   s
             rA   r  r  2	  s    	\D			D&	)$66d|S7??\c\k\kJnpwpp  A'9,4,&$'&Z<v!$41'""$<2('	.rT   TV_ComplexAbs_TTV_ComplexAbs_Toutc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| d|      }|S |t        j                  }t        j                   |d      }t#        j$                  d| ||      \  }}}}	|	dd }t        j&                         rHd|j)                  d      d|j)                  d      f}
|j*                  }t        j,                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Computes the complex absolute value of a tensor.

  Given a tensor `x` of complex numbers, this operation returns a tensor of type
  `float` or `double` that is the absolute value of each element in `x`. All
  elements in `x` must be complex numbers of the form \\(a + bj\\). The absolute
  value is computed as \\( \sqrt{a^2 + b^2}\\).

  For example:

  >>> x = tf.complex(3.0, 4.0)
  >>> print((tf.raw_ops.ComplexAbs(x=x, Tout=tf.dtypes.float32, name=None)).numpy())
  5.0

  Args:
    x: A `Tensor`. Must be one of the following types: `complex64`, `complex128`.
    Tout: An optional `tf.DType` from: `tf.float32, tf.float64`. Defaults to `tf.float32`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `Tout`.
  
ComplexAbsr   Nr   )r   r   r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   complex_abs_eager_fallbackr/   rI   rL   r2   r   r0   r1   r3   r4   r5   r6   )r   r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s               rA   complex_absr  F	  sq   , 
			0h..0$#\\11lD!VT3gn 
\??D			D&	)$'8841!QXQK'""$3%%c*F  (*F::LlFG5('	./ && -
##At,,## 
'
$Tt- -## 
r   zraw_ops.ComplexAbsc                    |t         j                  }t        j                  |d      }t        j                  | g|t         j
                  t         j                  gt         j
                        \  }\  } | g}d|d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr   r$   s
   ComplexAbsrE   rF   r  r   )r   r   r!   r"   rS   r@   r?   r:   s           rA   r  r  	  s    	\??D			D&	)$111#sW=N=NPWPbPb<egngxgxy-'4A,&$'&]Al#)s?'""$lFG5('	.rT   	TV_Conj_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)a  Returns the complex conjugate of a complex number.

  Given a tensor `input` of complex numbers, this operation returns a tensor of
  complex numbers that are the complex conjugate of each element in `input`. The
  complex numbers in `input` must be of the form \\(a + bj\\), where *a* is the
  real part and *b* is the imaginary part.

  The complex conjugate returned by this operation is of the form \\(a - bj\\).

  For example:

  ```
  # tensor 'input' is [-2.25 + 4.75j, 3.25 + 5.75j]
  tf.conj(input) ==> [-2.25 - 4.75j, 3.25 - 5.75j]
  ```

  Args:
    input: A `Tensor`. Must be one of the following types: `complex64`, `complex128`, `variant`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `input`.
  ConjNr    )r   r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   conj_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   )r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s              rA   conjr  	  s7   0 
			0h..0$#\\11fdE#gn (88e$(!QXQK'""$3%%c*+F::Lfg/('	.' && -
##At,,## 
 
d& &## 
rC   zraw_ops.Conjc                 \   t        j                  | g|t        j                  t        j                  t        j
                  gt        j                        \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   ConjrE   rF   r  )	r2   rH   rI   rs   rz   r   r   r3   r6   )r   r!   r"   rS   r@   r?   r:   s          rA   r  r  	  s    55ugsWEVEVX_XjXjlsl{l{D~  AH  AR  AR  S'8E,>&WaF!$41'""$fg/('	.rT   TV_Cos_Tzmath.coscosc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes cos of x element-wise.

    Given an input tensor, this function computes cosine of every
    element in the tensor. Input range is `(-inf, inf)` and
    output range is `[-1,1]`. If input lies outside the boundary, `nan`
    is returned.

    ```python
    x = tf.constant([-float("inf"), -9, -0.5, 1, 1.2, 200, 10000, float("inf")])
    tf.math.cos(x) ==> [nan -0.91113025 0.87758255 0.5403023 0.36235774 0.48718765 -0.95215535 nan]
    ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  CosNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_cosr   cos_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  	     . 
			0h..0$#\\11eT1gn, "	
D
DGn$n	
)::Aq#x QK'""$3%%c*+F::L|VW.('	.W && -
##At,,## 
#d*dg		&
$D" "## 
z" ""TAD)g 
	..<<	<  Z	  
  
r4!$'
G i,,:::n	
r   zraw_ops.Cosc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   CosrE   rF   r  r   rR   s          rA   r  r  &
      111#sW=M=Mw||]d]l]lnun}n}  @G  @Q  @Q  SZ  Se  Se  =h  i-'4A,>&VQ|6!$41'""$|VW.('	.rT   	TV_Cosh_Tz	math.coshcoshc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes hyperbolic cosine of x element-wise.

    Given an input tensor, this function computes hyperbolic cosine of every
    element in the tensor. Input range is `[-inf, inf]` and output range
    is `[1, inf]`.

    ```python
    x = tf.constant([-float("inf"), -9, -0.5, 1, 1.2, 2, 10, float("inf")])
    tf.math.cosh(x) ==> [inf 4.0515420e+03 1.1276259e+00 1.5430807e+00 1.8106556e+00 3.7621956e+00 1.1013233e+04 inf]
    ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  CoshNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_coshr   cosh_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  5
     , 
			0h..0$#\\11fdAgn, #	
D
DGn$n	
)::!$ Aq#x QK'""$3%%c*+F::Lfg/('	.W && -
##At,,## 
$d*dg		& 
$D" "## 
z" """dQT*g 
	..<<	<  Z	  
  
D14(
G i,,:::n	
r   zraw_ops.Coshc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   CoshrE   rF   r  r   rR   s          rA   r  r  
  r   rT   
TV_Cross_Tzlinalg.crosscrossc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Compute the pairwise cross product.

  `a` and `b` must be the same shape; they can either be simple 3-element vectors,
  or any shape where the innermost dimension is 3. In the latter case, each pair
  of corresponding 3-element vectors is cross-multiplied independently.

  Args:
    a: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
      A tensor containing 3-element vectors.
    b: A `Tensor`. Must have the same type as `a`.
      Another tensor, of same type and shape as `a`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `a`.
  CrossNr    r   )rL  rM  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_crossr   cross_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   )rL  rM  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s               rA   r  r  
  s'   * 
			0h..0$#\\11gtQ#gn, $	
AttGn$n	
)::1&Aq#x QK'""$3%%c*+F::Lvw0('	.W && -
##At,,## 
%a-g		&!
QTt% %## 
z" ""2ta140g 
	..<<	<  Z	  
  
TA.
G i,,:::n	
r  zraw_ops.Crossc                 V   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   s   CrossrE   rF   r  r2   rH   rI   rL   rM   rP   rr   rO   rN   rQ   rJ   ry   rK   r{   r|   r   r3   r6   )	rL  rM  r!   r"   rS   r   r@   r?   r:   s	            rA   r  r  
  s_   661vsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  cp  cp  ry  rB  rB  DK  DR  DR  T[  T`  T`  bi  bp  bp  ry  r@  r@  EC  D'9&1aQ,>&XqV!$41'""$vw0('	.rT   TV_Cumprod_TTV_Cumprod_Tidx	exclusivereversec                 d   t         j                   xs t        j                         }|j                  }|j                  r 	 t	        j
                  |d|| |d|d|	      }|S |d}t        j                  |d      }|d}t        j                  |d      }t        j                   d| ||||      \  }	}	}
}|dd }t        j"                         rjd|
j%                  d      d|
j%                  d      d|
j'                  d      d	|
j'                  d	      f}|
j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y Ow xY w)
a  Compute the cumulative product of the tensor `x` along `axis`.

  By default, this op performs an inclusive cumprod, which means that the first
  element of the input is identical to the first element of the output:

  ```python
  tf.cumprod([a, b, c])  # => [a, a * b, a * b * c]
  ```

  By setting the `exclusive` kwarg to `True`, an exclusive cumprod is
  performed instead:

  ```python
  tf.cumprod([a, b, c], exclusive=True)  # => [1, a, a * b]
  ```

  By setting the `reverse` kwarg to `True`, the cumprod is performed in the
  opposite direction:

  ```python
  tf.cumprod([a, b, c], reverse=True)  # => [a * b * c, b * c, c]
  ```

  This is more efficient than using separate `tf.reverse` ops.

  The `reverse` and `exclusive` kwargs can also be combined:

  ```python
  tf.cumprod([a, b, c], exclusive=True, reverse=True)  # => [b * c, c, 1]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
      A `Tensor`. Must be one of the following types: `float32`, `float64`,
      `int64`, `int32`, `uint8`, `uint16`, `int16`, `int8`, `complex64`,
      `complex128`, `qint8`, `quint8`, `qint32`, `half`.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A `Tensor` of type `int32` (default: 0). Must be in the range
      `[-rank(x), rank(x))`.
    exclusive: An optional `bool`. Defaults to `False`.
      If `True`, perform exclusive cumprod.
    reverse: An optional `bool`. Defaults to `False`.
      A `bool` (default: False).
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  Cumprodr  r  Nr  r  r!   r"   Fr   r   r  r  r!   r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   cumprod_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   r   r   r  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                 rA   cumprodr  
  s   b 
			0h..0$#\\11iq$Y	g n I  K8)_Gw	2''88QTY!QX QK'""$3--k:I  +S#2D2DS2Ic((02F ::L<2('	.9 && -
##At,,## 
#
TYdN N## 
0    D< <FE**FFF F/.F/zraw_ops.Cumprodc                 (   |d}t        j                  |d      }|d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| |g}d|d|d|d|f}	t        j.                  dd||	||      }
t        j0                         rt        j2                  d	||	|
       |
\  }
|
S )
NFr  r  r$   r   s   CumprodrE   rF   r  r2   r   rH   rI   rL   rM   rP   rr   rO   rN   rs   rQ   rt   ru   rv   rJ   rw   rx   ry   rz   rK   r{   r|   r   r3   r6   r   r   r  r  r!   r"   rS   r   r@   r?   r:   s              rA   r  r  J  s[   I  K8)_Gw	2'111#sW__goo_f_l_lnun{n{  ~E  ~K  ~K  MT  MY  MY  [b  [l  [l  nu  n{  n{  }D  }J  }J  LS  LZ  LZ  \c  \j  \j  ls  l|  l|  ~E  ~L  ~L  NU  N]  N]  _f  _m  _m  ov  oA  oA  CJ  CO  CO  QX  Q_  Q_  ah  ao  ao  =r  s-'4A 77gmmU\UbUbEegngtgtu*gtT,IwWf&Z<v!$41'""$<2('	.rT   TV_Cumsum_TTV_Cumsum_Tidxc                 d   t         j                   xs t        j                         }|j                  }|j                  r 	 t	        j
                  |d|| |d|d|	      }|S |d}t        j                  |d      }|d}t        j                  |d      }t        j                   d| ||||      \  }	}	}
}|dd }t        j"                         rjd|
j%                  d      d|
j%                  d      d|
j'                  d      d	|
j'                  d	      f}|
j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y Ow xY w)
a  Compute the cumulative sum of the tensor `x` along `axis`.

  By default, this op performs an inclusive cumsum, which means that the first
  element of the input is identical to the first element of the output:

  ```python
  tf.cumsum([a, b, c])  # => [a, a + b, a + b + c]
  ```

  By setting the `exclusive` kwarg to `True`, an exclusive cumsum is
  performed instead:

  ```python
  tf.cumsum([a, b, c], exclusive=True)  # => [0, a, a + b]
  ```

  By setting the `reverse` kwarg to `True`, the cumsum is performed in the
  opposite direction:

  ```python
  tf.cumsum([a, b, c], reverse=True)  # => [a + b + c, b + c, c]
  ```

  This is more efficient than using separate `tf.reverse` ops.

  The `reverse` and `exclusive` kwargs can also be combined:

  ```python
  tf.cumsum([a, b, c], exclusive=True, reverse=True)  # => [b + c, c, 0]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
      A `Tensor`. Must be one of the following types: `float32`, `float64`,
      `int64`, `int32`, `uint8`, `uint16`, `int16`, `int8`, `complex64`,
      `complex128`, `qint8`, `quint8`, `qint32`, `half`.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A `Tensor` of type `int32` (default: 0). Must be in the range
      `[-rank(x), rank(x))`.
    exclusive: An optional `bool`. Defaults to `False`.
      If `True`, perform exclusive cumsum.
    reverse: An optional `bool`. Defaults to `False`.
      A `bool` (default: False).
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  Cumsumr  r  Nr  Fr  r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   cumsum_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   r  s                 rA   cumsumr  b  s   b 
			0h..0$#\\11ha{Iyg n I  K8)_Gw	2''88ADIw!QX QK'""$3--k:I  +S#2D2DS2Ic((02F ::L,1('	.9 && -
##At,,## 
"
TYdN N## 
r  zraw_ops.Cumsumc                 (   |d}t        j                  |d      }|d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| |g}d|d|d|d|f}	t        j.                  dd||	||      }
t        j0                         rt        j2                  d	||	|
       |
\  }
|
S )
NFr  r  r$   r   s   CumsumrE   rF   r  r  r  s              rA   r  r    s[   I  K8)_Gw	2'111#sW__goo_f_l_lnun{n{  ~E  ~K  ~K  MT  MY  MY  [b  [l  [l  nu  n{  n{  }D  }J  }J  LS  LZ  LZ  \c  \j  \j  ls  l|  l|  ~E  ~L  ~L  NU  N]  N]  _f  _m  _m  ov  oA  oA  CJ  CO  CO  QX  Q_  Q_  ah  ao  ao  =r  s-'4A 77gmmU\UbUbEegngtgtu*gtT,IwWf&Y,f!$41'""$,1('	.rT   TV_CumulativeLogsumexp_TTV_CumulativeLogsumexp_Tidxc                 d   t         j                   xs t        j                         }|j                  }|j                  r 	 t	        j
                  |d|| |d|d|	      }|S |d}t        j                  |d      }|d}t        j                  |d      }t        j                   d| ||||      \  }	}	}
}|dd }t        j"                         rjd|
j%                  d      d|
j%                  d      d|
j'                  d      d	|
j'                  d	      f}|
j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y Ow xY w)
a  Compute the cumulative product of the tensor `x` along `axis`.

  By default, this op performs an inclusive cumulative log-sum-exp,
  which means that the first
  element of the input is identical to the first element of the output:
  ```python
  tf.math.cumulative_logsumexp([a, b, c])  # => [a, log(exp(a) + exp(b)), log(exp(a) + exp(b) + exp(c))]
  ```

  By setting the `exclusive` kwarg to `True`, an exclusive cumulative log-sum-exp is
  performed instead:
  ```python
  tf.cumulative_logsumexp([a, b, c], exclusive=True)  # => [-inf, a, log(exp(a) * exp(b))]
  ```
  Note that the neutral element of the log-sum-exp operation is `-inf`,
  however, for performance reasons, the minimal value representable by the
  floating point type is used instead.

  By setting the `reverse` kwarg to `True`, the cumulative log-sum-exp is performed in the
  opposite direction.

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
      A `Tensor`. Must be one of the following types: `float16`, `float32`, `float64`.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A `Tensor` of type `int32` (default: 0). Must be in the range
      `[-rank(x), rank(x))`.
    exclusive: An optional `bool`. Defaults to `False`.
      If `True`, perform exclusive cumulative log-sum-exp.
    reverse: An optional `bool`. Defaults to `False`.
      A `bool` (default: False).
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  CumulativeLogsumexpr  r  Nr  Fr  r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   #cumulative_logsumexp_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   r  s                 rA   cumulative_logsumexpr    s   J 
			0h..0$#\\11#T1dK7g n I  K8)_Gw	2''88'.T;!QX QK'""$3--k:I  +S#2D2DS2Ic((02F ::L|VW>('	.9 && -
##At,,## 
0
TYdN N## 
r  zraw_ops.CumulativeLogsumexpc                 f   |d}t        j                  |d      }|d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| |g}d|d|d|d|f}	t        j                  dd||	||      }
t        j                         rt        j                  d	||	|
       |
\  }
|
S )
NFr  r  r$   r   s   CumulativeLogsumexprE   rF   r  r2   r   rH   rI   rJ   rK   rL   rM   rP   rQ   r   r3   r6   r  s              rA   r  r  "  s#   I  K8)_Gw	2'111#sW=M=Mw||]d]l]lnun}n}  =A  B-'4A 77gmmU\UbUbEegngtgtu*gtT,IwWf&3Q|#)s?'""$|VW>('	.rT   TV_DenseBincount_TidxTV_DenseBincount_Tbinary_outputc           
         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||d|      }|S |d}t        j                  |d      }t        j                   d| ||||      \  }	}	}
}|dd }t        j"                         rYd|
j%                  d      d|
j%                  d      d|
j'                  d      f}|
j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y $w xY w)	a  Counts the number of occurrences of each value in an integer array.

  Outputs a vector with length `size` and the same dtype as `weights`. If
  `weights` are empty, then index `i` stores the number of times the value `i` is
  counted in `arr`. If `weights` are non-empty, then index `i` stores the sum of
  the value in `weights` at each index where the corresponding value in `arr` is
  `i`.

  Values in `arr` outside of the range [0, size) are ignored.

  Args:
    input: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      1D or 2D int `Tensor`.
    size: A `Tensor`. Must have the same type as `input`.
      non-negative int scalar `Tensor`.
    weights: A `Tensor`. Must be one of the following types: `int32`, `int64`, `float32`, `float64`.
      is an int32, int64, float32, or float64 `Tensor` with the same
      shape as `arr`, or a length-0 `Tensor`, in which case it acts as all weights
      equal to 1.
    binary_output: An optional `bool`. Defaults to `False`.
      bool; Whether the kernel should count the appearance or number of occurrences.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `weights`.
  DenseBincountr  Nr  r!   r"   F)r   rV  rW  r  r!   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   dense_bincount_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   )r   rV  rW  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                 rA   dense_bincountr  :  s   6 
			0h..0$#\\11otUD'?g n M$$]OD-'88u4'44A!QX QK'""$c((0#  %  13F ::Lvw8('	.5 && -
##At,,## 
*
wm$  ## 
s0    D E#D>>EEE, ,FFzraw_ops.DenseBincountc                    |d}t        j                  |d      }t        j                  | |g|t        j                  t        j
                  g      \  }}|\  } }t        j                  |g|t        j                  t        j
                  t        j                  t        j                  g      \  }\  }| ||g}	d|d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d|	|
|       |\  }|S )	NFr  r   r$   s   DenseBincountrE   rF   r  )r2   r   rH   rI   rP   rQ   rL   rM   r   r3   r6   )r   rV  rW  r  r!   r"   r   _inputs_TidxrS   r@   r?   r:   s               rA   r  r  |  s   M$$]OD-%<<eT]CRYR_R_ahananQqr*l-5$ 77	3X_XeXegngvgvx  yH  yH  IK  L':Gw',JWo}M&-q#)s?'""$vw8('	.rT   TV_Digamma_Tzmath.digammadigammac           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a8  Computes Psi, the derivative of Lgamma (the log of the absolute value of

  `Gamma(x)`), element-wise.

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  DigammaNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_digammar   digamma_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r    s     
			0h..0$#\\11iq"gn, &	
D
DGn$n	
)::QT#Aq#x QK'""$3%%c*+F::L<2('	.W && -
##At,,## 
'd*dg		&#
$D" "## 
z" ""R-g 
	..<<	<  Z	  
  
2tad+
G i,,:::n	
r   zraw_ops.Digammac                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   DigammarE   rF   r  r   rR   s          rA   r  r    s    111#sW=M=Mw||]d]l]lnun}n}  =A  B-'4A,>&Z<v!$41'""$<2('	.rT   TV_Div_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Returns x / y element-wise.

  *NOTE*: `Div` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `uint16`, `int16`, `int32`, `uint32`, `uint64`, `int64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  DivNr    r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   div_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   s               rA   divr    =    
			0h..0$#\\11eT1a!gn (88ad$!QXQK'""$3%%c*+F::L|VW.('	.' && -
##At,,## 

QTt% %## 
r   zraw_ops.Divc                    t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   g      \  }}|\  } }| |g}d|f}t        j"                  dd||||      }t        j$                         rt        j&                  d|||       |\  }|S )Nr$   s   DivrE   rF   r  r2   rH   rI   rJ   rK   rL   rM   rr   rN   ry   rO   rP   r{   r|   rQ   rs   rz   r   r3   r6   r   s	            rA   r  r       661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  Wc  Wc  el  es  es  u|  uB  uB  DK  DQ  DQ  SZ  Sa  Sa  cj  cq  cq  sz  s@  s@  BI  BS  BS  U\  Ug  Ug  Ej  k'9&1aQ,>&VQ|6!$41'""$|VW.('	.rT   TV_DivNoNan_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Returns 0 if the denominator is zero.

  
  *NOTE*: `DivNoNan` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `half`, `float32`, `bfloat16`, `float64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  DivNoNanNr    r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   div_no_nan_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   s               rA   
div_no_nanr  $  s=    
			0h..0$#\\11j$1&gn (88a14)!QXQK'""$3%%c*+F::LL&'3('	.' && -
##At,,## 
&
QTt% %## 
r   zraw_ops.DivNoNanc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   DivNoNanrE   rF   r  )r2   rH   rI   rK   rL   rJ   rM   rs   rz   r   r3   r6   r   s	            rA   r  r  R  s    661vsW\\SZSbSbdkdtdtv}  wF  wF  HO  HY  HY  [b  [m  [m  Ep  q'9&1aQ,>&[!L#)s?'""$L&'3('	.rT   ) 
TV_Equal_Tr   r   rV   rW   rh  r   r   ri  rj  rk  rl  rm  r   r   r   rn  r   r   rX   rY   rZ   r[   r\   ro  r   r]   r^   rp  r_   r`   r   incompatible_shape_errorc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rHd|	j%                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Returns the truth value of (x == y) element-wise.

  *NOTE*: `Equal` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  ```python
  x = tf.constant([2, 4])
  y = tf.constant(2)
  tf.math.equal(x, y) ==> array([True, False])

  x = tf.constant([2, 4])
  y = tf.constant([2, 4])
  tf.math.equal(x, y) ==> array([True,  True])
  ```

  Args:
    x: A `Tensor`.
    y: A `Tensor`. Must have the same type as `x`.
    incompatible_shape_error: An optional `bool`. Defaults to `True`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  Equalr  Nr  r!   r"   Tr   r   r  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   equal_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   r   r   r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   equalr  b  s   2 
			0h..0$#\\11gtQ#= "g n %#%//0HJde'8814L!QX QK'""$3%%c*,F  !;<>F::Lvw0('	.3 && -
##At,,## 
!
Q)A  ## 
r   zraw_ops.Equalc                 &   |d}t        j                  |d      }t        j                  | |g|g       \  }}|\  } }| |g}d|d|f}t        j                  dd||||      }	t        j                         rt        j
                  d|||	       |	\  }	|	S )NTr  r$   s   EqualrE   rF   r  r2   r   rH   r   r3   r6   
r   r   r  r!   r"   rS   r   r@   r?   r:   s
             rA   r  r    s    %#%//0HJde661vsBG'9&1aQ,4&XqV!$41'""$vw0('	.rT   TV_Erf_Tzmath.erferfc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)u)  Computes the [Gauss error function](https://en.wikipedia.org/wiki/Error_function) of `x` element-wise. In statistics, for non-negative values of $x$, the error function has the following interpretation: for a random variable $Y$ that is normally distributed with mean 0 and variance $1/\sqrt{2}$, $erf(x)$ is the probability that $Y$ falls in the range $[−x, x]$.

  For example:

  >>> tf.math.erf([[1.0, 2.0, 3.0], [0.0, -1.0, -2.0]])
  <tf.Tensor: shape=(2, 3), dtype=float32, numpy=
  array([[ 0.8427007,  0.9953223,  0.999978 ],
         [ 0.       , -0.8427007, -0.9953223]], dtype=float32)>

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  ErfNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_erfr   erf_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r    s   * 
			0h..0$#\\11eT1gn, "	
D
DGn$n	
)::Aq#x QK'""$3%%c*+F::L|VW.('	.W && -
##At,,## 
#d*dg		&
$D" "## 
z" ""TAD)g 
	..<<	<  Z	  
  
r4!$'
G i,,:::n	
r   zraw_ops.Erfc                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   ErfrE   rF   r  r   rR   s          rA   r
  r
    s    111#sW=M=Mw||]d]l]lnun}n}  =A  B-'4A,>&VQ|6!$41'""$|VW.('	.rT   	TV_Erfc_Tz	math.erfcerfcc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes the complementary error function of `x` element-wise.

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  ErfcNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_erfcr   erfc_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r    s    
			0h..0$#\\11fdAgn, #	
D
DGn$n	
)::!$ Aq#x QK'""$3%%c*+F::Lfg/('	.W && -
##At,,## 
$d*dg		& 
$D" "## 
z" """dQT*g 
	..<<	<  Z	  
  
D14(
G i,,:::n	
r   zraw_ops.Erfcc                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   ErfcrE   rF   r  r   rR   s          rA   r  r  W  r  rT   TV_Erfinv_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)TODO: add doc.

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  ErfinvNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   erfinv_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   erfinvr  f  s7    
			0h..0$#\\11ha!gn (88AD"!QXQK'""$3%%c*+F::L,1('	.' && -
##At,,## 
"
$D" "## 
rC   zraw_ops.Erfinvc                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   ErfinvrE   rF   r  r   rR   s          rA   r  r        111#sW=M=Mw||]d]l]lnun}n}  =A  B-'4A,>&Y,f!$41'""$,1('	.rT   TV_EuclideanNorm_TTV_EuclideanNorm_Tidxc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rYd|	j%                  d      d|	j'                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y "w xY w)	a  Computes the euclidean norm of elements across dimensions of a tensor.

  Reduces `input` along the dimensions given in `axis`. Unless
  `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in
  `axis`. If `keep_dims` is true, the reduced dimensions are
  retained with length 1.

  Args:
    input: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
      The tensor to reduce.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      The dimensions to reduce. Must be in the range
      `[-rank(input), rank(input))`.
    keep_dims: An optional `bool`. Defaults to `False`.
      If true, retain reduced dimensions with length 1.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `input`.
  EuclideanNormr   Nr   Fr   r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   euclidean_norm_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   r   s                rA   euclidean_normr     s   * 
			0h..0$#\\11otUD+yJgn I  K8)'88u#,49!QX QK'""$3--k:C  %vs/A/A&/IKF::Lvw8('	.1 && -
##At,,## 
*
4A A## 
0    D E!D<<EEE) )F ?F zraw_ops.EuclideanNormc                    |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| |g}d|d|d|f}t        j.                  dd||||      }	t        j0                         rt        j2                  d|||	       |	\  }	|	S )	NFr   r$   r   s   EuclideanNormrE   rF   r  r  
r   r   r   r!   r"   rS   r   r@   r?   r:   s
             rA   r  r    sF   I  K8)55ugsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  ct  ct  v}  vC  vC  EL  ER  ER  T[  Tb  Tb  dk  dr  dr  t{  tD  tD  FM  FT  FT  V]  Ve  Ve  gn  gu  gu  w~  wI  wI  KR  KW  KW  Y`  Yg  Yg  ip  iw  iw  Ez  {'8E 77gmmU\UbUbEegngtgtu*gt,C&*E&-q#)s?'""$vw8('	.rT   TV_Exp_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)a]  Computes exponential of x element-wise.  \\(y = e^x\\).

    This function computes the exponential of every element in the input tensor.
    i.e. `exp(x)` or `e^(x)`, where `x` is the input tensor.
    `e` denotes Euler's number and is approximately equal to 2.718281.
    Output is positive for any real input.

    ```python
    x = tf.constant(2.0)
    tf.math.exp(x) ==> 7.389056

    x = tf.constant([2.0, 8.0])
    tf.math.exp(x) ==> array([7.389056, 2980.958], dtype=float32)
    ```

    For complex numbers, the exponential value is calculated as follows:

    ```
    e^(x+iy) = e^x * e^iy = e^x * (cos y + i sin y)
    ```

    Let's consider complex number 1+1j as an example.
    e^1 * (cos 1 + i sin 1) = 2.7182818284590 * (0.54030230586+0.8414709848j)

    ```python
    x = tf.constant(1 + 1j)
    tf.math.exp(x) ==> 1.4686939399158851+2.2873552871788423j
    ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  ExpNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   exp_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   expr(    s8   J 
			0h..0$#\\11eT1gn (88!QXQK'""$3%%c*+F::L|VW.('	.' && -
##At,,## 

$D" "## 
rC   zraw_ops.Expc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   ExprE   rF   r&  r   rR   s          rA   r'  r'  /  r  rT   
TV_Expm1_Tz
math.expm1expm1c           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes `exp(x) - 1` element-wise.

    i.e. `exp(x) - 1` or `e^(x) - 1`, where `x` is the input tensor.
    `e` denotes Euler's number and is approximately equal to 2.718281.

    ```python
    x = tf.constant(2.0)
    tf.math.expm1(x) ==> 6.389056

    x = tf.constant([2.0, 8.0])
    tf.math.expm1(x) ==> array([6.389056, 2979.958], dtype=float32)

    x = tf.constant(1 + 1j)
    tf.math.expm1(x) ==> (0.46869393991588515+2.2873552871788423j)
    ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  Expm1Nr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_expm1r   expm1_eager_fallbackr/   rj   r   r   r   r+  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r+  r+  >  s   8 
			0h..0$#\\11gtQ gn, $	
D
DGn$n	
)::14!Aq#x QK'""$3%%c*+F::Lvw0('	.W && -
##At,,## 
%d*dg		&!
$D" "## 
z" ""2tad+g 
	..<<	<  Z	  
  
TAD)
G i,,:::n	
r   zraw_ops.Expm1c           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   Expm1rE   rF   r-  r   rR   s          rA   r/  r/    r   rT   
TV_Floor_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)a
  Returns element-wise largest integer not greater than x.

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  FloorNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   floor_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   floorr5    7    
			0h..0$#\\11gtQ gn (8814!!QXQK'""$3%%c*+F::Lvw0('	.' && -
##At,,## 
!
$D" "## 
rC   zraw_ops.Floorc                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   FloorrE   rF   r3  r   rR   s          rA   r4  r4        111#sW=M=Mw||]d]l]lnun}n}  =A  B-'4A,>&XqV!$41'""$vw0('	.rT   TV_FloorDiv_T	floor_divc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns x // y element-wise.

  *NOTE*: `floor_div` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `uint16`, `int16`, `int32`, `uint32`, `uint64`, `int64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  FloorDivNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_floor_divr   floor_div_eager_fallbackr/   rj   r   r   r   r:  r   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   r:  r:    s'   $ 
			0h..0$#\\11j$1&gn, (	
AttGn$n	
)::a14)Aq#x QK'""$3%%c*+F::LL&'3('	.W && -
##At,,## 
)a-g		&%
QTt% %## 
z" ""r4!qt4g 
	..<<	<  Z	  
  
RQT2
G i,,:::n	
r  zraw_ops.FloorDivc                    t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   g      \  }}|\  } }| |g}d|f}t        j"                  dd||||      }t        j$                         rt        j&                  d|||       |\  }|S )Nr$   s   FloorDivrE   rF   r<  r  r   s	            rA   r>  r>  #  s   661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  Wc  Wc  el  es  es  u|  uB  uB  DK  DQ  DQ  SZ  Sa  Sa  cj  cq  cq  sz  s@  s@  BI  BS  BS  U\  Ug  Ug  Ej  k'9&1aQ,>&[!L#)s?'""$L&'3('	.rT   TV_FloorMod_Tmath.floormodmath.mod)rA  floormodrB  modrC  rD  c           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns element-wise remainder of division.

  This follows Python semantics in that the
  result here is consistent with a flooring divide. E.g.
  `floor(x / y) * y + floormod(x, y) = x`, regardless of the signs of x and y.

  *NOTE*: `math.floormod` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `int8`, `int16`, `int32`, `int64`, `uint8`, `uint16`, `uint32`, `uint64`, `bfloat16`, `half`, `float32`, `float64`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  FloorModNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_floor_modr   floor_mod_eager_fallbackr/   rj   r   r   r   	floor_modr   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   rI  rI  3  s'   , 
			0h..0$#\\11j$1&gn, (	
AttGn$n	
)::a14)Aq#x QK'""$3%%c*+F::LL&'3('	.W && -
##At,,## 
)a-g		&%
QTt% %## 
z" ""r4!qt4g 
	..<<	<  Z	  
  
RQT2
G i,,:::n	
r  zraw_ops.FloorModc                 V   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   s   FloorModrE   rF   rF  )r2   rH   rI   rN   rO   rP   rQ   rr   ry   r{   r|   rJ   rK   rL   rM   r   r3   r6   r   s	            rA   rH  rH    sW   661vsW\\SZS`S`biboboqxq~q~  AH  AN  AN  PW  P^  P^  `g  `n  `n  pw  p~  p~  @G  @P  @P  RY  R^  R^  `g  `o  `o  qx  q@  q@  EC  D'9&1aQ,>&[!L#)s?'""$L&'3('	.rT   TV_Greater_Tzmath.greatergreaterc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns the truth value of (x > y) element-wise.

  *NOTE*: `math.greater` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Example:

  ```python
  x = tf.constant([5, 4, 6])
  y = tf.constant([5, 2, 5])
  tf.math.greater(x, y) ==> [False, True, True]

  x = tf.constant([5, 4, 6])
  y = tf.constant([5])
  tf.math.greater(x, y) ==> [False, False, True]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  GreaterNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_greaterr   greater_eager_fallbackr/   rj   r   r   r   rL  r   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   rL  rL    s'   : 
			0h..0$#\\11iq!%gn, &	
AttGn$n	
)::Q!$(Aq#x QK'""$3%%c*+F::L<2('	.W && -
##At,,## 
'a-g		&#
QTt% %## 
z" ""RQT2g 
	..<<	<  Z	  
  
2ta140
G i,,:::n	
r  zraw_ops.Greaterc                 V   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   s   GreaterrE   rF   rN  r  r   s	            rA   rP  rP    s_   661vsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  cp  cp  ry  rB  rB  DK  DR  DR  T[  T`  T`  bi  bp  bp  ry  r@  r@  EC  D'9&1aQ,>&Z<v!$41'""$<2('	.rT   TV_GreaterEqual_Tzmath.greater_equalgreater_equalc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns the truth value of (x >= y) element-wise.

  *NOTE*: `math.greater_equal` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Example:

  ```python
  x = tf.constant([5, 4, 6, 7])
  y = tf.constant([5, 2, 5, 10])
  tf.math.greater_equal(x, y) ==> [True, True, True, False]

  x = tf.constant([5, 4, 6, 7])
  y = tf.constant([5])
  tf.math.greater_equal(x, y) ==> [True, False, True, True]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  GreaterEqualNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_greater_equalr   greater_equal_eager_fallbackr/   rj   r   r   r   rS  r   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   rS  rS    s'   : 
			0h..0$#\\11ndAq*gn, ,	
AttGn$n	
)::!qt-Aq#x QK'""$3%%c*+F::Lfg7('	.W && -
##At,,## 
-a-g		&)
QTt% %## 
z" ""2ta148g 
	..<<	<  Z	  
  
TA6
G i,,:::n	
r  zraw_ops.GreaterEqualc                 V   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   s   GreaterEqualrE   rF   rU  r  r   s	            rA   rW  rW  K  s_   661vsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  cp  cp  ry  rB  rB  DK  DR  DR  T[  T`  T`  bi  bp  bp  ry  r@  r@  EC  D'9&1aQ,>&_a#)s?'""$fg7('	.rT   TV_HistogramFixedWidth_TTV_HistogramFixedWidth_dtypevaluesvalue_rangenbinsdtypec           
         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||d|      }|S |t        j                  }t        j                   |d      }t#        j$                  d| ||||      \  }	}	}
}|dd }t        j&                         rHd|
j)                  d      d|
j)                  d      f}|
j*                  }t        j,                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y !w xY w)a  Return histogram of values.

  Given the tensor `values`, this operation returns a rank 1 histogram counting
  the number of entries in `values` that fall into every bin.  The bins are
  equal width and determined by the arguments `value_range` and `nbins`.

  ```python
  # Bins will be:  (-inf, 1), [1, 2), [2, 3), [3, 4), [4, inf)
  nbins = 5
  value_range = [0.0, 5.0]
  new_values = [-1.0, 0.0, 1.5, 2.0, 5.0, 15]

  with tf.get_default_session() as sess:
    hist = tf.histogram_fixed_width(new_values, value_range, nbins=5)
    variables.global_variables_initializer().run()
    sess.run(hist) => [2, 1, 1, 0, 2]
  ```

  Args:
    values: A `Tensor`. Must be one of the following types: `int32`, `int64`, `float32`, `float64`.
      Numeric `Tensor`.
    value_range: A `Tensor`. Must have the same type as `values`.
      Shape [2] `Tensor` of same `dtype` as `values`.
      values <= value_range[0] will be mapped to hist[0],
      values >= value_range[1] will be mapped to hist[-1].
    nbins: A `Tensor` of type `int32`.
      Scalar `int32 Tensor`.  Number of histogram bins.
    dtype: An optional `tf.DType` from: `tf.int32, tf.int64`. Defaults to `tf.int32`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `dtype`.
  HistogramFixedWidthr^  Nr^  r!   r"   )r[  r\  r]  r^  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   %_histogram_fixed_width_eager_fallbackr/   rI   rP   r2   r   r0   r1   r3   r4   r5   r6   )r[  r\  r]  r^  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                 rA   _histogram_fixed_widthrc  \  s   D 
			0h..0$#\\11#T6;g n ]MME


UG
,%'88f+%*%dD!QX QK'""$3%%c*G  )+F::L|VW>('	.1 && -
##At,,## 
2
+uE$H H## 
s0    D E D;;EEE) )F ?F zraw_ops.HistogramFixedWidthc                    |t         j                  }t        j                  |d      }t        j                  | |g|t         j                  t         j
                  t         j                  t         j                  g      \  }}|\  } }t        j                  |t         j                        }| ||g}d|d|f}	t        j                  dd||	||      }
t        j                         rt        j                  d||	|
       |
\  }
|
S )Nr^  r$   s   HistogramFixedWidthrE   rF   r`  )rI   rP   r2   r   rH   rQ   rL   rM   r+   r   r   r3   r6   )r[  r\  r]  r^  r!   r"   rS   r   r@   r?   r:   s              rA   rb  rb    s   
]MME


UG
,%667LcT[TaTacjcpcpry  sB  sB  DK  DS  DS  TV  W'9#6;

 
 
6%+u-,'5)&3Q|#)s?'""$|VW>('	.rT   TV_Igamma_Tzmath.igammaigammac           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Compute the lower regularized incomplete Gamma function `P(a, x)`.

  The lower regularized incomplete Gamma function is defined as:


  \\(P(a, x) = gamma(a, x) / Gamma(a) = 1 - Q(a, x)\\)

  where

  \\(gamma(a, x) = \int_{0}^{x} t^{a-1} exp(-t) dt\\)

  is the lower incomplete Gamma function.

  Note, above `Q(a, x)` (`Igammac`) is the upper regularized complete
  Gamma function.

  Args:
    a: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    x: A `Tensor`. Must have the same type as `a`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `a`.
  IgammaNr    r   rL  r   r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_igammar   igamma_eager_fallbackr/   rj   r   r   r   rf  r   r   r   r0   r1   r2   r3   r4   r5   r6   rL  r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s               rA   rf  rf    s'   : 
			0h..0$#\\11ha$gn, %	
AttGn$n	
)::A'Aq#x QK'""$3%%c*+F::L,1('	.W && -
##At,,## 
&a-g		&"
QTt% %## 
z" ""BqAD1g 
	..<<	<  Z	  
  
"dQ!$/
G i,,:::n	
r  zraw_ops.Igammac                 f   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   IgammarE   rF   rh  r   	rL  r   r!   r"   rS   r   r@   r?   r:   s	            rA   rk  rk    s    661vsWEUEUW^WcWceletetv}  wF  wF  EI  J'9&1aQ,>&Y,f!$41'""$,1('	.rT   TV_IgammaGradA_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a!  Computes the gradient of `igamma(a, x)` wrt `a`.

  Args:
    a: A `Tensor`. Must be one of the following types: `float32`, `float64`.
    x: A `Tensor`. Must have the same type as `a`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `a`.
  IgammaGradANr    ri  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   igamma_grad_a_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   rl  s               rA   igamma_grad_ars    s=    
			0h..0$#\\11mT1a)gn (88ad,!QXQK'""$3%%c*+F::L|VW6('	.' && -
##At,,## 
)
QTt% %## 
r   zraw_ops.IgammaGradAc                 *   t        j                  | |g|t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j
                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   IgammaGradArE   rF   rq  rS  rn  s	            rA   rr  rr  F  s    661vsW__V]VeVeDhi'9&1aQ,>&^Q|#)s?'""$|VW6('	.rT   TV_Igammac_Tzmath.igammacigammacc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Compute the upper regularized incomplete Gamma function `Q(a, x)`.

  The upper regularized incomplete Gamma function is defined as:

  \\(Q(a, x) = Gamma(a, x) / Gamma(a) = 1 - P(a, x)\\)

  where

  \\(Gamma(a, x) = \int_{x}^{\infty} t^{a-1} exp(-t) dt\\)

  is the upper incomplete Gamma function.

  Note, above `P(a, x)` (`Igamma`) is the lower regularized complete
  Gamma function.

  Args:
    a: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    x: A `Tensor`. Must have the same type as `a`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `a`.
  IgammacNr    r   ri  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_igammacr   igammac_eager_fallbackr/   rj   r   r   r   rv  r   r   r   r0   r1   r2   r3   r4   r5   r6   rl  s               rA   rv  rv  V  s'   8 
			0h..0$#\\11iq!%gn, &	
AttGn$n	
)::Q!$(Aq#x QK'""$3%%c*+F::L<2('	.W && -
##At,,## 
'a-g		&#
QTt% %## 
z" ""RQT2g 
	..<<	<  Z	  
  
2ta140
G i,,:::n	
r  zraw_ops.Igammacc                 f   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   IgammacrE   rF   rx  r   rn  s	            rA   rz  rz    s    661vsWEUEUW^WcWceletetv}  wF  wF  EI  J'9&1aQ,>&Z<v!$41'""$<2('	.rT   	TV_Imag_TTV_Imag_Toutc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| d|      }|S |t        j                  }t        j                   |d      }t#        j$                  d| ||      \  }}}}	|	dd }t        j&                         rHd|j)                  d      d|j)                  d      f}
|j*                  }t        j,                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Returns the imaginary part of a complex number.

  Given a tensor `input` of complex numbers, this operation returns a tensor of
  type `float` that is the imaginary part of each element in `input`. All
  elements in `input` must be complex numbers of the form \\(a + bj\\), where *a*
  is the real part and *b* is the imaginary part returned by this operation.

  For example:

  ```
  # tensor 'input' is [-2.25 + 4.75j, 3.25 + 5.75j]
  tf.imag(input) ==> [4.75, 5.75]
  ```

  Args:
    input: A `Tensor`. Must be one of the following types: `complex64`, `complex128`.
    Tout: An optional `tf.DType` from: `tf.float32, tf.float64`. Defaults to `tf.float32`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `Tout`.
  Imagr   Nr   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   imag_eager_fallbackr/   rI   rL   r2   r   r0   r1   r3   r4   r5   r6   r   s               rA   r  r    q   . 
			0h..0$#\\11fdE641gn 
\??D			D&	)$'88e$T3!QXQK'""$3%%c*F  (*F::Lfg/('	./ && -
##At,,## 
 
d41 1## 
r   zraw_ops.Imagc                    |t         j                  }t        j                  |d      }t        j                  | g|t         j
                  t         j                  gt         j
                        \  }\  } | g}d|d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr   r$   s   ImagrE   rF   r  r   r   s           rA   r  r        	\??D			D&	)$55ugsWEVEVX_XjXjDmov  pA  pA  B'8E,&$'&WaF!$41'""$fg/('	.rT   TV_Inv_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)T  Computes the reciprocal of x element-wise.

  I.e., \\(y = 1 / x\\).

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int8`, `int16`, `int32`, `int64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  InvNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   inv_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   invr    s7    
			0h..0$#\\11eT1gn (88!QXQK'""$3%%c*+F::L|VW.('	.' && -
##At,,## 

$D" "## 
rC   zraw_ops.Invc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g
      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   InvrE   rF   r  r2   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rs   rz   r   r3   r6   rR   s          rA   r  r  2     111#sW=M=Mw||]d]l]lnun}n}  @G  @L  @L  NU  N[  N[  ]d  ]j  ]j  ls  ly  ly  {B  {L  {L  NU  N`  N`  =c  d-'4A,>&VQ|6!$41'""$|VW.('	.rT   TV_InvGrad_Tdyc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)  Computes the gradient for the inverse of `x` wrt its input.

  Specifically, `grad = -dy * y*y`, where `y = 1/x`, and `dy`
  is the corresponding input gradient.

  Args:
    y: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    dy: A `Tensor`. Must have the same type as `y`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `y`.
  InvGradNr    r   r  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   inv_grad_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s               rA   inv_gradr  A  s=    
			0h..0$#\\11iq"&gn (88Q2D*!QXQK'""$3%%c*+F::L<2('	.' && -
##At,,## 
$
Rd& &## 
r   zraw_ops.InvGradc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   InvGradrE   rF   r  r   	r   r  r!   r"   rS   r   r@   r?   r:   s	            rA   r  r  n  s    662wgFVFVX_XdXdfmfufuw~  xG  xG  IP  IZ  IZ  \c  \n  \n  Fq  r'9'1bR,>&Z<v!$41'""$<2('	.rT   TV_IsFinite_Tmath.is_finite)r  debugging.is_finite	is_finiter  r  c           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns which elements of x are finite.

  @compatibility(numpy)
  Equivalent to np.isfinite
  @end_compatibility

  Example:

  ```python
  x = tf.constant([5.0, 4.8, 6.8, np.inf, np.nan])
  tf.math.is_finite(x) ==> [True, True, True, False, False]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  IsFiniteNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_is_finiter   is_finite_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  ~  s   2 
			0h..0$#\\11j$#gn, (	
D
DGn$n	
)::ad$Aq#x QK'""$3%%c*+F::LL&'3('	.W && -
##At,,## 
)d*dg		&%
$D" "## 
z" ""r4!$/g 
	..<<	<  Z	  
  
R-
G i,,:::n	
r   zraw_ops.IsFinitec                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   IsFiniterE   rF   r  r   rR   s          rA   r  r    s    111#sW=M=Mw||]d]l]lnun}n}  =A  B-'4A,>&[!L#)s?'""$L&'3('	.rT   
TV_IsInf_Tmath.is_inf)r  debugging.is_infis_infr  r  c           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns which elements of x are Inf.

  @compatibility(numpy)
  Equivalent to np.isinf
  @end_compatibility

  Example:

  ```python
  x = tf.constant([5.0, np.inf, 6.8, np.inf])
  tf.math.is_inf(x) ==> [False, True, False, True]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  IsInfNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_is_infr   is_inf_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r       2 
			0h..0$#\\11gtQ gn, %	
D
DGn$n	
)::14!Aq#x QK'""$3%%c*+F::Lvw0('	.W && -
##At,,## 
&d*dg		&"
$D" "## 
z" ""Bqt,g 
	..<<	<  Z	  
  
"dQT*
G i,,:::n	
r   zraw_ops.IsInfc                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   IsInfrE   rF   r  r   rR   s          rA   r  r  /  r8  rT   
TV_IsNan_Tmath.is_nan)r  debugging.is_nanis_nanr  r  c           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns which elements of x are NaN.

  @compatibility(numpy)
  Equivalent to np.isnan
  @end_compatibility

  Example:

  ```python
  x = tf.constant([5.0, np.nan, 6.8, np.nan, np.inf])
  tf.math.is_nan(x) ==> [False, True, False, True, False]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  IsNanNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_is_nanr   is_nan_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  >  r  r   zraw_ops.IsNanc                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   IsNanrE   rF   r  r   rR   s          rA   r  r    r8  rT   	TV_Less_Tz	math.lesslessc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns the truth value of (x < y) element-wise.

  *NOTE*: `math.less` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Example:

  ```python
  x = tf.constant([5, 4, 6])
  y = tf.constant([5])
  tf.math.less(x, y) ==> [False, True, False]

  x = tf.constant([5, 4, 6])
  y = tf.constant([5, 6, 7])
  tf.math.less(x, y) ==> [False, True, True]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  LessNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_lessr   less_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   r  r    s'   : 
			0h..0$#\\11fdAq"gn, #	
AttGn$n	
)::!qt%Aq#x QK'""$3%%c*+F::Lfg/('	.W && -
##At,,## 
$a-g		& 
QTt% %## 
z" """dQ!$/g 
	..<<	<  Z	  
  
D1-
G i,,:::n	
r  zraw_ops.Lessc                 V   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   s   LessrE   rF   r  r  r   s	            rA   r  r    s_   661vsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  cp  cp  ry  rB  rB  DK  DR  DR  T[  T`  T`  bi  bp  bp  ry  r@  r@  EC  D'9&1aQ,>&WaF!$41'""$fg/('	.rT   TV_LessEqual_Tzmath.less_equal
less_equalc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns the truth value of (x <= y) element-wise.

  *NOTE*: `math.less_equal` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Example:

  ```python
  x = tf.constant([5, 4, 6])
  y = tf.constant([5])
  tf.math.less_equal(x, y) ==> [True, True, False]

  x = tf.constant([5, 4, 6])
  y = tf.constant([5, 6, 6])
  tf.math.less_equal(x, y) ==> [True, True, True]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  	LessEqualNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_less_equalr   less_equal_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   r  r    s'   : 
			0h..0$#\\11k4A'gn, )	
AttGn$n	
)::qAD*Aq#x QK'""$3%%c*+F::L\674('	.W && -
##At,,## 
*a-g		&&
QTt% %## 
z" ""D15g 
	..<<	<  Z	  
  
b$ad3
G i,,:::n	
r  zraw_ops.LessEqualc                 V   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   s	   LessEqualrE   rF   r  r  r   s	            rA   r  r  X  s_   661vsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  cp  cp  ry  rB  rB  DK  DR  DR  T[  T`  T`  bi  bp  bp  ry  r@  r@  EC  D'9&1aQ,>&\1\#)s?'""$\674('	.rT   TV_Lgamma_Tzmath.lgammalgammac           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)aM  Computes the log of the absolute value of `Gamma(x)` element-wise.

    For positive numbers, this function computes log((input - 1)!) for every element in the tensor.
    `lgamma(5) = log((5-1)!) = log(4!) = log(24) = 3.1780539`

  Example:

  ```python
  x = tf.constant([0, 0.5, 1, 4.5, -4, -5.6])
  tf.math.lgamma(x) ==> [inf, 0.5723649, 0., 2.4537368, inf, -4.6477685]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  LgammaNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_lgammar   lgamma_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  h  s   0 
			0h..0$#\\11ha!gn, %	
D
DGn$n	
)::AD"Aq#x QK'""$3%%c*+F::L,1('	.W && -
##At,,## 
&d*dg		&"
$D" "## 
z" ""Bqt,g 
	..<<	<  Z	  
  
"dQT*
G i,,:::n	
r   zraw_ops.Lgammac                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   LgammarE   rF   r  r   rR   s          rA   r  r    r  rT   TV_LinSpace_TTV_LinSpace_Tidxstartstopnumc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        j                  d| |||      \  }}}	}
|
dd }t        j                          rHd|	j#                  d      d|	j#                  d      f}|	j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a7  Generates values in an interval.

  A sequence of `num` evenly-spaced values are generated beginning at `start`.
  If `num > 1`, the values in the sequence increase by
  `(stop - start) / (num - 1)`, so that the last one is exactly `stop`.

  For example:

  ```
  tf.linspace(10.0, 12.0, 3, name="linspace") => [ 10.0  11.0  12.0]
  ```

  Args:
    start: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
      0-D tensor. First entry in the range.
    stop: A `Tensor`. Must have the same type as `start`.
      0-D tensor. Last entry in the range.
    num: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      0-D tensor. Number of values to generate.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `start`.
  LinSpaceNr    )r  r  r  r!   r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   lin_space_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   )r  r  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   	lin_spacer    sV   2 
			0h..0$#\\11j$tS2gn (88%d$@!QXQK'""$3%%c*F  (*F::LL&'3('	.) && -
##At,,## 
%
s41 1## 
s0    C" "D)5DD)(D)-D= =EEzraw_ops.LinSpacec                     t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  g      \  }}|\  } }t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| ||g}d|d|f}	t        j                  dd||	||      }
t        j                         rt        j                  d||	|
       |
\  }
|
S )Nr$   r   s   LinSpacerE   rF   r  )r2   rH   rI   rJ   rK   rL   rM   rP   rQ   r   r3   r6   )r  r  r  r!   r"   rS   r   r   r@   r?   r:   s              rA   r  r    s    66t}cGL\L\^e^j^jlsl{l{  ~E  ~M  ~M  LP  Q'9-5$66ucGMMSZS`S`Ccelerers*fss#,&*-&[!L#)s?'""$L&'3('	.rT   TV_Log_Tzmath.loglogc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a%  Computes natural logarithm of x element-wise.

  I.e., \\(y = \log_e x\\).

  Example:
  >>> x = tf.constant([0, 0.5, 1, 5])
  >>> tf.math.log(x)
  <tf.Tensor: shape=(4,), dtype=float32, numpy=array([      -inf, -0.6931472,  0.       ,  1.609438 ], dtype=float32)>

  See: https://en.wikipedia.org/wiki/Logarithm

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  LogNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_logr   log_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r    r  r   zraw_ops.Logc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   LogrE   rF   r  r   rR   s          rA   r  r  a  r  rT   
TV_Log1p_Tz
math.log1plog1pc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes natural logarithm of (1 + x) element-wise.

  I.e., \\(y = \log_e (1 + x)\\).

  Example:
  >>> x = tf.constant([0, 0.5, 1, 5])
  >>> tf.math.log1p(x)
  <tf.Tensor: shape=(4,), dtype=float32, numpy=array([0.       , 0.4054651, 0.6931472, 1.7917595], dtype=float32)>

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  Log1pNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_log1pr   log1p_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  p  r   r   zraw_ops.Log1pc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   Log1prE   rF   r  r   rR   s          rA   r  r    r   rT   zmath.logical_andlogical_andc           
      *   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r&d}
|j6                  }t3        j8                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns the truth value of x AND y element-wise.

  Logical AND function.

  Requires that `x` and `y` have the same shape or have
  [broadcast-compatible](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)
  shapes. For example, `x` and `y` can be:

    - Two single elements of type `bool`.
    - One `tf.Tensor` of type `bool` and one single `bool`, where the result will
      be calculated by applying logical AND with the single element to each
      element in the larger Tensor.
    - Two `tf.Tensor` objects of type `bool` of the same shape. In this case,
      the result will be the element-wise logical AND of the two input tensors.

  You can also use the `&` operator instead.

  Usage:

    >>> a = tf.constant([True])
    >>> b = tf.constant([False])
    >>> tf.math.logical_and(a, b)
    <tf.Tensor: shape=(1,), dtype=bool, numpy=array([False])>
    >>> a & b
    <tf.Tensor: shape=(1,), dtype=bool, numpy=array([False])>

    >>> c = tf.constant([True])
    >>> x = tf.constant([False, True, True, False])
    >>> tf.math.logical_and(c, x)
    <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False,  True,  True, False])>
    >>> c & x
    <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False,  True,  True, False])>

    >>> y = tf.constant([False, False, True, True])
    >>> z = tf.constant([False, True, False, True])
    >>> tf.math.logical_and(y, z)
    <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, False, False, True])>
    >>> y & z
    <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, False, False, True])>

    This op also supports broadcasting

    >>> tf.logical_and([[True, False]], [[True], [False]])
    <tf.Tensor: shape=(2, 2), dtype=bool, numpy=
      array([[ True, False],
             [False, False]])>

  The reduction version of this elementwise operation is `tf.math.reduce_all`.

  Args:
      x: A `tf.Tensor` of type bool.
      y: A `tf.Tensor` of type bool.
      name: A name for the operation (optional).

  Returns:
    A `tf.Tensor` of type bool with the shape that `x` and `y` broadcast to.

  Args:
    x: A `Tensor` of type `bool`.
    y: A `Tensor` of type `bool`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  
LogicalAndNr    r   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_logical_andr   logical_and_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r5   r6   r   s               rA   r  r    s   J 
			0h..0$#\\11lD!Q(gn, *	
AttGn$n	
)::QT+Aq#x QK'""$F::LlFG5('	.W && -
##At,,## 
+a-g		&'
QTt% %## 
z" ""TA6g 
	..<<	<  Z	  
  
r4!qt4
G i,,:::n	
P    C 5F: D+DDD#E <E F7 AF75F7:AHHzraw_ops.LogicalAndc                 8   t        j                  | t        j                        } t        j                  |t        j                        }| |g}d }t	        j
                  dd||||      }t	        j                         rt	        j                  d|||       |\  }|S )Ns
   LogicalAndrE   rF   r  r+   r   rI   r   r2   r   r3   r6   r   r   r!   r"   r@   r?   r:   s          rA   r  r  G  s    
Q-!
Q-!Q,&]Al#)s?'""$lFG5('	.rT   zmath.logical_notlogical_notc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r&d}	|j6                  }
t3        j8                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)aY  Returns the truth value of `NOT x` element-wise.

  Example:

  >>> tf.math.logical_not(tf.constant([True, False]))
  <tf.Tensor: shape=(2,), dtype=bool, numpy=array([False,  True])>

  Args:
    x: A `Tensor` of type `bool`. A `Tensor` of type `bool`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  
LogicalNotNr    r   r#   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_logical_notr   logical_not_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r5   r6   r7   s              rA   r  r  U  s	   $ 
			0h..0$#\\11lD!%gn, *	
D
DGn$n	
)::&Aq#x QK'""$F::LlFG5('	.W && -
##At,,## 
+d*dg		&'
$D" "## 
z" ""TAD1g 
	..<<	<  Z	  
  
r4!$/
G i,,:::n	
sP    C 3F4 D(DDD E 8E F1AF1/F14AH	Hzraw_ops.LogicalNotc                     t        j                  | t        j                        } | g}d }t	        j
                  dd||||      }t	        j                         rt	        j                  d|||       |\  }|S )Ns
   LogicalNotrE   rF   r  r  )r   r!   r"   r@   r?   r:   s         rA   r  r    sp    
Q-!,&]Al#)s?'""$lFG5('	.rT   zmath.logical_or
logical_orc           
      *   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r&d}
|j6                  }t3        j8                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns the truth value of x OR y element-wise.

  Logical OR function.

  Requires that `x` and `y` have the same shape or have
  [broadcast-compatible](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)
  shapes. For example, `x` and `y` can be:

  - Two single elements of type `bool`.
  - One `tf.Tensor` of type `bool` and one single `bool`, where the result will
    be calculated by applying logical OR with the single element to each
    element in the larger Tensor.
  - Two `tf.Tensor` objects of type `bool` of the same shape. In this case,
    the result will be the element-wise logical OR of the two input tensors.

  You can also use the `|` operator instead.

  Usage:

    >>> a = tf.constant([True])
    >>> b = tf.constant([False])
    >>> tf.math.logical_or(a, b)
    <tf.Tensor: shape=(1,), dtype=bool, numpy=array([ True])>
    >>> a | b
    <tf.Tensor: shape=(1,), dtype=bool, numpy=array([ True])>

    >>> c = tf.constant([False])
    >>> x = tf.constant([False, True, True, False])
    >>> tf.math.logical_or(c, x)
    <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True,  True, False])>
    >>> c | x
    <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True,  True, False])>

    >>> y = tf.constant([False, False, True, True])
    >>> z = tf.constant([False, True, False, True])
    >>> tf.math.logical_or(y, z)
    <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True, True, True])>
    >>> y | z
    <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True, True, True])>

    This op also supports broadcasting

    >>> tf.logical_or([[True, False]], [[True], [False]])
    <tf.Tensor: shape=(2, 2), dtype=bool, numpy=
    array([[ True,  True],
         [ True, False]])>

  The reduction version of this elementwise operation is `tf.math.reduce_any`.

  Args:
      x: A `tf.Tensor` of type bool.
      y: A `tf.Tensor` of type bool.
      name: A name for the operation (optional).

  Returns:
    A `tf.Tensor` of type bool with the shape that `x` and `y` broadcast to.

  Args:
    x: A `Tensor` of type `bool`.
    y: A `Tensor` of type `bool`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  	LogicalOrNr    r   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_logical_orr   logical_or_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r5   r6   r   s               rA   r  r    s   J 
			0h..0$#\\11k4A'gn, )	
AttGn$n	
)::qAD*Aq#x QK'""$F::L\674('	.W && -
##At,,## 
*a-g		&&
QTt% %## 
z" ""D15g 
	..<<	<  Z	  
  
b$ad3
G i,,:::n	
r  zraw_ops.LogicalOrc                 8   t        j                  | t        j                        } t        j                  |t        j                        }| |g}d }t	        j
                  dd||||      }t	        j                         rt	        j                  d|||       |\  }|S )Ns	   LogicalOrrE   rF   r  r  r  s          rA   r  r  )  s    
Q-!
Q-!Q,&\1\#)s?'""$\674('	.rT   TV_MatMul_Ttranspose_atranspose_bgrad_agrad_bc                    t         j                   xs t        j                         }|j                  }|j                  r$	 t	        j
                  |d|| |d|d|d|d|      }	|	S |d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }t        j                   d| ||||||	      \  }}}}|dd }	t        j"                         r{d|j%                  d      d|j%                  d      d
|j'                  d
      d|j%                  d      d|j%                  d      f
}|j(                  }t        j*                  d|||	       |	\  }	|	S # t        j                  $ r }
t        j                  |
|       Y d}
~
nd}
~
wt        j                  $ r Y nw xY w	 t        | |||||||      S # t        j                  $ r Y w xY w)a  Multiply the matrix "a" by the matrix "b".

  The inputs must be two-dimensional matrices and the inner dimension of
  "a" (after being transposed if transpose_a is true) must match the
  outer dimension of "b" (after being transposed if transposed_b is
  true).

  *Note*: The default kernel implementation for MatMul on GPUs uses
  cublas.

  Args:
    a: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int32`, `int64`, `uint8`, `uint16`, `uint32`, `uint64`, `complex64`, `complex128`.
    b: A `Tensor`. Must have the same type as `a`.
    transpose_a: An optional `bool`. Defaults to `False`.
      If true, "a" is transposed before multiplication.
    transpose_b: An optional `bool`. Defaults to `False`.
      If true, "b" is transposed before multiplication.
    grad_a: An optional `bool`. Defaults to `False`.
    grad_b: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `a`.
  MatMulr  r  r  r  N)r  r  r  r  r!   r"   F)rL  rM  r  r  r  r  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   mat_mul_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   )rL  rM  r  r  r  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                   rA   mat_mulr  9  s   2 
			0h..0$#\\11haM;Xvx9g n K"";>+K"";>+^Ffh/&^Ffh/&'88AT;!QX QK'""$S//>  /c6H6H6M**84h  *,F ::L,1('	.I && -
##At,,## 
#
QK[Tt= = ## 
r4  zraw_ops.MatMulc                 6   |d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }t        j                  | |g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}	|	\  } }| |g}
d|d|d|d|d|f
}t        j                   dd|
|||	      }t        j"                         rt        j$                  d
|
||       |\  }|S )NFr  r  r  r  r$   s   MatMulrE   rF   r  )r2   r   rH   rI   rJ   rK   rL   rM   rP   rQ   rr   ry   r{   r|   rs   rz   r   r3   r6   )rL  rM  r  r  r  r  r!   r"   rS   r   r@   r?   r:   s                rA   r  r    s   K"";>+K"";>+^Ffh/&^Ffh/&661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  Wd  Wd  fm  fs  fs  u|  uC  uC  EL  ES  ES  U\  Uc  Uc  el  ev  ev  x  xJ  xJ  EM  N'9&1aQ,;{C	8VXv/&Y,f!$41'""$,1('	.rT   TV_Max_TTV_Max_Tidxc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rYd|	j%                  d      d|	j'                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y "w xY w)	a  Computes the maximum of elements across dimensions of a tensor.

  Reduces `input` along the dimensions given in `axis`. Unless
  `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in
  `axis`. If `keep_dims` is true, the reduced dimensions are
  retained with length 1.

  Args:
    input: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`, `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
      The tensor to reduce.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      The dimensions to reduce. Must be in the range
      `[-rank(input), rank(input))`.
    keep_dims: An optional `bool`. Defaults to `False`.
      If true, retain reduced dimensions with length 1.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `input`.
  Maxr   Nr   Fr   r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _max_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   r   s                rA   _maxr       * 
			0h..0$#\\11eT5$Y@gn I  K8)'88Udi!QX QK'""$3--k:C  %vs/A/A&/IKF::L|VW.('	.1 && -
##At,,## 
 
4A A## 
r!  zraw_ops.Maxc                    |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| |g}d|d|d|f}t        j*                  dd||||      }	t        j,                         rt        j.                  d|||	       |	\  }	|	S )	NFr   r$   r   s   MaxrE   rF   r  r2   r   rH   rI   rL   rM   rP   rr   rO   rN   rQ   rJ   ry   rK   r{   r|   rt   ru   rv   rw   rx   r   r3   r6   r#  s
             rA   r  r       I  K8)55ugsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  cp  cp  ry  rB  rB  DK  DR  DR  T[  T`  T`  bi  bp  bp  ry  r@  r@  BI  BO  BO  QX  Q_  Q_  ah  ao  ao  qx  q  q  AH  AP  AP  ES  T'8E 77gmmU\UbUbEegngtgtu*gt,C&*E&VQ|6!$41'""$|VW.('	.rT   TV_Maximum_Tzmath.maximummaximumc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns the max of x and y (i.e. x > y ? x : y) element-wise.

  Example:

  >>> x = tf.constant([0., 0., 0., 0.])
  >>> y = tf.constant([-2., 0., 2., 5.])
  >>> tf.math.maximum(x, y)
  <tf.Tensor: shape=(4,), dtype=float32, numpy=array([0., 0., 2., 5.], dtype=float32)>

  Note that `maximum` supports [broadcast semantics](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) for `x` and `y`.

  >>> x = tf.constant([-5., 0., 0., 0.])
  >>> y = tf.constant([-3.])
  >>> tf.math.maximum(x, y)
  <tf.Tensor: shape=(4,), dtype=float32, numpy=array([-3., 0., 0., 0.], dtype=float32)>

  The reduction version of this elementwise operation is `tf.math.reduce_max`

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int8`, `uint8`, `int16`, `uint16`, `int32`, `uint32`, `int64`, `uint64`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  MaximumNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_maximumr   maximum_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   r  r    s'   < 
			0h..0$#\\11iq!%gn, &	
AttGn$n	
)::Q!$(Aq#x QK'""$3%%c*+F::L<2('	.W && -
##At,,## 
'a-g		&#
QTt% %## 
z" ""RQT2g 
	..<<	<  Z	  
  
2ta140
G i,,:::n	
r  zraw_ops.Maximumc                 V   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   s   MaximumrE   rF   r  r2   rH   rI   rJ   rK   rL   rM   rN   rr   rO   ry   rP   r{   rQ   r|   r   r3   r6   r   s	            rA   r  r  C  a   661vsWEUEUW^WcWceletetv}  wF  wF  HO  HT  HT  V]  Vc  Vc  el  er  er  t{  tB  tB  DK  DQ  DQ  SZ  Sa  Sa  cj  cp  cp  ry  r@  r@  EC  D'9&1aQ,>&Z<v!$41'""$<2('	.rT   	TV_Mean_TTV_Mean_Tidxc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rYd|	j%                  d      d|	j'                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y "w xY w)	a  Computes the mean of elements across dimensions of a tensor.

  Reduces `input` along the dimensions given in `axis`. Unless
  `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in
  `axis`. If `keep_dims` is true, the reduced dimensions are
  retained with length 1.

  Args:
    input: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
      The tensor to reduce.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      The dimensions to reduce. Must be in the range
      `[-rank(input), rank(input))`.
    keep_dims: An optional `bool`. Defaults to `False`.
      If true, retain reduced dimensions with length 1.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `input`.
  Meanr   Nr   Fr   r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   mean_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   r   s                rA   meanr  T     * 
			0h..0$#\\11fdE4iAgn I  K8)'88ety!QX QK'""$3--k:C  %vs/A/A&/IKF::Lfg/('	.1 && -
##At,,## 
 
4A A## 
r!  zraw_ops.Meanc                    |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| |g}d|d|d|f}t        j.                  dd||||      }	t        j0                         rt        j2                  d|||	       |	\  }	|	S )	NFr   r$   r   s   MeanrE   rF   r  r  r#  s
             rA   r  r    E   I  K8)55ugsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  ct  ct  v}  vC  vC  EL  ER  ER  T[  Tb  Tb  dk  dr  dr  t{  tD  tD  FM  FT  FT  V]  Ve  Ve  gn  gu  gu  w~  wI  wI  KR  KW  KW  Y`  Yg  Yg  ip  iw  iw  Ez  {'8E 77gmmU\UbUbEegngtgtu*gt,C&*E&WaF!$41'""$fg/('	.rT   TV_Min_TTV_Min_Tidxc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rYd|	j%                  d      d|	j'                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y "w xY w)	a  Computes the minimum of elements across dimensions of a tensor.

  Reduces `input` along the dimensions given in `axis`. Unless
  `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in
  `axis`. If `keep_dims` is true, the reduced dimensions are
  retained with length 1.

  Args:
    input: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`, `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
      The tensor to reduce.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      The dimensions to reduce. Must be in the range
      `[-rank(input), rank(input))`.
    keep_dims: An optional `bool`. Defaults to `False`.
      If true, retain reduced dimensions with length 1.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `input`.
  Minr   Nr   Fr   r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _min_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   r   s                rA   _minr!    r  r!  zraw_ops.Minc                    |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| |g}d|d|d|f}t        j*                  dd||||      }	t        j,                         rt        j.                  d|||	       |	\  }	|	S )	NFr   r$   r   s   MinrE   rF   r  r  r#  s
             rA   r   r     r	  rT   TV_Minimum_Tzmath.minimumminimumc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)ak  Returns the min of x and y (i.e. x < y ? x : y) element-wise.

  Both inputs are number-type tensors (except complex).  `minimum` expects that
  both tensors have the same `dtype`.

  Examples:

  >>> x = tf.constant([0., 0., 0., 0.])
  >>> y = tf.constant([-5., -2., 0., 3.])
  >>> tf.math.minimum(x, y)
  <tf.Tensor: shape=(4,), dtype=float32, numpy=array([-5., -2., 0., 0.], dtype=float32)>

  Note that `minimum` supports [broadcast semantics](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) for `x` and `y`.

  >>> x = tf.constant([-5., 0., 0., 0.])
  >>> y = tf.constant([-3.])
  >>> tf.math.minimum(x, y)
  <tf.Tensor: shape=(4,), dtype=float32, numpy=array([-5., -3., -3., -3.], dtype=float32)>

  The reduction version of this elementwise operation is `tf.math.reduce_min`

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int8`, `uint8`, `int16`, `uint16`, `int32`, `uint32`, `int64`, `uint64`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  MinimumNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_minimumr   minimum_eager_fallbackr/   rj   r   r   r   r$  r   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   r$  r$    s(   B 
			0h..0$#\\11iq!%gn, &	
AttGn$n	
)::Q!$(Aq#x QK'""$3%%c*+F::L<2('	.W && -
##At,,## 
'a-g		&#
QTt% %## 
z" ""RQT2g 
	..<<	<  Z	  
  
2ta140
G i,,:::n	
r  zraw_ops.Minimumc                 V   t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   s   MinimumrE   rF   r&  r  r   s	            rA   r(  r(  F  r  rT   TV_Mod_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)ak  Returns element-wise remainder of division. This emulates C semantics in that

  the result here is consistent with a truncating divide. E.g.
  `tf.truncatediv(x, y) * y + truncate_mod(x, y) = x`.

  *NOTE*: `Mod` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `int32`, `int64`, `half`, `half`, `bfloat16`, `float32`, `float64`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  ModNr    r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   mod_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   s               rA   rD  rD  V  s=   " 
			0h..0$#\\11eT1a!gn (88ad$!QXQK'""$3%%c*+F::L|VW.('	.' && -
##At,,## 

QTt% %## 
r   zraw_ops.Modc                    t        j                  | |g|t        j                  t        j                  t        j
                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   ModrE   rF   r,  )r2   rH   rI   rP   rQ   rK   rJ   rL   rM   r   r3   r6   r   s	            rA   r-  r-    s    661vsW]]T[TaTacjcocoqxq}q}  @G  @P  @P  RY  Ra  Ra  cj  cr  cr  Eu  v'9&1aQ,>&VQ|6!$41'""$|VW.('	.rT   TV_Mul_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Returns x * y element-wise.

  *NOTE*: `Multiply` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `uint16`, `int16`, `int32`, `uint32`, `uint64`, `int64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  MulNr    r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   mul_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   s               rA   mulr3    r  r   zraw_ops.Mulc                    t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   g      \  }}|\  } }| |g}d|f}t        j"                  dd||||      }t        j$                         rt        j&                  d|||       |\  }|S )Nr$   s   MulrE   rF   r1  r  r   s	            rA   r2  r2    r  rT   TV_MulNoNan_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Returns x * y element-wise. Returns zero if y is zero, even if x if infinite or NaN.

  *NOTE*: `MulNoNan` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  MulNoNanNr    r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   mul_no_nan_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   s               rA   
mul_no_nanr9    s=    
			0h..0$#\\11j$1&gn (88a14)!QXQK'""$3%%c*+F::LL&'3('	.' && -
##At,,## 
&
QTt% %## 
r   zraw_ops.MulNoNanc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   MulNoNanrE   rF   r7  r   r   s	            rA   r8  r8     s    661vsWEUEUW^WcWceletetv}  wF  wF  HO  HY  HY  [b  [m  [m  Ep  q'9&1aQ,>&[!L#)s?'""$L&'3('	.rT   
TV_Ndtri_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)r  NdtriNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   ndtri_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   ndtrir?    r6  rC   zraw_ops.Ndtric                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   NdtrirE   rF   r=  r   rR   s          rA   r>  r>  9  r8  rT   TV_Neg_Tzmath.negativenegativec           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)aV  Computes numerical negative value element-wise.

  I.e., \\(y = -x\\).

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int8`, `int16`, `int32`, `int64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  NegNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_negr   neg_eager_fallbackr/   rj   r   r   r   negr   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   rG  rG  H  s    
			0h..0$#\\11eT1gn, "	
D
DGn$n	
)::Aq#x QK'""$3%%c*+F::L|VW.('	.W && -
##At,,## 
#d*dg		&
$D" "## 
z" ""TAD)g 
	..<<	<  Z	  
  
r4!$'
G i,,:::n	
r   zraw_ops.Negc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g
      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   NegrE   rF   rD  r  rR   s          rA   rF  rF    r  rT   TV_NextAfter_Tzmath.nextafterx1x2c           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns the next representable value of `x1` in the direction of `x2`, element-wise.

  This operation returns the same result as the C++ std::nextafter function.

  It can also return a subnormal number.

  @compatibility(cpp)
  Equivalent to C++ std::nextafter function.
  @end_compatibility

  Args:
    x1: A `Tensor`. Must be one of the following types: `float64`, `float32`.
    x2: A `Tensor`. Must have the same type as `x1`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x1`.
  	NextAfterNr    r   )rJ  rK  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_next_afterr   next_after_eager_fallbackr/   rj   r   r   r   
next_afterr   r   r   r0   r1   r2   r3   r4   r5   r6   )rJ  rK  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s               rA   rP  rP    s'   , 
			0h..0$#\\11k4R)gn, )	RGn$n	
)::r.Aq#x QK'""$3%%c*+F::L\674('	.W && -
##At,,## 
*r4/4!g		&&
bt' '## 
z" ""DB2D9g 
	..<<	<  Z	  
  
b$"$7
G i,,:::n	
r  zraw_ops.NextAfterc                 H   t        j                  | |g|t        j                  t        j                  gt        j                        \  }}|\  } }| |g}d|f}t        j
                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s	   NextAfterrE   rF   rM  )r2   rH   rI   rM   rL   r   r3   r6   )	rJ  rK  r!   r"   rS   r   r@   r?   r:   s	            rA   rO  rO    s    66BxwX_XgXgFjlsl{l{|'9(2rb,>&\1\#)s?'""$\674('	.rT   ) TV_NotEqual_Tr   r   rV   rW   rh  r   r   ri  rj  rk  rl  rm  r   r   r   rn  r   r   rX   rY   rZ   r[   r\   ro  r   r]   r^   rp  r_   r`   r   c           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rHd|	j%                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Returns the truth value of (x != y) element-wise.

  *NOTE*: `NotEqual` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`.
    y: A `Tensor`. Must have the same type as `x`.
    incompatible_shape_error: An optional `bool`. Defaults to `True`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `bool`.
  NotEqualr  Nr  Tr  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   not_equal_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   r   s                rA   	not_equalrV    s    
			0h..0$#\\11j$1&@ "g n %#%//0HJde'88a1-E!QX QK'""$3%%c*,F  !;<>F::LL&'3('	.5 && -
##At,,## 
%
Q)A  ## 
r   zraw_ops.NotEqualc                 &   |d}t        j                  |d      }t        j                  | |g|g       \  }}|\  } }| |g}d|d|f}t        j                  dd||||      }	t        j                         rt        j
                  d|||	       |	\  }	|	S )NTr  r$   s   NotEqualrE   rF   rT  r  r  s
             rA   rU  rU  2  s    %#%//0HJde661vsBG'9&1aQ,4&[!L#)s?'""$L&'3('	.rT   TV_Polygamma_Tzmath.polygamma	polygammac           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a   Compute the polygamma function \\(\psi^{(n)}(x)\\).

  The polygamma function is defined as:


  \\(\psi^{(a)}(x) = \frac{d^a}{dx^a} \psi(x)\\)

  where \\(\psi(x)\\) is the digamma function.
  The polygamma function is defined only for non-negative integer orders \\a\\.

  Args:
    a: A `Tensor`. Must be one of the following types: `float32`, `float64`.
    x: A `Tensor`. Must have the same type as `a`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `a`.
  	PolygammaNr    r   ri  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_polygammar   polygamma_eager_fallbackr/   rj   r   r   r   rY  r   r   r   r0   r1   r2   r3   r4   r5   r6   rl  s               rA   rY  rY  F  s'   . 
			0h..0$#\\11k4A'gn, (	
AttGn$n	
)::qAD*Aq#x QK'""$3%%c*+F::L\674('	.W && -
##At,,## 
)a-g		&%
QTt% %## 
z" ""r4!qt4g 
	..<<	<  Z	  
  
RQT2
G i,,:::n	
r  zraw_ops.Polygammac                 *   t        j                  | |g|t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j
                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s	   PolygammarE   rF   r[  rS  rn  s	            rA   r]  r]    s    661vsW__V]VeVeDhi'9&1aQ,>&\1\#)s?'""$\674('	.rT   TV_Pow_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)ar  Computes the power of one value to another.

  Given a tensor `x` and a tensor `y`, this operation computes \\(x^y\\) for
  corresponding elements in `x` and `y`. For example:

  ```
  # tensor 'x' is [[2, 2]], [3, 3]]
  # tensor 'y' is [[8, 16], [2, 3]]
  tf.pow(x, y) ==> [[256, 65536], [9, 27]]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `float32`, `half`, `float64`, `int8`, `int16`, `int32`, `int64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  PowNr    r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _pow_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   s               rA   _powrc    s=   ( 
			0h..0$#\\11eT1a!gn (88ad$!QXQK'""$3%%c*+F::L|VW.('	.' && -
##At,,## 
 
QTt% %## 
r   zraw_ops.Powc                    t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g
      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   PowrE   rF   ra  )r2   rH   rI   rJ   rL   rK   rM   rN   rO   rP   rQ   rs   rz   r   r3   r6   r   s	            rA   rb  rb    s7   661vsWEUEUW^WfWfhohthtv}  wF  wF  HO  HT  HT  V]  Vc  Vc  el  er  er  t{  tA  tA  CJ  CT  CT  V]  Vh  Vh  Ek  l'9&1aQ,>&VQ|6!$41'""$|VW.('	.rT   	TV_Prod_TTV_Prod_Tidxc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rYd|	j%                  d      d|	j'                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y "w xY w)	a  Computes the product of elements across dimensions of a tensor.

  Reduces `input` along the dimensions given in `axis`. Unless
  `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in
  `axis`. If `keep_dims` is true, the reduced dimensions are
  retained with length 1.

  Args:
    input: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
      The tensor to reduce.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      The dimensions to reduce. Must be in the range
      `[-rank(input), rank(input))`.
    keep_dims: An optional `bool`. Defaults to `False`.
      If true, retain reduced dimensions with length 1.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `input`.
  Prodr   Nr   Fr   r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   prod_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   r   s                rA   prodrj    r  r!  zraw_ops.Prodc                    |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| |g}d|d|d|f}t        j.                  dd||||      }	t        j0                         rt        j2                  d|||	       |	\  }	|	S )	NFr   r$   r   s   ProdrE   rF   rh  r  r#  s
             rA   ri  ri  "  r  rT   QuantizeDownAndShrinkRange)output
output_min
output_max$TV_QuantizeDownAndShrinkRange_Tinput&TV_QuantizeDownAndShrinkRange_out_type	input_min	input_maxout_typec           
      .   t         j                   xs t        j                         }|j                  }|j                  r4	 t	        j
                  |d|| ||d|      }t        j                  |      }|S t        j                   |d      }t#        j$                  d| ||||      \  }	}	}
}|dd }t        j&                         rHd|
j)                  d      d|
j)                  d      f}|
j*                  }t        j,                  d|||       t        j                  |      }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y  w xY w)a  Convert the quantized 'input' tensor into a lower-precision 'output', using the

  actual distribution of the values to maximize the usage of the lower bit depth
  and adjusting the output min and max ranges accordingly.

  [input_min, input_max] are scalar floats that specify the range for the float
  interpretation of the 'input' data. For example, if input_min is -1.0f and
  input_max is 1.0f, and we are dealing with quint16 quantized data, then a 0
  value in the 16-bit data should be interpreted as -1.0f, and a 65535 means 1.0f.

  This operator tries to squeeze as much precision as possible into an output with
  a lower bit depth by calculating the actual min and max values found in the
  data. For example, maybe that quint16 input has no values lower than 16,384 and
  none higher than 49,152. That means only half the range is actually needed, all
  the float interpretations are between -0.5f and 0.5f, so if we want to compress
  the data into a quint8 output, we can use that range rather than the theoretical
  -1.0f to 1.0f that is suggested by the input min and max.

  In practice, this is most useful for taking output from operations like
  QuantizedMatMul that can produce higher bit-depth outputs than their inputs and
  may have large potential output ranges, but in practice have a distribution of
  input values that only uses a small fraction of the possible range. By feeding
  that output into this operator, we can reduce it from 32 bits down to 8 with
  minimal loss of accuracy.

  Args:
    input: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
    input_min: A `Tensor` of type `float32`.
      The float value that the minimum quantized input value represents.
    input_max: A `Tensor` of type `float32`.
      The float value that the maximum quantized input value represents.
    out_type: A `tf.DType` from: `tf.qint8, tf.quint8, tf.qint32, tf.qint16, tf.quint16`.
      The type of the output. Should be a lower bit depth than Tinput.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (output, output_min, output_max).

    output: A `Tensor` of type `out_type`.
    output_min: A `Tensor` of type `float32`.
    output_max: A `Tensor` of type `float32`.
  rl  rt  Nrt  r!   r"   )r   rr  rs  rt  r!   Tinput)r%   r   r&   r'   r   r(   !_QuantizeDownAndShrinkRangeOutput_maker)   r*   r+   r,   r-   -quantize_down_and_shrink_range_eager_fallbackr/   r2   r   r0   r1   r3   r4   r5   r6   )r   rr  rs  rt  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                 rA   quantize_down_and_shrink_ranger{  :  s   V 
			0h..0$#\\	11*D%IHg 277@gn *5('88$EY09H+/1!QX QK'""$**84j  ,.F::L$lFGE-33G<'	./ && -
##At,,## 
:
ItO O## 
0    2D! !E(4EE('E(,E= =FFz"raw_ops.QuantizeDownAndShrinkRangec           	      `   t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } t        j                  |t        j                        }t        j                  |t        j                        }| ||g}d|d|f}t        j                  dd||||      }	t        j                         rt        j                  d|||	       t        j!                  |	      }	|	S )Nrt  rw  s   QuantizeDownAndShrinkRange   rF   rl  )r2   r   rH   rI   rt   ru   rv   rw   rx   r+   r   rL   r   r3   r6   rx  ry  )
r   rr  rs  rt  r!   r"   _attr_Tinputr@   r?   r:   s
             rA   rz  rz    s   *5(#::E7C'--Y`YgYgipiwiw  zA  zH  zH  JQ  JY  JY  J\  ],$$Y@)$$Y@)I.,lJ9&:A$0C"&(' ""$$lFGE-33G<'	.rT   QuantizedAdd)zmin_zmax_zTV_QuantizedAdd_T1TV_QuantizedAdd_T2TV_QuantizedAdd_Toutputmin_xmax_xmin_ymax_yToutputc                    t         j                   xs t        j                         }|j                  }	|	j                  r7	 t	        j
                  |d|| |||||d|      }
t        j                  |
      }
|
S |t        j                   }t#        j$                  |d      }t'        j(                  d| |||||||	      \  }}}}|dd }
t#        j*                         rYd|j-                  d      d|j-                  d      d|j-                  d      f}|j.                  }t#        j0                  d|||
       t        j                  |
      }
|
S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||||||	      S # t        j                  $ r Y Iw xY w)a7  Returns x + y element-wise, working on quantized buffers.

  Args:
    x: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
    y: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
    min_x: A `Tensor` of type `float32`.
      The float value that the lowest quantized `x` value represents.
    max_x: A `Tensor` of type `float32`.
      The float value that the highest quantized `x` value represents.
    min_y: A `Tensor` of type `float32`.
      The float value that the lowest quantized `y` value represents.
    max_y: A `Tensor` of type `float32`.
      The float value that the highest quantized `y` value represents.
    Toutput: An optional `tf.DType` from: `tf.qint8, tf.quint8, tf.qint32, tf.qint16, tf.quint16`. Defaults to `tf.qint32`.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (z, min_z, max_z).

    z: A `Tensor` of type `Toutput`.
    min_z: A `Tensor` of type `float32`.
    max_z: A `Tensor` of type `float32`.
  r  r  Nr  r!   r"   r   r   r  r  r  r  r  r!   T1T2)r%   r   r&   r'   r   r(   _QuantizedAddOutputry  r)   r*   r+   r,   r-   quantized_add_eager_fallbackr/   rI   rv   r2   r   r0   r1   r3   r4   r5   r6   r   r   r  r  r  r  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                    rA   quantized_addr       0 
			0h..0$#\\	11ndAq%u7g $))'2gn _nnGw	2''88!qU%#W4A!QX QK'""$C&&t,dC4F4Ft4L++I68F::Lfg7%%g.'	.3 && -
##At,,## 
)
QueUG$  ## 
0    5E
 
FE88FFF) )G ?G zraw_ops.QuantizedAddc	           	         |t         j                  }t        j                  |d      }t        j                  | g|t         j
                  t         j                  t         j                  t         j                  t         j                  g      \  }	\  } t        j                  |g|t         j
                  t         j                  t         j                  t         j                  t         j                  g      \  }
\  }t        j                  |t         j                        }t        j                  |t         j                        }t        j                  |t         j                        }t        j                  |t         j                        }| |||||g}d|	d|
d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       t        j!                  |      }|S )Nr  r  r  s   QuantizedAddr~  rF   r  )rI   rv   r2   r   rH   rt   ru   rw   rx   r+   r   rL   r   r3   r6   r  ry  r   r   r  r  r  r  r  r!   r"   _attr_T1_attr_T2r@   r?   r:   s                 rA   r  r       _nnGw	2'22A3gmmW^^]d]k]kmtm{m{  ~E  ~M  ~M  >P  Q.(DQ22A3gmmW^^]d]k]kmtm{m{  ~E  ~M  ~M  >P  Q.(DQ

 
 
8%

 
 
8%

 
 
8%

 
 
8%QueU3,(D(Iw?&_a#)s?'""$fg7%%g.'	.rT   QuantizedMatMul)outmin_outmax_outTV_QuantizedMatMul_T1TV_QuantizedMatMul_T2TV_QuantizedMatMul_ToutputTV_QuantizedMatMul_Tactivationmin_amax_amin_bmax_bTactivationc                    t         j                   xs t        j                         }|j                  }|j                  r=	 t	        j
                  |d|
| |||||d|d|d|d|	      }t        j                  |      }|S |t        j                   }t#        j$                  |d      }|d}t#        j&                  |d      }|d}t#        j&                  |d      }|	t        j(                  }	t#        j$                  |	d      }	t+        j,                  d| |||||||||	|
	      \  }}}}|dd }t#        j.                         rd
|j1                  d
      d|j1                  d      d|j1                  d      d|j3                  d      d|j3                  d      d|j1                  d      f}|j4                  }t#        j6                  d|||       t        j                  |      }|S # t        j                  $ r }t        j                  ||
       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||||||	|
|      S # t        j                  $ r Y w xY w)aC  Perform a quantized matrix multiplication of  `a` by the matrix `b`.

  The inputs must be two-dimensional matrices and the inner dimension of
  `a` (after being transposed if `transpose_a` is non-zero) must match the
  outer dimension of `b` (after being transposed if `transposed_b` is
  non-zero).

  Args:
    a: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
      Must be a two-dimensional tensor.
    b: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
      Must be a two-dimensional tensor.
    min_a: A `Tensor` of type `float32`.
      The float value that the lowest quantized `a` value represents.
    max_a: A `Tensor` of type `float32`.
      The float value that the highest quantized `a` value represents.
    min_b: A `Tensor` of type `float32`.
      The float value that the lowest quantized `b` value represents.
    max_b: A `Tensor` of type `float32`.
      The float value that the highest quantized `b` value represents.
    Toutput: An optional `tf.DType` from: `tf.qint8, tf.quint8, tf.qint32, tf.qint16, tf.quint16`. Defaults to `tf.qint32`.
    transpose_a: An optional `bool`. Defaults to `False`.
      If true, `a` is transposed before multiplication.
    transpose_b: An optional `bool`. Defaults to `False`.
      If true, `b` is transposed before multiplication.
    Tactivation: An optional `tf.DType` from: `tf.qint8, tf.quint8, tf.qint32, tf.qint16, tf.quint16`. Defaults to `tf.quint8`.
      The type of output produced by activation function
      following this operation.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (out, min_out, max_out).

    out: A `Tensor` of type `Toutput`.
    min_out: A `Tensor` of type `float32`.
    max_out: A `Tensor` of type `float32`.
  r  r  r  r  r  N)r  r  r  r  r!   r"   F)rL  rM  r  r  r  r  r  r  r  r  r!   r  r  )r%   r   r&   r'   r   r(   _QuantizedMatMulOutputry  r)   r*   r+   r,   r-    quantized_mat_mul_eager_fallbackr/   rI   rv   r2   r   r   ru   r0   r1   r3   r4   r   r5   r6   )rL  rM  r  r  r  r  r  r  r  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                       rA   quantized_mat_mulr     sl   L 
			0h..0$#\\
11q!UE5%7M;]K1g ',,W5gn _nnGw	2'K"";>+K"";>+..K"";>+'88Q!5U!&'2'2	?!QX
 QK'""$C&&t,dC4F4Ft4L++I6  /  /  /	1F
 ::L<:"((1'	.Q && -
##At,,## 
-
QueUG!{!$8 8 ## 
s0    ;G" "H)5HH)(H)-I IIzraw_ops.QuantizedMatMulc                    |t         j                  }t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|	t         j
                  }	t        j                  |	d      }	t        j                  | g|t         j                  t         j
                  t         j                  t         j                  t         j                  g      \  }\  } t        j                  |g|t         j                  t         j
                  t         j                  t         j                  t         j                  g      \  }\  }t        j                  |t         j                        }t        j                  |t         j                        }t        j                  |t         j                        }t        j                  |t         j                        }| |||||g}d|d|d|d|d|d|	f}t        j                  dd	||||

      }t        j                         rt        j                  d|||       t         j#                  |      }|S )Nr  Fr  r  r  r  r  s   QuantizedMatMulr~  rF   r  )rI   rv   r2   r   r   ru   rH   rt   rw   rx   r+   r   rL   r   r3   r6   r  ry  )rL  rM  r  r  r  r  r  r  r  r  r!   r"   r  r  r@   r?   r:   s                    rA   r  r  ]  s   _nnGw	2'K"";>+K"";>+..K"";>+22A3gmmW^^]d]k]kmtm{m{  ~E  ~M  ~M  >P  Q.(DQ22A3gmmW^^]d]k]kmtm{m{  ~E  ~M  ~M  >P  Q.(DQ

 
 
8%

 
 
8%

 
 
8%

 
 
8%QueU3,(D(Iw}k=+G&/<#)s?'""$<:"((1'	.rT   QuantizedMulTV_QuantizedMul_T1TV_QuantizedMul_T2TV_QuantizedMul_Toutputc                    t         j                   xs t        j                         }|j                  }	|	j                  r7	 t	        j
                  |d|| |||||d|      }
t        j                  |
      }
|
S |t        j                   }t#        j$                  |d      }t'        j(                  d| |||||||	      \  }}}}|dd }
t#        j*                         rYd|j-                  d      d|j-                  d      d|j-                  d      f}|j.                  }t#        j0                  d|||
       t        j                  |
      }
|
S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||||||	      S # t        j                  $ r Y Iw xY w)a7  Returns x * y element-wise, working on quantized buffers.

  Args:
    x: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
    y: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
    min_x: A `Tensor` of type `float32`.
      The float value that the lowest quantized `x` value represents.
    max_x: A `Tensor` of type `float32`.
      The float value that the highest quantized `x` value represents.
    min_y: A `Tensor` of type `float32`.
      The float value that the lowest quantized `y` value represents.
    max_y: A `Tensor` of type `float32`.
      The float value that the highest quantized `y` value represents.
    Toutput: An optional `tf.DType` from: `tf.qint8, tf.quint8, tf.qint32, tf.qint16, tf.quint16`. Defaults to `tf.qint32`.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (z, min_z, max_z).

    z: A `Tensor` of type `Toutput`.
    min_z: A `Tensor` of type `float32`.
    max_z: A `Tensor` of type `float32`.
  r  r  Nr  r  r  r  )r%   r   r&   r'   r   r(   _QuantizedMulOutputry  r)   r*   r+   r,   r-   quantized_mul_eager_fallbackr/   rI   rv   r2   r   r0   r1   r3   r4   r5   r6   r  s                    rA   quantized_mulr    r  r  zraw_ops.QuantizedMulc	           	         |t         j                  }t        j                  |d      }t        j                  | g|t         j
                  t         j                  t         j                  t         j                  t         j                  g      \  }	\  } t        j                  |g|t         j
                  t         j                  t         j                  t         j                  t         j                  g      \  }
\  }t        j                  |t         j                        }t        j                  |t         j                        }t        j                  |t         j                        }t        j                  |t         j                        }| |||||g}d|	d|
d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       t        j!                  |      }|S )Nr  r  r  s   QuantizedMulr~  rF   r  )rI   rv   r2   r   rH   rt   ru   rw   rx   r+   r   rL   r   r3   r6   r  ry  r  s                 rA   r  r    r  rT   TV_RaggedBincount_TidxTV_RaggedBincount_Tsplitsc                    t         j                   xs t        j                         }|j                  }|j                  r 	 t	        j
                  |d|| |||d|	      }|S |d}t        j                  |d      }t        j                   d| |||||      \  }
}
}}|dd }t        j"                         rYd|j%                  d      d|j%                  d      d|j'                  d      f}|j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }	t        j                  |	|       Y d}	~	nd}	~	wt        j                  $ r Y nw xY w	 t        | ||||||      S # t        j                  $ r Y &w xY w)	a  Counts the number of occurrences of each value in an integer array.

  Outputs a vector with length `size` and the same dtype as `weights`. If
  `weights` are empty, then index `i` stores the number of times the value `i` is
  counted in `arr`. If `weights` are non-empty, then index `i` stores the sum of
  the value in `weights` at each index where the corresponding value in `arr` is
  `i`.

  Values in `arr` outside of the range [0, size) are ignored.

  Args:
    splits: A `Tensor` of type `int64`. 1D int64 `Tensor`.
    values: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      2D int `Tensor`.
    size: A `Tensor`. Must have the same type as `values`.
      non-negative int scalar `Tensor`.
    weights: A `Tensor`. Must be one of the following types: `int32`, `int64`, `float32`, `float64`.
      is an int32, int64, float32, or float64 `Tensor` with the same
      shape as `input`, or a length-0 `Tensor`, in which case it acts as all weights
      equal to 1.
    binary_output: An optional `bool`. Defaults to `False`.
      bool; Whether the kernel should count the appearance or number of occurrences.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `weights`.
  RaggedBincountr  Nr  F)r  r[  rV  rW  r  r!   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   ragged_bincount_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   )r  r[  rV  rW  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                  rA   ragged_bincountr    s   8 
			0h..0$#\\11ffdG(g n M$$]OD-'88T")#%!QX QK'""$c((0#  %  13F ::L,9('	.7 && -
##At,,## 
+
&$}  ## 
s0    D E%E  EEE/ /FFzraw_ops.RaggedBincountc                 d   |d}t        j                  |d      }t        j                  ||g|t        j                  t        j
                  g      \  }}|\  }}t        j                  |g|t        j                  t        j
                  t        j                  t        j                  g      \  }	\  }t        j                  | t        j
                        } | |||g}
d|d|	d|f}t        j                  dd|
|||      }t        j                         rt        j                  d|
||       |\  }|S )	NFr  r   r$   s   RaggedBincountrE   rF   r  r2   r   rH   rI   rP   rQ   rL   rM   r+   r   r   r3   r6   )r  r[  rV  rW  r  r!   r"   r   r  rS   r@   r?   r:   s                rA   r  r    s)   M$$]OD-%<<fd^SSZS`S`biboboRrs*l.64 77	3X_XeXegngvgvx  yH  yH  IK  L':G!!&'--8&&$0,JWo}M&.,#)s?'""$,9('	.rT   TV_Range_Tidxlimitdeltac                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        j                  d| |||      \  }}}	}
|
dd }t        j                          r7d|	j#                  d      f}|	j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)ap  Creates a sequence of numbers.

  This operation creates a sequence of numbers that begins at `start` and
  extends by increments of `delta` up to but not including `limit`.

  For example:

  ```
  # 'start' is 3
  # 'limit' is 18
  # 'delta' is 3
  tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15]
  ```

  Args:
    start: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int8`, `int16`, `int32`, `int64`, `uint16`, `uint32`.
      0-D (scalar). First entry in the sequence.
    limit: A `Tensor`. Must have the same type as `start`.
      0-D (scalar). Upper limit of sequence, exclusive.
    delta: A `Tensor`. Must have the same type as `start`.
      0-D (scalar). Optional. Default is 1. Number that increments `start`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `start`.
  RangeNr    )r  r  r  r!   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _range_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   )r  r  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   _ranger  4  sD   6 
			0h..0$#\\11gtUE52gn (88uETC!QXQK'""$c((01F::Lvw0('	.' && -
##At,,## 
"
Dd4 4## 
r\  zraw_ops.Rangec                 >   t        j                  | ||g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g
t        j                        \  }}|\  } }}| ||g}d|f}t        j                  dd||||      }	t        j                         rt        j                  d|||	       |	\  }	|	S )Nr   s   RangerE   rF   r  )r2   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   ry   r{   r   r3   r6   )
r  r  r  r!   r"   r   r  r@   r?   r:   s
             rA   r  r  n  sh   %<<eUE=RTWZaZjZjlslxlx  {B  {J  {J  LS  L[  L[  ]d  ]i  ]i  kr  kx  kx  zA  zG  zG  IP  IV  IV  X_  Xf  Xf  ho  hv  hv  Zy  {B  {H  {H  I*l&5%&,J&XqV!$41'""$vw0('	.rT   	TV_Real_TTV_Real_Toutc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| d|      }|S |t        j                  }t        j                   |d      }t#        j$                  d| ||      \  }}}}	|	dd }t        j&                         rHd|j)                  d      d|j)                  d      f}
|j*                  }t        j,                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Returns the real part of a complex number.

  Given a tensor `input` of complex numbers, this operation returns a tensor of
  type `float` that is the real part of each element in `input`. All elements in
  `input` must be complex numbers of the form \\(a + bj\\), where *a* is the real
   part returned by this operation and *b* is the imaginary part.

  For example:

  ```
  # tensor 'input' is [-2.25 + 4.75j, 3.25 + 5.75j]
  tf.real(input) ==> [-2.25, 3.25]
  ```

  Args:
    input: A `Tensor`. Must be one of the following types: `complex64`, `complex128`.
    Tout: An optional `tf.DType` from: `tf.float32, tf.float64`. Defaults to `tf.float32`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `Tout`.
  Realr   Nr   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   real_eager_fallbackr/   rI   rL   r2   r   r0   r1   r3   r4   r5   r6   r   s               rA   r  r    r  r   zraw_ops.Realc                    |t         j                  }t        j                  |d      }t        j                  | g|t         j
                  t         j                  gt         j
                        \  }\  } | g}d|d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr   r$   s   RealrE   rF   r  r   r   s           rA   r  r    r  rT   TV_RealDiv_Trealdivc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)ag  Returns x / y element-wise for real types.

  If `x` and `y` are reals, this will return the floating-point division.

  *NOTE*: `Div` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `uint16`, `int16`, `int32`, `uint32`, `uint64`, `int64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  RealDivNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_real_divr   real_div_eager_fallbackr/   rj   r   r   r   real_divr   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   r  r    s'   & 
			0h..0$#\\11iq!%gn, '	
AttGn$n	
)::Q!$(Aq#x QK'""$3%%c*+F::L<2('	.W && -
##At,,## 
(a-g		&$
QTt% %## 
z" ""b$ad3g 
	..<<	<  Z	  
  
BqAD1
G i,,:::n	
r  zraw_ops.RealDivc                    t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   g      \  }}|\  } }| |g}d|f}t        j"                  dd||||      }t        j$                         rt        j&                  d|||       |\  }|S )Nr$   s   RealDivrE   rF   r  r  r   s	            rA   r  r     s   661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  Wc  Wc  el  es  es  u|  uB  uB  DK  DQ  DQ  SZ  Sa  Sa  cj  cq  cq  sz  s@  s@  BI  BS  BS  U\  Ug  Ug  Ej  k'9&1aQ,>&Z<v!$41'""$<2('	.rT   TV_Reciprocal_Tzmath.reciprocal
reciprocalc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)r  
ReciprocalNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_reciprocalr   reciprocal_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  &   s     
			0h..0$#\\11lD!%gn, )	
D
DGn$n	
)::&Aq#x QK'""$3%%c*+F::LlFG5('	.W && -
##At,,## 
*d*dg		&&
$D" "## 
z" ""D140g 
	..<<	<  Z	  
  
b$.
G i,,:::n	
r   zraw_ops.Reciprocalc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g
      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s
   ReciprocalrE   rF   r  r  rR   s          rA   r  r  n   s   111#sW=M=Mw||]d]l]lnun}n}  @G  @L  @L  NU  N[  N[  ]d  ]j  ]j  ls  ly  ly  {B  {L  {L  NU  N`  N`  =c  d-'4A,>&]Al#)s?'""$lFG5('	.rT   TV_ReciprocalGrad_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)r  ReciprocalGradNr    r  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   reciprocal_grad_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  s               rA   reciprocal_gradr  }   s>    
			0h..0$#\\11a-gn (88A"41!QXQK'""$3%%c*+F::L,9('	.' && -
##At,,## 
+
Rd& &## 
r   zraw_ops.ReciprocalGradc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   ReciprocalGradrE   rF   r  r   r  s	            rA   r  r     s    662wgFVFVX_XdXdfmfufuw~  xG  xG  IP  IZ  IZ  \c  \n  \n  Fq  r'9'1bR,>&.,#)s?'""$,9('	.rT   RequantizationRangern  ro  TV_RequantizationRange_Tinputc                    t         j                   xs t        j                         }|j                  }|j                  r2	 t	        j
                  |d|| ||      }t        j                  |      }|S t        j                   d| |||      \  }}}	}
|
dd }t#        j$                         r7d|	j'                  d      f}|	j(                  }t#        j*                  d|||       t        j                  |      }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Computes a range that covers the actual values present in a quantized tensor.

  Given a quantized tensor described by `(input, input_min, input_max)`, outputs a
  range that covers the actual values present in that tensor. This op is typically
  used to produce the `requested_output_min` and `requested_output_max` for
  `Requantize`.

  Args:
    input: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
    input_min: A `Tensor` of type `float32`.
      The float value that the minimum quantized input value represents.
    input_max: A `Tensor` of type `float32`.
      The float value that the maximum quantized input value represents.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (output_min, output_max).

    output_min: A `Tensor` of type `float32`.
    output_max: A `Tensor` of type `float32`.
  r  Nr    )r   rr  rs  r!   rw  )r%   r   r&   r'   r   r(   _RequantizationRangeOutputry  r)   r*   r+   r,   r-   #requantization_range_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   )r   rr  rs  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   requantization_ranger     sa   , 
			0h..0$#\\11#T5)YHg*009gn (88Ui)2?!QX QK'""$**845F::L|VW>&,,W5'	.) && -
##At,,## 
0
IDd< <## 
s0    0C7 7D>
D%%D>=D>E E('E(zraw_ops.RequantizationRangec           	      0   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  g      \  }\  } t        j                  |t        j                        }t        j                  |t        j                        }| ||g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       t        j                  |      }|S )Nrw  s   RequantizationRange   rF   r  )r2   rH   rI   rt   ru   rv   rw   rx   r+   r   rL   r   r3   r6   r  ry  )	r   rr  rs  r!   r"   r  r@   r?   r:   s	            rA   r  r     s   #::E7C'--Y`YgYgipiwiw  zA  zH  zH  JQ  JY  JY  J\  ],$$Y@)$$Y@)I.,l#&3Q|#)s?'""$|VW>&,,W5'	.rT   RequantizationRangePerChannel"TV_RequantizationRangePerChannel_Tc           
      .   t         j                   xs t        j                         }|j                  }|j                  r4	 t	        j
                  |d|| ||d|      }t        j                  |      }|S t        j                   |d      }t#        j$                  d| ||||      \  }	}	}
}|dd }t        j&                         rHd|
j)                  d      d|
j+                  d      f}|
j,                  }t        j.                  d|||       t        j                  |      }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y  w xY w)a  Computes requantization range per channel.

  Args:
    input: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
      The original input tensor.
    input_min: A `Tensor` of type `float32`.
      The minimum value of the input tensor
    input_max: A `Tensor` of type `float32`.
      The maximum value of the input tensor.
    clip_value_max: A `float`.
      The maximum value of the output that needs to be clipped.
      Example: set this to 6 for Relu6.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (output_min, output_max).

    output_min: A `Tensor` of type `float32`.
    output_max: A `Tensor` of type `float32`.
  r  r  N)r  r!   r"   )r   rr  rs  r  r!   r$   )r%   r   r&   r'   r   r(   $_RequantizationRangePerChannelOutputry  r)   r*   r+   r,   r-   /requantization_range_per_channel_eager_fallbackr/   r2   r   r0   r1   r3   r4   rn   r5   r6   )r   rr  rs  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                 rA    requantization_range_per_channelr  
!  s   * 
			0h..0$#\\	11-tUI#^5g 5::7Cgn &&~7GH.'88'u	3<8F.2	4!QX
 QK'""$3%%c*,<ll+,.F::L'vwH066w?'	.3 && -
##At,,## 
<
In  ## 
r|  z%raw_ops.RequantizationRangePerChannelc           	      ~   t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  gt        j                        \  }\  } t        j                  |t        j                        }t        j                  |t        j                        }| ||g}d|d|f}t        j                  dd||||      }	t        j                         rt        j                  d|||	       t        j!                  |	      }	|	S )Nr  r$   s   RequantizationRangePerChannelr  rF   r  )r2   r   rH   rI   rt   ru   rv   rw   rx   r+   r   rL   r   r3   r6   r  ry  )
r   rr  rs  r  r!   r"   rS   r@   r?   r:   s
             rA   r  r  F!  s.   &&~7GH.55ugsW]]T[TbTbdkdrdrt{  uC  uC  EL  ET  ET  EW  Y`  Yg  Yg  h'8E$$Y@)$$Y@)I.,*N;&=q$0C"&(' ""$'vwH066w?'	.rT   
RequantizeTV_Requantize_TinputTV_Requantize_out_typerequested_output_minrequested_output_maxc                 :   t         j                   xs t        j                         }|j                  }|j                  r6	 t	        j
                  |d|| ||||d|
      }	t        j                  |	      }	|	S t        j                   |d      }t#        j$                  d| ||||||      \  }}}}|dd }	t        j&                         rHd|j)                  d      d|j)                  d      f}|j*                  }t        j,                  d|||	       t        j                  |	      }	|	S # t        j                  $ r }
t        j                  |
|       Y d}
~
nd}
~
wt        j                  $ r Y nw xY w	 t        | |||||||      S # t        j                  $ r Y $w xY w)aA  Converts the quantized `input` tensor into a lower-precision `output`.

  Converts the quantized `input` tensor into a lower-precision `output`, using the
  output range specified with `requested_output_min` and `requested_output_max`.

  `[input_min, input_max]` are scalar floats that specify the range for the float
  interpretation of the `input` data. For example, if `input_min` is -1.0f and
  `input_max` is 1.0f, and we are dealing with `quint16` quantized data, then a 0
  value in the 16-bit data should be interpreted as -1.0f, and a 65535 means 1.0f.

  Args:
    input: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
    input_min: A `Tensor` of type `float32`.
      The float value that the minimum quantized input value represents.
    input_max: A `Tensor` of type `float32`.
      The float value that the maximum quantized input value represents.
    requested_output_min: A `Tensor` of type `float32`.
      The float value that the minimum quantized output value represents.
    requested_output_max: A `Tensor` of type `float32`.
      The float value that the maximum quantized output value represents.
    out_type: A `tf.DType` from: `tf.qint8, tf.quint8, tf.qint32, tf.qint16, tf.quint16`.
      The type of the output. Should be a lower bit depth than Tinput.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (output, output_min, output_max).

    output: A `Tensor` of type `out_type`.
    output_min: A `Tensor` of type `float32`.
    output_max: A `Tensor` of type `float32`.
  r  rt  Nrv  r   rr  rs  r  r  rt  r!   rw  )r%   r   r&   r'   r   r(   _RequantizeOutputry  r)   r*   r+   r,   r-   requantize_eager_fallbackr/   r2   r   r0   r1   r3   r4   r5   r6   r   rr  rs  r  r  rt  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                   rA   
requantizer  ^!  s   @ 
			0h..0$#\\	11lD%I2JJg "''0gn *5('88EY)+?+?'d	4!QX
 QK'""$**84j  ,.F::LlFG5##G,'	.3 && -
##At,,## 
&
I';
$H H ## 
s0    4D% %E,8EE,+E,0F FFzraw_ops.Requantizec           	         t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } t        j                  |t        j                        }t        j                  |t        j                        }t        j                  |t        j                        }t        j                  |t        j                        }| ||||g}	d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d|	|
|       t        j!                  |      }|S )Nrt  rw  s
   Requantizer~  rF   r  )r2   r   rH   rI   rt   ru   rv   rw   rx   r+   r   rL   r   r3   r6   r  ry  )r   rr  rs  r  r  rt  r!   r"   r  r@   r?   r:   s               rA   r  r  !  sL   *5(#::E7C'--Y`YgYgipiwiw  zA  zH  zH  JQ  JY  JY  J\  ],$$Y@)$$Y@)//0DgooV//0DgooVI/CEYZ,lJ9&]Al#)s?'""$lFG5##G,'	.rT   RequantizePerChannelTV_RequantizePerChannel_T TV_RequantizePerChannel_out_typec                 ^   t         j                   xs t        j                         }|j                  }|j                  r6	 t	        j
                  |d|| ||||d|
      }	t        j                  |	      }	|	S |t        j                   }t#        j$                  |d      }t'        j(                  d| ||||||      \  }}}}|dd }	t#        j*                         rHd|j-                  d      d|j-                  d      f}|j.                  }t#        j0                  d|||	       t        j                  |	      }	|	S # t        j                  $ r }
t        j                  |
|       Y d}
~
nd}
~
wt        j                  $ r Y nw xY w	 t        | |||||||      S # t        j                  $ r Y 6w xY w)a1  Requantizes input with min and max values known per channel.

  Args:
    input: A `Tensor`. Must be one of the following types: `qint8`, `quint8`, `qint32`, `qint16`, `quint16`.
      The original input tensor.
    input_min: A `Tensor` of type `float32`.
      The minimum value of the input tensor
    input_max: A `Tensor` of type `float32`.
      The maximum value of the input tensor.
    requested_output_min: A `Tensor` of type `float32`.
      The minimum value of the output tensor requested.
    requested_output_max: A `Tensor` of type `float32`.
      The maximum value of the output tensor requested.
    out_type: An optional `tf.DType` from: `tf.qint8, tf.quint8, tf.qint32, tf.qint16, tf.quint16`. Defaults to `tf.quint8`.
      The quantized type of output tensor that needs to be converted.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (output, output_min, output_max).

    output: A `Tensor` of type `out_type`.
    output_min: A `Tensor` of type `float32`.
    output_max: A `Tensor` of type `float32`.
  r  rt  Nrv  r  r$   )r%   r   r&   r'   r   r(   _RequantizePerChannelOutputry  r)   r*   r+   r,   r-   %requantize_per_channel_eager_fallbackr/   rI   ru   r2   r   r0   r1   r3   r4   r5   r6   r  s                   rA   requantize_per_channelr  !  s   2 
			0h..0$#\\	11$dE9i2JJg ,11':gn ~~H*5('88ey*35I5I)1>!QX QK'""$3%%c*J  ,.F::Lfg?'--g6'	.9 && -
##At,,## 
2
I';
$H H ## 
s0    4D7 7E>
E%%E>=E>F F,+F,zraw_ops.RequantizePerChannelc           	      6   |t         j                  }t        j                  |d      }t        j                  | g|t         j
                  t         j                  t         j                  t         j                  t         j                  gt         j                        \  }\  } t        j                  |t         j                        }t        j                  |t         j                        }t        j                  |t         j                        }t        j                  |t         j                        }| ||||g}	d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d|	|
|       t        j!                  |      }|S )Nrt  r$   s   RequantizePerChannelr~  rF   r  )rI   ru   r2   r   rH   rt   rv   rw   rx   r+   r   rL   r   r3   r6   r  ry  )r   rr  rs  r  r  rt  r!   r"   rS   r@   r?   r:   s               rA   r  r  "  sm   ~~H*5(55ugsW]]T[TbTbdkdrdrt{  uC  uC  EL  ET  ET  EW  Y`  Yg  Yg  h'8E$$Y@)$$Y@)//0DgooV//0DgooVI/CEYZ,*h/&4a#)s?'""$fg?'--g6'	.rT   	TV_Rint_Tz	math.rintrintc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns element-wise integer closest to x.

  If the result is midway between two representable values,
  the even representable is chosen.
  For example:

  ```
  rint(-1.5) ==> -2.0
  rint(0.5000001) ==> 1.0
  rint([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0]) ==> [-2., -2., -0., 0., 2., 2., 2.]
  ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  RintNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_rintr   rint_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  "  s   0 
			0h..0$#\\11fdAgn, #	
D
DGn$n	
)::!$ Aq#x QK'""$3%%c*+F::Lfg/('	.W && -
##At,,## 
$d*dg		& 
$D" "## 
z" """dQT*g 
	..<<	<  Z	  
  
D14(
G i,,:::n	
r   zraw_ops.Rintc                 \   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   RintrE   rF   r	  r   rR   s          rA   r  r  g"  r  rT   
TV_Round_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)a  Rounds the values of a tensor to the nearest integer, element-wise.

  Rounds half to even.  Also known as bankers rounding. If you want to round
  according to the current system rounding mode use std::cint.

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int8`, `int16`, `int32`, `int64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  RoundNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   round_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   roundr  v"  s7    
			0h..0$#\\11gtQ gn (8814!!QXQK'""$3%%c*+F::Lvw0('	.' && -
##At,,## 
!
$D" "## 
rC   zraw_ops.Roundc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g
      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   RoundrE   rF   r  r  rR   s          rA   r  r  "  s   111#sW=M=Mw||]d]l]lnun}n}  @G  @L  @L  NU  N[  N[  ]d  ]j  ]j  ls  ly  ly  {B  {L  {L  NU  N`  N`  =c  d-'4A,>&XqV!$41'""$vw0('	.rT   
TV_Rsqrt_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)aC  Computes reciprocal of square root of x element-wise.

  I.e., \\(y = 1 / \sqrt{x}\\).

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  RsqrtNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   rsqrt_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   rsqrtr  "  s7    
			0h..0$#\\11gtQ gn (8814!!QXQK'""$3%%c*+F::Lvw0('	.' && -
##At,,## 
!
$D" "## 
rC   zraw_ops.Rsqrtc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   RsqrtrE   rF   r  r   rR   s          rA   r  r  "  r   rT   TV_RsqrtGrad_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Computes the gradient for the rsqrt of `x` wrt its input.

  Specifically, `grad = dy * -0.5 * y^3`, where `y = rsqrt(x)`, and `dy`
  is the corresponding input gradient.

  Args:
    y: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    dy: A `Tensor`. Must have the same type as `y`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `y`.
  	RsqrtGradNr    r  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   rsqrt_grad_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  s               rA   
rsqrt_gradr  "  s=    
			0h..0$#\\11k4B(gn (88qRd,!QXQK'""$3%%c*+F::L\674('	.' && -
##At,,## 
&
Rd& &## 
r   zraw_ops.RsqrtGradc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s	   RsqrtGradrE   rF   r  r   r  s	            rA   r  r  #  s    662wgFVFVX_XdXdfmfufuw~  xG  xG  IP  IZ  IZ  \c  \n  \n  Fq  r'9'1bR,>&\1\#)s?'""$\674('	.rT   TV_SegmentMax_TTV_SegmentMax_Tindiceszmath.segment_maxsegment_maxdatasegment_idsc           
      p   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         rHd|j7                  d      d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes the maximum along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Computes a tensor such that
  \\(output_i = \max_j(data_j)\\) where `max` is over `j` such
  that `segment_ids[j] == i`.

  If the max is empty for a given segment ID `i`, `output[i] = 0`.

  Caution: On CPU, values in `segment_ids` are always validated to be sorted,
  and an error is thrown for indices that are not increasing. On GPU, this
  does not throw an error for unsorted indices. On GPU, out-of-order indices
  result in safe but unspecified behavior, which may include treating
  out-of-order indices as the same as a smaller following index.

  <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
  <img style="width:100%" src="https://www.tensorflow.org/images/SegmentMax.png" alt>
  </div>

  For example:

  >>> c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]])
  >>> tf.math.segment_max(c, tf.constant([0, 0, 1])).numpy()
  array([[4, 3, 3, 4],
         [5, 6, 7, 8]], dtype=int32)

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor whose size is equal to the size of `data`'s
      first dimension.  Values should be sorted and can be repeated.

      Caution: The values are always validated to be sorted on CPU, never validated
      on GPU.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  
SegmentMaxNr    r   r"  r#  r!   r$   Tindices)r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_segment_maxr   segment_max_eager_fallbackr/   rj   r   r   r   r!  r   r   r   r0   r1   r2   r3   r4   r5   r6   r"  r#  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s               rA   r!  r!  )#  @   ^ 
			0h..0$#\\11lD$5gn. *	{D"D*Gn$n	
)::4[tEAq#x QK'""$3%%c*J  ,.F::LlFG5('	.[ && -
##At,,## 
+d
$d,g		&'
$D2 2## 
z" ""Tt'+-g 
	..<<	<" Z	  
  
r4T{N
G i,,:::n	
P    C: 5G :ED((E EE- E- -GAGGAH53H5zraw_ops.SegmentMaxc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }| |g}d|d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   r'  s
   SegmentMaxrE   rF   r%  r  	r"  r#  r!   r"   rS   _attr_Tindicesr@   r?   r:   s	            rA   r)  r)  #     44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  an  an  pw  p@  p@  BI  BP  BP  RY  R^  R^  `g  `n  `n  pw  p~  p~  CA  B'7D#+#B#BK=RUX_XeXegngtgtWw#x ..;$,*n5&]Al#)s?'""$lFG5('	.rT   TV_SegmentMaxV2_TTV_SegmentMaxV2_TindicesTV_SegmentMaxV2_Tnumsegmentsnum_segmentsc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        j                  d| |||      \  }}}	}
|
dd }t        j                          rYd|	j#                  d      d|	j#                  d      d|	j#                  d      f}|	j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)aL
  Computes the maximum along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Computes a tensor such that
  \\(output_i = \max_j(data_j)\\) where `max` is over `j` such
  that `segment_ids[j] == i`.

  If the maximum is empty for a given segment ID `i`, it outputs the smallest
  possible value for the specific numeric type,
  `output[i] = numeric_limits<T>::lowest()`.

  Note: That this op is currently only supported with jit_compile=True.

  Caution: On CPU, values in `segment_ids` are always validated to be sorted,
  and an error is thrown for indices that are not increasing. On GPU, this
  does not throw an error for unsorted indices. On GPU, out-of-order indices
  result in safe but unspecified behavior, which may include treating
  out-of-order indices as the same as a smaller following index.

  The only difference with SegmentMax is the additional input  `num_segments`.
  This helps in evaluating the output shape in compile time.
  `num_segments` should be consistent with segment_ids.
  e.g. Max(segment_ids) should be equal to `num_segments` - 1 for a 1-d segment_ids
  With inconsistent num_segments, the op still runs. only difference is,
  the output takes the size of num_segments irrespective of size of segment_ids and data.
  for num_segments less than expected output size, the last elements are ignored
  for num_segments more than the expected output size, last elements are assigned 
  smallest possible value for the specific numeric type.

  For example:

  >>> @tf.function(jit_compile=True)
  ... def test(c):
  ...   return tf.raw_ops.SegmentMaxV2(data=c, segment_ids=tf.constant([0, 0, 1]), num_segments=2)
  >>> c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]])
  >>> test(c).numpy()
  array([[4, 3, 3, 4],
         [5, 6, 7, 8]], dtype=int32)

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor whose size is equal to the size of `data`'s
      first dimension.  Values should be sorted and can be repeated.
      The values must be less than `num_segments`.

      Caution: The values are always validated to be sorted on CPU, never validated
      on GPU.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  SegmentMaxV2Nr    r"  r#  r4  r!   r$   r'  Tnumsegments)r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   segment_max_v2_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r"  r#  r4  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   segment_max_v2r;  #  n   t 
			0h..0$#\\11ndD+|Egn (88T{%1>!QX QK'""$3%%c*J  ,n  02F ::Lfg7('	.- && -
##At,,## 
*
\$@ @## 
0    C3 3D:D!!D:9D:>E E%$E%zraw_ops.SegmentMaxV2c                 b   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }t        j                  |g|t        j
                  t        j                  gt        j
                        \  }\  }| ||g}d|d|d|f}	t        j                  dd||	||      }
t        j                          rt        j"                  d||	|
       |
\  }
|
S )Nr$   r'  r8  s   SegmentMaxV2rE   rF   r6  r  r"  r#  r4  r!   r"   rS   r/  _attr_Tnumsegmentsr@   r?   r:   s              rA   r9  r9   $     44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  an  an  pw  p@  p@  BI  BP  BP  RY  R^  R^  `g  `n  `n  pw  p~  p~  CA  B'7D#+#B#BK=RUX_XeXegngtgtWw#x ..;(0(G(GX[^e^k^kmtmzmz]}  @G  @M  @M  )N%o|\2,*nn&_a#)s?'""$fg7('	.rT   TV_SegmentMean_TTV_SegmentMean_Tindiceszmath.segment_meansegment_meanc           
      p   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         rHd|j7                  d      d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)ai  Computes the mean along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Computes a tensor such that
  \\(output_i = \frac{\sum_j data_j}{N}\\) where `mean` is
  over `j` such that `segment_ids[j] == i` and `N` is the total number of
  values summed.

  If the mean is empty for a given segment ID `i`, `output[i] = 0`.

  Caution: On CPU, values in `segment_ids` are always validated to be sorted,
  and an error is thrown for indices that are not increasing. On GPU, this
  does not throw an error for unsorted indices. On GPU, out-of-order indices
  result in safe but unspecified behavior, which may include treating
  out-of-order indices as a smaller following index when computing the numerator
  of the mean.

  <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
  <img style="width:100%" src="https://www.tensorflow.org/images/SegmentMean.png" alt>
  </div>

  For example:

  >>> c = tf.constant([[1.0,2,3,4], [4, 3, 2, 1], [5,6,7,8]])
  >>> tf.math.segment_mean(c, tf.constant([0, 0, 1])).numpy()
  array([[2.5, 2.5, 2.5, 2.5],
         [5., 6., 7., 8.]], dtype=float32)

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor whose size is equal to the size of `data`'s
      first dimension.  Values should be sorted and can be repeated.

      Caution: The values are always validated to be sorted on CPU, never validated
      on GPU.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  SegmentMeanNr    r   r&  r$   r'  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_segment_meanr   segment_mean_eager_fallbackr/   rj   r   r   r   rD  r   r   r   r0   r1   r2   r3   r4   r5   r6   r*  s               rA   rD  rD  $  sC   b 
			0h..0$#\\11mT46gn. +	{D"D*Gn$n

)::DkFAq#x QK'""$3%%c*J  ,.F::L|VW6('	.] && -
##At,,## 
,d
$d,g		&(
$D2 2## 
z" """d+(,.g 
	..<<	<" Z	  
  
Dd&*,
G i,,:::n	
r,  zraw_ops.SegmentMeanc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }| |g}d|d|f}t        j,                  dd||||      }t        j.                         rt        j0                  d|||       |\  }|S )Nr$   r'  s   SegmentMeanrE   rF   rF  r  r.  s	            rA   rH  rH  $      44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  ar  ar  t{  tA  tA  CJ  CP  CP  RY  R`  R`  bi  bp  bp  ry  rB  rB  DK  DR  DR  T[  Tc  Tc  el  es  es  u|  uG  uG  IP  IU  IU  W^  We  We  gn  gu  gu  Cx  y'7D#+#B#BK=RUX_XeXegngtgtWw#x ..;$,*n5&^Q|#)s?'""$|VW6('	.rT   TV_SegmentMin_TTV_SegmentMin_Tindiceszmath.segment_minsegment_minc           
      p   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         rHd|j7                  d      d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes the minimum along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Computes a tensor such that
  \\(output_i = \min_j(data_j)\\) where `min` is over `j` such
  that `segment_ids[j] == i`.

  If the min is empty for a given segment ID `i`, `output[i] = 0`.

  Caution: On CPU, values in `segment_ids` are always validated to be sorted,
  and an error is thrown for indices that are not increasing. On GPU, this
  does not throw an error for unsorted indices. On GPU, out-of-order indices
  result in safe but unspecified behavior, which may include treating
  out-of-order indices as the same as a smaller following index.

  <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
  <img style="width:100%" src="https://www.tensorflow.org/images/SegmentMin.png" alt>
  </div>

  For example:

  >>> c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]])
  >>> tf.math.segment_min(c, tf.constant([0, 0, 1])).numpy()
  array([[1, 2, 2, 1],
         [5, 6, 7, 8]], dtype=int32)

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor whose size is equal to the size of `data`'s
      first dimension.  Values should be sorted and can be repeated.

      Caution: The values are always validated to be sorted on CPU, never validated
      on GPU.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  
SegmentMinNr    r   r&  r$   r'  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_segment_minr   segment_min_eager_fallbackr/   rj   r   r   r   rM  r   r   r   r0   r1   r2   r3   r4   r5   r6   r*  s               rA   rM  rM  $  r+  r,  zraw_ops.SegmentMinc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }| |g}d|d|f}t        j                  dd||||      }t        j                          rt        j"                  d|||       |\  }|S )Nr$   r'  s
   SegmentMinrE   rF   rO  r  r.  s	            rA   rQ  rQ  $  r0  rT   TV_SegmentMinV2_TTV_SegmentMinV2_TindicesTV_SegmentMinV2_Tnumsegmentsc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        j                  d| |||      \  }}}	}
|
dd }t        j                          rYd|	j#                  d      d|	j#                  d      d|	j#                  d      f}|	j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)aK
  Computes the minimum along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Computes a tensor such that
  \\(output_i = \min_j(data_j)\\) where `min` is over `j` such
  that `segment_ids[j] == i`.

  If the minimum is empty for a given segment ID `i`, it outputs the largest
  possible value for the specific numeric type,
  `output[i] = numeric_limits<T>::max()`.

  Note: That this op is currently only supported with jit_compile=True.

  Caution: On CPU, values in `segment_ids` are always validated to be sorted,
  and an error is thrown for indices that are not increasing. On GPU, this
  does not throw an error for unsorted indices. On GPU, out-of-order indices
  result in safe but unspecified behavior, which may include treating
  out-of-order indices as the same as a smaller following index.

  The only difference with SegmentMin is the additional input  `num_segments`.
  This helps in evaluating the output shape in compile time.
  `num_segments` should be consistent with segment_ids.
  e.g. Max(segment_ids) should be equal to `num_segments` - 1 for a 1-d segment_ids
  With inconsistent num_segments, the op still runs. only difference is,
  the output takes the size of num_segments irrespective of size of segment_ids and data.
  for num_segments less than expected output size, the last elements are ignored
  for num_segments more than the expected output size, last elements are assigned 
  the largest possible value for the specific numeric type.

  For example:

  >>> @tf.function(jit_compile=True)
  ... def test(c):
  ...   return tf.raw_ops.SegmentMinV2(data=c, segment_ids=tf.constant([0, 0, 1]), num_segments=2)
  >>> c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]])
  >>> test(c).numpy()
  array([[1, 2, 2, 1],
         [5, 6, 7, 8]], dtype=int32)

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor whose size is equal to the size of `data`'s
      first dimension.  Values should be sorted and can be repeated.
      The values must be less than `num_segments`.

      Caution: The values are always validated to be sorted on CPU, never validated
      on GPU.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  SegmentMinV2Nr    r7  r$   r'  r8  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   segment_min_v2_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r:  s                rA   segment_min_v2rY  %  r<  r=  zraw_ops.SegmentMinV2c                 b   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }t        j                  |g|t        j
                  t        j                  gt        j
                        \  }\  }| ||g}d|d|d|f}	t        j                  dd||	||      }
t        j                          rt        j"                  d||	|
       |
\  }
|
S )Nr$   r'  r8  s   SegmentMinV2rE   rF   rW  r  r?  s              rA   rX  rX  g%  rA  rT   TV_SegmentProd_TTV_SegmentProd_Tindiceszmath.segment_prodsegment_prodc           
      p   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         rHd|j7                  d      d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes the product along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Computes a tensor such that
  \\(output_i = \prod_j data_j\\) where the product is over `j` such
  that `segment_ids[j] == i`.

  If the product is empty for a given segment ID `i`, `output[i] = 1`.

  Caution: On CPU, values in `segment_ids` are always validated to be sorted,
  and an error is thrown for indices that are not increasing. On GPU, this
  does not throw an error for unsorted indices. On GPU, out-of-order indices
  result in safe but unspecified behavior, which may include treating
  out-of-order indices as the same as a smaller following index.

  <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
  <img style="width:100%" src="https://www.tensorflow.org/images/SegmentProd.png" alt>
  </div>

  For example:

  >>> c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]])
  >>> tf.math.segment_prod(c, tf.constant([0, 0, 1])).numpy()
  array([[4, 6, 6, 4],
         [5, 6, 7, 8]], dtype=int32)

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor whose size is equal to the size of `data`'s
      first dimension.  Values should be sorted and can be repeated.

      Caution: The values are always validated to be sorted on CPU, never validated
      on GPU.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  SegmentProdNr    r   r&  r$   r'  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_segment_prodr   segment_prod_eager_fallbackr/   rj   r   r   r   r]  r   r   r   r0   r1   r2   r3   r4   r5   r6   r*  s               rA   r]  r]  z%  sC   ^ 
			0h..0$#\\11mT46gn. +	{D"D*Gn$n

)::DkFAq#x QK'""$3%%c*J  ,.F::L|VW6('	.] && -
##At,,## 
,d
$d,g		&(
$D2 2## 
z" """d+(,.g 
	..<<	<" Z	  
  
Dd&*,
G i,,:::n	
r,  zraw_ops.SegmentProdc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }| |g}d|d|f}t        j,                  dd||||      }t        j.                         rt        j0                  d|||       |\  }|S )Nr$   r'  s   SegmentProdrE   rF   r_  r  r.  s	            rA   ra  ra  %  rJ  rT   TV_SegmentProdV2_TTV_SegmentProdV2_TindicesTV_SegmentProdV2_Tnumsegmentsc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        j                  d| |||      \  }}}	}
|
dd }t        j                          rYd|	j#                  d      d|	j#                  d      d|	j#                  d      f}|	j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Computes the product along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Computes a tensor such that
  \\(output_i = \prod_j data_j\\) where the product is over `j` such
  that `segment_ids[j] == i`.

  If the product is empty for a given segment ID `i`, `output[i] = 1`.

  Note: That this op is currently only supported with jit_compile=True.

  The only difference with SegmentProd is the additional input  `num_segments`.
  This helps in evaluating the output shape in compile time.
  `num_segments` should be consistent with segment_ids.
  e.g. Max(segment_ids) - 1 should be equal to `num_segments` for a 1-d segment_ids
  With inconsistent num_segments, the op still runs. only difference is, 
  the output takes the size of num_segments irrespective of size of segment_ids and data.
  for num_segments less than expected output size, the last elements are ignored
  for num_segments more than the expected output size, last elements are assigned 1.

  For example:

  >>> @tf.function(jit_compile=True)
  ... def test(c):
  ...   return tf.raw_ops.SegmentProdV2(data=c, segment_ids=tf.constant([0, 0, 1]), num_segments=2)
  >>> c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]])
  >>> test(c).numpy()
  array([[4, 6, 6, 4],
         [5, 6, 7, 8]], dtype=int32)

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor whose size is equal to the size of `data`'s
      first dimension.  Values should be sorted and can be repeated.
      The values must be less than `num_segments`.

      Caution: The values are always validated to be sorted on CPU, never validated
      on GPU.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  SegmentProdV2Nr    r7  r$   r'  r8  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   segment_prod_v2_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r:  s                rA   segment_prod_v2ri  %  sn   b 
			0h..0$#\\11otT;Fgn (88d&2?!QX QK'""$3%%c*J  ,n  02F ::Lvw8('	.- && -
##At,,## 
+
\$@ @## 
r=  zraw_ops.SegmentProdV2c                 4   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }t        j                  |g|t        j
                  t        j                  gt        j
                        \  }\  }| ||g}d|d|d|f}	t        j,                  dd||	||      }
t        j.                         rt        j0                  d||	|
       |
\  }
|
S )Nr$   r'  r8  s   SegmentProdV2rE   rF   rg  r  r?  s              rA   rh  rh  I&  st   44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  ar  ar  t{  tA  tA  CJ  CP  CP  RY  R`  R`  bi  bp  bp  ry  rB  rB  DK  DR  DR  T[  Tc  Tc  el  es  es  u|  uG  uG  IP  IU  IU  W^  We  We  gn  gu  gu  Cx  y'7D#+#B#BK=RUX_XeXegngtgtWw#x ..;(0(G(GX[^e^k^kmtmzmz]}  @G  @M  @M  )N%o|\2,*nn&-q#)s?'""$vw8('	.rT   TV_SegmentSum_TTV_SegmentSum_Tindiceszmath.segment_sumsegment_sumc           
      p   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         rHd|j7                  d      d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes the sum along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Computes a tensor such that
  \\(output_i = \sum_j data_j\\) where sum is over `j` such
  that `segment_ids[j] == i`.

  If the sum is empty for a given segment ID `i`, `output[i] = 0`.

  Caution: On CPU, values in `segment_ids` are always validated to be sorted,
  and an error is thrown for indices that are not increasing. On GPU, this
  does not throw an error for unsorted indices. On GPU, out-of-order indices
  result in safe but unspecified behavior, which may include treating
  out-of-order indices as the same as a smaller following index.

  <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
  <img style="width:100%" src="https://www.tensorflow.org/images/SegmentSum.png" alt>
  </div>

  For example:

  >>> c = tf.constant([[1,2,3,4], [4, 3, 2, 1], [5,6,7,8]])
  >>> tf.math.segment_sum(c, tf.constant([0, 0, 1])).numpy()
  array([[5, 5, 5, 5],
         [5, 6, 7, 8]], dtype=int32)

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor whose size is equal to the size of `data`'s
      first dimension.  Values should be sorted and can be repeated.

      Caution: The values are always validated to be sorted on CPU, never validated
      on GPU.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  
SegmentSumNr    r   r&  r$   r'  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_segment_sumr   segment_sum_eager_fallbackr/   rj   r   r   r   rm  r   r   r   r0   r1   r2   r3   r4   r5   r6   r*  s               rA   rm  rm  \&  r+  r,  zraw_ops.SegmentSumc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }| |g}d|d|f}t        j,                  dd||||      }t        j.                         rt        j0                  d|||       |\  }|S )Nr$   r'  s
   SegmentSumrE   rF   ro  r  r.  s	            rA   rq  rq  &  s    44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  ar  ar  t{  tA  tA  CJ  CP  CP  RY  R`  R`  bi  bp  bp  ry  rB  rB  DK  DR  DR  T[  Tc  Tc  el  es  es  u|  uG  uG  IP  IU  IU  W^  We  We  gn  gu  gu  Cx  y'7D#+#B#BK=RUX_XeXegngtgtWw#x ..;$,*n5&]Al#)s?'""$lFG5('	.rT   TV_SegmentSumV2_TTV_SegmentSumV2_TindicesTV_SegmentSumV2_Tnumsegmentsc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        j                  d| |||      \  }}}	}
|
dd }t        j                          rYd|	j#                  d      d|	j#                  d      d|	j#                  d      f}|	j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Computes the sum along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Computes a tensor such that
  \\(output_i = \sum_j data_j\\) where sum is over `j` such
  that `segment_ids[j] == i`.

  If the sum is empty for a given segment ID `i`, `output[i] = 0`.

  Note that this op is currently only supported with jit_compile=True.
  </div>

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor whose size is equal to the size of `data`'s
      first dimension.  Values should be sorted and can be repeated.
      The values must be less than `num_segments`.

      Caution: The values are always validated to be sorted on CPU, never validated
      on GPU.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  SegmentSumV2Nr    r7  r$   r'  r8  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   segment_sum_v2_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r:  s                rA   segment_sum_v2ry  &  sm   > 
			0h..0$#\\11ndD+|Egn (88T{%1>!QX QK'""$3%%c*J  ,n  02F ::Lfg7('	.- && -
##At,,## 
*
\$@ @## 
r=  zraw_ops.SegmentSumV2c                 4   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }t        j                  |g|t        j
                  t        j                  gt        j
                        \  }\  }| ||g}d|d|d|f}	t        j,                  dd||	||      }
t        j.                         rt        j0                  d||	|
       |
\  }
|
S )Nr$   r'  r8  s   SegmentSumV2rE   rF   rw  r  r?  s              rA   rx  rx  '  ss   44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  ar  ar  t{  tA  tA  CJ  CP  CP  RY  R`  R`  bi  bp  bp  ry  rB  rB  DK  DR  DR  T[  Tc  Tc  el  es  es  u|  uG  uG  IP  IU  IU  W^  We  We  gn  gu  gu  Cx  y'7D#+#B#BK=RUX_XeXegngtgtWw#x ..;(0(G(GX[^e^k^kmtmzmz]}  @G  @M  @M  )N%o|\2,*nn&_a#)s?'""$fg7('	.rT   ) TV_Select_Tr   r   rV   rW   rh  r   r   ri  rj  rk  rl  rm  r   r   r   rn  r   r   rX   rY   rZ   r[   r\   ro  r   r]   r^   rp  r_   r`   r   	conditionc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        j                  d| |||      \  }}}	}
|
dd }t        j                          r7d|	j#                  d      f}|	j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y w xY w)a  Selects elements from `x` or `y`, depending on `condition`.

  The `x`, and `y` tensors must all have the same shape, and the
  output will also have that shape.

  The `condition` tensor must be a scalar if `x` and `y` are scalars.
  If `x` and `y` are vectors or higher rank, then `condition` must be either a
  scalar, a vector with size matching the first dimension of `x`, or must have
  the same shape as `x`.

  The `condition` tensor acts as a mask that chooses, based on the value at each
  element, whether the corresponding element / row in the output should be
  taken from `x` (if true) or `y` (if false).

  If `condition` is a vector and `x` and `y` are higher rank matrices, then
  it chooses which row (outer dimension) to copy from `x` and `y`.
  If `condition` has the same shape as `x` and `y`, then it chooses which
  element to copy from `x` and `y`.

  For example:

  ```python
  # 'condition' tensor is [[True,  False]
  #                        [False, True]]
  # 't' is [[1, 2],
  #         [3, 4]]
  # 'e' is [[5, 6],
  #         [7, 8]]
  select(condition, t, e)  # => [[1, 6], [7, 4]]


  # 'condition' tensor is [True, False]
  # 't' is [[1, 2],
  #         [3, 4]]
  # 'e' is [[5, 6],
  #         [7, 8]]
  select(condition, t, e) ==> [[1, 2],
                               [7, 8]]

  ```

  Args:
    condition: A `Tensor` of type `bool`.
    x:  A `Tensor` which may have the same shape as `condition`.
      If `condition` is rank 1, `x` may have higher rank,
      but its first dimension must match the size of `condition`.
    y:  A `Tensor` with the same type and shape as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `t`.
  SelectNr    r|  r  r;   r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   select_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   )r|  r   r   r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                rA   selectr  *'  sD   j 
			0h..0$#\\11hiA/gn (88Iad<!QXQK'""$3%%c*+F::L,1('	.' && -
##At,,## 
"
Q$0 0## 
r\  zraw_ops.Selectc                 8   t        j                  ||g|g       \  }}|\  }}t        j                  | t        j
                        } | ||g}d|f}t        j                  dd||||      }	t        j                         rt        j                  d|||	       |	\  }	|	S )Nr$   s   SelectrE   rF   r~  	r2   rH   r+   r   rI   r   r   r3   r6   )
r|  r   r   r!   r"   rS   r   r@   r?   r:   s
             rA   r  r  ~'  s    661vsBG'9&1a$$Y=)Q",>&Y,f!$41'""$,1('	.rT   ) TV_SelectV2_Tr   r   rV   rW   rh  r   r   ri  rj  rk  rl  rm  r   r   r   rn  r   r   rX   rY   rZ   r[   r\   ro  r   r]   r^   rp  r_   r`   r   r;   c                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)zTODO: add doc.

  Args:
    condition: A `Tensor` of type `bool`.
    t: A `Tensor`.
    e: A `Tensor`. Must have the same type as `t`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `t`.
  SelectV2Nr    r  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   select_v2_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   )r|  r  r;   r!   r8   r9   r:   r<   r=   r>   r?   r@   s               rA   	select_v2r  '  sC    
			0h..0$#\\11j$	1a1gn (88i1>!QXQK'""$3%%c*+F::LL&'3('	.' && -
##At,,## 
%
Q$0 0## 
r\  zraw_ops.SelectV2c                 8   t        j                  ||g|g       \  }}|\  }}t        j                  | t        j
                        } | ||g}d|f}t        j                  dd||||      }	t        j                         rt        j                  d|||	       |	\  }	|	S )Nr$   s   SelectV2rE   rF   r  r  )
r|  r  r;   r!   r"   rS   r   r@   r?   r:   s
             rA   r  r  '  s    661vsBG'9&1a$$Y=)Q",>&[!L#)s?'""$L&'3('	.rT   TV_Sigmoid_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)a<  Computes sigmoid of `x` element-wise.

  Specifically, `y = 1 / (1 + exp(-x))`.

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  SigmoidNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   sigmoid_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   sigmoidr  '  s7    
			0h..0$#\\11iq"gn (88QT#!QXQK'""$3%%c*+F::L<2('	.' && -
##At,,## 
#
$D" "## 
rC   zraw_ops.Sigmoidc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   SigmoidrE   rF   r  r   rR   s          rA   r  r  '  s    111#sW=M=Mw||]d]l]lnun}n}  @G  @Q  @Q  SZ  Se  Se  =h  i-'4A,>&Z<v!$41'""$<2('	.rT   TV_SigmoidGrad_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Computes the gradient of the sigmoid of `x` wrt its input.

  Specifically, `grad = dy * y * (1 - y)`, where `y = sigmoid(x)`, and
  `dy` is the corresponding input gradient.

  Args:
    y: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    dy: A `Tensor`. Must have the same type as `y`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `y`.
  SigmoidGradNr    r  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   sigmoid_grad_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  s               rA   sigmoid_gradr  (  s=    
			0h..0$#\\11mT1b*gn (88r.!QXQK'""$3%%c*+F::L|VW6('	.' && -
##At,,## 
(
Rd& &## 
r   zraw_ops.SigmoidGradc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   SigmoidGradrE   rF   r  r   r  s	            rA   r  r  2(  s    662wgFVFVX_XdXdfmfufuw~  xG  xG  IP  IZ  IZ  \c  \n  \n  Fq  r'9'1bR,>&^Q|#)s?'""$|VW6('	.rT   	TV_Sign_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)ad  Returns an element-wise indication of the sign of a number.

  `y = sign(x) = -1` if `x < 0`; 0 if `x == 0`; 1 if `x > 0`.

  For complex numbers, `y = sign(x) = x / |x|` if `x != 0`, otherwise `y = 0`.

  Example usage:
  >>> tf.math.sign([0., 2., -3.])
  <tf.Tensor: shape=(3,), dtype=float32, numpy=array([ 0.,  1., -1.], dtype=float32)>

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int8`, `int16`, `int32`, `int64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  SignNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   sign_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   signr  B(  s7   $ 
			0h..0$#\\11fdAgn (88!$ !QXQK'""$3%%c*+F::Lfg/('	.' && -
##At,,## 
 
$D" "## 
rC   zraw_ops.Signc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g
      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   SignrE   rF   r  r  rR   s          rA   r  r  s(  s   111#sW=M=Mw||]d]l]lnun}n}  @G  @L  @L  NU  N[  N[  ]d  ]j  ]j  ls  ly  ly  {B  {L  {L  NU  N`  N`  =c  d-'4A,>&WaF!$41'""$fg/('	.rT   TV_Sin_Tzmath.sinsinc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)ar  Computes sine of x element-wise.

    Given an input tensor, this function computes sine of every
    element in the tensor. Input range is `(-inf, inf)` and
    output range is `[-1,1]`.

    ```python
    x = tf.constant([-float("inf"), -9, -0.5, 1, 1.2, 200, 10, float("inf")])
    tf.math.sin(x) ==> [nan -0.4121185 -0.47942555 0.84147096 0.9320391 -0.87329733 -0.54402107 nan]
    ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  SinNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_sinr   sin_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  (  s   , 
			0h..0$#\\11eT1gn, "	
D
DGn$n	
)::Aq#x QK'""$3%%c*+F::L|VW.('	.W && -
##At,,## 
#d*dg		&
$D" "## 
z" ""TAD)g 
	..<<	<  Z	  
  
r4!$'
G i,,:::n	
r   zraw_ops.Sinc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   SinrE   rF   r  r   rR   s          rA   r  r  (  r  rT   	TV_Sinh_Tz	math.sinhsinhc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes hyperbolic sine of x element-wise.

    Given an input tensor, this function computes hyperbolic sine of every
    element in the tensor. Input range is `[-inf,inf]` and output range
    is `[-inf,inf]`.

    ```python
    x = tf.constant([-float("inf"), -9, -0.5, 1, 1.2, 2, 10, float("inf")])
    tf.math.sinh(x) ==> [-inf -4.0515420e+03 -5.2109528e-01 1.1752012e+00 1.5094614e+00 3.6268604e+00 1.1013232e+04 inf]
    ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  SinhNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_sinhr   sinh_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   r  r  (  r  r   zraw_ops.Sinhc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   SinhrE   rF   r  r   rR   s          rA   r  r  -)  r   rT   TV_SobolSample_dtypedimnum_resultsskipc           
         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||d|      }|S |t        j                  }t        j                   |d      }t#        j$                  d| ||||      \  }	}	}
}|dd }t        j&                         r7d|
j)                  d      f}|
j*                  }t        j,                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y w xY w)a<  Generates points from the Sobol sequence.

  Creates a Sobol sequence with `num_results` samples. Each sample has dimension
  `dim`. Skips the first `skip` samples.

  Args:
    dim: A `Tensor` of type `int32`.
      Positive scalar `Tensor` representing each sample's dimension.
    num_results: A `Tensor` of type `int32`.
      Positive scalar `Tensor` of dtype int32. The number of Sobol points to return
      in the output.
    skip: A `Tensor` of type `int32`.
      Positive scalar `Tensor` of dtype int32. The number of initial points of the
      Sobol sequence to skip.
    dtype: An optional `tf.DType` from: `tf.float32, tf.float64`. Defaults to `tf.float32`.
      The type of the sample. One of: `float32` or `float64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `dtype`.
  SobolSampler^  Nra  )r  r  r  r^  r!   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   sobol_sample_eager_fallbackr/   rI   rL   r2   r   r0   r1   r3   r4   r5   r6   )r  r  r  r^  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                 rA   sobol_sampler  <)  sq   , 
			0h..0$#\\11mT3T7EKgn ]OOE


UG
,%'883Kd"/!QX QK'""$s))'23F::L|VW6('	./ && -
##At,,## 
(
{DDdD D## 
s0    C< <ED**EEE E/.E/zraw_ops.SobolSamplec                    |t         j                  }t        j                  |d      }t	        j
                  | t         j                        } t	        j
                  |t         j                        }t	        j
                  |t         j                        }| ||g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr^  s   SobolSamplerE   rF   r  )
rI   rL   r2   r   r+   r   rP   r   r3   r6   )	r  r  r  r^  r!   r"   r@   r?   r:   s	            rA   r  r  u)  s    
]OOE


UG
,%sGMM2#&&{GMMB+			gmm	4${D),U&^Q|#)s?'""$|VW6('	.rT   TV_SparseBincount_TidxTV_SparseBincount_Tindicesdense_shapec                    t         j                   xs t        j                         }|j                  }|j                  r!	 t	        j
                  |d|| ||||d|
      }	|	S |d}t        j                  |d      }t        j                   d| ||||||      \  }}}}|dd }	t        j"                         rYd|j%                  d      d|j%                  d      d|j'                  d      f}|j(                  }t        j*                  d|||	       |	\  }	|	S # t        j                  $ r }
t        j                  |
|       Y d}
~
nd}
~
wt        j                  $ r Y nw xY w	 t        | |||||||      S # t        j                  $ r Y (w xY w)	a%  Counts the number of occurrences of each value in an integer array.

  Outputs a vector with length `size` and the same dtype as `weights`. If
  `weights` are empty, then index `i` stores the number of times the value `i` is
  counted in `arr`. If `weights` are non-empty, then index `i` stores the sum of
  the value in `weights` at each index where the corresponding value in `arr` is
  `i`.

  Values in `arr` outside of the range [0, size) are ignored.

  Args:
    indices: A `Tensor` of type `int64`. 2D int64 `Tensor`.
    values: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      1D int `Tensor`.
    dense_shape: A `Tensor` of type `int64`. 1D int64 `Tensor`.
    size: A `Tensor`. Must have the same type as `values`.
      non-negative int scalar `Tensor`.
    weights: A `Tensor`. Must be one of the following types: `int32`, `int64`, `float32`, `float64`.
      is an int32, int64, float32, or float64 `Tensor` with the same
      shape as `input`, or a length-0 `Tensor`, in which case it acts as all weights
      equal to 1.
    binary_output: An optional `bool`. Defaults to `False`.
      bool; Whether the kernel should count the appearance or number of occurrences.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `weights`.
  SparseBincountr  Nr  F)r  r[  r  rV  rW  r  r!   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   sparse_bincount_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   )r  r[  r  rV  rW  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                   rA   sparse_bincountr  )  s   : 
			0h..0$#\\11gv{D-1g n M$$]OD-'88'&&1g(5DB!QX QK'""$c((0#  %  13F ::L,9('	.7 && -
##At,,## 
+
6;g%Dd< < ## 
s0    D E'EEEE2 2F	F	zraw_ops.SparseBincountc                    |d}t        j                  |d      }t        j                  ||g|t        j                  t        j
                  g      \  }}	|	\  }}t        j                  |g|t        j                  t        j
                  t        j                  t        j                  g      \  }
\  }t        j                  | t        j
                        } t        j                  |t        j
                        }| ||||g}d|d|
d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )	NFr  r   r$   s   SparseBincountrE   rF   r  r  )r  r[  r  rV  rW  r  r!   r"   r   r  rS   r@   r?   r:   s                 rA   r  r  )  sA   M$$]OD-%<<fd^SSZS`S`biboboRrs*l.64 77	3X_XeXegngvgvx  yH  yH  IK  L':G""7GMM:'&&{GMMB+6;g>,JWo}M&.,#)s?'""$,9('	.rT   TV_SparseMatMul_TaTV_SparseMatMul_Tba_is_sparseb_is_sparsec                     t         j                   xs t        j                         }|j                  }|j                  r$	 t	        j
                  |d|| |d|d|d|d|      }	|	S |d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }t        j                   d| ||||||	      \  }}}}|dd }	t        j"                         rd|j%                  d      d|j%                  d      d|j%                  d      d|j%                  d      d
|j'                  d
      d|j'                  d      f}|j(                  }t        j*                  d|||	       |	\  }	|	S # t        j                  $ r }
t        j                  |
|       Y d}
~
nd}
~
wt        j                  $ r Y nw xY w	 t        | |||||||      S # t        j                  $ r Y w xY w)a[  Multiply matrix "a" by matrix "b".

  The inputs must be two-dimensional matrices and the inner dimension of "a" must
  match the outer dimension of "b". Both "a" and "b" must be `Tensor`s not
  `SparseTensor`s.  This op is optimized for the case where at least one of "a" or
  "b" is sparse, in the sense that they have a large proportion of zero values.
  The breakeven for using this versus a dense matrix multiply on one platform was
  30% zero values in the sparse matrix.

  The gradient computation of this operation will only take advantage of sparsity
  in the input gradient when that gradient comes from a Relu.

  Args:
    a: A `Tensor`. Must be one of the following types: `float32`, `bfloat16`.
    b: A `Tensor`. Must be one of the following types: `float32`, `bfloat16`.
    transpose_a: An optional `bool`. Defaults to `False`.
    transpose_b: An optional `bool`. Defaults to `False`.
    a_is_sparse: An optional `bool`. Defaults to `False`.
    b_is_sparse: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor` of type `float32`.
  SparseMatMulr  r  r  r  N)r  r  r  r  r!   r"   F)rL  rM  r  r  r  r  r!   rB  rC  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   sparse_mat_mul_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   )rL  rM  r  r  r  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                   rA   sparse_mat_mulr  )  s2   2 
			0h..0$#\\	11ndAq-{M;g n K"";>+K"";>+K"";>+K"";>+'88!qk$/[$/d<!QX QK'""$S//>  /  /  /  &c.@.@.F	HF
 ::Lfg7('	.O && -
##At,,## 
*
QK[!{  ## 
s0    "F G+GGG#G6 6HHzraw_ops.SparseMatMulc                    |d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }|d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  gt        j                        \  }\  } t        j                  |g|t        j                  t        j
                  gt        j                        \  }	\  }| |g}
d|d|d|d|d|d|	f}t        j                  dd	|
|||
      }t        j                         rt        j                  d|
||       |\  }|S )NFr  r  r  r  rB  rC  s   SparseMatMulrE   rF   r  )	r2   r   rH   rI   rL   rJ   r   r3   r6   )rL  rM  r  r  r  r  r!   r"   rG  rH  r@   r?   r:   s                rA   r  r  4*  sW   K"";>+K"";>+K"";>+K"";>+22A3goowO_O_=bdkdsdst.(DQ22A3goowO_O_=bdkdsdst.(DQQ,;{m[$& _a#)s?'""$fg7('	.rT   TV_SparseSegmentMean_TTV_SparseSegmentMean_Tidx TV_SparseSegmentMean_Tsegmentidssparse_gradientc           
      .   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||d|      }|S |d}t        j                  |d      }t        j                   d| ||||      \  }	}	}
}|dd }t        j"                         rjd|
j%                  d      d|
j%                  d      d	|
j%                  d	      d|
j'                  d      f}|
j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y 5w xY w)
a,  Computes the mean along sparse segments of a tensor.

  See `tf.sparse.segment_sum` for usage examples.

  Like `SegmentMean`, but `segment_ids` can have rank less than `data`'s first
  dimension, selecting a subset of dimension 0, specified by `indices`.

  Args:
    data: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Has same rank as `segment_ids`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Values should be sorted and can be repeated.
    sparse_gradient: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  SparseSegmentMeanr  Nr  r!   r"   Fr"  r  r#  r  r!   r$   r   Tsegmentids)r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   "sparse_segment_mean_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   r"  r  r#  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                 rA   sparse_segment_meanr  T*  s   ( 
			0h..0$#\\11!4w?,g n O&&8IJ/'88$)4-<4I!QX QK'""$3%%c*F  (-  /1B  !235F ::L\67<('	.9 && -
##At,,## 
/
o  ## 
0    D! !E(4EE('E(,E= =FFzraw_ops.SparseSegmentMeanc                    |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| ||g}	d|d|d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d	|	|
|       |\  }|S )
NFr  r$   r   r  s   SparseSegmentMeanrE   rF   r  r  r"  r  r#  r  r!   r"   rS   r   _attr_Tsegmentidsr@   r?   r:   s               rA   r  r  *  sc   O&&8IJ/44dVS7CSCSU\UaUacjcrcrt{  uD  uD  CG  H'7D#::G9cGMM[b[h[hKkmtmzmz{*jw&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^k-,&*m&9&11\#)s?'""$\67<('	.rT   TV_SparseSegmentMeanGrad_TTV_SparseSegmentMeanGrad_Tidx$TV_SparseSegmentMeanGrad_Tsegmentidsgradoutput_dim0c           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |||      }|S t        j                  d| ||||      \  }	}	}
}|dd }t        j                          rYd|
j#                  d      d|
j#                  d      d|
j#                  d      f}|
j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y 
w xY w)a0  Computes gradients for SparseSegmentMean.

  Returns tensor "output" with same shape as grad, except for dimension 0 whose
  value is output_dim0.

  Args:
    grad: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
      gradient propagated to the SparseSegmentMean op.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      indices passed to the corresponding SparseSegmentMean op.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      segment_ids passed to the corresponding SparseSegmentMean op.
    output_dim0: A `Tensor` of type `int32`.
      dimension 0 of "data" passed to SparseSegmentMean op.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `grad`.
  SparseSegmentMeanGradNr    r  r  r#  r  r!   r$   r   r  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   'sparse_segment_mean_grad_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  r  r#  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                 rA   sparse_segment_mean_gradr  *  sy   ( 
			0h..0$#\\11%tT7Kg n (88dG-8-8tE!QX QK'""$3%%c*F  (-  /1F ::Lvw@('	./ && -
##At,,## 
4
k$H H## 
0    C5 5D<D##D<;D< E E('E(zraw_ops.SparseSegmentMeanGradc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |t        j                        }| |||g}	d|d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d|	|
|       |\  }|S )Nr$   r   r  s   SparseSegmentMeanGradrE   rF   r  r2   rH   rI   rJ   rK   rL   rM   rP   rQ   r+   r   r   r3   r6   r  r  r#  r  r!   r"   rS   r   r  r@   r?   r:   s               rA   r  r  *  sY   44dVS7CSCSU\UaUacjcrcrt{  uD  uD  CG  H'7D#::G9cGMM[b[h[hKkmtmzmz{*jw&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^k&&{GMMB+k:,&*m&5q#)s?'""$vw@('	.rT   SparseSegmentMeanGradV2rm  sorted_unique_indicesTV_SparseSegmentMeanGradV2_TTV_SparseSegmentMeanGradV2_Tidx&TV_SparseSegmentMeanGradV2_Tsegmentidsdense_output_dim0c           	      "   t         j                   xs t        j                         }|j                  }|j                  r3	 t	        j
                  |d|| |||      }t        j                  |      }|S t        j                   d| ||||      \  }	}	}
}|dd }t#        j$                         rYd|
j'                  d      d|
j'                  d      d|
j'                  d      f}|
j(                  }t#        j*                  d|||       t        j                  |      }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y w xY w)aH  Computes gradients for SparseSegmentMean.

  Returns tensor "output" with same shape as grad, except for dimension 0 whose
  value is the number of unique indexes in "indices". Also returns vector
  "sorted_unique_indices" containing the corresponding indexes from "indices".

  Args:
    grad: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
      gradient propagated to the SparseSegmentMean op.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      indices passed to the corresponding SparseSegmentMean op.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      segment_ids passed to the corresponding SparseSegmentMean op.
    dense_output_dim0: A `Tensor` of type `int32`.
      dimension 0 of "data" passed to SparseSegmentMean op.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (output, sorted_unique_indices).

    output: A `Tensor`. Has the same type as `grad`.
    sorted_unique_indices: A `Tensor`. Has the same type as `indices`.
  r  Nr    r  r  r#  r  r!   r$   r   r  )r%   r   r&   r'   r   r(   _SparseSegmentMeanGradV2Outputry  r)   r*   r+   r,   r-   *sparse_segment_mean_grad_v2_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  r  r#  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                 rA   sparse_segment_mean_grad_v2r  *  s   0 
			0h..0$#\\	11'tWkg /44W=gn (88!g/:5F(,	.!QX
 QK'""$3%%c*F  (-  /1F ::L!<B*009'	.1 && -
##At,,## 
7
&7dN N## 
0    1D E".E		E"!E"&E7 7FFzraw_ops.SparseSegmentMeanGradV2c                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |t        j                        }| |||g}	d|d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d|	|
|       t        j                  |      }|S )Nr$   r   r  s   SparseSegmentMeanGradV2r  rF   r  )r2   rH   rI   rJ   rK   rL   rM   rP   rQ   r+   r   r   r3   r6   r  ry  r  r  r#  r  r!   r"   rS   r   r  r@   r?   r:   s               rA   r  r  7+  sh   44dVS7CSCSU\UaUacjcrcrt{  uD  uD  CG  H'7D#::G9cGMM[b[h[hKkmtmzmz{*jw&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^k,,->N.?@,&*m&7$0C"&(' ""$!<B*009'	.rT   %TV_SparseSegmentMeanWithNumSegments_T(TV_SparseSegmentMeanWithNumSegments_Tidx0TV_SparseSegmentMeanWithNumSegments_Tnumsegments/TV_SparseSegmentMeanWithNumSegments_Tsegmentidsc                 V   t         j                   xs t        j                         }|j                  }|j                  r 	 t	        j
                  |d|| |||d|	      }|S |d}t        j                  |d      }t        j                   d| |||||      \  }
}
}}|dd }t        j"                         r{d|j%                  d      d|j%                  d      d	|j%                  d	      d
|j%                  d
      d|j'                  d      f
}|j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }	t        j                  |	|       Y d}	~	nd}	~	wt        j                  $ r Y nw xY w	 t        | ||||||      S # t        j                  $ r Y Hw xY w)a  Computes the mean along sparse segments of a tensor.

  Like `SparseSegmentMean`, but allows missing ids in `segment_ids`. If an id is
  missing, the `output` tensor at that position will be zeroed.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Args:
    data: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Has same rank as `segment_ids`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Values should be sorted and can be repeated.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      Should equal the number of distinct segment IDs.
    sparse_gradient: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
   SparseSegmentMeanWithNumSegmentsr  Nr  Fr"  r  r#  r4  r  r!   r$   r   r8  r  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   4sparse_segment_mean_with_num_segments_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   r"  r  r#  r4  r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s                  rA   %sparse_segment_mean_with_num_segmentsr  N+  s   0 
			0h..0$#\\110$g\#4oGg n O&&8IJ/'88*w8C9E<K157!QX QK'""$3%%c*F  (.  0-  /1B  !23	5F
 ::L*L&'K('	.? && -
##At,,## 
A
l)$@ @ ## 
0    D4 4E;E""E;:E;?F F('F(z(raw_ops.SparseSegmentMeanWithNumSegmentsc           
      b   |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }	\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }
\  }| |||g}d|d|d|	d|
d|f
}t        j                  dd||||	      }t        j                         rt        j                  d
|||       |\  }|S )NFr  r$   r   r8  r  s    SparseSegmentMeanWithNumSegmentsrE   rF   r  r  r"  r  r#  r4  r  r!   r"   rS   r   r@  r  r@   r?   r:   s                 rA   r  r  +  s   O&&8IJ/44dVS7CSCSU\UaUacjcrcrt{  uD  uD  CG  H'7D#::G9cGMM[b[h[hKkmtmzmz{*jw(0(G(GX[^e^k^kmtmzmz]}  @G  @M  @M  )N%o|&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^kl;,&*nm%68I& @!$0C"&(' ""$*L&'K('	.rT   TV_SparseSegmentSqrtN_TTV_SparseSegmentSqrtN_Tidx!TV_SparseSegmentSqrtN_Tsegmentidsc           
      .   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||d|      }|S |d}t        j                  |d      }t        j                   d| ||||      \  }	}	}
}|dd }t        j"                         rjd|
j%                  d      d|
j%                  d      d	|
j%                  d	      d|
j'                  d      f}|
j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y 5w xY w)
a  Computes the sum along sparse segments of a tensor divided by the sqrt of N.

  N is the size of the segment being reduced.

  See `tf.sparse.segment_sum` for usage examples.

  Args:
    data: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Has same rank as `segment_ids`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Values should be sorted and can be repeated.
    sparse_gradient: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  SparseSegmentSqrtNr  Nr  Fr  r$   r   r  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   $sparse_segment_sqrt_n_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   r  s                 rA   sparse_segment_sqrt_nr  +  s   & 
			0h..0$#\\11"D$?,g n O&&8IJ/'884*5.=DJ!QX QK'""$3%%c*F  (-  /1B  !235F ::LlFG=('	.9 && -
##At,,## 
1
o  ## 
r  zraw_ops.SparseSegmentSqrtNc                    |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| ||g}	d|d|d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d	|	|
|       |\  }|S )
NFr  r$   r   r  s   SparseSegmentSqrtNrE   rF   r  r  r  s               rA   r  r  +  sc   O&&8IJ/44dVS7CSCSU\UaUacjcrcrt{  uD  uD  CG  H'7D#::G9cGMM[b[h[hKkmtmzmz{*jw&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^k-,&*m&9&2Al#)s?'""$lFG=('	.rT   TV_SparseSegmentSqrtNGrad_TTV_SparseSegmentSqrtNGrad_Tidx%TV_SparseSegmentSqrtNGrad_Tsegmentidsc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |||      }|S t        j                  d| ||||      \  }	}	}
}|dd }t        j                          rYd|
j#                  d      d|
j#                  d      d|
j#                  d      f}|
j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y 
w xY w)a5  Computes gradients for SparseSegmentSqrtN.

  Returns tensor "output" with same shape as grad, except for dimension 0 whose
  value is output_dim0.

  Args:
    grad: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
      gradient propagated to the SparseSegmentSqrtN op.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      indices passed to the corresponding SparseSegmentSqrtN op.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      segment_ids passed to the corresponding SparseSegmentSqrtN op.
    output_dim0: A `Tensor` of type `int32`.
      dimension 0 of "data" passed to SparseSegmentSqrtN op.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `grad`.
  SparseSegmentSqrtNGradNr    r  r$   r   r  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   )sparse_segment_sqrt_n_grad_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  s                 rA   sparse_segment_sqrt_n_gradr  +  sy   ( 
			0h..0$#\\11&dG[g n (88 tW.9.9F!QX QK'""$3%%c*F  (-  /1F ::L ,A('	./ && -
##At,,## 
6
k$H H## 
r  zraw_ops.SparseSegmentSqrtNGradc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |t        j                        }| |||g}	d|d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d|	|
|       |\  }|S )Nr$   r   r  s   SparseSegmentSqrtNGradrE   rF   r  r  r  s               rA   r  r  7,  s\   44dVS7CSCSU\UaUacjcrcrt{  uD  uD  CG  H'7D#::G9cGMM[b[h[hKkmtmzmz{*jw&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^k&&{GMMB+k:,&*m&6$0C"&(' ""$ ,A('	.rT   SparseSegmentSqrtNGradV2TV_SparseSegmentSqrtNGradV2_T TV_SparseSegmentSqrtNGradV2_Tidx'TV_SparseSegmentSqrtNGradV2_Tsegmentidsc           	      "   t         j                   xs t        j                         }|j                  }|j                  r3	 t	        j
                  |d|| |||      }t        j                  |      }|S t        j                   d| ||||      \  }	}	}
}|dd }t#        j$                         rYd|
j'                  d      d|
j'                  d      d|
j'                  d      f}|
j(                  }t#        j*                  d|||       t        j                  |      }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y w xY w)aM  Computes gradients for SparseSegmentSqrtN.

  Returns tensor "output" with same shape as grad, except for dimension 0 whose
  value is the number of unique indexes in "indices". Also returns vector
  "sorted_unique_indices" containing the corresponding indexes from "indices".

  Args:
    grad: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
      gradient propagated to the SparseSegmentSqrtN op.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      indices passed to the corresponding SparseSegmentSqrtN op.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      segment_ids passed to the corresponding SparseSegmentSqrtN op.
    dense_output_dim0: A `Tensor` of type `int32`.
      dimension 0 of "data" passed to SparseSegmentSqrtN op.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (output, sorted_unique_indices).

    output: A `Tensor`. Has the same type as `grad`.
    sorted_unique_indices: A `Tensor`. Has the same type as `indices`.
  r  Nr    r  r$   r   r  )r%   r   r&   r'   r   r(   _SparseSegmentSqrtNGradV2Outputry  r)   r*   r+   r,   r-   ,sparse_segment_sqrt_n_grad_v2_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  s                 rA   sparse_segment_sqrt_n_grad_v2r  Q,  s   0 
			0h..0$#\\	11($g{g 055g>gn (88"w0;6G)-	/!QX
 QK'""$3%%c*F  (-  /1F ::L"L&'C+11':'	.1 && -
##At,,## 
9
&7dN N## 
r  z raw_ops.SparseSegmentSqrtNGradV2c                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |t        j                        }| |||g}	d|d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d|	|
|       t        j                  |      }|S )Nr$   r   r  s   SparseSegmentSqrtNGradV2r  rF   r  )r2   rH   rI   rJ   rK   rL   rM   rP   rQ   r+   r   r   r3   r6   r  ry  r  s               rA   r  r  ,  sh   44dVS7CSCSU\UaUacjcrcrt{  uD  uD  CG  H'7D#::G9cGMM[b[h[hKkmtmzmz{*jw&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^k,,->N.?@,&*m&8!$0C"&(' ""$"L&'C+11':'	.rT   &TV_SparseSegmentSqrtNWithNumSegments_T)TV_SparseSegmentSqrtNWithNumSegments_Tidx1TV_SparseSegmentSqrtNWithNumSegments_Tnumsegments0TV_SparseSegmentSqrtNWithNumSegments_Tsegmentidsc                 V   t         j                   xs t        j                         }|j                  }|j                  r 	 t	        j
                  |d|| |||d|	      }|S |d}t        j                  |d      }t        j                   d| |||||      \  }
}
}}|dd }t        j"                         r{d|j%                  d      d|j%                  d      d	|j%                  d	      d
|j%                  d
      d|j'                  d      f
}|j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }	t        j                  |	|       Y d}	~	nd}	~	wt        j                  $ r Y nw xY w	 t        | ||||||      S # t        j                  $ r Y Hw xY w)aM  Computes the sum along sparse segments of a tensor divided by the sqrt of N.

  N is the size of the segment being reduced.

  Like `SparseSegmentSqrtN`, but allows missing ids in `segment_ids`. If an id is
  missing, the `output` tensor at that position will be zeroed.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Args:
    data: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Has same rank as `segment_ids`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Values should be sorted and can be repeated.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      Should equal the number of distinct segment IDs.
    sparse_gradient: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  !SparseSegmentSqrtNWithNumSegmentsr  Nr  Fr  r$   r   r8  r  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   6sparse_segment_sqrt_n_with_num_segments_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   r  s                  rA   'sparse_segment_sqrt_n_with_num_segmentsr   ,  s   4 
			0h..0$#\\1114w\#4oGg n O&&8IJ/'88+$9D:F=L268!QX QK'""$3%%c*F  (.  0-  /1B  !23	5F
 ::L+\67L('	.? && -
##At,,## 
C
l)$@ @ ## 
r  z)raw_ops.SparseSegmentSqrtNWithNumSegmentsc           
      b   |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }	\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }
\  }| |||g}d|d|d|	d|
d|f
}t        j                  dd||||	      }t        j                         rt        j                  d
|||       |\  }|S )NFr  r$   r   r8  r  s!   SparseSegmentSqrtNWithNumSegmentsrE   rF   r  r  r  s                 rA   r  r  ,  s   O&&8IJ/44dVS7CSCSU\UaUacjcrcrt{  uD  uD  CG  H'7D#::G9cGMM[b[h[hKkmtmzmz{*jw(0(G(GX[^e^k^kmtmzmz]}  @G  @M  @M  )N%o|&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^kl;,&*nm%68I& A1$0C"&(' ""$+\67L('	.rT   TV_SparseSegmentSum_TTV_SparseSegmentSum_TidxTV_SparseSegmentSum_Tsegmentidsc           
      .   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||d|      }|S |d}t        j                  |d      }t        j                   d| ||||      \  }	}	}
}|dd }t        j"                         rjd|
j%                  d      d|
j%                  d      d	|
j%                  d	      d|
j'                  d      f}|
j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y 5w xY w)
a  Computes the sum along sparse segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Like `SegmentSum`, but `segment_ids` can have rank less than `data`'s first
  dimension, selecting a subset of dimension 0, specified by `indices`.

  For example:

  ```python
  c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]])

  # Select two rows, one segment.
  tf.sparse_segment_sum(c, tf.constant([0, 1]), tf.constant([0, 0]))
  # => [[0 0 0 0]]

  # Select two rows, two segment.
  tf.sparse_segment_sum(c, tf.constant([0, 1]), tf.constant([0, 1]))
  # => [[ 1  2  3  4]
  #     [-1 -2 -3 -4]]

  # Select all rows, two segments.
  tf.sparse_segment_sum(c, tf.constant([0, 1, 2]), tf.constant([0, 0, 1]))
  # => [[0 0 0 0]
  #     [5 6 7 8]]

  # Which is equivalent to:
  tf.segment_sum(c, tf.constant([0, 0, 1]))
  ```

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Has same rank as `segment_ids`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Values should be sorted and can be repeated.
    sparse_gradient: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  SparseSegmentSumr  Nr  Fr  r$   r   r  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   !sparse_segment_sum_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   r  s                 rA   sparse_segment_sumr(  -  s   Z 
			0h..0$#\\11 $g{?,g n O&&8IJ/'88w(3,;$H!QX QK'""$3%%c*F  (-  /1B  !235F ::LL&';('	.9 && -
##At,,## 
.
o  ## 
r  zraw_ops.SparseSegmentSumc                    |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| ||g}	d|d|d|d|f}
t        j                   dd|	|
||      }t        j"                         rt        j$                  d	|	|
|       |\  }|S )
NFr  r$   r   r  s   SparseSegmentSumrE   rF   r&  r2   r   rH   rI   rL   rM   rP   rr   rO   rN   rQ   rJ   ry   rK   r{   r|   r   r3   r6   r  s               rA   r'  r'  \-  s	   O&&8IJ/44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  an  an  pw  p@  p@  BI  BP  BP  RY  R^  R^  `g  `n  `n  pw  p~  p~  CA  B'7D#::G9cGMM[b[h[hKkmtmzmz{*jw&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^k-,&*m&9&0!L#)s?'""$L&';('	.rT   TV_SparseSegmentSumGrad_TTV_SparseSegmentSumGrad_Tidx#TV_SparseSegmentSumGrad_Tsegmentidsc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |||      }|S t        j                  d| ||||      \  }	}	}
}|dd }t        j                          rYd|
j#                  d      d|
j#                  d      d|
j#                  d      f}|
j$                  }t        j&                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y 
w xY w)a+  Computes gradients for SparseSegmentSum.

  Returns tensor "output" with same shape as grad, except for dimension 0 whose
  value is output_dim0.

  Args:
    grad: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
      gradient propagated to the SparseSegmentSum op.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      indices passed to the corresponding SparseSegmentSum op.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      segment_ids passed to the corresponding SparseSegmentSum op.
    output_dim0: A `Tensor` of type `int32`.
      dimension 0 of "data" passed to SparseSegmentSum op.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `grad`.
  SparseSegmentSumGradNr    r  r$   r   r  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   &sparse_segment_sum_grad_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  s                 rA   sparse_segment_sum_gradr1  s-  sx   ( 
			0h..0$#\\11$dD';g n (88T7,7,7dD!QX QK'""$3%%c*F  (-  /1F ::Lfg?('	./ && -
##At,,## 
3
k$H H## 
r  zraw_ops.SparseSegmentSumGradc                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |t        j                        }| |||g}	d|d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d|	|
|       |\  }|S )Nr$   r   r  s   SparseSegmentSumGradrE   rF   r/  r  r  s               rA   r0  r0  -  sX   44dVS7CSCSU\UaUacjcrcrt{  uD  uD  CG  H'7D#::G9cGMM[b[h[hKkmtmzmz{*jw&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^k&&{GMMB+k:,&*m&4a#)s?'""$fg?('	.rT   SparseSegmentSumGradV2TV_SparseSegmentSumGradV2_TTV_SparseSegmentSumGradV2_Tidx%TV_SparseSegmentSumGradV2_Tsegmentidsc           	      "   t         j                   xs t        j                         }|j                  }|j                  r3	 t	        j
                  |d|| |||      }t        j                  |      }|S t        j                   d| ||||      \  }	}	}
}|dd }t#        j$                         rYd|
j'                  d      d|
j'                  d      d|
j'                  d      f}|
j(                  }t#        j*                  d|||       t        j                  |      }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||||      S # t        j                  $ r Y w xY w)aC  Computes gradients for SparseSegmentSum.

  Returns tensor "output" with same shape as grad, except for dimension 0 whose
  value is the number of unique indexes in "indices". Also returns vector
  "sorted_unique_indices" containing the corresponding indexes from "indices".

  Args:
    grad: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`.
      gradient propagated to the SparseSegmentSum op.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      indices passed to the corresponding SparseSegmentSum op.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      segment_ids passed to the corresponding SparseSegmentSum op.
    dense_output_dim0: A `Tensor` of type `int32`.
      dimension 0 of "data" passed to SparseSegmentSum op.
    name: A name for the operation (optional).

  Returns:
    A tuple of `Tensor` objects (output, sorted_unique_indices).

    output: A `Tensor`. Has the same type as `grad`.
    sorted_unique_indices: A `Tensor`. Has the same type as `indices`.
  r3  Nr    r  r$   r   r  )r%   r   r&   r'   r   r(   _SparseSegmentSumGradV2Outputry  r)   r*   r+   r,   r-   )sparse_segment_sum_grad_v2_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  s                 rA   sparse_segment_sum_grad_v2r:  -  s   0 
			0h..0$#\\	11&dG[g .33G<gn (88 tW.94E'+	-!QX
 QK'""$3%%c*F  (-  /1F ::L ,A)//8'	.1 && -
##At,,## 
6
&7dN N## 
r  zraw_ops.SparseSegmentSumGradV2c                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |t        j                        }| |||g}	d|d|d|f}
t        j                  dd|	|
||      }t        j                         rt        j                  d|	|
|       t        j                  |      }|S )Nr$   r   r  s   SparseSegmentSumGradV2r  rF   r3  )r2   rH   rI   rJ   rK   rL   rM   rP   rQ   r+   r   r   r3   r6   r8  ry  r  s               rA   r9  r9  .  sh   44dVS7CSCSU\UaUacjcrcrt{  uD  uD  CG  H'7D#::G9cGMM[b[h[hKkmtmzmz{*jw&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^k,,->N.?@,&*m&6$0C"&(' ""$ ,A)//8'	.rT   $TV_SparseSegmentSumWithNumSegments_T'TV_SparseSegmentSumWithNumSegments_Tidx/TV_SparseSegmentSumWithNumSegments_Tnumsegments.TV_SparseSegmentSumWithNumSegments_Tsegmentidsc                 V   t         j                   xs t        j                         }|j                  }|j                  r 	 t	        j
                  |d|| |||d|	      }|S |d}t        j                  |d      }t        j                   d| |||||      \  }
}
}}|dd }t        j"                         r{d|j%                  d      d|j%                  d      d	|j%                  d	      d
|j%                  d
      d|j'                  d      f
}|j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }	t        j                  |	|       Y d}	~	nd}	~	wt        j                  $ r Y nw xY w	 t        | ||||||      S # t        j                  $ r Y Hw xY w)a  Computes the sum along sparse segments of a tensor.

  Like `SparseSegmentSum`, but allows missing ids in `segment_ids`. If an id is
  missing, the `output` tensor at that position will be zeroed.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/sparse#Segmentation)
  for an explanation of segments.

  For example:

  ```python
  c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]])

  tf.sparse_segment_sum_with_num_segments(
      c, tf.constant([0, 1]), tf.constant([0, 0]), num_segments=3)
  # => [[0 0 0 0]
  #     [0 0 0 0]
  #     [0 0 0 0]]

  tf.sparse_segment_sum_with_num_segments(c,
                                          tf.constant([0, 1]),
                                          tf.constant([0, 2],
                                          num_segments=4))
  # => [[ 1  2  3  4]
  #     [ 0  0  0  0]
  #     [-1 -2 -3 -4]
  #     [ 0  0  0  0]]
  ```

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    indices: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Has same rank as `segment_ids`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A 1-D tensor. Values should be sorted and can be repeated.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      Should equal the number of distinct segment IDs.
    sparse_gradient: An optional `bool`. Defaults to `False`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  SparseSegmentSumWithNumSegmentsr  Nr  Fr  r$   r   r8  r  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   3sparse_segment_sum_with_num_segments_eager_fallbackr/   r2   r   r0   r1   r3   r4   r   r5   r6   r  s                  rA   $sparse_segment_sum_with_num_segmentsrC  .  s   Z 
			0h..0$#\\11/tW\#4oGg n O&&8IJ/'88)g7B8D;J046!QX QK'""$3%%c*F  (.  0-  /1B  !23	5F
 ::L)<J('	.? && -
##At,,## 
@
l)$@ @ ## 
r  z'raw_ops.SparseSegmentSumWithNumSegmentsc                 R   |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }	\  }t        j                  |g|t        j                  t        j                  gt        j                        \  }
\  }| |||g}d|d|d|	d|
d|f
}t        j                   dd||||	      }t        j"                         rt        j$                  d
|||       |\  }|S )NFr  r$   r   r8  r  s   SparseSegmentSumWithNumSegmentsrE   rF   rA  r*  r  s                 rA   rB  rB  r.  sa   O&&8IJ/44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  an  an  pw  p@  p@  BI  BP  BP  RY  R^  R^  `g  `n  `n  pw  p~  p~  CA  B'7D#::G9cGMM[b[h[hKkmtmzmz{*jw(0(G(GX[^e^k^kmtmzmz]}  @G  @M  @M  )N%o|&.&E&E{mUX[b[h[hjqjwjwZz  }D  }J  }J  'K#^kl;,&*nm%68I& ?$0C"&(' ""$)<J('	.rT   	TV_Sqrt_Tc                 ~   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        j                  d| |      \  }}}}|dd }t        j                          r7d|j#                  d      f}	|j$                  }
t        j&                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||      S # t        j                  $ r Y w xY w)a;  Computes square root of x element-wise.

  I.e., \\(y = \sqrt{x} = x^{1/2}\\).

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  SqrtNr    r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   sqrt_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   sqrtrI  .  s7    
			0h..0$#\\11fdAgn (88!$ !QXQK'""$3%%c*+F::Lfg/('	.' && -
##At,,## 
 
$D" "## 
rC   zraw_ops.Sqrtc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   SqrtrE   rF   rG  r   rR   s          rA   rH  rH  .  r   rT   TV_SqrtGrad_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Computes the gradient for the sqrt of `x` wrt its input.

  Specifically, `grad = dy * 0.5 / y`, where `y = sqrt(x)`, and `dy`
  is the corresponding input gradient.

  Args:
    y: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    dy: A `Tensor`. Must have the same type as `y`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `y`.
  SqrtGradNr    r  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   sqrt_grad_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  s               rA   	sqrt_gradrO  .  =    
			0h..0$#\\11j$2'gn (88aBT+!QXQK'""$3%%c*+F::LL&'3('	.' && -
##At,,## 
%
Rd& &## 
r   zraw_ops.SqrtGradc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   SqrtGradrE   rF   rM  r   r  s	            rA   rN  rN  .      662wgFVFVX_XdXdfmfufuw~  xG  xG  IP  IZ  IZ  \c  \n  \n  Fq  r'9'1bR,>&[!L#)s?'""$L&'3('	.rT   TV_Square_Tzmath.squaresquarec           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes square of x element-wise.

  I.e., \\(y = x * x = x^2\\).

  >>> tf.math.square([-2., 0., 3.])
  <tf.Tensor: shape=(3,), dtype=float32, numpy=array([4., 0., 9.], dtype=float32)>

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int8`, `int16`, `int32`, `int64`, `uint8`, `uint16`, `uint32`, `uint64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  SquareNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_squarer   square_eager_fallbackr/   rj   r   r   r   rT  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   rT  rT  /  s   $ 
			0h..0$#\\11ha!gn, %	
D
DGn$n	
)::AD"Aq#x QK'""$3%%c*+F::L,1('	.W && -
##At,,## 
&d*dg		&"
$D" "## 
z" ""Bqt,g 
	..<<	<  Z	  
  
"dQT*
G i,,:::n	
r   zraw_ops.Squarec                    t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   g      \  }\  } | g}d|f}t        j"                  dd||||      }t        j$                         rt        j&                  d|||       |\  }|S )Nr$   s   SquarerE   rF   rV  )r2   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rr   ry   r{   r|   rs   rz   r   r3   r6   rR   s          rA   rX  rX  K/  ss   111#sW=M=Mw||]d]l]lnun}n}  @G  @L  @L  NU  N[  N[  ]d  ]j  ]j  ls  ly  ly  {B  {H  {H  JQ  JX  JX  Za  Zh  Zh  jq  jx  jx  zA  zK  zK  MT  M_  M_  =b  c-'4A,>&Y,f!$41'""$,1('	.rT   TV_SquaredDifference_Tzmath.squared_differencesquared_differencec           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Returns conj(x - y)(x - y) element-wise.

  *NOTE*: `math.squared_difference` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `int32`, `int64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  SquaredDifferenceNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   "_dispatcher_for_squared_differencer   !squared_difference_eager_fallbackr/   rj   r   r   r   r[  r   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   r[  r[  Z/  s(   $ 
			0h..0$#\\11!4A/gn, 1	
AttGn$n	
)::qAD2Aq#x QK'""$3%%c*+F::L\67<('	.W && -
##At,,## 
2a-g		&.
QTt% %## 
z" ""D1$=g 
	..<<	<  Z	  
  
b$ad";
G i,,:::n	
r  zraw_ops.SquaredDifferencec                    t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   SquaredDifferencerE   rF   r]  )r2   rH   rI   rJ   rK   rL   rM   rP   rQ   rs   rz   r   r3   r6   r   s	            rA   r_  r_  /  s   661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  Wd  Wd  fm  fw  fw  y@  yK  yK  EN  O'9&1aQ,>&11\#)s?'""$\67<('	.rT   TV_Sub_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Returns x - y element-wise.

  *NOTE*: `tf.subtract` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Both input and output have a range `(-inf, inf)`.

  Example usages below.

  Subtract operation between an array and a scalar:

  >>> x = [1, 2, 3, 4, 5]
  >>> y = 1
  >>> tf.subtract(x, y)
  <tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4], dtype=int32)>
  >>> tf.subtract(y, x)
  <tf.Tensor: shape=(5,), dtype=int32,
  numpy=array([ 0, -1, -2, -3, -4], dtype=int32)>

  Note that binary `-` operator can be used instead:

  >>> x = tf.convert_to_tensor([1, 2, 3, 4, 5])
  >>> y = tf.convert_to_tensor(1)
  >>> x - y
  <tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4], dtype=int32)>

  Subtract operation between an array and a tensor of same shape:

  >>> x = [1, 2, 3, 4, 5]
  >>> y = tf.constant([5, 4, 3, 2, 1])
  >>> tf.subtract(y, x)
  <tf.Tensor: shape=(5,), dtype=int32,
  numpy=array([ 4,  2,  0, -2, -4], dtype=int32)>

  **Warning**: If one of the inputs (`x` or `y`) is a tensor and the other is a
  non-tensor, the non-tensor input will adopt (or get casted to) the data type
  of the tensor input. This can potentially cause unwanted overflow or underflow
  conversion.

  For example,

  >>> x = tf.constant([1, 2], dtype=tf.int8)
  >>> y = [2**8 + 1, 2**8 + 2]
  >>> tf.subtract(x, y)
  <tf.Tensor: shape=(2,), dtype=int8, numpy=array([0, 0], dtype=int8)>

  When subtracting two input values of different shapes, `tf.subtract` follows the
  [general broadcasting rules](https://numpy.org/doc/stable/user/basics.broadcasting.html#general-broadcasting-rules)
  . The two input array shapes are compared element-wise. Starting with the
  trailing dimensions, the two dimensions either have to be equal or one of them
  needs to be `1`.

  For example,

  >>> x = np.ones(6).reshape(2, 3, 1)
  >>> y = np.ones(6).reshape(2, 1, 3)
  >>> tf.subtract(x, y)
  <tf.Tensor: shape=(2, 3, 3), dtype=float64, numpy=
  array([[[0., 0., 0.],
          [0., 0., 0.],
          [0., 0., 0.]],
         [[0., 0., 0.],
          [0., 0., 0.],
          [0., 0., 0.]]])>

  Example with inputs of different dimensions:

  >>> x = np.ones(6).reshape(2, 3, 1)
  >>> y = np.ones(6).reshape(1, 6)
  >>> tf.subtract(x, y)
  <tf.Tensor: shape=(2, 3, 6), dtype=float64, numpy=
  array([[[0., 0., 0., 0., 0., 0.],
          [0., 0., 0., 0., 0., 0.],
          [0., 0., 0., 0., 0., 0.]],
         [[0., 0., 0., 0., 0., 0.],
          [0., 0., 0., 0., 0., 0.],
          [0., 0., 0., 0., 0., 0.]]])>

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `uint16`, `int16`, `int32`, `int64`, `complex64`, `complex128`, `uint32`, `uint64`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  SubNr    r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   sub_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   s               rA   subre  /  s>   n 
			0h..0$#\\11eT1a!gn (88ad$!QXQK'""$3%%c*+F::L|VW.('	.' && -
##At,,## 

QTt% %## 
r   zraw_ops.Subc                    t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   g      \  }}|\  } }| |g}d|f}t        j"                  dd||||      }t        j$                         rt        j&                  d|||       |\  }|S )Nr$   s   SubrE   rF   rc  )r2   rH   rI   rJ   rK   rL   rM   rr   rN   ry   rO   rP   rQ   rs   rz   r{   r|   r   r3   r6   r   s	            rA   rd  rd  *0  s   661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  Wc  Wc  el  es  es  u|  uB  uB  DK  DQ  DQ  SZ  S`  S`  bi  bs  bs  u|  uG  uG  IP  IW  IW  Y`  Yg  Yg  Ej  k'9&1aQ,>&VQ|6!$41'""$|VW.('	.rT   TV_Sum_TTV_Sum_Tidxc           	         t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |d|      }|S |d}t        j                  |d      }t        j                   d| |||      \  }}}	}
|
dd }t        j"                         rYd|	j%                  d      d|	j'                  d      d|	j'                  d      f}|	j(                  }t        j*                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||||      S # t        j                  $ r Y "w xY w)	a  Computes the sum of elements across dimensions of a tensor.

  Reduces `input` along the dimensions given in `axis`. Unless
  `keep_dims` is true, the rank of the tensor is reduced by 1 for each entry in
  `axis`. If `keep_dims` is true, the reduced dimensions are
  retained with length 1.

  Args:
    input: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
      The tensor to reduce.
    axis: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      The dimensions to reduce. Must be in the range
      `[-rank(input), rank(input))`.
    keep_dims: An optional `bool`. Defaults to `False`.
      If true, retain reduced dimensions with length 1.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `input`.
  Sumr   Nr   Fr   r$   r   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _sum_eager_fallbackr/   r2   r   r0   r1   r3   r   r4   r5   r6   r   s                rA   _sumrl  ;0  r  r!  zraw_ops.Sumc                    |d}t        j                  |d      }t        j                  | g|t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  g      \  }\  } t        j                  |g|t        j                  t        j                  gt        j                        \  }\  }| |g}d|d|d|f}t        j.                  dd||||      }	t        j0                         rt        j2                  d|||	       |	\  }	|	S )	NFr   r$   r   s   SumrE   rF   rj  r  r#  s
             rA   rk  rk  t0  sE   I  K8)55ugsW__V]VeVegngtgtv}  wD  wD  FM  FS  FS  U\  Ua  Ua  cj  ct  ct  v}  vC  vC  EL  ER  ER  T[  Tb  Tb  dk  dr  dr  t{  tD  tD  FM  FT  FT  V]  Ve  Ve  gn  gu  gu  w~  wI  wI  KR  KW  KW  Y`  Yg  Yg  ip  iw  iw  Ez  {'8E 77gmmU\UbUbEegngtgtu*gt,C&*E&VQ|6!$41'""$|VW.('	.rT   TV_Tan_Tzmath.tantanc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes tan of x element-wise.

    Given an input tensor, this function computes tangent of every
    element in the tensor. Input range is `(-inf, inf)` and
    output range is `(-inf, inf)`. If input lies outside the boundary, `nan`
    is returned.

    ```python
    x = tf.constant([-float("inf"), -9, -0.5, 1, 1.2, 200, 10000, float("inf")])
    tf.math.tan(x) ==> [nan 0.45231566 -0.5463025 1.5574077 2.572152 -1.7925274 0.32097113 nan]
    ```

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  TanNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_tanr   tan_eager_fallbackr/   rj   r   r   r   ro  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   ro  ro  0  r  r   zraw_ops.Tanc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   TanrE   rF   rq  r   rR   s          rA   rs  rs  0  r  rT   	TV_Tanh_Tz	math.tanhznn.tanhtanhc           	      >   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d||       }|S t        | |fd      }|t        ur|S 	 t/        j0                  d| |      \  }}}}|dd }t3        j4                         r7d|j7                  d      f}	|j8                  }
t3        j:                  d|
|	|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |fd      }|t        ur|S t        | ||      S # t        j                  $ r Y t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rH t#        j$                  t&        dt)        | |            }|t"        j*                  j,                  ur|cY S  w xY w)a  Computes hyperbolic tangent of `x` element-wise.

    Given an input tensor, this function computes hyperbolic tangent of every
    element in the tensor. Input range is `[-inf, inf]` and
    output range is `[-1,1]`.

    >>> x = tf.constant([-float("inf"), -5, -0.5, 1, 1.2, 2, 3, float("inf")])
    >>> tf.math.tanh(x)
    <tf.Tensor: shape=(8,), dtype=float32, numpy=
    array([-1.0, -0.99990916, -0.46211717,  0.7615942 ,  0.8336547 ,
            0.9640276 ,  0.9950547 ,  1.0], dtype=float32)>

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  TanhNr    r   r#   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_tanhr   tanh_eager_fallbackr/   rj   r   r   r   rv  r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   s              rA   rv  rv  0  s   . 
			0h..0$#\\11fdAgn, #	
D
DGn$n	
)::!$ Aq#x QK'""$3%%c*+F::Lfg/('	.W && -
##At,,## 
$d*dg		& 
$D" "## 
z" """dQT*g 
	..<<	<  Z	  
  
D14(
G i,,:::n	
r   zraw_ops.Tanhc           
         t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }\  } | g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   TanhrE   rF   rx  r   rR   s          rA   rz  rz  41  r   rT   TV_TanhGrad_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a  Computes the gradient for the tanh of `x` wrt its input.

  Specifically, `grad = dy * (1 - y*y)`, where `y = tanh(x)`, and `dy`
  is the corresponding input gradient.

  Args:
    y: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `complex64`, `complex128`.
    dy: A `Tensor`. Must have the same type as `y`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `y`.
  TanhGradNr    r  r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   tanh_grad_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r  s               rA   	tanh_gradr  C1  rP  r   zraw_ops.TanhGradc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   TanhGradrE   rF   r~  r   r  s	            rA   r  r  p1  rR  rT   TV_TruncateDiv_Ttruncatedivc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a*  Returns x / y element-wise, rounded towards zero.

  Truncation designates that negative numbers will round fractional quantities
  toward zero. I.e. -7 / 5 = -1. This matches C semantics but it is different
  than Python semantics. See `FloorDiv` for a division function that matches
  Python Semantics.

  *NOTE*: `truncatediv` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `bfloat16`, `half`, `float32`, `float64`, `uint8`, `int8`, `uint16`, `int16`, `int32`, `uint32`, `uint64`, `int64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  TruncateDivNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_truncate_divr   truncate_div_eager_fallbackr/   rj   r   r   r   truncate_divr   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   r  r  1  s'   , 
			0h..0$#\\11mT1a)gn, +	
AttGn$n	
)::ad,Aq#x QK'""$3%%c*+F::L|VW6('	.W && -
##At,,## 
,a-g		&(
QTt% %## 
z" """dQ!$7g 
	..<<	<  Z	  
  
D15
G i,,:::n	
r  zraw_ops.TruncateDivc                    t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   g      \  }}|\  } }| |g}d|f}t        j"                  dd||||      }t        j$                         rt        j&                  d|||       |\  }|S )Nr$   s   TruncateDivrE   rF   r  r  r   s	            rA   r  r  1  s   661vsWEUEUW^WcWceletetv}  wF  wF  HO  HU  HU  W^  Wc  Wc  el  es  es  u|  uB  uB  DK  DQ  DQ  SZ  Sa  Sa  cj  cq  cq  sz  s@  s@  BI  BS  BS  U\  Ug  Ug  Ej  k'9&1aQ,>&^Q|#)s?'""$|VW6('	.rT   TV_TruncateMod_Ttruncatemodc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)af  Returns element-wise remainder of division. This emulates C semantics in that

  the result here is consistent with a truncating divide. E.g. `truncate(x / y) *
  y + truncate_mod(x, y) = x`.

  *NOTE*: `truncatemod` supports broadcasting. More about broadcasting
  [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)

  Args:
    x: A `Tensor`. Must be one of the following types: `int32`, `int64`, `bfloat16`, `half`, `float32`, `float64`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  TruncateModNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_truncate_modr   truncate_mod_eager_fallbackr/   rj   r   r   r   truncate_modr   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   r  r  1  s'   ( 
			0h..0$#\\11mT1a)gn, +	
AttGn$n	
)::ad,Aq#x QK'""$3%%c*+F::L|VW6('	.W && -
##At,,## 
,a-g		&(
QTt% %## 
z" """dQ!$7g 
	..<<	<  Z	  
  
D15
G i,,:::n	
r  zraw_ops.TruncateModc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   TruncateModrE   rF   r  )r2   rH   rI   rP   rQ   rJ   rK   rL   rM   r   r3   r6   r   s	            rA   r  r  *2  s    661vsW]]T[TaTacjcscsu|  vB  vB  DK  DS  DS  U\  Ud  Ud  Eg  h'9&1aQ,>&^Q|#)s?'""$|VW6('	.rT   TV_UnsortedSegmentMax_TTV_UnsortedSegmentMax_Tindices"TV_UnsortedSegmentMax_Tnumsegmentszmath.unsorted_segment_maxunsorted_segment_maxc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        | |||fd      }|t        ur|S 	 t/        j0                  d| |||      \  }}}	}
|
dd }t3        j4                         rYd|	j7                  d      d|	j7                  d      d|	j7                  d      f}|	j8                  }t3        j:                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||fd      }|t        ur|S t        | ||||      S # t        j                  $ r Y #t        t         f$ rJ t#        j$                  t&        dt)        | |||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rJ t#        j$                  t&        dt)        | |||            }|t"        j*                  j,                  ur|cY S  w xY w)	a  Computes the maximum along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  This operator is similar to `tf.math.unsorted_segment_sum`,
  Instead of computing the sum over segments, it computes the maximum such that:

  \\(output_i = \max_{j...} data[j...]\\) where max is over tuples `j...` such
  that `segment_ids[j...] == i`.

  If the maximum is empty for a given segment ID `i`, it outputs the smallest
  possible value for the specific numeric type,
  `output[i] = numeric_limits<T>::lowest()`.

  If the given segment ID `i` is negative, then the corresponding value is
  dropped, and will not be included in the result.

  Caution: On CPU, values in `segment_ids` are always validated to be less than
  `num_segments`, and an error is thrown for out-of-bound indices. On GPU, this
  does not throw an error for out-of-bound indices. On Gpu, out-of-bound indices
  result in safe but unspecified behavior, which may include ignoring
  out-of-bound indices or outputting a tensor with a 0 stored in the first
  dimension of its shape if `num_segments` is 0.

  <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
  <img style="width:100%" src="https://www.tensorflow.org/images/UnsortedSegmentMax.png" alt>
  </div>

  For example:

  >>> c = tf.constant([[1,2,3,4], [5,6,7,8], [4,3,2,1]])
  >>> tf.math.unsorted_segment_max(c, tf.constant([0, 1, 0]), num_segments=2).numpy()
  array([[4, 3, 3, 4],
         [5,  6, 7, 8]], dtype=int32)

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A tensor whose shape is a prefix of `data.shape`.
      The values must be less than `num_segments`.

      Caution: The values are always validated to be in range on CPU, never validated
      on GPU.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  UnsortedSegmentMaxNr    r   r7  r$   r'  r8  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   $_dispatcher_for_unsorted_segment_maxr   #unsorted_segment_max_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r:  s                rA   r  r  <2  sj   p 
			0h..0$#\\11"D$\Kgn0 3	{L$0$8Gn$n
)::4[+7dDAq#x QK'""$3%%c*J  ,n  02F ::LlFG=('	.c && -
##At,,## 
4lD
2D:g		&0
\$@ @## 
z" "" "d+8D04'6g
 
	..<<	<& Z	  
  
Dd6B%O
G i,,:::n	
P    D 7G4 E!D<<EEF 3F G1AG1/G14AIIzraw_ops.UnsortedSegmentMaxc                 b   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }t        j                  |g|t        j
                  t        j                  gt        j
                        \  }\  }| ||g}d|d|d|f}	t        j                  dd||	||      }
t        j                          rt        j"                  d||	|
       |
\  }
|
S )Nr$   r'  r8  s   UnsortedSegmentMaxrE   rF   r  r  r?  s              rA   r  r  2     44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  an  an  pw  p@  p@  BI  BP  BP  RY  R^  R^  `g  `n  `n  pw  p~  p~  CA  B'7D#+#B#BK=RUX_XeXegngtgtWw#x ..;(0(G(GX[^e^k^kmtmzmz]}  @G  @M  @M  )N%o|\2,*nn&2Al#)s?'""$lFG=('	.rT   TV_UnsortedSegmentMin_TTV_UnsortedSegmentMin_Tindices"TV_UnsortedSegmentMin_Tnumsegmentszmath.unsorted_segment_minunsorted_segment_minc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        | |||fd      }|t        ur|S 	 t/        j0                  d| |||      \  }}}	}
|
dd }t3        j4                         rYd|	j7                  d      d|	j7                  d      d|	j7                  d      f}|	j8                  }t3        j:                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||fd      }|t        ur|S t        | ||||      S # t        j                  $ r Y #t        t         f$ rJ t#        j$                  t&        dt)        | |||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rJ t#        j$                  t&        dt)        | |||            }|t"        j*                  j,                  ur|cY S  w xY w)	a	  Computes the minimum along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  This operator is similar to `tf.math.unsorted_segment_sum`,
  Instead of computing the sum over segments, it computes the minimum such that:

  \\(output_i = \min_{j...} data_[j...]\\) where min is over tuples `j...` such
  that `segment_ids[j...] == i`.

  If the minimum is empty for a given segment ID `i`, it outputs the largest
  possible value for the specific numeric type,
  `output[i] = numeric_limits<T>::max()`.

  For example:

  >>> c = tf.constant([[1,2,3,4], [5,6,7,8], [4,3,2,1]])
  >>> tf.math.unsorted_segment_min(c, tf.constant([0, 1, 0]), num_segments=2).numpy()
  array([[1, 2, 2, 1],
         [5, 6, 7, 8]], dtype=int32)

  If the given segment ID `i` is negative, then the corresponding value is
  dropped, and will not be included in the result.

  Caution: On CPU, values in `segment_ids` are always validated to be less than
  `num_segments`, and an error is thrown for out-of-bound indices. On GPU, this
  does not throw an error for out-of-bound indices. On Gpu, out-of-bound indices
  result in safe but unspecified behavior, which may include ignoring
  out-of-bound indices or outputting a tensor with a 0 stored in the first
  dimension of its shape if `num_segments` is 0.

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A tensor whose shape is a prefix of `data.shape`.
      The values must be less than `num_segments`.

      Caution: The values are always validated to be in range on CPU, never validated
      on GPU.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  UnsortedSegmentMinNr    r   r7  r$   r'  r8  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   $_dispatcher_for_unsorted_segment_minr   #unsorted_segment_min_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r:  s                rA   r  r  2  sj   h 
			0h..0$#\\11"D$\Kgn0 3	{L$0$8Gn$n
)::4[+7dDAq#x QK'""$3%%c*J  ,n  02F ::LlFG=('	.c && -
##At,,## 
4lD
2D:g		&0
\$@ @## 
z" "" "d+8D04'6g
 
	..<<	<& Z	  
  
Dd6B%O
G i,,:::n	
r  zraw_ops.UnsortedSegmentMinc                 b   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }t        j                  |g|t        j
                  t        j                  gt        j
                        \  }\  }| ||g}d|d|d|f}	t        j                  dd||	||      }
t        j                          rt        j"                  d||	|
       |
\  }
|
S )Nr$   r'  r8  s   UnsortedSegmentMinrE   rF   r  r  r?  s              rA   r  r  83  r  rT   TV_UnsortedSegmentProd_TTV_UnsortedSegmentProd_Tindices#TV_UnsortedSegmentProd_Tnumsegmentszmath.unsorted_segment_produnsorted_segment_prodc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        | |||fd      }|t        ur|S 	 t/        j0                  d| |||      \  }}}	}
|
dd }t3        j4                         rYd|	j7                  d      d|	j7                  d      d|	j7                  d      f}|	j8                  }t3        j:                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||fd      }|t        ur|S t        | ||||      S # t        j                  $ r Y #t        t         f$ rJ t#        j$                  t&        dt)        | |||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rJ t#        j$                  t&        dt)        | |||            }|t"        j*                  j,                  ur|cY S  w xY w)	a   Computes the product along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  This operator is similar to `tf.math.unsorted_segment_sum`,
  Instead of computing the sum over segments, it computes the product of all
  entries belonging to a segment such that:

  \\(output_i = \prod_{j...} data[j...]\\) where the product is over tuples
  `j...` such that `segment_ids[j...] == i`.

  For example:

  >>> c = tf.constant([[1,2,3,4], [5,6,7,8], [4,3,2,1]])
  >>> tf.math.unsorted_segment_prod(c, tf.constant([0, 1, 0]), num_segments=2).numpy()
  array([[4, 6, 6, 4],
         [5, 6, 7, 8]], dtype=int32)

  If there is no entry for a given segment ID `i`, it outputs 1.

  If the given segment ID `i` is negative, then the corresponding value is
  dropped, and will not be included in the result.
  Caution: On CPU, values in `segment_ids` are always validated to be less than
  `num_segments`, and an error is thrown for out-of-bound indices. On GPU, this
  does not throw an error for out-of-bound indices. On Gpu, out-of-bound indices
  result in safe but unspecified behavior, which may include ignoring
  out-of-bound indices or outputting a tensor with a 0 stored in the first
  dimension of its shape if `num_segments` is 0.

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int32`, `int64`.
      A tensor whose shape is a prefix of `data.shape`.
      The values must be less than `num_segments`.

      Caution: The values are always validated to be in range on CPU, never validated
      on GPU.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  UnsortedSegmentProdNr    r   r7  r$   r'  r8  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   %_dispatcher_for_unsorted_segment_prodr   $unsorted_segment_prod_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r:  s                rA   r  r  L3  sk   d 
			0h..0$#\\11#T4lLgn2 4	{L$0$8Gn$n
)::Dk,8tEAq#x QK'""$3%%c*J  ,n  02F ::L|VW>('	.g && -
##At,,## 
5lD
2D:g		&1
\$@ @## 
z" 	""!2t8C9E15(7g 
	..<<	<	( Z	  
  
Tt7C/3&5
G
 i,,:::n	
r  zraw_ops.UnsortedSegmentProdc                 4   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  g      \  }\  } t        j                  |g|t        j
                  t        j                  g      \  }\  }t        j                  |g|t        j
                  t        j                  gt        j
                        \  }\  }| ||g}d|d|d|f}	t        j,                  dd||	||      }
t        j.                         rt        j0                  d||	|
       |
\  }
|
S )Nr$   r'  r8  s   UnsortedSegmentProdrE   rF   r  r  r?  s              rA   r  r  3  st   44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  ar  ar  t{  tA  tA  CJ  CP  CP  RY  R`  R`  bi  bp  bp  ry  rB  rB  DK  DR  DR  T[  Tc  Tc  el  es  es  u|  uG  uG  IP  IU  IU  W^  We  We  gn  gu  gu  Cx  y'7D#+#B#BK=RUX_XeXegngtgtWw#x ..;(0(G(GX[^e^k^kmtmzmz]}  @G  @M  @M  )N%o|\2,*nn&3Q|#)s?'""$|VW>('	.rT   TV_UnsortedSegmentSum_TTV_UnsortedSegmentSum_Tindices"TV_UnsortedSegmentSum_Tnumsegmentszmath.unsorted_segment_sumunsorted_segment_sumc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| ||      }|S t        | |||fd      }|t        ur|S 	 t/        j0                  d| |||      \  }}}	}
|
dd }t3        j4                         rYd|	j7                  d      d|	j7                  d      d|	j7                  d      f}|	j8                  }t3        j:                  d|||       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||fd      }|t        ur|S t        | ||||      S # t        j                  $ r Y #t        t         f$ rJ t#        j$                  t&        dt)        | |||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rJ t#        j$                  t&        dt)        | |||            }|t"        j*                  j,                  ur|cY S  w xY w)	a  Computes the sum along segments of a tensor.

  Read
  [the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)
  for an explanation of segments.

  Computes a tensor such that
  \\(output[i] = \sum_{j...} data[j...]\\) where the sum is over tuples `j...` such
  that `segment_ids[j...] == i`.  Unlike `SegmentSum`, `segment_ids`
  need not be sorted and need not cover all values in the full
  range of valid values.

  If the sum is empty for a given segment ID `i`, `output[i] = 0`.
  If the given segment ID `i` is negative, the value is dropped and will not be
  added to the sum of the segment.

  `num_segments` should equal the number of distinct segment IDs.

  Caution: On CPU, values in `segment_ids` are always validated to be less than
  `num_segments`, and an error is thrown for out-of-bound indices. On GPU, this
  does not throw an error for out-of-bound indices. On Gpu, out-of-bound indices
  result in safe but unspecified behavior, which may include ignoring
  out-of-bound indices or outputting a tensor with a 0 stored in the first
  dimension of its shape if `num_segments` is 0.

  <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
  <img style="width:100%" src="https://www.tensorflow.org/images/UnsortedSegmentSum.png" alt>
  </div>

  >>> c = [[1,2,3,4], [5,6,7,8], [4,3,2,1]]
  >>> tf.math.unsorted_segment_sum(c, [0, 1, 0], num_segments=2).numpy()
  array([[5, 5, 5, 5],
         [5, 6, 7, 8]], dtype=int32)

  Args:
    data: A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `complex64`, `int64`, `qint8`, `quint8`, `qint32`, `bfloat16`, `qint16`, `quint16`, `uint16`, `complex128`, `half`, `uint32`, `uint64`.
    segment_ids: A `Tensor`. Must be one of the following types: `int16`, `int32`, `int64`.
      A tensor whose shape is a prefix of `data.shape`.
      The values must be less than `num_segments`.

      Caution: The values are always validated to be in range on CPU, never validated
      on GPU.
    num_segments: A `Tensor`. Must be one of the following types: `int32`, `int64`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `data`.
  UnsortedSegmentSumNr    r   r7  r$   r'  r8  )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   $_dispatcher_for_unsorted_segment_sumr   #unsorted_segment_sum_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   r:  s                rA   r  r  3  sj   j 
			0h..0$#\\11"D$\Kgn0 3	{L$0$8Gn$n
)::4[+7dDAq#x QK'""$3%%c*J  ,n  02F ::LlFG=('	.c && -
##At,,## 
4lD
2D:g		&0
\$@ @## 
z" "" "d+8D04'6g
 
	..<<	<& Z	  
  
Dd6B%O
G i,,:::n	
r  zraw_ops.UnsortedSegmentSumc                 R   t        j                  | g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  g      \  }\  } t        j                  |g|t        j                  t        j
                  t        j                  g      \  }\  }t        j                  |g|t        j
                  t        j                  gt        j
                        \  }\  }| ||g}d|d|d|f}	t        j,                  dd||	||      }
t        j.                         rt        j0                  d||	|
       |
\  }
|
S )Nr$   r'  r8  s   UnsortedSegmentSumrE   rF   r  r  r?  s              rA   r  r  E4  s   44dVS7??T[TcTcelerert{  uB  uB  DK  DQ  DQ  SZ  S_  S_  ah  ar  ar  t{  tA  tA  CJ  CP  CP  RY  R`  R`  bi  bp  bp  ry  rB  rB  DK  DR  DR  T[  Tc  Tc  el  es  es  u|  uG  uG  IP  IU  IU  W^  We  We  gn  gu  gu  Cx  y'7D#+#B#BK=RUX_XeXegngtgtv}  wD  wD  XG  $H ..;(0(G(GX[^e^k^kmtmzmz]}  @G  @M  @M  )N%o|\2,*nn&2Al#)s?'""$lFG=('	.rT   
TV_Xdivy_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)aV  Returns 0 if x == 0, and x / y otherwise, elementwise.

  Args:
    x: A `Tensor`. Must be one of the following types: `half`, `bfloat16`, `float32`, `float64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  XdivyNr    r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   xdivy_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   s               rA   xdivyr  W4  s=    
			0h..0$#\\11gtQ#gn (881&!QXQK'""$3%%c*+F::Lvw0('	.' && -
##At,,## 
!
QTt% %## 
r   zraw_ops.Xdivyc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   XdivyrE   rF   r  r2   rH   rI   rK   rJ   rL   rM   rs   rz   r   r3   r6   r   s	            rA   r  r  4      661vsW\\SZScSceletetv}  wF  wF  HO  HY  HY  [b  [m  [m  Ep  q'9&1aQ,>&XqV!$41'""$vw0('	.rT   TV_Xlog1py_Tc                    t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        j                  d| ||      \  }}}}	|	dd }t        j                          r7d|j#                  d      f}
|j$                  }t        j&                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | |||      S # t        j                  $ r Y w xY w)a]  Returns 0 if x == 0, and x * log1p(y) otherwise, elementwise.

  Args:
    x: A `Tensor`. Must be one of the following types: `half`, `bfloat16`, `float32`, `float64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  Xlog1pyNr    r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   xlog1py_eager_fallbackr/   r0   r1   r2   r3   r4   r5   r6   r   s               rA   xlog1pyr  4  s=    
			0h..0$#\\11iq!%gn (88Q!$(!QXQK'""$3%%c*+F::L<2('	.' && -
##At,,## 
#
QTt% %## 
r   zraw_ops.Xlog1pyc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   Xlog1pyrE   rF   r  r  r   s	            rA   r  r  4  s    661vsW\\SZScSceletetv}  wF  wF  HO  HY  HY  [b  [m  [m  Ep  q'9&1aQ,>&Z<v!$41'""$<2('	.rT   
TV_Xlogy_Tz
math.xlogyc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a[  Returns 0 if x == 0, and x * log(y) otherwise, elementwise.

  Args:
    x: A `Tensor`. Must be one of the following types: `half`, `bfloat16`, `float32`, `float64`, `complex64`, `complex128`.
    y: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  XlogyNr    r   r   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_xlogyr   xlogy_eager_fallbackr/   rj   r   r   r   xlogyr   r   r   r0   r1   r2   r3   r4   r5   r6   r   s               rA   r  r  4  s'    
			0h..0$#\\11gtQ#gn, $	
AttGn$n	
)::1&Aq#x QK'""$3%%c*+F::Lvw0('	.W && -
##At,,## 
%a-g		&!
QTt% %## 
z" ""2ta140g 
	..<<	<  Z	  
  
TA.
G i,,:::n	
r  zraw_ops.Xlogyc           
         t        j                  | |g|t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   XlogyrE   rF   r  r  r   s	            rA   r  r  5  r  rT   	TV_Zeta_Tz	math.zetazetaqc           
      L   t         j                   xs t        j                         }|j                  }|j                  r	 t	        j
                  |d|| |      }|S t        | ||fd      }|t        ur|S 	 t/        j0                  d| ||      \  }}}}	|	dd }t3        j4                         r7d|j7                  d      f}
|j8                  }t3        j:                  d||
|       |\  }|S # t        j                  $ r }t        j                  ||       Y d}~nd}~wt        j                  $ r Y nw xY w	 t        | ||fd      }|t        ur|S t        | |||      S # t        j                  $ r Y t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w# t        t         f$ rI t#        j$                  t&        dt)        | ||            }|t"        j*                  j,                  ur|cY S  w xY w)a  Compute the Hurwitz zeta function \\(\zeta(x, q)\\).

  The Hurwitz zeta function is defined as:


  \\(\zeta(x, q) = \sum_{n=0}^{\infty} (q + n)^{-x}\\)

  Args:
    x: A `Tensor`. Must be one of the following types: `float32`, `float64`.
    q: A `Tensor`. Must have the same type as `x`.
    name: A name for the operation (optional).

  Returns:
    A `Tensor`. Has the same type as `x`.
  ZetaNr    r   )r   r  r!   r$   )r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   _dispatcher_for_zetar   zeta_eager_fallbackr/   rj   r   r   r   r  r   r   r   r0   r1   r2   r3   r4   r5   r6   )r   r  r!   r8   r9   r:   r;   r<   r=   r>   r?   r@   s               rA   r  r  !5  s'   ( 
			0h..0$#\\11fdAq"gn, #	
AttGn$n	
)::!qt%Aq#x QK'""$3%%c*+F::Lfg/('	.W && -
##At,,## 
$a-g		& 
QTt% %## 
z" """dQ!$/g 
	..<<	<  Z	  
  
D1-
G i,,:::n	
r  zraw_ops.Zetac                 *   t        j                  | |g|t        j                  t        j                  g      \  }}|\  } }| |g}d|f}t        j
                  dd||||      }t        j                         rt        j                  d|||       |\  }|S )Nr$   s   ZetarE   rF   r  rS  )	r   r  r!   r"   rS   r   r@   r?   r:   s	            rA   r  r  m5  s    661vsW__V]VeVeDhi'9&1aQ,>&WaF!$41'""$fg/('	.rT   )N)FN)r   N)FFFFN)FFN)TN(8  __doc__collectionstensorflow.pythonr   tensorflow.python.eagerr   r%   r   r)   r   r2   tensorflow.python.frameworkr   rI   tensorflow.security.fuzzing.pyr   _atypesr	   _op_def_registryr
   r+   r   r0   "tensorflow.python.util.deprecationr   tensorflow.python.utilr   r    tensorflow.python.util.tf_exportr   typingr   r   r   typing_extensionsr   r   rB   	to_raw_opr   r.   rU   rp   rb   rf   r}   r   r   r   r   add_fallback_dispatch_listadd_type_based_api_dispatcherr   r   _tf_type_based_dispatcherDispatchr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Boolr   r   r   r   r   r   rL   r   r   r   r   r   r   r   floatr   r   r   r   r   r   rQ   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  r  r  r!  r"  r$  r%  r&  r(  r3  r.  r1  r7  r;  r9  r:  r=  r>  r?  rE  rA  rD  rI  rJ  rO  rP  rQ  rT  Int32r[  rY  rZ  r^  re  r`  rc  rg  rq  rx  ru  rw  r{  r  r}  r~  r  r  r  r  r  r  rs   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  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  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   r  r  r$  r(  r&  r'  r*  r+  r-  r.  r/  r1  r5  r3  r4  r9  r:  r<  r=  r>  r@  rI  rF  rG  rH  rK  rL  rN  rO  rP  rR  rS  rU  rV  rW  rY  rZ  rP   rc  r`  rb  re  rf  rh  rj  rk  ro  rs  rq  rr  ru  rv  rx  ry  rz  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  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  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  r  r  r  r  r  r  r  r  r  r  r!  r  r   r#  r$  r&  r'  r(  r*  rD  r,  r-  r/  r3  r1  r2  r5  r9  r7  r8  r;  r?  r=  r>  rA  rG  rD  rE  rF  rI  rP  rM  rN  rO  rR  rV  rT  rU  rX  rY  r[  r\  r]  r_  rc  ra  rb  re  rf  rj  rh  ri  
namedtuplerx  rp  rq  Float32r{  rl  rz  r  r  r  r  rv   r  r  r  r  r  r  r  r  ru   r  r  r  r  r  r  r  r  r  r  r  r  Int64r  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  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  r  r  r  r  r  r  r  r  r  r  r  r   r!  r%  r(  r)  r1  r2  r3  r;  r6  r9  rB  rC  rD  rF  rG  rH  rK  rL  rM  rO  rP  rQ  rS  rT  rU  rY  rW  rX  r[  r\  r]  r_  r`  ra  rc  rd  re  ri  rg  rh  rk  rl  rm  ro  rp  rq  rs  rt  ru  ry  rw  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  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  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  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r"  r#  r$  r(  r&  r'  r+  r,  r-  r1  r/  r0  r8  r4  r5  r6  r:  r3  r9  r<  r=  r>  r?  rC  rA  rB  rE  rI  rG  rH  rK  rO  rM  rN  rS  rT  rV  rW  rX  rZ  r[  r]  r^  r_  ra  re  rc  rd  rg  rh  rl  rj  rk  rn  ro  rq  rr  rs  ru  rv  rx  ry  rz  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  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  r  r  r  r  r  r  r   rT   rA   <module>r     s7  
  6 7 1 7 9 F K 3 I C 8 6 % % ':13DFWYgix  {J  L[  ]k  l(Ic8m$ (Ic8m4L (T i~t~~d34
9S(]3 
9SRZ]C[ 
 13EG[]p  sD  FW  Yg  ix  zI  KZ  \j  l|  ~N  P_  ar  tD  FV  Xh  jz  |K  L 79T#Y0B%BC 7Zcdgi{d{Z| 7r 3	12>4>>.3QR)DI?Q4Q*R irsv  yK  tK  jL & K!35IK^`q  tE  GU  V	)Ic9n% )YsI~5N )V !y !56
9S)^4 
IcS\nD] 
 \#57KM`bs  vG  IW  X

%%
((
<!DYsJ' Dyj7Q D " ) &DL 	#	/">4>>%#8977@@ 
Ic:o6 
iPSU_P_F` 
 :13GI\^o  rC  ES  Ud  fu  wF  HV  Xh  jy  z,9S(]# ,	#x-(@ ,PYZ]_gZgPh ,\ i~t~~c23)CM2 yh7O _hilnviv_w  K!35IK^`q  tE  GU  Wf  hw  yH  JX  Zj  l|  ~M  O`  br  tD  FV  Xh  jy  {L  M	0)DIy01 03PY>AZ 0d !y !6749i+?!@ PYZ]_hZhPi $ \#57KM`bs  vG  IW  Yh  jy  {J  LZ  \l  n~  @P  Ra  b
(iZ( (YsJ-G (W`adfpapWq (T 	#	/">4>>&#9:YsJ7 Ic:o<V fopsup  gA  m_oF3	#w||+, 3Ic;>N4O 3[_ 3u~  @C  EL  EQ  EQ  @Q  vR 3j i~t~~d34ygll):; 9SR]M]C^ ko   @I  JM  OV  O[  O[  J[  @\ " \#79LM
):<MN@GVZ ;3
?+ ;- ;_hiln{i{_| ;z 	#	/">4>>%#89	#z/ : - _hiln{i{_|   m_oF3	#w||+, 3Ic;>N4O 3[_ 3u~  @C  EL  EQ  EQ  @Q  vR 3j i~t~~d34ygll):; 9SR]M]C^ ko   @I  JM  OV  O[  O[  J[  @\ "   79KMacv  yJ  L]  _m  o~  @O  Q`  bp  rB  DT  Ve  gx  zJ  L\  ^n  p@  BQ  R *3(=#=> *9SRgMgCh *ty *  PY  Z]  _f  _k  _k  Zk  Pl *X 9978HY9Z[ 	#7L2L(M R[\_av\vRw   EJ   Zc  dg  ip  iu  iu  du  Zv " m%7IZ\mo}  @O  Q`  bq  sA  CS  Ue  gv  xI  K[  ]m  o  AQ  Sb  c)?O_] 7/[jl|}  ~E  ~K  ~K  RV ;9S+-. ;9S.EX;Y ;g| ;  [d  eh  j  e  [@ ;z 
%#	$^T^^G%<	=)C,<"= )TWYgTgJh   xM   ]f  gj  lA  gA  ]B " m%7IZ\mo}  @O  Q`  bq  sA  CS  Ue  gv  xI  K[  ]m  o  AQ  Sb  c)?OL 7/Z  ~E  ~K  ~K  RV ;9S+-. ;9S.EX;Y ;g| ;  [d  eh  j  e  [@ ;z 
%#	$^T^^G%<	=)C,<"= )TWYgTgJh   xM   ]f  gj  lA  gA  ]B " K!35IK^`q  tE  GU  V	
%%
((
;LIc9n% LYsI~5N L   ) &L\ !y !5655>> 
9S)^4 
IcS\nD] 
 \#57KM`bs  vG  IW  X

%%
((
<!EYsJ' Eyj7Q E " ) &EN 	#	/">4>>%#8977@@ 
Ic:o6 
iPSU_P_F` 
 K!35IK^`q  tE  GU  V	
%%
((
;LIc9n% LYsI~5N L   ) &L\ !y !5655>> 
9S)^4 
IcS\nD] 
 \#57HJ[]kl

%%
((
<!JYsJ' JIc:o,F JV_`ceo`oVp J " ) &JX 	#	/">4>>%#8977@@ Ic:o6 9S*_;U enort~o~e  \#57KM`bs  vG  IW  X

%%
((
<!GYsJ' Gyj7Q G " ) &GR 	#	/">4>>%#8977@@ 
Ic:o6 
iPSU_P_F` 
 -/ACWYln  BS  Uc  et  vE  F SYs$445 S)CIYDY:Z Sbf Stx S  HL S  [_ S  u~  B  DT  T  uU Sj /i-.~t~~m/LMIc3C.C$D SVXhShIi rv   @D   NR   \`   py  z}  O  zO  pP 6 13EG[]p  sD  FW  Yg  ix  zI  KZ  \l  n~  @P  Ra  b W	#'9"9: WyN`I`?a Wim W{ W  OS W  bf W  |E  FI  K]  F]  |^ Wr 3	12>4>>BR3STy6H1H'I iX[]oXoNp y}   GK   UY   cg   w@  AD  FX  AX  wY 6 35GI]_r  uF  HY  [i  kz  |K  M\  ^l  n}  ~ 35GI]_r  uF  HY  [i  kz  |K  M\  ^l  n}  ~  79KMacv  yJ  L]  _m  o~  @O  Q`  a [	#':":; [	#ObJb@c [  lA [  IM [  [_ [  nr [  AE [  [d  eh  j  e  [@ [z 3	12>4>>BR3STy6I1I'J yY\^qYqOr   {P   Y]   fj   tx   BF   V_  `c  ez  `z  V{ 8 ~'8:KL
%%
((
>~y9:i Lyl*+ L	#|:K0L LQZ[^`l[lQm L  ~G  HK  MY  HY  ~Z L ! ; ) &L\ ')%
&~t~~g'>
?!;;DD i\(9: ylIZ?[ `ijmo{j{`|   MV  WZ  \h  Wh  Mi  ):<M`op1)C./ 1ygmmAS7T 1_hiln{i{_| 1  MV  WZ  \i  Wi  Mj 1f )9'()AB3+=!> iPSU\UbUbPbFc nwx{  ~K  yK  oL   \e  fi  kx  fx  \y  )+<>OQ`bqr8YsN23 8yY\^e^k^kYkOl 8t +I)*>4>>)+DE	Ic>.A$B ^ghkmtmzmzhz^{ $   |	  |	,Ic<'( , ,t ,ajknp|k|a} ,\ !y !569S,%67 | W[ ktux  {G  vG  lH " K!35FHY[ij	$Ic9n% $YsI~5N $L !y !56
9S)^4 
IcS\nD] 
 -/ACWYln  BS  Uc  et  vE  GV  Xf  hx  zJ  L[  ]n  p@  BR  Td  fv  xG  H 1i%5 56 1	RUWgRgHh 1  {D  EH  JZ  EZ  {[ 1  kt  ux  zJ  uJ  kK 1f /i-.~t~~n/MNYs4D/D%E W`adfvavWw   JS  TW  Yi  Ti  Jj   zC  DG  IY  DY  zZ  ~'8:KL+-ACVWjqj{j{  CG 99S,./ 9ylAR7S 9Zi 9  LU  VY  [j  Vj  Lk 9v ')%
&~t~~h'?
@)C,="> iPSUaPaFb jy   JS  TW  Yh  Th  Ji " +-ACVW13DFWX LSOObf 49S/12 49K 4ktux  {M  vM  lN 4l -Y+,^T^^K-HI
)C,@"A I[ ktux  {M  vM  lN   K!57JL]^	2	#y.) 23	>9R 2h !y !56
yi8 
	RUW`R`Ha 
 :13GI\^o  rC  ES  T
%%
((
:uF9S(]# F9S(]3K F  ) &FP i~t~~c2333<< 
)CM2 
)CQYMBZ 
 K!35IK^`q  tE  GU  V	
%%
((
;EIc9n% EYsI~5N E   ) &EN !y !5655>> 
9S)^4 
IcS\nD] 
 \#57HJ[]km|  N  P_  ao  qA  CS  Ue  gv  w

%%
((
>~w78gCYsJ' CIc:o,F CV_`ceo`oVp C  9 ) &CJ 	#	/">4>>%#8977@@ Ic:o6 9S*_;U enort~o~e  ~'9;OQdfw  zK  M[  ]l  n}  N  P^  `p  rB  DS  Uf  hx  zJ  L\  ^n  p  @+_oNUyl*+ U9S/=Q3R U^b Urv U  MV  WZ  \h  Wh  Mi Un ')%
&~t~~g'>
?i\(9: )CQ`L`Ba nr   ~B   R[  \_  am  \m  Rn * m%79MObdu  xI  KY  [j  l{  }L  N\  ^n  p@  BQ  Sd  fv  xH  JZ  \l  n}  ~)?OLUi[() U3;N1O U[_ Uos U  JS  TW  Yd  Td  Je Un 
%#	$^T^^F%;	<YsK'78 	#~J]@^ ko z~   OX  Y\  ^i  Yi  Oj * ##=?QSdfw  zH  I %&C_Vef IIc+C&CD IIVY[vVvLw I  DH I  X\ I  r{  |  AY  |Y  rZ IV ?i =>~t~~Nb?cd 9S:R5R+S [deh  kF  fF  \G   TX   cg   w@  AD  F^  A^  w_ *   7/Z 13DFWYhjyz =)C)>$>? =yQTVkQkGl =  xA  BE  GY  BY  xZ =  jn =  DM  NQ  Se  Ne  Df =~ 3	12>4>>.3QR38M3M)N V_`cez`zV{   GP  QT  Vh  Qh  Gi   z~   NW  X[  ]o  Xo  Np $ ~'9;LN_aop
%%
((
>~y9:i >yl*+ >9S,EV;W > ! ; ) &>@ ')%
&~t~~g'>
?!;;DD 
i\(9: 
)TWYeTeJf 
 :13GI\^o  rC  ES  Ud  fu  wF  HV  Xh  jz  |L  N]  ^(9S(]# (	#x-(@ (PYZ]_gZgPh (T i~t~~c23)CM2 yh7O _hilnviv_w  );=QSfhy  |M  O]  ^))C./ )Ic=>P4Q )ajknp}k}a~ )V )9'(
)CD3+=!> 9SR_M_C` pyz}  @M  {M  qN    x	
:YsJ' :Ic:o,F :ae :  {D  EH  JQ  JV  JV  EV  {W :x 	#	/">4>>%#89Ic:o6 9S*_;U qu   FO  PS  U\  Ua  Ua  Pa  Fb $ :13DFWYgh
%%
((
::u-.eC9S(]# C9S(]3K C  / ) &CJ i~t~~c2333<< 
)CM2 
)CQYMBZ 
 K!35FHY[ij	
%%
((
;K01f<Ic9n% <YsI~5N <  2 ) &<| !y !5655>> 
9S)^4 
IcS\nD] 
 m%79JL]_mn$i[() $3CS9T $L 
%#	$^T^^F%;	<
YsK'78 
	RUWbRbHc 
 13EG[]p  sD  FW  Yg  ix  zI  KZ  \j  l|  ~N  P_  ar  tD  FV  Xh  jz  |K  L  7/Z 4)C);$;< 4IcShNhDi 4uy 4  PY  Z]  _q  Zq  Pr 4l 3	12>4>>.3QR38J3J)K S\]`bw]wSx   FJ   Zc  dg  i{  d{  Z| " :13GI\^o  rC  ES  T?9S(]# ?9S(]3K ?B i~t~~c23
)CM2 
)CQYMBZ 
 \#57KM`bs  vG  IW  X

%%
((
<\734gJYsJ' Jyj7Q J  5 ) &JX 	#	/">4>>%#8977@@ 
Ic:o6 
iPSU_P_F` 
 \#57HJ[]kl
$YsJ' $yj7Q $L 	#	/">4>>%#89
Ic:o6 
iPSU_P_F` 
 );=QSfhy  |M  O]  _n  p  AP  R`  br  tD  FV  Xg  h
%%
((
{mk"@3-. @9S-=O3P @`ijmo|j|`} @ #  ) &@D )9'(	)BC%??HH 	#}*< = )CQ^L^B_ oxy|  L  zL  pM  );=NPacq  tC  ET  Ve  gu  wG  IY  [k  m|  }
%%
((
?J+[\j%(D3-. D9S-=O3P D`ijmo|j|`} D ) ] ) &DL )9'(	)BC%??HH 	#}*< = )CQ^L^B_ oxy|  L  zL  pM  ~'9;LN_ao  rA  CR  Tc  es  uE  GW  Yi  kz  {
%%
((
>9%Lyl*+ L	#|:K0L L\efikrkwkwfw\x L & ) &L\ ')%
&~t~~g'>
?!;;DD i\(9: ylIZ?[ ktux  {B  {G  {G  vG  lH  /1CEVXiky  |K  M\  ^m  o}  O  Qa  cs  uD  E 
%%
((
1LYs$556 L9SJ[E[;\ Lluvy  |C  |H  |H  wH  mI L 2 ) &L\ 1y/01NO - G G P P Ic3D.D$E )TWYjTjJk   |E  FI  KR  KW  KW  FW  |X  ##=?PRcet  wF  G &'EXgh  NU  N[  N[  bf B9S2J-J#K BZcdg  jB  eB  [C B  LU  VY  [b  [h  [h  Vh  Li B  qM B  kt  ux  zV  uV  kW BH ?i =>~t~~Nd?ef )CAY<Y2Z irsv  yQ  tQ  jR   [d  eh  jq  jw  jw  ew  [x   A]   mv  wz  |X  wX  mY $ m%79JL]_mn
%%
((
=mX67hKi[() Ki[8H.I KYbcfhscsYt K   8 ) &KZ 
%#	$^T^^F%;	<99BB YsK'78 YsKGW=X hqru  xC  sC  iD  -/@BST %Ys$445 %)CIYDY:Z %jstw  zJ  uJ  kK %N /i-.~t~~m/LMIc3C.C$D SVXhShIi   zC  DG  IY  DY  zZ  ~'9;LN_aop
%%
((
>~y9:i Jyl*+ J	#|:K0L J\efikwfw\x J ! ; ) &JX ')%
&~t~~g'>
?!;;DD i\(9: ylIZ?[ ktux  {G  vG  lH  K!57JK	~'8:KL=D__SW 5	#y.) 5 5\efikwfw\x 5n !y !56yi8  \efikwfw\x   :13GI\^o  rC  ES  Ud  fu  wF  HV  W&9S(]# &9S(]3K &P i~t~~c23
)CM2 
)CQYMBZ 
 ~'9;OQdfw  zK  M[  \(	#|+, ()C<M2N (^ghkmyhy^z (T ')%
&~t~~h'?
@yl):; 3P\K\A] mvwz  }I  xI  nJ  );=NPacqr
%%
((
 VW+[9G3-. GiW\\HY>Z G : X ) &GR )9'(	)BC%??HH 
	#}*< = 
YWZ\c\h\hWhMi 
 \#57HJ[]kl

%%
((
=JK((3GiZ( G	#w||BS8T G 4 L ) &GR 	#	/">4>>&#9:99BB 
YsJ7 
yQTV]VbVbQbGc 
 \#57HJ[]kl

%%
((
=JK((3GiZ( G	#w||BS8T G 4 L ) &GR 	#	/">4>>&#9:99BB 
YsJ7 
yQTV]VbVbQbGc 
 K!35FHY[ikz  }L  N]  _m  o  AQ  Sc  et  u	
%%
((
;LIc9n% L)CN*C LS\]`bibnbn]nSo L   ) &L\ !y !5655>> 9S)^4 3	>9R bkloqxq}q}l}b~  )+=?PRces  vE  GV  Xg  iw  yI  K[  ]m  o~  
%%
((
l+L)C/0 LYsN?R5S Lclmpryr~r~m~c L , ) &L\ +I)*>4>>*+EF	'AAJJ 3+>!? IcSaNaDb r{|  BI  BN  BN  }N  sO  m%79JL]_mn
%%
((
=mX67hFi[() F3CS9T F   8 ) &FP 
%#	$^T^^F%;	<99BB 
YsK'78 
	RUWbRbHc 
 );=NPacqr-P 4YsM12 4)CDV:W 4^ghkm}h}^~ 4  OX  Y\  ^k  Yk  Ol 4l )9'(	)BCIc=.@$A SVXeSeIf mvwz  }M  xM  nN   ^g  hk  mz  hz  ^{  :13GI\^o  rC  ES  T
%%
((
::u-.eE9S(]# E9S(]3K E  / ) &EN i~t~~c2333<< 
)CM2 
)CQYMBZ 
 \#57KM`bs  vG  IW  X

%%
((
<\734gCYsJ' Cyj7Q C  5 ) &CJ 	#	/">4>>%#8977@@ 
Ic:o6 
iPSU_P_F` 
 %%
((
}-t9S',,./ tIc7<<>O4P t`ijmovo{o{j{`| t . ) &tl -Y+,^T^^K-HI
)CCLL )C,="> 9SRYR^R^M^C_ oxy|  F  K  K  zK  pL  %%
((
}-A9S',,./ AygllIZ?[ A . ) &AF -Y+,^T^^K-HI
)CCLL 
)C,="> 
iX[]d]i]iXiNj 
 %%
((
l+t)C-. t9S',,=N3O t_hilnunznziz_{ t , ) &tl +I)*>4>>*+EF	'AAJJ 3+<!= )CQXQ]Q]L]B^ nwx{  ~E  ~J  ~J  yJ  oK  m%79MObdu  xI  KY  [j  l{  }M  O_  aq  sB  CEyk)* Eyk9I/J EX\ Ept E  DH E  W[ E  qz  {~  @K  {K  qL EN 
%#	$^T^^G%<	=i[(89 i[HX>Y hl {   JN   X\   lu  vy  {F  vF  lG 6 :13DFWYgix  {J  L[  ]k  m}  O  Q`  bs  uE  GW  Yi  k{  }L  Mm_oF4	#x-( 4	#{:J0K 4W[ 4qz{~  AI  |I  rJ 4l i~t~~d34yh7 ykIY?Z gk   |E  FI  KS  FS  |T " ~'9;LN_ao  rA  CR  Tc  es  uE  GW  Yi  kz  {
%%
((
>9%Myl*+ M	#|:K0L M\efikwfw\x M & ) &M^ ')%
&~t~~g'>
?!;;DD i\(9: ylIZ?[ ktux  {G  vG  lH  K!35IK^`q  tE  GU  Wf  hw  yH  JX  Zj  l|  ~M  O`  br  tD  FV  Xh  jy  z	~H4	#y.) 43;L1M 4Y] 4s|  ~A  CL  ~L  tM 4l !y !56yi8 	#|J[@\ im   ~G  HK  MV  HV  ~W " :13DFWYgix  {J  L[  ]k  m}  O  Q`  bs  uE  GW  Yi  k{  }L  Mm_oF4	#x-( 4	#{:J0K 4W[ 4qz{~  AI  |I  rJ 4l i~t~~d34yh7 ykIY?Z gk   |E  FI  KS  FS  |T " ~'9;LN_ao  rA  CR  Tc  es  uE  GW  Yi  kz  {
%%
((
>9%Pyl*+ P	#|:K0L P\efikwfw\x P & ) &Pd ')%
&~t~~g'>
?!;;DD i\(9: ylIZ?[ ktux  {G  vG  lH  :13DFWYgiw  zI  KZ  [+9S(]# +	#x-(@ +PYZ]_gZgPh +Z i~t~~c23)CM2 yh7O _hilnviv_w  :13GI\^o  rC  ES  Ud  fu  wF  HV  Xh  jz  |L  N]  ^(9S(]# (	#x-(@ (PYZ]_gZgPh (T i~t~~c23)CM2 yh7O _hilnviv_w  );=QSfhy  |M  O]  ^()C./ (Ic=>P4Q (ajknp}k}a~ (T )9'(
)CD3+=!> 9SR_M_C` pyz}  @M  {M  qN  \#57HJ[]kl
$YsJ' $yj7Q $L 	#	/">4>>%#89
Ic:o6 
iPSU_P_F` 
 :13GI\^o  rC  ES  Ud  fu  wF  HV  W
%%
((
?J'>9S(]# >9S(]3K > ( ) &>@ i~t~~c2333<< 
)CM2 
)CQYMBZ 
 )+<>OP
%%
((
E9S.01 EynAT7U Eenor  uC  pC  fD E  ) &EN +I)*>4>>*+EF	'AAJJ )C,?"@ iPSUcPcFd t}  B  DR  R  uS    ~	13-. 19S-=O3P 1ko 1  EN  OR  T[  T`  T`  O`  Ea 1f )9'(	)BC	#}*< = )CQ^L^B_ {   PY  Z]  _f  _k  _k  Zk  Pl $ )+<>OP
%%
((
!1; ?@k"E3./ EIc>>Q4R Ebkloql  cA E # A ) &EN +I)*>4>>)+DE	%??HH 	#~*= > 9SR`M`Ca qz{~  AO  |O  rP  :13GI\^o  rC  ES  Ud  fu  wF  HV  W.Ic8m$ .3=)A .QZ[^`h[hQi .` i~t~~d349S(]3 	#x-8P `ijmowjw`x  K!35IK^`q  tE  GU  Wf  hw  yH  JX  Zj  l|  ~M  O`  br  tD  FV  Xh  jy  z	~H4	#y.) 43;L1M 4Y] 4s|  ~A  CL  ~L  tM 4l !y !56yi8 	#|J[@\ im   ~G  HK  MV  HV  ~W   %;K$:$: *%, !
 (//UWgiy  |K  M^  `p  (q $)01Y[km}  @O  Qb  dt  *u &K)C9]4]*^ Kktux  {B  {J  {J  vJ  lK K  Xa  be  gn  gv  gv  bv  Xw K  Ci KZ MY'KL^T^^\zM{| 3HlCl9m   {D  EH  JQ  JY  JY  EY  {Z   gp  qt  v}  vE  vE  qE  gF   Rx   -k,, 
 13CEUWfhy  |L  M 13CEUWfhy  |L  M !";=MO_ap  sD  FV  W  ah  ao  ao  vz :Ys$667 :IcK]F]<^ :gpqtv}  wF  wF  rF  hG :  PY  Z]  _f  _n  _n  Zn  Po :  xA  BE  GN  GV  GV  BV  xW :  `i  jm  ov  o~  o~  j~  ` :  I` :x 1y/01NOIc3E.E$F 9UXZlUlKm v  AD  FM  FU  FU  AU  wV   _h  il  nu  n}  n}  i}  _~   GP  QT  V]  Ve  Ve  Qe  Gf   ox  y|  ~E  ~M  ~M  yM  oN   Yp ( 0//!# 
   79IK[]ln  BR  S  79IK[]ln  BR  S $%ACSUegv  yJ  L\  ] !()IK[]mo~  AR  Td  "e  nu  n|  n|  OT  gl  Y`  Yg  Yg  nr X3(=#=> X9SRgMgCh Xqz{~  AH  AP  AP  |P  rQ X  Zc  dg  ip  ix  ix  dx  Zy X  BK  LO  QX  Q`  Q`  L`  Ba X  js  tw  y@  yH  yH  tH  jI X  Sm X  JN X  bf X  zX Xt 7)56~t~~FW7XY	#7L2L(M R[\_av\vRw   AJ  KN  PW  P_  P_  K_  A`   ir  sv  x  xG  xG  sG  iH   QZ  [^  `g  `o  `o  [o  Qp   yB  CF  HO  HW  HW  CW  yX   c}   LP   _c   rP < -k,, 
 13CEUWfhy  |L  M 13CEUWfhy  |L  M !";=MO_ap  sD  FV  W  ah  ao  ao  vz :Ys$667 :IcK]F]<^ :gpqtv}  wF  wF  rF  hG :  PY  Z]  _f  _n  _n  Zn  Po :  xA  BE  GN  GV  GV  BV  xW :  `i  jm  ov  o~  o~  j~  ` :  I` :x 1y/01NOIc3E.E$F 9UXZlUlKm v  AD  FM  FU  FU  AU  wV   _h  il  nu  n}  n}  i}  _~   GP  QT  V]  Ve  Ve  Qe  Gf   ox  y|  ~E  ~M  ~M  yM  oN   Yp * !!9?O\ 35FHY[jl{| ?Ic7==&89 ?9SRhMhCi ?qz{~  AW  |W  rX ?  cl  mp  rE  mE  cF ?  VZ ?  py  z}  R  zR  pS ?B 534^T^^O5TU9S'--5G+H R[\_aw\wRx   AJ  KN  Pf  Kf  Ag   r{  |  AT  |T  rU   fj   zC  DG  I\  D\  z] & );=NPacq  tC  ET  Ve  gu  wG  IY  Z5)C./ 5	#}BT8U 5^ghkmzhz^{ 5  LU  VY  [h  Vh  Li 5n 	#	/">4>>&#9:3+=!> yQTVcQcGd mvwz  }J  xJ  nK   [d  eh  jw  ew  [x  K!57JK	~'8:KL=D__SW 5	#y.) 5 5\efikwfw\x 5n !y !56yi8  \efikwfw\x   ~'9;OQdfw  zK  M[  ]l  n}  N  P^  `p  rB  DT  Ve  f
%%
((
9B	#|+, B3;L1M B]fgjlxgx]y B  ) &BH ')%
&~t~~h'?
@#==FF yl):; 	#|J[@\ luvy  |H  wH  mI  +-?AUWjl}  @Q  Sa  cr  tC  ET  Vd  e
%%
((
"3\!BCl#>)C01 >3P_K_A` > $ D ) &>@ -Y+,^T^^J-GH
'AAJJ 
3+?!@ 
PYZ]_nZnPo 
 35GI]_r  uF  HY  [i  j (y&9!9: (	#ObJb@c (s|  ~A  CV  ~V  tW (T 534^T^^O5TUi5H0H&I yY\^qYqOr   CL  MP  Re  Me  Cf  4[33< " 
 !((GIY[km|  P  Rb  !c 2	#/L*L M 2ZcdgipixixdxZy 2  GP  QT  V]  Ve  Ve  Qe  Gf 2h ?i =>~t~~Nb?cd y>[9[/\ irsvx  yH  yH  tH  jI   V_  `c  el  et  et  `t  Vu  (>{'='=#< (" $
 &--QSceu  xG  IZ  \l  &m "7Ic;]6],^ 7ktux  {B  {J  {J  vJ  lK 7  Xa  be  gn  gv  gv  bv  Xw 7  IN 7r !S	*Q RSaSWSaSa  cC  TD  !E 9SJlEl;m   {D  EH  JQ  JY  JY  EY  {Z   gp  qt  v}  vE  vE  qE  gF   X]   +K***, 
 57GIY[jl}  @P  Q  !9;KM]_n  qB  DT  U Bi%9 9: ByQTV]VeVeQeGf Bs|  ~A  CJ  CR  CR  ~R  tS B  kt  ux  zA  zI  zI  uI  kJ B  bk  lo  qx  q@  q@  l@  bA B  Mc BH -Y+,^T^^J-GH
Ys4H/H%I V_`celetet`tVu   CL  MP  RY  Ra  Ra  Ma  Cb   zC  DG  IP  IX  IX  DX  zY   qz  {~  @G  @O  @O  {O  qP   \r " 5k44*, 
 $$?AQScet  wH  JZ  [ #*+MO_aq  tC  EV  Xh  $i   ~E  ~L  ~L  SW >)C1J,J"K >XabegngvgvbvXw >  EN  OR  T[  Tc  Tc  Oc  Ed >  |E  FI  KR  KZ  KZ  FZ  |[ >  s|  }@  BI  BQ  BQ  }Q  sR >  ]} >@ Ay!?@PfAgh 3@Y;Y1Z gpqtv}  wF  wF  rF  hG   T]  ^a  cj  cr  cr  ^r  Ts   KT  UX  Za  Zi  Zi  Ui  Kj   BK  LO  QX  Q`  Q`  L`  Ba   mM ( K!35FHY[ij	
%%
((
;K01fFIc9n% FYsI~5N F  2 ) &FP !y !5655>> 
9S)^4 
IcS\nD] 
 \#57KM`bs  vG  IW  Yh  jy  {J  LZ  [
'YsJ' 'yj7Q 'R 	#	/">4>>%#89
Ic:o6 
iPSU_P_F` 
 \#57KM`bs  vG  IW  X
&YsJ' &yj7Q &P 	#	/">4>>%#89
Ic:o6 
iPSU_P_F` 
 )+=?SUhj{  ~O  Q_  `()C/0 (i^@S6T (dmnq  tB  oB  eC (T +I)*>4>>*+EF	3+>!? YsTbObEc s|  ~A  CQ  ~Q  tR  +-?ARTegu  xG  IX  Zi  ky  {K  M]  _o  q@  A !9?O\ 
%%
((
#5}"EFm$_i_ 45 _IcSiNiDj _  {D  EH  JY  EY  {Z _ % G ) &_B -Y+,^T^^K-HI
)CCLL YsO/C%D S\]`bx]xSy   JS  TW  Yh  Th  Ji  /1CEVXiky  |K  M\  ^m  o}  O  Qa  cs  uD  E "#=P_` &'EXgh W3(9#9: WSVXpSpIq W  BK  LO  Qm  Lm  Bn W  ~G  HK  M^  H^  ~_ Wr 1y/01OP	#7H2H(I Xabegb  YA   QZ  [^  `|  [|  Q}   MV  WZ  \m  Wm  Mn   -/ACWYln  BS  Uc  et  vE  GV  Xf  hx  zJ  L[  ]n  p@  BR  Td  fv  xG  H !";_o^ 
%%
((
$7#HIn%by&6!67 biPSUlPlFm b  ~G  HK  M]  H]  ~^ b & J ) &bH /i-.~t~~l/KL+EENN i5E0E&F U^_bd{_{U|   MV  WZ  \l  Wl  Mm  +-?ARTegu  xG  IX  Zi  ky  {K  M]  _o  q@  A !9?O\ 
%%
((
#5}"EFm$_i_ 45 _IcSiNiDj _  {D  EH  JY  EY  {Z _ % G ) &_B -Y+,^T^^K-HI
)CCLL YsO/C%D S\]`bx]xSy   JS  TW  Yh  Th  Ji  /1CEVXiky  |K  M\  ^m  o}  O  Qa  cs  uD  E "#=P_` &'EXgh W3(9#9: WSVXpSpIq W  BK  LO  Qm  Lm  Bn W  ~G  HK  M^  H^  ~_ Wr 1y/01OP	#7H2H(I Xabegb  YA   QZ  [^  `|  [|  Q}   MV  WZ  \m  Wm  Mn   -/ACWYln  BS  Uc  et  vE  GV  Xf  hx  zJ  L[  ]n  p@  BR  Td  fv  xG  H !";_o^ 
%%
((
$7#HIn%`y&6!67 `iPSUlPlFm `  ~G  HK  M]  H]  ~^ ` & J ) &`D /i-.~t~~l/KL+EENN i5E0E&F U^_bd{_{U|   MV  WZ  \l  Wl  Mm  13EG[]p  sD  FW  Yg  ix  zI  KZ  \j  l|  ~N  P_  ar  tD  FV  Xh  jz  |K  L #$?Rab  '(GZi j N)C);$;< N9UXZsUsKt N  EN  OR  Tq  Oq  Er N  BK  LO  Qc  Lc  Bd N` 3	12>4>>/3RS38J3J)K Zcdg  jC  eC  [D   T]  ^a  c@  ^@  TA   QZ  [^  `r  [r  Qs   +-?AUWjl}  @Q  Sa  cr  tC  ET  Vd  fv  xH  JY  [l  n~  @P  Rb  dt  vE  F !9?O\ 
%%
((
#5}"EFm$_i_ 45 _IcSiNiDj _  {D  EH  JY  EY  {Z _ % G ) &_B -Y+,^T^^K-HI
)CCLL YsO/C%D S\]`bx]xSy   JS  TW  Yh  Th  Ji  /1CEY[n  qB  DU  We  gv  xG  IX  Zh  jz  |L  N]  _p  rB  DT  Vf  hx  zI  J "#=P_` &'EXgh <3(9#9: <SVXpSpIq <  BK  LO  Qm  Lm  Bn <  ~G  HK  M^  H^  ~_ <| 1y/01OP	#7H2H(I Xabegb  YA   QZ  [^  `|  [|  Q}   MV  WZ  \m  Wm  Mn     z	OiW\\ 12 OykAQ7R OW`adfqaqWr O  CL  MP  R]  M]  C^ Ob 
%#	$^T^^F%;	<YsGLL/@%A iPSU`P`Fa fops  vA  qA  gB   R[  \_  al  \l  Rm    ~	&3#45 &)CDV:W &\efikxfx\y &  JS  TW  Yf  Tf  Jg &P )9'(	)BC	#w||2C(D SVXeSeIf ktux  {H  vH  lI   Yb  cf  hu  cu  Yv  ~'9;OQdfw  zK  M[  \&yl*+ &9S,EV;W &P ')%
&~t~~g'>
?
i\(9: 
)TWYeTeJf 
 -/ACWYln  BS  Uc  d (Ic#334 ()CIYDY:Z (jstw  zJ  uJ  kK (T /i-.~t~~l/KL9S2B-B#C SVXhShIi   zC  DG  IY  DY  zZ  K!35IK^`q  tE  GU  Wf  hw  yH  JX  Y	,Ic9n% ,YsI~5N ,\ !y !56
9S)^4 
IcS\nD] 
 :13GI\^o  rC  ES  T
%%
((
:uE9S(]# E9S(]3K E  ) &EN i~t~~c2333<< 
)CM2 
)CQYMBZ 
 K!35IK^`q  tE  GU  V	
%%
((
;EIc9n% EYsI~5N E   ) &EN !y !5655>> 
9S)^4 
IcS\nD] 
 57HJ[\  bi  bq  bq  x| 4iW]] 23 4)CQXQ^Q^L^B_ 4gpqtv}  wD  wD  rD  hE 4  Ma 4  AJ  KN  Pd  Kd  Ae 4l /i-.~t~~l/KLYsGMM/A%B QZ[^`g`m`m[mQn v  AD  FM  FS  FS  AS  wT   ]q   AJ  KN  Pd  Kd  Ae $ !!9?O\ 35FHY[jl{| @YsGMM'9: @IcSiNiDj @  zC  DG  IP  IV  IV  DV  zW @  _h  il  nD  iD  _E @  PY  Z]  _r  Zr  Ps @  CG @  ]f  gj  l  g  ]@ @D 534^T^^O5TUIc7==6H,I S\]`bx]xSy   IR  SV  X_  Xe  Xe  Se  If   nw  x{  }S  xS  nT   _h  il  nA  iA  _B   SW   gp  qt  vI  qI  gJ ( 13EGXY 13EGXY Ii%7 78 IYsL^G^=_ Imq I  FJ I  ^b I  vz I  PY  Z]  _f  _n  _n  Zn  Po IV 1y/01OPYs4F/F%G IVY[mVmLn   ~B   QU   dh   w{   KT  UX  Za  Zi  Zi  Ui  Kj 8 !!9;MO`bs  vD  E #$?Rab #*+M`o#p  8i-C(CD 8yY\^wYwOx 8  HQ  RU  Ww  Rw  Hx 8  JN 8  dm  nq  sI  nI  dJ 8t ;I9:>4>>J];^_ Ys<R7R-S ^ghk  nG  iG  _H   W`  ad  fF  aF  WG   Z^   nw  x{  }S  xS  nT & %%ACUWhj{  ~L  M  '(GZi j './UWfhw'x $39S2L-L#M 3Xabe  hE  cE  YF 3  U^  _b  dH  _H  UI 3  Xa  be  gn  gt  gt  bt  Xu 3  EN  OR  Tn  On  Eo 3j C	"AB>4>>RjCkl )CA[<[2\ gpqt  wT  rT  hU   dm  nq  sW  nW  dX   gp  qt  v}  vC  vC  qC  gD   T]  ^a  c}  ^}  T~   "8!7!7&'") 
  ''EGY[ln  BP   Q ")*K_^m"n )01Y[jl{)| &9i5Q0Q&R 9]fgj  mL  hL  ^M 9  \e  fi  kQ  fQ  \R 9  gp  qt  v}  vC  vC  qC  gD 9v G)$EF~t~~VqGrs YsD`?`5a luvy  |[  w[  m\   kt  ux  z`  u`  ka   v  @C  EL  ER  ER  @R  vS $ )00WYkm~  AR  Tb  )c %+23]_np  ,A (3:;mo~  AP  4Q 029:km|  N  3O /?	#?d:d0e ?pyz}  @h  {h  qi ?  xA  BE  Gv  Bv  xw ?  GP  QT  VF  QF  GG ?  Y] ?  s|  }@  Bg  }g  sh ?B $Y9-W#XYgY]YgYg  iN  ZO  $P  yNsIs?t   @I  JM  Ow  Jw  @x   GP  QT  VE  QE  GF   V_  `c  eU  `U  VV   im   }F  GJ  Lq  Gq  }r , "";=OQbdu  xF  G $%A?Tcd $+,OQ`bq$r !7	#/F*F G 7R[\_a{\{R| 7  LU  VY  [|  V|  L} 7  OS 7  ir  sv  xO  sO  iP 7r =Y;<^T^^La=bc y>U9U/V ajkn  qK  lK  bL   [d  eh  jK  eK  [L   _c   s|  }@  BY  }Y  sZ & &&CEWYjl}  @N  O !()I?\k!l (/0WYhjy(z %3Ys4O/O%P 3[deh  kI  fI  \J 3  Yb  cf  hM  cM  YN 3  ]f  gj  ls  ly  ly  gy  ]z 3  JS  TW  Yt  Tt  Ju 3j E#CD^T^^TnEop IcC^>^4_ jstw  zX  uX  kY   hq  ru  w\  r\  h]   lu  vy  {B  {H  {H  vH  lI   Yb  cf  hC  cC  YD " #9+"8"8&'#) 
 !((GI[]n  qB  DR  !S #*+M`o#p  *12[]ln}*~ '9	#7T2T(U 9`ijm  pP  kP  aQ 9  `i  jm  oV  jV  `W 9  lu  vy  {B  {H  {H  vH  lI 9v I9%GHXuIvw yFcAc7d oxy|  _  z_  p`   ox  y|  ~e  ye  of   {D  EH  JQ  JW  JW  EW  {X $ *11Y[m  pA  CT  Vd  *e &,34_ap  sB  -C )4;<o  rA  CR  5S 13:;mo~  AP  4Q 0A)CAg<g2h As|  ~A  Cl  ~l  tm A  |E  FI  K{  F{  || A  LU  VY  [L  VL  LM A  _c A  yB  CF  Hn  Cn  yo AF %[I.Y$Z[i[_[i[i  kR  \S  %T !3PvKvAw   CL  MP  R{  M{  C|   KT  UX  ZJ  UJ  KK   [d  eh  j[  e[  [\   os   CL  MP  Rx  Mx  Cy ,   79KM^`q  tB  DS  Ud  fu  wE  GW  Yi  k{  }L  M "#=P_` ")*K_^m"n QYs,A'AB QYWZ\tWtMu Q  EN  OR  Ts  Os  Et Q  FJ Q  `i  jm  oD  jD  `E Qf 9978HZ9[\ Ic;P6P,Q \efi  lD  gD  ]E   T]  ^a  cB  ^B  TC   VZ   js  tw  yN  tN  jO & $$?ASUfhy  |J  K &'EXgh &-.SUdfu&v #3)C1J,J"K 3V_`c  fB  aB  WC 3  R[  \_  aD  \D  RE 3  T]  ^a  cj  cp  cp  ^p  Tq 3  AJ  KN  Pi  Ki  Aj 3j Ay!?@PgAhi 3@Y;Y1Z enor  uQ  pQ  fR   aj  kn  pS  kS  aT   cl  mp  ry  r  r  m  c@   PY  Z]  _x  Zx  Py   !7 6 6&'!) 
 &&CEWYjl}  @N  O !()I?\k!l (/0WYhjy(z %9Ys4O/O%P 9[deh  kI  fI  \J 9  Yb  cf  hM  cM  YN 9  cl  mp  ry  r  r  m  c@ 9v E#CD^T^^TnEop IcC^>^4_ jstw  zX  uX  kY   hq  ru  w\  r\  h]   r{  |  AH  AN  AN  |N  rO $ (//UWik|  P  R`  bq  sB  DS  Uc  eu  wG  IY  [j  (k $*12[]ln}*~ '29:km|  N  3O /189ikz  }L  2M .Ty>b9b/c Tnwx{  ~e  ye  of T  u~  B  Dr  r  us T  CL  MP  RA  MA  CB T  TX T  nw  x{  }a  xa  nb Tl #W),U"VWeW[WeWe  gK  XL  #M iMqHq>r   ~G  HK  Mt  Ht  ~u   DM  NQ  SA  NA  DB   R[  \_  aP  \P  RQ   dh   xA  BE  Gk  Bk  xl , K!35IK^`q  tE  GU  V	&Ic9n% &YsI~5N &P !y !56
9S)^4 
IcS\nD] 
 );=QSfhy  |M  O]  ^(3-. (Ic=>P4Q (ajknp}k}a~ (T )9'(	)BC	#}*< = 9SR_M_C` pyz}  @M  {M  qN  m%79MObdu  xI  KY  [j  l{  }L  N\  ^n  p@  BR  Tc  d
%%
((
=(#Ai[() A3CS9T A $ ) &AF 
%#	$^T^^F%;	<99BB 
YsK'78 
	RUWbRbHc 
 !!9;MOcex  {L  N_  ao  q@  BQ  R 
%%
((
$*CEY)Z[*+@)C)?$?@ @YsTjOjEk @  |E  FI  Ka  Fa  |b @ , \ ) &@D ;I9:>4>>J\;]^ %7%Q%Q%Z%Z "38N3N)O T]^acy^yTz   KT  UX  Zp  Up  Kq  :13GI\^o  rC  ES  Ud  fu  wF  HV  Xh  jz  |L  N]  ^q9S(]# q	#x-(@ qPYZ]_gZgPh qf i~t~~c23)CM2 yh7O _hilnviv_w  :13GI\^o  rC  ES  Ud  fu  wF  HV  Xh  jz  |K  M^  `p  rB  DT  Vf  hw  xm_oF4	#x-( 4	#{:J0K 4W[ 4qz{~  AI  |I  rJ 4l i~t~~d34yh7 ykIY?Z gk   |E  FI  KS  FS  |T " :13GI\^o  rC  ES  T
%%
((
:uF9S(]# F9S(]3K F  ) &FP i~t~~c2333<< 
)CM2 
)CQYMBZ 
 K!35IK^`q  tE  GU  V	
%%
((
;	6*FIc9n% FYsI~5N F + ) &FP !y !5655>> 
9S)^4 
IcS\nD] 
 );=QSfhy  |M  O]  ^(3-. (Ic=>P4Q (ajknp}k}a~ (T )9'(	)BC	#}*< = 9SR_M_C` pyz}  @M  {M  qN  -/ACWYln  BS  Uc  et  vE  GV  Xf  hx  zJ  L\  ^m  n 
%%
((
=EIc#334 E3HXCX9Y Eirsv  yI  tI  jJ E  ) &EN /i-.~t~~l/KL+EENN 9S2B-B#C 	RUWgRgHh   yB  CF  HX  CX  yY  -/ACTVgiw  zI  KZ  [ 
%%
((
=CIc#334 C3HXCX9Y Cirsv  yI  tI  jJ C  ) &CJ /i-.~t~~l/KL+EENN 9S2B-B#C 	RUWgRgHh   yB  CF  HX  CX  yY  "";=OQbdu  xF  HW  Yh  jy  {I  K[  ]m  o  AP  Q !()I?\k!l %,-QSbds%t "
%%
((
&,GI_+`a,-ly.E)EF lU^_b  eC  `C  VD l  T]  ^a  cE  ^E  TF l  V_  `c  e|  `|  V} l . b ) &l\ =Y;<^T^^L`=ab ';'U'U'^'^ $i=T8T.U dmnq  tR  oR  eS   cl  mp  rT  mT  cU   en  or  tK  oK  eL   "";=OQbdu  xF  HW  Yh  jy  {I  K[  ]m  o  AP  Q !()I?\k!l %,-QSbds%t "
%%
((
&,GI_+`a,-hy.E)EF hU^_b  eC  `C  VD h  T]  ^a  cE  ^E  TF h  V_  `c  e|  `|  V} h . b ) &hT =Y;<^T^^L`=ab ';'U'U'^'^ $i=T8T.U dmnq  tR  oR  eS   cl  mp  rT  mT  cU   en  or  tK  oK  eL   ##=?QSgi|  P  Rc  es  uD  FU  Wf  hv  xH  JZ  \k  m~  @P  Rb  dt  vF  HW  X ")*K_^m"n &-.SUdfu&v #
%%
((
'-IKb,cd-.h	#/G*G H hW`ad  gF  bF  XG h  W`  ad  fI  aI  WJ h  Zc  dg  iA  dA  ZB h / e ) &hT ?i =>~t~~Nc?de (=(W(W(`(` %y>V9V/W fops  vU  qU  gV   fo  ps  uX  pX  fY   ir  sv  xP  sP  iQ   "";=OQegz  }N  Pa  cq  sB  DS  Ud  ft  vF  HX  Zi  k|  ~N  P`  br  tD  FU  V !()I?\km|!} %,-QSbds%t "
%%
((
&,GI_+`a,-iy.E)EF iU^_b  eC  `C  VD i  T]  ^a  cE  ^E  TF i  V_  `c  e|  `|  V} i . b ) &iV =Y;<^T^^L`=ab ';'U'U'^'^ $i=T8T.U dmnq  tR  oR  eS   cl  mp  rT  mT  cU   en  or  tK  oK  eL   \#57KM`bs  vG  IW  X
%YsJ' %Ic:o,F %V_`ceo`oVp %N 	#	/">4>>%#89Ic:o6 9S*_;U enort~o~e  ~'9;OQdfw  zK  M[  \%yl*+ %	#|:K0L %\efikwfw\x %N ')%
&~t~~g'>
?i\(9: ylIZ?[ ktux  {G  vG  lH  \#57KM`bs  vG  IW  X

%%
((
<=YsJ' =Ic:o,F =V_`ceo`oVp =  ) &=~ 	#	/">4>>%#8977@@ Ic:o6 9S*_;U enort~o~e  K!24EF	
%%
((
;K01fBIc9n% B)CN*C BS\]`bk]kSl B  2 ) &BH !y !5655>> 9S)^4 3	>9R bkloqzlzb{ rT   