Path 1: 1164 calls (0.99)

Name (346) Const (138) Call (90) If (83) AssignName (79) Compare (69) Assign (64) Expr (58) Attribute (44) Break (31)

Name (1069) Attribute (95)

False (1164)

1def _modified_iterating_dict_cond(
2        self, node: nodes.NodeNG, iter_obj: nodes.Name | nodes.Attribute
3    ) -> bool:
4        if not self._is_node_assigns_subscript_name(node):
5            return False
6        # Do not emit when merely updating the same key being iterated
7        if (
8            isinstance(iter_obj, nodes.Name)
9            and iter_obj.name == node.targets[0].value.name
10            and isinstance(iter_obj.parent.target, nodes.AssignName)
11            and isinstance(node.targets[0].slice, nodes.Name)
12            and iter_obj.parent.target.name == node.targets[0].slice.name
13        ):
14            return False
15        infer_val = utils.safe_infer(node.targets[0].value)
16        if not isinstance(infer_val, nodes.Dict):
17            return False
18        if infer_val != utils.safe_infer(iter_obj):
19            return False
20        if isinstance(iter_obj, nodes.Attribute):
21            iter_obj_name = iter_obj.attrname
22        else:
23            iter_obj_name = iter_obj.name
24        return node.targets[0].value.name == iter_obj_name  # type: ignore[no-any-return]
            

Path 2: 4 calls (0.0)

Assign (4)

Name (4)

False (4)

1def _modified_iterating_dict_cond(
2        self, node: nodes.NodeNG, iter_obj: nodes.Name | nodes.Attribute
3    ) -> bool:
4        if not self._is_node_assigns_subscript_name(node):
5            return False
6        # Do not emit when merely updating the same key being iterated
7        if (
8            isinstance(iter_obj, nodes.Name)
9            and iter_obj.name == node.targets[0].value.name
10            and isinstance(iter_obj.parent.target, nodes.AssignName)
11            and isinstance(node.targets[0].slice, nodes.Name)
12            and iter_obj.parent.target.name == node.targets[0].slice.name
13        ):
14            return False
15        infer_val = utils.safe_infer(node.targets[0].value)
16        if not isinstance(infer_val, nodes.Dict):
17            return False
18        if infer_val != utils.safe_infer(iter_obj):
19            return False
20        if isinstance(iter_obj, nodes.Attribute):
21            iter_obj_name = iter_obj.attrname
22        else:
23            iter_obj_name = iter_obj.name
24        return node.targets[0].value.name == iter_obj_name  # type: ignore[no-any-return]
            

Path 3: 2 calls (0.0)

Assign (2)

Name (2)

True (2)

1def _modified_iterating_dict_cond(
2        self, node: nodes.NodeNG, iter_obj: nodes.Name | nodes.Attribute
3    ) -> bool:
4        if not self._is_node_assigns_subscript_name(node):
5            return False
6        # Do not emit when merely updating the same key being iterated
7        if (
8            isinstance(iter_obj, nodes.Name)
9            and iter_obj.name == node.targets[0].value.name
10            and isinstance(iter_obj.parent.target, nodes.AssignName)
11            and isinstance(node.targets[0].slice, nodes.Name)
12            and iter_obj.parent.target.name == node.targets[0].slice.name
13        ):
14            return False
15        infer_val = utils.safe_infer(node.targets[0].value)
16        if not isinstance(infer_val, nodes.Dict):
17            return False
18        if infer_val != utils.safe_infer(iter_obj):
19            return False
20        if isinstance(iter_obj, nodes.Attribute):
21            iter_obj_name = iter_obj.attrname
22        else:
23            iter_obj_name = iter_obj.name
24        return node.targets[0].value.name == iter_obj_name  # type: ignore[no-any-return]
            

Path 4: 1 calls (0.0)

Assign (1)

Name (1)

False (1)

1def _modified_iterating_dict_cond(
2        self, node: nodes.NodeNG, iter_obj: nodes.Name | nodes.Attribute
3    ) -> bool:
4        if not self._is_node_assigns_subscript_name(node):
5            return False
6        # Do not emit when merely updating the same key being iterated
7        if (
8            isinstance(iter_obj, nodes.Name)
9            and iter_obj.name == node.targets[0].value.name
10            and isinstance(iter_obj.parent.target, nodes.AssignName)
11            and isinstance(node.targets[0].slice, nodes.Name)
12            and iter_obj.parent.target.name == node.targets[0].slice.name
13        ):
14            return False
15        infer_val = utils.safe_infer(node.targets[0].value)
16        if not isinstance(infer_val, nodes.Dict):
17            return False
18        if infer_val != utils.safe_infer(iter_obj):
19            return False
20        if isinstance(iter_obj, nodes.Attribute):
21            iter_obj_name = iter_obj.attrname
22        else:
23            iter_obj_name = iter_obj.name
24        return node.targets[0].value.name == iter_obj_name  # type: ignore[no-any-return]
            

Path 5: 1 calls (0.0)

Assign (1)

Name (1)

False (1)

1def _modified_iterating_dict_cond(
2        self, node: nodes.NodeNG, iter_obj: nodes.Name | nodes.Attribute
3    ) -> bool:
4        if not self._is_node_assigns_subscript_name(node):
5            return False
6        # Do not emit when merely updating the same key being iterated
7        if (
8            isinstance(iter_obj, nodes.Name)
9            and iter_obj.name == node.targets[0].value.name
10            and isinstance(iter_obj.parent.target, nodes.AssignName)
11            and isinstance(node.targets[0].slice, nodes.Name)
12            and iter_obj.parent.target.name == node.targets[0].slice.name
13        ):
14            return False
15        infer_val = utils.safe_infer(node.targets[0].value)
16        if not isinstance(infer_val, nodes.Dict):
17            return False
18        if infer_val != utils.safe_infer(iter_obj):
19            return False
20        if isinstance(iter_obj, nodes.Attribute):
21            iter_obj_name = iter_obj.attrname
22        else:
23            iter_obj_name = iter_obj.name
24        return node.targets[0].value.name == iter_obj_name  # type: ignore[no-any-return]
            

Path 6: 1 calls (0.0)

Assign (1)

Attribute (1)

False (1)

1def _modified_iterating_dict_cond(
2        self, node: nodes.NodeNG, iter_obj: nodes.Name | nodes.Attribute
3    ) -> bool:
4        if not self._is_node_assigns_subscript_name(node):
5            return False
6        # Do not emit when merely updating the same key being iterated
7        if (
8            isinstance(iter_obj, nodes.Name)
9            and iter_obj.name == node.targets[0].value.name
10            and isinstance(iter_obj.parent.target, nodes.AssignName)
11            and isinstance(node.targets[0].slice, nodes.Name)
12            and iter_obj.parent.target.name == node.targets[0].slice.name
13        ):
14            return False
15        infer_val = utils.safe_infer(node.targets[0].value)
16        if not isinstance(infer_val, nodes.Dict):
17            return False
18        if infer_val != utils.safe_infer(iter_obj):
19            return False
20        if isinstance(iter_obj, nodes.Attribute):
21            iter_obj_name = iter_obj.attrname
22        else:
23            iter_obj_name = iter_obj.name
24        return node.targets[0].value.name == iter_obj_name  # type: ignore[no-any-return]