Files
aitsc/.venv/Lib/site-packages/sqlalchemy/testing/__pycache__/util.cpython-312.pyc

169 lines
21 KiB
Plaintext
Raw Normal View History

2025-02-23 09:07:52 +08:00
<EFBFBD>
AI<41>g;<00><01>L<00>ddlmZddlmZddlZddlZddlZddlmZddl Z ddl
Z
ddl
m Z ddl Z ddl Z ddlmZddlmZdd lmZd
d lmZd
d lmZd
d lmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dl m!Z!d
dl m"Z"d
dl m#Z#d
dl m$Z$e#sd<19>Z%e%xZ&Z'nejPZ&d<1A>Z'd<1B>Z)d5d<1C>Z*d<1D>Z+Gd<1E>de,<2C>Z-d <20>Z.d!<21>Z/d"<22>Z0d#<23>Z1d$<24>Z2d%<25>Z3e!d&<26><00>Z4d'<27>Z5d(<28>Z6d)<29>Z7d6d*<2A>Z8d+<2B>Z9Gd,<2C>d-e:<3A>Z;d.<2E>Z< d7d0<64>Z=d1<64>Z>d2<64>Z?d3<64>Z@ej<>d/d8d4<64><05>ZBy)9<>)<01> annotations)<01>dequeN)<01>chain)<01> getsizeof)<01>Any<6E>)<01>config)<01>mock<63>)<01>inspect)<01>
Connection)<01>Column)<01>DropConstraint)<01> DropTable)<01>ForeignKeyConstraint)<01>MetaData)<01>Table<6C><01>schema)<01>Integer<65><01> decorator)<01> defaultdict)<01>has_refcount_gc)<01>inspect_getfullargspecc<01>T<00>tj<00>tj<00>y<00>N)<02>gc<67>collect)<01>argss <20>AD:\wxxcx\tsccc\.venv\Lib\site-packages\sqlalchemy/testing/util.py<70>non_refcount_gc_collectr",s<00><00>
<EFBFBD>
<EFBFBD>
<EFBFBD> <0C>
<EFBFBD>
<EFBFBD>
<EFBFBD> <0C>c<01><00>yr<00>r%r#r!<00>lazy_gcr&5s<00><00> r#c#<01><><00><02>K<00>t<00>}ddl}|j|<01>|D]4<00>td|jdz<00>D]<00><03>j
<00><02>fd<04>f<02><01><00><00>6y<00>w)Nr<00><><EFBFBD><EFBFBD><EFBFBD>rc<01>(<00><02><00>j|<00><02>Sr)<01>dumps)<03>d<>pickle_<65>protocols <20><>r!<00><lambda>zpicklers.<locals>.<lambda>Bs<00><><00>7<EFBFBD>=<3D>=<3D><11>H<EFBFBD>+Er#)<06>set<65>pickle<6C>add<64>range<67>HIGHEST_PROTOCOL<4F>loads)<04>picklersr0r,r-s @@r!r5r59sU<00><><00><><00><12>u<EFBFBD>H<EFBFBD><11> <0C>L<EFBFBD>L<EFBFBD><16><18><1C><07><1D>b<EFBFBD>&<26>"9<>"9<>A<EFBFBD>"=<3D>><3E>H<EFBFBD><19>-<2D>-<2D>!E<>E<> E<>?<3F><1C>s<00>AAc<01>0<00>tj||<01><01>S)N)<01>k)<02>random<6F>choices)<02>
populationr7s r!<00>random_choicesr;Es<00><00> <11>><3E>><3E>*<2A><01> *<2A>*r#c<01><><00>t|t<00>r t||<01>S|tjdd|zz<00>zj tj <00>td|<01>z S)N<>1<>0<>
)<08>
isinstance<EFBFBD>float<61>round<6E>decimal<61>Decimal<61> to_integral<61> ROUND_FLOOR<4F>pow)<02>value<75>precs r!<00> round_decimalrJIs\<00><00><11>%<25><15><1F><14>U<EFBFBD>D<EFBFBD>!<21>!<21> <12>G<EFBFBD>O<EFBFBD>O<EFBFBD>C<EFBFBD>#<23><04>*<2A>$4<>5<> 5<> B<> B<><0F><1B><1B> <06> <0B>B<EFBFBD><04> <0A> <16>r#c<01>0<00>eZdZd<01>Zd<02>Zd<03>Zd<04>Zd<05>Zd<06>Zy)<08> RandomSetc<01>~<00>ttj|<00><00>}tj|<01>t |<01>Sr)<06>listr/<00>__iter__r8<00>shuffle<6C>iter)<02>self<6C>ls r!rOzRandomSet.__iter__Ts*<00><00> <10><13><1C><1C>d<EFBFBD>#<23> $<24><01><0E><0E><0E>q<EFBFBD><19><13>A<EFBFBD>w<EFBFBD>r#c<01><><00>tjdt|<00>dz
<00>}ttj |<00><00>|}|j |<02>|S)Nrr)r8<00>randint<6E>lenrNr/rO<00>remove)rR<00>index<65>items r!<00>popz RandomSet.popYsC<00><00><16><0E><0E>q<EFBFBD>#<23>d<EFBFBD>)<29>a<EFBFBD>-<2D>0<><05><13>C<EFBFBD>L<EFBFBD>L<EFBFBD><14>&<26>'<27><05>.<2E><04> <0C> <0B> <0B>D<EFBFBD><19><13> r#c<01>@<00>ttj||<01><00>Sr)rLr/<00>union<6F>rR<00>others r!r\zRandomSet.union_s<00><00><18><13><19><19>4<EFBFBD><15>/<2F>0<>0r#c<01>@<00>ttj||<01><00>Sr)rLr/<00>
differencer]s r!r`zRandomSet.differencebs<00><00><18><13><1E><1E><04>e<EFBFBD>4<>5<>5r#c<01>@<00>ttj||<01><00>Sr)rLr/<00> intersectionr]s r!rbzRandomSet.intersectiones<00><00><18><13>)<29>)<29>$<24><05>6<>7<>7r#c<01><00>t|<00>Sr)rL)rRs r!<00>copyzRandomSet.copyhs <00><00><18><14><EFBFBD>r#N) <09>__name__<5F>
__module__<EFBFBD> __qualname__rOrZr\r`rbrdr%r#r!rLrLSs <00><00><17>
<14> 1<>6<>8<>r#rLc<01><><00>tt<00>}|D]\}}||j|<04><00>t|<01>D]\}}||dD] }|||vs<01> y<00>y)zATrue if the given sorting conforms to the given partial ordering.NFT)rr/r1<00> enumerate)<08>tuples<65>sorted_elements<74>deps<70>parent<6E>child<6C>i<>node<64>ns r!<00>conforms_partial_orderingrrlse<00><00> <17>s<EFBFBD> <1B>D<EFBFBD><1F> <0A><06><05> <0C>V<EFBFBD> <0C><18><18><15><1F> <20><1C>_<EFBFBD>-<2D><07><01>4<EFBFBD> <20><11><12>$<24>A<EFBFBD><13>t<EFBFBD>A<EFBFBD>w<EFBFBD><EFBFBD><1C>%<25>.<2E>
r#c<01><><00><04><05>tt<00><00>|D]\}}<03>|j|<02><00><00><04>fd<01><08>t<00>|<01><00>S)Nc3<01><><00>K<00>t|<00>dk(rt|<00><00><01>y|D]G}t|<00>j|g<01>}|j <00>|<00>r<01>3<00>|<02>D]
}|g|z<00><01><00> <00>Iy<00>w)Nr)rVrNr/r`rb)<06>elements<74>elem<65>subset<65> sub_ordering<6E>_all_orderings<67>edgess <20><>r!ryz-all_partial_orderings.<locals>._all_orderingssk<00><><00><><00> <0E>x<EFBFBD>=<3D>A<EFBFBD> <1D><16>x<EFBFBD>.<2E> <20> <20><04><1C>X<EFBFBD><1D>1<>1<>4<EFBFBD>&<26>9<><06><1D>*<2A>*<2A>5<EFBFBD><14>;<3B>7<>(6<>v<EFBFBD>(><3E> <0C>#<23>f<EFBFBD>|<7C>3<>3<>)?<3F>!<21>s <00>AA-<01>A-)rr/r1rQ)rjrurmrnryrzs @@r!<00>all_partial_orderingsr{zsD<00><><00> <17><03> <1C>E<EFBFBD><1F> <0A><06><05> <0A>e<EFBFBD> <0C><18><18><16> <20> <20>4<> <10><0E>x<EFBFBD>(<28> )<29>)r#c<01><><00> ||_|S#t$rEtj|j|j
||j |j<00>}Y|SwxYw)acReturn a function with a given __name__.
Will assign to __name__ and return the original function if possible on
the Python implementation, otherwise a new function will be constructed.
This function should be phased out as much as possible
in favor of @decorator. Tests that "generate" many named tests
should be modernized.
)re<00> TypeError<6F>types<65> FunctionType<70>__code__<5F> __globals__<5F> __defaults__<5F> __closure__)<02>fn<66>names r!<00>function_namedr<64><00>sX<00><00>
<EFBFBD><1A><02> <0B>
<0E>I<EFBFBD><49> <15>
<EFBFBD> <12> <1F> <1F> <0E>K<EFBFBD>K<EFBFBD><12><1E><1E><14>r<EFBFBD><EFBFBD><EFBFBD><02><0E><0E>
<EFBFBD><02> <0E>I<EFBFBD> 
<EFBFBD>s<00> <00>A
A<03>Ac<01><><00>|j<00>} ||g|<02><01>i|<03><01>}|jddd<01>|S#tj<00>}|j|<06>}|s<01>|cYSxYw)aRun the given function under the given contextmanager,
simulating the behavior of 'with' to support older
Python versions.
This is not necessary anymore as we have placed 2.6
as minimum Python version, however some tests are still using
this structure.
N)<04> __enter__<5F>__exit__<5F>sys<79>exc_info)<08>ctxr<78><00>arg<72>kw<6B>obj<62>resultr<74><00>raise_s r!<00>run_as_contextmanagerr<72><00>sj<00><00> <0E>-<2D>-<2D>/<2F>C<EFBFBD>
<1A><13>C<EFBFBD>$<24>#<23>$<24><12>$<24><06> <0B> <0C> <0C>T<EFBFBD>4<EFBFBD><14>&<26><15> <0A><><1A><16><<3C><<3C>><3E><08><1D><13><1C><1C>x<EFBFBD>(<28><06><15> <11><19>M<EFBFBD>s <00> 3<00>*Ac<01>><00>|D<00>chc] }t|<01><00><02>c}Scc}w)z<>Converts the results of sql execution into a plain set of column tuples.
Useful for asserting the results of an unordered query.
<20><01>tuple)<02>results<74>rows r!<00>rowsetr<74><00>s <00><00> #*<2A> *<2A>'<27>3<EFBFBD>E<EFBFBD>#<23>J<EFBFBD>'<27> *<2A>*<2A><> *s<00>c<01><00>J|<00><00>rr%)<01>msgs r!<00>failr<6C><00>s <00><00><15>#<23><15>5r#c<01>p<00>ddlm}tj<00>}|d}t |dd<05>}||_ ||i|<02><01>|j <00>|jj}|r2t||<07>|j<00>j<00>||_St|tj<00>||_S#|j <00>|jj}|r2t||<07>|j<00>j<00>||_wt|tj<00>||_wxYw)ztProvide bound MetaData for a single test, dropping afterwards.
Legacy; use the "metadata" pytest fixture.
r)<01>fixturesr<00>metadataN)<0E>r<>rr<00>getattrr<72><00>close_all_sessions<6E>base<73>_connection_fixture_connection<6F>drop_all_tables_from_metadata<74>get_transaction<6F>commitr <00>db)r<>r r<>r<>r<>rR<00> prev_meta<74>cfcs r!<00>provide_metadatar<61><00>s <00><00><1B><15><EFBFBD><EFBFBD> <20>H<EFBFBD> <0F><01>7<EFBFBD>D<EFBFBD><17><04>j<EFBFBD>$<24>/<2F>I<EFBFBD><1C>D<EFBFBD>M<EFBFBD>"<22><11>4<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD> <11>#<23>#<23>%<25><17>m<EFBFBD>m<EFBFBD>:<3A>:<3A><03> <0E> *<2A>(<28>C<EFBFBD> 8<>
<10> <1F> <1F> !<21> (<28> (<28> *<2A>"<22><04> <0A> *<2A>(<28>F<EFBFBD>I<EFBFBD>I<EFBFBD> ><3E>!<21><04> <0A><># <11>#<23>#<23>%<25><17>m<EFBFBD>m<EFBFBD>:<3A>:<3A><03> <0E> *<2A>(<28>C<EFBFBD> 8<>
<10> <1F> <1F> !<21> (<28> (<28> *<2A>"<22><04> <0A> *<2A>(<28>F<EFBFBD>I<EFBFBD>I<EFBFBD> ><3E>!<21><04> <0A>s <00>B8<00>8A=D5c
<01>J<00><02>t<00>}|D]<00>|j<00><02><00>t|<01>}tj|D<00><02>cgc]2<00>dj <00>fd<02>|D<00><00>ft <00>fd<03>|D<00><00>z<00><02>4c}ddt|<01>zzdj |<01>d<07><02>Scc}w)aqA facade around @testing.combinations() oriented towards boolean
keyword-based arguments.
Basically generates a nice looking identifier based on the keywords
and also sets up the argument names.
E.g.::
@testing.flag_combinations(
dict(lazy=False, passive=False),
dict(lazy=True, passive=False),
dict(lazy=False, passive=True),
dict(lazy=False, passive=True, raiseload=True),
)
def test_fn(lazy, passive, raiseload): ...
would result in::
@testing.combinations(
("", False, False, False),
("lazy", True, False, False),
("lazy_passive", True, True, False),
("lazy_passive", True, True, True),
id_="iaaa",
argnames="lazy,passive,raiseload",
)
def test_fn(lazy, passive, raiseload): ...
<20>_c3<01>H<00>K<00>|]}<01>j|d<00>s<01>|<01><01><00>y<01>w<01>FN<46><01>get<65><03>.0r7r+s <20>r!<00> <genexpr>z$flag_combinations.<locals>.<genexpr>s<00><><00><><00>9<><14>A<EFBFBD><11><15><15>q<EFBFBD>%<25><1F>a<EFBFBD><14>s<00>"<01>"c3<01>B<00>K<00>|]}<01>j|d<00><00><01><00>y<01>wr<>r<>r<>s <20>r!r<>z$flag_combinations.<locals>.<genexpr>s<00><><00><><00>2<>T<EFBFBD><01>A<EFBFBD>E<EFBFBD>E<EFBFBD>!<21>U<EFBFBD>O<EFBFBD>T<EFBFBD>s<00>ro<00>a<>,)<02>id_<64>argnames)r/<00>update<74>sortedr <00> combinations<6E>joinr<6E>rV)r<><00>keysr+s `r!<00>flag_combinationsr<73><00>s<><00><><00>> <0F>5<EFBFBD>D<EFBFBD> <19><01> <0C> <0B> <0B>A<EFBFBD><0E><1A> <12>$<24><<3C>D<EFBFBD> <11> <1E> <1E>"<22>
<EFBFBD>"<22><01><11>X<EFBFBD>X<EFBFBD>9<><14>9<> 9<> ;<3B><13>2<>T<EFBFBD>2<>2<> 3<>!<21>
<EFBFBD>
<10>3<EFBFBD><13>T<EFBFBD><19>?<3F> #<23><14><18><18>$<24><1E> <06><06><>
s<00>7B c <01><00><00>t<00><00>}<00>|dD<00>cgc]}tj<00><00><02>c}<03>}<04>fd<02>}tjt t |<04><00>D<00>cgc] }||<06>f<01><02> c}i|<01><01>Scc}wcc}w)Nrc<01>*<00><01><00><00><02>fd<01>}d<02>z|_|S)Nc<01><00><02><00>di|<00><01><01>S)Nr%r%)r<><00>lambda_arg_sets<74>poss <20><>r!<00>fixturez<lambda_combinations.<locals>.create_fixture.<locals>.fixture)s<00><><00>"<22>(<28>R<EFBFBD>(<28><13>-<2D> -r#z fixture_%3.3d)re)r<>r<>r<>s` <20>r!<00>create_fixturez+lambda_combinations.<locals>.create_fixture(s<00><><00> .<2E>+<2B>S<EFBFBD>0<><07><18><16>r#)rr
<00>Mockr r<>r2rV)r<>r<>r r<><00>arg_setsr<73>ros` r!<00>lambda_combinationsr<73>#s<><00><><00> !<21>/<2F> 2<>D<EFBFBD><1E><04>Q<EFBFBD><07> @<40><07><13><14><19><19><1B><07> @<40>A<>H<EFBFBD><17> <12> <1E> <1E>(-<2D>c<EFBFBD>(<28>m<EFBFBD>(<<3C> =<3D>(<<3C>1<EFBFBD>><3E>!<21> <1C>
<1E>(<<3C> =<3D> <06>AC<41> <06><06><>!A<01><>
>s <00>A6<08>A;c <01><00>t|<00>d}|D<00>cic]}||j|<03><00><02>}}t|j<00>}|j |<01>t j |j|<05>}|di|<04><01>Scc}w)z<>Given a no-arg lambda and a namespace, return a new lambda that
has all the values filled in.
This is used so that we can have module-level fixtures that
refer to instance-level variables using lambdas.
rr%)rrZ<00>dictr<74>r<>r~rr<>)<07>__fnr<6E><00>pos_argsr<73><00> pass_pos_args<67>glb<6C>new_fns r!<00>resolve_lambdar<61>4sx<00><00>&<26>d<EFBFBD>+<2B>A<EFBFBD>.<2E>H<EFBFBD>19<31>:<3A><18>#<23>S<EFBFBD>"<22>&<26>&<26><13>+<2B>%<25><18>M<EFBFBD>:<3A>
<0E>t<EFBFBD><1F><1F>
<20>C<EFBFBD><07>J<EFBFBD>J<EFBFBD>r<EFBFBD>N<EFBFBD> <12> <1F> <1F><04> <0A> <0A>s<EFBFBD> 3<>F<EFBFBD> <11> "<22>M<EFBFBD> "<22>"<22><> ;s<00>A<c<01><00><00><00>fd<01>}|S)z&Provide MetaData for a pytest fixture.c<01>H<00><01><00><00>fd<01>}tj<00><02><02>|<01>S)Nc3<01>$<00>K<00>tj<00>x}|_ <00>||<01>}|jtj
<00>|<02><02>|j tj
<00>y#|j tj
<00>wxYw<01>wr)rrr<><00>
create_allr r<><00>drop_all)rRr<>r<>r<>s <20>r!<00>run_ddlz3metadata_fixture.<locals>.decorate.<locals>.run_ddlIsh<00><><00><><00>'-<2D><EFBFBD><EFBFBD>'8<> 8<>H<EFBFBD>t<EFBFBD>}<7D> -<2D><1B>D<EFBFBD>(<28>+<2B><06><18>#<23>#<23>F<EFBFBD>I<EFBFBD>I<EFBFBD>.<2E><1D> <0C><18>!<21>!<21>&<26>)<29>)<29>,<2C><><08>!<21>!<21>&<26>)<29>)<29>,<2C>s<00>B<01>,A,<00> B<01>,!B <03> B)<01>scope)r r<>)r<>r<><00>ddls` <20>r!<00>decoratez"metadata_fixture.<locals>.decorateHs <00><><00> -<2D>)<29>v<EFBFBD>~<7E>~<7E>C<EFBFBD>(<28><17>1<>1r#r%)r<>r<>s` r!<00>metadata_fixturer<65>Es<00><><00> 2<> <14>Or#c<01>$<00><00>t<00>fd<01><08>}|S)ziForce the given table names to be dropped after test complete,
isolating for foreign key cycles
c<01><><00><01> ||i|<02><01>ttjttj<00><00><03><01>S#ttjttj<00><00><03><01>wxYw)N)<01> include_names)<04>drop_all_tablesr r<>r )r<>r r<><00>namess <20>r!<00>gozforce_drop_names.<locals>.go_sG<00><><00> P<01><15>t<EFBFBD>?<3F>r<EFBFBD>?<3F> <1B>F<EFBFBD>I<EFBFBD>I<EFBFBD>w<EFBFBD>v<EFBFBD>y<EFBFBD>y<EFBFBD>'9<><15> O<><4F>O<EFBFBD>F<EFBFBD>I<EFBFBD>I<EFBFBD>w<EFBFBD>v<EFBFBD>y<EFBFBD>y<EFBFBD>'9<><15> O<>s <00>><00>5A3r)r<>r<>s` r!<00>force_drop_namesr<73>Ys <00><><00> <0F>P<01><0F>P<01> <0E>Ir#c<01> <00>eZdZdZd<02>Zd<03>ZeZy)<05>adictz,Dict keys available as attributes. Shadows.c<01>X<00> ||S#t$rtj||<01>cYSwxYwr)<03>KeyErrorr<72><00>__getattribute__)rR<00>keys r!r<>zadict.__getattribute__ls3<00><00> 4<><17><03>9<EFBFBD> <1C><><17> 4<><17>(<28>(<28><14>s<EFBFBD>3<> 3<> 4<>s <00><00>)<03>)c<01>D<00>t|D<00>cgc]}||<00><02> c}<02>Scc}wrr<>)rRr<>r<>s r!<00>__call__zadict.__call__rs#<00><00><14>4<EFBFBD>0<>4<EFBFBD>C<EFBFBD>d<EFBFBD>3<EFBFBD>i<EFBFBD>4<EFBFBD>0<>1<>1<><31>0s<00> N)rerfrg<00>__doc__r<5F>r<><00>get_allr%r#r!r<>r<>is<00><00>6<>4<> 2<><17>Gr#r<>c<01><><00><00><04>ddlm<01><00><04>fd<03>}t|t<00>s"|j <00>5}||<03>ddd<00>y||<01>y#1swYyxYw)Nr)<01>enginesc<01>
<00><02><00>jj|<00>|jjs4ddlm}|j dd<04><05>5<00>j|<00>ddd<00>y<00>j|<00>y#1swYyxYw)Nr)<01>
assertionszCan't sort tablesF)<01>assert_)<08>testing_reaper<65>prepare_for_drop_tables<65>dialect<63>supports_alterr<72>r<><00>expect_warningsr<73>)<04>
connectionr<EFBFBD>r<>r<>s <20><>r!r<>z)drop_all_tables_from_metadata.<locals>.go{sv<00><><00><0F><1E><1E>6<>6<>z<EFBFBD>B<><19>!<21>!<21>0<>0<> $<24><1B>+<2B>+<2B>#<23>U<EFBFBD>,<2C><0E><19>!<21>!<21>*<2A>-<2D><0E><0E>
<15> <1D> <1D>j<EFBFBD> )<29> <0E><0E>s <00> A9<03>9B)r<>r<>r@r <00>begin)r<><00>engine_or_connectionr<6E>r<>r<>s` @r!r<>r<>xsI<00><><00><19> *<2A> <16>*<2A>J<EFBFBD> 7<> !<21> '<27> '<27> )<29>Z<EFBFBD> <0E>z<EFBFBD>N<EFBFBD>*<2A> )<29> <0B> <1F> <20>*<2A> )<29>s <00> A
<03>
Arc <01><><00>|<04> t|<04>}|<02>|dk(sJd<02><00>|f}|j<00>5}t|j|<03><03><00>D]<5D>\}}|r?|<04>|d|vr<01>|j t t |dt<00>|d<00><06><00><00><00>G|s<01>J|jjs<01>a|D]<5D>\}} |<04>|d|vr<01>t |dt<00>tdt<00>tdt<00>|d<00><06>}
|j tt|
jjg|
jj g| <09> <09><00><00><00><><00><01> ddd<00>y#1swYyxYw)
Nrz2consider_schemas and schema are mutually exclusive)<01>consider_schemasrrr<00>x<>y)r<>)r/r<><00>reversed<65>%sort_tables_on_foreign_key_dependency<63>executerrrr<>r<>rrrr<00>cr<63>r<>) <0B>engine<6E> inspectorrr<>r<><00>conn<6E> table_key<65>fkcs<63>t_key<65>fkc<6B>tbs r!r<>r<><00>sf<00><00><15> <20><1B>M<EFBFBD>*<2A> <0A> <0A><19><1F>$
<EFBFBD>
<EFBFBD> @<01> ?<3F> @<01>
<EFBFBD>#<23>9<EFBFBD><18> <0F><1C><1C><1E>4<EFBFBD>'<27> <15> ;<3B> ;<3B>!1<> <<3C> <0E>
<EFBFBD>O<EFBFBD>I<EFBFBD>t<EFBFBD>
<19>!<21>-<2D>!<21>!<21> <0C>M<EFBFBD>9<><1C><14> <0C> <0C><1D><1D>i<EFBFBD><01>l<EFBFBD>H<EFBFBD>J<EFBFBD>y<EFBFBD><11>|<7C>L<><16><12>
<16><1D>~<7E>~<7E>4<>4<><1C>"&<26>J<EFBFBD>E<EFBFBD>3<EFBFBD>%<25>1<>!<21>!<21>H<EFBFBD>M<EFBFBD>9<> <20><1E><1D>a<EFBFBD><08> <20>
<EFBFBD><1E>s<EFBFBD>G<EFBFBD>,<2C><1E>s<EFBFBD>G<EFBFBD>,<2C>$<24>Q<EFBFBD>x<EFBFBD> <16>B<EFBFBD><19>L<EFBFBD>L<EFBFBD>&<26>0<>"<22>$<24>$<24>&<26>&<26><18>B<EFBFBD>D<EFBFBD>D<EFBFBD>F<EFBFBD>F<EFBFBD>8<EFBFBD>#<23>N<><1A><16>#'<27>'
<EFBFBD>
<18><1E><1E>s<00>A%E<03>B8E<03>E c<01>$<00><00>t<00>fd<01><08>}|S)Nc<01>`<00><01> ||i|<02><01><01>j<00>S#<00>j<00>wxYwr)<01>_clear)r<>r<>r<><00> event_clss <20>r!r<>z!teardown_events.<locals>.decorate<74>s,<00><><00> <1F><15>s<EFBFBD>><3E>b<EFBFBD>><3E> <15> <1C> <1C> <1E><>I<EFBFBD> <1C> <1C> <1E>s<00><00>-r)r r<>s` r!<00>teardown_eventsr <00>s<00><><00><0E><1F><0F><1F> <14>Or#c <01><><00><02><03><04><05>d<01>}ttttttt|t
tt ti<06>t <00><00>td<02><00><03><02><03><04>fd<03><08><00>|<00>S)z<>Returns the approximate memory footprint an object and all of its
contents.
source: https://code.activestate.com/recipes/577504/
c<01>H<00>tj|j<00><00>Sr)r<00> from_iterable<6C>items)r+s r!<00> dict_handlerz total_size.<locals>.dict_handler<65>s<00><00><14>"<22>"<22>1<EFBFBD>7<EFBFBD>7<EFBFBD>9<EFBFBD>-<2D>-r#rc
<01><><00><04>t|<00><00>vry<01>jt|<00><00>t|<00><05>}<01>j<00>D]2\}}t ||<02>s<01>|t t <00>||<00><00><00>z }|S|S)Nr)<07>idr1rrr@<00>sum<75>map)<08>o<>s<>typ<79>handler<65> all_handlers<72> default_size<7A>seen<65>sizeofs <20><><EFBFBD><EFBFBD>r!rztotal_size.<locals>.sizeof<6F>sv<00><><00> <0A>a<EFBFBD>5<EFBFBD>D<EFBFBD>=<3D><14> <0C><08><08><12>A<EFBFBD><15><0F> <15>a<EFBFBD><1C> &<26><01>(<28>.<2E>.<2E>0<>L<EFBFBD>C<EFBFBD><17><19>!<21>S<EFBFBD>!<21><11>S<EFBFBD><13>V<EFBFBD>W<EFBFBD>Q<EFBFBD>Z<EFBFBD>0<>1<>1<><01><15><10><08> 1<><11>r#)r<>rQrNrr<>r/<00> frozensetr)rrrrrrs @@@@r!<00>
total_sizer <00>sR<00><><00>.<2E> <0E>t<EFBFBD> <0C>d<EFBFBD> <0A>t<EFBFBD> <0C>l<EFBFBD> <0B>T<EFBFBD><11>4<EFBFBD> <06>L<EFBFBD> <0F>5<EFBFBD>D<EFBFBD><1C>Q<EFBFBD><<3C>L<EFBFBD>
<11> <12>!<21>9<EFBFBD>r#c<01><><00>|g}t<00>}d}|rB|jd<01>}||ur|dz }n$t|t<00>r|rt |<04>|gz|z}|r<01>B|S)z<>given a cache key tuple, counts how many instances of actual
tuples are found.
used to alert large jumps in cache key complexity.
rr)<05>objectrZr@r<>rN)<05>tup<75>stack<63>sentinel<65> num_elementsrvs r!<00>count_cache_key_tuplesr'<00>sh<00><00><11>E<EFBFBD>E<EFBFBD><15>x<EFBFBD>H<EFBFBD><14>L<EFBFBD>
<0F><14>y<EFBFBD>y<EFBFBD><11>|<7C><04> <0F>8<EFBFBD> <1B> <18>A<EFBFBD> <1D>L<EFBFBD> <17><04>e<EFBFBD> $<24><13><1C>T<EFBFBD>
<EFBFBD>h<EFBFBD>Z<EFBFBD>/<2F>%<25>7<><05> <10> <18>r#c #<01>K<00>tj<00>}d<00><01>tj<00>|z
}||kDr& |<01>tjd|d<02>d|<00>d<04><05>yy#tjd|d<02>d|<00>d<04><05>wxYw<01>w)Nztest took too long (z.4fz seconds > <20>))<03>timer <00> skip_test)<04>seconds<64>cleanup<75>now<6F>secs r!<00>skip_if_timeoutr0s<><00><00><><00> <0F>)<29>)<29>+<2B>C<EFBFBD> <09>
<0E>)<29>)<29>+<2B><03>
<1B>C<EFBFBD>
<EFBFBD>W<EFBFBD>}<7D> <0E> <13>I<EFBFBD> <12> <1C> <1C>&<26>s<EFBFBD>3<EFBFBD>i<EFBFBD>{<7B>7<EFBFBD>)<29>1<EFBFBD>E<> <0E> <15><> <13> <1C> <1C>&<26>s<EFBFBD>3<EFBFBD>i<EFBFBD>{<7B>7<EFBFBD>)<29>1<EFBFBD>E<> <0E>s<00>5B<01>A<00>B<01>A=<03>=B)r)<01>function)NrN)r,rAr-r)C<>
__future__r<00> collectionsr<00>
contextlibrCr<00> itertoolsrr8r<>rr*r~<00>typingrr<>r r
r rr rrrrrrr<00>sql<71> sql.sqltypesr<00>utilrrrrr"<00>
gc_collectr&rr5r;rJr/rLrrr{r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r r r'<00>contextmanagerr0r%r#r!<00><module>r<s6<00><01>#<23><1D><11><0E> <09><1B> <0A>
<EFBFBD><19> <0B> <0C><16><14><12><16><1F><1B>#<23><1E>)<29><1D><1A><18>"<22><1C><1E>"<22>)<29><17><15>3<>2<>J<EFBFBD><17><14><1A><1A>J<EFBFBD> <0A> F<01>+<2B><16><1F><03><1F>2 <14>*<2A>$<0E>(<1A>2+<2B><16> <0B>("<22> <0B>("<22>V.<06>b<06>"#<23>"<14>( <0E> <17>D<EFBFBD> <17>!<21>4 <10><1C><16> 5<16>p<14>#<15>L<18>, <0C><1A><1A> <0E><1B> r#