def METHOD_NAME(self, summary, variants, **kwargs):
    """
    Return human readable representation
    The summary/variants accepts verbosity where 0 means silent and
    maximum is up to the plugin.
    :param summary: How verbose summary to output (int)
    :param variants: How verbose list of variants to output (int)
    :param kwargs: Other free-form arguments
    :rtype: str
    """
    if self.variants == _NO_VARIANTS:
        return ""
    out = []
    verbose = variants > 1
    if summary:
        # TODO: tree representation
        out.append("No tree representation for JSON serialized variants")
    if variants:
        out.append(f"JSON Serialized Variants ({len(self)}):")
        for variant in self:
            paths = ", ".join([x.path for x in variant["variant"]])
            out.append(
                "%sVariant %s:    %s"
                % ("\n" if verbose else "", variant["variant_id"], paths)
            )
            if not verbose:
                continue
            env = set()
            for node in variant["variant"]:
                for key, value in node.environment.items():
                    origin = node.environment.origin[key].path
                    env.add((f"{origin}:{key}", str(value)))
            if not env:
                return out
            fmt = "    %%-%ds => %%s" % max(  # pylint: disable=C0209
                len(_[0]) for _ in env
            )
            for record in sorted(env):
                out.append(fmt % record)
    return "\n".join(out)