
    $/i.W                        d Z ddlZddlmc mZ ddlZddlZddl	m
Z
 ej                  j                   e e
e      j                  j                               ddlmZ  G d dej$                        Z G d dej$                        Z G d	 d
ej$                        Z G d dej$                        Zd Zedk(  r7 ed        ed        ed        e       Z ed        ed        ed        edej6                           edej6                   eej:                        z
   eej<                        z
           ed eej:                                 ed eej<                                 edej6                   eej:                        z
   eej<                        z
  ej6                  z  dz  dd        ed        ej>                  ejA                         rdnd       yy)a  
Comprehensive test suite for EntityExtractor (Story KG-002)

This test suite covers:
- Black-box tests: Test from outside without implementation knowledge
- White-box tests: Test internal methods and code paths
- Edge cases: Empty input, malformed text, unicode, etc.
- Multi-source extraction: markdown, code, conversations
- Confidence scoring validation
- NER vs regex fallback behavior

Author: Genesis System
Date: 2026-01-25
Story: KG-002
    N)Path)EntityExtractorc                   R    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)TestEntityExtractorBlackBoxz
    BLACK-BOX TESTS
    Test the entity extractor from outside without implementation knowledge.
    Focus on input/output behavior and acceptance criteria.
    c                 0    t        g dg d      | _        y)Set up test fixtures.)GenesisAIVAClaude)create_userdelete_userextract_entitiessystem_names	api_namesNr   	extractorselfs    4/mnt/e/genesis-system/tests/test_entity_extractor.pysetUpz!TestEntityExtractorBlackBox.setUp"   s    (6H
    c                     d}| j                   j                  |      }| j                  t        |      dd       |D cg c]  }|d   	 }}| j	                  d|d       | j	                  d|d       y	c c}w )
z.Test basic entity extraction from simple text.z,The Genesis system uses the create_user API.r   z!Should extract entities from texttypeSYSTEMzShould extract SYSTEM entitiesAPIzShould extract API entitiesN)r   r   assertGreaterlenassertInr   textentitiesetypess        r   test_extract_basic_entitiesz7TestEntityExtractorBlackBox.test_extract_basic_entities)   st    =>>2248 	3x=!-PQ %--q6--h'GHeU$AB .s   A3c                     d}| j                   j                  |      }| j                  t        |      dd       |D cg c]  }|d   	 }}| j	                  d|d       yc c}w )z>Acceptance Criteria: Extract entities from markdown documents.z
# Genesis System Documentation

The [Genesis](https://genesis.ai) system was created by Kinan.
Contact: info@genesis.ai

## Features
- Entity extraction
- Knowledge graph building
        r   z%Should extract entities from markdownr   MARKDOWN_HEADERzShould extract markdown headersN)r   extract_from_markdownr   r   r   )r   markdownr"   r#   r$   s        r   #test_extract_from_markdown_documentz?TestEntityExtractorBlackBox.test_extract_from_markdown_document6   sf    	 >>77A 	3x=!-TU$,-q6--'0QR .   A c                     d}| j                   j                  |d      }| j                  t        |      dd       |D cg c]  }|d   	 }}| j	                  d|v xs d|v d	       y
c c}w )z9Acceptance Criteria: Extract entities from code comments.z
# Genesis entity extraction module
# Author: Kinan
# API: extract_entities

def extract_entities(text):
    '''Extract entities from text using NER.'''
    pass

class EntityExtractor:
    pass
        pythonlanguager   z!Should extract entities from coder   FUNCTIONCLASSz&Should extract code structure entitiesN)r   extract_from_coder   r   
assertTrue)r   coder"   r#   r$   s        r   test_extract_from_code_commentsz;TestEntityExtractorBlackBox.test_extract_from_code_commentsJ   sz     >>33D83L 	3x=!-PQ$,-q6--%37e#34	
 .s    A)c                     d}| j                   j                  |      }| j                  t        |      dd       |D cg c]  }|d   	 }}| j	                  d|d       yc c}w )z=Acceptance Criteria: Extract entities from conversation logs.z
User: Can you help me with Genesis?
Assistant: Yes, the Genesis system is located at /mnt/e/genesis-system.
Claude: I can help with that. Contact Kinan for more info.
        r   z)Should extract entities from conversationr   SPEAKERz(Should identify speakers in conversationN)r   extract_from_conversationr   r   r   )r   conversationr"   r#   r$   s        r   #test_extract_from_conversation_logsz?TestEntityExtractorBlackBox.test_extract_from_conversation_logsd   se    
 >>;;LI 	3x=!-XY$,-q6--i(RS .r+   c                 
   d}| j                   j                  |      }|D ]a  }| j                  d|d       | j                  |d   t        t
        fd       | j                  |d   dd       | j                  |d   dd       c y	)
z?Acceptance Criteria: Confidence scoring for extracted entities.z!Genesis system at info@genesis.ai
confidencez#Entity should have confidence fieldzConfidence should be numeric        zConfidence should be >= 0.0      ?zConfidence should be <= 1.0N)r   r   r   assertIsInstanceintfloatassertGreaterEqualassertLessEqualr   r!   r"   entitys       r   test_confidence_scoring_existsz:TestEntityExtractorBlackBox.test_confidence_scoring_existss   s    2>>2248  	[FMM,0UV!!&"6eFde##F<$8#?\]  !5s<YZ		[r   c           	          d}| j                   j                  |      }g d}|D ]   }|D ]  }| j                  ||d| d        " y)z0Test that all entities have standardized fields.z6Genesis uses create_user API. Contact: info@genesis.ai)r   namer<   sourcelocationmethodzEntity should have 'z' fieldNr   r   r   )r   r!   r"   required_fieldsrE   fields         r   test_standardized_output_formatz;TestEntityExtractorBlackBox.test_standardized_output_format   s\    G>>2248X 	TF( TeV/CE7'-RST	Tr   c                 r    | j                   j                  d      }| j                  t        |      dd       y)z)Edge case: Handle empty input gracefully. r   z$Empty input should return empty listNr   r   assertEqualr   r   r"   s     r   test_empty_input_handlingz5TestEntityExtractorBlackBox.test_empty_input_handling   s-    >>2226X+QRr   c                 l    d}| j                   j                  |      }| j                  |t        d       y)z)Edge case: Handle malformed/garbage text.z!@#$%^&*()_+{}|:<>?~`z+Should return list even for malformed inputNr   r   r?   list)r   	malformedr"   s      r   test_malformed_text_handlingz8TestEntityExtractorBlackBox.test_malformed_text_handling   s.    +	>>229=h.[\r   c                 l    d}| j                   j                  |      }| j                  |t        d       y)z%Edge case: Handle unicode characters.u+   Genesis système créé par Kinan 日本語zShould handle unicode textNrW   )r   unicode_textr"   s      r   test_unicode_text_handlingz6TestEntityExtractorBlackBox.test_unicode_text_handling   s.    D>>22<@h.JKr   c                 |    ddz  }| j                   j                  |      }| j                  t        |      dd       y)z!Edge case: Handle very long text.zGenesis system. i'  r   zShould handle long textN)r   r   r   r   )r   	long_textr"   s      r   test_very_long_text_handlingz8TestEntityExtractorBlackBox.test_very_long_text_handling   s7    &.	>>229=3x=!-FGr   N)__name__
__module____qualname____doc__r   r%   r*   r5   r:   rF   rO   rU   rZ   r]   r`    r   r   r   r      sG    
CS(
4T
[	TS
]LHr   r   c                   d    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)TestEntityExtractorWhiteBoxz
    WHITE-BOX TESTS
    Test internal implementation details and code paths.
    Focus on individual methods and branches.
    c                 .    t        dgdgd      | _        y)r   r	   test_apiT)r   r   	use_spacyNr   r   s    r   r   z!TestEntityExtractorWhiteBox.setUp   s    (#!l
r   c                     t        dgd      }| j                  |j                  d       | j                  |j                  d       d}|j                  |      }| j                  t        |      dd       y	)
z.Test spaCy fallback to regex when unavailable.r	   Fr   rj   zspaCy should be disabledzNLP model should be NonezGenesis systemr   z"Should extract with regex fallbackN)r   assertFalserj   assertIsNonenlpr   r   r   )r   extractor_no_spacyr!   r"   s       r   test_spacy_fallback_mechanismz9TestEntityExtractorWhiteBox.test_spacy_fallback_mechanism   sw     -#

 	+557QR,002LM  %66t<3x=!-QRr   c                 D   d}| j                   j                  |d      }| j                  t        |      dd       |D ]`  }| j	                  d|       | j	                  d|       | j	                  d|       | j	                  d	|       | j                  |d	   d
d       b y)z4White-box: Test _extract_with_regex method directly.z@Genesis system at /mnt/e/genesis-system. Email: test@example.comtestrI   r   zRegex should extract entitiesr   rH   r<   rK   regexzMethod should be 'regex'N)r   _extract_with_regexr   r   r   rS   rD   s       r   test_extract_with_regex_methodz:TestEntityExtractorWhiteBox.test_extract_with_regex_method   s    Q>>55d65J 	3x=!-LM  	TFMM&&)MM&&)MM,/MM(F+VH-w8RS	Tr   c                    | j                   j                  s| j                  d       d}| j                   j                  |d      }t	        |      dkD  r4|D ].  }| j                  |d   dd       | j                  |d	   d
d       0 yy)z8White-box: Test _extract_with_spacy method if available.zspaCy not availablez'John Doe works at Microsoft in Seattle.rs   rt   r   rK   spacyzMethod should be 'spacy'r<   r=   zConfidence should be > 0N)r   rj   skipTest_extract_with_spacyr   rS   r   rD   s       r   test_spacy_extraction_methodz8TestEntityExtractorWhiteBox.test_spacy_extraction_method   s    ~~''MM/08>>55d65J x=1" Z  !17<VW""6,#7>XYZ r   c           	          dddddddddd	dddddd
dddddg}| j                   j                  |      }| j                  t        |      dd       | j                  |d   d   dd       y)z-White-box: Test _deduplicate_entities method.r   r	   g?z0:7rs   ru   )r   rH   r<   rJ   rI   rK   genesisgffffff?GENESISg?   zShould remove duplicatesr   r<   zShould keep highest confidenceN)r   _deduplicate_entitiesrS   r   )r   r"   deduplicateds      r   test_deduplication_logicz4TestEntityExtractorWhiteBox.test_deduplication_logic   s     yQVbht{|yQVbht{|yQVbht{|
 ~~;;HE 	\*A/IJa6=]^r   c                    d}| j                   j                  |d      }i }|D ]'  }|d   }||vrg ||<   ||   j                  |d          ) d|v r| j                  |d   d   dd	       d
|v r| j                  |d
   d   dd       yy)zBWhite-box: Validate confidence scoring for different entity types.zTGenesis system API: create_user. File: /test/file.py. Password: secret123. John Doe.rs   rt   r   r<   r   r   gffffff?z"SYSTEM should have 0.95 confidencer   zAPI should have 0.95 confidenceN)r   rv   appendrS   )r   r!   r"   confidence_by_typerE   entity_types         r   test_confidence_scoring_rangesz:TestEntityExtractorWhiteBox.test_confidence_scoring_ranges   s    e>>55d65J   	IF .K"4424";/{+226,3GH		I ))/9!<dDhi&&/6q94Abc 'r   c                     d}| j                   j                  |d      }|D cg c]  }|d   dk(  s| }}| j                  t        |      dd       yc c}w )	z)White-box: Test email extraction pattern.z)Contact: user@example.com, admin@test.orgrs   rt   r   EMAIL   zShould extract 2 emailsNr   rv   rB   r   )r   r!   r"   r#   email_entitiess        r   test_regex_patterns_for_emailsz:TestEntityExtractorWhiteBox.test_regex_patterns_for_emails  s\    :>>55d65J%-F6g1E!FFN 3Q8QR G
   AAc                     d}| j                   j                  |d      }|D cg c]  }|d   dk(  s| }}| j                  t        |      dd       yc c}w )	z'White-box: Test URL extraction pattern.z2Visit https://genesis.ai or http://www.example.comrs   rt   r   URLr   zShould extract 2 URLsNr   )r   r!   r"   r#   url_entitiess        r   test_regex_patterns_for_urlsz8TestEntityExtractorWhiteBox.test_regex_patterns_for_urls  s\    C>>55d65J#+BaqyE/ABBL 116MN Cr   c                     d}| j                   j                  |d      }|D cg c]  }|d   dk(  s| }}| j                  t        |      dd       yc c}w )	z-White-box: Test file path extraction pattern.z8/mnt/e/genesis-system/test.py and C:\Users\test\file.txtrs   rt   r   FILEr   zShould extract 2 file pathsNr   )r   r!   r"   r#   file_entitiess        r   test_regex_patterns_for_filesz9TestEntityExtractorWhiteBox.test_regex_patterns_for_files  s\    L>>55d65J$,Dq&	V0CDDM 2A7TU Er   c                 .   d}| j                   j                  |d      }|D cg c]  }|d   dk(  s| }}| j                  t        |      dd       |D cg c]  }|d   	 }}| j	                  d	|d
       | j	                  d|d       yc c}w c c}w )z.White-box: Test function extraction from code.zV
def test_function():
    pass

def another_function(param):
    return param
        r-   r.   r   r0   r   zShould extract 2 functionsrH   test_functionzShould extract test_functionanother_functionzShould extract another_functionNr   r2   rS   r   r   )r   r4   r"   r#   function_entitiesfunction_namess         r   test_code_extraction_functionsz:TestEntityExtractorWhiteBox.test_code_extraction_functions  s     >>33D83L(0L1AfI4KQLL./4PQ->?!F)??o~7UV(.:[\ M @   BBBc                 .   d}| j                   j                  |d      }|D cg c]  }|d   dk(  s| }}| j                  t        |      dd       |D cg c]  }|d   	 }}| j	                  d	|d
       | j	                  d|d       yc c}w c c}w )z+White-box: Test class extraction from code.zf
class TestClass:
    pass

class AnotherClass(BaseClass):
    def method(self):
        pass
        r-   r.   r   r1   r   zShould extract 2 classesrH   	TestClasszShould extract TestClassAnotherClasszShould extract AnotherClassNr   )r   r4   r"   r#   class_entitiesclass_namess         r   test_code_extraction_classesz8TestEntityExtractorWhiteBox.test_code_extraction_classes0  s     >>33D83L%-F6g1E!FF^,a1KL*89Qqy99k;0JKnk3PQ G :r   c                     d}| j                   j                  |      }|D cg c]  }|d   dk(  s| }}| j                  t        |      dd       yc c}w )z)White-box: Test markdown link extraction.z9[Genesis](https://genesis.ai) and [Test](http://test.com)r   MARKDOWN_LINKr   zShould extract 2 markdown linksNr   r(   rS   r   )r   r)   r"   r#   link_entitiess        r   test_markdown_link_extractionz9TestEntityExtractorWhiteBox.test_markdown_link_extractionC  sW    N>>77A$,Mq&	_0LMM]+Q0QR N
   AAc                     d}| j                   j                  |      }|D cg c]  }|d   dk(  s| }}| j                  t        |      dd       yc c}w )z+White-box: Test markdown header extraction.z-
# Header 1
## Header 2
### Header 3
        r   r'      zShould extract 3 headersNr   )r   r)   r"   r#   header_entitiess        r   test_markdown_header_extractionz;TestEntityExtractorWhiteBox.test_markdown_header_extractionK  s\    
 >>77A&.Q!F)?P2P1QQ_-q2LM Rr   c                 P   d}| j                   j                  |      }|D cg c]  }|d   dk(  s| }}| j                  t        |      dd       |D cg c]  }|d   	 }}| j	                  d|d       | j	                  d	|d
       | j	                  d|d       yc c}w c c}w )z8White-box: Test speaker identification in conversations.zA
User: Hello
Assistant: Hi there
Claude: How can I help?
        r   r7   r   zShould extract 3 speakersrH   UserzShould extract User speaker	Assistantz Should extract Assistant speakerr   zShould extract Claude speakerN)r   r8   rS   r   r   )r   r9   r"   r#   speaker_entitiesspeaker_namess         r   $test_conversation_speaker_extractionz@TestEntityExtractorWhiteBox.test_conversation_speaker_extractionW  s    
 >>;;LI'/J!1V9	3IAJJ-.3NO,<=q6==fm-JKk=2TUh/NO K >s   BBB#N)ra   rb   rc   rd   r   rq   rw   r|   r   r   r   r   r   r   r   r   r   r   re   r   r   rg   rg      sZ    
S T Z_d*SOV]$R&S
NPr   rg   c                   "    e Zd ZdZd Zd Zd Zy)TestEntityExtractorIntegrationz\
    INTEGRATION TESTS
    Test complete workflows and interactions between components.
    c                 .   t        ddgdg      }d}|j                  |      }t        d |D              }| j                  t	        |      dd       |D ]?  }| j                  d	|d
       | j                  |d	   d       | j                  |d	   d       A y)z@Integration: Complete workflow for markdown document processing.r	   r
   r   r   a  
# Genesis Knowledge Graph System

The Genesis system uses the extract_entities API to process documents.
Created by Kinan, contact at info@genesis.ai.

## Files
- /mnt/e/genesis-system/core/knowledge/entity_extractor.py

Visit [Genesis](https://genesis.ai) for more info.
        c              3   &   K   | ]	  }|d      ywr   Nre   .0r#   s     r   	<genexpr>zUTestEntityExtractorIntegration.test_end_to_end_markdown_extraction.<locals>.<genexpr>       0!AfI0   r   z$Should extract multiple entity typesr<   z#All entities should have confidencer=   r>   N)r   r(   setr   r   r   rB   rC   )r   r   r)   r"   r$   rE   s         r   #test_end_to_end_markdown_extractionzBTestEntityExtractorIntegration.test_end_to_end_markdown_extractiono  s    ##V,)*
	

 228< 0x003u:q*PQ  	<FMM,0UV##F<$8#>  !5s;	<r   c                     t        dg      }d}|j                  |d      }t        d |D              }| j                  d|v xs d|v d	       y
)z3Integration: Complete workflow for code processing.r	   r   aH  
# Genesis entity extraction module
# Uses the Genesis system for NER

def extract_entities(text):
    '''
    Extract entities from text.

    Args:
        text: Input text to process

    Returns:
        List of entities
    '''
    return []

class EntityExtractor:
    '''Main entity extraction class.'''
    pass
        r-   r.   c              3   &   K   | ]	  }|d      ywr   re   r   s     r   r   zQTestEntityExtractorIntegration.test_end_to_end_code_extraction.<locals>.<genexpr>  r   r   r0   r1   zShould extract code structureN)r   r2   r   r3   )r   r   r4   r"   r$   s        r   test_end_to_end_code_extractionz>TestEntityExtractorIntegration.test_end_to_end_code_extraction  s_    #)=	* ..th.G 0x00%37e#3+	
r   c                     t        dgd      }d}|j                  |      }t        d |D              }| j                  d|d       y)	z:Integration: Test that both spaCy and regex work together.r	   Trl   z5Genesis system created by John Doe at info@genesis.aic              3   &   K   | ]	  }|d      yw)rK   Nre   r   s     r   r   zOTestEntityExtractorIntegration.test_mixed_extraction_methods.<locals>.<genexpr>  s     4aak4r   ru   zShould have regex extractionN)r   r   r   r   )r   r   r!   r"   methodss        r   test_mixed_extraction_methodsz<TestEntityExtractorIntegration.test_mixed_extraction_methods  sQ    ##
	
 G--d3 4844 	gw(FGr   N)ra   rb   rc   rd   r   r   r   re   r   r   r   r   i  s    
<> 
DHr   r   c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestEntityExtractorEdgeCaseszJ
    EDGE CASE TESTS
    Test boundary conditions and unusual inputs.
    c                 "    t               | _        y)r   Nr   r   s    r   r   z"TestEntityExtractorEdgeCases.setUp  s    (*r   c                     | j                  t              5  | j                  j                  d       ddd       y# 1 sw Y   yxY w)zEdge case: None as input.N)assertRaises	Exceptionr   r   r   s    r   test_none_input_handlingz5TestEntityExtractorEdgeCases.test_none_input_handling  s7    y) 	2NN++D1	2 	2 	2s	   ;Ac                 h    | j                   j                  d      }| j                  |t        d       y)zEdge case: Only numbers.	123456789Should return listNrW   rT   s     r   test_numeric_only_inputz4TestEntityExtractorEdgeCases.test_numeric_only_input  s)    >>22;?h.BCr   c                 h    | j                   j                  d      }| j                  |t        d       y)z#Edge case: Only special characters.z
!@#$%^&*()r   NrW   rT   s     r   test_special_characters_onlyz9TestEntityExtractorEdgeCases.test_special_characters_only  s)    >>22<@h.BCr   c                 r    | j                   j                  d      }| j                  t        |      dd       y)zEdge case: Only whitespace.z   
	  r   z#Whitespace should yield no entitiesNrR   rT   s     r   test_whitespace_only_inputz7TestEntityExtractorEdgeCases.test_whitespace_only_input  s-    >>22=AX+PQr   c                 h    | j                   j                  d      }| j                  |t        d       y)zEdge case: Single character.ar   NrW   rT   s     r   test_single_character_inputz8TestEntityExtractorEdgeCases.test_single_character_input  s)    >>2237h.BCr   c                     t        dg      }d}|j                  |      }|D cg c]  }|d   dk(  s| }}| j                  t        |      dd       yc c}w )z+Edge case: Same entity repeated many times.r	   r   a   Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis Genesis rH   r   z$Should deduplicate repeated entitiesN)r   r   rS   r   r   r   r!   r"   r#   genesis_entitiess         r   test_repeated_entitiesz3TestEntityExtractorEdgeCases.test_repeated_entities  sc    #)=	--d3 (0J!1V9	3IAJJ-.3YZ Ks
   AAc                     d}| j                   j                  |      }|D cg c]  }|d   	 }}| j                  d|d       | j                  d|d       yc c}w )z&Edge case: Overlapping regex patterns.z*user@example.com is at https://example.comr   r   zShould extract emailr   zShould extract URLNrL   r    s        r   test_overlapping_patternsz6TestEntityExtractorEdgeCases.test_overlapping_patterns  s[    ;>>2248 %--q6--gu&<=eU$89 .s   Ac                     t        dg      }d}|j                  |      }|D cg c]"  }|d   dk(  r|d   j                         dk(  r|$ }}| j                  t	        |      dd	       y
c c}w )z*Edge case: Different cases of same entity.r	   r   zGenesis GENESIS genesis GeNeSiSr   r   rH   r~   r   z'Should handle case-insensitive matchingN)r   r   lowerrS   r   r   s         r   test_case_sensitivityz2TestEntityExtractorEdgeCases.test_case_sensitivity  s    #)=	0--d3  
yH$6):i)G 
 

 	-.3\]
s   'A+N)ra   rb   rc   rd   r   r   r   r   r   r   r   r   r   re   r   r   r   r     s:    
+2
D
D
R
D
[:^r   r   c                     t        j                         } t        j                         }|j                  | j	                  t
                     |j                  | j	                  t                     |j                  | j	                  t                     |j                  | j	                  t                     t        j                  d      }|j                  |      }|S )z!Run all tests and return results.r   )	verbosity)unittest
TestLoader	TestSuiteaddTestsloadTestsFromTestCaser   rg   r   r   TextTestRunnerrun)loadersuiterunnerresults       r   	run_testsr   
  s       "F E 
NN6//0KLM	NN6//0KLM	NN6//0NOP	NN6//0LMN $$q1FZZFMr   __main__zQ
================================================================================z*ENTITY EXTRACTOR TEST SUITE - Story KG-002zQ================================================================================
zTEST SUMMARYzP================================================================================zTests run: zSuccesses: z
Failures: zErrors: zSuccess Rate: d   z.1f%r   )!rd   builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arr   syspathlibr   pathr   str__file__parentcore.knowledge.entity_extractorr   TestCaser   rg   r   r   r   ra   printr   testsRunr   failureserrorsexitwasSuccessfulre   r   r   <module>r
     s      
  DN))001 2 ;GH("3"3 GHTAP("3"3 APHUHX%6%6 UHvC^8#4#4 C^L& z	-	
67	-[F	-	.	&M	K(
)*	K#foo*>>V]]ASST
UV	Js6??+,
-.	HS'(
)*	NV__s6??/CCc&--FXX\b\k\kknqqsvwwx
yz	- CHH&&&(Qa0% r   