this module contains a set of functions to handle inference on astroid trees
Function | infer |
Undocumented |
Function | infer |
infer a AssignName/AssignAttr: need to inspect the RHS part of the assign node |
Function | infer |
infer an Attribute node by using getattr on the associated object |
Function | infer |
Undocumented |
Function | infer |
Undocumented |
Function | infer |
infer a Call node by trying to guess what the function returns |
Function | infer |
Undocumented |
Function | infer |
Inference's end for nodes that yield themselves on inference |
Function | infer |
Undocumented |
Function | infer |
Undocumented |
Function | infer |
Support IfExp inference |
Function | infer |
infer an Import node: return the imported module/object |
Function | infer |
infer a ImportFrom node: return the imported module/object |
Function | infer |
Undocumented |
Function | infer |
Undocumented |
Function | infer |
infer a Name: use name lookup rules |
Function | infer |
Undocumented |
Function | infer |
Inference for subscripts |
Function | infer |
Infer what an UnaryOp should return when evaluated. |
Constant | COMPARE |
Undocumented |
Constant | UNINFERABLE |
Undocumented |
Variable | objects |
Undocumented |
Function | _aug |
Get an inference callable for an augmented binary operation. |
Function | _bin |
Get an inference callable for a normal binary operation. |
Function | _cached |
Undocumented |
Function | _do |
If all possible combinations are either True or False, return that: >>> _do_compare([1, 2], '<=', [3, 4]) True >>> _do_compare([1, 2], '==', [3, 4]) False |
Function | _filter |
Undocumented |
Function | _get |
Get the flow for augmented binary operations. |
Function | _get |
Get contexts for binary operations. |
Function | _get |
Get the flow for binary operations. |
Function | _higher |
Search for the first function which encloses the given scope. This can be used for looking up in that function's scope, in case looking up in a lower scope for a particular name fails. |
Function | _infer |
Inference logic for augmented binary operations. |
Function | _infer |
Infer a binary operation between a left operand and a right operand |
Function | _infer |
Binary operation inference logic. |
Function | _infer |
Infer a boolean operation (and / or / not). |
Function | _infer |
Chained comparison inference logic. |
Function | _infer |
Infer all values based on Dict.items |
Function | _infer |
Infer all values based on _BaseContainer.elts |
Function | _infer |
Infer what an UnaryOp should return when evaluated. |
Function | _invoke |
Invoke binary operation inference on the given instance. |
Function | _is |
Check if the given const node is NotImplemented. |
Function | _populate |
Undocumented |
Function | _same |
Check if type1 is the same as type2. |
Function | _to |
Undocumented |
Function | _update |
Delete nodes that equate to duplicate keys |
Constant | _SUBSCRIPT |
Undocumented |
@decorators.path_wrapper
def infer_assign(self, context=None): (source) ¶
infer a AssignName/AssignAttr: need to inspect the RHS part of the assign node
@decorators.path_wrapper
def infer_augassign(self, context=None): (source) ¶
Undocumented
@decorators.path_wrapper
def infer_binop(self, context=None): (source) ¶
Undocumented
@decorators.path_wrapper
def infer_call(self, context=None): (source) ¶
infer a Call node by trying to guess what the function returns
@decorators.path_wrapper
def infer_empty_node(self, context=None): (source) ¶
Undocumented
Inference's end for nodes that yield themselves on inference
These are objects for which inference does not have any semantic, such as Module or Consts.
@decorators.path_wrapper
def infer_global(self, context=None): (source) ¶
Undocumented
Support IfExp inference
If we can't infer the truthiness of the condition, we default to inferring both branches. Otherwise, we infer either branch depending on the condition.
@decorators.path_wrapper
def infer_import(self, context=None, asname=True): (source) ¶
infer an Import node: return the imported module/object
@decorators.path_wrapper
def infer_import_from(self, context=None, asname=True): (source) ¶
infer a ImportFrom node: return the imported module/object
Inference for subscripts
We're understanding if the index is a Const
or a slice, passing the result of inference
to the value's getitem
method, which should
handle each supported index type accordingly.
@decorators.path_wrapper
def infer_unaryop(self, context=None): (source) ¶
Infer what an UnaryOp should return when evaluated.
Undocumented
Value |
|
Get an inference callable for a normal binary operation.
If reverse is True, then the reflected method will be used instead.
Iterable[ nodes.NodeNG]
, op: str
, right_iter: Iterable[ nodes.NodeNG]
) -> bool | type[ util.Uninferable]
:
(source)
¶
If all possible combinations are either True or False, return that: >>> _do_compare([1, 2], '<=', [3, 4]) True >>> _do_compare([1, 2], '==', [3, 4]) False
If any item is uninferable, or if some combinations are True and some are False, return Uninferable: >>> _do_compare([1, 3], '<=', [2, 4]) util.Uninferable
Get the flow for augmented binary operations.
The rules are a bit messy:
- if left and right have the same type, then left.__augop__(right) is first tried and then left.__op__(right).
- if left and right are unrelated typewise, then left.__augop__(right) is tried, then left.__op__(right) is tried and then right.__rop__(left) is tried.
- if left is a subtype of right, then left.__augop__(right) is tried and then left.__op__(right).
- if left is a supertype of right, then left.__augop__(right) is tried, then right.__rop__(left) and then left.__op__(right)
Get contexts for binary operations.
This will return two inference contexts, the first one for x.__op__(y), the other one for y.__rop__(x), where only the arguments are inversed.
Get the flow for binary operations.
The rules are a bit messy:
- if left and right have the same type, then only one method will be called, left.__op__(right)
- if left and right are unrelated typewise, then first left.__op__(right) is tried and if this does not exist or returns NotImplemented, then right.__rop__(left) is tried.
- if left is a subtype of right, then only left.__op__(right) is tried.
- if left is a supertype of right, then right.__rop__(left) is first tried and then left.__op__(right)
Search for the first function which encloses the given scope. This can be used for looking up in that function's scope, in case looking up in a lower scope for a particular name fails.
Parameters | |
node | A scope node. |
Returns | |
None, if no parent function scope was found,
otherwise an instance of astroid.nodes.scoped_nodes.Function ,
which encloses the given node. |
Infer a binary operation between a left operand and a right operand
This is used by both normal binary operations and augmented binary operations, the only difference is the flow factory used.
@decorators.path_wrapper
def _infer_boolop(self, context=None): (source) ¶
Infer a boolean operation (and / or / not).
The function will calculate the boolean operation for all pairs generated through inference for each component node.
Delete nodes that equate to duplicate keys
Since an astroid node doesn't 'equal' another node with the same value, this function uses the as_string method to make sure duplicate keys don't get through
Note that both the key and the value are astroid nodes
Fixes issue with DictUnpack causing duplicte keys in inferred Dict items
Parameters | |
lhs | Undocumented |
rhs | Undocumented |
dict(nodes | Dictionary to 'merge' nodes into |
dict(nodes | Dictionary with nodes to pull from |
Returns | |
merged dictionary of nodes |