L iD1zddlmZddlZddlZddlZddlmZddlZddlZejjdZ ejjdxse Z ejjdZ e xse ZejjdZexsejjdZejjd Zejjd Zd Zd ZGd deZeedrGddeZee_eZndZGddeZGddeZdZy))print_functionN)wrapsGITHUB_ACTIONSTRAVISAPPVEYORGREENLET_MANYLINUXGREENLET_SKIP_LEAKCHECKS GREENLET_SKIP_FAILING_LEAKCHECKS GREENLET_ONLY_FAILING_LEAKCHECKScd|_|S)a Ignore the given object during leakchecks. Can be applied to a method, in which case the method will run, but will not be subject to leak checks. If applied to a class, the entire class will be skipped during leakchecks. This is intended to be used for classes that are very slow and cause problems such as test timeouts; typically it will be used for classes that are subclasses of a base class and specify variants of behaviour (such as pool sizes). T)ignore_leakcheckfuncs ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/greenlet/tests/leakcheck.pyignores_leakcheckrLs!D KcVd|_trtjd|}|S)z2 Mark that the function is known to leak. TzSkipping known failures)fails_leakcheckSKIP_FAILING_LEAKCHECKSunittestskiprs rrr[s* D7x}}67= Krc eZdZy)LeakCheckErrorN)__name__ __module__ __qualname__rrrrdsrr getobjectsceZdZdZdZy)_MockGCc,tjdS)Nr)sysrselfs r get_objectsz_MockGC.get_objectsls>>!$ $rc"tt|SN)getattrgc)r$names r __getattr__z_MockGC.__getattr__ns2t$ $rN)rrrr%r+rrrr r ks  % %rr c|S)a Decorator for a function that is known to fail when running strict (``sys.getobjects()``) leakchecks. This type of leakcheck finds all objects, even those, such as strings, which are not tracked by the garbage collector. rrs rfails_strict_leakcheckr-ss  rceZdZdZdZy)!ignores_types_in_strict_leakcheckc||_yr')types)r$r1s r__init__z*ignores_types_in_strict_leakcheck.__init__~s  rc(|j|_|Sr')r1leakcheck_ignore_types)r$rs r__call__z*ignores_types_in_strict_leakcheck.__call__s&*jj# rN)rrrr2r5rrrr/r/}s rr/cDeZdZdZdZdZdZdZdZdZ dZ d Z d Z y ) _RefCountCheckerr) uop_executorcX||_||_g|_i|_d|_d|_y)NrF)testcasefunctiondeltas peak_stats ignored_types needs_setUp)r$r:r;s rr2z_RefCountChecker.__init__s0     !rc||uryt|}|t|jk(r' |jj|}|t ur|ry|j jD]}||usy||jvs&||jvs|j|jvryy#t$r!|jj |dk(}YwxYw)NFrT) type_include_object_p__eq__AttributeError__cmp__NotImplemented__dict__valuesr> IGNORED_TYPESrIGNORED_TYPE_NAMES)r$objkindexact_method_equalsxs rrBz"_RefCountChecker._include_object_ps $;Cy 4../ / O&*&<&<&C&CC&H##.8=P%%' Aax  D&& &t)))}} 7 77/" O'+&<&<&D&DS&IQ&N#  OsB++'CCcZtjd|j|jS)N)limitr=filter)objgraphgrowthr=rBr#s r_growthz_RefCountChecker._growths$Tdoo&*&<&<> >rc|syg}td|D}|D]\}}}|jd||||fz dj|}|S)Nzc3:K|]\}}}t|ywr')len).0r*_s r z0_RefCountChecker._report_diff..s7*$1CI7sz %-*s%9d %+9d )maxappendjoin)r$rSlineswidthr*countdeltadiffs r _report_diffz_RefCountChecker._report_diffsd1777"( G D% LL5$u*EE F Gyy rctj}tj|jr+|jj d|j_ |j|jg|i||jj|jjd|j_d|_|rtjyy#|jj|jjd|j_d|_|rtjwwxYw)NFT) r) isenableddisabler?r:setUp skipTearDownr;tearDown doCleanupsenable)r$argskwargs gc_enableds r _run_testz_RefCountChecker._run_tests\\^     MM   !).DMM &  DMM$-- 9$ 9& 9 MM " " $ MM $ $ &)-DMM &#D   MM " " $ MM $ $ &)-DMM &#D  s ! C%%A%E cdtjvr!tjdjdtjvr!tjdj|jS)Nurlparsez urllib.parse)r"modules clear_cacherTr#s r _growth_afterz_RefCountChecker._growth_aftersR  $ KK # / / 1 S[[ ( KK ' 3 3 5||~rct|j}|sytjrtdtj|ddddgk(rt |dvry|ddgdk(ryt |d k\rt |d ddk(ryt |d k\r@|d dkDr8|d |dk(r-|d|dk(r"|j |}td |d|t |dddks(t |d ddks|d djddk\rd}nd}t ||k\r td |d|j |y)NTz Generated uncollectable garbage r)F)rrrryzrefcount increased by r[rx )r<r)garbagerrWsumrdra)r$rSr<rcrPs r _check_deltasz_RefCountChecker._check_deltassZ  :: !UV V "#;1a& S[F%: "#;) # v;! F23K 0A 5 v;! r Q6":3KPVWYPZ^deg^hPh$$V,D 64!PQ Q vbc{ q Crs $4$9VBC[=N=Nq=QUV=VEE v;%  $*$($5$5f$="?@ @ rc4tdD]}tjt|jdd}|rd|j _t|jdd|_|j} |j|r_|j|||j}|jjtd|D|j|r_|rtd|jd y#t$r|sYywxYw) NryrFTr4rc3&K|] }|d yw)rxNr)rXstats rrZz,_RefCountChecker.__call__..<s'CDQ'Csz Expected z to leak but it did not.)ranger)collectr(r;r:expect_greenlet_leakr>rTrrprur<r]rr)r$rmrnrYexpect_failurerSs rr5z_RefCountChecker.__call__)sq A JJL !0A5I 15DMM .$T]]4LbQ _$$V,tV,++- ""3'CF'C#DE $$V,$dmm%]^^  !" s "/b_rr7cXtddstrStfd}|S)Nr Fct|ddrtjdtr"tddstjdt |||S)Nr Fz$This class ignored during leakchecksrz(Only running tests that fail leakchecks.)r(rSkipTestONLY_FAILING_LEAKCHECKSr7)r$rmrnmethods rwrapperzwrap_refcount..wrapperHsZ 4+U 3##$JK K "76;Le+T##$NO O-f-dF;;r)r(SKIP_LEAKCHECKSr)rrs` r wrap_refcountrDs4v)51_  6]<< Nr) __future__rosr"r) functoolsrrrRenvirongetRUNNING_ON_GITHUB_ACTIONSRUNNING_ON_TRAVISRUNNING_ON_APPVEYOR RUNNING_ON_CIRUNNING_ON_MANYLINUXrrrrrAssertionErrorrhasattrobjectr r-r/r7rrrrrs&0& BJJNN+;<JJNN8,I0IjjnnZ0!8%8 zz~~&:;&T"**..9S*T**..)KL**..)KL  ^  3 %&% )HK,~_v~_@ r