orion-sdr 0.0.13

DSP/SDR block library targeting HF-to-UHF, satellites, and Python bindings. Roadmap inside.
Documentation
+
�n�i]c���Rt^RIt^RIHuHt^RIt^RI	t	^RI
t^RIH
t
HtHtRt]3RRllt]3RRllt!RR	4t!R
R4t!RR
4t!RR4t!RR4tR#)a*Unit tests for the orion_sdr Python extension.

Covers:
- Output shape and dtype for every demodulator and modulator
- Stateful behaviour (instances are independent)
- Input validation (wrong dtype, wrong ndim, non-contiguous)
- Setter methods (set_gain, set_deviation, set_sensitivity, set_clamp)
N)�FS�complex_tone�	real_toneic�D�V^8�dQhR\R\P/#���n�return��int�np�ndarray)�formats"�p/Users/glenn/Library/Mobile Documents/com~apple~CloudDocs/work/rust/projects/orion-sdr/python/tests/test_unit.py�__annotate__rs��+�+��+�B�J�J�+�c�N�\P!V\PR7#���dtype)r�zeros�	complex64�rs&r�iq_blockrs��
�8�8�A�R�\�\�*�*rc�D�V^8�dQhR\R\P/#rr	)r
s"rrrs��)�)�3�)�r�z�z�)rc�N�\P!V\PR7#r)rr�float32rs&r�audio_blockrs��
�8�8�A�R�Z�Z�(�(rc�Da�]tRt^$toRtRtRtRtRtRt	Rt
VtR#)	�TestDemodOutputShapec�J�\P!\RR4P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RRV
/,q�P!V4V'Ed\P!RX	3RXX34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V4/,pR
RV/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)��,�py2�out�py4�py7�%(py9)s�py9�py11�py13�py15r�py17�%(py19)s�py19�assert %(py22)s�py22N��==�z-%(py4)s
{%(py4)s = %(py2)s.shape
} == %(py7)s�zP%(py13)s
{%(py13)s = %(py11)s.dtype
} == %(py17)s
{%(py17)s = %(py15)s.float32
})�sdr�CwEnvelopeDemodr�processr�shape�Nrrr�
@pytest_ar�_call_reprcompare�@py_builtins�locals�_should_repr_global_name�	_saferepr�append�_format_boolop�AssertionError�_format_explanation��selfr#�@py_assert1�@py_assert3�@py_assert6�@py_assert5�@py_assert0�@py_assert12�@py_assert16�@py_assert14�@py_format8�@py_format10�@py_format18�@py_format20�@py_format21�@py_format23s&               r�test_cw�TestDemodOutputShape.test_cw%sE���!�!�"�c�3�/�7�7��
�C��<�y�y�<�Q�D�<�D� �<�<�S�Y�Y�<�"�*�*�<�*�%<�<�<�<�<�y�<�<�<�<�<�<�s�<�<�<�<�s�<�<�<�y�<�<�<�D�<�<�<�<�<�<�<�<�<�Y�*�<�<�<�<�<�<�S�<�<�<�<�S�<�<�<�Y�<�<�<�<�<�<�"�<�<�<�<�"�<�<�<�*�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<rc�H�\P!\R4P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RRV
/,q�P!V4V'Ed\P!RX	3RXX34RR\P!49g\P!V4'd\P!V4MRR\P!V4R	R
\P!49g!\P!\4'd\P!\4MR
R\P!V4/,pRR
V/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)�r"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2r3�r4�AmEnvelopeDemodrr6rr7r8rrrr9r:r;r<r=r>r?r@rArBrCs&               r�test_am�TestDemodOutputShape.test_am)sC���!�!�"�e�,�4�4�X�Z�@��<�y�y�<�Q�D�<�D� �<�<�S�Y�Y�<�"�*�*�<�*�%<�<�<�<�<�y�<�<�<�<�<�<�s�<�<�<�<�s�<�<�<�y�<�<�<�D�<�<�<�<�<�<�<�<�<�Y�*�<�<�<�<�<�<�S�<�<�<�<�S�<�<�<�Y�<�<�<�<�<�<�"�<�<�<�<�"�<�<�<�*�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<rc�L�\P!\RRR7P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RRV
/,q�P!V4V'Ed\P!RX	3RXX34R	R\P!49g\P!V4'd\P!V4MRR
\P!V4RR\P!49g!\P!\4'd\P!\4MRR
\P!V4/,pRRV/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)rVT)�
abs_approxr"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2r3rWrCs&               r�test_am_abs_approx�'TestDemodOutputShape.test_am_abs_approx-sE���!�!�"�e��=�E�E�h�j�Q��<�y�y�<�Q�D�<�D� �<�<�S�Y�Y�<�"�*�*�<�*�%<�<�<�<�<�y�<�<�<�<�<�<�s�<�<�<�<�s�<�<�<�y�<�<�<�D�<�<�<�<�<�<�<�<�<�Y�*�<�<�<�<�<�<�S�<�<�<�<�S�<�<�<�Y�<�<�<�<�<�<�"�<�<�<�<�"�<�<�<�*�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<rc�J�\P!\RR4P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RRV
/,q�P!V4V'Ed\P!RX	3RXX34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V4/,pR
RV/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)���
r"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2r3)r4�SsbProductDemodrr6rr7r8rrrr9r:r;r<r=r>r?r@rArBrCs&               r�test_ssb�TestDemodOutputShape.test_ssb1sE���!�!�"�c�5�1�9�9�(�*�E��<�y�y�<�Q�D�<�D� �<�<�S�Y�Y�<�"�*�*�<�*�%<�<�<�<�<�y�<�<�<�<�<�<�s�<�<�<�<�s�<�<�<�y�<�<�<�D�<�<�<�<�<�<�<�<�<�Y�*�<�<�<�<�<�<�S�<�<�<�<�S�<�<�<�Y�<�<�<�<�<�<�"�<�<�<�<�"�<�<�<�*�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<rc�J�\P!\RR4P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RRV
/,q�P!V4V'Ed\P!RX	3RXX34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V4/,pR
RV/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)��	rVr"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2r3)r4�FmQuadratureDemodrr6rr7r8rrrr9r:r;r<r=r>r?r@rArBrCs&               r�test_fm�TestDemodOutputShape.test_fm5sE���#�#�B��u�5�=�=�h�j�I��<�y�y�<�Q�D�<�D� �<�<�S�Y�Y�<�"�*�*�<�*�%<�<�<�<�<�y�<�<�<�<�<�<�s�<�<�<�<�s�<�<�<�y�<�<�<�D�<�<�<�<�<�<�<�<�<�Y�*�<�<�<�<�<�<�S�<�<�<�<�S�<�<�<�Y�<�<�<�<�<�<�"�<�<�<�<�"�<�<�<�*�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<rc�J�\P!\RR4P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RRV
/,q�P!V4V'Ed\P!RX	3RXX34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V4/,pR
RV/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)皙�����?rVr"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2r3)r4�PmQuadratureDemodrr6rr7r8rrrr9r:r;r<r=r>r?r@rArBrCs&               r�test_pm�TestDemodOutputShape.test_pm9sE���#�#�B��U�3�;�;�H�J�G��<�y�y�<�Q�D�<�D� �<�<�S�Y�Y�<�"�*�*�<�*�%<�<�<�<�<�y�<�<�<�<�<�<�s�<�<�<�<�s�<�<�<�y�<�<�<�D�<�<�<�<�<�<�<�<�<�Y�*�<�<�<�<�<�<�S�<�<�<�<�S�<�<�<�Y�<�<�<�<�<�<�"�<�<�<�<�"�<�<�<�*�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<r�N)�__name__�
__module__�__qualname__�__firstlineno__rSrYr]rcrhrm�__static_attributes__�__classdictcell__��
__classdict__s@rrr$s(����=�=�=�=�=�=�=rrc�>a�]tRt^BtoRtRtRtRtRtRt	Vt
R#)�TestModOutputShapec�L�\P!\RRR4P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RRV
/,q�P!V4V'Ed\P!RX	3RXX34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V4/,pR
RV/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)r �@r"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2�zR%(py13)s
{%(py13)s = %(py11)s.dtype
} == %(py17)s
{%(py17)s = %(py15)s.complex64
})r4�
CwKeyedModrr6rr7r8rrrr9r:r;r<r=r>r?r@rArBrCs&               rrS�TestModOutputShape.test_cwCsE���n�n�R��c�3�/�7�7��
�F��>�y�y�>�Q�D�>�D� �>�>�S�Y�Y�>�"�,�,�>�,�%>�>�>�>�>�y�>�>�>�>�>�>�s�>�>�>�>�s�>�>�>�y�>�>�>�D�>�>�>�>�>�>�>�>�>�Y�,�>�>�>�>�>�>�S�>�>�>�>�S�>�>�>�Y�>�>�>�>�>�>�"�>�>�>�>�"�>�>�>�,�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>rc�L�\P!\RRR4P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RRV
/,q�P!V4V'Ed\P!RX	3RXX34R	R\P!49g\P!V4'd\P!V4MRR
\P!V4RR\P!49g!\P!\4'd\P!\4MRR
\P!V4/,pRRV/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)r`��?rkr"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2r|)r4�AmDsbModrr6rr7r8rrrr9r:r;r<r=r>r?r@rArBrCs&               rrY�TestModOutputShape.test_amGsE���l�l�2�s�C��-�5�5�k�m�D��>�y�y�>�Q�D�>�D� �>�>�S�Y�Y�>�"�,�,�>�,�%>�>�>�>�>�y�>�>�>�>�>�>�s�>�>�>�>�s�>�>�>�y�>�>�>�D�>�>�>�>�>�>�>�>�>�Y�,�>�>�>�>�>�>�S�>�>�>�>�S�>�>�>�Y�>�>�>�>�>�>�"�>�>�>�>�"�>�>�>�,�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>rc�J�\P!\RR4P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RRV
/,q�P!V4V'Ed\P!RX	3RXX34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V4/,pR
RV/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)rfr`r"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2r|)r4�FmPhaseAccumModrr6rr7r8rrrr9r:r;r<r=r>r?r@rArBrCs&               rrh�TestModOutputShape.test_fmKsE���!�!�"�e�S�1�9�9�+�-�H��>�y�y�>�Q�D�>�D� �>�>�S�Y�Y�>�"�,�,�>�,�%>�>�>�>�>�y�>�>�>�>�>�>�s�>�>�>�>�s�>�>�>�y�>�>�>�D�>�>�>�>�>�>�>�>�>�Y�,�>�>�>�>�>�>�S�>�>�>�>�S�>�>�>�Y�>�>�>�>�>�>�"�>�>�>�>�"�>�>�>�,�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>rc�J�\P!\RR4P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RRV
/,q�P!V4V'Ed\P!RX	3RXX34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V4/,pR
RV/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)rkr`r"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2r|)r4�PmDirectPhaseModrr6rr7r8rrrr9r:r;r<r=r>r?r@rArBrCs&               rrm�TestModOutputShape.test_pmOsE���"�"�2�s�C�0�8�8���G��>�y�y�>�Q�D�>�D� �>�>�S�Y�Y�>�"�,�,�>�,�%>�>�>�>�>�y�>�>�>�>�>�>�s�>�>�>�>�s�>�>�>�y�>�>�>�D�>�>�>�>�>�>�>�>�>�Y�,�>�>�>�>�>�>�S�>�>�>�>�S�>�>�>�Y�>�>�>�>�>�>�"�>�>�>�>�"�>�>�>�,�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>rc�N�\P!\RRRR4P\	44p.q!P
p\3qCV8HqUqe'd"VPp\Pq�V8Hq�pV'Eg\P!RV3RW434RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,p
RR	V
/,q�P!V4V'Ed\P!RX	3RXX34R
R\P!49g\P!V4'd\P!V4MRR\P!V4RR
\P!49g!\P!\4'd\P!\4MR
R\P!V4/,pRRV/,q�P!V
4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)rai�r`Tr"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2r|)r4�
SsbPhasingModrr6rr7r8rrrr9r:r;r<r=r>r?r@rArBrCs&               rrc�TestModOutputShape.test_ssbSsI������E�5�#�t�<�D�D�[�]�S��>�y�y�>�Q�D�>�D� �>�>�S�Y�Y�>�"�,�,�>�,�%>�>�>�>�>�y�>�>�>�>�>�>�s�>�>�>�>�s�>�>�>�y�>�>�>�D�>�>�>�>�>�>�>�>�>�Y�,�>�>�>�>�>�>�S�>�>�>�>�S�>�>�>�Y�>�>�>�>�>�>�"�>�>�>�>�"�>�>�>�,�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>rroN)rprqrrrsrSrYrhrmrcrtrurvs@rryryBs#����?�?�?�?�?�?rryc�Ha�]tRt^\toRtRtRtRtRtRt	Rt
RtVtR	#)
�TestInputValidationz7process() should raise ValueError for bad input arrays.c	�:�\P!\RR4p\P!\
\34;_uu_4VP\P!\\PR74RRR4R# +'giR#;i)r r!rN)r4r5r�pytest�raises�
ValueError�	TypeErrorr6rrr8�
complex128�rD�dems& r�test_demod_wrong_dtype�*TestInputValidation.test_demod_wrong_dtype`sT���!�!�"�c�3�/��
�]�]�J�	�2�
3�
3��K�K�����"�-�-�8�9�4�
3�
3�
3�s�:B	�	B	c	�<�\P!\RRR4p\P!\
\34;_uu_4VP\P!\\PR74RRR4R# +'giR#;i)r`r�rkrN)r4r�rr�r�r�r�r6rrr8�float64�rD�mods& r�test_mod_wrong_dtype�(TestInputValidation.test_mod_wrong_dtypeesT���l�l�2�s�C��-��
�]�]�J�	�2�
3�
3��K�K�����"�*�*�5�6�4�
3�
3�
3�s�:B
�
B	c	�>�\P!\RR4p\P!\
\34;_uu_4VP\P!\^3\PR74RRR4R# +'giR#;i)rfrVrN)r4rgrr�r�r�r�r6rrr8rr�s& r�test_demod_2d_input�'TestInputValidation.test_demod_2d_inputksX���#�#�B��u�5��
�]�]�J�	�2�
3�
3��K�K����!�Q��r�|�|�<�=�4�
3�
3�
3���<B�B	c	�>�\P!\RR4p\P!\
\34;_uu_4VP\P!\^3\PR74RRR4R# +'giR#;i)rfr`rN)r4r�rr�r�r�r�r6rrr8rr�s& r�test_mod_2d_input�%TestInputValidation.test_mod_2d_inputpsX���!�!�"�e�S�1��
�]�]�J�	�2�
3�
3��K�K����!�Q��r�z�z�:�;�4�
3�
3�
3�r�c�Z�\P!\RR4p\P!\
^,\PR7R,p\P!\\34;_uu_4VPV4RRR4R# +'giR#;i)r`rar�NNrN)r4rbrrrr8rr�r�r�r�r6)rDr��strideds&  r�test_demod_non_contiguous�-TestInputValidation.test_demod_non_contiguousvsb���!�!�"�c�5�1���(�(�1�q�5����5�c�:��
�]�]�J�	�2�
3�
3��K�K�� �4�
3�
3�
3�s�=B�B*	c�\�\P!\RRR4p\P!\
^,\PR7R,p\P!\\34;_uu_4VPV4RRR4R# +'giR#;i)r r{rr�N)r4r}rrrr8rr�r�r�r�r6)rDr�r�s&  r�test_mod_non_contiguous�+TestInputValidation.test_mod_non_contiguous|sb���n�n�R��c�3�/���(�(�1�q�5��
�
�3�C�8��
�]�]�J�	�2�
3�
3��K�K�� �4�
3�
3�
3�s�>B�B+	roN)
rprqrrrs�__doc__r�r�r�r�r�r�rtrurvs@rr�r�\s+����A�:�
7�>�
<�!�!�!rr�c�>a�]tRt^�toRtRtRtRtRtRt	Vt
R#)�TestSettersc���\P!\RR4p\\R\4pVPVP
44p\P!\RR4pVPR4VPVP
44p\Pp\Pp^q�V,q�!V	4q�!V
4p\Pp\Pp
^q�V,q�!V4pV!V4pVV8�pV'Eg.\P!RV3RVV34/RR\P!49g!\P!\4'd\P !\4MRbR\P !V4bRR\P!49g!\P!\4'd\P !\4MRbR\P !V4bRR	\P!49g\P!V4'd\P !V4MR	bR
\P !V4bR\P !V
4bR\P !V4bR
R\P!49g!\P!\4'd\P !\4MRbR\P !V4bRR\P!49g!\P!\4'd\P !\4MRbR\P !V
4bRR\P!49g\P!V4'd\P !V4MRbR\P !V4bR\P !V4bR\P !V4b,pRRV/,p\#\P$!V44hR;p;p;p;p	;p
;p;p;p;p
;p;p;ppR#)r r!�@�py0rr"�py3�py5�py6�out_boosted�py8r(r)r*r+�py18�py20�py21�out_default�py23�py26�py28zassert %(py30)s�py30N��>)a%(py13)s
{%(py13)s = %(py2)s
{%(py2)s = %(py0)s.sqrt
}(%(py11)s
{%(py11)s = %(py5)s
{%(py5)s = %(py3)s.mean
}((%(py6)s ** %(py8)s))
})
} > %(py28)s
{%(py28)s = %(py17)s
{%(py17)s = %(py15)s.sqrt
}(%(py26)s
{%(py26)s = %(py20)s
{%(py20)s = %(py18)s.mean
}((%(py21)s ** %(py23)s))
})
})r4r5rrr8r6�copy�set_gainr�sqrt�meanr9r:r;r<r=r>rArB)rDr��iqr��dem2r�rE�@py_assert4�@py_assert7�@py_assert9�@py_assert10rJrK�@py_assert19�@py_assert22�@py_assert24�@py_assert25�@py_assert27rL�@py_format29�@py_format31s&                    r�test_cw_demod_set_gain�"TestSetters.test_cw_demod_set_gain�sP���!�!�"�c�3�/��
�"�c�1�
%���k�k�"�'�'�)�,���"�"�2�s�C�0���
�
�c���l�l�2�7�7�9�-���w�w�R�r�w�w�R�A�R�A�~�R�w�~�.�R�w�.�/�R�"�'�'�R�"�'�'�R�q�R�q�.�R�'�.�:Q�R�'�:Q�2R�R�/�2R�R�R�R�R�R�/�2R�R�R�R�R�R�R�R�r�R�R�R�R�r�R�R�R�w�R�R�R�R�R�R�r�R�R�R�R�r�R�R�R�w�R�R�R�R�R�R�{�R�R�R�R�{�R�R�R�A�R�R�R�.�R�R�R�/�R�R�R�R�R�R�"�R�R�R�R�"�R�R�R�'�R�R�R�R�R�R�"�R�R�R�R�"�R�R�R�'�R�R�R�R�R�R�+�R�R�R�R�+�R�R�R�q�R�R�R�:Q�R�R�R�2R�R�R�R�R�R�R�R�R�R�R�Rrc	�f�\P!\RRR4p\\R\R4pVPVP
44p\P!\RRR4pVPR4VPVP
44p\\P!\P!\P!V4^,444p\\P!\P!\P!V4^,444pWv8�q�'g�\P!R
V3RWv34RR\P !49g\P"!V4'd\P$!V4MRRR	\P !49g\P"!V4'd\P$!V4MR	/,p	R
RV	/,p
\'\P(!V
44hRpR#)r`r�rk��g�?r�r��rms2r"�rms1zassert %(py4)sr$Nr�)z%(py0)s > %(py2)s)r4r�rrr8r6r�r��floatrr�r��absr9r:r;r<r=r>rArB)rDr��audio�out1�mod2�out2r�r�rE�@py_format3�@py_format5s&          r�test_am_mod_set_gain� TestSetters.test_am_mod_set_gain�s0���l�l�2�s�C��-���"�e�Q��,���{�{�5�:�:�<�(���|�|�B��S�#�.���
�
�c���|�|�E�J�J�L�)���R�W�W�R�W�W�R�V�V�D�\�1�_�5�6�7���R�W�W�R�W�W�R�V�V�D�\�1�_�5�6�7���{�����t�������t�����t��������d�����d��������rc�`�\P!\RR4pVPR4R#)rfr`rVN)r4r�r�
set_deviationr�s& r�test_fm_mod_set_deviation�%TestSetters.test_fm_mod_set_deviation�s$���!�!�"�e�S�1�����%� rc�`�\P!\RR4pVPR4R#)rkr`r�N)r4r�r�set_sensitivityr�s& r�test_pm_mod_set_sensitivity�'TestSetters.test_pm_mod_set_sensitivity�s$���"�"�2�s�C�0�����C� rc��\P!\RRR4pVPR4VPR4R#)r`r�rkTFN)r4r�r�	set_clampr�s& r�test_am_mod_set_clamp�!TestSetters.test_am_mod_set_clamp�s.���l�l�2�s�C��-���
�
�d���
�
�e�rroN)rprqrrrsr�r�r�r�r�rtrurvs@rr�r��s$����S�	�!�!��rr�c�,a�]tRt^�toRtRtRtVtR#)�TestInstanceIsolationc�Z�\\R\4p\P!\RR4p\P!\RR4pVPVP
44pVPVP
44p\PPWE4R#)r�rfrVN)
rrr8r4rgr6r�r�testing�assert_array_equal)rDr��d1�d2r�r�s&     r�+test_two_fm_demod_instances_are_independent�ATestInstanceIsolation.test_two_fm_demod_instances_are_independent�sr��
�"�e�Q�
'��
�
"�
"�2�u�e�
4��
�
"�
"�2�u�e�
4���z�z�"�'�'�)�$���z�z�"�'�'�)�$��
�
�
�%�%�d�1rc��\P!\RR4p\\R\4p\
P!\\
PR7pVPV4VPV4p\
PpRqdV8gqu!V4q�'Eg3\P!RV3RWF34RR\P!49g\P!V4'd\P!V4MRR\P!V4/,p	RR	R
\P!49g!\P!\
4'd\P!\
4MR
R\P!V4RV	R
\P!V4/,p
\!\P"!V
44hR;p;p;rhR#)zCStateful filter: second call on silence after a tone should differ.r r!rr`r��	out_afterr�zGassert %(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.any
}(%(py8)s)
}r�rr"r��py10N)�!=)z%(py3)s != %(py6)s)r4r5rrr8rrrr6�anyr9r:r;r<r=r>rArB)rDr��iq_tone�iq_zeror�rErHr�r��@py_format7�@py_format11s&          r�+test_second_process_call_differs_from_first�ATestInstanceIsolation.test_second_process_call_differs_from_first�s���!�!�"�c�3�/���r�3��*���(�(�1�B�L�L�1�����G���K�K��(�	��v�v�'�3�'�3�&�'�v�'�'�'�'�'�'�'�i�'�'�'�'�'�'�i�'�'�'�'�i�'�'�'�3�'�'�'�'�'�'�'�r�'�'�'�'�r�'�'�'�v�'�'�'�'�'�'�'�'�'�'�'rroN)rprqrrrsr�rrtrurvs@rr�r��s����2�(�(rr�)r��builtinsr;�_pytest.assertion.rewrite�	assertion�rewriter9�numpyrr��	orion_sdrr4�conftestrrrr8rrrryr�r�r�rorr�<module>r
so������
��1�1�	���+��)�=�=�<?�?�4$!�$!�V!�!�P(�(r