def dump_code()

in src/gluonts/nursery/SCott/pts/core/serde.py [0:0]


def dump_code(o: Any) -> str:
    """
    Serializes an object to a Python code string.

    Parameters
    ----------
    o
        The object to serialize.

    Returns
    -------
    str
        A string representing the object as Python code.

    See Also
    --------
    load_code
        Inverse function.
    """

    def _dump_code(x: Any) -> str:
        # r = { 'class': ..., 'args': ... }
        # r = { 'class': ..., 'kwargs': ... }
        if type(x) == dict and x.get("__kind__") == kind_inst:
            args = x.get("args", [])
            kwargs = x.get("kwargs", {})

            fqname = x["class"]
            bindings = ", ".join(
                itertools.chain(
                    map(_dump_code, args),
                    [f"{k}={_dump_code(v)}" for k, v in kwargs.items()],
                )
            )
            return f"{fqname}({bindings})"

        if type(x) == dict and x.get("__kind__") == kind_type:
            return x["class"]

        if isinstance(x, dict):
            inner = ", ".join(
                f"{_dump_code(k)}: {_dump_code(v)}" for k, v in x.items()
            )
            return f"{{{inner}}}"

        if isinstance(x, list):
            inner = ", ".join(list(map(dump_code, x)))
            return f"[{inner}]"

        if isinstance(x, tuple):
            inner = ", ".join(list(map(dump_code, x)))
            # account for the extra `,` in `(x,)`
            if len(x) == 1:
                inner += ","
            return f"({inner})"

        if isinstance(x, str):
            # json.dumps escapes the string
            return json.dumps(x)

        if isinstance(x, float) or np.issubdtype(type(x), np.inexact):
            if math.isfinite(x):
                return str(x)
            else:
                # e.g. `nan` needs to be encoded as `float("nan")`
                return 'float("{x}")'

        if isinstance(x, int) or np.issubdtype(type(x), np.integer):
            return str(x)

        if x is None:
            return str(x)

        raise RuntimeError(
            f"Unexpected element type {fqname_for(x.__class__)}"
        )

    return _dump_code(encode(o))