
    9i&                        S r SSKrSSKrSSKJr   " S S\R
                  R                  5      r " S S\R
                  R                  5      r " S	 S
\R
                  R                  5      r	 " S S\R
                  R                  5      r
g)zMultiple choice model.    N   )GLMModelc                   r   ^  \ rS rSr  SS\4U 4S jjjrSS jrSS jrSS\S\	4S jjr
   SS	 jrS
rU =r$ )GLMForMultiTokenCloze
   language_modelc                 N   > [         [        U ]  5         Xl        X l        X0l        g N)superr   __init__modeltake_softmaxlength_penaltyselfr   r   r   	__class__s       k/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/nlp/mglm/model/downstream.pyr   GLMForMultiTokenCloze.__init__   s$     	#T35#
(,    c                 >    U R                   R                  XU5      nU$ r
   r   
state_dictr   destinationprefix	keep_varssds        r   r    GLMForMultiTokenCloze.state_dict       ZZ"";	B	r   c                 4    U R                   R                  XS9$ N)strictr   load_state_dictr   r   r"   s      r   r$   %GLMForMultiTokenCloze.load_state_dict       zz))*)DDr   r   recursec                 4    U R                   R                  XS9$ N)r   r(   r   named_parametersr   r   r(   s      r   r,   &GLMForMultiTokenCloze.named_parameters       zz**&*JJr   c                    Uc  U R                  XU5      $ S n[        UR                  5      S:X  a  UR                  S S u  pUR                  SUR	                  S5      5      nUR                  " S/UR	                  5       SS  Q76 nUR                  " S/UR	                  5       SS  Q76 nUR                  SUR	                  S5      5      nUR                  SUR	                  S5      5      nUb!  UR                  SUR	                  S5      5      nU R                  XX6S9tpU R
                  (       a(  [        R                  R                  R                  U	SS9n	[        R                  " UR	                  S5      [        R                  UR                  S9nUR                  S5      R                  U5      n[        R                  " UR	                  S5      [        R                  UR                  S9nUR                  S5      R                  U5      nXX4   nX-  R                  SS9nU R                   S	:  a  XR                  SS9U R                   -  -  nUb  UR#                  SU5      nU/U
Q7$ )
N      
prompt_posdimr   dtypedevicer           )r   lenshapereshapesizer   torchnn
functionallog_softmaxarangelongr:   	unsqueeze	expand_assumr   view)r   	input_idsposition_idsattention_mask
target_ids
logit_maskr5   num_choices
batch_sizeoutputsmems	batch_idsseq_idslogitss                 r   forwardGLMForMultiTokenCloze.forward    sC    ::i~FFy1$&/oobq&9#J!))"innR.@AI+33B P5C5H5H5J125NPN'//M\5F5F5H5LML#++B
0CDJ#++B
0CDJ%'//JOOB4GH
^ $ Lhh))55g25FGLLOOAejj9J9JL	''*44Z@	,,OOBuzz*:K:KM##A&00<G78%**q*1$nnn3T5H5HHHF"[[[1Fr   r   r   r   Tr;   N FTr[   TNNN)__name__
__module____qualname____firstlineno__r   r   r   r$   strboolr,   rV   __static_attributes____classcell__r   s   @r   r   r   
   sS     # #-!)- -
EKs K$ K  % %r   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )GLMForMultiTokenClozeFastH   c                 N   > [         [        U ]  5         Xl        X l        X0l        g r
   )r   ri   r   r   r   r   r   s       r   r   "GLMForMultiTokenClozeFast.__init__J   s"    '79#
(,r   c	                 L  ^^^ U R                  UUUSSS9tpUR                  5       u  mmnUR                  S5      n/ mU
 H\  nUR                  S5      R                  STSS5      R                  " TT-  /UR                  5       SS  Q76 nTR                  U5        M^     SUUU4S jjnUR	                  SU5      nUR                  " S/UR                  5       SS  Q76 nU" XR	                  S5      U5      nUR	                  SUR                  S5      5      nUR	                  SUR                  S5      5      nU R                   " XEU/TQ76 tpU R                  (       a(  [        R                  R                  R                  U	SS	9n	[        R                  " UR                  S5      [        R                  UR                  S
9nUR                  S5      R                  U5      n[        R                  " UR                  S5      [        R                  UR                  S
9nUR                  S5      R                  U5      nXUU4   nUU-  R                  SS	9nU R                   S:  a  UUR                  SS	9U R                   -  -  nTb  UR#                  ST5      nU/U
Q7$ )NTF)return_memorydetach_memoryr3   r   r   c                   > TS   R                  SX 45      n[        R                  " U5      n[        R                  " X!R                  UR
                  S9R                  SS5      nXAR                  SS5      :  nUR                  S5      R                  5       R                  SU S5      nUR                  TT-  SS5      n[        R                  " XS4SS9nUR                  S5      nU$ )Nr   r   )r:   r9   r3   r2   r6   )new_onesr@   trilrD   r:   r9   rI   rF   floatexpandcat)	
seq_lengthsepmemory_lengthmidsmaskrP   enc_memsrO   s	         r   build_dec_mask_matrix@GLMForMultiTokenClozeFast.forward.<locals>.build_dec_mask_matrixe   s    $$a%@AA

1A ,,jj		CCG42; "a(D>>!$**,33B
BGDk12r:A		4)+AAAHr   r2   r6   r8   r;   )r   )r   r?   rF   rt   r>   appendr   r@   rA   rB   rC   rD   rE   r:   rG   rH   r   rI   )r   rJ   rK   rL   dec_input_idsdec_position_idsdec_attention_maskdec_target_idsdec_logit_maskrQ   rR   max_dec_lenmax_enc_lenhiddenr}   rS   rT   rU   rP   r|   rO   s                     @@@r   rV   !GLMForMultiTokenClozeFast.forwardP   s     $ ! 0=/A/A/C,
KnnR(F%%a(//K0244;G<4>4LH 6<[[]125FHF OOF# 	 	 &--b+>+33*""$QR(* 333B7F'//N4G4G4KL'//N4G4G4KLM$6C9AChh))55g25FGLL"**!((*	 ''*44^D	,,#**!((* ##A&00@G^;<>)..1.5$n00Q079L9LLLF"[[[1Fr   rX   rY   r_   r`   ra   rb   r   rV   re   rf   rg   s   @r   ri   ri   H   s    -C Cr   ri   c                   f   ^  \ rS rSrS
U 4S jjrSS jrSS jrSS\S\4S jjr	   SS jr
S	rU =r$ )GLMForSingleTokenCloze   c                 :   > [         TU ]  5         Xl        X l        g r
   )r   r   r   r   )r   r   r   r   s      r   r   GLMForSingleTokenCloze.__init__   s    #
(r   c                 >    U R                   R                  XU5      nU$ r
   r   r   s        r   r   !GLMForSingleTokenCloze.state_dict   r   r   c                 4    U R                   R                  XS9$ r!   r#   r%   s      r   r$   &GLMForSingleTokenCloze.load_state_dict   r'   r   r   r(   c                 4    U R                   R                  XS9$ r*   r+   r-   s      r   r,   'GLMForSingleTokenCloze.named_parameters   r/   r   c                    Uc  U R                  XU5      $ [        UR                  5      S:X  d   eU R                  XX6S9tpx[        R                  " UR                  S5      UR                  UR                  S9n	XyU4   n
U R                  (       a)  [        R                  R                  R                  U
SS9nOU
nU	R                  S5      R                  U5      n	XU4   nX/UQ7$ )Nr2   r4   r   r8   r3   r6   r   )r   r<   r=   r@   rD   r?   r9   r:   r   rA   rB   rC   rF   rG   )r   rJ   rK   rL   rM   rN   r5   rQ   rR   rS   target_logitstarget_proboutputs                r   rV   GLMForSingleTokenCloze.forward   s     ::i~FF9??#q(((^ $ LLLLLO &&!((*	  > 9:((--992 : 'K (K''*44Z@	
23---r   )r   r   )FrZ   r\   r]   r^   )r_   r`   ra   rb   r   r   r$   rc   rd   r,   rV   re   rf   rg   s   @r   r   r      s>    )

EKs K$ K  . .r   r   c                   4   ^  \ rS rSr SU 4S jjrS rSrU =r$ )GLMForSequenceClassification   c                   > [         TU ]  5         X@l        Xl        XPl        [
        R                  R                  X"5      U l        [
        R                  R                  U5      U l
        [
        R                  R                  X%5      U l        g r
   )r   r   
pool_tokenr   	num_classr@   rA   Linear
pool_layerDropoutmultichoice_dropoutmultichoice_head)r   r   hidden_sizehidden_dropoutr   r   r   s         r   r   %GLMForSequenceClassification.__init__   s_     	$#
"((//+C#(88#3#3N#C  % Gr   c                    S n[        UR                  5      S:X  a  U R                  S:X  d   eUR                  S S u  pTUR                  SUR	                  S5      5      nUR                  " S/UR	                  5       SS  Q76 nUR                  " S/UR	                  5       SS  Q76 nU R                  XU5      tpgU R                  S:X  a?  U[        R                  " UR	                  S5      UR                  UR                  S9U4   nOrU R                  S:X  aB  U[        R                  " UR	                  S5      UR                  UR                  S9US-
  4   nO U R                  S	:X  a
  US S 2S4   nO[        e[        R                  " U R                  U5      5      nU R                  U5      n	U R                  U	5      n
Ub  U
R!                  SU5      n
U
/UQ7$ )
Nr1   r   r2   r3   startr   r8   padcls)r<   r=   r   r>   r?   r   r   r@   rD   r9   r:   NotImplementedErrortanhr   r   r   rI   )r   rJ   rK   rL   rO   rP   rQ   rR   r   multichoice_outputrU   s              r   rV   $GLMForSequenceClassification.forward   s   y1$>>Q&&&&/oobq&9#J!))"innR.@AI+33B P5C5H5H5J125NPN'//M\5F5F5H5LMLI^L??g%U\\Q$**%,,. 0>> ?F __%U\\Q$**%,,. 0>/AB CF __%QT]F%%DOOF34!55f=&&'9:"[[[1Fr   )r   r   r   r   r   r   )r   r   rg   s   @r   r   r      s     H r   r   )__doc__r@   torch.nnmodeling_glmr   rA   Moduler   ri   r   r    r   r   <module>r      sf       ";EHHOO ;|K K\+.UXX__ +.\.588?? .r   