orion-sdr 0.0.61

Composable SDR/DSP block library targeting HF-to-EHF: analog and single-carrier digital modes, FT8/FT4, PSK31, OFDM/COFDM, and DVB-T/NB-DVB-T, with Python bindings.
Documentation
+
��pjX&c���Rt^RIt^RIHuHt^RIt^RI	t	^RI
tRt^@t
^tRRltRRRlltRRltR	R
lt!RR4t!R
R4t!RR4t!RR4tR#)aTests for the COFDM frame (MAC) layer Python bindings (Release R6).

All tests are noiseless / synthetic. They exercise the frame modulator, the
streaming frame receiver (acquisition + CFO + equalization), the batch
demodulator, and the FEC/CRC/scrambler configuration surface.
Ngp�@c�8�V^8�dQhR\P/#)��return)�np�ndarray)�formats"�;/Users/glenn/work/orion-sdr/python/tests/test_ofdm_frame.py�__annotate__rs��X�X��
�
�X�c	���\^,p\P!\\	^V44\\	V^,
)^44,\P
R7#)r��dtype)�N_FFTr�array�list�range�int32)�halfs r�_data_carriersrsB���A�:�D�
�8�8�D��q�$��(�4���q��k�1�0E�+F�F�b�h�h�W�Wr	c�(�V^8�dQhR\RR/#)r�
constellationr�sdr.OfdmConfig)�str)rs"rrrs������1A�r	c���\P!\\\	4\
P!^\
PR7\
P!^\
PR7\RRV4	#)�rgg�?)
�sdr�
OfdmConfigr
�CP_LENrr�zerosr�	complex64�FS)rs&r�_base_configr sO���>�>�
����
����"�(�(�#�
����"�,�,�'�
����
�
r	c��V^8�dQhRR/#)rrr�)rs"rrr%s����*�r	c��\4PRR4PR^4PR4P	R4#)�ldpc�n512r12�bch�crc32�crc16)r �with_inner_fec�with_outer_fec�with_payload_crc�with_header_crcr"r	r�_ldpc_bch_configr-%s9����	���	�	*�	���q�	!�	�	�'�	"�	���	!�r	c�D�V^8�dQhR\R\P/#)r�nr)�intrr)rs"rrr/s"��X�X�s�X�r�z�z�Xr	c��\P!\R\V444\PR7#)c3�N"�TFq^%,^,^�,x�K	R#5i)�%Nr")�.0�is& r�	<genexpr>�"_sample_payload.<locals>.<genexpr>0s���F�X��B����t�3�3�X�s�#%r)r�
frombuffer�bytesr�uint8)r/s&r�_sample_payloadr;/s&��
�=�=��F�U�1�X�F�F�b�h�h�W�Wr	c�8a�]tRt^8toRtRtRtRtRtVt	R#)�TestFrameConfigc�:�\4pVP4R#�N)r-�validate_frame��self�cfgs& r� test_builders_chain_and_validate�0TestFrameConfig.test_builders_chain_and_validate9s��� �����r	c���\4PR4P^	^RR7p\P!\
4;_uu_4VP
4RRR4R# +'giR#;i)�noneT)�per_frame_randomN)r �with_header_format�with_scrambler�pytest�raises�
ValueErrorr@rAs& r�+test_per_frame_seed_without_header_rejected�;TestFrameConfig.test_per_frame_seed_without_header_rejected=sS���N�
�
��
'�
�^�F�A��^�
=�	�
�]�]�:�
&�
&���� �'�
&�
&�
&�s�A)�)A:	c��\P!\4;_uu_4\4P	R4RRR4R# +'giR#;i��bogusN)rKrLrMr r)�rBs&r�test_unknown_inner_fec_rejected�/TestFrameConfig.test_unknown_inner_fec_rejectedFs0��
�]�]�:�
&�
&��N�)�)�'�2�'�
&�
&�
&���A�A	c��\P!\4;_uu_4\4P	R4RRR4R# +'giR#;i)�crc7N)rKrLrMr r+rSs&r�test_unknown_crc_rejected�)TestFrameConfig.test_unknown_crc_rejectedJs0��
�]�]�:�
&�
&��N�+�+�F�3�'�
&�
&�
&�rVr"N)
�__name__�
__module__�__qualname__�__firstlineno__rDrNrTrY�__static_attributes__�__classdictcell__��
__classdict__s@rr=r=8s�����!�3�4�4r	r=c�2a�]tRt^TtoRtRtRtRtVtR#)�TestMcsTablec	�
�\PP4pVPp^q2V8HqD'g�\P
!RV3R	W#34RR\P!49g\P!V4'd\P!V4MRR\P!V4R\P!V4/,pRRV/,p\\P!V44hR;p;rCR#)
��py0�t�py2�py5�assert %(py7)s�py7N��==�z+%(py2)s
{%(py2)s = %(py0)s.len
} == %(py5)s)r�McsTable�default_ladder�len�
@pytest_ar�_call_reprcompare�@py_builtins�locals�_should_repr_global_name�	_saferepr�AssertionError�_format_explanation�rBrh�@py_assert1�@py_assert4�@py_assert3�@py_format6�@py_format8s&      r�test_default_ladder� TestMcsTable.test_default_ladderUs����L�L�'�'�)���u�u�����z�����u�������q�����q����u������������r	c	�R�\P!4pVPRRRR^R7VPRRRR^<^R	7VPp^q2V8HqD'g�\P
!RV3RW#34R
R\P!49g\P!V4'd\P!V4MRR\P!V4R
\P!V4/,pRRV/,p\\P!V44hR;p;rCR#)�qpskr$r%r&)�
inner_kind�
inner_code�
outer_kind�outer_a�qam16�
convolutional�1/2�reed_solomon�r�r�r�r��outer_brgrhrirjrkrlNrmro)rrp�addrrrsrtrurvrwrxryrzr{s&      r�test_custom_table�TestMcsTable.test_custom_tableYs����L�L�N��	���f��I�%�YZ��[�	���g�/�e�P^�hj�tu��v��u�u�����z�����u�������q�����q����u������������r	c���\4p\P!4p\P!\
4;_uu_4\P!W4RRR4R# +'giR#;ir?)r-rrprKrLrM�OfdmFrameMod)rBrC�emptys&  r� test_empty_table_rejected_at_use�-TestMcsTable.test_empty_table_rejected_at_use_sA��� �������
�]�]�:�
&�
&����S�(�'�
&�
&�
&�s�A#�#A4	r"N)	r[r\r]r^r�r�r�r_r`ras@rrdrdTs������)�)r	rdc�Pa�]tRt^ktoRtRtRtRtRtRt	Rt
RtR	tVt
R
#)�TestFrameRoundtripc�
	�\4p\PP4p\P!W4p\^(4p\P!VR^R7pVPV4pVPp\Pq�V8Hq�'Eg\P!RV	3RWx34RR\P!49g\P!V4'd\P !V4MRR\P !V4RR\P!49g!\P!\4'd\P !\4MRR\P !V4/,p
R	R
V
/,p\#\P$!V44hR;p;r�\P&!V^^\(\*4pV\-V4Rp
\P.!W4P1V
4p\P2q~P4q�!W�4pV'Eg]RRR\P!49g!\P!\4'd\P !\4MRR\P !V4R
R\P!49g\P!V4'd\P !V4MRR\P !V4RR\P!49g\P!V4'd\P !V4MRR
\P !V4/,p\#\P$!V44hR;p;ppVP6pRq�V8Hq�'g�\P!RV	3RW34RR\P!49g\P!V4'd\P !V4MRR\P !V4R\P !V4/,pRRV/,p\#\P$!V44hR;p;r�R#)�(i4��sequence_num�	mcs_indexrg�iqri�py4r�py6�assert %(py8)s�py8N�sassert %(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.array_equal
}(%(py5)s
{%(py5)s = %(py3)s.payload
}, %(py6)s)
}�py3�gotrj�payloadrkrlrm)zL%(py2)s
{%(py2)s = %(py0)s.dtype
} == %(py6)s
{%(py6)s = %(py4)s.complex64
}�z4%(py2)s
{%(py2)s = %(py0)s.sequence_num
} == %(py5)s)r-rrprqr�r;�FramePacket�modulate_framerrrrsrtrurvrwrxryrz�generate_ofdm_preambler
rrr�OfdmFrameDemod�decode�array_equalr�r�)rBrC�table�modr��framer�r|�@py_assert5r~�@py_format7�@py_format9�preamble�bodyr�r}�@py_assert7rr�s&                  r�test_batch_ldpc_bch�&TestFrameRoundtrip.test_batch_ldpc_bchlsi��� �����+�+�-�����s�*��!�"�%������f��J��
�
�
��
&���x�x�'�2�<�<�'�<�'�'�'�'�'�x�'�'�'�'�'�'�r�'�'�'�'�r�'�'�'�x�'�'�'�'�'�'�2�'�'�'�'�2�'�'�'�<�'�'�'�'�'�'�'�'��-�-�c�1�b�%��H���#�h�-�.�!��� � ��,�3�3�D�9���~�~�3�k�k�3�~�k�3�3�3�3�3�3�3�3�3�3�r�3�3�3�3�r�3�3�3�~�3�3�3�3�3�3�c�3�3�3�3�c�3�3�3�k�3�3�3�3�3�3�7�3�3�3�3�7�3�3�3�3�3�3�3�3�3�3�3����)�6�)�6�)�)�)�)�)��)�)�)�)�)�)�s�)�)�)�)�s�)�)�)��)�)�)�6�)�)�)�)�)�)�)�)r	c���\4PRR4p\PP	4p\P
!W4p\
^(4p\P!V^�^R7pVPV4p\P!V^^\\4pV\V4Rp\P!W4PV4p	\P q�P"q�!W�4q�'Eg]RRR\$P&!49g!\(P*!\4'd\(P,!\4MRR\(P,!V
4RR	\$P&!49g\(P*!V	4'd\(P,!V	4MR	R
\(P,!V4RR\$P&!49g\(P*!V4'd\(P,!V4MRR
\(P,!V4/,p
\/\(P0!V
44hR;p
;r�R#)�scaled_min_sumg�?r�Nr�rgrrir�r�rjr�r�r�)r-�with_ldpc_decode_rulerrprqr�r;r�r�r�r
rrrr�r�rr�r�rurvrsrwrxryrz)rBrCr�r�r�r�r�r�r�r�r|r}r�r�s&             r�test_scaled_min_sum_decode_rule�2TestFrameRoundtrip.test_scaled_min_sum_decode_rule|sd��� �6�6�7G��N�����+�+�-�����s�*��!�"�%������d�a�H��
�
�
��
&���-�-�c�1�b�%��H���#�h�-�.�!��� � ��,�3�3�D�9���~�~�3�k�k�3�~�k�3�3�3�3�3�3�3�3�3�r�3�3�3�3�r�3�3�3�~�3�3�3�3�3�3�c�3�3�3�3�c�3�3�3�k�3�3�3�3�3�3�7�3�3�3�3�7�3�3�3�3�3�3�3�3�3�3�3r	c��\P!\4;_uu_4\4P	R4RRR4R# +'giR#;irQ)rKrLrMr r�rSs&r�!test_unknown_decode_rule_rejected�4TestFrameRoundtrip.test_unknown_decode_rule_rejected�s0��
�]�]�:�
&�
&��N�0�0��9�'�
&�
&�
&�rVc�
�\4p\PP4p\P!4p\P
!WVR7p\P!WVR7\^(4p\P!VR^R7pVPV4p\P!V^^\\4pV\V4Rp	\P!WVR7PV	4p
\P!W4PV	4p\ P"q�P$q�!W�4q�'Eg]RRR\&P(!49g!\*P,!\ 4'd\*P.!\ 4MRR\*P.!V4RR	\&P(!49g\*P,!V
4'd\*P.!V
4MR	R
\*P.!V
4RR\&P(!49g\*P,!V4'd\*P.!V4MRR
\*P.!V4/,p\1\*P2!V44hR;p;r�\ P"q�P$q�P$q�!W�4pV'EgsRRR\&P(!49g!\*P,!\ 4'd\*P.!\ 4MRR\*P.!V4RR\&P(!49g\*P,!V4'd\*P.!V4MRR
\*P.!V
4RR	\&P(!49g\*P,!V
4'd\*P.!V
4MR	R
\*P.!V4R\*P.!V4/,p\1\*P2!V44hR;p;p
;ppV
P4pRq�V
8HpV'g�\*P6!RV3RW�34RR	\&P(!49g\*P,!V
4'd\*P.!V
4MR	R\*P.!V4R
\*P.!V
4/,pRRV/,p\1\*P2!V44hR;p;pp
R#))�cachei�Ur�Nr�rgrrir��
got_sharedrjr�r�r�z�assert %(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.array_equal
}(%(py5)s
{%(py5)s = %(py3)s.payload
}, %(py8)s
{%(py8)s = %(py6)s.payload
})
}�got_default�py10rkrlrmr�)r-rrprq�
CodecCacher��OfdmFrameStreamDemodr;r�r�r�r
rrrr�r�rr�r�rurvrsrwrxryrzr�rt)rBrCr�r�r�r�r�r�r�r�r�r�r|r}r�r��@py_assert9�@py_format11r~rr�s&                    r�!test_shared_codec_cache_roundtrip�4TestFrameRoundtrip.test_shared_codec_cache_roundtrip�s���� �����+�+�-����� �����s��7��� � ��5�9�!�"�%������f��J��
�
�
��
&���-�-�c�1�b�%��H���#�h�-�.�!���'�'��%�@�G�G��M�
��(�(��4�;�;�D�A���~�~�:�0�0�:�~�0�:�:�:�:�:�:�:�:�:�r�:�:�:�:�r�:�:�:�~�:�:�:�:�:�:�j�:�:�:�:�j�:�:�:�0�:�:�:�:�:�:�'�:�:�:�:�'�:�:�:�:�:�:�:�:�:�:��~�~�F�1�1�F�3E�3E�F�~�1�F�F�F�F�F�F�F�F�F�F�r�F�F�F�F�r�F�F�F�~�F�F�F�F�F�F�k�F�F�F�F�k�F�F�F�1�F�F�F�F�F�F�:�F�F�F�F�:�F�F�F�3E�F�F�F�F�F�F�F�F�F�F�F��&�&�0�&�0�&�0�0�0�0�0�&�0�0�0�0�0�0�z�0�0�0�0�z�0�0�0�&�0�0�0�&�0�0�0�0�0�0�0�0r	c��\4p\PP4p\P!W4p\^(4p\P!V^*^R7pVPV4p\P!\P!^e\PR7V\P!^@\PR7.4p\P!W4pVPV4p	\V	4p
^q�V8Hq�'Eg\P !RV3RW�34RR\"P$!49g!\P&!\4'd\P(!\4MRRR\"P$!49g\P&!V	4'd\P(!V	4MRR\P(!V
4R\P(!V4/,p
R	R
V
/,p\+\P,!V44hR;p
;r�\P.q�^,pVP0q�!W�4pV'Eg%RRR
\"P$!49g!\P&!\4'd\P(!\4MR
R\P(!V4R\P(!V4R\P(!V4RR\"P$!49g\P&!V4'd\P(!V4MRR\P(!V4/,p\+\P,!V44hR;p;p;ppV	^,pVP2p
^*q�V8Hq�'g�\P !RV3RW�34R\P(!V4R\P(!V
4R\P(!V4/,p
R	R
V
/,p\+\P,!V44hR;p;p
;r�R#)r�r�rrgrr�py1�framesr�r�r�r�N�sassert %(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.array_equal
}(%(py6)s
{%(py6)s = %(py4)s.payload
}, %(py7)s)
}rrir�rlr��py9rm�z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)s)z4%(py3)s
{%(py3)s = %(py1)s.sequence_num
} == %(py6)s)r-rrprqr�r;r�r�r�concatenaterrr��feedrrrsrtrurvrwrxryrzr�r�r�)rBrCr�r�r�r�r��buf�rxr��@py_assert2r�r}r�r�r|r~�@py_assert8�@py_format10�@py_assert0s&                   r�test_stream_unknown_start�,TestFrameRoundtrip.test_stream_unknown_start�s`��� �����+�+�-�����s�*��!�"�%������b�A�F��
�
�
��
&���n�n�
�X�X�c����
.��B�H�H�R�r�|�|�4T�U�
���
%�
%�c�
1���������6�{��a��a������{�������s�����s��������6�����6����{����a����������~�~�9�Q�i�9�i�/�/�9�~�/�9�9�9�9�9�9�9�9�9�9�r�9�9�9�9�r�9�9�9�~�9�9�9�i�9�9�9�/�9�9�9�9�9�9��9�9�9�9��9�9�9�9�9�9�9�9�9�9�9��a�y�+�y�%�%�+��+��+�+�+�+�+�%�+�+�+�y�+�+�+�%�+�+�+��+�+�+�+�+�+�+�+r	c��\4p\PP4p\P!W4p\^4p\^ 4pVP
\P!V^R74pVP
\P!V^R74p\P!\P!^(\PR7Wg\P!^@\PR7.4p\P!W4p	V	PV4p
\V
4p^q�V8Hq�'Eg\P !RV
3RW�34RR\"P$!49g!\P&!\4'd\P(!\4MRRR\"P$!49g\P&!V
4'd\P(!V
4MRR\P(!V4R\P(!V4/,pR	R
V/,p\+\P,!V44hR;p;r�\P.pV
^,pVP0pV!W�4pV'Eg%RRR
\"P$!49g!\P&!\4'd\P(!\4MR
R\P(!V4R\P(!V4R\P(!V4RR\"P$!49g\P&!V4'd\P(!V4MRR\P(!V4/,p\+\P,!V44hR;p;p;pp\P.pV
^,pVP0pV!W�4pV'Eg%RRR
\"P$!49g!\P&!\4'd\P(!\4MR
R\P(!V4R\P(!V4R\P(!V4RR\"P$!49g\P&!V4'd\P(!V4MRR\P(!V4/,p\+\P,!V44hR;p;p;ppV
^,P2V
^,P23pRpVV8Hq�'gz\P !RV3RVV34R\P(!V4R\P(!V4/,pRRV/,p\+\P,!V44hR;p;ppR#)�)r�rrgrrr�r�r�r�r�r�Nr�rrir�rl�p0r��p1zassert %(py6)srmr�)�r)z%(py1)s == %(py4)s)r-rrprqr�r;r�r�rr�rrr�r�rrrsrtrurvrwrxryrzr�r�r�)rBrCr�r�r�r��iq0�iq1r�r�r�r�r�r}r�r�r|r~r�r�r��@py_format5s&                     r�test_stream_back_to_back�+TestFrameRoundtrip.test_stream_back_to_back�s:��� �����+�+�-�����s�*��
�R�
 ��
�R�
 ��� � �����!�!D�E��� � �����!�!D�E���n�n�
�X�X�b����
-�s����"�B�L�L�9Y�Z�
���
%�
%�c�
1���������6�{��a��a������{�������s�����s��������6�����6����{����a����������~�~�4�f�Q�i�4�i�/�/�4�~�/�4�4�4�4�4�4�4�4�4�4�r�4�4�4�4�r�4�4�4�~�4�4�4�i�4�4�4�/�4�4�4�4�4�4��4�4�4�4��4�4�4�4�4�4�4�4�4�4�4��~�~�4�f�Q�i�4�i�/�/�4�~�/�4�4�4�4�4�4�4�4�4�4�r�4�4�4�4�r�4�4�4�~�4�4�4�i�4�4�4�/�4�4�4�4�4�4��4�4�4�4��4�4�4�4�4�4�4�4�4�4�4��q�	�&�&��q�	�(>�(>�?�I�6�I�?�6�I�I�I�I�I�?�6�I�I�I�?�I�I�I�6�I�I�I�I�I�I�I�Ir	c�j�\4PR4p\P!4pVP	RRRR^<^R7\P
!W4p\
^(4p\P!V^d^R7pVPV4p\P!W4p\P!\P!^\PR7V\P!^@\PR7.4pVPV4p	\V	4p
^q�V8Hq�'Eg\ P"!RV3RW�34RR	\$P&!49g!\ P(!\4'd\ P*!\4MR	R
R\$P&!49g\ P(!V	4'd\ P*!V	4MRR\ P*!V
4R
\ P*!V4/,p
RRV
/,p\-\ P.!V44hR;p
;r�\P0q�^,pVP2q�!W�4pV'Eg%RRR\$P&!49g!\ P(!\4'd\ P*!\4MRR\ P*!V4R\ P*!V4R
\ P*!V4RR\$P&!49g\ P(!V4'd\ P*!V4MRR\ P*!V4/,p\-\ P.!V44hR;p;p;ppR#)r'r�r�r�r�r�r�rrgrrr�r�r�r�r�r�Nr�rrir�rlr�r�rmr�)r r+rrpr�r�r;r�r�r�rr�rrr�rrrsrtrurvrwrxryrzr�r�)rBrCr�r�r�r�r�r�r�r�r�r�r}r�r�r|r~r�r�s&                  r�test_rs_convolutional�(TestFrameRoundtrip.test_rs_convolutional�s#���N�
�
�g�
&�	������
�	�	��&��%���
	�	
����s�*��!�"�%������c�Q�G��
�
�
��
&��
�
%�
%�c�
1���n�n�b�h�h�r����>��B�H�H�R�WY�Wc�Wc�Dd�e�f���������6�{��a��a������{�������s�����s��������6�����6����{����a����������~�~�9�Q�i�9�i�/�/�9�~�/�9�9�9�9�9�9�9�9�9�9�r�9�9�9�9�r�9�9�9�~�9�9�9�i�9�9�9�/�9�9�9�9�9�9��9�9�9�9��9�9�9�9�9�9�9�9�9�9�9r	c	���\4p\PP4p\P!W4p\P
!\
^(4^^R7pVPV4p\P!\P!^\PR7V\P!^@\PR7.4p\P!V^^\\4p^\V4,^VP ,,pR
WhVR,,WhVR,%\P"!W4p	V	P%V4p
RV
4p\'V4q�'g�RRR\(P*!49g!\,P.!\&4'd\,P0!\&4MRR\,P0!V4R	\,P0!V4/,p
\3\,P4!V
44hR
;r�RV
4p\7V4q�'g�RRR\(P*!49g!\,P.!\64'd\,P0!\64MRR\,P0!V4R	\,P0!V4/,p
\3\,P4!V
44hR
;r�R
#)r�r�ri�c3�."�TFwrVRJx�K
	R#5ir?r")r4�f�_es&  rr6�NTestFrameRoundtrip.test_feed_with_errors_reports_corruption.<locals>.<genexpr>�s���4�G��!�1��9�G���z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}rg�allrir�Nc3�."�TFwrVRJx�K
	R#5ir?r")r4�_f�es&  rr6r��s���8��W�b�1�D�=��r��anyg�)r-rrprqr�r�r;r�rr�rrr�r
rrr�samples_per_ofdm_symbolr��feed_with_errorsr�rurvrsrwrxryrzr�)rBrCr�r�r�r�r�r��startr��resultsr|r~r�s&             r�(test_feed_with_errors_reports_corruption�;TestFrameRoundtrip.test_feed_with_errors_reports_corruption�s���� �����+�+�-�����s�*������� 3�!�q�Q��
�
�
��
&���n�n�b�h�h�r����>��B�H�H�R�WY�Wc�Wc�Dd�e�f���-�-�c�1�b�%��H���S��]�"�R�#�*E�*E�%E�E��#'�#�e�c�k�*B�#B��E�C�K� �
�
%�
%�c�
1���%�%�c�*��4�G�4�4�s�4�4�4�4�4�4�4�4�4�4�s�4�4�4�4�s�4�4�4�4�4�4�4�4�4�4�4�4�4�4�8��8�8�s�8�8�8�8�8�8�8�8�8�8�s�8�8�8�8�s�8�8�8�8�8�8�8�8�8�8�8�8�8�8r	r"N)r[r\r]r^r�r�r�r�r�r�r�r�r_r`ras@rr�r�ks3����*� 4�:�1�2,�"J�$:�09�9r	r�c�&a�]tRt^�toRtRtVtR#)�
TestScramblerc��REF�p\4P^	^^VR7p\PP	4p\P
!W#4p\
^4p\P!V^^R7pVPV4p\P!W#4p\P!\P!^\PR7V\P!^@\PR7.4p	VPV	4p
\V
4p^q�V8Hq�'Eg;\ P"!RV
3RW�34RR\$P&!49g!\ P(!\4'd\ P*!\4MRRR\$P&!49g\ P(!V
4'd\ P*!V
4MRR\ P*!V4R	\ P*!V4/,p\ P,!R
V24R,RV/,p\/\ P0!V44hR
;p;r�\P2pV
^,pVP4pV!W�4pV'Eg%RRR\$P&!49g!\ P(!\4'd\ P*!\4MRR\ P*!V4R\ P*!V4R	\ P*!V4RR\$P&!49g\ P(!V4'd\ P*!V4MRR\ P*!V4/,p\/\ P0!V44hR
;p;p;ppEK�	R
#)�before_outer)�seed�positionr�rrgrrr�r�r�r�zscrambler pos z
>assert %(py8)sr�Nr�rrir�rlr�r�)r��after_innerrmr�)r-rJrrprqr�r;r�r�r�rr�rrr�rrrsrtrurvrwrx�_format_assertmsgryrzr�r�)rB�posrCr�r�r�r�r�r�r�r�r�r�r}r�r�r|r~r�r�s&                   r�test_scrambler_round_trips�(TestScrambler.test_scrambler_round_trips�s/��2�C� �"������s��C�
��L�L�/�/�1�E��"�"�3�.�C�%�b�)�G��O�O�G�!�q�I�E��#�#�E�*�B��)�)�#�5�B��.�.�"�(�(�2�R�\�\�"B�B����QS�[]�[g�[g�Hh�!i�j�C��W�W�S�\�F��v�;�;�!�;�!�#�;�;�;�;�;�;�;�;�;�;�;�3�;�;�;�;�3�;�;�;�;�;�;�;�v�;�;�;�;�v�;�;�;�;�;�;�;�!�;�;�;�;�~�c�U�%;�;�;�;�;�;�;�;�;��>�>�=�&��)�=�)�"3�"3�=�>�"3�=�=�=�=�=�=�=�=�=�=�2�=�=�=�=�2�=�=�=�>�=�=�=�)�=�=�=�"3�=�=�=�=�=�=�W�=�=�=�=�W�=�=�=�=�=�=�=�=�=�=�=�3r	r"N)r[r\r]r^rr_r`ras@rr�r��s����>�>r	r�)�bpsk)�__doc__�builtinsru�_pytest.assertion.rewrite�	assertion�rewriters�numpyrrK�	orion_sdrrrr
rrr r-r;r=rdr�r�r"r	r�<module>r
sj������
��
��
��	
��X�
��X�4�4�8)�)�.E9�E9�P>�>r