
    wj-                        d Z ddlm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ddlmZmZmZmZmZmZmZmZmZ dZdZddZed	fd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)ud  task-2554+2 §5 신규 fixture #6: post 후 24h+ fresh 미도착 시 marker + ESCALATED + auto-resume X.

회장 §명시 (2026-05-12) §3:
  - owner trigger POSTED 후 fresh Gemini review (commit_id == PR head) 가 24h 안 도착하면
    ``record_no_fresh_evidence_after_post`` 가 ``<task>.posted-but-no-fresh-evidence`` marker 생성.
  - decision_code = POSTED_BUT_NO_FRESH_EVIDENCE + critical_code = CRITICAL_BLOCK_OVERRIDE.
  - executor 는 OWNER_DECISION_REQUIRED 로 escalate, auto-resume 안 함.

또한 §3 detect_fresh_gemini_review 가 fresh 도착 시 GEMINI_FRESH_DETECTED + AUTO_MERGE_ALLOWED.
    )annotationsN)Path)	AUTO_MERGE_ALLOWEDBLOCKED_WITH_REASONCRITICAL_BLOCK_OVERRIDEGEMINI_FRESH_DETECTEDOWNER_TRIGGER_FAILEDOWNER_TRIGGER_POSTEDPOSTED_BUT_NO_FRESH_EVIDENCEMergeQueueExecutorPRMeta(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc                :    d }d }d }d }t        |||||       S )Nc                    t         NNotImplementedError)argsenvs     N/home/jay/workspace/anu_v2/tests/test_executor_posted_but_no_fresh_evidence.pyghz_build_executor.<locals>.gh%       !!    c                    t         r   r   )r   s    r   gitz_build_executor.<locals>.git(   r   r   c                     y)Nr    )pathss    r   pytest_runnerz&_build_executor.<locals>.pytest_runner+   s    r   c                     y r   r   )payloads    r   audit_writerz%_build_executor.<locals>.audit_writer.   s    r   )	gh_runner
git_runnerr    r#   task_md_root)r   )tmp_pathr   r   r    r#   s        r   _build_executorr(   $   s4    "" #! r   i   c                *    t        || ddddddd	      S )	Nztask/task-2554+1-dev5mainr   TGEMINI_UNRESOLVEDBLOCKEDr   )	numberhead_shahead_refbase_refchanged_filesci_required_all_successgemini_statusmerge_state_statusqueue_predecessors_open)r   )headr.   s     r   _prr8   :   s*    ( $)$ !
 
r   c                6   t        |       }| dz  dz  }|j                  dt               t        |ddi      }|j                  }d}||k(  }|st        j                  d|fd	||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}t        j                  |j                  d            }	|	d   }
d}|
|k(  }|slt        j                  d|fd|
|f      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}
x}}|	d   }
|
t         k(  }|st        j                  d|fd|
t         f      t        j                  |
      dt        j                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}
}|	d   }
|
t        k(  }|st        j                  d|fd|
t        f      t        j                  |
      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x}
}|	d   d   }
d}|
|k(  }|slt        j                  d|fd|
|f      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}
x}}y )Nmemoryeventstask-2554+2audit_token_hash_prefixabcd1234task_idproutcome_codedecision_dirextra task-2554+2.owner-trigger.posted==z,%(py2)s
{%(py2)s = %(py0)s.name
} == %(py5)smarkerpy0py2py5assert %(py7)spy7utf-8encodingrA   r)   z%(py1)s == %(py4)spy1py4assert %(py6)spy6r7   z%(py1)s == %(py3)s_PR_HEADrU   py3assert %(py5)srM   rB   r
   rD   )r(   record_owner_trigger_outcomer8   r
   name
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationjsonloads	read_textrZ   r'   executorrC   rI   @py_assert1@py_assert4@py_assert3@py_format6@py_format8r"   @py_assert0@py_assert2@py_format5@py_format7@py_format4s                  r   ;test_record_posted_marker_creates_owner_trigger_posted_filerw   K   s=   x(Hh&1L225)!(*5 3 F ;;<<<;<<<<<;<<<<<<<6<<<6<<<;<<<<<<<<<<<jj))7);<G4=C=C=C=C6?&?h&&&&?h&&&?&&&&&&h&&&h&&&&&&&>":"&:::::"&::::"::::::&::::&::::::::756D*D6*DDDD6*DDD6DDD*DDDDDDDr   c                   t        |       }| dz  dz  }|j                  dt               t        |ddi      }|j                  }d}||k(  }|st        j                  d|fd	||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}t        j                  |j                  d            }	|	d   }
|
t        k(  }|st        j                  d|fd|
t        f      t        j                  |
      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x}
}|	d   d   }
d}|
|k(  }|slt        j                  d|fd|
|f      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}
x}}y )Nr:   r;   r<   
error_codeHTTP_POST_FAILr?    task-2554+2.owner-trigger.failedrF   rH   rI   rJ   rN   rO   rP   rQ   rB   rY   r	   r[   r]   rM   rD   rS   rT   rW   rX   )r(   r^   r8   r	   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   )r'   rl   rC   rI   rm   rn   ro   rp   rq   r"   rr   rs   rv   rt   ru   s                  r   ;test_record_failed_marker_creates_owner_trigger_failed_filer|   ]   s   x(Hh&1L225)!-. 3 F ;;<<<;<<<<<;<<<<<<<6<<<6<<<;<<<<<<<<<<<jj))7);<G>":"&:::::"&::::"::::::&::::&::::::::7L)=-==)-=====)-====)===-========r   c                    t        |       }t        j                  t        d      5  |j	                  dt               d|        d d d        y # 1 sw Y   y xY w)Nr
   matchr<   SOMETHING_ELSE)r@   rA   rB   rC   )r(   pytestraises
ValueErrorr^   r8   r'   rl   s     r   (test_record_outcome_rejects_unknown_coder   m   sQ    x(H	z)?	@ 
--!u)!	 	. 	

 
 
s   AAc                \   t        |       }|j                  t               t              }|j                  }|t
        k(  }|st        j                  d|fd|t
        f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t
              rt        j                  t
              nddz  }dd|iz  }t        t        j                  |            d x}}|j                  }|t        k(  }|st        j                  d|fd	|t        f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      d
t        j                         v st        j                  t              rt        j                  t              nd
dz  }dd|iz  }t        t        j                  |            d x}}y )NrA   latest_gemini_review_commit_idrF   z0%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py4)soutcomer   rK   rL   rV   rW   rX   z.%(py2)s
{%(py2)s = %(py0)s.reason
} == %(py4)sr   )r(   detect_fresh_gemini_reviewr8   rZ   decisionr   r`   ra   rb   rc   rd   re   rf   rg   reasonr   )r'   rl   r   rm   ro   rt   ru   s          r   4test_detect_fresh_review_when_commit_id_matches_headr   {   s0   x(H115'/ 2 G 111111111111171117111111111111111111111>>2>22222>222222272227222>222222222222222222r   c                   t        |       }|j                  t               t              }|j                  }|t
        k(  }|st        j                  d|fd|t
        f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t
              rt        j                  t
              nddz  }dd|iz  }t        t        j                  |            d x}}|j                  }d	}||k(  }|st        j                  d|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y )Nr   rF   r   r   r   r   rW   rX   gemini_fresh_review_not_yetz.%(py2)s
{%(py2)s = %(py0)s.reason
} == %(py5)srJ   rN   rO   )r(   r   r8   _DIFFERENT_HEADr   r   r`   ra   rb   rc   rd   re   rf   rg   r   )
r'   rl   r   rm   ro   rt   ru   rn   rp   rq   s
             r   ;test_detect_fresh_review_when_commit_id_does_not_match_headr      s!   x(H115'6 2 G 222222222222272227222222222222222222222>>:::>:::::>:::::::7:::7:::>:::::::::::r   c                   t        |       }| dz  dz  }|j                  dt               dd|      }|j                  }|t        k(  }|st        j                  d|fd|t        f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      d
t        j                         v st        j                  t              rt        j                  t              nd
dz  }dd|iz  }t        t        j                  |            dx}}|j                  }|t        k(  }|st        j                  d|fd|t        f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            dx}}|j                  }|t         k(  }|st        j                  d|fd|t         f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      dt        j                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx}}|j"                  }| }|sydd	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      dz  }t        t        j                  |            dx}}|dz  }	|	j$                  } |       }|sddt        j                         v st        j                  |	      rt        j                  |	      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}t'        j(                  |	j+                  d            }
|
d   }|t        k(  }|st        j                  d|fd|t        f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            dx}}|
d   }d }||k(  }|slt        j                  d|fd!||f      t        j                  |      t        j                  |      d"z  }dd|iz  }t        t        j                  |            dx}x}}|
d#   }d$}d%}||z  }||k(  }|st        j                  d|fd&||f      t        j                  |      t        j                  |      t        j                  |      d'z  }d(d)|iz  }t        t        j                  |            dx}x}x}x}}y)*uR   24h+ 경과 + fresh 미도착 → posted-but-no-fresh-evidence marker + ESCALATED.r:   r;   r<   _ Q r@   rA   elapsed_secondsthreshold_secondsrC   rF   r   r   r   r   rW   rX   Nr   r   z5%(py2)s
{%(py2)s = %(py0)s.critical_code
} == %(py4)sr   z.assert not %(py2)s
{%(py2)s = %(py0)s.passed
}rK   rL   (task-2554+2.posted-but-no-fresh-evidencezAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}rI   rP   rQ   decision_coderY   r[   r]   rM   
escalationOWNER_DECISION_REQUIREDrS   rT   r      i  )z%(py1)s == (%(py4)s * %(py6)s))rU   rV   rX   zassert %(py9)spy9)r(   #record_no_fresh_evidence_after_postr8   r   r   r`   ra   rb   rc   rd   re   rf   rg   r   r   critical_coder   passedexistsrh   ri   rj   )r'   rl   rC   r   rm   ro   rt   ru   rv   rI   r"   rr   rs   rp   @py_assert5@py_assert7rq   @py_format10s                     r   :test_no_fresh_evidence_after_24h_creates_marker_and_blocksr      s   x(Hh&1L::5!#! ; G 222222222222272227222222222222222222222>>9>99999>999999979997999>999999999999999999  ; $;;;;; $;;;;;;;7;;;7;;; ;;;;;;$;;;;$;;;;;;;;~~~ww~FFF===??66=?jj))7);<G?#C#'CCCCC#'CCCC#CCCCCC'CCCC'CCCCCCCC< =$== $===== $==== ===$========$%22d2d2%2222%222%222222d22222222r   c                V   t        |       }| dz  dz  }|j                  dt               dd|      }|j                  }d}||k(  }|st	        j
                  d|fd	||f      d
t        j                         v st	        j                  |      rt	        j                  |      nd
t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}}|dz  }	|	j                  } |       }| }
|
sddt        j                         v st	        j                  |	      rt	        j                  |	      ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            dx}x}}
y)uI   24h 안 → grace period — marker 미생성, BLOCKED with grace reason.r:   r;   r<   i  r   r   within_grace_periodrF   r   r   rJ   rN   rO   Nr   zEassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}rI   r   )r(   r   r8   r   r`   ra   rb   rc   rd   re   rf   rg   r   )r'   rl   rC   r   rm   rn   ro   rp   rq   rI   r   s              r   3test_within_24h_grace_period_does_not_create_markerr      s   x(Hh&1L::5!#! ; G >>222>22222>222222272227222>22222222222FFF}}}vv}r   c                   t        |       }| dz  dz  }|j                  dt               dd|       |j                  dt               dd|      }|j                  }|t        k(  }|st        j                  d|fd	|t        f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            dx}}|j                  }|t        k(  }|st        j                  d|fd|t        f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            dx}}y)uO   escalation marker 가 생성된 후에도 fresh 미도착이면 계속 BLOCKED.r:   r;   r<   r   r   r   i rF   r   r   r   r   rW   rX   Nr   r   )r(   r   r8   r   r   r`   ra   rb   rc   rd   re   rf   rg   r   r   )r'   rl   rC   r   rm   ro   rt   ru   s           r   6test_auto_resume_not_triggered_after_escalation_markerr      sn   x(Hh&1L005!#! 1  ::5!#! ; G >>9>99999>999999979997999>999999999999999999  ; $;;;;; $;;;;;;;7;;;7;;; ;;;;;;$;;;;$;;;;;;;;r   c                   t        |       }| dz  dz  }|j                  dt               t        |      }|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            dx}x}}t        j                  |j                  d            }	|	d   }
d}|
|k(  }|slt        j                  d|fd|
|f      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}|	d   }
|
t        k(  }|st        j                  d|fd|
t        f      t        j                  |
      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            dx}
}|	d   }
|
t        k(  }|st        j                  d|fd|
t        f      t        j                  |
      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            dx}
}|	d   }
|
t         k(  }|st        j                  d|fd|
t         f      t        j                  |
      dt        j                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            dx}
}|	d   }
d}|
|u }|slt        j                  d |fd!|
|f      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}y)"u:   fresh 도착 시 ``.gemini-fresh-detected`` marker 생성.r:   r;   r<   r@   rA   gemini_review_commit_idrC   z!task-2554+2.gemini-fresh-detectedrF   rH   rI   rJ   rN   rO   NrP   rQ   rA   r)   rS   rT   rW   rX   r7   rY   rZ   r[   r]   rM   r   r   r   auto_resumeT)is)z%(py1)s is %(py4)s)r(   mark_gemini_fresh_detectedr8   rZ   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   r   rk   s                  r   3test_mark_gemini_fresh_detected_creates_marker_filer      s   x(Hh&1L005 (!	 1 F ;;===;=====;=======6===6===;===========jj))7);<G4=C=C=C=C6?&?h&&&&?h&&&?&&&&&&h&&&h&&&&&&&,-9-9999-999-9999999999999999?#<#'<<<<<#'<<<<#<<<<<<'<<<<'<<<<<<<<=!)T)!T))))!T)))!)))T)))))))r   c                    t        |       }t        j                  t        d      5  |j	                  dt        t              t        |        ddd       y# 1 sw Y   yxY w)uO   head != commit_id 인데 fresh marker 생성 시도 → ValueError fail-closed.z
must matchr~   r<   )r7   r   N)r(   r   r   r   r   r8   rZ   r   r   s     r   5test_mark_fresh_rejects_when_commit_id_not_match_headr      sS    x(H	z	6 
++!!$3!	 	, 	

 
 
s   (AA!c                H
   t        |       }| dz  dz  }g fd}|j                  dt               d||      }|j                  }|t        k(  }|st        j                  d|fd|t        f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      d
t        j                         v st        j                  t              rt        j                  t              nd
dz  }dd|iz  }t        t        j                  |            dx}}|j                  }|sydd	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      dz  }	t        t        j                  |	            d}t              }
d}|
|k(  }|st        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  }dd|iz  }t        t        j                  |            dx}
x}}d}||z  }|j                  } |       }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            dx}x}x}}d}||z  }|j                  } |       }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            dx}x}x}}d}||z  }|j                  } |       }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            dx}x}x}}y)u]   orchestration: stale 감지 → decision 생성 → runner 호출 (POSTED) → posted marker.r:   r;   c                (    j                  |        yNPOSTEDappenddecision_pathrunner_callss    r   runnerzEtest_orchestrate_owner_trigger_for_stale_pr_full_path.<locals>.runner       M*r   r<   (1111111111111111111111111111111111111111r@   rA   stale_gemini_review_commit_idowner_trigger_runnerrC   rF   r   r   r
   r   rW   rX   N*assert %(py2)s
{%(py2)s = %(py0)s.passed
}r      z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr   rK   rU   r\   rX   assert %(py8)spy8z'task-2554+2.owner_trigger_decision.jsonMassert %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).exists
}()
}rC   rK   rL   rM   rO   z#task-2554+2.owner-trigger.requestedrE   )r(   &orchestrate_owner_trigger_for_stale_prr8   r   r
   r`   ra   rb   rc   rd   re   rf   rg   r   r   r   )r'   rl   rC   r   r   rm   ro   rt   ru   @py_format3rs   r   rn   @py_format9@py_assert6rq   r   s                   @r   5test_orchestrate_owner_trigger_for_stale_pr_full_pathr      s   x(Hh&1L!L ==5&.#! > G >>1>11111>111111171117111>111111111111111111>>>77>|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!DNLDDNDLLNLNNNNNNNNLNNNLNNNDNNNLNNNNNNNNNN@JL@@J@HHJHJJJJJJJJLJJJLJJJ@JJJHJJJJJJJJJJ=GL==G=EEGEGGGGGGGGLGGGLGGG=GGGEGGGGGGGGGGr   c                @   t        |       }| dz  dz  }g fd}|j                  dt               t        ||      }|j                  }d}||k(  }|st        j                  d|fd||f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      d
z  }dd|iz  }	t        t        j                  |	            dx}x}}|j                  }|sydd	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      dz  }
t        t        j                  |
            d}t              }d}||k(  }|st        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  }dd|iz  }t        t        j                  |            dx}x}}y)u:   head == commit_id 이면 stale 아님 — runner 호출 0.r:   r;   c                (    j                  |        yr   r   r   s    r   r   z>test_orchestrate_when_not_stale_passes_through.<locals>.runner  r   r   r<   r   gemini_review_fresh_on_headrF   r   r   rJ   rN   rO   Nr   r   r   r   r   r   r   r   r   )r(   r   r8   rZ   r   r`   ra   rb   rc   rd   re   rf   rg   r   r   )r'   rl   rC   r   r   rm   rn   ro   rp   rq   r   rs   r   ru   r   r   s                  @r   .test_orchestrate_when_not_stale_passes_throughr     s   x(Hh&1L!L ==5&.#! > G >>:::>:::::>:::::::7:::7:::>:::::::::::>>>77>|!!!!!!!!!!!!3!!!3!!!!!!|!!!|!!!!!!!!!!!!!r   c                   t        |       }| dz  dz  }d }|j                  dt               d||      }|j                  }|t        k(  }|st        j                  d|fd|t        f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      d
t        j                         v st        j                  t              rt        j                  t              nd
dz  }dd|iz  }t        t        j                  |            dx}}|j                  }d}	||	k(  }|st        j                  d|fd||	f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            dx}x}}	d}||z  }|j                  }	 |	       }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |	      t        j                  |      dz  }t        t        j                  |            dx}x}x}	}y)uA   runner FAILED → owner-trigger.failed marker + BLOCKED critical.r:   r;   c                     y)NFAILEDr   )r   s    r   r   zQtest_orchestrate_when_runner_returns_failed_records_failed_marker.<locals>.runner,  s    r   r<   r   r   rF   r   r   r	   r   rW   rX   N.BLOCK_OVERRIDE_REQUIRED_OR_INSUFFICIENT_REASON)z5%(py2)s
{%(py2)s = %(py0)s.critical_code
} == %(py5)srJ   rN   rO   r{   r   rC   r   )r(   r   r8   r   r	   r`   ra   rb   rc   rd   re   rf   rg   r   r   )r'   rl   rC   r   r   rm   ro   rt   ru   rn   rp   rq   r   s                r   Atest_orchestrate_when_runner_returns_failed_records_failed_markerr   '  s   x(Hh&1L ==5&.#! > G >>1>11111>111111171117111>111111111111111111  T$TT $TTTTT $TTTTTTT7TTT7TTT TTT$TTTTTTTT=GL==G=EEGEGGGGGGGGLGGGLGGG=GGGEGGGGGGGGGGr   )r'   r   returnr   )r7   strr.   intr   r   )(__doc__
__future__r   builtinsrb   _pytest.assertion.rewrite	assertionrewriter`   rh   pathlibr   r   anu_v2.merge_queue_executorr   r   r   r   r	   r
   r   r   r   rZ   r   r(   r8   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s   	 #     
 
 
 , C "E$> 
3;32"<6*&	
H6",Hr   