ó
rÎ\Zc           @   sp   d  d l  Z  d  d l Z d e  j j f d „  ƒ  YZ d e  j j f d „  ƒ  YZ d e  j j f d „  ƒ  YZ d S(   iÿÿÿÿNt   Identityc           B   s   e  Z d  „  Z RS(   c         C   s   | S(   N(    (   t   selft   input(    (    sP   /data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/ops/basic_ops.pyt   forward   s    (   t   __name__t
   __module__R   (    (    (    sP   /data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/ops/basic_ops.pyR       s   t   SegmentConsensusc           B   s&   e  Z d  d „ Z d „  Z d „  Z RS(   i   c         C   s   | |  _  | |  _ d  |  _ d  S(   N(   t   consensus_typet   dimt   Nonet   shape(   R   R   R   (    (    sP   /data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/ops/basic_ops.pyt   __init__   s    		c         C   s^   | j  ƒ  |  _ |  j d k r< | j d |  j d t ƒ } n |  j d k rT | } n d  } | S(   Nt   avgR   t   keepdimt   identity(   t   sizeR
   R   t   meanR   t   TrueR	   (   R   t   input_tensort   output(    (    sP   /data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/ops/basic_ops.pyR      s    	c         C   sZ   |  j  d k r8 | j |  j ƒ t |  j |  j ƒ } n |  j  d k rP | } n d  } | S(   NR   R   (   R   t   expandR
   t   floatR   R	   (   R   t   grad_outputt   grad_in(    (    sP   /data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/ops/basic_ops.pyt   backward   s    )	(   R   R   R   R   R   (    (    (    sP   /data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/ops/basic_ops.pyR   
   s   	t   ConsensusModulec           B   s   e  Z d  d „ Z d „  Z RS(   i   c         C   s;   t  t |  ƒ j ƒ  | d k r% | n d |  _ | |  _ d  S(   Nt   rnnR   (   t   superR   R   R   R   (   R   R   R   (    (    sP   /data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/ops/basic_ops.pyR   )   s    c         C   s   t  |  j |  j ƒ | ƒ S(   N(   R   R   R   (   R   R   (    (    sP   /data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/ops/basic_ops.pyR   .   s    (   R   R   R   R   (    (    (    sP   /data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/ops/basic_ops.pyR   '   s   (	   t   torcht   matht   nnt   ModuleR    t   autogradt   FunctionR   R   (    (    (    sP   /data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/ops/basic_ops.pyt   <module>   s   