
    DPh,                     \   d dl Z d dlZd dlmZ d dlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZ d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'i dedededed ed!ed"ed#ed$ed%ed&ed'ed(ed)ed*e d+e!d,e$e"e#e%e&e'dd-Z(y).    N)numpy_helper)zero_ops   )
counter_matmulcalculate_zero_opscalculate_convcounter_mulcalculate_normcounter_powcounter_sqrtcounter_divcalculate_softmaxcalculate_avgpoolc                     |j                   d   }|j                   d   }| |   }| |   }t        j                  |dd |d         }|j                  d   }t	        ||dd        }|||fS )Nr   r   )inputnpappendoutputr   )	dictionnodeinput1input2
input1_dim
input2_dimout_sizeoutput_namemacss	            cC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\thop/vision/onnx_counter.pyonnx_counter_matmulr!      su    ZZ]FZZ]FJJyyAb):b>:H++a.K*hrsm4D;&&    c                 F   t        j                  | |j                  d            j                  t        j                  | |j                  d            j                  k\  r| |j                  d      }n| |j                  d      }|j                  d   }t               }|||fS Nr   r   )r   arrayr   sizer   r   )r   r   r   r   r   s        r    onnx_counter_addr'      s    	xx

1&',,A9O0P0U0UU4::a=)4::a=)++a.KD ;&&r"   c                 ,   d}d}|j                   D ]  }|dz  }	 |dk(  rd}| |j                   d      }n| |j                   d      }|j                  D ]  }|j                  dk(  r|j                  }|j                  dk(  r|j                  }|j                  dk(  r|j                  }	|j                  dk(  r|j                  }
|j                  dk(  s|j                  } | |j                   d      }t        j                  |dt        j                        j                   dz
   |d         }t        j                  |t        j                  |      j                   d        }t        |j                        D ]7  }t        ||   d		|   z  z   
|   ||   dz
  z  z
  dz
  |   z  dz         ||<   9 t        j                  ||      }t        |t        j                  |      t        j                  |      |d         }|j                  d   }|||fS )
Nr   r      kernel_shapestridespads	dilationsgroup   )r   	attributenameintsir   r   r%   r&   rangeintr   prodr   )r   r   dim_biasinput_countr3   
dim_weightattr
dim_kernel
dim_stridedim_paddim_dilr.   	dim_inputoutput_sizehwr   r   s                    r    onnx_counter_convrB   *   s     HKZZq aTZZ]+
TZZ]+
99&J99	!J99iiG99#iiG99FFE  

1&I))!rxx
+000145z!}K 
)RXXj166689	:B277^UQ^#gajJqMA4E&FFJm
1  ))K,K"''*%rww{';Z]ED ++a.K k))r"   c                 D    t               }|j                  d   }dg}|||fS Nr   r   )r   r   )r   r   r   r   r@   s        r    onnx_counter_constantrE   Y   s+    D++a.K#Kk))r"   c                    t        j                  | |j                  d            j                  t        j                  | |j                  d            j                  k\  r| |j                  d      }n| |j                  d      }t	        t        j
                  |            }| |j                  d      }|j                  d   }|||fS r$   )r   r%   r   r&   r	   r6   r   )r   r   
input_sizer   r@   r   s         r    onnx_counter_mulrH   b   s    	xx

1&',,A9O0P0U0UUTZZ]+
TZZ]+
rwwz*+D$**Q-(K++a.Kk))r"   c                     | |j                   d      }t        t        j                  |            }|j                  d   }|}|||fS Nr   r   r
   r   r6   r   r   r   rG   r   r   r@   s         r    onnx_counter_bnrM   m   F    A'J"''*-.D++a.KKk))r"   c                 f    | |j                   d      }t               }|j                  d   }|}|||fS rJ   r   r   r   rL   s         r    onnx_counter_relurQ   u   s=    A'JD++a.KK k))r"   c                 V   d}|j                   D ]K  }d|j                  v r t        j                  |j                        }1d|j                  v s@|j
                  }M | |j                  d      }t               }|j                  d   }|dk(  r|}nt        j                  |      }|||fS )Nr   axeskeepdimsr   )
r0   r1   r   r%   r2   r3   r   r   r   delete)	r   r   keep_dimr:   dim_axisrG   r   r   r@   s	            r    onnx_counter_reducemeanrX      s    HTYYxx		*H499$vvH	  A'JD++a.K1} ii
H5k))r"   c                 f    | |j                   d      }t               }|j                  d   }|}|||fS rJ   rP   rL   s         r    onnx_counter_subrZ      s;    A'JD++a.KKk))r"   c                 r   t        j                  | |j                  d            j                  t        j                  | |j                  d            j                  k\  r| |j                  d      }n| |j                  d      }t	        t        j
                  |            }|j                  d   }|}|||fS r$   )r   r%   r   r&   r   r6   r   rL   s         r    onnx_counter_powr\          	xx

1&',,A9O0P0U0UUTZZ]+
TZZ]+
rwwz*+D++a.KKk))r"   c                     | |j                   d      }t        t        j                  |            }|j                  d   }|}|||fS rJ   )r   r   r   r6   r   rL   s         r    onnx_counter_sqrtr_      sF    A'J
+,D++a.KKk))r"   c                 r   t        j                  | |j                  d            j                  t        j                  | |j                  d            j                  k\  r| |j                  d      }n| |j                  d      }t	        t        j
                  |            }|j                  d   }|}|||fS r$   )r   r%   r   r&   r   r6   r   rL   s         r    onnx_counter_divra      r]   r"   c                     | |j                   d      }t        t        j                  |            }|j                  d   }|}|||fS rJ   rK   rL   s         r    onnx_counter_instancerc      rN   r"   c                     | |j                   d      }|j                  d   j                  }||   }t        j                  |      |z  }t        ||      }|j                  d   }|}|||fS rJ   )r   r0   r3   r   r6   r   r   )	r   r   rG   dim	nfeatures
batch_sizer   r   r@   s	            r    onnx_counter_softmaxrh      so    A'J
..


C3I$y0JY
3D++a.KKk))r"   c                 f    | |j                   d      }t               }|j                  d   }|}|||fS rJ   rP   rL   s         r    onnx_counter_padrj      s=     A'JD++a.KKk))r"   c                    t        t        j                  | |j                  d                  }|j                  d   }d }|j
                  D ]r  }|j                  dk(  r|j                  }|j                  dk(  r|j                  };|j                  dk(  r|j                  }W|j                  dk(  sg|j                  }t | |j                  d      }	|	t        j                        j                   d  }
|{t        |
j                        D ]+  }t        |
|   d||   z  z   ||   z
  |   z  dz         |
|<   - t        j                  |	dt        j                  |      j                    |
      }nqt        |
j                        D ]"  }t        |
|   ||   z
  |   z  dz         |
|<   $ t        j                  |	dt        j                  |      j                    |
      }|||fS Nr   r*   r+   r,   r-   r/   r   )r   r   r6   r   r   r0   r1   r2   r%   r&   r4   r5   r   r   r   r   r   r=   r:   r;   r<   r>   r?   rA   r3   r@   s                r    onnx_counter_averagepoolrn      s   RWWWTZZ]%;<=D++a.KG99&JYY)#JYY& iiGYY+%iiG  

1&I	BHHZ(---/	0BrwwAAWQZ/*Q-?:a=PSTTUBqE  ii	!rxx
/C/H/H.H I2NrwwAAA.*Q-?!CDBqE  ii	!rxx
/C/H/H.H I2Nk))r"   c                     t               }|j                  d   }|j                  d   j                  }| |j                  d      }t        j                  ||dz
     t        j                  ||d              }|||fS rD   )r   r   r0   r3   r   r   r   r6   )r   r   r   r   axisrG   r@   s          r    onnx_counter_flattenrq      ss    D++a.K>>!DA'J))Jtax0"''*TU:K2LMKk))r"   c                     | |j                   d      }| |j                   d      }t        j                  |      |d   z  |d   z   }t        j                  |dd |d         }|j                  d   }|||fS )Nr   r   r   )r   r   r6   r   r   )r   r   rG   r9   r   r@   r   s          r    onnx_counter_gemmrs     s}     A'JA'J77:A.A>D))Jq,jm<K++a.Kk))r"   c                    t               }|j                  d   }d }|j                  D ]r  }|j                  dk(  r|j                  }|j                  dk(  r|j                  };|j                  dk(  r|j                  }W|j                  dk(  sg|j                  }t | |j
                  d      }	|	t        j                        j                   d  }
|{t        |
j                        D ]+  }t        |
|   d||   z  z   ||   z
  |   z  dz         |
|<   - t        j                  |	dt        j                  |      j                    |
      }nqt        |
j                        D ]"  }t        |
|   ||   z
  |   z  dz         |
|<   $ t        j                  |	dt        j                  |      j                    |
      }|||fS rl   )r   r   r0   r1   r2   r   r   r%   r&   r4   r5   r   rm   s                r    onnx_counter_maxpoolru     s    D++a.KG99&JYY)#JYY& iiGYY+%iiG  

1&I	BHHZ(---/	0BrwwAAWQZ/*Q-?:a=PSTTUBqE  ii	!rxx
/C/H/H.H I2NrwwAAA.*Q-?!CDBqE  ii	!rxx
/C/H/H.H I2Nk))r"   c                 f    t               }|j                  d   }| |j                  d      }|}|||fS rJ   r   r   r   r   r   r   r   rG   r@   s         r    onnx_counter_globalaveragepoolry   /  ;    D++a.KA'JKk))r"   c                     |j                   d   j                  }| |j                  d      }|j                  D ]
  }| |   |   } |}||<   |j                  d   }t	               }|||fS rJ   )r0   r3   r   r   r   )	r   r   rp   rG   r3   
dim_concatr@   r   r   s	            r    onnx_counter_concatr}   7  sw     >>!DA'JZZQZ%
 K"K++a.KDk))r"   c                 f    t               }|j                  d   }| |j                  d      }|}|||fS rJ   rw   rx   s         r    onnx_counter_clipr   E  rz   r"   MatMulAddConvMulConstantBatchNormalizationRelu
ReduceMeanSubPowSqrtDivInstanceNormalizationSoftmaxPadAveragePoolMaxPool)FlattenGemmGlobalAveragePoolConcatClipN))torchnumpyr   onnxr   thop.vision.basic_hooksr   	calc_funcr   r   r   r	   r
   r   r   r   r   r   r!   r'   rB   rE   rH   rM   rQ   rX   rZ   r\   r_   ra   rc   rh   rj   rn   rq   rs   ru   ry   r}   r   onnx_operators r"   r    <module>r      s      ,  '	',*^*****&********<*
	*>***!	  
	
 % /  ) 
 
  
 2 # 
  +!" ##$ $7!
/r"   