@Nullable
  default PyAstExpression getSource() {
    List<PsiElement> exprs = findChildrenByType(this, PythonDialectsTokenSetProvider.getInstance().getExpressionTokens());
    // normally there are 2 exprs, the second is the source.
    if (exprs.size() != 2) return null; // could be a parsing error
    PyAstExpression ret = (PyAstExpression)exprs.get(1);
    if (followsNodeOfType(ret.getNode(), PyTokenTypes.IN_KEYWORD)) return ret;
    else return null;
  }
@Nullable
  default PyAstExpression getSource()