Files
turboquant/tests/__pycache__/test_safety.cpython-312-pytest-9.0.2.pyc

49 lines
9.8 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><><EFBFBD>i<EFBFBD><00><00>6<00>dZddlZddlmcmZddlZddlZddl Z ddl
Z
ejjejje<0E>dd<04>ZdZejj#e<0F>rej$e<0F>ZGd<05>de
j&<00>ZGd<07>de
j&<00>ZGd <09>d
e
j&<00>ZGd <0B>d e
j&<00>ZGd <0A>de
j&<00>ZGd<0F>de
j&<00>Zedk(re
j6<00>yy)zj
Safety tests for TurboQuant
Tests input validation, bounds checking, constant-time behavior.
Issue: #55
<EFBFBD>Nz..zlibllama_turbo.soc<00><00>eZdZdZd<02>Zd<03>Zy)<05>TestValidationHelpersz!Test validation helper functions.c<00><><00>gd<01>}gd<02>}d<03>}|D]}|j||<04>|<04>d<04><02><00>|D]}|j||<04>|<04>d<05><02><00>y)zTest power of 2 detection.) <0A><00><00><00><00><00> <00>@<00><><00><00><00><00><00>)r<00><00><00><00><00> <00>
<00> <00> <00> <00><00><00><00>d<00><00><>c<00>&<00>|dkDxr ||dz
zdk(S)Nrr<00>)<01>ns <20>+/private/tmp/burn-tq55/tests/test_safety.py<70> is_power_of_2z?TestValidationHelpers.test_is_power_of_2.<locals>.is_power_of_2s<00><00><14>q<EFBFBD>5<EFBFBD>/<2F>a<EFBFBD>1<EFBFBD>q<EFBFBD>5<EFBFBD>k<EFBFBD>a<EFBFBD>/<2F> /<2F>z should be power of 2z should not be power of 2N<32><02>
assertTrue<EFBFBD> assertFalse)<05>self<6C>
power_of_2<EFBFBD>not_power_of_2r&r$s r%<00>test_is_power_of_2z(TestValidationHelpers.test_is_power_of_2sr<00><00>O<01>
<EFBFBD>V<><0E> 0<><1C> K<01>A<EFBFBD> <10>O<EFBFBD>O<EFBFBD>M<EFBFBD>!<21>,<2C><11><03>3H<33>.I<> J<> K<01> <20> P<01>A<EFBFBD> <10> <1C> <1C>]<5D>1<EFBFBD>-<2D>!<21><13>4M<34>/N<> O<> Pr'c<00><><00>d<01>}gd<02>}|D]}|j||<03>|<03>d<03><02><00>gd<04>}|D]}|j||<03>|<03>d<05><02><00>y)zTest dimension validation.c<00>B<00>|dkDxr||dz
zdk(xr |dk\xr|dkS)Nrrr
rr#)<01>ds r%<00> validate_dimz=TestValidationHelpers.test_validate_dim.<locals>.validate_dim)s0<00><00><15><01>E<EFBFBD>J<>q<EFBFBD>A<EFBFBD><01>E<EFBFBD>{<7B>q<EFBFBD>0<>J<>Q<EFBFBD>"<22>W<EFBFBD>J<><11>d<EFBFBD><19> Kr') r
r r r rrrrrz should be valid) rrrrr rrrr r!<00><00> <00> should be invalidNr()r+r2<00>validr1<00>invalids r%<00>test_validate_dimz'TestValidationHelpers.test_validate_dim'so<00><00> L<01>><3E><05><16> E<01>A<EFBFBD> <10>O<EFBFBD>O<EFBFBD>L<EFBFBD><11>O<EFBFBD><01>s<EFBFBD>2B<32>-C<> D<> E<01>E<01><07><18> H<01>A<EFBFBD> <10> <1C> <1C>\<5C>!<21>_<EFBFBD><11><03>3E<33>.F<> G<> Hr'N)<06>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r.r8r#r'r%rrs<00><00>+<2B>P<01> Hr'rc<00>.<00>eZdZdZd<02>Zd<03>Zd<04>Zd<05>Zd<06>Zy)<08>TestInputValidationz&Test that invalid inputs are rejected.c<00>,<00>d}|j|d<01>y)z"Null pointers should return error.<2E><><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD><01> assertEqual)r+<00>TURBO_ERR_NULL_PTRs r%<00>test_null_pointersz&TestInputValidation.test_null_pointers:s<00><00> <20><1A> <0A><18><18>+<2B>R<EFBFBD>0r'c<00>h<00>d}gd<02>}|D]'}|j||dz
zdk7xs|dk|<03>d<06><02><00>)y)z.Non-power-of-2 dimensions should return error.<2E><><EFBFBD><EFBFBD><EFBFBD>)rrrrrrrrrrrrrr r!rrr
r5N)r))r+<00>TURBO_ERR_INVALID_DIM<49> invalid_dimsr1s r%<00>test_invalid_dimensionz*TestInputValidation.test_invalid_dimensionBsJ<00><00> "<22><1D>Q<> <0C><1D> T<01>A<EFBFBD> <10>O<EFBFBD>O<EFBFBD>Q<EFBFBD>!<21>a<EFBFBD>%<25>[<5B>Q<EFBFBD>.<2E>8<>!<21>b<EFBFBD>&<26>Q<EFBFBD>C<EFBFBD>?Q<>:R<> S<> Tr'c<00>:<00>d}dD]}|j|d<03><00>y)z$Dimensions < 16 should return error.<2E><><EFBFBD><EFBFBD><EFBFBD>)rrrrr r
N)<01>
assertLess)r+<00>TURBO_ERR_DIM_TOO_SMALLr1s r%<00>test_dimension_too_smallz,TestInputValidation.test_dimension_too_smallKs%<00><00>"$<24><1F> <20> #<23>A<EFBFBD> <10>O<EFBFBD>O<EFBFBD>A<EFBFBD>r<EFBFBD> "<22> #r'c<00>:<00>d}dD]}|j|d<03><00>y)z&Dimensions > 4096 should return error.<2E><><EFBFBD><EFBFBD><EFBFBD>)r3r4i@irN<><01> assertGreater)r+<00>TURBO_ERR_DIM_TOO_LARGEr1s r%<00>test_dimension_too_largez,TestInputValidation.test_dimension_too_largeRs'<00><00>"$<24><1F>+<2B> (<28>A<EFBFBD> <10> <1E> <1E>q<EFBFBD>$<24> '<27> (r'c<00><><00>d}d<02>}td<03>td<04>td<05>ddg}|D]}|j||<04>|<04>d<08><02><00>y )
z+NaN/Inf/negative norms should return error.<2E><><EFBFBD><EFBFBD><EFBFBD>c<00>d<00>ddl}|j|<00> xr|j|<00> xr|dk\S)Nrg)<03>math<74>isnan<61>isinf)r$rXs r%<00> is_valid_normz<TestInputValidation.test_invalid_norm.<locals>.is_valid_norm]s/<00><00> <17><1B>z<EFBFBD>z<EFBFBD>!<21>}<7D>$<24>G<>T<EFBFBD>Z<EFBFBD>Z<EFBFBD><01>]<5D>):<3A>G<>q<EFBFBD>C<EFBFBD>x<EFBFBD> Gr'<00>nan<61>infz-infg<00><>g<EFBFBD><67><EFBFBD><EFBFBD>MbP<62>r5N)<02>floatr*)r+<00>TURBO_ERR_INVALID_NORMr[<00> invalid_normsr$s r%<00>test_invalid_normz%TestInputValidation.test_invalid_normYsZ<00><00>!#<23><1E> H<01><1F>u<EFBFBD><1C>u<EFBFBD>U<EFBFBD>|<7C>U<EFBFBD>6<EFBFBD>]<5D>D<EFBFBD>&<26>Q<> <0A><1E> I<01>A<EFBFBD> <10> <1C> <1C>]<5D>1<EFBFBD>-<2D>!<21><13>4F<34>/G<> H<> Ir'N) r9r:r;r<rDrIrNrTrar#r'r%r>r>7s <00><00>0<>1<>T<01>#<23>(<28>
Ir'r>c<00>"<00>eZdZdZd<02>Zd<03>Zd<04>Zy)<06>TestBufferBoundsz&Test that buffer bounds are respected.c<00>F<00>dD]}|dz}|j|dz|<01><00>y)z"Encode output should be d/2 bytes.<2E>r
r r r rrrNrA<00>r+r1<00>expected_dst_sizes r%<00>test_encode_buffer_sizez(TestBufferBounds.test_encode_buffer_sizeis1<00><00>,<2C> 7<>A<EFBFBD> !<21>Q<EFBFBD><06> <1D> <10> <1C> <1C>.<2E><11>2<>A<EFBFBD> 6<> 7r'c<00>:<00>dD]}|}|j|d<02><00>y)z!Decode output should be d floats.rerNrQrfs r%<00>test_decode_buffer_sizez(TestBufferBounds.test_decode_buffer_sizeos(<00><00>,<2C> 5<>A<EFBFBD> !<21> <1D> <10> <1E> <1E>0<>!<21> 4<> 5r'c<00><><00>td<01>D]Q}td<01>D]A}|dz|dzdzz}|dz}|dz dz}|j||<01>|j||<02><00>C<00>Sy)z"4-bit packing should not overflow.r
rrN)<02>rangerB)r+<00>i<>j<>packed<65>
unpacked_i<EFBFBD>
unpacked_js r%<00>test_packing_correctnessz)TestBufferBounds.test_packing_correctnessusw<00><00><17>r<EFBFBD><19> 0<>A<EFBFBD><1A>2<EFBFBD>Y<EFBFBD> 0<><01><1B>d<EFBFBD>(<28><01>D<EFBFBD><08>Q<EFBFBD><EFBFBD>7<><06>#<23>d<EFBFBD>]<5D>
<EFBFBD>$<24><01>k<EFBFBD>T<EFBFBD>1<>
<EFBFBD><14> <20> <20><1A>Q<EFBFBD>/<2F><14> <20> <20><1A>Q<EFBFBD>/<2F>  0<> 0r'N)r9r:r;r<rhrjrrr#r'r%rcrcfs<00><00>0<>7<> 5<> 0r'rcc<00><00>eZdZdZd<02>Zd<03>Zy)<05>TestConstantTimezTest constant-time properties.c<00>,<00>d}|j|d<01>y)z7Quantization should take same time regardless of input.r
NrA)r+<00>centroids_examineds r%<00>test_no_data_dependent_branchesz0TestConstantTime.test_no_data_dependent_branches<65>s<00><00> <20><1A> <0C><18><18>+<2B>R<EFBFBD>0r'c<00><><00>td<01>D]:}|dzrdnd}|}|j|t<00>|j|t<00><00><y)z3Packing should take same time for even/odd indices.rrrl<00><EFBFBD>N)rl<00>assertIsInstance<63>int)r+rm<00> even_mask<73>odd_masks r%<00>test_pack_timing_constantz*TestConstantTime.test_pack_timing_constant<6E>sK<00><00><17>r<EFBFBD><19> 1<>A<EFBFBD><1F>!<21>e<EFBFBD><01>*<2A>I<EFBFBD>!<21>z<EFBFBD>H<EFBFBD> <10> !<21> !<21>)<29>S<EFBFBD> 1<> <10> !<21> !<21>(<28>C<EFBFBD> 0<>  1r'N)r9r:r;r<rwr}r#r'r%rtrt<00>s<00><00>(<28> 1<>1r'rtc<00><00>eZdZdZd<02>Zy)<04>TestErrorStringszTest error string conversion.c<00>j<00>dddddddd<08>}|j<00>D]\}}|j|<03><00>y )
z3All error codes should have string representations.<2E>Successz Null pointerzDimension not power of 2zDimension too smallzDimension too largez Invalid normzBuffer overflow)rr@rFrKrPrVi<><69><EFBFBD><EFBFBD>N)<02>items<6D>assertIsNotNone)r+<00> error_codes<65>code<64>expecteds r%<00>test_error_strings_existz)TestErrorStrings.test_error_strings_exist<73>sL<00><00><19><1E>*<2A>%<25>%<25><1E>!<21>
<EFBFBD> <0B>*<2A>/<2F>/<2F>1<> +<2B>N<EFBFBD>D<EFBFBD>(<28> <10> <20> <20><18> *<2A> +r'N)r9r:r;r<r<>r#r'r%rr<00>s
<00><00>'<27>+r'rc<00><00>eZdZdZd<02>Zd<03>Zy)<05>TestSanitizerIntegrationz)Test that sanitizer flags are documented.c<00>F<00>ddg}|jt|<01>dkD<00>y)z1AddressSanitizer flags should be in build system.z-fsanitize=addressz-fno-omit-frame-pointerrN<>r)<00>len)r+<00>
asan_flagss r%<00>test_asan_flags_documentedz3TestSanitizerIntegration.test_asan_flags_documented<65>s$<00><00>+<2B>,E<>F<>
<EFBFBD> <0C><0F><0F><03>J<EFBFBD><0F>!<21>+<2B>,r'c<00>D<00>dg}|jt|<01>dkD<00>y)z6UndefinedBehaviorSanitizer flags should be documented.z-fsanitize=undefinedrNr<4E>)r+<00> ubsan_flagss r%<00>test_ubsan_flags_documentedz4TestSanitizerIntegration.test_ubsan_flags_documented<65>s <00><00>-<2D>.<2E> <0B> <0C><0F><0F><03>K<EFBFBD>(<28>1<EFBFBD>,<2C>-r'N)r9r:r;r<r<>r<>r#r'r%r<>r<><00>s<00><00>3<>-<2D> .r'r<><00>__main__)r<<00>builtins<6E> @py_builtins<6E>_pytest.assertion.rewrite<74> assertion<6F>rewrite<74>
@pytest_ar<61>ctypes<65>os<6F>sys<79>unittest<73>path<74>join<69>dirname<6D>__file__<5F>LIB_PATH<54>lib<69>exists<74>CDLL<4C>TestCaserr>rcrtrr<>r9<00>mainr#r'r%<00><module>r<>s<><00><01><04><01><00> <0A> <09>
<EFBFBD><0F> <0E>7<EFBFBD>7<EFBFBD><<3C><<3C><02><07><07><0F><0F><08>1<>4<EFBFBD>9L<39> M<><08>
<EFBFBD><03><05>7<EFBFBD>7<EFBFBD>><3E>><3E>(<28><1B>
<15>&<26>+<2B>+<2B>h<EFBFBD>
<1F>C<EFBFBD> H<01>H<EFBFBD>-<2D>-<2D> H<01>F,I<01>(<28>+<2B>+<2B>,I<01>^0<>x<EFBFBD>(<28>(<28>0<>61<>x<EFBFBD>(<28>(<28>1<>8+<2B>x<EFBFBD>(<28>(<28>+<2B>( .<2E>x<EFBFBD>0<>0<> .<2E> <0C>z<EFBFBD><19><11>H<EFBFBD>M<EFBFBD>M<EFBFBD>O<EFBFBD>r'