
    9i                     0   S SK r S SKJr  S SKrS SKJr  S SKJr  S SK	J
r
  \ R                  R                  \5      r\
" S\ R                  R                  \S5      \ R                  R                  \S5      /S	9r " S
 S\5      r " S S\5      rSS jrS rg)    N)abc)Function)
functional)load	upfirdn2dzupfirdn2d.cppzupfirdn2d_kernel.cu)sourcesc                   4    \ rS rSr\S 5       r\S 5       rSrg)UpFirDn2dBackward   c
                    Uu  pUu  pUu  pnnUR                  SU	S   U	S   S5      n[        R                  UUUUU
UUUUU5
      nUR                  US   US   US   US   5      nU R	                  U5        Uu  nnnnXl        Xl        Xl        Xl        UU l	        UU l
        UU l        UU l        Xl        Xl        U$ )Nr            )reshapeupfirdn2d_opr   viewsave_for_backwardup_xup_ydown_xdown_ypad_x0pad_x1pad_y0pad_y1in_sizeout_size)ctxgrad_outputkernelgrad_kernelupdownpadg_padr   r   r   r   r   r   g_pad_x0g_pad_x1g_pad_y0g_pad_y1
grad_inputr   r   r   r   s                          o/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/ops/human_image_generation/upfirdn2d.pyforwardUpFirDn2dBackward.forward   s     
16.Hh!))"hqk8A;J!++

  __WQZWQZ%,QZ1
 	f%),&





    c                    U R                   u  nUR                  SU R                  S   U R                  S   S5      n[        R	                  UUU R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  5
      nUR                  U R                  S   U R                  S   U R                  S   U R                  S   5      nUS S S S S S S S 4	$ )Nr   r   r   r   r   )saved_tensorsr   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   gradgrad_inputr!   gradgrad_outs       r,   backwardUpFirDn2dBackward.backward?   s    ##'//CKKN03AC $--HHHHJJJJJJJJJJJJ
 $((QQ),a#,,q/K T4tT4tKKr/    N__name__
__module____qualname____firstlineno__staticmethodr-   r4   __static_attributes__r6   r/   r,   r
   r
      s+    ' 'R L Lr/   r
   c                   4    \ rS rSr\S 5       r\S 5       rSrg)	UpFirDn2dY   c                 j   Uu  pgUu  pUu  ppUR                   u  pUR                   u  nnnnUR                   U l        UR                  SUUS5      nU R                  U[        R
                  " USS/5      5        UU-  U-   U-   U-
  U	-   U	-  nUU-  U
-   U-   U-
  U-   U-  nUU4U l        Xg4U l        X4U l        XX4U l	        X-
  S-
  nX-
  S-
  nUU-  UU-  -
  U
-   U-
  S-   nUU-  UU	-  -
  U-   U-
  S-   nUUUU4U l
        [        R                  XXgXXX5
      nUR                  SUUU5      nU$ )Nr   r   r   )shaper   r   r   torchflipr   r#   r$   r%   r&   r   r   r   )r   inputr!   r#   r$   r%   r   r   r   r   r   r   r   r   kernel_hkernel_wbatchchannelin_hin_wout_hout_wr'   r)   r(   r*   outs                              r,   r-   UpFirDn2d.forward[   s   
),&#\\%*[["wdkkb$a0fejj!Q&@Av%.9FBvMv%.9FBvMu~#62$q($q($;/&84?!C$;/&84?!Cx8<	$$UD%+VE hhr7E51
r/   c                 
   U R                   u  p#S nU R                  S   (       aY  [        R                  UUUU R                  U R
                  U R                  U R                  U R                  U R                  5	      nUS S S S 4$ )Nr   )
r1   needs_input_gradr
   applyr#   r$   r%   r&   r   r   )r   r    r!   r"   r+   s        r,   r4   UpFirDn2d.backward   sy    !//
"*00		
J 4tT11r/   r6   Nr7   r6   r/   r,   r?   r?   Y   s)    ! !F 2 2r/   r?   c                 V   [        U[        R                  5      (       d  X"4n[        U[        R                  5      (       d  X34n[        U5      S:X  a  US   US   US   US   4nU R                  R
                  S:X  a  [        X/UQUQUQ76 nU$ [        R                  XX#U5      nU$ )Nr   r   r   cpu)	
isinstancer   Iterablelendevicetypeupfirdn2d_nativer?   rR   )rE   r!   r#   r$   r%   rN   s         r,   r   r      s    b#,,''XdCLL))|
3x1}1vs1vs1vs1v.||E!u?r?D?3?
 J ooeRs;Jr/   c
                    U R                   u  ppU R                  SXS5      n U R                   u  ppUR                   u  nnU R                  SUSUSU5      n[        R                  " USSSUS-
  SSSUS-
  /5      nUR                  SX-  X-  U5      n[        R                  " USS[        US5      [        US5      [        US5      [        U	S5      /5      nUS S 2[        U* S5      UR                   S   [        U	* S5      -
  2[        U* S5      UR                   S   [        U* S5      -
  2S S 24   nUR                  SSSS5      nUR                  SSX-  U-   U	-   X-  U-   U-   /5      n[        R                  " USS/5      R                  SSUU5      n[        R                  " UU5      nUR                  SUX-  U-   U	-   U-
  S-   X-  U-   U-   U-
  S-   5      nUR                  SSSS5      nUS S 2S S U2S S U2S S 24   nX-  U-   U	-   U-
  U-   U-  nX-  U-   U-   U-
  U-   U-  nUR                  SUUU5      $ )Nr   r   r   r   r   )
rB   r   r   Fr%   maxpermuterC   rD   conv2d)rE   r!   r   r   r   r   r   r   r   r   _rI   rJ   rK   minorrF   rG   rN   wrL   rM   s                        r,   r[   r[      s   "[[AMM"d!,E ;;ATHh
**Rq$5
1C
%%aAtaxAq$(;
<C
((2t{DK
7C
%%	
A	VQ	VQ	VQ	VQ		C a6'1ociilS&!_<<6'1ociilS&!_<<aA CC ++aAq
!C
++	Qf$v-t{V/Cf/LMOC

6Aq6"''1hAA
((3
C
++
fv%014fv%014	C ++aAq
!C
a68V8Q&
'C[6!F*X5>6IE[6!F*X5>6IE88B..r/   )r   r   )r   r   )oscollectionsr   rC   torch.autogradr   torch.nnr   r]   torch.utils.cpp_extensionr   pathdirname__file__module_pathjoinr   r
   r?   r   r[   r6   r/   r,   <module>rn      s    	   # $ *ggooh'
[/2
["78CL CLL92 92x&(/r/   