private @Nullable PyType getTargetTypeFromIterableUnpacking(@NotNull PySequenceExpression topmostContainingTupleOrList,
                                                              @NotNull PyExpression assignedIterable,
                                                              @NotNull TypeEvalContext context) {
    PyType assignedType = PyUnionType.toNonWeakType(context.getType(assignedIterable));
    if (assignedType instanceof PyTupleType tupleType) {
      return PyTypeChecker.getTargetTypeFromTupleAssignment(this, topmostContainingTupleOrList, tupleType);
    }
    else if (assignedType instanceof PyClassLikeType classLikeType) {
      PyNamedTupleType namedTupleType = ContainerUtil.findInstance(classLikeType.getAncestorTypes(context), PyNamedTupleType.class);
      if (namedTupleType != null) {
        return PyTypeChecker.getTargetTypeFromTupleAssignment(this, topmostContainingTupleOrList, namedTupleType);
      }
      else {
        return getIterationType(assignedType, assignedIterable, assignedIterable, context);
      }
    }
    return null;
  }
private @Nullable PyType getTargetTypeFromIterableUnpacking(@NotNull PySequenceExpression topmostContainingTupleOrList,
                                                              @NotNull PyExpression assignedIterable,
                                                              @NotNull TypeEvalContext context)