orion-sdr 0.0.21

DSP/SDR block library targeting HF-to-UHF, satellites, and Python bindings. Roadmap inside.
Documentation
+
�u�i\!c���Rt^RIt^RIHuHt^RIt^RI	t	^RI
tRtRt
Rt]!^
4t!RR4t!RR4t!R	R
4t!RR4t!R
R4t!RR4t!RR4tR#)uxTests for FT8/FT4 Python bindings (Phase 5).

All tests are noiseless / synthetic — no hardware or RF noise required.
Ngp�@g@�@g0�@c�8a�]tRt^toRtRtRtRtRtVt	R#)�TestFt8Waveformc��\P!\\RR4p\P
!^:\PR7pVPV4pVPpRqTV8Hqf'g�\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,p\\P !V44hR	;p;reVP"p\P$q�V	8Hqf'Eg\P!RV3RWI34RR\P!49g\P!V4'd\P!V4MRR\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V	4/,p
R
RV
/,p\\P !V44hR	;p;riR	#)���?��dtype�py0�iq�py2�py5�assert %(py7)s�py7N�py4�np�py6�assert %(py8)s�py8��P��==�z-%(py2)s
{%(py2)s = %(py0)s.shape
} == %(py5)s�zL%(py2)s
{%(py2)s = %(py0)s.dtype
} == %(py6)s
{%(py6)s = %(py4)s.complex64
})�sdr�Ft8Mod�FS�BASE_HZr�zeros�uint8�modulate�shape�
@pytest_ar�_call_reprcompare�@py_builtins�locals�_should_repr_global_name�	_saferepr�AssertionError�_format_explanationr�	complex64��self�mod�tonesr	�@py_assert1�@py_assert4�@py_assert3�@py_format6�@py_format8�@py_assert5�@py_format7�@py_format9s&           �4/Users/glenn/work/orion-sdr/python/tests/test_ft8.py�test_mod_shape�TestFt8Waveform.test_mod_shapesB���j�j��W�c�3�/������2�8�8�,��
�\�\�%�
 ���x�x�%�:�%�:�%�%�%�%�%�x�%�%�%�%�%�%�r�%�%�%�%�r�%�%�%�x�%�%�%�:�%�%�%�%�%�%�%�%��x�x�'�2�<�<�'�<�'�'�'�'�'�x�'�'�'�'�'�'�r�'�'�'�'�r�'�'�'�x�'�'�'�'�'�'�2�'�'�'�'�2�'�'�'�<�'�'�'�'�'�'�'�'�c���\P!\^:4Uu.uFq^,NK
	up\PR7p\P
!\\RR4pVPV4p\P!\\4pVPV4pVPpRq�V8Hq�'g�\P!RV	3RWx34RR\P!49g\P !V4'd\P"!V4MRR\P"!V4R\P"!V4/,p
RR	V
/,p\%\P&!V44hR
;p;r�VP(p\Pq�V8Hq�'Eg\P!RV	3RW|34RR\P!49g\P !V4'd\P"!V4MRR\P"!V4RR\P!49g!\P !\4'd\P"!\4MRR
\P"!V4/,p
RRV
/,p\%\P&!V44hR
;p;r�\P*P-Wb4R
#uupi)�:rrrr�	tones_outr
rrr
Nrrrrr�r;rr�zH%(py2)s
{%(py2)s = %(py0)s.dtype
} == %(py6)s
{%(py6)s = %(py4)s.uint8
})r�array�rangerrrrrr�Ft8Demod�
demodulater r!r"r#r$r%r&r'r(r�testing�assert_array_equal�r+�i�tones_inr,r	�demodr<r.r/r0r1r2r3r4r5s&              r6�test_demod_roundtrip�$TestFt8Waveform.test_demod_roundtrip����8�8�E�"�I�6�I�q��U�U�I�6�b�h�h�G���j�j��W�c�3�/��
�\�\�(�
#�����R��)���$�$�R�(�	����'�%�'�%�'�'�'�'�'��'�'�'�'�'�'�y�'�'�'�'�y�'�'�'��'�'�'�%�'�'�'�'�'�'�'�'����*�"�(�(�*�(�*�*�*�*�*��*�*�*�*�*�*�y�*�*�*�*�y�*�*�*��*�*�*�*�*�*�"�*�*�*�*�"�*�*�*�(�*�*�*�*�*�*�*�*�
�
�
�%�%�i�:��7��K6c	�<�\P!\\RR4p\P
!\\34;_uu_4VP\P!^9\PR74RRR4R# +'giR#;i)rrrN)rrrr�pytest�raises�
ValueError�	Exceptionrrrr)r+r,s& r6�test_mod_wrong_length�%TestFt8Waveform.test_mod_wrong_length)sT���j�j��W�c�3�/��
�]�]�J�	�2�
3�
3��L�L����"�B�H�H�5�6�4�
3�
3�
3�s�
6B
�
B	c	�8�\P!\\4p\P
!\\34;_uu_4VP\P!R\PR74RRR4R# +'giR#;i)i�rN)rrArrrNrOrPrQrBrrr))r+rHs& r6�test_demod_too_short�$TestFt8Waveform.test_demod_too_short.sR�����R��)��
�]�]�J�	�2�
3�
3����R�X�X�d�"�,�,�?�@�4�
3�
3�
3�s�6B�B	�N)
�__name__�
__module__�__qualname__�__firstlineno__r7rIrRrU�__static_attributes__�__classdictcell__��
__classdict__s@r6rrs ����(�;�7�
A�Ar9rc�,a�]tRt^8toRtRtRtVtR#)�TestFt4Waveformc��\P!\\RR4p\P
!^W\PR7pVPV4pVPpRqTV8Hqf'g�\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,p\\P !V44hR	;p;reVP"p\P$q�V	8Hqf'Eg\P!RV3RWI34RR\P!49g\P!V4'd\P!V4MRR\P!V4R
R\P!49g!\P!\4'd\P!\4MRR\P!V	4/,p
R
RV
/,p\\P !V44hR	;p;riR	#)rrrrr	r
rrr
Nrrrrr)i@�rrr)r�Ft4Modrrrrrrr r!r"r#r$r%r&r'r(rr)r*s&           r6r7�TestFt4Waveform.test_mod_shape9sB���j�j��W�c�3�/������2�8�8�,��
�\�\�%�
 ���x�x�$�9�$�9�$�$�$�$�$�x�$�$�$�$�$�$�r�$�$�$�$�r�$�$�$�x�$�$�$�9�$�$�$�$�$�$�$�$��x�x�'�2�<�<�'�<�'�'�'�'�'�x�'�'�'�'�'�'�r�'�'�'�'�r�'�'�'�x�'�'�'�'�'�'�2�'�'�'�'�2�'�'�'�<�'�'�'�'�'�'�'�'r9c���\P!\^W4Uu.uFq^,NK
	up\PR7p\P
!\\RR4pVPV4p\P!\\4pVPV4pVPpRq�V8Hq�'g�\P!RV	3RWx34RR\P!49g\P !V4'd\P"!V4MRR\P"!V4R\P"!V4/,p
RR	V
/,p\%\P&!V44hR
;p;r�VP(p\Pq�V8Hq�'Eg\P!RV	3RW|34RR\P!49g\P !V4'd\P"!V4MRR\P"!V4RR\P!49g!\P !\4'd\P"!\4MRR
\P"!V4/,p
RRV
/,p\%\P&!V44hR
;p;r�\P*P-Wb4R
#uupi)�Wrrrrr<r
rrr
Nrrrrr�rfrrr>)rr?r@rrrcrrr�Ft4DemodrBr r!r"r#r$r%r&r'r(rrCrDrEs&              r6rI�$TestFt4Waveform.test_demod_roundtrip@rKrLrWN)rXrYrZr[r7rIr\r]r^s@r6rara8s����(�;�;r9rac�8a�]tRt^OtoRtRtRtRtRtVt	R#)�TestFt8Codecc�6�\PP\4pVPpRq2V8HqD'g�\
P!RV3RW#34RR\P!49g\
P!V4'd\
P!V4MRR\
P!V4R\
P!V4/,pRRV/,p\\
P!V44hR;p;rCVPp\PqrV8HqD'Eg\
P!RV3RW'34RR\P!49g\
P!V4'd\
P!V4MRR\
P!V4RR	\P!49g!\
P!\4'd\
P!\4MR	R
\
P!V4/,pRRV/,p	\\
P!V	44hR;p;rGR
V4p\!V4qD'g�RRR\P!49g!\
P!\ 4'd\
P!\ 4MRR\
P!V4R\
P!V4/,p
\\
P!V
44hR;r$R#)r;rr-r
rrr
Nrrrrrc3�`"�TF$p^\V4u;8*;'d^8*Mux�K&	R#5i��N��int��.0�ts& r6�	<genexpr>�1TestFt8Codec.test_encode_shape.<locals>.<genexpr>T�$���3�U��1��A��#�#�!�#�#�U���,.�,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}�allr=rrr>)r�Ft8Codec�encode�PAYLOADr r!r"r#r$r%r&r'r(rrrrz�r+r-r.r/r0r1r2r3r4r5�@py_format5s&          r6�test_encode_shape�TestFt8Codec.test_encode_shapeP������#�#�G�,���{�{�#�e�#�e�#�#�#�#�#�{�#�#�#�#�#�#�u�#�#�#�#�u�#�#�#�{�#�#�#�e�#�#�#�#�#�#�#�#��{�{�&�b�h�h�&�h�&�&�&�&�&�{�&�&�&�&�&�&�u�&�&�&�&�u�&�&�&�{�&�&�&�&�&�&�b�&�&�&�&�b�&�&�&�h�&�&�&�&�&�&�&�&�3�U�3�3�s�3�3�3�3�3�3�3�3�3�3�s�3�3�3�3�s�3�3�3�3�3�3�3�3�3�3�3�3�3�3r9c��\PP\4p\PP	V4pRq2VJqD'g�\
P!R
V3RW#34RR\P!49g\
P!V4'd\
P!V4MRR\
P!V4/,pRRV/,p\\
P!V44hR;rCV\8HqD'g�\
P!RV3R
V\34RR\P!49g\
P!V4'd\
P!V4MRRR\P!49g!\
P!\4'd\
P!\4MR/,pRR	V/,p\\
P!V44hRpR#�Nr�result�py3�assert %(py5)srr
r}�assert %(py4)sr��is not�z%(py0)s is not %(py3)sr�z%(py0)s == %(py2)s)
rr{r|r}�decode_hardr!r"r#r$r%r&r'r(�	r+r-r��@py_assert2r.�@py_format4r1�@py_format3rs	&        r6�test_roundtrip_hard� TestFt8Codec.test_roundtrip_hardV�������#�#�G�,�����)�)�%�0��!�!�T�!�!�!�!�!�v�!�!�!�!�!�!�v�!�!�!�!�v�!�!�!�T�!�!�!�!�!�!�!�!��� � � � � �v�� � � � � � �v� � � � �v� � � � � � � �� � � � �� � � � � � � � r9c�*�\P!^:\PR7p\PPV4p.pRqBVJqUqe'g\
V\4qwpV'Eg\P!RV3RW$34RR\P!49g\P!V4'd\P!V4MRR\P!V4/,pRRV/,q�PV	4V'Eg*RR	R
\P!49g!\P!\4'd\P!\4MR
RR\P!49g\P!V4'd\P!V4MRRR
\P!49g!\P!\4'd\P!\4MR
R\P!X4/,q�PV
4\P!V^4/,pRRV/,p\!\P"!V44hR;p;p;p;rGR#)r;rNr
r�rz%(py7)sr
z2%(py13)s
{%(py13)s = %(py9)s(%(py10)s, %(py11)s)
}�py9�
isinstance�py10�py11�bytes�py13zassert %(py16)s�py16)�is)z%(py2)s is %(py5)s)rrrrr{r�r�r�r!r"r#r$r%r&�append�_format_boolopr'r()
r+�	bad_tonesr�r.r/r0�@py_assert0�@py_assert12r1r2�@py_format14�@py_format15�@py_format17s
&            r6�test_decode_hard_bad_tones�'TestFt8Codec.test_decode_hard_bad_tones\s6���H�H�R�r�x�x�0�	����)�)�)�4��:��:��~�:�:��F�E�!:�:�:�:�:�v�:�:�:�:�:�:�v�:�:�:�:�v�:�:�:��:�:�:�:�:�:�:�:�:�:�:�:��:�:�:�:��:�:�:�:�:�:�:�F�:�:�:�:�F�:�:�:�:�:�:�:�E�:�:�:�:�E�:�:�:�!:�:�:�:�:�:�:�:�:�:�:�:�:�:�:r9c	��\P!\\34;_uu_4\P
P
\P!^
\PR74RRR4R# +'giR#;i)�
rN)
rNrOrPrQrr{�decode_softrr�float32�r+s&r6�test_decode_soft_shape_check�)TestFt8Codec.test_decode_soft_shape_checkcsF��
�]�]�J�	�2�
3�
3��L�L�$�$�R�X�X�b��
�
�%C�D�4�
3�
3�
3�s�AA7�7B	rWN)
rXrYrZr[r�r�r�r�r\r]r^s@r6rkrkOs ����4�!�;�E�Er9rkc�,a�]tRt^ltoRtRtRtVtR#)�TestFt4Codecc�6�\PP\4pVPpRq2V8HqD'g�\
P!RV3RW#34RR\P!49g\
P!V4'd\
P!V4MRR\
P!V4R\
P!V4/,pRRV/,p\\
P!V44hR;p;rCVPp\PqrV8HqD'Eg\
P!RV3RW'34RR\P!49g\
P!V4'd\
P!V4MRR\
P!V4RR	\P!49g!\
P!\4'd\
P!\4MR	R
\
P!V4/,pRRV/,p	\\
P!V	44hR;p;rGR
V4p\!V4qD'g�RRR\P!49g!\
P!\ 4'd\
P!\ 4MRR\
P!V4R\
P!V4/,p
\\
P!V
44hR;r$R#)rfrr-r
rrr
Nrrrrrc3�`"�TF$p^\V4u;8*;'d^8*Mux�K&	R#5irnrprrs& r6ru�1TestFt4Codec.test_encode_shape.<locals>.<genexpr>qrwrxryrzrgrrr>)r�Ft4Codecr|r}r r!r"r#r$r%r&r'r(rrrrzr~s&          r6r��TestFt4Codec.test_encode_shapemr�r9c��\PP\4p\PP	V4pRq2VJqD'g�\
P!R
V3RW#34RR\P!49g\
P!V4'd\
P!V4MRR\
P!V4/,pRRV/,p\\
P!V44hR;rCV\8HqD'g�\
P!RV3R
V\34RR\P!49g\
P!V4'd\
P!V4MRRR\P!49g!\
P!\4'd\
P!\4MR/,pRR	V/,p\\
P!V44hRpR#r�)
rr�r|r}r�r!r"r#r$r%r&r'r(r�s	&        r6r�� TestFt4Codec.test_roundtrip_hardsr�r9rWN)rXrYrZr[r�r�r\r]r^s@r6r�r�ls����4�!�!r9r�c�>a�]tRt^~to]3RltRtRtRtRt	Vt
R#)�TestFt8Syncc��\PPV4p\P!\\
RR4pVP
V4#)zABuild a noiseless IQ buffer containing one FT8 frame at offset 0.rr)rr{r|rrrr)r+�payloadr-r,s&&  r6�_make_frame_iq�TestFt8Sync._make_frame_iqs9�����#�#�G�,���j�j��W�c�3�/���|�|�E�"�"r9c��VP4p\P!V\\R,
\R,^^^4p\V4p^qCV8�qU'Eg\P!RV3RW434RR\P!49g!\P!\
4'd\P!\
4MRRR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRR	V/,p\\P!V44hR
;p;rTV^,pRq�V9q3'g�\P!RV3RW�34R\P!V	4RR\P!49g\P!V4'd\P!V4MR/,p
R
RV
/,p\\P!V44hR
;r�Rq�V9q3'g�\P!RV3RW�34R\P!V	4RR\P!49g\P!V4'd\P!V4MR/,p
R
RV
/,p\\P!V44hR
;r�Rq�V9q3'g�\P!RV3RW�34R\P!V	4RR\P!49g\P!V4'd\P!V4MR/,p
R
RV
/,p\\P!V44hR
;r�Rq�V9q3'g�\P!RV3RW�34R\P!V	4RR\P!49g\P!V4'd\P!V4MR/,p
R
RV
/,p\\P!V44hR
;r�VR,q�PpRqCV8HqU'g�\P!RV3RW434R\P!V	4R\P!V4R\P!V4/,pRR	V/,p\\P!V44hR
;p	;p;rTVR,q�Pp\ P"q�V8HqU'g�\P!RV3RW<34R\P!V	4R\P!V4RR\P!49g!\P!\ 4'd\P!\ 4MRR\P!V4/,p
RRV
/,p\\P!V44hR
;p	;p;r\R
#)�I@�Y@r�len�py1�resultsr�rrrN�time_sym�rr�r�freq_bin�score�llrrr
zassert %(py9)sr���>�z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)s)�in)z%(py1)s in %(py3)s)�r)z-%(py3)s
{%(py3)s = %(py1)s.shape
} == %(py6)s)zJ%(py3)s
{%(py3)s = %(py1)s.dtype
} == %(py7)s
{%(py7)s = %(py5)s.float32
})r�r�ft8_syncrrr�r!r"r#r$r%r&r'r(r rrr�)r+r	r�r�r3r/r4r5r�r�r�r1�@py_assert6r2�@py_format10s&              r6�test_finds_frame�TestFt8Sync.test_finds_frame�s0��
�
 �
 �
"���,�,�r�2�w��~�w����1�a�P���7�|��a��a������|�������s�����s��������7�����7����|����a����������A�J����Q������z����z�������Q�����Q�����������Q������z����z�������Q�����Q�����������!�|�����w����w�������!�����!������������z�����u����u�����������������������x�'�~�~�'��'��'�'�'�'�'�~�'�'�'�x�'�'�'�~�'�'�'��'�'�'�'�'�'�'�'���x�+�~�~�+����+��+�+�+�+�+�~�+�+�+�x�+�+�+�~�+�+�+�+�+�+��+�+�+�+��+�+�+��+�+�+�+�+�+�+�+r9c���VP4p\P!V\\R,
\R,^^^4p\V4p^qCV8�qU'Eg\P!RV3RW434RR\P!49g!\P!\
4'd\P!\
4MRRR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRR	V/,p\\P!V44hR
;p;rT\PPV^,R,4pR
q8VJq�'g�\P!RV	3RW�34RR\P!49g\P!V4'd\P!V4MRR\P!V4/,p
R
RV
/,p\\P!V44hR
;r�V\ 8Hq�'g�\P!RV	3RV\ 34RR\P!49g\P!V4'd\P!V4MRRR\P!49g!\P!\ 4'd\P!\ 4MR/,pRRV/,p
\\P!V
44hR
p	R
#)r�r�rr�r�r�r�rrrNr��payload_outr�rr
r}r�rr�r�r�r�rr�)r�rr�rrr�r!r"r#r$r%r&r'r(r{r�r})r+r	r�r�r3r/r4r5r�r.r�r1r�rs&             r6�test_decode_soft�TestFt8Sync.test_decode_soft�s���
�
 �
 �
"���,�,�r�2�w��~�w����1�a�P���7�|��a��a������|�������s�����s��������7�����7����|����a����������l�l�.�.�w�q�z�%�/@�A��"&�&�$�&�&�&�&�&�{�&�&�&�&�&�&�{�&�&�&�&�{�&�&�&�$�&�&�&�&�&�&�&�&��g�%�%�%�%�%�{�g�%�%�%�%�%�%�{�%�%�%�%�{�%�%�%�%�%�%�%�g�%�%�%�%�g�%�%�%�%�%�%�%�%r9c�T�\P!R\PR7p\P!V\
\\R,^^^4p\V\4q3'Eg9RRR\P!49g!\P!\4'd\P!\4MRRR\P!49g\P!V4'd\P!V4MRRR	\P!49g!\P!\4'd\P!\4MR	R
\P!V4/,p\\P!V44hRpR#)rrr��5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}rr�r�r�r
�listrN)rrr)rr�rrr�r�r#r$r!r%r&r'r()r+r	r�r0rs&    r6�test_empty_on_silence�!TestFt8Sync.test_empty_on_silence�s���
�X�X�g�R�\�\�
2���,�,�r�2�w��%���A�q�I���'�4�(�(�(�(�(�(�(�(�(�z�(�(�(�(�z�(�(�(�(�(�(�(�'�(�(�(�(�'�(�(�(�(�(�(�(�4�(�(�(�(�4�(�(�(�(�(�(�(�(�(�(r9rWN)rXrYrZr[r}r�r�r�r�r\r]r^s@r6r�r�~s!����%,�#�
,�&�)�)r9r�c�Da�]tRt^�toRtRtRtRtRtRt	Rt
VtR#)	�TestFt8Messagec�
�\P!RRR4p\V\4q"'Eg9RRR\P
!49g!\P!\4'd\P!\4MRRR\P
!49g\P!V4'd\P!V4MRRR	\P
!49g!\P!\4'd\P!\4MR	R
\P!V4/,p\\P!V44hRp\V4p^
qTV8Hqf'Eg\P!RV3RWE34RR\P
!49g!\P!\4'd\P!\4MRRR\P
!49g\P!V4'd\P!V4MRR
\P!V4R\P!V4/,pRRV/,p\\P!V44hR;p;re\P!V4p	V	R,p
Rq*V8HqD'gy\P!RV3RW�34R\P!V
4R
\P!V4/,pRRV/,p\\P!V44hR;p
;rBV	R,p
Rq*V8HqD'gy\P!RV3RW�34R\P!V
4R
\P!V4/,pRRV/,p\\P!V44hR;p
;rBV	R,p
Rq*V8HqD'gy\P!RV3RW�34R\P!V
4R
\P!V4/,pRRV/,p\\P!V44hR;p
;rBV	R,p
Rq*V8HqD'gy\P!RV3RW�34R\P!V
4R
\P!V4/,pRRV/,p\\P!V44hR;p
;rBR#)�KD9ABC�W9XYZ�FN31r�rr�r�r�r
r�rNr�r�rrr�type�standard�assert %(py6)s�call_to�call_de�extrar�z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)s�z%(py1)s == %(py4)s)r�ft8_pack_standardr�r�r#r$r!r%r&r'r(r�r"�
ft8_unpack�r+r�r0rr�r3r/r4r5�msgr�s&          r6�test_pack_unpack_standard�(TestFt8Message.test_pack_unpack_standard�s����'�'��'�6�B���'�5�)�)�)�)�)�)�)�)�)�z�)�)�)�)�z�)�)�)�)�)�)�)�'�)�)�)�)�'�)�)�)�)�)�)�)�5�)�)�)�)�5�)�)�)�)�)�)�)�)�)�)��7�|�!�r�!�r�!�!�!�!�!�|�!�!�!�!�!�!�s�!�!�!�!�s�!�!�!�!�!�!�!�7�!�!�!�!�7�!�!�!�|�!�!�!�r�!�!�!�!�!�!�!�!��n�n�W�%���6�{�(�j�(�j�(�(�(�(�(�{�(�(�(�{�(�(�(�j�(�(�(�(�(�(�(�(��9�~�)��)��)�)�)�)�)�~�)�)�)�~�)�)�)��)�)�)�)�)�)�)�)��9�~�(��(��(�(�(�(�(�~�(�(�(�~�(�(�(��(�(�(�(�(�(�(�(��7�|�%�v�%�v�%�%�%�%�%�|�%�%�%�|�%�%�%�v�%�%�%�%�%�%�%�%r9c���\P!R4p\V\4q"'Eg9RRR\P
!49g!\P!\4'd\P!\4MRRR\P
!49g\P!V4'd\P!V4MRRR\P
!49g!\P!\4'd\P!\4MRR\P!V4/,p\\P!V44hR	p\V4p^
qTV8Hqf'Eg\P!RV3RWE34RR
\P
!49g!\P!\4'd\P!\4MR
RR\P
!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pR
RV/,p\\P!V44hR	;p;re\P!V4p	V	R,p
Rq*V8HqD'gy\P!RV3RW�34R\P!V
4R\P!V4/,pRRV/,p\\P!V44hR	;p
;rBV	R,p
Rq*V8HqD'gy\P!RV3RW�34R\P!V
4R\P!V4/,pRRV/,p\\P!V44hR	;p
;rBR	#)zCQ DXr�rr�r�r�r
r�rNr�r�rrrr��	free_textr��textrr�r�)r�ft8_pack_free_textr�r�r#r$r!r%r&r'r(r�r"r�r�s&          r6�test_pack_unpack_free_text�)TestFt8Message.test_pack_unpack_free_text�s����(�(��1���'�5�)�)�)�)�)�)�)�)�)�z�)�)�)�)�z�)�)�)�)�)�)�)�'�)�)�)�)�'�)�)�)�)�)�)�)�5�)�)�)�)�5�)�)�)�)�)�)�)�)�)�)��7�|�!�r�!�r�!�!�!�!�!�|�!�!�!�!�!�!�s�!�!�!�!�s�!�!�!�!�!�!�!�7�!�!�!�!�7�!�!�!�|�!�!�!�r�!�!�!�!�!�!�!�!��n�n�W�%���6�{�)�k�)�k�)�)�)�)�)�{�)�)�)�{�)�)�)�k�)�)�)�)�)�)�)�)��6�{�%�g�%�g�%�%�%�%�%�{�%�%�%�{�%�%�%�g�%�%�%�%�%�%�%�%r9c�D�\.RO4p\P!V4p\V\4q3'Eg9RRR\P
!49g!\P!\4'd\P!\4MRRR\P
!49g\P!V4'd\P!V4MRRR\P
!49g!\P!\4'd\P!\4MRR\P!V4/,p\\P!V44hR	p\V4p^
qeV8Hqw'Eg\P!RV3RWV34RR
\P
!49g!\P!\4'd\P!\4MR
RR\P
!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pR
RV/,p	\\P!V	44hR	;p;rv\P!V4p
V
R,pRq;V8HqU'gy\P!RV3RW�34R\P!V4R\P!V4/,pRRV/,p\\P!V44hR	;p;rSV
R,q�V8HqU'g�\P!RV3RW�34R\P!V4RR\P
!49g\P!V4'd\P!V4MR/,pRRV/,p
\\P!V
44hR	;r�R	#)�r�rr�r�r�r
r�rNr�r�rrrr��	telemetryr��datar�r)	r��4�V�x�������rr�r�)z%(py1)s == %(py3)s)r�r�ft8_pack_telemetryr�r#r$r!r%r&r'r(r�r"r�)r+r�r�r0rr�r3r/r4r5r�r�r�r1s&             r6�test_pack_unpack_telemetry�)TestFt8Message.test_pack_unpack_telemetry�s���K�L���(�(��.���'�5�)�)�)�)�)�)�)�)�)�z�)�)�)�)�z�)�)�)�)�)�)�)�'�)�)�)�)�'�)�)�)�)�)�)�)�5�)�)�)�)�5�)�)�)�)�)�)�)�)�)�)��7�|�!�r�!�r�!�!�!�!�!�|�!�!�!�!�!�!�s�!�!�!�!�s�!�!�!�!�!�!�!�7�!�!�!�!�7�!�!�!�|�!�!�!�r�!�!�!�!�!�!�!�!��n�n�W�%���6�{�)�k�)�k�)�)�)�)�)�{�)�)�)�{�)�)�)�k�)�)�)�)�)�)�)�)��6�{�"�d�"�"�"�"�"�{�"�"�"�{�"�"�"�"�"�"�d�"�"�"�"�d�"�"�"�"�"�"�"�"r9c�N�\P!RRR4p\V\4q"'Eg9RRR\P
!49g!\P!\4'd\P!\4MRRR\P
!49g\P!V4'd\P!V4MRRR	\P
!49g!\P!\4'd\P!\4MR	R
\P!V4/,p\\P!V44hRp\V4p^
qTV8Hqf'Eg\P!RV3RWE34RR\P
!49g!\P!\4'd\P!\4MRRR\P
!49g\P!V4'd\P!V4MRR
\P!V4R\P!V4/,pRRV/,p\\P!V44hR;p;reR#)�CQr�z+07r�rr�r�r�r
r�rNr�r�rrrrr�)
rr�r�r�r#r$r!r%r&r'r(r�r")	r+r�r0rr�r3r/r4r5s	&        r6�test_pack_standard_cq�$TestFt8Message.test_pack_standard_cq�sG���'�'��g�u�=���'�5�)�)�)�)�)�)�)�)�)�z�)�)�)�)�z�)�)�)�)�)�)�)�'�)�)�)�)�'�)�)�)�)�)�)�)�5�)�)�)�)�5�)�)�)�)�)�)�)�)�)�)��7�|�!�r�!�r�!�!�!�!�!�|�!�!�!�!�!�!�s�!�!�!�!�s�!�!�!�!�!�!�!�7�!�!�!�!�7�!�!�!�|�!�!�!�r�!�!�!�!�!�!�!�!r9c���\P!\\34;_uu_4\P
!\
^44RRR4R# +'giR#;i)�N)rNrOrPrQrr�r�r�s&r6�test_unpack_wrong_length�'TestFt8Message.test_unpack_wrong_length�s5��
�]�]�J�	�2�
3�
3��N�N�5��8�$�4�
3�
3�
3��� A�A$	c���\P!\\34;_uu_4\P
!\
^44RRR4R# +'giR#;i)�N)rNrOrPrQrrr�r�s&r6� test_pack_telemetry_wrong_length�/TestFt8Message.test_pack_telemetry_wrong_length�s7��
�]�]�J�	�2�
3�
3��"�"�5��8�,�4�
3�
3�
3�r
rWN)rXrYrZr[r�r�rrrrr\r]r^s@r6r�r��s(����&�&�#�"�
%�-�-r9r�c�&a�]tRt^�toRtRtVtR#)�TestFt8FullStackc�R�\P!RRR4p\V4p^
q2V8HqD'Eg\P!R"V3R#W#34RR\
P!49g!\P!\4'd\P!\4MRRR\
P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pR	R
V/,p\\P!V44hR;p;rC\PPV4pVPpR$qHV8Hq�'g�\P!R"V	3R%W�34RR\
P!49g\P!V4'd\P!V4MRR
\P!V4R\P!V4/,p
RRV
/,p\\P!V44hR;p;r�\P!\\ RR4pVP#V4p
V
PpR&qHV8Hq�'g�\P!R"V	3R%W�34RR\
P!49g\P!V
4'd\P!V
4MRR
\P!V4R\P!V4/,p
RRV
/,p\\P!V44hR;p;r�\P$!V
\\ R,
\ R,^^^4p\V4p^q2V8�qD'Eg\P!R'V3R(W#34RR\
P!49g!\P!\4'd\P!\4MRRR\
P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pR	R
V/,p\\P!V44hR;p;rC\PP'V^,R,4pRq/VJq�'g�\P!R)V3R*W�34RR\
P!49g\P!V4'd\P!V4MRR\P!V4/,pRRV/,p
\\P!V
44hR;r�W�8Hq�'g�\P!R"V3R+W�34RR\
P!49g\P!V4'd\P!V4MRR
R\
P!49g\P!V4'd\P!V4MR/,pRRV/,p\\P!V44hRp\P(!V4pVR,pRp	VV	8Hq"'gz\P!R"V3R,VV	34R\P!V4R\P!V	4/,pRRV/,p\\P!V44hR;p;r)VR,pRp	VV	8Hq"'gz\P!R"V3R,VV	34R\P!V4R\P!V	4/,pRRV/,p\\P!V44hR;p;r)VR ,pRp	VV	8Hq"'gz\P!R"V3R,VV	34R\P!V4R\P!V	4/,pRRV/,p\\P!V44hR;p;r)VR!,pRp	VV	8Hq"'gz\P!R"V3R,VV	34R\P!V4R\P!V	4/,pRRV/,p\\P!V44hR;p;r)R#)-r�r�r�rr�r�r�r�rrrNr-r
rrr
rrr	r�r�r�r�r�r�r�rr�r�r�r�r�r�rr�r=rrr�r�r�r�r�r�)rr�r�r!r"r#r$r%r&r'r(r{r|r rrrrr�r�r�)r+r�r�r3r/r4r5r-r.r0r1r2r,r	r�r�r�r�rr�r�s&                    r6�test_full_stack� TestFt8FullStack.test_full_stack�s����'�'��'�6�B���7�|�!�r�!�r�!�!�!�!�!�|�!�!�!�!�!�!�s�!�!�!�!�s�!�!�!�!�!�!�!�7�!�!�!�!�7�!�!�!�|�!�!�!�r�!�!�!�!�!�!�!�!����#�#�G�,���{�{�#�e�#�e�#�#�#�#�#�{�#�#�#�#�#�#�u�#�#�#�#�u�#�#�#�{�#�#�#�e�#�#�#�#�#�#�#�#��j�j��W�c�3�/��
�\�\�%�
 ���x�x�%�:�%�:�%�%�%�%�%�x�%�%�%�%�%�%�r�%�%�%�%�r�%�%�%�x�%�%�%�:�%�%�%�%�%�%�%�%��,�,�r�2�w��~�w����1�a�P���7�|��a��a������|�������s�����s��������7�����7����|����a����������l�l�.�.�w�q�z�%�/@�A��"&�&�$�&�&�&�&�&�{�&�&�&�&�&�&�{�&�&�&�&�{�&�&�&�$�&�&�&�&�&�&�&�&��%�%�%�%�%�{�%�%�%�%�%�%�{�%�%�%�%�{�%�%�%�%�%�%�%�g�%�%�%�%�g�%�%�%�%�%�%�%�%��n�n�[�)���6�{�(�j�(�{�j�(�(�(�(�(�{�j�(�(�(�{�(�(�(�j�(�(�(�(�(�(�(�(��9�~�)��)�~��)�)�)�)�)�~��)�)�)�~�)�)�)��)�)�)�)�)�)�)�)��9�~�(��(�~��(�(�(�(�(�~��(�(�(�~�(�(�(��(�(�(�(�(�(�(�(��7�|�%�v�%�|�v�%�%�%�%�%�|�v�%�%�%�|�%�%�%�v�%�%�%�%�%�%�%�%r9rWN)rXrYrZr[rr\r]r^s@r6rr�s����&�&r9r)�__doc__�builtinsr#�_pytest.assertion.rewrite�	assertion�rewriter!�numpyrrN�	orion_sdrrrr�MAX_HZr�r}rrarkr�r�r�rrWr9r6�<module>rs����
���
��
��
��
����)��A�A�B;�;�.E�E�:!�!�$)�)�L'-�'-�\&�&r9