o
    h                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZmZ d dlT d dl	T d dl
mZ e jje jjgZejedfd	d
Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  ZdS )!    N)parse_transitions)transition_sequence)tree_reader)SimpleModelUNARY_LIMIT)*)CHINESE_LONG_LIST_TREEFc           
      C   s   t |||d}|| g}t|dksJ |d jdksJ t|D ]\}}||d |s7J d||||||g}q"|d jj	}	|rK|	
 }	|	S )zb
    Starting from a tree and a list of transitions, build the tree caused by the transitions
    )transition_schemeunary_limitreverse_sentence   r   z1Transition {} not legal at step {} in sequence {})r   initial_state_from_gold_treeslennum_transitions	enumerateis_legalformat
bulk_applyconstituentsvaluereverse)
treesequencer	   r
   r   modelstatesidxtresult_tree r   m/var/www/html/env_mimamsha/lib/python3.10/site-packages/stanza/tests/constituency/test_transition_sequence.pyreconstruct_tree   s   "r    c           	      C   s   d}t |}t| }t|d | }||}t|dks J |d }|jdks+J |D ]}|||s7J |	||}q-t|j
dksGJ t|jdksPJ |jdksWJ |j|jks_J t|jt|d kslJ |j
j}||d ksxJ d S )NZ((SBARQ (WHNP (WP Who)) (SQ (VP (VBZ sits) (PP (IN in) (NP (DT this) (NN seat))))) (. ?)))r   r            )r   
read_treesr   r   build_sequencer   r   r   r   applyr   
word_queuesentence_lengthword_positiontransitionsr   )	r	   texttreesr   r+   r   stater   r   r   r   r   check_reproduce_tree    s$   

r/   c                   C      t tjd d S Nr	   )r/   TransitionSchemeTOP_DOWN_UNARYr   r   r   r   test_top_down_unary=      r5   c                   C   r0   r1   )r/   r3   TOP_DOWNr   r   r   r   test_top_down_no_unary@   r6   r8   c                   C   r0   r1   )r/   r3   IN_ORDERr   r   r   r   test_in_orderC   r6   r:   c                   C   r0   r1   )r/   r3   IN_ORDER_COMPOUNDr   r   r   r   test_in_order_compoundF   r6   r<   c                   C   r0   r1   )r/   r3   IN_ORDER_UNARYr   r   r   r   test_in_order_unaryI   r6   r>   c               
   C   sj   d} t | }t }t|}t t tdtdtdtdtdtdtdg	}t	||ks3J d S )	Nr!   ROOTSQWHNPNPPPSBARQVP)
r   r%   r   r   build_treebankShiftCloseConstituentCompoundUnaryOpenConstituentall_transitionsr,   r-   r   r+   expectedr   r   r   test_all_transitionsL   s   

6rN   c               
   C   sp   d} t | }t }tj|tjd}t t t	dt	dt	dt	dt	dt	dt	d	g	}t
||ks6J d S )
Nr!   r2   rB   rC   r?   rD   r@   rE   rA   )r   r%   r   r   rF   r3   r7   rG   rH   rJ   rK   rL   r   r   r   test_all_transitions_no_unaryV   s   
6rO   c                  C   s   d} t | }t|dksJ t }tj|d tjd}||}t|dks)J |d }|D ]}|	||s9J |
||}q/||j}|d |ksNJ d S )Na+  (ROOT (S (NP (DT The) (NNP Arizona) (NNPS Corporations) (NNP Commission)) (VP (VBD authorized) (NP (NP (DT an) (ADJP (CD 11.5)) (NN %) (NN rate) (NN increase)) (PP (IN at) (NP (NNP Tucson) (NNP Electric) (NNP Power) (NNP Co.))) (, ,) (UCP (ADJP (ADJP (RB substantially) (JJR lower)) (SBAR (IN than) (S (VP (VBN recommended) (NP (JJ last) (NN month)) (PP (IN by) (NP (DT a) (NN commission) (NN hearing) (NN officer))))))) (CC and) (NP (NP (QP (RB barely) (PDT half)) (DT the) (NN rise)) (VP (VBN sought) (PP (IN by) (NP (DT the) (NN utility)))))))) (. .)))r   r   r2   )r   r%   r   r   r   r&   r3   TOP_DOWN_COMPOUNDr   r   r'   get_top_constituentr   )r,   r-   r   r+   r   r.   r   resultr   r   r   test_top_down_compound_unary_   s   

rS   c                  C   s   t t} tj| tjd}t| d |d tjd}|| d ks!J tj| tjd}t	
t t| d |d tjd}W d    n1 sEw   Y  t| d |d tjdd}|| d ks_J d S )Nr2   r   r$   r	   r
   )r   r%   r   r   rF   r3   r7   r    r9   pytestraisesAssertionErrorr-   r+   redoner   r   r   test_chinese_treet   s   
rZ   c                  C   st  t t} tj| tjdd}t| d |d tjdd}|| d ks#J t	t
 t| d |d tjd}|| d ks=J W d   n1 sGw   Y  tj| tjdd}t	t
 t| d |d tjdd}W d   n1 srw   Y  t| d |d tjddd}|| d ksJ t	t
 t| d |d tjdd}|| d ksJ W d   dS 1 sw   Y  dS )	z6
    test that the reversed transitions also work
    T)r	   r   r   r2   Nr$   )r	   r
   r   rT   )r   r%   r   r   rF   r3   r7   r    rU   rV   rW   r9   rX   r   r   r   test_chinese_tree_reversed   s$   
"r[   )rU   stanza.models.constituencyr   r   r   %stanza.models.constituency.base_modelr   r   ,stanza.models.constituency.parse_transitionsstanza.tests)stanza.tests.constituency.test_parse_treer   markpipelinetravis
pytestmarkr3   r9   r    r/   r5   r8   r:   r<   r>   rN   rO   rS   rZ   r[   r   r   r   r   <module>   s*    
	