ó
    Î’Œj_  ã                   ó¬   • S SK Jr  S SKJrJrJrJr  S SKrS SKJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKJrJrJrJr  S S	KJr  S
SKJr  S rS rS rS rg)é    )ÚPath)ÚAnyÚCallableÚDictÚIterableN)Úzeros)ÚConfig)ÚErrorsÚutil)ÚInMemoryLookupKB)ÚSimpleFrozenListÚensure_pathÚload_model_from_configÚregistry)ÚVocabé   )Úmake_tempdirc                 ót  • [        U 5      n[        U5        [        5        n[        U5      nUR	                  5       (       d  UR                  5         US-  nUR                  [        U5      5        [        U SS9nUR                  [        U5      5        S S S 5        [        W5        g ! , (       d  f       N= f)NÚkbé   )ÚvocabÚentity_vector_length)
Ú_get_dummy_kbÚ	_check_kbr   r   ÚexistsÚmkdirÚto_diskÚstrr   Ú	from_disk)Úen_vocabÚkb1ÚdÚdir_pathÚ	file_pathÚkb2s         ÚµC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\spacy/tests/serialize/test_serialize_kb.pyÚtest_serialize_kb_diskr'      s‡   € ä
˜Ó
!€CÜˆc„Nô 
Œ˜1Ü˜q“>ˆØ�‰× Ñ Ø�N‰NÔØ˜t‘Oˆ	Ø�‰”C˜	“NÔ#Ü XÀAÑFˆØ�‰”c˜)“nÔ%÷ 
ô ˆc…N÷ 
�ús   ¡A4B)Â)
B7c                 ó,  • [        U SS9nUR                  SS/ SQS9  UR                  SS/ S	QS9  UR                  S
S/ SQS9  UR                  SS/ SQS9  UR                  SSS
/SS/S9  UR                  S/ SQ/ SQS9  UR                  SS
/S/S9  U$ )Nr   )r   ÚQ53é!   )r   é   r   )ÚentityÚfreqÚentity_vectorÚQ17r   ©é   é   r   ÚQ007r1   ©r   r   r1   ÚQ44éV  )é   r7   r7   Údouble07çš™™™™™¹?gÍÌÌÌÌÌì?)ÚaliasÚentitiesÚprobabilitiesÚguy)r)   r3   r/   r5   )ç333333Ó?r>   gš™™™™™É?r9   Úrandomg      ð?)r   Ú
add_entityÚ	add_alias)r   r   s     r&   r   r   #   s¨   € Ü	˜%°aÑ	8€BØ‡M�M˜ R²y€MÑAØ‡M�M˜ Q²i€MÑ@Ø‡M�M˜ a²y€MÑAØ‡M�M˜ Sº	€MÑBà‡L�L�z¨U°F¨OÈCÐQTÈ:€LÑVØ‡L�LØÚ.Ú*ð ñ ð
 ‡L�L�x¨6¨(À3À%€LÑHà€Ió    c                 óž  • U R                  5       S:X  d   eS H  nXR                  5       ;   a  M   e   S H  nXR                  5       ;  a  M   e   U R                  5       S:X  d   eS H  nX R                  5       ;   a  M   e   S H  nX R                  5       ;  a  M   e   [	        U R                  S5      S S	9n[        U5      S
:X  d   eUS   R                  S:X  d   eSUS   R                  s=:  a  S:  d   e   eUS   R                  / SQ:X  d   eUS   R                  S:X  d   eSUS   R                  s=:  a  S:  d   e   eUS   R                  S:X  d   eSUS   R                  s=:  a  S:  d   e   eUS   R                  / SQ:X  d   eUS   R                  S:X  d   eSUS   R                  s=:  a  S:  d   e   eg )Nr7   )r)   r/   r3   r5   )Ú ÚQ0r   )r8   r=   r?   )ÚnothingnessrD   Úrandomnoiser8   c                 ó   • U R                   $ ©N)Úentity_)Úxs    r&   Ú<lambda>Ú_check_kb.<locals>.<lambda>E   s   € È1Ï9Ê9rB   )Úkeyr   r   r3   gåÐ"Ûùþ@g
×£p=
@r4   gøSã¥›Äì?g¢E¶óýÔì?r2   r/   g×£p=
×ÿ?g®Gáz @r0   gòÒMbX¹?gB`åÐ"Û¹?)Úget_size_entitiesÚget_entity_stringsÚget_size_aliasesÚget_alias_stringsÚsortedÚget_alias_candidatesÚlenrJ   Úentity_freqr.   Úalias_Ú
prior_prob)r   Úentity_stringÚalias_stringÚ
candidatess       r&   r   r   5   sö  € à×ÑÓ! QÓ&Ð&Ð&Û6ˆØ× 5Ñ 5Ó 7Õ7Ð7Ð7ñ 7ã#ˆØ×$9Ñ$9Ó$;Õ;Ð;Ð;ñ $ð ×ÑÓ  AÓ%Ð%Ð%Û5ˆØ×3Ñ3Ó5Õ5Ð5Ð5ñ 6ã:ˆØ×#7Ñ#7Ó#9Õ9Ð9Ð9ñ ;ô ˜×/Ñ/°
Ó;ÑATÑU€JÜˆz‹?˜aÓÐÐà�a‰=× Ñ  FÓ*Ð*Ð*Ø�:˜a‘=×,Ñ,Õ3¨tÓ3Ð3Ñ3Ð3Ð3Ø�a‰=×&Ñ&ª)Ó3Ð3Ð3Ø�a‰=×Ñ :Ó-Ð-Ð-Ø�:˜a‘=×+Ñ+Õ3¨eÓ3Ð3Ñ3Ð3Ð3à�a‰=× Ñ  EÓ)Ð)Ð)Ø�*˜Q‘-×+Ñ+Õ2¨dÓ2Ð2Ñ2Ð2Ð2Ø�a‰=×&Ñ&ª)Ó3Ð3Ð3Ø�a‰=×Ñ :Ó-Ð-Ð-Ø�:˜a‘=×+Ñ+Õ3¨eÓ3Ð3Ñ3Ð3Ñ3rB   c            	      óœ  ^	• Sn  " S S[         5      m	[        R                  " S5      S[        [        [
        /T	4   4U	4S jj5       n[        R                  " S5      S[
        S	[
        S[        [        /T	4   4U	4S
 jj5       n[        5       R                  U 5      n[        USS9nUR                  5         UR                  S5      n[        UR                  5      T	:X  d   eUR                  R                  S:X  d   eUR                  R                  S:X  d   e[        5        nUR!                  U5        ["        R$                  " U5      nUR                  S5      n[        UR                  5      T	:X  d   eUR                  R                  S:X  d   eUR                  R                  S:X  d   e SSS5        g! , (       d  f       g= f)z>Check that IO of a custom KB works fine as part of an EL pipe.aØ  
    [nlp]
    lang = "en"
    pipeline = ["entity_linker"]

    [components]

    [components.entity_linker]
    factory = "entity_linker"
    
    [components.entity_linker.generate_empty_kb]
    @misc = "kb_test.CustomEmptyKB.v1"
    
    [initialize]

    [initialize.components]

    [initialize.components.entity_linker]

    [initialize.components.entity_linker.kb_loader]
    @misc = "kb_test.CustomKB.v1"
    entity_vector_length = 342
    custom_field = 666
    c                   óp   ^ • \ rS rSrU 4S jr\" 5       4S\\   4S jjr\" 5       4S\\   4S jjr	Sr
U =r$ )Ú9test_serialize_subclassed_kb.<locals>.SubInMemoryLookupKBéq   c                 ó0   >• [         TU ]  X5        X0l        g rI   )ÚsuperÚ__init__Úcustom_field)Úselfr   r   rc   Ú	__class__s       €r&   rb   ÚBtest_serialize_subclassed_kb.<locals>.SubInMemoryLookupKB.__init__r   s   ø€ Ü‰GÑ˜UÔ9Ø ,ÕrB   Úexcludec                 óN  ^ ^• [        U5      nUR                  5       (       d  UR                  SS9  UR                  5       (       d&  [	        [
        R                  R                  US95      eS[        SS4U 4S jjmU 4S jU 4S	 jU4S
 jS.n[        R                  " XU5        g)z[We overwrite InMemoryLookupKB.to_disk() to ensure that self.custom_field is stored as well.T)Úparents©Úlocr$   ÚreturnNc                 óL   >• [         R                  " U STR                  05        g ©Nrc   )ÚsrslyÚ
write_jsonrc   ©r$   rd   s    €r&   Úserialize_custom_fieldsÚbtest_serialize_subclassed_kb.<locals>.SubInMemoryLookupKB.to_disk.<locals>.serialize_custom_fields~   s   ø€ Ü× Ò  ¨^¸T×=NÑ=NÐ,OÕPrB   c                 ó&   >• TR                  U 5      $ rI   )Úwrite_contents©Úprd   s    €r&   rL   ÚStest_serialize_subclassed_kb.<locals>.SubInMemoryLookupKB.to_disk.<locals>.<lambda>‚   s   ø€  d×&9Ñ&9¸!Ô&<rB   c                 óN   >• TR                   R                  R                  U 5      $ rI   )r   Ústringsr   rv   s    €r&   rL   rx   ƒ   s   ø€ ¨$¯*©*×*<Ñ*<×*DÑ*DÀQÔ*GrB   c                 ó   >• T" U 5      $ rI   © )rw   rr   s    €r&   rL   rx   „   s   ø€ Ñ+BÀ1Ô+ErB   ©Úcontentszstrings.jsonÚcustom_fields)r   r   r   Úis_dirÚ
ValueErrorr
   ÚE928Úformatr   r   r   )rd   Úpathrg   Ú	serializerr   s   `   @r&   r   ÚAtest_serialize_subclassed_kb.<locals>.SubInMemoryLookupKB.to_diskv   s†   ù€ ä˜tÓ$ˆDØ—;‘;—=‘=Ø—
‘
 4�
Ñ(Ø—;‘;—=‘=Ü ¤§¡×!3Ñ!3¸Ð!3Ð!=Ó>Ð>ðQ´4ð Q¸D÷ Qô =Ü GÜ!EñˆIô
 �LŠL˜¨'Õ2rB   c                 ó|  ^ ^• [        U5      nUR                  5       (       d&  [        [        R                  R                  US95      eUR                  5       (       d&  [        [        R                  R                  US95      eS[        SS4U 4S jjmU 4S jU 4S jU4S jS	.n[        R                  " XU5        g)
z]We overwrite InMemoryLookupKB.from_disk() to ensure that self.custom_field is loaded as well.rj   r$   rl   Nc                 óB   >• [         R                  " U 5      S   Tl        g rn   )ro   Ú	read_jsonrc   rq   s    €r&   Údeserialize_custom_fieldsÚftest_serialize_subclassed_kb.<locals>.SubInMemoryLookupKB.from_disk.<locals>.deserialize_custom_fields�   s   ø€ Ü$)§O¢O°IÓ$>¸~Ñ$N�Õ!rB   c                 ó&   >• TR                  U 5      $ rI   )Úread_contentsrv   s    €r&   rL   ÚUtest_serialize_subclassed_kb.<locals>.SubInMemoryLookupKB.from_disk.<locals>.<lambda>”   s   ø€  d×&8Ñ&8¸Ô&;rB   c                 óN   >• TR                   R                  R                  U 5      $ rI   )r   rz   r   rv   s    €r&   rL   rŽ   •   s   ø€ ¨$¯*©*×*<Ñ*<×*FÑ*FÀqÔ*IrB   c                 ó   >• T" U 5      $ rI   r|   )rw   rŠ   s    €r&   rL   rŽ   –   s   ø€ Ñ+DÀQÔ+GrB   r}   )r   r   r�   r
   ÚE929rƒ   r€   r‚   r   r   r   )rd   r„   rg   ÚdeserializerŠ   s   `   @r&   r   ÚCtest_serialize_subclassed_kb.<locals>.SubInMemoryLookupKB.from_diskˆ   s•   ù€ ä˜tÓ$ˆDØ—;‘;—=‘=Ü ¤§¡×!3Ñ!3¸Ð!3Ð!=Ó>Ð>Ø—;‘;—=‘=Ü ¤§¡×!3Ñ!3¸Ð!3Ð!=Ó>Ð>ðO´Tð O¸d÷ Oô <Ü IÜ!Gñ<ˆKô
 �NŠN˜4¨gÕ6rB   )rc   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rb   r   r   r   r   r   Ú__static_attributes__Ú__classcell__)re   s   @r&   ÚSubInMemoryLookupKBr^   q   s?   ø† õ	-ñ :JÓ9Kñ 	3¨°#©õ 	3ñ$ <LÓ;Mñ 	7¨8°C©=÷ 	7ó 	7rB   rš   zkb_test.CustomEmptyKB.v1rl   c                  ó0   >• S[         S[        4U4S jjn U $ )Nr   r   c                 ó   >• T" U USS9$ )Nr   ©r   r   rc   r|   )r   r   rš   s     €r&   Úempty_kb_factoryÚOtest_serialize_subclassed_kb.<locals>.empty_custom_kb.<locals>.empty_kb_factoryœ   s   ø€ Ù&ØØ%9Øñð rB   )r   Úint)rž   rš   s    €r&   Úempty_custom_kbÚ5test_serialize_subclassed_kb.<locals>.empty_custom_kbš   s   ø€ ð	¤Eð 	Ä÷ 	ð  ÐrB   zkb_test.CustomKB.v1r   rc   c                 ó   >^ ^• UUU 4S jnU$ )Nc                 óP   >• T" U TTS9nUR                  SS[        T5      5        U$ )Nr�   Úrandom_entityg        )r@   r   )r   r   rš   rc   r   s     €€€r&   Úcustom_kb_factoryÚJtest_serialize_subclassed_kb.<locals>.custom_kb.<locals>.custom_kb_factory©   s3   ø€ Ù$ØØ%9Ø)ñˆBð
 �M‰M˜/¨3´Ð6JÓ0KÔLØˆIrB   r|   )r   rc   r¦   rš   s   `` €r&   Ú	custom_kbÚ/test_serialize_subclassed_kb.<locals>.custom_kb¥   s   ú€ ÷	ð !Ð rB   T)Ú	auto_fillÚentity_linkerr6   iš  N)r   r   Úmiscr   r   r    r	   Úfrom_strr   Ú
initializeÚget_pipeÚtyper   r   rc   r   r   r   Úload_model_from_path)
Úconfig_stringr¡   r¨   ÚconfigÚnlpr«   Útmp_dirÚnlp2Úentity_linker2rš   s
            @r&   Útest_serialize_subclassed_kbr¸   U   s   ø€ ð€Mô2'7Ô.ô '7ôR ‡]‚]Ð-Ó.ð œX¤u¬c lÐ4GÐ&GÑHö  ó /ð ô ‡]‚]Ð(Ó)ð!Ü!ð!Ü14ð!ä	”5�'Ð.Ð.Ñ	/ö!ó *ð!ô ‹X×Ñ˜}Ó-€FÜ
  °4Ñ
8€CØ‡N�NÔà—L‘L Ó1€MÜ�× Ñ Ó!Ð%8Ó8Ð8Ð8Ø×Ñ×0Ñ0°CÓ7Ð7Ð7Ø×Ñ×(Ñ(¨CÓ/Ð/Ð/ô 
Œ˜7Ø�‰�GÔÜ×(Ò(¨Ó1ˆØŸ™ Ó7ˆä�N×%Ñ%Ó&Ð*=Ó=Ð=Ð=Ø× Ñ ×5Ñ5¸Ó<Ð<Ð<Ø× Ñ ×-Ñ-°Ó4Ð4Ñ4÷ 
�Žús   Ä'BF=Æ=
G)Úpathlibr   Útypingr   r   r   r   ro   Únumpyr   Ú	thinc.apir	   Úspacyr
   r   Úspacy.kb.kb_in_memoryr   Ú
spacy.utilr   r   r   r   Úspacy.vocabr   r   r'   r   r   r¸   r|   rB   r&   Ú<module>rÁ      s?   ðÝ ß 0Ó 0ã Ý Ý ç Ý 2ß VÓ VÝ å òò&ò$4ó@p5rB   