a zet@sddZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZddlmZddl m Z ddlZddZdd Zd d ZdzddZGdddZe jddgdZe jddgdZGddde jZGddde jZGddde jZGddde jZGddde jZGd d!d!e jZ Gd"d#d#e jZ!Gd$d%d%e jZ"Gd&d'd'e jZ#Gd(d)d)e jZ$Gd*d+d+e jZ%Gd,d-d-e jZ&Gd.d/d/e jZ'Gd0d1d1e jZ(Gd2d3d3e jZ)Gd4d5d5e jZ*Gd6d7d7e jZ+Gd8d9d9e jZ,Gd:d;d;e jZ-Gdd?d?e jZ/Gd@dAdAZ0GdBdCdCZ1GdDdEdEe0e1Z2GdFdGdGeZ3GdHdIdIeZ4GdJdKdKeZ5GdLdMdMe0Z6GdNdOdOee6e1Z7GdPdQdQee6e1Z8GdRdSdSee6Z9GdTdUdUee1Z:GdVdWdWe9e1Z;GdXdYdYe9e1ZGd^d_d_e jZ?Gd`dadae jZ@Gdbdcdce0ZAGdddedeeAee1ZBGdfdgdgeAee1ZCGdhdidieAeZDGdjdkdkeAeZEGdldmdme jZFGdndodoe jZGGdpdqdqZHGdrdsdse jeHZIe JedtGdudvdve jeHZKdwdxZLeMdykr`e NdS){z_Test suite for statistics module, including helper NumericTestCase and approx_equal function. N)support)DecimalFractioncCs td|S)z:Return -1.0 for negatives, including -0.0, otherwise +1.0.)mathcopysignxr H/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_statistics.pysignsr cCsZt|t|urdSt|tr2t|o0t|S|d}|d}||koX|dvS)aReturn True if a and b are both the same kind of NAN. >>> _nan_equal(Decimal('NAN'), Decimal('NAN')) True >>> _nan_equal(Decimal('sNAN'), Decimal('sNAN')) True >>> _nan_equal(Decimal('NAN'), Decimal('sNAN')) False >>> _nan_equal(Decimal(42), Decimal('NAN')) False >>> _nan_equal(float('NAN'), float('NAN')) True >>> _nan_equal(float('NAN'), 0.5) False >>> _nan_equal(float('NAN'), Decimal('NAN')) False NAN payloads are not compared. F)nN)type isinstancefloatrisnanZas_tuple)abZaexpZbexpr r r _nan_equal"s   rcCs:tt|t|}t||}|r*||ntd}||fS)zReturn the absolute and relative errors between two numbers. >>> _calc_errors(100, 75) (25, 0.25) >>> _calc_errors(100, 100) (0, 0.0) Returns the (absolute error, relative error) between the two arguments. inf)maxabsr)actualexpectedbaseabs_errrel_errr r r _calc_errorsAs  r -q=Hz>cCs|dks|dkrtdt|s,t|r0dS||kr True|False Return True if numbers x and y are approximately equal, to within some margin of error, otherwise return False. Numbers which compare equal will also compare approximately equal. x is approximately equal to y if the difference between them is less than an absolute error tol or a relative error rel, whichever is bigger. If given, both tol and rel must be finite, non-negative numbers. If not given, default values are tol=1e-12 and rel=1e-7. >>> approx_equal(1.2589, 1.2587, tol=0.0003, rel=0) True >>> approx_equal(1.2589, 1.2587, tol=0.0001, rel=0) False Absolute error is defined as abs(x-y); if that is less than or equal to tol, x and y are considered approximately equal. Relative error is defined as abs((x-y)/x) or abs((x-y)/y), whichever is smaller, provided x or y are not zero. If that figure is less than or equal to rel, x and y are considered approximately equal. Complex numbers are not directly supported. If you wish to compare to complex numbers, extract their real and imaginary parts and compare them individually. NANs always compare unequal, even with themselves. Infinities compare approximately equal if they have the same sign (both positive or both negative). Infinities with different signs compare unequal; so do comparisons of infinities with finite numbers. rz%error tolerances must be non-negativeFT) ValueErrorrrisinfrr)r ytolrelZ actual_errorZ allowed_errorr r r approx_equalQs" r(c@seZdZdZdS) _DoNothinga When doing numeric work, especially with floats, exact equality is often not what you want. Due to round-off error, it is often a bad idea to try to compare floats with equality. Instead the usual procedure is to test them with some (hopefully small!) allowance for error. The ``approx_equal`` function allows you to specify either an absolute error tolerance, or a relative error, or both. Absolute error tolerances are simple, but you need to know the magnitude of the quantities being compared: >>> approx_equal(12.345, 12.346, tol=1e-3) True >>> approx_equal(12.345e6, 12.346e6, tol=1e-3) # tol is too small. False Relative errors are more suitable when the values you are comparing can vary in magnitude: >>> approx_equal(12.345, 12.346, rel=1e-4) True >>> approx_equal(12.345e6, 12.346e6, rel=1e-4) True but a naive implementation of relative error testing can run into trouble around zero. If you supply both an absolute tolerance and a relative error, the comparison succeeds if either individual test succeeds: >>> approx_equal(12.345e6, 12.346e6, tol=1e-3, rel=1e-4) True N)__name__ __module__ __qualname____doc__r r r r r)s#r) statistics _statistics)Zblocked)Zfreshc@s.eZdZdgZddZeedddZdS) TestModulesZ_normal_dist_inv_cdfcCs$|jD]}|tt|jdqdSNr.) func_names assertEqualgetattr py_statisticsr+selfZfnamer r r test_py_functionss zTestModules.test_py_functionsrequires _statisticscCs$|jD]}|tt|jdqdS)Nr/)r2r3r4 c_statisticsr+r6r r r test_c_functionss zTestModules.test_c_functionsN) r*r+r,r2r8unittest skipUnlessr:r;r r r r r0s r0c@s@eZdZdZdZZd ddZddZd dd Ze d d Z dS)NumericTestCasezUnit test class for numeric work. This subclasses TestCase. In addition to the standard method ``TestCase.assertAlmostEqual``, ``assertApproxEqual`` is provided. rNcCsZ|dur|j}|dur|j}t|tjjr@t|tjjr@|j}n|j}||||||dS)aTest passes if ``first`` and ``second`` are approximately equal. This test passes if ``first`` and ``second`` are equal to within ``tol``, an absolute error, or ``rel``, a relative error. If either ``tol`` or ``rel`` are None or not given, they default to test attributes of the same name (by default, 0). The objects may be either numbers, or sequences of numbers. Sequences are tested element-by-element. >>> class MyTest(NumericTestCase): ... def test_number(self): ... x = 1.0/6 ... y = sum([x]*6) ... self.assertApproxEqual(y, 1.0, tol=1e-15) ... def test_sequence(self): ... a = [1.001, 1.001e-10, 1.001e10] ... b = [1.0, 1e-10, 1e10] ... self.assertApproxEqual(a, b, rel=1e-3) ... >>> import unittest >>> from io import StringIO # Suppress test runner output. >>> suite = unittest.TestLoader().loadTestsFromTestCase(MyTest) >>> unittest.TextTestRunner(stream=StringIO()).run(suite) N)r&r'r collectionsabcSequence_check_approx_seq_check_approx_num)r7firstsecondr&r'msgcheckr r r assertApproxEquals  z!NumericTestCase.assertApproxEqualc Csnt|t|kr:dt|t|f}|||}||tt||D] \}\}} ||| ||||qHdS)Nz0sequences differ in length: %d items != %d items)len_formatMessagefailureException enumerateziprC) r7rDrEr&r'rF standardMsgirer r r rBs  z!NumericTestCase._check_approx_seqcCs>t||||rdS||||||}|||}||dSN)r(_make_std_err_msgrJrK)r7rDrEr&r'rFidxrNr r r rCs  z!NumericTestCase._check_approx_numc CsJ||ks Jd}|dur(d|}||}t||\}}|||||||fS)Nzk %r != %r values differ by more than tol=%r and rel=%r -> absolute error = %r -> relative error = %rz,numeric sequences first differ at index %d. )r ) rDrEr&r'rStemplateheaderrrr r r rRs z!NumericTestCase._make_std_err_msg)NNN)N) r*r+r,r-r&r'rHrBrC staticmethodrRr r r r r>s , r>c@seZdZdZddZdS)TestSignz5Test that the helper function sign() works correctly.cCs$|tdd|tdddS)Nrg)r3r r7r r r testZeroes(szTestSign.testZeroesN)r*r+r,r-r[r r r r rW&srWc@s,eZdZddZddZddZddZd S) ApproxEqualSymmetryTestcCshdddtdtddg}ddd td td dg}t|t|ksDJt||D]\}}|||qNdS) Ni gfffffB@gfffff(z2.546i gB@gR(z2.59)rrrIrMdo_relative_symmetry)r7Zargs1Zargs2rrr r r test_relative_symmetry3s z.ApproxEqualSymmetryTest.test_relative_symmetrycCst||t||}}||ks"J||}t||t||}}||d}|t||d|d|t||d|ddS)Nrrr&r')minrr assertTruer()r7rrdeltaZrel_err1Zrel_err2r'r r r r`Cs  z,ApproxEqualSymmetryTest.do_relative_symmetrycCsgd}d}|D]}ttttfD]}||d}||}t|t||}|j||||d|j|||dd|d|j|||d|dd|j||||dd|j|||d|d|j|||dd|d|j||ddd|j||dddq qdS)N)kimrdrbrr)intrrrrrdo_symmetry_test)r7argsrertype_r r%rr r r test_symmetryOs z%ApproxEqualSymmetryTest.test_symmetryc Cs@d}t||||}t||||}||||||||fdS)Nz+approx_equal comparisons don't match for %r)r(r3format)r7rrr&r'rTZflag1Zflag2r r r rlgsz(ApproxEqualSymmetryTest.do_symmetry_testN)r*r+r,rar`rprlr r r r r\0s r\c@sTeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)ApproxEqualExactTestcCsJt||||d}||d|t| | ||d}||d| dS)Nrbzequality failure for x=%r)r(rd)r7r r&r'resultr r r do_exactly_equal_testtsz*ApproxEqualExactTest.do_exactly_equal_testcCsdD]}||ddqdS)N)*iMi~:iiU irrtr7rr r r test_exactly_equal_intszsz,ApproxEqualExactTest.test_exactly_equal_intscCsdD]}||ddqdS)N)gzG?g/$?ge@g7@gpf@g!rhQ@gB`"KB@rrwr7r r r r test_exactly_equal_floatssz.ApproxEqualExactTest.test_exactly_equal_floatscCsNt}|dd|d|dd|dd|dd |ddfD]}||ddq6dS) Nrrrrh #$)rrtr7Ffr r r test_exactly_equal_fractionss6z1ApproxEqualExactTest.test_exactly_equal_fractionscCs*t}t|dD]}||ddqdS)Nz8.2 31.274 912.04 16.745 1.2047r)rmapsplitrt)r7Ddr r r test_exactly_equal_decimalssz0ApproxEqualExactTest.test_exactly_equal_decimalscCsFdD]<}||dd||dddt|d}||ddqdS)N)ii\ii{Gz?r i)rtr)r7rrr r r test_exactly_equal_absolutes  z0ApproxEqualExactTest.test_exactly_equal_absolutecCs2|tdtdd|td tdddS)Nz3.5710.01rz81.3971)rtrrZr r r $test_exactly_equal_absolute_decimalssz9ApproxEqualExactTest.test_exactly_equal_absolute_decimalscCs@dddtddfD]}||ddq|tddtd dS) Ni g33333SY@gzGrhrrz11.68rrrtrrzr r r test_exactly_equal_relativesz0ApproxEqualExactTest.test_exactly_equal_relativecCsHdddtddfD]}||ddqt}||d|d |d dS) Ni9gˡE0@g\(hr|皙?rz7.2z0.1rr)r7r rr r r test_exactly_equal_bothsz,ApproxEqualExactTest.test_exactly_equal_bothN) r*r+r,rtryr{rrrrrrr r r r rrns rrc@s4eZdZddZddZddZddZd d Zd S) ApproxEqualUnequalTestcCs8|| fD](}t||dddd}||d|q dS)Nrrrbzinequality failure for x=%r)r( assertFalse)r7r rrsr r r do_exactly_unequal_testsz.ApproxEqualUnequalTest.do_exactly_unequal_testcCsdD]}||qdS)N)iiiiiXCrrxr r r test_exactly_unequal_intssz0ApproxEqualUnequalTest.test_exactly_unequal_intscCsdD]}||qdS)N)gQ#@g [@gfffffG@gףp= W"@g= ףp=1@rrzr r r test_exactly_unequal_floatssz2ApproxEqualUnequalTest.test_exactly_unequal_floatscCs<t}|dd|dd|dd|ddfD]}||q(dS) Nrrhr~r} eiς)rrrr r r test_exactly_unequal_fractionss(z5ApproxEqualUnequalTest.test_exactly_unequal_fractionscCs"ttdD]}||qdS)Nz!3.1415 298.12 3.47 18.996 0.00245)rrrrr7rr r r test_exactly_unequal_decimalssz4ApproxEqualUnequalTest.test_exactly_unequal_decimalsN)r*r+r,rrrrrr r r r rs rc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!S)"ApproxEqualInexactTestc Csbd}||||fD]H}|||}|t||d|dd||t|||ddd|qdS)NTest failure for x={!r}, y={!r}rrrbrqrdr(rr7r rerTr%rFr r r do_approx_equal_abs_tests  z/ApproxEqualInexactTest.do_approx_equal_abs_testcCs&dD]}||d||dqdS)N) iiIirgrrr}%ii&i6jrrrrxr r r test_approx_equal_absolute_intss z6ApproxEqualInexactTest.test_approx_equal_absolute_intscCs2dD](}||d||d||dqdS)N) gtqgfffffFXg333333 g333333??g333333@gQ@gҭ@?r-C6?rrzr r r !test_approx_equal_absolute_floatss  z8ApproxEqualInexactTest.test_approx_equal_absolute_floatscCsFtdd}gd}dd|DD] }|||||t|q dS)Nr) irgrYrrrhr]"Gcss|]}t|dVqdS)rNr).0rr r r zNApproxEqualInexactTest.test_approx_equal_absolute_fractions..)rrr)r7re numeratorsrr r r $test_approx_equal_absolute_fractionss   z;ApproxEqualInexactTest.test_approx_equal_absolute_fractionscCs:td}ttdD]}||||| |qdS)Nrz1.0 3.5 36.08 61.79 7912.3648)rrrr)r7rerr r r #test_approx_equal_absolute_decimalss z:ApproxEqualInexactTest.test_approx_equal_absolute_decimalscCs|tddddddS)Ngh㈵>gh㈵rrrb)rdr(rZr r r test_cross_zerosz&ApproxEqualInexactTest.test_cross_zeroc Csjd}|d||d|fD]H}|||}|t||dd|d||t||d|dd|qdS)Nrrrrrbrrr r r do_approx_equal_rel_tests  z/ApproxEqualInexactTest.do_approx_equal_rel_testcCsr|tddddd|tddddd|tdddd d|td ddd d|td ddd ddS) N@/rg ףp= ?rbgGz?ii?ii)rdr(rrZr r r test_approx_equal_relative_intss z6ApproxEqualInexactTest.test_approx_equal_relative_intscCs&dD]}||d||dqdS)N)g{GJf皙rrg\(|B@gʡE>@gx@{Gz?r)rrzr r r !test_approx_equal_relative_floats s z8ApproxEqualInexactTest.test_approx_equal_relative_floatscCsht}tdd}|dd|dd|dd|dd fD]0}|t|fD]}||||| |qBq2dS) Nr|rTr]12\U)rrr)r7rrerrr r r $test_approx_equal_relative_fractionss  ( z;ApproxEqualInexactTest.test_approx_equal_relative_fractionscCs:ttdD]&}||td|| tdqdS)Nz$0.02 1.0 5.7 13.67 94.138 91027.93210.0010.05)rrrrrr r r #test_approx_equal_relative_decimalssz:ApproxEqualInexactTest.test_approx_equal_relative_decimalscCst|r |jn|j}|t|||dd|r.|jn|j}|t||d|d|sP|rV|jn|j}|t||||ddS)Nrrb)rdrr()r7rrr&r'Ztol_flagZrel_flagrGr r r do_check_both)s z$ApproxEqualInexactTest.do_check_bothcCs,|dddddd|dddd dddS) NR@+@Mbp? W8?Tg?5^Ig%CMb`?g-C6*?rrZr r r test_approx_equal_both11sz.ApproxEqualInexactTest.test_approx_equal_both1cCs|dddddddS)NrrrgVF?8?TFrrZr r r test_approx_equal_both26sz.ApproxEqualInexactTest.test_approx_equal_both2cCs|dddddddS)NrrMbP?rFTrrZr r r test_approx_equal_both3:sz.ApproxEqualInexactTest.test_approx_equal_both3cCs,|dddddd|dddd dddS) Ng= ףp=@@rrFgQ[@g(\[@rgiUMu>rrZr r r test_approx_equal_both4>sz.ApproxEqualInexactTest.test_approx_equal_both4N)r*r+r,rrrrrrrrrrrrrrrrr r r r rs   rc@s,eZdZddZddZddZddZd S) ApproxEqualSpecialsTestcCsttfD]z}|d}|t|||t||dd|t||dd|t| | |t|| |t|dqdS)Nrrrr)rrrdr(r)r7rnrr r r test_infGs z ApproxEqualSpecialsTest.test_infcCs>ttfD]0}|d}||ddfD]}|t||q"qdS)Nnanrr)rrrr()r7rnrotherr r r test_nanQs z ApproxEqualSpecialsTest.test_nancCs&tdd}|t|dddddS)NrXrYrrb)rrrdr(r7Znzeror r r test_float_zeroesWs z)ApproxEqualSpecialsTest.test_float_zeroescCs&td}|t|tdddddS)Nz-0.0rrrb)rrdr(rr r r test_decimal_zeroes[sz+ApproxEqualSpecialsTest.test_decimal_zeroesN)r*r+r,rrrrr r r r rDs rc@seZdZddZddZdS)TestApproxEqualErrorscCs|ttdddddS)NrjrYr assertRaisesr#r(rZr r r test_bad_tolcsz"TestApproxEqualErrors.test_bad_tolcCs|ttdddddS)NrjrrrrZr r r test_bad_relgsz"TestApproxEqualErrors.test_bad_relN)r*r+r,rrr r r r r`src@s4eZdZddZddZddZddZd d Zd S) TestNumericTestCasecCs.tj|}|j|}|D]}|||qdSrQ)r>rRgenerate_substringsZassertIn)r7rmZ actual_msgrZ substringr r r do_testws  zTestNumericTestCase.do_testcCs|tttjdSrQ)rd issubclassr>r<TestCaserZr r r test_numerictestcase_is_testcase}sz4TestNumericTestCase.test_numerictestcase_is_testcasecCsd}||dS)N)@@r?Nrr7rmr r r test_error_msg_numericsz*TestNumericTestCase.test_error_msg_numericcCsd}||dS)N)@g @g?rr~rrr r r test_error_msg_sequencesz+TestNumericTestCase.test_error_msg_sequencec CsDt||\}}d|d|d|d|g}|dur@|d||S)z5Return substrings we expect to see in error messages.ztol=%rzrel=%rzabsolute error = %rzrelative error = %rNzdiffer at index %d)r append) r7rDrEr&r'rSrrZ substringsr r r rsz'TestNumericTestCase.generate_substringsN)r*r+r,rrrrrr r r r rqs rc@s(eZdZeZddgZddZddZdS) GlobalsTestr-__all__cCs(|jD]}|t|j|d|qdS)Nz%s not present)expected_metadatardhasattrmodule)r7metar r r test_metas zGlobalsTest.test_metacCsB|j}|jD]0}||dd||t||d|q dS)N_zprivate name "%s" in __all__zmissing name "%s" in __all__)rrr startswithrdr)r7rnamer r r test_check_alls   zGlobalsTest.test_check_allN)r*r+r,r.rrrrr r r r rsrc@s(eZdZeejjdkdddZdS)DocTestsrz)Docstrings are omitted with -OO and abovecCs0tjttjd\}}||d||ddS)N)Z optionflagsr)doctesttestmodr.ELLIPSIS assertGreaterr3)r7ZfailedZtriedr r r test_doc_testss zDocTests.test_doc_testsN) r*r+r,r<ZskipIfsysflagsoptimizerr r r r rsrc@seZdZddZdS)StatisticsErrorTestcCs4d}|ttd|ttjt|tjjdS)NzNExpected StatisticsError to be a ValueError, but got a subclass of %r instead.StatisticsError)rdrr.rr r#__base__)r7errmsgr r r test_has_exceptions  z&StatisticsErrorTest.test_has_exceptionN)r*r+r,rr r r r r sr c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)ExactRatioTestcCs$dD]}|t||dfqdS)N)irrhcl Fx:^Vr)r3r. _exact_ratio)r7rOr r r test_intszExactRatioTest.test_intcCs2d}|D]$}t|d}|t||dfqdS)N)rr&r)rr3r.r)r7rrrr r r test_fractions zExactRatioTest.test_fractioncCsb|tdd|tddddtdD}|D]"}t|\}}||||q:dS)Nrrr?)r}rcSsg|]}tddqS)rjrandomuniformrrr r r rz-ExactRatioTest.test_float..rj)r3r.rrange)r7datar numdenr r r test_floats zExactRatioTest.test_floatcCsJt}tj}|||dd|||dd|||dddS)Nz0.125rz12.345)i z-1.98)ir)rr.rr3)r7rrr r r test_decimals zExactRatioTest.test_decimalcCstd}Gdddt}Gdddt}|| fD]`}t|t|fD]N}||}t|}|||df|t|d||t|dqBq2dS)NINFc@s eZdZdS)z(ExactRatioTest.test_inf..MyFloatNr*r+r,r r r r MyFloatsr*c@s eZdZdS)z*ExactRatioTest.test_inf..MyDecimalNr)r r r r MyDecimalsr+r) rrr.rr3rrdrr$)r7r(r*r+rrnr ratior r r rs zExactRatioTest.test_infcCsttd}Gdddt}|||fD]J}t|}|t|d||dd|t|dt|q$dS)NNANc@s eZdZdS)z.ExactRatioTest.test_float_nan..MyFloatNr)r r r r r*sr*rr) rr.rrdrrassertIsr3r)r7r-r*rr,r r r test_float_nans zExactRatioTest.test_float_nancCstd}td}Gdddt}||||||fD]J}t|}|t|d|||dd|t|dt|q4dS)Nr-sNANc@s eZdZdS)z2ExactRatioTest.test_decimal_nan..MyDecimalNr)r r r r r+sr+rr)rr.rrdrr.r3r)r7r-r0r+rr,r r r test_decimal_nans zExactRatioTest.test_decimal_nanN) r*r+r,rrr%r'rr/r1r r r r rs rc@s<eZdZddZddZddZddZd d Zd d Zd S)DecimalToRatioTestcCs<td}|t||df|t| | dfdS)Nr()rr3r.r)r7rr r r test_infinitysz DecimalToRatioTest.test_infinitycCsDtdtdfD].}t|\}}|t||||dqdS)Nr-r0)rr.rrdrr.)r7rr#r$r r r rszDecimalToRatioTest.test_nancCsxtdtdg}|D]^}|dks$Jt|\}}||d||dt| \}}||d||dqdS)Nz 9.8765e12z 9.8765e-12r)rr.rassertGreaterEqualrZassertLessEqual)r7Znumbersrr#r$r r r test_signs    zDecimalToRatioTest.test_signcCsttd}||ddS)Nz0.1234)iir.rrr3r7tr r r test_negative_exponent,sz)DecimalToRatioTest.test_negative_exponentcCsttd}||ddS)Nz1.234e7)i Krr7r8r r r test_positive_exponent1sz)DecimalToRatioTest.test_positive_exponentcCs8ttd}||dttd}||ddS)NZ1e2)rjrz1.47e5)i8>rr7r8r r r test_regression_205366s z(DecimalToRatioTest.test_regression_20536N) r*r+r,r3rr5r:r;r<r r r r r2 s  r2c@s$eZdZddZddZddZdS) IsFiniteTestcCs0dtdddtdfD]}|t|qdS)Nrhrr|r5.5)rrrdr. _isfiniterzr r r test_finiteBszIsFiniteTest.test_finitecCs*tdtdfD]}|t|qdSNrrrrr.r?rzr r r r3GszIsFiniteTest.test_infinitycCs0tdtdtdfD]}|t|qdSNrr-r0rBrzr r r rLszIsFiniteTest.test_nanN)r*r+r,r@r3rr r r r r=?sr=c@sdeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ dS) CoerceTestcCsNttttfD]<}|t|t|Gddd|}|t|t|q dS)Nc@s eZdZdS)z%CoerceTest.test_bool..MyClassNr)r r r r MyClassmrrE)rkrrrr.r._coercebool)r7TrEr r r test_boolgszCoerceTest.test_boolcCs,|t||||t|||dS)z Assert that type A coerces to B.N)r.r.rFr7ABr r r assertCoerceTopszCoerceTest.assertCoerceTocCsT|||Gddd|}|||Gddd|}||||||dS)z6Checks that type A coerces to B, including subclasses.c@s eZdZdS)z/CoerceTest.check_coerce_to..SubclassOfANr)r r r r SubclassOfAzrrNc@s eZdZdS)z/CoerceTest.check_coerce_to..SubclassOfBNr)r r r r SubclassOfB}rrON)rM)r7rKrLrNrOr r r check_coerce_tous    zCoerceTest.check_coerce_tocCs,|ttj||f|ttj||fdS)z=Assert that coercing A to B, or vice versa, raises TypeError.N)r TypeErrorr.rFrJr r r assertCoerceRaisesszCoerceTest.assertCoerceRaisescCs|tus J|t|||Gddd|}Gddd|}Gddd|}|||fD]}|||qZ|||||||||dS)z>Check that type T coerces correctly with subclasses of itself.c@s eZdZdS)z*CoerceTest.check_type_coercions..UNr)r r r r UrrSc@s eZdZdS)z*CoerceTest.check_type_coercions..VNr)r r r r VrrTc@s eZdZdS)z*CoerceTest.check_type_coercions..WNr)r r r r WrrUN)rGr.r.rFrMrR)r7rHrSrTrUtypr r r check_type_coercionss   zCoerceTest.check_type_coercionscCs*|ttttfD]}|t|qdSrQ)rWrkrrrrP)r7rVr r r rs zCoerceTest.test_intcCs|t|ttdSrQ)rWrrPrrZr r r rs zCoerceTest.test_fractioncCs|tdSrQ)rWrrZr r r r'szCoerceTest.test_decimalcCs|tdSrQ)rWrrZr r r r%szCoerceTest.test_floatcCs:tttdttfD]"}ttttfD]}| ||q"qdSrQ) strlistrtupledictrkrrrrR)r7Zbad_typeZ good_typer r r test_non_numeric_typessz!CoerceTest.test_non_numeric_typescCs:ttfD],}Gddd|}||t||tqdS)Nc@s eZdZdS)z6CoerceTest.test_incompatible_types..MySubclassNr)r r r r MySubclassrr])rrrRr)r7rHr]r r r test_incompatible_typess  z"CoerceTest.test_incompatible_typesN)r*r+r,rIrMrPrRrWrrr'r%r\r^r r r r rDRs  rDc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS) ConvertTestcCs$||||t|t|dS)z5Check that x equals y, and has the same type as well.N)r3r.r)r7r r%r r r check_exact_equals zConvertTest.check_exact_equalcCsPttdt}||dGdddt}ttd|}|||ddS)Nrc@s eZdZdS)z#ConvertTest.test_int..MyIntNr)r r r r MyIntrrar])r._convertrrkr`)r7r rar r r rs  zConvertTest.test_intcCs\ttddt}||tddGdddt}ttdd|}|||dddS)N_rcseZdZfddZZS)z-ConvertTest.test_fraction..MyFractioncs|t|SrQ __class__super __truediv__r7rrer r rgsz9ConvertTest.test_fraction..MyFraction.__truediv__r*r+r,rg __classcell__r r rir MyFractionsrlr )r.rbrr`)r7r rlr r r rs zConvertTest.test_fractioncCsTttddt}||dGdddt}ttdd|}|||ddS) NrYrgcseZdZfddZZS)z'ConvertTest.test_float..MyFloatcs|t|SrQrdrhrir r rgsz3ConvertTest.test_float..MyFloat.__truediv__rjr r rir r*sr*r}rr)r.rbrrr`)r7r r*r r r r%s  zConvertTest.test_floatcCsXttddt}||tdGdddt}ttdd|}|||ddS) Nr(z0.025cseZdZfddZZS)z+ConvertTest.test_decimal..MyDecimalcs|t|SrQrdrhrir r rgsz7ConvertTest.test_decimal..MyDecimal.__truediv__rjr r rir r+sr+rrz-0.9375)r.rbrrr`)r7r r+r r r r's zConvertTest.test_decimalcCsFtdtdfD]0}|| fD] }t|t|}|||qqdSrA)rrr.rbrr`)r7r(rr r r r rszConvertTest.test_infcCs@tdtdtdfD]$}t|t|}|t||qdSrC)rrr.rbrrdr)r7rr r r r rszConvertTest.test_nancCs:|ttdtWdn1s,0YdSrQ)rrQr.rbrrZr r r test_invalid_input_types z#ConvertTest.test_invalid_input_typeN) r*r+r,r`rrr%r'rrror r r r r_s   r_c@s(eZdZdZddZddZddZdS) FailNegTestz Test _fail_neg private function.cCs2ddtdtdg}tt|}|||dSNr@r|r)rrrYr. _fail_negr3)r7valuesnewr r r test_pass_throughszFailNegTest.test_pass_throughcCs@ddtdtdfD]&}| g}t|}|tjt|qdSrq)rrr.rsrr next)r7r seqitr r r test_negatives_raises z FailNegTest.test_negatives_raisec Csrdtdd}zttdg|Wn0tjyV}z|jd}WYd}~nd}~00|d|||dS)Nz badness #%d'irYrz(expected exception, but it didn't happen) rrandintrwr.rsr rmZfailr3)r7rFrPrr r r test_error_msgs  zFailNegTest.test_error_msgN)r*r+r,r-rvrzr}r r r r rpsrpc@seZdZddZddZdS) FindLteqTestc CsgdfddgdfddgdffD]l\}}|j||dF|tt||Wdn1sb0YWdq1s0YqdS)Nrrr|rr )subTestrr#r. _find_lteq)r7rr r r r test_invalid_input_valuess   z&FindLteqTest.test_invalid_input_valuesc CszgdddfgdddfgdddffD]L\}}}|j||d$||t||Wdq(1sj0Yq(dS) Nrrrrr|rrrrrrrr|rrr|r|r|r|rr)rr3r.r)r7rr expected_ir r r test_locate_successfullys    z%FindLteqTest.test_locate_successfullyNr*r+r,rrr r r r r~s r~c@seZdZddZddZdS) FindRteqTestc CsbdgddfddgddffD]B\}}}|tt|||Wdq1sR0YqdS)Nrrr|r)rr#r. _find_rteq)r7rlr r r r r*s    z&FindRteqTest.test_invalid_input_valuesc CsgddddfgddddfgddddffD]R\}}}}|j|||d &||t|||Wdq.1sv0Yq.dS) Nrrrrrr|rr)rrr )rr3r.r)r7rrr rr r r r2s z%FindRteqTest.test_locate_successfullyNrr r r r r'src@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)UnivariateCommonMixincCs|t|jdSrQrrQfuncrZr r r test_no_argsAsz"UnivariateCommonMixin.test_no_argscCs*gdtgfD]}|tj|j|qdS)Nr )iterrr.r r)r7emptyr r r test_empty_dataEsz%UnivariateCommonMixin.test_empty_datacCs(ttd}|t|kr$t|q |S)z"Return int data for various tests.r)rYr!sortedrshuffler7r"r r r prepare_dataJs   z"UnivariateCommonMixin.prepare_datacCs\|}t|dksJ|t|ks(J|dd}||us@J||}|||ddS)Nrzdata has been modified)rrIrrZassertListEqual)r7r"Zsavedrr r r test_no_inplace_modificationsQs   z3UnivariateCommonMixin.test_no_inplace_modificationscCs:gdd}||}t|||}|||dS)N)rrr|r|r|rrhrj)rrrr3r7r"rrr r r test_order_doesnt_matter[s     z.UnivariateCommonMixin.test_order_doesnt_mattercCsnGdddt}Gdddt}dd}|}||}ttt|||fD]}|||}|||qJdS)Nc@s eZdZdS)zBUnivariateCommonMixin.test_type_of_data_collection..MyListNr)r r r r MyListjsrc@s eZdZdS)zCUnivariateCommonMixin.test_type_of_data_collection..MyTupleNr)r r r r MyTuplelsrcSsdd|DS)Ncss|] }|VqdSrQr )robjr r r rorzXUnivariateCommonMixin.test_type_of_data_collection..generator..r r"r r r generatornszEUnivariateCommonMixin.test_type_of_data_collection..generator)rYrZrrrr3)r7rrrr"rkindrsr r r test_type_of_data_collectionhs z2UnivariateCommonMixin.test_type_of_data_collectioncCs0tddd}|t|}||||dSNrr|)r!rrYr3r7r"rr r r test_range_datavs z%UnivariateCommonMixin.test_range_datacCs.|d|d|d|tdS)NrgE@)check_for_type_errorobjectrZr r r test_bad_arg_types|s   z(UnivariateCommonMixin.test_bad_arg_typescGs|jt|jg|RdSrQrrr r r rsz*UnivariateCommonMixin.check_for_type_errorcshGdddt}|}||}t|ttfD]4fdd|D}t|||}|||q.dS)Ncs,eZdZfddZfddZeZZS)z@UnivariateCommonMixin.test_type_of_data_element..MyFloatcst|t|SrQrrfrgrhrir r rgszLUnivariateCommonMixin.test_type_of_data_element..MyFloat.__truediv__cst|t|SrQrrf__add__rhrir r rszHUnivariateCommonMixin.test_type_of_data_element..MyFloat.__add__)r*r+r,rgr__radd__rkr r rir r*s  r*csg|] }|qSr r rr rr r r rzCUnivariateCommonMixin.test_type_of_data_element..)rrrrrrr3)r7r*rawrr"rsr rr test_type_of_data_elements z/UnivariateCommonMixin.test_type_of_data_elementN) r*r+r,rrrrrrrrrrr r r r r>s  rc@s eZdZdZddZddZdS)UnivariateTypeMixinamMixin class for type-conserving functions. This mixin class holds test(s) for functions which conserve the type of individual data points. E.g. the mean of a list of Fractions should itself be a Fraction. Not all tests to do with types need go in this class. Only those that rely on the function returning the same type as its input data. cCsGdddt}ttt|fS)z4Return the types which are expected to be conserved.cs\eZdZfddZfddZfddZfddZfd d Zfd d ZeZ Z S) zHUnivariateTypeMixin.prepare_types_for_conservation_test..MyFloatcst|t|SrQrrhrir r rgszTUnivariateTypeMixin.prepare_types_for_conservation_test..MyFloat.__truediv__cst|t|SrQ)rrf __rtruediv__rhrir r rszUUnivariateTypeMixin.prepare_types_for_conservation_test..MyFloat.__rtruediv__cst|t|SrQ)rrf__sub__rhrir r rszPUnivariateTypeMixin.prepare_types_for_conservation_test..MyFloat.__sub__cst|t|SrQ)rrf__rsub__rhrir r rszQUnivariateTypeMixin.prepare_types_for_conservation_test..MyFloat.__rsub__cst|t|SrQ)rrf__pow__rhrir r rszPUnivariateTypeMixin.prepare_types_for_conservation_test..MyFloat.__pow__cst|t|SrQrrhrir r rszPUnivariateTypeMixin.prepare_types_for_conservation_test..MyFloat.__add__) r*r+r,rgrrrrrrrkr r rir r*s      r*)rrr)r7r*r r r #prepare_types_for_conservation_testsz7UnivariateTypeMixin.prepare_types_for_conservation_testcsF|}|D]0fdd|D}||}|t|qdS)Ncsg|] }|qSr r rrr r r rz.)rrrr.r)r7r"rrsr rr test_types_conserveds   z(UnivariateTypeMixin.test_types_conservedN)r*r+r,r-rrr r r r rs rc@seZdZddZdS) TestSumCommoncCsdd}||_dS)NcWstj|\}}}t||SrQ)r._sumrF)rmrHvaluerr r r simplified_sumsz+TestSumCommon.setUp..simplified_sum)r)r7rr r r setUpszTestSumCommon.setUpN)r*r+r,rr r r r rsrc@sdeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ dS)TestSumcCs tj|_dSrQ)r.rrrZr r r rsz TestSum.setUpcCspgdtgfD]\}|||ttddf|||dttddf|||dttddfqdS)Nr rrffffff@)rr3rrkrrrr r r rszTestSum.test_empty_datacCsF||gdttddf||gddttddfdS)N)rrhr|rrur<r)rrr|rr~rirh)r3rrkrrZr r r test_intss   zTestSum.test_intscCsH||dgdttddf||gddttddfdS)Nrr@)rrrg?rg @r)r3rrrrZr r r test_floatss   zTestSum.test_floatscCs.||tddgdttdddfdS)Nrrr)r3rrrZr r r test_fractionsszTestSum.test_fractionsc CsXt}|d|d|d|d|d|d|d|dg}|||ttd d fdS) Nrz5.246z1.702z-0.025z3.974z2.328z4.617z2.843z20.686r)rr3rr7rr"r r r test_decimalss  zTestSum.test_decimalscCs:ddtdD}|jt||dt|dddS)NcSsg|]}tddqS)rrrrr r r r rz7TestSum.test_compare_with_math_fsum..rrgؗҬ<r')r!rHrrrfsumrr r r test_compare_with_math_fsumsz#TestSum.test_compare_with_math_fsumcCs|ddtdD}||d}||d||dd||d||dd||td||dddS) NcSsg|]}tddqS)rrrrr r r r rz/TestSum.test_start_argument..rjrrurrfg@xD)r!rr3r)r7r"r9r r r test_start_arguments zTestSum.test_start_argumentcCs.|t|jgdd|t|jgddS)Nrrr|999)rrr|rrrZr r r test_strings_fail szTestSum.test_strings_failcCs.|t|jgdd|t|jgddS)Nr999)rrr|rrrZr r r test_bytes_failszTestSum.test_bytes_failcCs8|t|jddtdg|t|jddgtddS)Nrrr)rrQrrrZr r r test_mixed_sumszTestSum.test_mixed_sumN)r*r+r,rrrrrrrrrrrr r r r rsrc@seZdZddZdS)SumTortureTestcCs|tgddttddf|tgddttddftgdd\}}}||t||d|jt|ddd dS) N)r}Ô%ITr}Ô%Ir{g@i@)rrrr)0.++rrrYg^,gV瞯.rr3r7r"rrsr rr test_big_datas  zTestMean.test_big_datacCs:ddtdD}||}||d}|||dS)NcSsg|]}tddqS)rrhrrr r r r rz.TestMean.test_doubled_data..rrr!rrHrr r r test_doubled_datas zTestMean.test_doubled_datacCs td}|t|g|dS)NZ1e4)rr3r.rrr r r test_regression_20561szTestMean.test_regression_20561cCs\|tddgdd}d}dD]4}|t|g|||t|g||q"dS)Nggg)rr|rhr&)r3r.r)r7bigZtinyrr r r test_regression_25177szTestMean.test_regression_25177N)r*r+r,rrrrrrrrrr r rrr r r r r}s   rcseZdZddZfddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZZS)TestHarmonicMeancCs tj|_dSrQ)r.Z harmonic_meanrrZr r r rszTestHarmonicMean.setUpcst}|d|S)Nr)rfrremover7rtrir r rs  zTestHarmonicMean.prepare_datacCsdddtddtdfS)Nrr]rrrz4.125rrZr r r rsz8TestHarmonicMean.prepare_values_for_repeated_single_testcCsgd}|||ddS)N)rrrrrrr r r test_zeroszTestHarmonicMean.test_zeroc CsZtj}dggdfD]@}|j|d |||j|Wdq1sJ0YqdS)NrY)rrgr|)rt)r.r rrr)r7excrtr r r test_negative_errorsz$TestHarmonicMean.test_negative_errorc CsdggdgdgdfD]d}|j|dD|t||Wdn1sV0YWdq1st0YqdS)Nz3.14)123)rrr|4rh)rrrz5.6r)rrrQrrr r r test_invalid_type_errors z(TestHarmonicMean.test_invalid_type_errorcCs(gd}t||||ddS)N)rrrrrrg333333@rrr r r rs zTestHarmonicMean.test_intscCs>gd}t||||d||gdddS)N)rrrrrr)rrrrrrrr r r test_floats_exact s z"TestHarmonicMean.test_floats_exactcCs(tddD]}|||g|q dS)Nrrr!r3rrzr r r test_singleton_listssz%TestHarmonicMean.test_singleton_listsc Cst}|||d|d|d|dg|d|d|d|d|dg}t|||||d|d|d|d |d g}t|||||d d dS) Nr_rrrz0.10z0.20z1.68z0.32z5.94z2.75iiC)rr3rrrrr r r test_decimals_exacts.  z$TestHarmonicMean.test_decimals_exactc Csft}|dd|dd|dd|dd|dd|dd|ddg}t|||||d d dS) Nrrr|rrhrr~ri| irrr r r r s< zTestHarmonicMean.test_fractionscCs$dtddg}|||ddS)Nrrrr)rr3rrr r r r'szTestHarmonicMean.test_infcCs(dtddg}|t||dS)Nrrrr)rrdrrrrr r r r,szTestHarmonicMean.test_nancsBdgd}||}|fdd|D}|||dS)Norcsg|] }|qSr r rrr r r 6rz>TestHarmonicMean.test_multiply_data_points..r r r rr test_multiply_data_points1s z*TestHarmonicMean.test_multiply_data_pointscCs:ddtdD}||}||d}|||dS)NcSsg|]}tddqS)rrhrrr r r r ;rz6TestHarmonicMean.test_doubled_data..rrr rr r r r 9s z"TestHarmonicMean.test_doubled_data)r*r+r,rrrrrrrrrrrrrr!r rkr r rir rs   rcsTeZdZddZfddZddZddZd d Zd d Zd dZ ddZ Z S) TestMediancCs tj|_dSrQr.medianrrZr r r rCszTestMedian.setUpcs(t}t|ddkr$|d|S)+Overload method from UnivariateCommonMixin.rr)rfrrIrrrir r rFs  zTestMedian.prepare_datacCs2gd}t|ddksJ|||ddS)Nrrr|rrhrrrrrIr3rrr r r test_even_intsMszTestMedian.test_even_intscCs2gd}t|ddksJ|||ddS)N)rrr|rrhrr}rrrr'rr r r test_odd_intsSszTestMedian.test_odd_intscCsjt}|dd|dd|dd|dd|ddg}t|ddksDJt|||||dddS)Nrr~rr|rrhrrIrrr3rrr r r test_odd_fractionsYs , zTestMedian.test_odd_fractionscCsrt}|dd|dd|dd|dd|dd|ddg}t|ddksLJt|||||dddS Nrr~rr|rrhrrr*rr r r test_even_fractionsas 4 zTestMedian.test_even_fractionscCs^t}|d|d|d|d|dg}t|ddks:Jt|||||ddS)N2.53.14.25.75.8rrrrIrrr3rrr r r test_odd_decimalsis " zTestMedian.test_odd_decimalscCsdt}|d|d|d|d|d|dg}t|ddks@Jt|||||d dS) Nz1.2r.r/r0r1r2rrz3.65r3rr r r test_even_decimalsqs ( zTestMedian.test_even_decimals) r*r+r,rrr(r)r+r-r4r5rkr r rir r"As r"c@seZdZddZddZdS)TestMedianDataTypecCs tj|_dSrQr#rZr r r r|szTestMedianDataType.setUpcCs<ttd}t|ddks J|t|kr8t|q |S)Nr_rr)rYr!rIrrrrr r r rs    zTestMedianDataType.prepare_dataN)r*r+r,rrr r r r r6zsr6c@s,eZdZddZddZddZddZd S) TestMedianLowcCs tj|_dSrQ)r.Z median_lowrrZr r r rszTestMedianLow.setUpcCs2gd}t|ddksJ|||ddS)Nr&rrr|r'rr r r r(szTestMedianLow.test_even_intscCsrt}|dd|dd|dd|dd|dd|ddg}t|ddksLJt|||||dddSr,r*rr r r r-s 4 z!TestMedianLow.test_even_fractionscCsdt}|d|d|d|d|d|dg}t|ddks@Jt|||||ddS Nz1.1z2.2z3.3z4.4r>z6.6rrr3rr r r r5s ( z TestMedianLow.test_even_decimalsNr*r+r,rr(r-r5r r r r r7sr7c@s,eZdZddZddZddZddZd S) TestMedianHighcCs tj|_dSrQ)r.Z median_highrrZr r r rszTestMedianHigh.setUpcCs2gd}t|ddksJ|||ddS)Nr&rrrr'rr r r r(szTestMedianHigh.test_even_intscCsrt}|dd|dd|dd|dd|dd|ddg}t|ddksLJt|||||dddSr,r*rr r r r-s 4 z"TestMedianHigh.test_even_fractionscCsdt}|d|d|d|d|d|dg}t|ddks@Jt|||||ddSr8r3rr r r r5s ( z!TestMedianHigh.test_even_decimalsNr9r r r r r:sr:c@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)TestMedianGroupedcCs tj|_dSrQ)r.Zmedian_groupedrrZr r r rszTestMedianGrouped.setUpcCsgd}t|ddksJ|||dgd}t|ddksJJ|||dgd}t|ddksxJ|||dd gd }t|ddksJ|j||dd d d dS)N)rrmr<r<r_r_rrr<)rrmr<r<r<r<r_g+@) rhrrr_rrrrr=rrhg`3@)rr>r>r>rrrr?r?r@g4@:0yE>r&)rIr3rrHrr r r test_odd_number_repeatedsz*TestMedianGrouped.test_odd_number_repeatedcCsgd}t|ddksJ|j||ddddgd}t|ddksPJ|j||d ddgd }t|ddksJ|||d gd }t|ddksJ|||d dS)N) rhrrr_rrrr=r=rrrrhg*3@rCrD)rr|rrrrhg["8@) rr|r|rrrrhrhrhrhrrr) r|rrrrhrhrhrhrr@)rIrHrr3rr r r test_even_number_repeatedsz+TestMedianGrouped.test_even_number_repeatedcCsLdddtddtdfD].}dD]$}|g|}|||t|q qdS)Ng333333@DgޗCrrz32.9714r)rrr3rrrr r r rs z,TestMedianGrouped.test_repeated_single_valuecCsdt}|dd|dd|dd|dd|ddg}t|ddksDJt||||ddS) Nrhrr}rmr]rr@r*rr r r r+s , z$TestMedianGrouped.test_odd_fractionscCslt}|dd|dd|dd|dd|dd|ddg}t|ddksLJt||||ddS) Nrhrr}rmr]rr @r*rr r r r-s 4 z%TestMedianGrouped.test_even_fractionscCsZt}|d|d|d|d|dg}t|ddks:Jt||||ddS)Nr>6.57.58.5rrg@r3rr r r r4s " z#TestMedianGrouped.test_odd_decimalscCst}|d|d|d|d|d|dg}t|ddks@Jt||||d|d|d|d|d|d|dg}t|ddksJt||||ddS) Nr>rKrLrMrr@g@r3rr r r r5s( ( z$TestMedianGrouped.test_even_decimalscCs\gd}|||ddgd}|j||ddddgd}|||d d dS) N) @rrrrrIrIrJrrrg@) rOrrrrrrIrIrJrrg["8@rCrD) rPrRrRrRrS,@iTrgp@)r3rrHrr r r test_intervals zTestMedianGrouped.test_intervalcCspgd}|t|j|gd}|t|j|gd}d}|t|j||gd}d}|t|j||dS)N)rWrW)rrrrrWrr)r7r"intervalr r r test_data_type_errorsz&TestMedianGrouped.test_data_type_errorN) r*r+r,rrErGrr+r-r4r5rVrYr r r r r;s   r;c@sTeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)TestModecCs tj|_dSrQ)r.moderrZr r r r1szTestMode.setUpcCsgdS)r%) rrrrr|rr~r}rrrr rZr r r r4szTestMode.prepare_datacCs"tddd}|||ddSrrrr r r r9s zTestMode.test_range_datacCs4d}|||dd}|||ddS)NZabcbdbrzfe fi fo fum fi fifi)r3rrrr r r test_nominal_data>szTestMode.test_nominal_datacCsDttd}tdD]*}||g}t|||||qdSNrrYr!rrr3r)r7r"rOrr r r test_discrete_dataEs     zTestMode.test_discrete_datacCsDgd}|d|dkr(dks.nJ|||ddS)N)rrrrrrr|rrhrrrrr~rr}r}rrr)rr3rrr r r test_bimodal_dataMs&zTestMode.test_bimodal_datacCs"ttd}|||ddS)Nrr)rYr!r3rrr r r test_unique_dataTs zTestMode.test_unique_datacCs|t|jddSrQrrZr r r test_none_dataZszTestMode.test_none_datacCs$tgd}|||ddS)N)rrrrr)r?Counterr3rrr r r test_counter_dataaszTestMode.test_counter_dataN) r*r+r,rrrr]r`rarbrcrer r r r rZ/srZc@seZdZddZdS) TestMultiModecCs@tj}||ddg||dgd||dgdS)NZ aabbbbbbbbccrZaabbbbccddddeeffffgg)rrrrW)r. multimoder3)r7rgr r r test_basicskszTestMultiMode.test_basicsN)r*r+r,rhr r r r rfisrfc@s$eZdZddZddZddZdS) TestFMeanc Cstj}t}t}gdddf|d|d|dgddf|dd |d d |d d gdd fgdddfdd |d d gddfdtgdddffD]2\}}}||}|t|t|||||qdS)Nrr@@floats3.54.05.25decimalsr~rrrr fractions)TFTTF333333?Zbooleansr mixed types)rjrlrZiterator) r.fmeanrrrr.rrr3)r7rvrrr" expected_meanr actual_meanr r r rhts    zTestFMean.test_basicscCsLtj}tj}|||gWdn1s40Y|||tgWdn1sj0Y|t|dWdn1s0Y|t|gdWdn1s0Y|t|Wdn1s0Y|t|gddWdn1s>0YdS)NrNrrrrF)r.rvr rrrQ)r7rvr r r r test_error_casess & * & * & zTestFMean.test_error_casescCstj}td}td}|t|d|gd|t|||gd|t|d|gd|t||| gWdn1s0YdSNZNanInfrrznan and infinityZinfinity) r.rvrrdrrr$rr#)r7rvNaNr~r r r test_special_valuess zTestFMean.test_special_valuesN)r*r+r,rhr|rr r r r rirsric@s@eZdZdZddZddZddZdd Zd d Zd d Z dS)VarianceStdevMixinr!cCs6dddtddtdfD]}|||gdqdS)Nrg3@g%Brrz8.392rrrzr r r rsz$VarianceStdevMixin.test_single_valuecCsHdddtddtdfD]*}dD] }|g|}|||dq qdS) Nrrg@6gd}||}dfdd|D}||||dS)N) g{Gz?gRQ?g ףp= ?gRQ@gp= ף@gQ @rFgQ@gGz@gQ@gj@csg|] }|qSr r rshiftr r r rz6VarianceStdevMixin.test_shift_data..)rrHr7rrr"r rr test_shift_datas  z"VarianceStdevMixin.test_shift_datacsTgd}tdd|DsJ||}dfdd|D}||||dS)N) rr|r|rrhr~r}rrrcss|]}|t|kVqdSrQ)rkrr r r rrz;VarianceStdevMixin.test_shift_data_exact..iʚ;csg|] }|qSr r rrr r r rz.)allrr3rr rr test_shift_data_exacts  z(VarianceStdevMixin.test_shift_data_exactcCs6ddtdD}||}||t||dS)NcSsg|]}tddqS)rrrrr r r r rz:VarianceStdevMixin.test_iter_list_same..r)r!rr3rrr r r test_iter_list_sames z&VarianceStdevMixin.test_iter_list_sameN) r*r+r,r'rrrrrrr r r r rs  rc@s4eZdZddZddZddZddZd d Zd S) TestPVariancecCs tj|_dSrQ)r. pvariancerrZr r r rszTestPVariance.setUpcCs0ttd}t|d}||||dS)Nr{gP_Ar_rr r r test_exact_uniforms  z TestPVariance.test_exact_uniformcCs"gd}d}||||dS)Nrr~rmrg6@rr7r"exactr r r rszTestPVariance.test_intscCsXt}|dd|dd|dd|ddg}|dd}||}|||||tdS)Nrrr|r~rrrr3assertIsInstancer7rr"rrsr r r rs $   zTestPVariance.test_fractionscCsNt}|d|d|d|dg}|d}||}|||||tdS)Nz12.1z12.2z12.5z12.9z0.096875rrr3rr7rr"rrsr r r rs   zTestPVariance.test_decimalsN)r*r+r,rrrrrr r r r rs  rc@s<eZdZddZddZddZddZd d Zd d Zd S) TestVariancecCs tj|_dSrQ)r.variancerrZr r r r szTestVariance.setUpcCs6dddtddtdfD]}|tj|j|gqdS)Nrg333338@g(G!=Crrz4.2084rrrr.r rrzr r r rszTestVariance.test_single_valuecCs"gd}d}||||dS)Nrrrrr r r rszTestVariance.test_intscCsXt}|dd|dd|dd|ddg}|dd}||}|||||tdS)Nrrr|r~rrrr r r rs $   zTestVariance.test_fractionscCsZt}|d|d|d|dg}d|d|d}||}|||||tdS)Nrr~r}rz9.5r|rrr r r r#s   zTestVariance.test_decimalscCs0d}|||d||j|ddddS)Nrrrrrrxbarrrrr r r test_center_not_at_mean,sz$TestVariance.test_center_not_at_meanN) r*r+r,rrrrrrr r r r r s   rc@s$eZdZddZddZddZdS) TestPStdevcCs tj|_dSrQ)r.ZpstdevrrZr r r r3szTestPStdev.setUpcCs8ddtdD}tt|}||||dS)NcSsg|]}tddqS)ir@rrr r r r 8rz7TestPStdev.test_compare_to_variance..r)r!rsqrtr.rr3rrr r r test_compare_to_variance6sz#TestPStdev.test_compare_to_variancecCs0d}|||d||j|ddddS)N)r|rr~rrr)murNrrr r r r<sz"TestPStdev.test_center_not_at_meanN)r*r+r,rrrr r r r r1src@s,eZdZddZddZddZddZd S) TestStdevcCs tj|_dSrQ)r.stdevrrZr r r rDszTestStdev.setUpcCs6dddtddtdfD]}|tj|j|gqdS)NQgHzwi@gf7?+Brhrz35.719rrzr r r rGszTestStdev.test_single_valuecCs8ddtdD}tt|}||||dS)NcSsg|]}tddqS)rgr}rrr r r r Nrz6TestStdev.test_compare_to_variance..r)r!rrr.rr3rrr r r rLsz"TestStdev.test_compare_to_variancecCsd}||j|ddddS)Nrrrrrrrr r r rRsz!TestStdev.test_center_not_at_meanN)r*r+r,rrrrr r r r rBsrc@s4eZdZddZddZddZddZd d Zd S) TestGeometricMeanc Cstj}||gdd||ddgd||dgdtdtdd tdd tdd td d d td d dgdddtd DddtdDddtdDf D]B}ttt |t dt |}||}| t |t |qdS)N)r^r@rB@rg"@g@g1@l;rrjrr{rr|r)rr]rmrhxr~cSsg|]}tdqS)I@r expovariaterrOr r r r frz1TestGeometricMean.test_basics..cSsg|]}tddqS)rrI)rlognormvariaterr r r r grcSsg|]}tdddqS)r i)r triangularrr r r r hrr)r.geometric_meanassertAlmostEqualrseedr!rprodrrrIrdiscloser)r7rrngZ gm_decimalZgm_floatr r r rhXs$    zTestGeometricMean.test_basicscCstj}t}t}d}gddf|d|d|dgdf|dd |d d |d d gd fdd |d d gdfdtgddffD]2\}}||}|t|t||j||ddqxdS)Ngd@rjrmrnrorprqr~rrrrrrrrt)rjrZrurhZplaces) r.rrrrr.rrr)r7rrrrwr"rrxr r r test_various_input_typesns  z*TestGeometricMean.test_various_input_typescCstj}d}|d|d|d|g}|t|d||t|d}|d|d|d|g}|t|d|||ddS)Ngp~gK@g8@rgprX)r.rrdrrrr$assertNotEqual)r7rZlargeZbig_gmZsmallZsmall_gmr r r test_big_and_smallsz$TestGeometricMean.test_big_and_smallcCstj}tj}|||gWdn1s40Y|||gdWdn1sj0Y|||gdWdn1s0Y|||tgWdn1s0Y|t|dWdn1s 0Y|t|gdWdn1sB0Y|t|Wdn1st0Y|t|gddWdn1s0YdS)N)rrXrk)rgrkryrzr{)r.rr rrrQ)r7rr r r r r|s$ & * * * ( , & z"TestGeometricMean.test_error_casescCstj}td}td}|t|d|gd|t|||gd|t|d|gd|t||| gWdn1s0YdSr}) r.rrrdrrr$rr#)r7rrr~r r r rs z%TestGeometricMean.test_special_valuesN)r*r+r,rhrrr|rr r r r rVs rc@s4eZdZddZddZddZddZd d Zd S) TestQuantilesc stj}gd}t|dgfddgfdddgfdgd fd gd fd gd fdgdfdgdfdgdfdgdff D]P\}}|||||d|t|||d|dtttfD]D|t ||d}| fdd|D||t t |qt|dkr&||||d|t |}d|d|d}d|d|d}|||g} ||||d|| |dd||fdd} t t | |} |t | ||d} | t d dt| | Dqztdd!D]8} tjtd"| d#}||\}}}||t|qdS)$N)rr&rUi^rr@o@r|i@t@r)d@rt@rh)a@k@@r@u@r)^@rrru@r)Y@rgj@rgr@rgXv@r) gV@rgg@rrrg`t@rgv@r) T@rrr l@rgq@rrrgv@r_)gR@gZ@rge@rrn@gp@rrgt@rg@v@gw@rc3s|]}tt|kVqdSrQrrrZdatatyper r rrz4TestQuantiles.test_specific_cases..rrYrg inclusivermethodcSs d|dSNrg3333J@r r r r r rsz,TestQuantiles.test_specific_cases..fcss|]\}}t||VqdSrQrrrrPrr r r rrrrjk)r. quantilesrrr3rIrrrrrdrYrrrMr!choicesr$)r7rr"rrrsZsdatalohiZ padded_datarexpactrq1q2q3r rr test_specific_casessN             z!TestQuantiles.test_specific_casesc s0tj}gd}t|dgfddgfdddgfdgd fd gd fd gd fdgdfdgdfdgdfdgdff D]\}}|||||dd|t|||dd|dtttfD]F|t ||dd}| fdd|D||t t |qdd}t t ||}|t |||dd}| t ddt ||Dqz||ddgdddgd||tdd dddgdd!d"td#D}||d$dd} |t||t|||d$d%}||| tdd&D]<} tjtd| d'}||dd(\} } } || t|qdS))N)rjr&ii rrr@r|ry@r)e@r@@rh)rrv@@r)b@rrr@r)g0a@rrgpw@rgP@r) g@`@rgg@rrrg{@rg@@r) g@_@rrrrrrrrrg@r_)rga@rgf@rrgq@rrrg~@rg@g@rrc3s|]}tt|kVqdSrQrrrr r r rz>TestQuantiles.test_specific_cases_inclusive..cSs d|dSrr r r r r r sz6TestQuantiles.test_specific_cases_inclusive..fcss|]\}}t||VqdSrQrrr r r r rrrj) $@rg>@gD@rgN@gQ@rgV@rcSsg|]}tdqS)r{)r randrangerr r r r  rz?TestQuantiles.test_specific_cases_inclusive..i rrrr)r.rrrr3rIrrrrrdrYrrMr!rrcrrr$)r7rr"rrrsrrrrrrrrr rr test_specific_cases_inclusivesP            z+TestQuantiles.test_specific_cases_inclusivecCsPtj}tddD]:}dg|}|||gd|||ddgdqdS)Nrrr)rrrrr)r.rr!r3)r7rrr"r r r test_equal_inputs s zTestQuantiles.test_equal_inputsc stj}d}ddt|Dtt|kr>tdqdD]:}||}| fdd||dDt t|||qJdD]\}||||d h}fd d||dD}d d t ||d dD}| ||kqdS) Nr{cSsg|]}tdqS)皙?rrr r r r ( rz9TestQuantiles.test_equal_sized_groups..r) rrrhrrrrjr&rrrr6r{csg|]}t|qSr bisectrqrr r r 1 rr) rmr;mi;iisii)&rcsg|]}t|qSr rrrr r r 8 rcSsh|]\}}||qSr r )rprr r r 9 rz8TestQuantiles.test_equal_sized_groups..) r.rr!rIsetrrrsortr3rYrMrd)r7rtotalrZ group_sizeZ group_sizesposZsizesr rr test_equal_sized_groups% s"z%TestQuantiles.test_equal_sized_groupscCstj}tj}|t|Wdn1s20Y|t"|gddddWdn1sn0Y|t|gddWdn1s0Y|| |gdddWdn1s0Y|| |gdddWdn1s0Y|t |gdddWdn1sX0Y|t |gddd Wdn1s0Y|||d gddWdn1s0Y|t |gd ddWdn1s 0YdS) N)rrrrmrrrrYrXrr)rNr)r.rr rrQr#)r7rr r r r r|< s( $ 0 , . 0 0 0 . zTestQuantiles.test_error_casesN)r*r+r,rrrrr|r r r r rs 66rc@seZdZddZddZddZddZd d Zd d Ze j d dZ ddZ ddZ ddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%S)&TestNormalDistcCsV|jdd}|tt|Wdn1s60Y|t|jddS)NrTr)Z_muZ_sigma)r NormalDistrrQvarsr3rZ __slots__r7ndr r r test_slots\ s &zTestNormalDist.test_slotscCs|jdd}||jd||jd||jd|j}||jd||jd||jd||jj|jddWdn1s0YGddd|jj}|d d }|t||dS) Nrr]i!rric@s eZdZdS)zGTestNormalDist.test_instantiation_and_attributes..NewNormalDistNr)r r r r NewNormalDists srr&rh) rrr3rrrrr r)r7rrnndr r r !test_instantiation_and_attributesb s , z0TestNormalDist.test_instantiation_and_attributescCs|jj}gd}||||dd||t||dd||t||dd||jj|gWdn1s0Y||jj|dgWdn1s0YGddd|}||}|t||dS)N)`riZrnrr}rc@s eZdZdS)zBTestNormalDist.test_alternative_constructor..NewNormalDistNr)r r r r r sr) rrr3Z from_samplesrZrrr r)r7rr"rrr r r test_alternative_constructorx s(* z+TestNormalDist.test_alternative_constructorc Cs|jj}d\}}|||}d}||}|t|||ttt|th|j |}| ||d|ko||dknd}|j|dd}|j|dd} |j|dd} |j|dd} ||| || | | || dS)N)r{rIrrrjzhappiness and joy)rztrouble and despair) rrZsamplesr3rIrrrrrrdr) r7rrsigmarrr"rZdata1Zdata2Zdata3Zdata4r r r test_sample_generation s"   .  z%TestNormalDist.test_sample_generationc Cs|jj}|dd}||d|d||d|dtdD]$}||d||d|qJd}tddD]6}||||||}|j|||d d q~|}tgd D]>\}}|j||d |d d |j|| d |d d q|dd } ||jj | dWdn1sB0Y| |t dd| |t dd| t |t ddS)Nrjr_rrrgP?rr rr)2+ݓ?r r ggDio?g ?gV}b?gQ|?gFx?ggs?g٬\m?g rh?gK7A`?g|гY?g Q?g QI?gsh|??g=yX5?g|a2U0*?gQ?gN@?g/$?g~k ?g]C?gw/?g~:p?g>W[?gM O?gW[?g鷯?g{Gz?g qh?g|a2U?gK7A?gvq -?gjt?gc]F?g\C?gףp= ?g?ga2U0*?gy):?g( y?gN@a?gfc]F?g"lxz,?gOn?g37?gec]?gn?gT?rr-InfrXr~r)rrZ assertLesspdfr!rcdfrLrr r3rrdrr) r7rrrOdxr Zest_pdfZZpxYr r r test_pdf s(  "  *zTestNormalDist.test_pdfcs6|jj}|ddfddtddD}|ttt|th||t|| dd|}dD]:\}}|j | ||d d |j | | d |d d qn|dd }| |jj | d Wdn1s0Y| tdd| tdd | t tddS)Nrjr_csg|]}|qSr )rrrr r r  rz+TestNormalDist.test_cdf..rr&r))rXr)rgqZ ?)rgE_A?)gQ?gGɫs ?)g(\?g؞Y?)gQ?g9#?)gHzG?g&S?)rsgMbX9?)gQ?gT㥛 ?)g?g??)gffffff@g_xZ?)gQ@g#0?)g)\( @gu?gE@i3rrr&rhrXrg?rr)rrr3Zinv_cdfritemsrLrr!rrr rdrrr) r7rZiqrpprrowrr rrrPr r r test_inv_cdf sL    **** *zTestNormalDist.test_inv_cdfcCsh|j}dgfddgfdddgfdgdffD]2\}}|j|d }|td d t||Dq0dS) NrrrXr|gǘۿgǘ?r)g/$rXg/$?rcss"|]\}}tj||ddVqdS)r)Zabs_tolNrrr r r r3 sz0TestNormalDist.test_quantiles..)rrrrdrrM)r7rrrrr r r test_quantiles) s     zTestNormalDist.test_quantilescCs|jj}|dd|dddf|dd|dddffD]6\}}}|j|||dd|j|||ddq4dd d d d }|dd|ddf|dd|ddf|dd|ddf|d d|ddf|dd|ddf|dd|ddf|dd|ddf|dd|ddf|dd|ddf|dd|ddf|dd|ddf|dd|ddf|dd|ddf|dd|ddffD]B\}}|j|||||d d|j|||||d dq||}|t|Wdn1s0Y|t|||Wdn1s(0Y|t|dWdn1s^0Y||jj ||ddWdn1s0Y||jj |dd|Wdn1s0YdS) NrXrrrgɎ@?gM-[닄?rri rh)stepsrc stj}|j|jd}|t|j|j}||d||fddt|D}tt|j|}tt|j|} t|||| } |tt || | S)z0Numerical integration cross-check for overlap() rrcsg|]}|qSr r rrrr r r I rzHTestNormalDist.test_overlap..overlap_numeric..) rrrrrr!rYrrrc) rrrrrcenterwidthZx_arrZxpZyprr r r overlap_numericB s z4TestNormalDist.test_overlap..overlap_numericr{Arrjr_r rirrrgjt?g~jth?gjt?ga2U0*3?gMbX?rr)rrrZoverlaprrQr )r7rZX1ZX2Zpublished_resultr#rr r r test_overlap6 sF   ( , *0zTestNormalDist.test_overlapcCs(|jj}|dd}||dd||dd||dd|t|Wdn1sp0Y|t|ddWdn1s0Y|t|dWdn1s0Y||jj |dd dWdn1s0YdS) Nrjr_gffffff@:gffffffrXrr)rrr3ZzscorerrQr )r7rrr r r test_zscoreu s  & * (zTestNormalDist.test_zscorecCsX|jdd}||jd||jd||jd||jd||jddS)Nrjr_)rrr3rr$r[rr)r7rr r r test_properties s zTestNormalDist.test_propertiescCsL|jj}|dd}|dd}||||dd||||dddS)Nrjrrnrhrmr)rrr3r7rrrr r r 'test_same_type_addition_and_subtraction s   z6TestNormalDist.test_same_type_addition_and_subtractioncCs|jj}|dd}d}|| |dd|| |dd||||dd||||dd||||dd||||dd||||dd ||||dd ||||dd |t||Wdn1s0YdS) Nrjr_rrr rirr%r)rrr3rrQ)r7rrr%r r r test_translation_and_scaling s  z+TestNormalDist.test_translation_and_scalingcCs||jj}|dd}| }|||||j|j||j|j| }|||||j|j ||j|jdS)Nrjr)rrZ assertIsNotr3rrr-r r r test_unary_operations s   z$TestNormalDist.test_unary_operationscCs"|jj}|}|dd}|}|dd}|dd}|dd}|||||||||||||||Gddd}|} ||| t||| kd|| |kdGddd|} | d d d } |d d }|| |Gd d d } | d d } |d d }||| dS)Nrrrc@seZdZddZdS)z'TestNormalDist.test_equality..AcSsdSr^r rhr r r __eq__ sz.TestNormalDist.test_equality..A.__eq__N)r*r+r,r1r r r r rK srKrcseZdZfddZZS)z5TestNormalDist.test_equality..SizedNormalDistcst||||_dSrQ)rf__init__r)r7rr rrir r r2 sz>TestNormalDist.test_equality..SizedNormalDist.__init__)r*r+r,r2rkr r rir SizedNormalDist sr3rjr_9c@seZdZddZdS)z3TestNormalDist.test_equality..LognormalDistcSs||_||_dSrQ)rr )r7rr r r r r2 sz.LognormalDist.__init__N)r*r+r,r2r r r r LognormalDist sr5)rrrr3r1NotImplemented)r7rnd1nd2nd3Znd4Znd5Znd6rKrr3sr5Zlndrr r r test_equality s2              zTestNormalDist.test_equalitycCsZ|jdd}t|}|||t|}|||tt|}|||dS)NB@@)rrcopyr3deepcopypickleloadsdumps)r7rr7r8r9r r r test_pickle_and_copy s    z#TestNormalDist.test_pickle_and_copycCsH|jj}|dd|dd|dd|dd|ddh}|t|ddS)Nrjr_rg.@rrcr|)rrr3rI)r7ZNDr:r r r test_hashability s,zTestNormalDist.test_hashabilitycCs"|jdd}|t|ddS)Nr<r=z NormalDist(mu=37.5, sigma=5.625))rrr3reprrr r r test_repr szTestNormalDist.test_reprN)r*r+r,rrr r rrrZskip_if_pgo_taskrrr&r)r+r.r/r0r;rCrDrFr r r r rS s& ' @ ? , rc@s eZdZeZddZddZdS)TestNormalDistPythoncCs|jtjd<dSr1rr modulesrZr r r r szTestNormalDistPython.setUpcCsttjd<dSr1r.r rIrZr r r tearDown szTestNormalDistPython.tearDownN)r*r+r,r5rrrKr r r r rG srGr9c@s eZdZeZddZddZdS)TestNormalDistCcCs|jtjd<dSr1rHrZr r r r szTestNormalDistC.setUpcCsttjd<dSr1rJrZr r r rK szTestNormalDistC.tearDownN)r*r+r,r:rrrKr r r r rL srLcCs|t|S)z&Used for doctest/unittest integration.)ZaddTestsrZ DocTestSuite)loaderZtestsignorer r r load_tests srO__main__)r!r")Or-rr?collections.abcr>rrrr@rr r<testrrrrrr.r rr r(r)Zimport_fresh_moduler5r:rr0r>rWr\rrrrrrrrrr rr2r=rDr_rpr~rrrrrrrrrrr"r6r7r:r;rZrfrirrrrrrrrrGr=rLrOr*mainr r r r s     :+ _ >@w-@4d>c' H @`d9 r: 1B%'Y%!