ó
§§ Yc           @   sÁ   d  d l  Z  d  d l Z d  d l Z e d „ Z e d „ Z e d „ Z e d „ Z	 d d „ Z
 e d d	 „ Z e d
 „ Z e d „ Z e d „ Z e d „ Z d d d „ Z d d d „ Z d S(   iÿÿÿÿNc         C   s?   x8 t  t d |  j ƒ  ƒ ƒ D] } |  j | d | ƒ}  q W|  S(   Ni   t   keepdim(   t   reversedt   ranget   dimt   sum(   t   xR    t   a(    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt
   reduce_sum   s    "c         C   s9   t  j t j |  j ƒ  d ƒ } t |  d | ƒ}  |  | S(   Ni   R    (   t   ftt   reducet   opt   mult   sizeR   (   R   R    t   numel(    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt   reduce_mean   s    c         C   sC   x< t  t d |  j ƒ  ƒ ƒ D] } |  j | d | ƒd }  q W|  S(   Ni   R    i    (   R   R   R   t   min(   R   R    R   (    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt
   reduce_min   s    "c         C   sC   x< t  t d |  j ƒ  ƒ ƒ D] } |  j | d | ƒd }  q W|  S(   Ni   R    i    (   R   R   R   t   max(   R   R    R   (    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt
   reduce_max   s    "gíµ ÷Æ°>c         C   s+   |  d | 9}  t  j d |  d |  ƒ d S(   Ng      ð?i   g      à?(   t   torcht   log(   R   t   eps(    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt   torch_arctanh$   s    g:Œ0âŽyE>c         C   s4   |  | d } t  | d | ƒ} | | 7} | j ƒ  S(   Ni   R    (   R   t   sqrt(   R   t   yR    R   t   d(    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt   l2r_dist)   s    
c         C   s   |  | d } t  | d | ƒS(   Ni   R    (   R   (   R   R   R    R   (    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt   l2_dist0   s    c         C   s#   t  j |  | ƒ } t | d | ƒS(   NR    (   R   t   absR   (   R   R   R    R   (    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt   l1_dist5   s    c         C   s    t  |  |  d | ƒ} | j ƒ  S(   NR    (   R   R   (   R   R    t   norm(    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt   l2_norm:   s    c         C   s   t  |  j ƒ  d | ƒS(   NR    (   R   R   (   R   R    (    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt   l1_norm?   s    g      ð¿g      ð?c         C   s   |  | | | S(   N(    (   R   t   x_mint   x_max(    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt   rescaleC   s    c         C   s!   t  j |  ƒ d d | | | S(   Ni   g      à?(   R   t   tanh(   R   R!   R"   (    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt   tanh_rescaleG   s    (   R   t   operatorR
   t	   functoolsR   t   TrueR   R   R   R   R   R   R   R   R   R    R#   R%   (    (    (    su   /data/vision/torralba/deepscene/small-projects/network_adversarial/pytorch-nips2017-attack-example/attacks/helpers.pyt   <module>   s   