orion-sdr 0.0.29

DSP/SDR block library targeting HF-to-UHF, satellites, and Python bindings. Roadmap inside.
Documentation
+
ı�i>.c��Rt^RIt^RIHuHt^RIt^RI	t	^RI
t^RIH
t
HtHtRt]3RRllt]3RRllt!RR	4t!R
R4t!RR
4t!RR4t!RR4t!RR4t!RR4t!RR4tR#)ahUnit 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)
- Digital mode: output length, dtype, invalid-order rejection
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_ssb2sE���!�!�"�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_fm6sE���#�#�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_pm:sE���#�#�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^CtoRtRtRtRtRtRt	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_cwDsE���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_amHsE���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_fmLsE���!�!�"�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_pmPsE���"�"�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_ssbTsI������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@rryryCs#����?�?�?�?�?�?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_dtypeasT���!�!�"�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_dtypefsT���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_inputlsX���#�#�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_inputqsX���!�!�"�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_contiguouswsb���!�!�"�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����?r�r��rms2r"�rms1�assert %(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�Da�]tRt^�toRtRtRtRtRtRt	Rt
VtR#)	�TestDigitalModOutputShapec��\P!\\PR7p\P
!RRR4P
V4p.q2Pp\3qTV8Hqfqv'd"VPp\Pq�V	8Hq�pV'Eg\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,q�P!V4V'Ed\P!RX
3RXX	34R	R\P!49g\P!V4'd\P!V4MRR
\P!V4RR\P!49g!\P!\4'd\P!\4MRR
\P!V	4/,p
RRV
/,q�P!V4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#�rr�r`r"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2r|)rrr8�uint8r4�BpskModr6r7rrr9r:r;r<r=r>r?r@rArB�rD�bitsr#rErFrGrHrIrJrKrLrMrNrOrPrQrRs&                r�!test_bpsk_output_length_and_dtype�;TestDigitalModOutputShape.test_bpsk_output_length_and_dtype�sU���x�x�����*���k�k�#�s�C�(�0�0��6��>�y�y�>�Q�D�>�D� �>�>�S�Y�Y�>�"�,�,�>�,�%>�>�>�>�>�y�>�>�>�>�>�>�s�>�>�>�>�s�>�>�>�y�>�>�>�D�>�>�>�>�>�>�>�>�>�Y�,�>�>�>�>�>�>�S�>�>�>�>�S�>�>�>�Y�>�>�>�>�>�>�"�>�>�>�>�"�>�>�>�,�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>rc��\P!\\PR7p\P
!RRR4P
V4p.q2Pp\^,3qTV8Hqfqv'd"VPp\Pq�V	8Hq�pV'Eg\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,q�P!V4V'Ed\P!RX
3RXX	34R	R\P!49g\P!V4'd\P!V4MRR
\P!V4RR\P!49g!\P!\4'd\P!\4MRR
\P!V	4/,p
RRV
/,q�P!V4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#r�)rrr8r�r4�QpskModr6r7rrr9r:r;r<r=r>r?r@rArBr�s&                r�!test_qpsk_output_length_and_dtype�;TestDigitalModOutputShape.test_qpsk_output_length_and_dtype�sY���x�x�����*���k�k�#�s�C�(�0�0��6��C�y�y�C�Q�!�V�I�C�I�%�C�C�#�)�)�C�r�|�|�C�|�*C�C�C�C�C�y�C�C�C�C�C�C�s�C�C�C�C�s�C�C�C�y�C�C�C�I�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�r�C�C�C�C�r�C�C�C�|�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�Crc��\P!\\PR7p\P
!^RRR4P
V4p.q2Pp\^,3qTV8Hqfqv'd"VPp\Pq�V	8Hq�pV'Eg\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,q�P!V4V'Ed\P!RX
3RXX	34R	R\P!49g\P!V4'd\P!V4MRR
\P!V4RR\P!49g!\P!\4'd\P!\4MRR
\P!V	4/,p
RRV
/,q�P!V4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#r��rrr8r�r4�QamModr6r7rrr9r:r;r<r=r>r?r@rArBr�s&                r�"test_qam16_output_length_and_dtype�<TestDigitalModOutputShape.test_qam16_output_length_and_dtype��[���x�x�����*���j�j��S�#�s�+�3�3�D�9��C�y�y�C�Q�!�V�I�C�I�%�C�C�#�)�)�C�r�|�|�C�|�*C�C�C�C�C�y�C�C�C�C�C�C�s�C�C�C�C�s�C�C�C�y�C�C�C�I�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�r�C�C�C�C�r�C�C�C�|�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�Crc��\P!\\PR7p\P
!^@RRR4P
V4p.q2Pp\^,3qTV8Hqfqv'd"VPp\Pq�V	8Hq�pV'Eg\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,q�P!V4V'Ed\P!RX
3RXX	34R	R\P!49g\P!V4'd\P!V4MRR
\P!V4RR\P!49g!\P!\4'd\P!\4MRR
\P!V	4/,p
RRV
/,q�P!V4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#r�rr�s&                r�"test_qam64_output_length_and_dtype�<TestDigitalModOutputShape.test_qam64_output_length_and_dtype�rrc��\P!\\PR7p\P
!RRRR4P
V4p.q2Pp\^,3qTV8Hqfqv'd"VPp\Pq�V	8Hq�pV'Eg\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRR	V/,q�P!V4V'Ed\P!RX
3RXX	34R
R\P!49g\P!V4'd\P!V4MRR\P!V4RR
\P!49g!\P!\4'd\P!\4MR
R\P!V	4/,p
RRV
/,q�P!V4\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(r)r*rr+r,r-r.r/Nr0r2r|rr�s&                r�#test_qam256_output_length_and_dtype�=TestDigitalModOutputShape.test_qam256_output_length_and_dtype�s[���x�x�����*���j�j��c�3��,�4�4�T�:��C�y�y�C�Q�!�V�I�C�I�%�C�C�#�)�)�C�r�|�|�C�|�*C�C�C�C�C�y�C�C�C�C�C�C�s�C�C�C�C�s�C�C�C�y�C�C�C�I�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�r�C�C�C�C�r�C�C�C�|�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�Crc���\P!\\34;_uu_4\P
!^ RRR4RRR4R# +'giR#;i)� r�r`N)r�r�r�r�r4r�rDs&r�test_qam_invalid_order�0TestDigitalModOutputShape.test_qam_invalid_order�s7��
�]�]�J�	�2�
3�
3��J�J�r�3��S�)�4�
3�
3�
3�s�A
�
A	roN)rprqrrrsr�r�rrrrrtrurvs@rr�r��s,����?�
D�
D�
D�
D�
*�*rr�c�Ja�]tRt^�toRtRtRtRtRtRt	Rt
RtVtR	#)
�TestDigitalDemodOutputShapec��\P!\\PR7p\P
!R4P
V4p.q2Pp\3qTV8Hqfqv'd"VPp\Pq�V	8Hq�pV'Eg\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,q�P!V4V'Ed\P!RX
3RXX	34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V	4/,p
R
RV
/,q�P!V4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#�rr�r"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2�zN%(py13)s
{%(py13)s = %(py11)s.dtype
} == %(py17)s
{%(py17)s = %(py15)s.uint8
})rrr8rr4�	BpskDemodr6r7rr�r9r:r;r<r=r>r?r@rArB�rDr�r#rErFrGrHrIrJrKrLrMrNrOrPrQrRs&                rr��=TestDigitalDemodOutputShape.test_bpsk_output_length_and_dtype�sQ��
�X�X�a�r�|�|�
,���m�m�C� �(�(��,��:�y�y�:�Q�D�:�D� �:�:�S�Y�Y�:�"�(�(�:�(�%:�:�:�:�:�y�:�:�:�:�:�:�s�:�:�:�:�s�:�:�:�y�:�:�:�D�:�:�:�:�:�:�:�:�:�Y�(�:�:�:�:�:�:�S�:�:�:�:�S�:�:�:�Y�:�:�:�:�:�:�"�:�:�:�:�"�:�:�:�(�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:rc��\P!\\PR7p\P
!R4P
V4p.q2Pp\^,3qTV8Hqfqv'd"VPp\Pq�V	8Hq�pV'Eg\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,q�P!V4V'Ed\P!RX
3RXX	34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V	4/,p
R
RV
/,q�P!V4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#r)rrr8rr4�	QpskDemodr6r7rr�r9r:r;r<r=r>r?r@rArBrs&                rr��=TestDigitalDemodOutputShape.test_qpsk_output_length_and_dtype�sU��
�X�X�a�r�|�|�
,���m�m�C� �(�(��,��>�y�y�>�Q��U�H�>�H�$�>�>����>�b�h�h�>�h�)>�>�>�>�>�y�>�>�>�>�>�>�s�>�>�>�>�s�>�>�>�y�>�>�>�H�>�>�>�>�>�>�>�>�>��h�>�>�>�>�>�>��>�>�>�>��>�>�>��>�>�>�>�>�>�b�>�>�>�>�b�>�>�>�h�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>rc��\P!\\PR7p\P
!^R4P
V4p.q2Pp\^,3qTV8Hqfqv'd"VPp\Pq�V	8Hq�pV'Eg\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,q�P!V4V'Ed\P!RX
3RXX	34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V	4/,p
R
RV
/,q�P!V4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#r�rrr8rr4�QamDemodr6r7rr�r9r:r;r<r=r>r?r@rArBrs&                rr�>TestDigitalDemodOutputShape.test_qam16_output_length_and_dtype��W��
�X�X�a�r�|�|�
,���l�l�2�s�#�+�+�B�/��>�y�y�>�Q��U�H�>�H�$�>�>����>�b�h�h�>�h�)>�>�>�>�>�y�>�>�>�>�>�>�s�>�>�>�>�s�>�>�>�y�>�>�>�H�>�>�>�>�>�>�>�>�>��h�>�>�>�>�>�>��>�>�>�>��>�>�>��>�>�>�>�>�>�b�>�>�>�>�b�>�>�>�h�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>rc��\P!\\PR7p\P
!^@R4P
V4p.q2Pp\^,3qTV8Hqfqv'd"VPp\Pq�V	8Hq�pV'Eg\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,q�P!V4V'Ed\P!RX
3RXX	34RR\P!49g\P!V4'd\P!V4MRR	\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V	4/,p
R
RV
/,q�P!V4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#rrrs&                rr�>TestDigitalDemodOutputShape.test_qam64_output_length_and_dtype�r!rc��\P!\\PR7p\P
!RR4P
V4p.q2Pp\^,3qTV8Hqfqv'd"VPp\Pq�V	8Hq�pV'Eg\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,q�P!V4V'Ed\P!RX
3RXX	34R	R\P!49g\P!V4'd\P!V4MRR
\P!V4RR\P!49g!\P!\4'd\P!\4MRR
\P!V	4/,p
RRV
/,q�P!V4\P"!V^4/,pRRV/,p\%\P&!V44hR;p;p;p;p;p;p;r�R#)rr
r�r"r#r$r%r&r'r(r)r*rr+r,r-r.r/Nr0r2rrrs&                rr�?TestDigitalDemodOutputShape.test_qam256_output_length_and_dtype�sW��
�X�X�a�r�|�|�
,���l�l�3��$�,�,�R�0��>�y�y�>�Q��U�H�>�H�$�>�>����>�b�h�h�>�h�)>�>�>�>�>�y�>�>�>�>�>�>�s�>�>�>�>�s�>�>�>�y�>�>�>�H�>�>�>�>�>�>�>�>�>��h�>�>�>�>�>�>��>�>�>�>��>�>�>��>�>�>�>�>�>�b�>�>�>�>�b�>�>�>�h�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>rc��\P!\\34;_uu_4\P
!^�R4RRR4R# +'giR#;i)�r�N)r�r�r�r�r4rrs&rr�2TestDigitalDemodOutputShape.test_qam_invalid_order�s3��
�]�]�J�	�2�
3�
3��L�L��c�"�4�
3�
3�
3�s�A�A	c�\�\P!\\PR7p\P
RR/3\PRR/3\PR^RR/33EF?wr#V!R/VBPV4p\Pp^qdV8Hp^q�V8Hq�V	,q�!V
4q�'Eg�\P!RV3RWF34RR\P!49g\P!V4'd\P!V4MRR\P!V4/,p\P!RV	3RWH34RR\P!49g\P!V4'd\P!V4MRR	\P!V4/,p
\P !VP"R
24R,RR
\P!49g!\P!\4'd\P!\4MR
R\P!V4RVRV
R\P!V4/,p\%\P&!V44hR;p;p;p;p	;p;r�EKB	R#)zAll output bits must be 0 or 1.r�gainr��orderr�r#r�r'�py12z" output contains non-binary valueszV
>assert %(py17)s
{%(py17)s = %(py2)s
{%(py2)s = %(py0)s.all
}((%(py8)s | %(py14)s))
}r�rr"r��py14r+Nror0)z%(py3)s == %(py6)s)z%(py9)s == %(py12)s)r�onesr8rr4rrrr6�allr9r:r;r<r=r>�_format_assertmsgrprArB)rDr��cls�kwargsr#rErHr��@py_assert11r��@py_assert15rK�@py_format7�@py_format13rOs&              r�test_bits_are_binary�0TestDigitalDemodOutputShape.test_bits_are_binary�s���
�W�W�Q�b�l�l�
+��
�]�]�f�c�]�+�
�]�]�f�c�]�+�
�\�\�g�r�6�3�7�8�
�K�C�
�-��-�'�'��+�C��6�6�g�!�g�!�8�g�q�g�q��g�1�g�6�1�2�g�2�g�g�g�3�g�g�g�g�g�g�3�g�g�g�g�3�g�g�g�!�g�g�g�g��g�g�g�g�g�g��g�g�g�g��g�g�g�q�g�g�g�g�s�|�|�n�Df�4g�g�g�g�g�g�g�g�2�g�g�g�g�2�g�g�g�6�g�g�g�g�2�g�g�g�g�g�g�g�g�

rroN)
rprqrrrsr�r�rrrrr7rtrurvs@rrr�s/����;�
?�
?�
?�
?�
#�	h�	hrrc�>a�]tRtRtoRtRtRtRtRtRt	Vt
R#)	�TestDigitalSettersic�r�\P!\\PR7p\P
!RRR4p\P
!RRR4pVP
R4\\P!\P!\P!VPVP444^,444p\\P!\P!\P!VPVP444^,444pWT8�qf'g�\P!RV3RWT34RR\P !49g\P"!V4'd\P$!V4MRRR\P !49g\P"!V4'd\P$!V4MR/,pRR	V/,p\'\P(!V44hR
pR
#)
rr�r`r�r�r�r"r�r�r$Nr�r�)rr.r8r�r4r�r�r�r�r�r�r6r�r9r:r;r<r=r>rArB)	rDr��m1�m2r�r�rEr�r�s	&        r�test_bpsk_mod_set_gain�)TestDigitalSetters.test_bpsk_mod_set_gains*���w�w�q����)��
�[�[��c�3�
'��
�[�[��c�3�
'��
���C���R�W�W�R�W�W�R�V�V�B�J�J�t�y�y�{�,C�%D�a�%G�H�I�J���R�W�W�R�W�W�R�V�V�B�J�J�t�y�y�{�,C�%D�a�%G�H�I�J���{�����t�������t�����t��������d�����d��������rc�P�\P!R4PR4R#)r�r�N)r4rr�rs&r�test_bpsk_demod_set_gain�+TestDigitalSetters.test_bpsk_demod_set_gains���
�
�c��#�#�C�(rc�T�\P!RRR4PR4R#)r�r`r�N)r4r�r�rs&r�test_qpsk_mod_set_gain�)TestDigitalSetters.test_qpsk_mod_set_gains�����C��c�"�+�+�C�0rc�V�\P!^RRR4PR4R#)�r�r`r�N)r4rr�rs&r�test_qam_mod_set_gain�(TestDigitalSetters.test_qam_mod_set_gains���
�
�2�s�C��%�.�.�s�3rc�R�\P!^@R4PR4R#)�@r�r�N)r4rr�rs&r�test_qam_demod_set_gain�*TestDigitalSetters.test_qam_demod_set_gains�����R���&�&�s�+rroN)rprqrrrsr>rArDrHrLrtrurvs@rr:r:s#�����)�1�4�,�,rr:c�,a�]tRtRtoRtRtRtVtR#)�TestInstanceIsolationic�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_independentsr��
�"�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_zerorXrErHr�r�r5�@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)rprqrrrsrUr_rtrurvs@rrOrOs����2�(�(rrO)r��builtinsr;�_pytest.assertion.rewrite�	assertion�rewriter9�numpyrr��	orion_sdrr4�conftestrrrr8rrrryr�r�r�rr:rOrorr�<module>rhs�������
��1�1�	���+��)�=�=�<?�?�4$!�$!�V!�!�P*�*�F'h�'h�\,�,�6(�(r