
    9i+                        S SK r S SKrS SKrS SKrSSKJrJr   " S S\5      r\	S:X  a  SSS	S
SSSS.r
\" \
5      r 0 r\" S5      r\R                  S5      u  rr\R                  S5       H  r\R                  S5      u  rr\\\'   M     \R+                  \\SS9r/ rSSSSS.r\" \5        \" \5        \" S\" \5      S\5        M  g)    N   )all_domains
db_domainsc                   ^    \ rS rSrS rS rS rSS jrSS jrSS jr	S r
  SS	 jrS
 rSrg)
MultiWozDB   c                 D   0 U l         0 U l        [         Hv  n[        [        R
                  R                  XU   5      SSS9 n[        R                  " UR                  5       R                  5       5      U R                   U'   S S S 5        Mx     g ! , (       d  f       M  = f)Nrzutf-8)encoding)dbssql_dbsr   openospathjoinjsonloadsreadlower)selfdb_dirdb_pathsdomainfs        a/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/utils/nlp/space/db_ops.py__init__MultiWozDB.__init__   sx    !FGGLL&)9:C$&)*#'::affhnn.>#? & & "& &s   A B
B	c                     / SQnUS:X  a  U$ US:w  a+  US:X  a  / SQnU$ US:X  a  / SQnU$ US::  a  / S	QnU$ / S
Qn U$ US:X  a  / SQnU$ US::  a  / SQnU$ US::  a  / S	QnU$ / S
QnU$ )z:Return number of available entities for particular domain.r   r   r   r    trainr   )r   r   r   r   r   )r   r   r   r      )r   r   r   r   )r   r   r   r      
    )r   r   numvectors       r   oneHotVectorMultiWozDB.oneHotVector   s    "9MWax%   %  %  &  ax%  %
 	 %  &    c                     SS/nUR                  S5      (       a  SS/nUR                  S5      (       d  UR                  S5      (       a  SS/nU$ )z9Add information about availability of the booking option.r   zbooking-nobookr   zbooking-bookztrain-offerbooked)get)r   turn_dar'   s      r   addBookingPointerMultiWozDB.addBookingPointer0   sR     Q;;'((VF;;~&&'++6I*J*JVFr*   c                 H    U[         ;   a  U R                  X5      nU$ / SQnU$ )0Create database pointer for all related domains.r   )r   r(   )r   r   	match_num
return_numr'   s        r   addDBPointerMultiWozDB.addDBPointer;   s/     Z&&v9F  "Fr*   c                     U[         ;   a  U R                  X5      nO/ SQnU/ SQ:X  a  SnU$ SUR                  S5      -  nU$ )z2Create database indicator for all related domains.r   z
[db_nores]z[db_%s]r   )r   r(   index)r   r   r2   r3   r'   	indicators         r   addDBIndicatorMultiWozDB.addDBIndicatorE   sR     Z&&v9F!F \!$I  "FLLO3Ir*   c                     SS0n0 n[          HY  nSX5'   U[        ;   d  M  UR                  U5      (       d  M+  U R                  XQU   5      n[	        U5      X5'   U(       d  MU  XdU'   M[     U(       a  U$ U$ )r1   generalr    )r   r   r,   
queryJsonslen)r   constraintsreturn_entrymatchentryr   matched_entss          r   get_match_numMultiWozDB.get_match_numU   ss    B "FEM#(?(?#v67JK #L 1<$0&M " Lr*   c                    UR                  S5      (       a  USS nUS:w  a  SSSSS	.nOSS
SSS	.nUS S / SQ:X  a  SnOUR                  S5      nUS-   X5   -   S-   nUS   S:X  a  US   S:X  a  US-  nUS   S:X  a  US   S:X  a  US-  nU$ )N]r   r!   01z2-3z>3)r   r      r"   z1-5z6-10z>10   r   r    z: z; r   zbooking: okzbooking: unable)endswithr7   )r   r'   r   nummapreportr&   s         r   pointerBackMultiWozDB.pointerBackf   s     ??3Ab\FW48F6e<F"1:%F,,q/Cd]V[047F":?vbzQm#F":?vbzQ''Fr*   c           	         US:X  a~  [         R                  " U R                  U   S   5      [         R                  " U R                  U   S   5      [        S5       Vs/ s H  n[         R                  " SS5      PM     snS./$ US:X  a  U R                  S   $ US	:X  aX  UR                  S
5      (       a@  U R                  S	    H,  nUR                  S
5      UR                  S
5      :X  d  M)  U/s  $    O/ $ SnUR                  5        H  nUS;  d  M  SnM     U(       d  / $ / n	SU;   aP  U R                  U    H=  n
SU
;   d  M  US   nU
S   nX:X  d  M  U(       d  U
OU
S   n
U	R                  U
5        U	s  $    U R                  U    GHP  n
SnUR                  5        GH  u  pUS:X  a  M  US;   d  US:X  a  US:X  d  US:X  a  US;   a  M.  SSSSSSS.nUR                  U5      (       a  MO  X;  a  Sn  OUS:X  a  SOUnUS;   a   UR                  S5      u  nn[        U5      S-  [        U5      -   n[        X   R                  S5      S   5      S-  [        X   R                  S5      S   5      -   nUS:X  a  UU:  a  SnUS:X  a  UU:  a  SnM  M  M  U(       a  XU   :w  a  Sn  OXU   ;  d  GM  Sn  O   U(       d  GM?  U	R                  U
5        GMS     U(       d  U	$ US:X  a  U	 Vs/ s H  nUS   PM
     n	nU	$ U	 Vs/ s H  nUS   PM
     n	nU	$ s  snf ! [         a    Sn   Mr  f = fs  snf s  snf )zReturns the list of entities for a given domain
based on the annotation of the belief state
constraints: dict e.g. {'pricerange': 'cheap', 'area': 'west'}
taxitaxi_colors
taxi_typesr$   r   	   )rU   rV   
taxi_phonepolicehospital
departmentF)not mentionedr    Tname)peoplestayhotelday
restaurant)ra   time)
don't caredo n't care	dont carer\   dontcarer    freeyes)arriveleave:<   r   rj   rk   r!   id)randomchoicer   rangerandintr,   valuesappenditemssplitint	Exception)r   r   r?   exactly_matchreturn_name_rB   
valid_consvmatch_resultdb_entconsdbnrA   s	skip_casehmrc   es                       r   r=   MultiWozDB.queryJsons|   s    V dhhv.}=>dhhv.|<==B2YGYv~~a3YG   X88H%%Z|,,!XXj1Eyy.+//(3* * %w 2
 	
##%A--!
 & I[ ((6*V#&v.D .C{/:v$++F3++ + hhv&FE#))+;**v/@Q%Z</A4H  #$#$!"%& !	 ==##?!E &[Ea++ ww 1  FRK#a&0 vys3A67"<s	,Q/@1 1DH}T %G|D % )1| %Qi %)+ %e ,h u##F+o 'r  1=>A$>   4@@<a&	<@A HJ %  %0  ?@s$   !L
.L"3L6
L;"L32L3c                    U R                   (       dR  [         HH  nSR                  U5      n[        R                  " U5      nUR                  5       nX`R                   U'   MJ     SR                  U5      nSnUR                  5        H  u  pU
S:X  d  U
S:X  d  U
S:X  d  U
S:X  d  U
S:X  d  U
S	:X  a  M+  U(       ae  US
-  nU
R                  SS5      nU	S:X  a  USU	-   S-   S-   U-   S-   -  nO/U	S:X  a  USU	-   S-   S-   U-   S-   -  nOUSU	-   S-   S-   U-   S-   -  nSnM  U
R                  SS5      nU	S:X  a  USU	-   S-   S-   U-   S-   -  nM  U	S:X  a  USU	-   S-   S-   U-   S-   -  nM  USU	-   S-   S-   U-   S-   -  nM      [        U5        U R                   U   R                  U5      R                  5       $ ! [         a    / s $ f = f)Nzdb/{}-dbase.dbzselect * from {}Tr    rg   r\   rd   rf   re   z where 'z''leaveAt z > arriveByz < =Fz and )r   r   formatsqlite3connectcursorru   replaceprintexecutefetchallrx   )r   r   r?   domdbconnc	sql_queryflagkeyvalval2s               r   querySQLMultiWozDB.querySQL   s   ||!%,,S1r*KKM$%S!	 " '--f5	#))+HCbyj(o-l*k)m+*I;;sD1Di'!TCZ%%7$%>%E%LL	
*!TCZ%%7$%>%E%LL	!TCZ#%5%<t%Cd%JJ	 D;;sD1Di'!X^e%;d%BT%ID%PP	
*!X^e%;d%BT%ID%PP	!X^c%9D%@4%G$%NN	9 ,<	)<<'//	:CCEE 	I	s   6F8 8GG)r   r   N)F)TF)__name__
__module____qualname____firstlineno__r   r(   r.   r4   r9   rD   rQ   r=   r   __static_attributes__r%   r*   r   r   r      s:    @2	 "2 "&$	p d-r*   r   __main__zdb/attraction_db_processed.jsonzdb/hospital_db_processed.jsonzdb/hotel_db_processed.jsonzdb/police_db_processed.jsonzdb/restaurant_db_processed.jsonzdb/taxi_db_processed.jsonzdb/train_db_processed.json)
attractionrZ   r`   rY   rb   rT   r!   TzAinput belief state in fomat: domain-slot1=value1;slot2=value2...
-;r   )rz         r#   )r`   rb   r   r!   zcount:z
names:)r   ro   r   r   ontologyr   r   objectr   r   dbPATHsr   r?   inputinprv   r   r   svr   r}   r=   resrP   reidxr   r>   r%   r*   r   <module>r      s   
    -O Od z73-/7+-G 
G	B
P
 yy~**S/B88C=DAqKN " mmFKTmB	
 	kc
hC*f5)  r*   