@Override
  public void visitPyBinaryExpression(@NotNull PyBinaryExpression node) {
    // We have to visit both branches of a binary expression first to preserve the execution order as it is in a CPython interpreter,
    // E.g. in the `f() + g()` expression the execution order goes like `f()`, `g()`, `+`, but it's `f()`, `+`, `g()` in the PSI tree.
    node.getLeftExpression().accept(this);
    if (node.getRightExpression() != null) node.getRightExpression().accept(this);
    node.acceptChildren(this);

    if (alreadyVisited.contains(node)) return;
    alreadyVisited.add(node);

    if (myVariantIndex == myVariantsFromPython.size() - 1) return;

    PyElementType operator = node.getOperator();

    if (PyTokenTypes.OPERATIONS.contains(operator)) processOperator(operator, node);
  }
@Override
  public void visitPyBinaryExpression(@NotNull PyBinaryExpression node)