@Nullable
  private static PyType getGenericTypeBound(PyExpression @NotNull [] typeVarArguments, @NotNull Context context) {
    final List<PyType> types = new ArrayList<>();
    for (int i = 1; i < typeVarArguments.length; i++) {
      final PyExpression argument = typeVarArguments[i];

      if (argument instanceof PyKeywordArgument) {
        if ("bound".equals(((PyKeywordArgument)argument).getKeyword())) {
          final PyExpression value = ((PyKeywordArgument)argument).getValueExpression();
          return value == null ? null : Ref.deref(getType(value, context));
        }
        else {
          break; // covariant, contravariant
        }
      }

      types.add(Ref.deref(getType(argument, context)));
    }
    return PyUnionType.union(types);
  }
@Nullable
  private static PyType getGenericTypeBound(PyExpression @NotNull [] typeVarArguments, @NotNull Context context)