# Copyright (c) ONNX Project Contributors # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations import numpy as np from onnx.reference.op_run import OpRun class DepthToSpace(OpRun): def _run(self, data, blocksize=None, mode=None): if len(data.shape) != 4: raise RuntimeError(f"Unexpected shape {data.shape!r}.") b, c, h, w = data.shape if mode == "DCR": tmpshape = ( b, blocksize, blocksize, c // (blocksize * blocksize), h, w, ) reshaped = data.reshape(tmpshape) transposed = np.transpose(reshaped, [0, 3, 4, 1, 5, 2]) else: # assert mode == "CRD" tmpshape = ( b, c // (blocksize * blocksize), blocksize, blocksize, h, w, ) reshaped = data.reshape(tmpshape) transposed = np.transpose(reshaped, [0, 1, 4, 2, 5, 3]) finalshape = ( b, c // (blocksize * blocksize), h * blocksize, w * blocksize, ) y = np.reshape(transposed, finalshape) return (y,)