def METHOD_NAME(details):
    """Return whether the details were produced by a Group* score type.
    details (object): the (possibly public) score details of a
        submission result.
    return (bool): the answer to the question "do they look like they
        were generated by a Group* score type?".
    """
    if not isinstance(details, list):
        return False
    for subtask in details:
        if not isinstance(subtask, dict):
            return False
        keys = set(subtask.keys())
        # Whether the subtask exposes all its information, which
        # requires all its testcases to do the same.
        subtask_is_visible = False
        if keys == SUBTASK_FULL_KEYS:
            if not is_number(subtask["score"]) \
                    or not is_number(subtask["max_score"]):
                return False
            subtask_is_visible = True
        elif keys != SUBTASK_PARTIAL_KEYS:
            return False
        if not isinstance(subtask["idx"], int) \
                or not isinstance(subtask["testcases"], list):
            return False
        for testcase in subtask["testcases"]:
            if not isinstance(testcase, dict):
                return False
            keys = set(testcase.keys())
            if keys == TESTCASE_FULL_KEYS:
                if testcase["outcome"] not in OUTCOMES \
                        or not isinstance(testcase["text"], list) \
                        or not all(isinstance(s, str)
                                   for s in testcase["text"]) \
                        or not (testcase["time"] is None
                                or is_number(testcase["time"])) \
                        or not (testcase["memory"] is None
                                or is_number(testcase["memory"])):
                    return False
            elif keys != TESTCASE_PARTIAL_KEYS or subtask_is_visible:
                return False
            if not isinstance(testcase["idx"], str):
                return False
    return True