contracts Package¶
contracts Package¶
-
class
contracts.ContractsMeta(clsname, bases, clsdict)¶ Bases:
abc.ABCMetaThis metaclass lets the subclasses inherit the specifications. Very useful for abstract commands.
-
contracts.contract(*args, **kwargs)[source]¶ Decorator for adding contracts to functions.
It is smart enough to support functions with variable number of arguments and keyword arguments.
There are three ways to specify the contracts. In order of precedence:
As arguments to this decorator. For example:
@contract(a='int,>0',b='list[N],N>0',returns='list[N]') def my_function(a, b): # ... pass
As annotations (supported only in Python 3):
@contract def my_function(a:'int,>0', b:'list[N],N>0') -> 'list[N]': # ... pass
Using
:type:and:rtype:tags in the function’s docstring:@contract def my_function(a, b):
-
contracts.new_contract(*args)[source]¶ Defines a new contract type. Used both as a decorator and as a function.
1) Use as a function. The first parameter must be a string. The second parameter can be either a string or a callable function.
new_contract('new_contract_name', 'list[N]') new_contract('new_contract_name', lambda x: isinstance(x, list) )
If it is a string, it is interpreted as contract expression; the given identifier will become an alias for that expression.
If it is a callable, it must accept one parameter, and either:
- return True or None, to signify it accepts.
- return False or raise ValueError or AssertionError, to signify it doesn’t.
If ValueError is raised, its message is used in the error.
2) Use as a decorator.
Or, it can be used as a decorator (without arguments). The function name is used as the identifier.
@new_contract def new_contract_name(x): return isinstance(x, list)
This function returns a
Contractobject. It might be useful to check right away if the declaration is what you meant, usingContract.check()andContract.fail().Parameters: - identifier (str) – The identifier must be a string not already in use
(you cannot redefine
list,tuple, etc.). - condition (
type|callable|str) – Definition of the new contract.
Returns: The equivalent contract – might be useful for debugging.
Return type:
backported Module¶
-
class
contracts.backported.FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations)¶ Bases:
tuple-
annotations¶ Alias for field number 6
-
args¶ Alias for field number 0
-
defaults¶ Alias for field number 3
-
kwonlyargs¶ Alias for field number 4
-
kwonlydefaults¶ Alias for field number 5
-
varargs¶ Alias for field number 1
-
varkw¶ Alias for field number 2
-
docstring_parsing Module¶
-
class
contracts.docstring_parsing.DocStringInfo(docstring=None, params=None, returns=None)[source]¶ Bases:
object
-
contracts.docstring_parsing.parse_annotations(docstring, keys, empty=False, inline_type=False)[source]¶ Parses “:key name: description” lines into a dictionary mapping name to a description.
If empty is specified, look statements without a name such as “:key: description”.
If inline_type is specified, allow an optional type to be specified parsing “:key type name: description” or “:key type: description”.
enabling Module¶
interface Module¶
-
class
contracts.interface.Contract(where)[source]¶ Bases:
object-
check_contract(context, value, silent)[source]¶ Checks that value is ok with this contract in the specific context. This is the function that subclasses must implement.
If silent = False, do not bother with creating detailed error messages yet. This is for performance optimization.
Parameters: context – The context in which expressions are evaluated.
-
-
exception
contracts.interface.ContractDefinitionError[source]¶ Bases:
contracts.interface.ContractExceptionThrown when defining the contracts
-
exception
contracts.interface.ContractException[source]¶ Bases:
exceptions.ExceptionThe base class for the exceptions thrown by this module.
-
exception
contracts.interface.ContractNotRespected(contract, error, value, context)[source]¶ Bases:
contracts.interface.ContractExceptionException thrown when a value does not respect a contract.
-
exception
contracts.interface.ContractSyntaxError(error, where=None)[source]¶ Bases:
contracts.interface.ContractDefinitionErrorException thrown when there is a syntax error in the contracts.
-
class
contracts.interface.Where(string, character, character_end=None)[source]¶ Bases:
objectAn object of this class represents a place in a file, or an interval.
All parsed elements contain a reference to a
Whereobject so that we can output pretty error messages.Character should be >= len(string) (possibly outside the string). Character_end should be >= character (so that you can splice with string[character:character_end])
-
contracts.interface.describe_value(x, clip=80)[source]¶ Describes an object, for use in the error messages. Short description, no multiline.
-
contracts.interface.describe_value_multiline(x)[source]¶ Describes an object, for use in the error messages.
-
contracts.interface.format_where(w, context_before=3, mark=None, arrow=True, use_unicode=True, no_mark_arrow_if_longer_than=3)[source]¶
main Module¶
-
class
contracts.main.Storage[source]¶ -
string2contract= {'np_float32|np_float64': OR([CheckType(float32,'np_float32'), CheckType(float64,'np_float64')]), 'Int|np_scalar_int|(np_scalar,array(int))': OR([CheckType(int,'Int'), Extension('np_scalar_int'), And([Extension('np_scalar'), Array(None,ArrayOR([DType(dtype('int8'),'i1'), DType(dtype('int8')), DType(dtype('int16')), DType(dtype('int32')), DType(dtype('int64'))]))])]), 'np_uint8|np_uint16|np_uint32|np_uint64': OR([CheckType(uint8,'np_uint8'), CheckType(uint16,'np_uint16'), CheckType(uint32,'np_uint32'), CheckType(uint64,'np_uint64')]), 'np_scalar_uint|(np_scalar, array(uint))': OR([Extension('np_scalar_uint'), And([Extension('np_scalar'), Array(None,ArrayOR([DType(dtype('uint8'),'u1'), DType(dtype('uint8')), DType(dtype('uint16')), DType(dtype('uint32')), DType(dtype('uint64'))]))])]), 'np_zeroshape_array|np_scalar_type': OR([Extension('np_zeroshape_array'), Extension('np_scalar_type')]), 'np_scalar_int|np_scalar_uint|np_scalar_float': OR([Extension('np_scalar_int'), Extension('np_scalar_uint'), Extension('np_scalar_float')]), 'np_int8|np_int16|np_int32|np_int64': OR([CheckType(int8,'np_int8'), CheckType(int16,'np_int16'), CheckType(int32,'np_int32'), CheckType(int64,'np_int64')]), 'Float|np_scalar_float|(np_scalar, array(float))': OR([CheckType(float,'Float'), Extension('np_scalar_float'), And([Extension('np_scalar'), Array(None,ArrayOR([DType(dtype('float32')), DType(dtype('float64'))]))])]), 'float|int|uint': OR([Extension('float'), Extension('int'), Extension('uint')])}¶
-
-
contracts.main.check(contract, object, desc=None, **context)[source]¶ Checks that
objectsatisfies the contract described bycontract.Parameters: - contract (str) – The contract string.
- object (
*) – Any object. - desc (
None|str) – An optional description of the error. If given, it is included in the error message.
-
contracts.main.check_contracts(contracts, values, context_variables=None)[source]¶ Checks that the values respect the contract. Not a public function – no friendly messages.
Parameters: - contracts (
list[N](str),N>0) – List of contracts. - values (
list[N]) – Values that should match the contracts. - context_variables (
dict(str[1]: *)) – Initial context
Returns: a Context variable
Return type: type(Context)
Raise: ContractSyntaxError
Raise: ContractNotRespected
Raise: ValueError
- contracts (
-
contracts.main.check_multiple(couples, desc=None)[source]¶ Checks multiple couples of (contract, value) in the same context.
This means that the variables in each contract are shared with the others.
Parameters: - couples (
list[>0](tuple(str, *))) – A list of tuple (contract, value) to check. - desc (
None|str) – An optional description of the error. If given, it is included in the error message.
- couples (
-
contracts.main.contract_decorator(*arg, **kwargs)[source]¶ Decorator for adding contracts to functions.
It is smart enough to support functions with variable number of arguments and keyword arguments.
There are three ways to specify the contracts. In order of precedence:
As arguments to this decorator. For example:
@contract(a='int,>0',b='list[N],N>0',returns='list[N]') def my_function(a, b): # ... pass
As annotations (supported only in Python 3):
@contract def my_function(a:'int,>0', b:'list[N],N>0') -> 'list[N]': # ... pass
Using
:type:and:rtype:tags in the function’s docstring:@contract def my_function(a, b):
-
contracts.main.contracts_decorate(function_, modify_docstring=True, **kwargs)[source]¶ An explicit way to decorate a given function. The decorator
decorate()calls this function internally.
-
contracts.main.fail(contract, value, **initial_context)[source]¶ - Checks that the value does not respect this contract.
- Raises an exception if it does.
Raise: ValueError
-
contracts.main.new_contract(*args)[source]¶ Defines a new contract type. Used both as a decorator and as a function.
1) Use as a function. The first parameter must be a string. The second parameter can be either a string or a callable function.
new_contract('new_contract_name', 'list[N]') new_contract('new_contract_name', lambda x: isinstance(x, list) )
If it is a string, it is interpreted as contract expression; the given identifier will become an alias for that expression.
If it is a callable, it must accept one parameter, and either:
- return True or None, to signify it accepts.
- return False or raise ValueError or AssertionError, to signify it doesn’t.
If ValueError is raised, its message is used in the error.
2) Use as a decorator.
Or, it can be used as a decorator (without arguments). The function name is used as the identifier.
@new_contract def new_contract_name(x): return isinstance(x, list)
This function returns a
Contractobject. It might be useful to check right away if the declaration is what you meant, usingContract.check()andContract.fail().Parameters: - identifier (str) – The identifier must be a string not already in use
(you cannot redefine
list,tuple, etc.). - condition (
type|callable|str) – Definition of the new contract.
Returns: The equivalent contract – might be useful for debugging.
Return type:
pyparsing_utils Module¶
-
contracts.pyparsing_utils.myOperatorPrecedence(baseExpr, opList)[source]¶ Helper method for constructing grammars of expressions made up of operators working in a precedence hierarchy. Operators may be unary or binary, left- or right-associative. Parse actions can also be attached to operator expressions.
- Parameters:
baseExpr - expression representing the most basic element for the
opList - list of tuples, one for each operator precedence level in expression grammar; each tuple is of the form (opExpr, numTerms, rightLeftAssoc, parseAction), where:
- opExpr is the pyparsing expression for the operator;
- may also be a string, which will be converted to a Literal; if numTerms is 3, opExpr is a tuple of two expressions, for the two operators separating the 3 terms
- numTerms is the number of terms for this operator (must
- be 1, 2, or 3)
- rightLeftAssoc is the indicator whether the operator is
- right or left associative, using the pyparsing-defined constants opAssoc.RIGHT and opAssoc.LEFT.
- parseAction is the parse action to be associated with
- expressions matching this operator expression (the parse action tuple member may be omitted)
syntax Module¶
-
class
contracts.syntax.ParsingTmp[source]¶ -
contract_types= ["*", "#", Context separation construct, "Int", "Float", "Number", "bool", {"type" - Suppress:("(") - Forward: ... - Suppress:(")")}, {"string" [{"[" - Forward: ... - "]"}]}, {"str" [{"[" - Forward: ... - "]"}]}, {"unicode" [{"[" - Forward: ... - "]"}]}, List contract, Seq contract, tuple contract, {"dict" [{Suppress:("[") - Forward: ... - Suppress:("]")}] [{"(" - [Forward: ...] ":" [Forward: ...] - ")"}]}, {"map" [{Suppress:("[") - Forward: ... - Suppress:("]")}] [{"(" - [Forward: ...] ":" [Forward: ...] - ")"}]}, Set contract, {"attr" - "(" - Dict:(Group:({{W:(ABCD...) Suppress:(":")} Forward: ...}) [; Group:({{W:(ABCD...) Suppress:(":")} Forward: ...})]...) - ")"}, "file", {[Forward: ...] ">=" Forward: ...}, {[Forward: ...] "==" Forward: ...}, {[Forward: ...] "=" Forward: ...}, {[Forward: ...] "<=" Forward: ...}, {[Forward: ...] != Forward: ...}, {[Forward: ...] "<" Forward: ...}, {[Forward: ...] ">" Forward: ...}, "np_uint16", "np_int64", "np_int8", "np_complex128", "np_uint8", "np_complex64", "np_float16", "np_complex", "np_int", "np_uint32", "np_float32", "np_float", "np_int32", "np_int16", "np_uint64", "np_float64", array() contract, shape() contract, {"isinstance" - Suppress:("(") - W:(ABCD...) - Suppress:(")")}, {a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | w | v | x | y | z FollowedBy:(~{a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | w | v | y | z | * | - | + | / | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | W | V | X | Y | Z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | _ | x})}, {A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | W | V | X | Y | Z FollowedBy:(~{a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | w | v | y | z | * | - | + | / | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | W | V | X | Y | Z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | _})}, rvalue]¶
-
keywords= ['Int', 'Float', 'Number', 'bool', 'type', 'string', 'str', 'unicode', 'list', 'seq', 'tuple', 'dict', 'map', 'set', 'attr', 'file', 'np_uint16', 'np_int64', 'np_int8', 'np_complex128', 'np_uint8', 'np_complex64', 'np_float16', 'np_complex', 'np_int', 'np_uint32', 'np_float32', 'np_float', 'np_int32', 'np_int16', 'np_uint64', 'np_float64', 'array', 'ndarray', 'shape', 'isinstance']¶
-
-
contracts.syntax.add_keyword(x)[source]¶ Declares that x is a keyword — this is useful to have more clear messages. “keywords” are not parsed by Extension. (see extensions.py) and allows to have “deep” error indications. See http://pyparsing.wikispaces.com/message/view/home/620225 and the discussion of the “-” operator in the docs.
test_registrar Module¶
Subpackages¶
- library Package
libraryPackagearithmeticModulearrayModulearray_opsModulecomparisonModulecompositionsModuledictsModuledummyModuleextensionsModulelistsModulemapModulemiscellaneous_aliasesModuleseparate_contextModuleseqModulesimple_valuesModulestringsModulesuggesterModuletupleModuletypes_miscModulevariablesModule
- testing Package
testingPackagearray_extended_testModulefriendliness_statisticsModuletest_class_contractsModuletest_decoratorModuletest_docstring_parsingModuletest_idiomsModuletest_multipleModuletest_new_contractModuletest_particularsModuletest_picklingModuletest_simpleModuleutilsModule- Subpackages
- library Package
libraryPackagearithmetic_tcModulearray_elements_tcModulearray_tcModulecomparison_tcModulecompositions_tcModuledicts_tcModuledummy_tcModulelists_tcModulemap_tcModulemiscellaneous_aliases_tcModuleseparate_context_tcModuleseq_tcModulesimple_values_tcModulestrings_tcModuletuple_tcModuletypes_tcModulevariables_tcModule
- library Package