
    1*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
Z
ddlmZ ddlZ ee          j        j        dz  dz  dz  Zd Zd	 Zd
 Zd Zej                            e	j                            d          dk    d          d             ZdS )zTests for runtime/speech/stt.py.

Offline tests use FakeSTT only. The live model test is skipped unless
MENTORCORE_TEST_STT=1 is set (it requires model download).
    )annotationsN)Pathfixturesaudiozfixture.wavc                    ddl m}   | d          }|                    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  }d	d
|iz  }t          t          j
        |                    d x}}d S )Nr   FakeSTTzvirtue is the highest goodsd                                                                                                       ==)z%(py0)s == %(py3)sresultpy0py3zassert %(py5)spy5)runtime.speech.sttr	   
transcribe
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)r	   sttr   @py_assert2@py_assert1@py_format4@py_format6s          >/Users/jameslopez/projects/MentorCore/tests/speech/test_stt.py$test_fake_stt_returns_fixed_responser!      s    ******
'.
/
/C^^M**F116111111111116111111111111161111161111111111111111111111111111111111    c                 ,   ddl m}   |             }|j        }d}d}||z  } ||          }t          |          }d}||k    }	|	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	        |          t	          j	        |          t	          j	        |          t	          j	        |          t	          j	        |          d	z  }
d
d|
iz  }t          t	          j        |                    d x}x}x}x}x}x}x}	}d S )Nr   r       d   )>)z~%(py12)s
{%(py12)s = %(py0)s(%(py10)s
{%(py10)s = %(py3)s
{%(py3)s = %(py1)s.transcribe
}((%(py5)s * %(py7)s))
})
} > %(py15)slenr   )r   py1r   r   py7py10py12py15zassert %(py17)spy17)r   r	   r   r'   r   r   r   r   r   r   r   r   )r	   r   r   @py_assert4@py_assert6@py_assert8@py_assert9@py_assert11@py_assert14@py_assert13@py_format16@py_format18s               r    test_fake_stt_default_responser7      s   ******
'))C~1g11gm1~~m,,13,--11-1111111111-11111111111131111131111111111111s11111s111111~1111g11111111,1111-1111111111111111111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                 N   ddl m} m}  |             }t          ||          }|sd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dt	          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }t          t          j
        |                    d}dS )	z+FakeSTT satisfies the STTProvider Protocol.r   )r	   STTProvider5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancer   r9   r   r(   py2py4N)r   r	   r9   r;   r   r   r   r   r   r   r   )r	   r9   r   @py_assert3@py_format5s        r    test_stt_provider_protocolrA   $   s.   77777777
'))Cc;''''''''''''''':''''':'''''''''''''c'''''c''''''''''''';''''';''''''''''''''''''''''''''r"   c                 x   t           j        }  |             }|st          j        dt                      dz   dt	          j                    v st          j        t                     rt          j        t                     ndt          j        |           t          j        |          dz  }t          t          j	        |                    dx} }t          j        t          t                     d          5 }|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        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    dx} x}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        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    dx} x}x}}|                                }|                                }	ddd           n# 1 swxY w Y   |	|z  }
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d          dz   d|iz  }t          t          j	        |                    dx} }dS )zDThe fixture WAV can be opened and has at least 1s of audio at 16kHz.zMissing fixture: zC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}FIXTURE_WAV)r   r=   r>   Nrb   r
   )zK%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.getnchannels
}()
} == %(py7)swf)r   r=   r>   r)   zassert %(py9)spy9   )zK%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.getsampwidth
}()
} == %(py7)sg      ?)>=)z%(py0)s >= %(py3)sdurationr   zFixture too short: z.2fsz
>assert %(py5)sr   )rC   existsr   _format_assertmsgr   r   r   r   r   r   waveopenstrgetnchannelsr   getsampwidthgetframerate
getnframes)r   r?   r@   rF   r/   @py_assert5@py_format8@py_format10rateframesrJ   r   r   r   s                 r    test_fixture_wav_is_validrZ   /   sD   BBBBB!B[!B!BBBBBBBBBBBBBB;BBBBB;BBBBBBBBBBBBBBBBBBBBBBBBBBBBB	3{##T	*	* !b%  %A% A%%%%%%%%%% A%%%%%%%%%%%%r%%%%%r%%%%%%%%%% %%%%A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %A% A%%%%%%%%%% A%%%%%%%%%%%%r%%%%%r%%%%%%%%%% %%%%A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  	! ! ! ! ! ! ! ! ! ! ! ! ! ! !
 }HA8s?AAAAAAAAA8sAAAAAAAAAAAA8AAAAA8AAAAAAsAAAAAAAAA(AAAAAAAAAAAAAAAAAAAAAAAAAAAAs   6G)K++K/2K/MENTORCORE_TEST_STT1z;Set MENTORCORE_TEST_STT=1 to run live STT (downloads model))reasonc                    ddl m}   | t          t                              }t	          |t                    }|sd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dt          j                    v st          j        t                    rt          j	        t                    ndt          j	        |          dz  }t          t          j        |                    d}dS )	zTReal model: fixture WAV transcribed without crashing. WER not asserted (tone input).r   )transcribe_wav_filer:   r;   r   rP   r<   N)r   r_   rP   rC   r;   r   r   r   r   r   r   r   )r_   r   r?   r@   s       r    test_transcribe_wav_file_liver`   >   s7    766666  [!1!122Ffc""""""""""""""":""""":"""""""""""""f"""""f"""""""""""""c"""""c""""""""""""""""""""""""""r"   )__doc__
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   osrN   pathlibr   pytest__file__parentrC   r!   r7   rA   rZ   markskipifenvirongetr`    r"   r    <module>rq      s$    # " " " " "              				        d8nn#*Z7'AMQ2 2 22 2 2( ( (	B 	B 	B JNN())S0H   # #	 # # #r"   