Files
Home-AssistantConfig/deps/sqlalchemy/testing/__pycache__/requirements.cpython-34.pyc

361 lines
27 KiB
Plaintext
Raw Normal View History

2016-10-11 16:42:06 +00:00
<EFBFBD>
}<7D><>W<EFBFBD>M<00>@sVdZddlmZddlmZGdd<00>de<00>ZGdd<00>de<00>Zd S)
z<EFBFBD>Global database feature support policy.
Provides decorators to mark tests requiring specific feature support from the
target database.
External dialect test suites should subclass SuiteRequirements
to provide specific inclusion/exclusions.
<EFBFBD>)<01>
exclusions<EFBFBD>)<01>utilc@seZdZdS)<02> RequirementsN)<03>__name__<5F>
__module__<EFBFBD> __qualname__<5F>r r <00>E/tmp/pip-build-zkr322cu/sqlalchemy/sqlalchemy/testing/requirements.pyrs rc@s<>eZdZedd<00><00>Zedd<00><00>Zedd<00><00>Zedd<00><00>Zed d
<00><00>Zed d <00><00>Z ed d<00><00>Z
edd<00><00>Z edd<00><00>Z edd<00><00>Z edd<00><00>Zedd<00><00>Zedd<00><00>Zedd<00><00>Zedd<00><00>Zedd <00><00>Zed!d"<00><00>Zed#d$<00><00>Zed%d&<00><00>Zed'd(<00><00>Zed)d*<00><00>Zed+d,<00><00>Zed-d.<00><00>Zed/d0<00><00>Zed1d2<00><00>Zed3d4<00><00>Zed5d6<00><00>Zed7d8<00><00>Zed9d:<00><00>Z ed;d<<00><00>Z!ed=d><00><00>Z"ed?d@<00><00>Z#edAdB<00><00>Z$edCdD<00><00>Z%edEdF<00><00>Z&edGdH<00><00>Z'edIdJ<00><00>Z(edKdL<00><00>Z)edMdN<00><00>Z*edOdP<00><00>Z+edQdR<00><00>Z,edSdT<00><00>Z-edUdV<00><00>Z.edWdX<00><00>Z/edYdZ<00><00>Z0ed[d\<00><00>Z1ed]d^<00><00>Z2ed_d`<00><00>Z3edadb<00><00>Z4edcdd<00><00>Z5ededf<00><00>Z6edgdh<00><00>Z7edidj<00><00>Z8edkdl<00><00>Z9edmdn<00><00>Z:edodp<00><00>Z;edqdr<00><00>Z<edsdt<00><00>Z=edudv<00><00>Z>edwdx<00><00>Z?edydz<00><00>Z@ed{d|<00><00>ZAed}d~<00><00>ZBedd<><00><00>ZCed<>d<><00><00>ZDed<>d<><00><00>ZEed<>d<><00><00>ZFed<>d<><00><00>ZGed<>d<><00><00>ZHed<>d<><00><00>ZIed<>d<><00><00>ZJed<>d<><00><00>ZKed<>d<><00><00>ZLed<>d<><00><00>ZMed<>d<><00><00>ZNed<>d<><00><00>ZOed<>d<><00><00>ZPed<>d<><00><00>ZQed<>d<><00><00>ZRed<>d<><00><00>ZSed<>d<><00><00>ZTed<>d<><00><00>ZUed<>d<><00><00>ZVed<>d<><00><00>ZWed<>d<><00><00>ZXed<>d<><00><00>ZYed<>d<><00><00>ZZed<>d<><00><00>Z[ed<>d<><00><00>Z\d<>d<><00>Z]d<>d<><00>Z^ed<>d<><00><00>Z_ed<>d<><00><00>Z`d<>d<><00>Zad<>d<><00>Zbd<>S)<29><>SuiteRequirementscCs
tj<00>S)z/target platform can emit basic CreateTable DDL.)r<00>open)<01>selfr r r
<00> create_tableszSuiteRequirements.create_tablecCs
tj<00>S)z-target platform can emit basic DropTable DDL.)rr )r r r r
<00>
drop_table"szSuiteRequirements.drop_tablecCs
tj<00>S)z*Target database must support foreign keys.)rr )r r r r
<00> foreign_keys(szSuiteRequirements.foreign_keyscCs
tj<00>S)zR"target database must support ON UPDATE..CASCADE behavior in
foreign keys.)rr )r r r r
<00>on_update_cascade.sz#SuiteRequirements.on_update_cascadecCs
tj<00>S)zWtarget database must *not* support ON UPDATE..CASCADE behavior in
foreign keys.)r<00>closed)r r r r
<00>non_updating_cascade5sz&SuiteRequirements.non_updating_cascadecCs
tj<00>S)N)rr)r r r r
<00>deferrable_fks;sz SuiteRequirements.deferrable_fkscstj<00>fdd<00><00>S)Ncs<00>jjp<00>jjS)N)rZenabledrr )r r r
<00><lambda>Es z?SuiteRequirements.on_update_or_deferrable_fks.<locals>.<lambda>)r<00>only_if)r r )r r
<00>on_update_or_deferrable_fks?sz-SuiteRequirements.on_update_or_deferrable_fkscCs
tj<00>S)z;Target database must support self-referential foreign keys.)rr )r r r r
<00>self_referential_foreign_keysIsz/SuiteRequirements.self_referential_foreign_keyscCs
tj<00>S)z=Target database must support the DDL phrases for FOREIGN KEY.)rr )r r r r
<00>foreign_key_ddlOsz!SuiteRequirements.foreign_key_ddlcCs
tj<00>S)z3target database must support names for constraints.)rr )r r r r
<00>named_constraintsUsz#SuiteRequirements.named_constraintscCs
tj<00>S)z(Target database must support subqueries.)rr )r r r r
<00>
subqueries[szSuiteRequirements.subqueriescCs
tj<00>S)zRtarget database can render OFFSET, or an equivalent, in a
SELECT.
)rr )r r r r
<00>offsetaszSuiteRequirements.offsetcCs
tj<00>S)zWtarget database can render LIMIT and/or OFFSET using a bound
parameter
)rr )r r r r
<00>bound_limit_offsetisz$SuiteRequirements.bound_limit_offsetcCs
tj<00>S)z;Target database must support boolean expressions as columns)rr)r r r r
<00>boolean_col_expressionsqsz)SuiteRequirements.boolean_col_expressionscCs
tj<00>S)z,Target backends that support nulls ordering.)rr)r r r r
<00> nullsorderingwszSuiteRequirements.nullsorderingcCs
tj<00>S)z<>target database/driver supports bound parameters as column expressions
without being in the context of a typed column.
)rr)r r r r
<00>standalone_binds}sz"SuiteRequirements.standalone_bindscCs
tj<00>S)z5Target database must support INTERSECT or equivalent.)rr)r r r r
<00> intersect<63>szSuiteRequirements.intersectcCs
tj<00>S)z?Target database must support EXCEPT or equivalent (i.e. MINUS).)rr)r r r r
<00>except_<74>szSuiteRequirements.except_cCs
tj<00>S)z.Target database must support window functions.)rr)r r r r
<00>window_functions<6E>sz"SuiteRequirements.window_functionscCs
tj<00>S)z~target platform generates new surrogate integer primary key values
when insert() is executed, excluding the pk column.)rr )r r r r
<00>autoincrement_insert<72>sz&SuiteRequirements.autoincrement_insertcCs
tj<00>S)a#target platform will allow cursor.fetchone() to proceed after a
COMMIT.
Typically this refers to an INSERT statement with RETURNING which
is invoked within "autocommit". If the row can be returned
after the autocommit, then this rule can be open.
)rr )r r r r
<00>fetch_rows_post_commit<69>s z(SuiteRequirements.fetch_rows_post_commitcCstjdd<00>d<00>S)zatarget platform supports INSERT with no values, i.e.
INSERT DEFAULT VALUES or equivalent.cSs|jjjp|jjjS)N)<04>db<64>dialectZsupports_empty_insertZsupports_default_values)<01>configr r r
r<00>sz1SuiteRequirements.empty_inserts.<locals>.<lambda>zempty inserts not supported)rr)r r r r
<00> empty_inserts<74>s zSuiteRequirements.empty_insertscCs
tj<00>S)z.target platform supports INSERT from a SELECT.)rr )r r r r
<00>insert_from_select<63>sz$SuiteRequirements.insert_from_selectcCstjdd<00>d<00>S)z#target platform supports RETURNING.cSs |jjjS)N)r&r'Zimplicit_returning)r(r r r
r<00>sz-SuiteRequirements.returning.<locals>.<lambda>z)%(database)s %(does_support)s 'returning')rr)r r r r
<00> returning<6E>s zSuiteRequirements.returningcCs
tj<00>S)zwtarget platform supports a SELECT statement that has
the same name repeated more than once in the columns list.)rr )r r r r
<00>%duplicate_names_in_cursor_description<6F>sz7SuiteRequirements.duplicate_names_in_cursor_descriptioncCstjdd<00>d<00>S)z[Target database must have 'denormalized', i.e.
UPPERCASE as case insensitive names.cSs|jjj S)N)r&r'Zrequires_name_normalize)r(r r r
r<00>sz6SuiteRequirements.denormalized_names.<locals>.<lambda>z,Backend does not require denormalized names.)r<00>skip_if)r r r r
<00>denormalized_names<65>s z$SuiteRequirements.denormalized_namescCstjdd<00>d<00>S)zTtarget database must support multiple VALUES clauses in an
INSERT statement.cSs|jjj S)N)r&r'Zsupports_multivalues_insert)r(r r r
r<00>sz7SuiteRequirements.multivalues_inserts.<locals>.<lambda>z*Backend does not support multirow inserts.)rr-)r r r r
<00>multivalues_inserts<74>s z%SuiteRequirements.multivalues_insertscCs
tj<00>S)zw"target dialect implements the executioncontext.get_lastrowid()
method without reliance on RETURNING.
)rr )r r r r
<00>implements_get_lastrowid<69>sz*SuiteRequirements.implements_get_lastrowidcCs
tj<00>S)a="target dialect retrieves cursor.lastrowid, or fetches
from a database-side function after an insert() construct executes,
within the get_lastrowid() method.
Only dialects that "pre-execute", or need RETURNING to get last
inserted id, would return closed/fail/skip for this.
)rr)r r r r
<00>emulated_lastrowid<69>s
z$SuiteRequirements.emulated_lastrowidcCs
tj<00>S)z^"target platform includes a 'lastrowid' accessor on the DBAPI
cursor object.
)rr)r r r r
<00>dbapi_lastrowid<69>sz!SuiteRequirements.dbapi_lastrowidcCs
tj<00>S)z#Target database must support VIEWs.)rr)r r r r
<00>views<77>szSuiteRequirements.viewscCs
tj<00>S)zXTarget database must support external schemas, and have one
named 'test_schema'.)rr)r r r r
<00>schemas<61>szSuiteRequirements.schemascCstjdd<00>gd<00>S)z'Target database must support SEQUENCEs.cSs |jjjS)N)r&r'<00>supports_sequences)r(r r r
r sz-SuiteRequirements.sequences.<locals>.<lambda>zno sequence support)rr)r r r r
<00> sequencess zSuiteRequirements.sequencescCstjdd<00>gd<00>S)zgTarget database supports sequences, but also optionally
as a means of generating new PK values.cSs|jjjo|jjjS)N)r&r'r5<00>sequences_optional)r(r r r
rsz6SuiteRequirements.sequences_optional.<locals>.<lambda>z.no sequence support, or sequences not optional)rr)r r r r
r7s z$SuiteRequirements.sequences_optionalcCs
tj<00>S)N)rr)r r r r
<00>reflects_pk_namessz#SuiteRequirements.reflects_pk_namescCs
tj<00>S)N)rr )r r r r
<00>table_reflectionsz"SuiteRequirements.table_reflectioncCs|jS)z<>target database must support retrieval of the columns in a view,
similarly to how a table is inspected.
This does not include the full CREATE VIEW definition.
)r3)r r r r
<00>view_column_reflection sz(SuiteRequirements.view_column_reflectioncCs|jS)zTtarget database must support inspection of the full CREATE VIEW definition.
)r3)r r r r
<00>view_reflection*sz!SuiteRequirements.view_reflectioncCs|jS)N)r4)r r r r
<00>schema_reflection0sz#SuiteRequirements.schema_reflectioncCs
tj<00>S)N)rr )r r r r
<00>!primary_key_constraint_reflection4sz3SuiteRequirements.primary_key_constraint_reflectioncCs
tj<00>S)N)rr )r r r r
<00>!foreign_key_constraint_reflection8sz3SuiteRequirements.foreign_key_constraint_reflectioncCs
tj<00>S)N)rr )r r r r
<00>temp_table_reflection<sz'SuiteRequirements.temp_table_reflectioncCs
tj<00>S)z8target dialect supports listing of temporary table names)rr)r r r r
<00>temp_table_names@sz"SuiteRequirements.temp_table_namescCs
tj<00>S)z)target database supports temporary tables)rr )r r r r
<00>temporary_tablesEsz"SuiteRequirements.temporary_tablescCs
tj<00>S)z(target database supports temporary views)rr)r r r r
<00>temporary_viewsJsz!SuiteRequirements.temporary_viewscCs
tj<00>S)N)rr )r r r r
<00>index_reflectionOsz"SuiteRequirements.index_reflectioncCs
tj<00>S)z8target dialect supports reflection of unique constraints)rr )r r r r
<00>unique_constraint_reflectionSsz.SuiteRequirements.unique_constraint_reflectioncCs
tj<00>S)z<>target dialect raises IntegrityError when reporting an INSERT
with a primary key violation. (hint: it should)
)rr )r r r r
<00>$duplicate_key_raises_integrity_errorXsz6SuiteRequirements.duplicate_key_raises_integrity_errorcCs
tj<00>S)z3Target database must support VARCHAR with no length)rr )r r r r
<00>unbounded_varchar`sz#SuiteRequirements.unbounded_varcharcCs
tj<00>S)z<>Target database/dialect must support Python unicode objects with
non-ASCII characters represented, delivered as bound parameters
as well as in result rows.
)rr )r r r r
<00> unicode_datafszSuiteRequirements.unicode_datacCs
tj<00>S)zRTarget driver must support some degree of non-ascii symbol
names.
)rr)r r r r
<00> unicode_ddloszSuiteRequirements.unicode_ddlcCs
tj<00>S)z<>target dialect supports rendering of a date, time, or datetime as a
literal string, e.g. via the TypeEngine.literal_processor() method.
)rr)r r r r
<00>datetime_literalsvsz#SuiteRequirements.datetime_literalscCs
tj<00>S)zUtarget dialect supports representation of Python
datetime.datetime() objects.)rr )r r r r
<00>datetimeszSuiteRequirements.datetimecCs
tj<00>S)zftarget dialect supports representation of Python
datetime.datetime() with microsecond objects.)rr )r r r r
<00>datetime_microseconds<64>sz'SuiteRequirements.datetime_microsecondscCs
tj<00>S)zutarget dialect supports representation of Python
datetime.datetime() objects with historic (pre 1970) values.)rr)r r r r
<00>datetime_historic<69>sz#SuiteRequirements.datetime_historiccCs
tj<00>S)zQtarget dialect supports representation of Python
datetime.date() objects.)rr )r r r r
<00>date<74>szSuiteRequirements.datecCs
tj<00>S)zPtarget dialect accepts a datetime object as the target
of a date column.)rr )r r r r
<00>date_coerces_from_datetime<6D>sz,SuiteRequirements.date_coerces_from_datetimecCs
tj<00>S)zutarget dialect supports representation of Python
datetime.datetime() objects with historic (pre 1970) values.)rr)r r r r
<00> date_historic<69>szSuiteRequirements.date_historiccCs
tj<00>S)zQtarget dialect supports representation of Python
datetime.time() objects.)rr )r r r r
<00>time<6D>szSuiteRequirements.timecCs
tj<00>S)zbtarget dialect supports representation of Python
datetime.time() with microsecond objects.)rr )r r r r
<00>time_microseconds<64>sz#SuiteRequirements.time_microsecondscCs
tj<00>S)zttarget database/driver can allow BLOB/BINARY fields to be compared
against a bound parameter value.
)rr )r r r r
<00>binary_comparisons<6E>sz$SuiteRequirements.binary_comparisonscCs
tj<00>S)a!target backend supports simple binary literals, e.g. an
expression like::
SELECT CAST('foo' AS BINARY)
Where ``BINARY`` is the type emitted from :class:`.LargeBinary`,
e.g. it could be ``BLOB`` or similar.
Basically fails on Oracle.
)rr )r r r r
<00>binary_literals<6C>sz!SuiteRequirements.binary_literalscCs
tj<00>S)zRtarget backend has general support for moderately high-precision
numerics.)rr )r r r r
<00>precision_numerics_general<61>sz,SuiteRequirements.precision_numerics_generalcCs
tj<00>S)zbtarget backend supports Decimal() objects using E notation
to represent very small values.)rr)r r r r
<00>"precision_numerics_enotation_small<6C>sz4SuiteRequirements.precision_numerics_enotation_smallcCs
tj<00>S)zbtarget backend supports Decimal() objects using E notation
to represent very large values.)rr)r r r r
<00>"precision_numerics_enotation_large<67>sz4SuiteRequirements.precision_numerics_enotation_largecCs
tj<00>S)z<>target backend supports values with many digits on both sides,
such as 319438950232418390.273596, 87673.594069654243
)rr)r r r r
<00>*precision_numerics_many_significant_digits<74>sz<SuiteRequirements.precision_numerics_many_significant_digitscCs
tj<00>S)z<>A precision numeric type will return empty significant digits,
i.e. a value such as 10.000 will come back in Decimal form with
the .000 maintained.)rr)r r r r
<00>-precision_numerics_retains_significant_digits<74>sz?SuiteRequirements.precision_numerics_retains_significant_digitscCs
tj<00>S)z<>target backend will return native floating point numbers with at
least seven decimal places when using the generic Float type.
)rr )r r r r
<00>precision_generic_float_type<70>sz.SuiteRequirements.precision_generic_float_typecCs
tj<00>S)z<>target backend can return a floating-point number with four
significant digits (such as 15.7563) accurately
(i.e. without FP inaccuracies, such as 15.75629997253418).
)rr )r r r r
<00>floats_to_four_decimals<6C>sz)SuiteRequirements.floats_to_four_decimalscCs
tj<00>S)z<>target backend doesn't crash when you try to select a NUMERIC
value that has a value of NULL.
Added to support Pyodbc bug #351.
)rr )r r r r
<00>fetch_null_from_numericsz)SuiteRequirements.fetch_null_from_numericcCs
tj<00>S)zUTarget database must support an unbounded Text() "
"type such as TEXT or CLOB)rr )r r r r
<00> text_type szSuiteRequirements.text_typecCs
tj<00>S)zTtarget database can persist/return an empty string with a
varchar.
)rr )r r r r
<00>empty_strings_varcharsz'SuiteRequirements.empty_strings_varcharcCs
tj<00>S)zRtarget database can persist/return an empty string with an
unbounded text.)rr )r r r r
<00>empty_strings_textsz$SuiteRequirements.empty_strings_textcCs
tj<00>S)z;target driver must support the literal statement 'select 1')rr )r r r r
<00> selectone"szSuiteRequirements.selectonecCs
tj<00>S)z(Target database must support savepoints.)rr)r r r r
<00>
savepoints'szSuiteRequirements.savepointscCs
tj<00>S)z4Target database must support two-phase transactions.)rr)r r r r
<00>two_phase_transactions-sz(SuiteRequirements.two_phase_transactionscCs
tj<00>S)z'Target must support UPDATE..FROM syntax)rr)r r r r
<00> update_from3szSuiteRequirements.update_fromcCs
tj<00>S)a<>Target must support UPDATE where the same table is present in a
subquery in the WHERE clause.
This is an ANSI-standard syntax that apparently MySQL can't handle,
such as:
UPDATE documents SET flag=1 WHERE documents.title IN
(SELECT max(documents.title) AS title
FROM documents GROUP BY documents.user_id
)
)rr )r r r r
<00>update_where_target_in_subquery8s z1SuiteRequirements.update_where_target_in_subquerycCs
tj<00>S)zOtarget database must use a plain percent '%' as the 'modulus'
operator.)rr)r r r r
<00>mod_operator_as_percent_signGsz.SuiteRequirements.mod_operator_as_percent_signcCs
tj<00>S)atarget backend supports weird identifiers with percent signs
in them, e.g. 'some % column'.
this is a very weird use case but often has problems because of
DBAPIs that use python formatting. It's not a critical use
case either.
)rr)r r r r
<00>percent_schema_namesMs
z&SuiteRequirements.percent_schema_namescCs
tj<00>S)atarget backend supports ORDER BY a column label within an
expression.
Basically this::
select data as foo from test order by foo || 'bar'
Lots of databases including Postgresql don't support this,
so this is off by default.
)rr)r r r r
<00>order_by_label_with_expressionYs z0SuiteRequirements.order_by_label_with_expressioncCs
tj<00>S)zUTarget driver must support non-ASCII characters being passed at
all.
)rr )r r r r
<00>unicode_connectionshsz%SuiteRequirements.unicode_connectionscCs
tj<00>S)z<>Target driver must raise a DBAPI-level exception, such as
InterfaceError, when the underlying connection has been closed
and the execute() method is called.
)rr )r r r r
<00>graceful_disconnectsosz&SuiteRequirements.graceful_disconnectscCs
tj<00>S)z9Catchall for a large variety of MySQL on Windows failures)rr )r r r r
<00>skip_mysql_on_windowswsz'SuiteRequirements.skip_mysql_on_windowscCstjdd<00><00>S)aTest environment must allow ad-hoc engine/connection creation.
DBs that scale poorly for many connections, even when closed, i.e.
Oracle, may use the "--low-connections" option which flags this
requirement as not present.
cSs
|jjS)N)<02>optionsZlow_connections)r(r r r
r<00>sz2SuiteRequirements.ad_hoc_engines.<locals>.<lambda>)rr-)r r r r
<00>ad_hoc_engines|s z SuiteRequirements.ad_hoc_enginescCs tjd<00>S)N<>timing_intensive)r<00> requires_tag)r r r r
rl<00>sz"SuiteRequirements.timing_intensivecCs tjd<00>S)N<>memory_intensive)rrm)r r r r
rn<00>sz"SuiteRequirements.memory_intensivecCstjdd<00>d<00>S)z<>Mark tests that use threading and mock at the same time - stability
issues have been observed with coverage + python 3.3
cSstjo|jjS)N)rZpy3krj<00> has_coverage)r(r r r
r<00>sz7SuiteRequirements.threading_with_mock.<locals>.<lambda>z%Stability issues with coverage + py3k)rr-)r r r r
<00>threading_with_mock<63>s z%SuiteRequirements.threading_with_mockcCstjdd<00>d<00>S)z<>Test should be skipped if coverage is enabled.
This is to block tests that exercise libraries that seem to be
sensitive to coverage, such as Postgresql notice logging.
cSs
|jjS)N)rjro)r(r r r
r<00>sz/SuiteRequirements.no_coverage.<locals>.<lambda>z(Issues observed when coverage is enabled)rr-)r r r r
<00> no_coverage<67>s zSuiteRequirements.no_coveragecCsdS)NFr )r r(r r r
<00>_has_mysql_on_windows<77>sz'SuiteRequirements._has_mysql_on_windowscCsdS)NFr )r r(r r r
<00>_has_mysql_fully_case_sensitive<76>sz1SuiteRequirements._has_mysql_fully_case_sensitivecstj<00>fdd<00><00>S)Ncs <00>j<00> S)N)<01> _has_sqliter )r r r
r<00>sz*SuiteRequirements.sqlite.<locals>.<lambda>)rr-)r r )r r
<00>sqlite<74>szSuiteRequirements.sqlitecstj<00>fdd<00>d<00>S)Ncs <00>j<00> S)N)<01>_has_cextensionsr )r r r
r<00>sz/SuiteRequirements.cextensions.<locals>.<lambda>zC extensions not installed)rr-)r r )r r
<00> cextensions<6E>szSuiteRequirements.cextensionsc Cs?ddlm}y|d<00>dSWntk
r:dSYnXdS)N<>)<01> create_enginez sqlite://TF)<03>
sqlalchemyry<00> ImportError)r ryr r r
rt<00>s 
 zSuiteRequirements._has_sqlitec Cs;yddlm}m}dSWntk
r6dSYnXdS)Nrx)<02> cresultproxy<78> cprocessorsTF)rzr|r}r{)r r|r}r r r
rv<00>s
 z"SuiteRequirements._has_cextensionsN)crrr<00>propertyrrrrrrrrrrrrrrrr r!r"r#r$r%r)r*r+r,r.r/r0r1r2r3r4r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirkrlrnrprqrrrsrurwrtrvr r r r
r s<> 
   

 

   
      r N)<07>__doc__<5F>rr<00>objectrr r r r r
<00><module>s