Ë
    ˆ\;jG  ã                   ó°   — d dl mZ d dlZd dlmZmZ g Z G d„ d«      Z G d„ d«      Z	 G d„ d	«      Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Z G d„ d«      Zy)é    )ÚOrderedDictN)ÚProgramÚVariablec                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Ú
VarWrapperc                 óh   — t        |t        «      sJ ‚t        |t        «      sJ ‚|| _        || _        y ©N)Ú
isinstancer   ÚGraphWrapperÚ_varÚ_graph)ÚselfÚvarÚgraphs      úaG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/hapi/static_flops.pyÚ__init__zVarWrapper.__init__   s0   € Ü˜#œxÔ(Ð(Ð(Ü˜%¤Ô.Ð.Ð.ØˆŒ	Øˆ�ó    c                 ó.   — | j                   j                  S )z/
        Get the name of the variable.
        )r   Úname©r   s    r   r   zVarWrapper.name   s   € ð �y‰y�~‰~Ðr   c                 ó.   — | j                   j                  S )z0
        Get the shape of the varibale.
        )r   Úshaper   s    r   r   zVarWrapper.shape%   s   € ð �y‰y�‰Ðr   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   © r   r   r   r      s   „ òòór   r   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)Ú	OpWrapperc                 óD   — t        |t        «      sJ ‚|| _        || _        y r	   )r
   r   Ú_opr   )r   Úopr   s      r   r   zOpWrapper.__init__-   s    € Ü˜%¤Ô.Ð.Ð.ØˆŒØˆ�r   c                 ó.   — | j                   j                  S )z0
        Get the type of this operator.
        )r    Útyper   s    r   r#   zOpWrapper.type2   s   € ð �x‰x�}‰}Ðr   c                 óÄ   — || j                   j                  v rB| j                   j                  |«      D �cg c]  }| j                  j	                  |«      ‘Œ c}S g S c c}w )z:
        Get all the varibales by the input name.
        )r    Úinput_namesÚinputr   r   ©r   r   Úvar_names      r   ÚinputszOpWrapper.inputs8   sY   € ð �4—8‘8×'Ñ'Ñ'à:>¿(¹(¿.¹.ÈÔ:NóÙ:N¨h�—‘—‘ Õ)Ð:Nñð ð ˆIùò	s   ¶"Ac                 ó�   — | j                   j                  |«      D �cg c]  }| j                  j                  |«      ‘Œ c}S c c}w )z;
        Get all the varibales by the output name.
        )r    Úoutputr   r   r'   s      r   ÚoutputszOpWrapper.outputsC   s8   € ð ;?¿(¹(¿/¹/È$Ô:OÓPÑ:O¨h�—‘—‘ Õ)Ð:OÑPÐPùÒPs   ž"AN)r   r   r   r   r#   r)   r,   r   r   r   r   r   ,   s   „ òò
ò	óQr   r   c                   ó6   ‡ — e Zd ZdZdg g fˆ fd„	Zd„ Zd„ Zˆ xZS )r   aN  
    It is a wrapper of paddle.base.framework.IrGraph with some special functions
    for paddle slim framework.

    Args:
        program(framework.Program): A program with
        in_nodes(dict): A dict to indicate the input nodes of the graph.
                        The key is user-defined and human-readable name.
                        The value is the name of Variable.
        out_nodes(dict): A dict to indicate the input nodes of the graph.
                        The key is user-defined and human-readable name.
                        The value is the name of Variable.
    Nc                 ór  •— t         ‰| �  «        |€
t        «       n|| _        i | _        i | _        | j                  j                  «       D ](  }|j                  sŒ|| j                  |j                  <   Œ* d| _	        |€g n|}|€g n|}t        |«      | _        t        |«      | _        t        «       | _        y)Ú N)Úsuperr   r   ÚprogramÚpersistablesÚteacher_persistablesÚ	list_varsÚpersistabler   Úcompiled_graphr   Úin_nodesÚ	out_nodesÚ_attrs)r   r1   r7   r8   r   Ú	__class__s        €r   r   zGraphWrapper.__init__Y   s¢   ø€ ä‰ÑÔØ$+ O”w”y¸ˆŒØˆÔØ$&ˆÔ!Ø—<‘<×)Ñ)Ö+ˆCØ�‹Ø.1�×!Ñ! #§(¡(Ò+ð ,ð #ˆÔØ!Ð)‘2¨xˆØ#Ð+‘B°ˆ	Ü# HÓ-ˆŒÜ$ YÓ/ˆŒÜ!“mˆ�r   c                 ó˜   — g }| j                   j                  D ].  }|j                  D ]  }|j                  t	        || «      «       Œ Œ0 |S )zK
        Return all operator nodes included in the graph as a set.
        )r1   ÚblocksÚopsÚappendr   )r   r=   Úblockr!   s       r   r=   zGraphWrapper.opsi   sE   € ð ˆØ—\‘\×(Ô(ˆEØ—i”i�Ø—
‘
œ9 R¨Ó.Õ/ñ  ð )ð ˆ
r   c                 ó–   — | j                   j                  D ]0  }|j                  |«      sŒt        |j	                  |«      | «      c S  y)z4
        Get the variable by variable name.
        N)r1   r<   Úhas_varr   r   )r   r   r?   s      r   r   zGraphWrapper.vars   s>   € ð —\‘\×(Ô(ˆEØ�}‰}˜TÕ"Ü! %§)¡)¨D£/°4Ó8Ò8ð )ð r   )r   r   r   Ú__doc__r   r=   r   Ú__classcell__)r:   s   @r   r   r   J   s    ø„ ñð  $¨b¸Bõ $ò ör   r   c                 óR  — | j                  d«      d   j                  «       }t        j                  |dd  «      }t	        | j                  d«      «      dkD  rdnd}t        j                  | j                  d«      d   j                  «       dd  «      }|||z   z  }t        |«      }|S )NÚFilterr   é   ÚBiasÚOutput)r)   r   ÚnpÚprodÚlenr,   Úabs)r!   Úfilter_shapeÚ
filter_opsÚbias_opsÚoutput_numelÚ	total_opss         r   Úcount_convNdrR   }   s™   € Ø—9‘9˜XÓ& qÑ)×/Ñ/Ó1€LÜ—‘˜ a bÐ)Ó*€JÜ˜Ÿ	™	 &Ó)Ó*¨QÒ.‰q°A€HÜ—7‘7˜2Ÿ:™: hÓ/°Ñ2×8Ñ8Ó:¸1¸2Ð>Ó?€LØ 
¨XÑ 5Ñ6€IÜ�I“€IØÐr   c                 óv   — t        j                  | j                  d«      d   j                  «       dd  «      }|S )NrH   r   rF   )rI   rJ   r,   r   )r!   rQ   s     r   Úcount_leaky_relurT   ‡   s4   € Ü—‘˜Ÿ
™
 8Ó,¨QÑ/×5Ñ5Ó7¸¸Ð;Ó<€IØÐr   c                 ó–   — t        j                  | j                  d«      d   j                  «       dd  «      }d|z  }t	        |«      }|S )NÚYr   rF   é   )rI   rJ   r,   r   rL   )r!   rP   rQ   s      r   Úcount_bnrX   Œ   sF   € Ü—7‘7˜2Ÿ:™: c›?¨1Ñ-×3Ñ3Ó5°a°bÐ9Ó:€LØ�LÑ €IÜ�I“€IØÐr   c                 óà   — | j                  d«      d   j                  «       d   }t        j                  | j	                  d«      d   j                  «       dd  «      }||z  }t        |«      }|S )NrV   r   ÚOutrF   )r)   r   rI   rJ   r,   rL   )r!   Ú	total_mulÚnumelrQ   s       r   Úcount_linearr]   “   sg   € Ø—	‘	˜#“˜qÑ!×'Ñ'Ó)¨!Ñ,€IÜ�G‰G�B—J‘J˜uÓ% aÑ(×.Ñ.Ó0°°Ð4Ó5€EØ˜EÑ!€IÜ�I“€IØÐr   c                 óx  — | j                  d«      d   j                  «       }| j                  d«      d   j                  «       }t        j                  |dd  «      t        j                  |dd  «      z  }t        j
                  |«      }d}||z   }t        j
                  |dd  «      }||z  }t        |«      }|S )NÚXr   rZ   rW   rF   )r)   r   r,   rI   ÚarrayrJ   rL   )	r!   Úinput_shapeÚoutput_shapeÚkernelÚ	total_addÚ	total_divÚ
kernel_opsÚnum_elementsrQ   s	            r   Úcount_pool2drh   ›   s¬   € Ø—)‘)˜C“. Ñ#×)Ñ)Ó+€KØ—:‘:˜eÓ$ QÑ'×-Ñ-Ó/€LÜ�X‰X�k ! "�oÓ&¬"¯(©(°<ÀÀÐ3CÓ*DÑD€FÜ—‘˜“€IØ€IØ˜YÑ&€JÜ—7‘7˜<¨¨Ð+Ó,€LØ˜\Ñ)€IÜ�I“€IØÐr   c                 ó�   — | j                  d«      d   j                  «       }t        j                  |dd  «      }t	        |«      }|S )Nr_   r   rF   )r)   r   rI   rJ   rL   )r!   ra   rQ   s      r   Úcount_element_oprj   ¨   s@   € Ø—)‘)˜C“. Ñ#×)Ñ)Ó+€KÜ—‘˜ A B˜Ó(€IÜ�I“€IØÐr   c                 óö  — t        | t        «      sJ ‚d}d}t        g d¢«      }| j                  «       D �]/  }d}|j	                  «       dv r3t        |«      }||z  }|j                  d«      d   j                  «       }n¼|j	                  «       dk(  rt        |«      }||z  }n˜|j	                  «       dv r3t        |«      }||z  }|j                  d«      d   j                  «       }nS|j	                  «       d	k(  rt        |«      }||z  }n/|j	                  «       j                  d
«      rt        |«      }||z  }|dk7  r"|j                  |j	                  «       ||g«       d}�Œ2 |r|j                  «        |S )Nr   )zOP Typez
Param nameÚFlopsÚ )Úconv2dÚdepthwise_conv2drE   Úpool2d)ÚmulÚmatmulrV   Ú
batch_normÚelement)r
   r   ÚTabler=   r#   rR   r)   r   rh   r]   rX   Ú
startswithrj   Úadd_rowÚprint_table)r   ÚdetailÚflopsÚop_flopsÚtabler!   Ú
param_names          r   Ú_graph_flopsr~   ¯   s_  € Ü�eœ\Ô*Ð*Ð*Ø€EØ€HÜÒ4Ó5€EØ�i‰i�kˆØˆ
Ø�7‰7‹9Ð6Ñ6Ü# BÓ'ˆHØ�XÑˆEØŸ™ 8Ó,¨QÑ/×4Ñ4Ó6‰JØ�W‰W‹Y˜(Ò"Ü# BÓ'ˆHØ�XÑ‰Eà�W‰W‹YÐ+Ñ+Ü# BÓ'ˆHØ�XÑˆEØŸ™ 3›¨Ñ*×/Ñ/Ó1‰JØ�W‰W‹Y˜,Ò&Ü “|ˆHØ�XÑ‰EØ�W‰W‹Y×!Ñ! )Ô,Ü'¨Ó+ˆHØ�XÑˆEØ�qŠ=Ø�M‰M˜2Ÿ7™7›9 j°(Ð;Ô<ØŠð- ñ. Ø×ÑÔØ€Lr   c                 ó2   — t        | «      }t        ||¬«      S )N)ry   )r   r~   )r1   Úprint_detailr   s      r   Ústatic_flopsr�   Ð   s   € Ü˜Ó!€EÜ˜ lÔ3Ð3r   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ru   c                 ó¤   — || _         g | _        g | _        t        |«      | _        |D ]&  }| j                  j                  t        |«      «       Œ( y r	   )Útable_headsÚ	table_lenÚdatarK   Úcol_numr>   )r   r„   Úheads      r   r   zTable.__init__Ö   sD   € Ø&ˆÔØˆŒØˆŒ	Ü˜;Ó'ˆŒÛˆDØ�N‰N×!Ñ!¤# d£)Õ,ñ  r   c                 óÈ  — t        |t        «      st        d«       t        |«      | j                  k7  r.t        dj                  t        |«      | j                  «      «       t        | j                  «      D ]N  }t        t        ||   «      «      | j                  |   kD  sŒ+t        t        ||   «      «      | j                  |<   ŒP | j                  j                  |«       y )NzThe row_str should be a listznThe length of row data should be equal the length of table heads, but the data: {} is not equal table heads {})r
   ÚlistÚprintrK   r‡   ÚformatÚrangeÚstrr…   r†   r>   )r   Úrow_strÚis      r   rw   zTable.add_rowÞ   s³   € Ü˜'¤4Ô(ÜÐ0Ô1Üˆw‹<˜4Ÿ<™<Ò'Üð A÷  Hñ  HÜ˜“L $§,¡,óôô
 �t—|‘|Ö$ˆAÜ”3�w˜q‘z“?Ó# d§n¡n°QÑ&7Ó7Ü$'¬¨G°A©J«Ó$8�—‘˜qÒ!ð %ð 	�	‰	×Ñ˜Õ!r   c                 óÂ   — d}t        | j                  «      D ]5  }|dt        ||   «      j                  | j                  |   dz   «      z   z  }Œ7 |dz  }t        |«       y )Nrm   Ú|rW   )r�   r‡   rŽ   Úcenterr…   r‹   )r   ÚrowÚstringr�   s       r   Ú	print_rowzTable.print_rowì   sZ   € ØˆÜ�t—|‘|Ö$ˆAØ�cœC  A¡›K×.Ñ.¨t¯~©~¸aÑ/@À1Ñ/DÓEÑEÑE‰Fð %à�#‰ˆÜˆf�r   c                 ój   — d}| j                   D ]  }|dz  }|d|dz   z  z  }Œ |dz  }t        |«       y )Nrm   Ú+Ú-rW   )r…   r‹   )r   r•   Úlengths      r   Úprint_shelfzTable.print_shelfó   sC   € ØˆØ—n”nˆFØ�c‰MˆFØ�c˜V a™ZÑ(Ñ(‰Fð %ð 	�#‰ˆÜˆf�r   c                 óÞ   — | j                  «        | j                  | j                  «       | j                  «        | j                  D ]  }| j                  |«       Œ | j                  «        y r	   )r›   r–   r„   r†   )r   r†   s     r   rx   zTable.print_tableû   sR   € Ø×ÑÔØ�‰�t×'Ñ'Ô(Ø×ÑÔØ—I”IˆDØ�N‰N˜4Õ ð à×ÑÕr   N)r   r   r   r   rw   r–   r›   rx   r   r   r   ru   ru   Õ   s   „ ò-ò"òòór   ru   )F)Úcollectionsr   ÚnumpyrI   Úpaddle.staticr   r   Ú__all__r   r   r   rR   rT   rX   r]   rh   rj   r~   r�   ru   r   r   r   Ú<module>r¡      si   ðõ $ã ç +à
€÷ñ ÷(Qñ Q÷<0ñ 0òfòò
òò
òóóB4÷
,ò ,r   