
    i                         d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
Z
 e	ej                  j                  dd            Z G d d      Z G d d	      Z G d
 d      Z G d d      Zy)u   Hermes Agent 전수조사 검증 테스트 (task-850.1)

보고서의 핵심 내용이 올바르게 작성되었는지 검증합니다.
    N)PathWORKSPACE_ROOTz/home/jay/workspacec                        e Zd ZdZddZddZy)TestHermesAuditReportExistsu%   보고서 파일 존재 여부 검증Nc                    t         dz  }|j                  } |       }|st        j                  d|       dz   dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}y)u+   보고서 파일이 생성되어야 한다.*memory/research/hermes-agent-full-audit.mdzReport file not found: zC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}report_path)py0py2py4N)

_WORKSPACEexists
@pytest_ar_format_assertmsg@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)selfr	   @py_assert1@py_assert3@py_format5s        ./home/jay/workspace/tests/test_hermes_audit.pytest_report_file_existsz3TestHermesAuditReportExists.test_report_file_exists   s~     #OO!!L!#L#LL'>{m%LLLLLLL{LLL{LLL!LLL#LLLLLL    c                    t         dz  }|j                         }t        |      }d}||kD  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        j                  d      d	z   d
|iz  }t        t        j                  |            dx}x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }	t        j                  d      dz   d|	iz  }
t        t        j                  |
            dx}}y)u(   보고서에 내용이 있어야 한다.r   i'  )>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)slencontent)r
   py1py3py6zReport content too shortz
>assert %(py8)spy8NHermesinz%(py1)s in %(py3)sr"   r#   zReport missing 'Hermes' keyword
>assert %(py5)spy5)r   	read_textr    r   _call_reprcomparer   r   r   r   r   r   r   )r   r	   r!   @py_assert2@py_assert5@py_assert4@py_format7@py_format9@py_assert0@py_format4@py_format6s              r   test_report_has_contentz3TestHermesAuditReportExists.test_report_has_content   s    #OO'')7|?e?|e#???|e??????s???s??????7???7???|???e???%????????Ex7"EEEx7EEExEEEEEE7EEE7EEEE$EEEEEEEr   )returnN)__name__
__module____qualname____doc__r   r7    r   r   r   r      s    /M
Fr   r   c                       e Zd ZdZej
                  defd       ZdeddfdZdeddfdZ	deddfdZ
deddfd	Zdeddfd
ZdeddfdZdeddfdZy)TestHermesAuditReportStructureu   보고서 섹션 구조 검증r8   c                 4    t         dz  }|j                         S Nr   r   r-   r   r	   s     r   report_contentz-TestHermesAuditReportStructure.report_content!        #OO$$&&r   rD   Nc                 N   d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}y)	u&   Core Agent 섹션이 있어야 한다.z
Core Agentr'   r)   rD   r*   assert %(py5)sr,   Nr   r.   r   r   r   r   r   r   r   rD   r4   r/   r5   r6   s         r   test_has_core_agent_sectionz:TestHermesAuditReportStructure.test_has_core_agent_section&   s[    -|~----|~---|------~---~-------r   c                    g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }	|j                  |	       |st        j                  dfd	|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      ndd
z  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u-   Memory & Learning 섹션이 있어야 한다.zMemory & LearningMemoryr'   z%(py3)s in %(py5)srD   r#   r,   %(py7)spy7z%(py10)s in %(py12)spy10py12%(py14)spy14   assert %(py17)spy17N
r   r.   r   r   r   r   append_format_boolopr   r   r   rD   r   r/   r1   r4   @py_assert9@py_assert11r6   @py_format8@py_format13@py_format15@py_format16@py_format18s                 r   test_has_memory_sectionz6TestHermesAuditReportStructure.test_has_memory_section*   s    R"R"n4RRN8RRRRR"nRRR"RRRRRRnRRRnRRRRRRRNRRRRRRRRRNRRRNRRRRRRRRRRRRRRr   c                    g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }	|j                  |	       |st        j                  dfd	|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      ndd
z  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u*   Skills & Tools 섹션이 있어야 한다.zSkills & ToolsSkillsr'   rM   rD   rN   rO   rP   rQ   rR   rU   rV   rW   rX   rY   NrZ   r]   s                 r   test_has_skills_sectionz6TestHermesAuditReportStructure.test_has_skills_section.   s    OO>1OXOX5OOOOO>OOOOOOOOO>OOO>OOOOOOOXOOOXOOOOOOOOOOOOOOOOOOOOOOOr   c                 N   d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}y)	u$   Security 섹션이 있어야 한다.Securityr'   r)   rD   r*   rG   r,   NrH   rI   s         r   test_has_security_sectionz8TestHermesAuditReportStructure.test_has_security_section2   s[    +z^++++z^+++z++++++^+++^+++++++r   c                 N   d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}y)	u*   Infrastructure 섹션이 있어야 한다.Infrastructurer'   r)   rD   r*   rG   r,   NrH   rI   s         r   test_has_infrastructure_sectionz>TestHermesAuditReportStructure.test_has_infrastructure_section6   s^    1>1111>111111111>111>1111111r   c                    g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }	|j                  |	       |st        j                  dfd	|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      ndd
z  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u*   UX & Interface 섹션이 있어야 한다.zUX & InterfaceUXr'   rM   rD   rN   rO   rP   rQ   rR   rU   rV   rW   rX   rY   NrZ   r]   s                 r   test_has_ux_sectionz2TestHermesAuditReportStructure.test_has_ux_section:   s    KK>1KTKT^5KKKKK>KKKKKKKKK>KKK>KKKKKKKT^KKKTKKKKKK^KKK^KKKKKKKKKKKKKKr   c                    g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }	|j                  |	       |st        j                  dfd	|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      ndd
z  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u7   도입 권장 항목 요약 섹션이 있어야 한다.u   도입 권장u   요약r'   rM   rD   rN   rO   rP   rQ   rR   rU   rV   rW   rX   rY   NrZ   r]   s                 r   test_has_summary_sectionz7TestHermesAuditReportStructure.test_has_summary_section>       NN.0NHNH4NNNNN.NNNNNNNNN.NNN.NNNNNNNHNNNHNNNNNNNNNNNNNNNNNNNNNNNr   )r9   r:   r;   r<   pytestfixturestrrD   rJ   re   rh   rk   rn   rq   rs   r=   r   r   r?   r?      s    (^^' ' '.# .$ .Sc Sd SPc Pd P, , ,2c 2d 2L# L$ LOs Ot Or   r?   c                       e Zd ZdZej
                  defd       ZdeddfdZdeddfdZ	deddfdZ
deddfd	Zdeddfd
ZdeddfdZy)!TestHermesAuditReportCompletenessu   전수조사 완전성 검증r8   c                 4    t         dz  }|j                         S rA   rB   rC   s     r   rD   z0TestHermesAuditReportCompleteness.report_contentF   rE   r   rD   Nc                    g d}|D ]  }||v }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j
                  |      nddt        j                         v st        j                  |      rt        j
                  |      nddz  }t        j                  d|       dz   d	|iz  }t        t        j                  |            d
} y
)u(   모든 카테고리가 있어야 한다.)z1. Core Agentz2. Memory & Learningz3. Skills & Toolsu   4. Skills 카탈로그 (전수)z5. Securityz6. Infrastructurez7. UX & Interface (Gateway)z8. Analytics & Observabilityr'   )z%(py0)s in %(py2)scatrD   )r
   r   zMissing category: z
>assert %(py4)sr   N)	r   r.   r   r   r   r   r   r   r   )r   rD   
categoriesr|   r   @py_format3r   s          r   test_has_all_categoriesz9TestHermesAuditReportCompleteness.test_has_all_categoriesK   s    	

  	EC.(DDD3.DDDDDD3DDD3DDDDDD.DDD.DDDD,>se*DDDDDDD	Er   c                    d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}d	}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}y)u)   도입 가치 평가가 있어야 한다.u   상r'   r)   rD   r*   rG   r,   Nu   중u   하rH   rI   s         r   test_has_value_ratingsz8TestHermesAuditReportCompleteness.test_has_value_ratingsZ   s   &u&&&&u&&&u&&&&&&&&&&&&&&&&&u&&&&u&&&u&&&&&&&&&&&&&&&&&u&&&&u&&&u&&&&&&&&&&&&&&&&r   c                 N   d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}y)	u,   도입 난이도 평가가 있어야 한다.u	   난이도r'   r)   rD   r*   rG   r,   NrH   rI   s         r   test_has_difficulty_ratingsz=TestHermesAuditReportCompleteness.test_has_difficulty_ratings`   s]     ,{n,,,,{n,,,{,,,,,,n,,,n,,,,,,,r   c                    g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }	|j                  |	       |st        j                  dfd	|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      ndd
z  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u5   우리 시스템과의 비교표가 있어야 한다.u   우리 시스템u   비교r'   rM   rD   rN   rO   rP   rQ   rR   rU   rV   rW   rX   rY   NrZ   r]   s                 r   test_has_comparison_tablesz<TestHermesAuditReportCompleteness.test_has_comparison_tablese   s    Q!Q!^3QxQx>7QQQQQ!^QQQ!QQQQQQ^QQQ^QQQQQQQx>QQQxQQQQQQ>QQQ>QQQQQQQQQQQQQQr   c                    |j                  d      }d}||k\  }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d|       dz   d	|iz  }t        t        j                  |            d
x}}y
)u1   항목 수가 충분해야 한다 (최소 50개).z### 2   )>=)z%(py0)s >= %(py3)s
item_count)r
   r#   z"Expected at least 50 items, found r+   r,   N)
countr   r.   r   r   r   r   r   r   r   )r   rD   r   r/   r   r5   r6   s          r   test_item_count_sufficientz<TestHermesAuditReportCompleteness.test_item_count_sufficienti   s}     $))&1
RzRRRRzRRRRRRRzRRRzRRRRRRR#Ej\!RRRRRRRr   c                    g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }	|j                  |	       |st        j                  dfd	|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      ndd
z  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u)   구현 방식 설명이 있어야 한다.u   구현 방식u   구현r'   rM   rD   rN   rO   rP   rQ   rR   rU   rV   rW   rX   rY   NrZ   r]   s                 r   test_has_implementation_detailszATestHermesAuditReportCompleteness.test_has_implementation_detailso   rt   r   )r9   r:   r;   r<   ru   rv   rw   rD   r   r   r   r   r   r   r=   r   r   ry   ry   C   s    '^^' ' 'Ec Ed E'S 'T '-# -$ -
R R RS S SOc Od Or   ry   c                       e Zd ZdZej
                  defd       ZdeddfdZdeddfdZ	deddfdZ
deddfd	Zdeddfd
ZdeddfdZdeddfdZdeddfdZy)TestHermesAuditKeyConceptsu"   핵심 개념 포함 여부 검증r8   c                 4    t         dz  }|j                         S rA   rB   rC   s     r   rD   z)TestHermesAuditKeyConcepts.report_contentw   rE   r   rD   Nc                 x   g }d}||v }|}|sd}|j                   } |       }||v }	|	}|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }
dd|
iz  }|j                  |       |st        j                  d	fd	f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                        t        j                  |      d
z  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}x}	x}}y)u8   프롬프트 인젝션 탐지가 언급되어야 한다.u	   인젝션	injectionr'   rM   rD   rN   rO   rP   zJ%(py10)s in %(py16)s
{%(py16)s = %(py14)s
{%(py14)s = %(py12)s.lower
}()
}rS   rT   rV   py16%(py18)spy18rW   assert %(py21)spy21Nlowerr   r.   r   r   r   r   r[   r\   r   r   r   rD   r   r/   r1   r4   r^   @py_assert13@py_assert15r_   r6   r`   @py_format17@py_format19@py_format20@py_format22s                   r   )test_prompt_injection_detection_mentionedzDTestHermesAuditKeyConcepts.test_prompt_injection_detection_mentioned|   s    U{U{n,UU~?S?SU?S?UU?U0UUUUU{nUUU{UUUUUUnUUUnUUUUUUU?UUUUUUUUUU~UUU~UUU?SUUU?UUUUUUUUUUUUUUUr   c                 x   g }d}||v }|}|sd}|j                   } |       }||v }	|	}|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }
dd|
iz  }|j                  |       |st        j                  d	fd	f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                        t        j                  |      d
z  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}x}	x}}y)u.   컨텍스트 압축이 언급되어야 한다.u   압축compressr'   rM   rD   rN   rO   rP   r   r   r   r   rW   r   r   Nr   r   s                   r   "test_context_compression_mentionedz=TestHermesAuditKeyConcepts.test_context_compression_mentioned       QxQx>)QZQ>;O;OQ;O;QQZ;Q-QQQQQx>QQQxQQQQQQ>QQQ>QQQQQQQZ;QQQQZQQQQQQ>QQQ>QQQ;OQQQ;QQQQQQQQQQQQQQQr   c                 4   g }d}||v }|}|sd}||v }|}|sd}||v }	|	}|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }
dd	|
iz  }|j                  |       |st        j                  dfd
|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }|j                  |       |st        j                  d	fd|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}x}x}}	y)u1   Frozen Snapshot 패턴이 언급되어야 한다.FrozenSnapshotu	   스냅샷r'   rM   rD   rN   rO   rP   rQ   rR   rU   rV   )z%(py17)s in %(py19)s)rY   py19z%(py21)sr   rW   zassert %(py24)spy24NrZ   )r   rD   r   r/   r1   r4   r^   r_   @py_assert16@py_assert18r6   r`   ra   rb   r   r   @py_format23@py_format25s                     r   test_frozen_snapshot_mentionedz9TestHermesAuditKeyConcepts.test_frozen_snapshot_mentioned   s#   jxjx>)jZjZ>-Ij[j[\jMjjjjjx>jjjxjjjjjj>jjj>jjjjjjjjZ>jjjZjjjjjj>jjj>jjjjjjj[\jjjj[jjjjjj\jjjj\jjjjjjjjjjjjjjjjr   c                    g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }	|j                  |	       |st        j                  dfd	|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      ndd
z  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u&   FTS5 검색이 언급되어야 한다.FTS5u   전문 검색r'   rM   rD   rN   rO   rP   rQ   rR   rU   rV   rW   rX   rY   NrZ   r]   s                 r   test_fts5_search_mentionedz5TestHermesAuditKeyConcepts.test_fts5_search_mentioned   s    LvLv'L?L?n+LLLLLvLLLvLLLLLLLLLLLLLLLL?nLLL?LLLLLLnLLLnLLLLLLLLLLLLLLr   c                 x   g }d}|j                   } |       }||v }|}|sd}||v }	|	}|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }
dd|
iz  }|j                  |       |st        j                  d	fd	|f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndd
z  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}x}x}}	y)u+   스킬 시스템이 언급되어야 한다.skillu   스킬r'   )zD%(py3)s in %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.lower
}()
}rD   )r#   r,   rP   py9z%(py11)spy11)z%(py14)s in %(py16)s)rV   r   r   r   rW   r   r   Nr   )r   rD   r   r/   @py_assert6@py_assert8r1   r4   r   r   @py_format10@py_format12r   r   r   r   s                   r   test_skill_system_mentionedz6TestHermesAuditKeyConcepts.test_skill_system_mentioned   s    NwN...N.0Nw00NHNH4NNNNNw0NNNwNNNNNN.NNN.NNN.NNN0NNNNNNNHNNNHNNNNNNNNNNNNNNNNNNNNNNNNr   c                    g }d}||v }|}|s%d}||v }|}|sd}|j                   }	 |	       }
||
v }|}|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }|j                  |       |sBt        j                  dfd
|f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }|j                  |       |st        j                  dfd
f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  	      t        j                  |
      dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}x}x}x}x}	}
y)u4   서브에이전트 위임이 언급되어야 한다.u   서브에이전트u   위임delegater'   rM   rD   rN   rO   rP   rQ   rR   rU   rV   )zJ%(py17)s in %(py23)s
{%(py23)s = %(py21)s
{%(py21)s = %(py19)s.lower
}()
})rY   r   r   py23z%(py25)spy25rW   zassert %(py28)spy28Nr   )r   rD   r   r/   r1   r4   r^   r_   r   @py_assert20@py_assert22r   r6   r`   ra   rb   @py_format24@py_format26@py_format27@py_format29s                       r   "test_subagent_delegation_mentionedz=TestHermesAuditKeyConcepts.test_subagent_delegation_mentioned   sX   {#{#~5{{^9S{Wa{eseyey{eye{{Wae{W{{{{{#~{{{#{{{{{{~{{{~{{{{{{{{^{{{{{{{{{^{{{^{{{{{{{Wae{{{{Wa{{{{{{es{{{es{{{ey{{{e{{{{{{{{{{{{{{{{r   c                 x   g }d}||v }|}|sd}|j                   } |       }||v }	|	}|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }
dd|
iz  }|j                  |       |st        j                  d	fd	f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                        t        j                  |      d
z  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}x}	x}}y)u(   보안 스캔이 언급되어야 한다.u   보안securityr'   rM   rD   rN   rO   rP   r   r   r   r   rW   r   r   Nr   r   s                   r    test_security_scanning_mentionedz;TestHermesAuditKeyConcepts.test_security_scanning_mentioned   r   r   c                    g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }	|j                  |	       |st        j                  dfd	|f      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      ndd
z  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u%   요약 테이블이 있어야 한다.u   가치 '상'u
   가치 상r'   rM   rD   rN   rO   rP   rQ   rR   rU   rV   rW   rX   rY   NrZ   r]   s                 r   test_summary_table_existsz4TestHermesAuditKeyConcepts.test_summary_table_exists   s    Q~Q~/Q<Q<>3QQQQQ~QQQ~QQQQQQQQQQQQQQQQ<>QQQ<QQQQQQ>QQQ>QQQQQQQQQQQQQQr   )r9   r:   r;   r<   ru   rv   rw   rD   r   r   r   r   r   r   r   r   r=   r   r   r   r   t   s    ,^^' ' 'V VPT VR R RkS kT kM M MO# O$ O| | |Rs Rt RR R Rr   r   )r<   builtinsr   _pytest.assertion.rewrite	assertionrewriter   ospathlibr   ru   environgetr   r   r?   ry   r   r=   r   r   <module>r      sf   
  	  "**..!13HIJ
F F "O "OJ.O .Ob&R &Rr   