Return Truen whether two ExpressionNodes are equivalent. This is needed because '==' is overridden on ExpressionNode to return a new ExpressionNode.
(
x: Any | ne.expressions.ExpressionNode,
y: Any | ne.expressions.ExpressionNode,
)
| 163 | |
| 164 | |
| 165 | def _equiv_expr_node( |
| 166 | x: Any | ne.expressions.ExpressionNode, |
| 167 | y: Any | ne.expressions.ExpressionNode, |
| 168 | ) -> bool: |
| 169 | """Return Truen whether two ExpressionNodes are equivalent. |
| 170 | |
| 171 | This is needed because '==' is overridden on ExpressionNode to |
| 172 | return a new ExpressionNode. |
| 173 | |
| 174 | """ |
| 175 | if not isinstance(x, ne.expressions.ExpressionNode) and not isinstance( |
| 176 | y, ne.expressions.ExpressionNode |
| 177 | ): |
| 178 | return x == y |
| 179 | elif ( |
| 180 | type(x) is not type(y) |
| 181 | or not isinstance(x, ne.expressions.ExpressionNode) |
| 182 | or not isinstance(y, ne.expressions.ExpressionNode) |
| 183 | or x.value != y.value |
| 184 | or x.astKind != y.astKind |
| 185 | or len(x.children) != len(y.children) |
| 186 | ): |
| 187 | return False |
| 188 | for xchild, ychild in zip(x.children, y.children): |
| 189 | if not _equiv_expr_node(xchild, ychild): |
| 190 | return False |
| 191 | return True |
| 192 | |
| 193 | |
| 194 | def _get_idx_expr_recurse( |
no outgoing calls
no test coverage detected