def dprojection()

in automl21/scs_neural/solver/cone_projection.py [0:0]


    def dprojection(v, cones, dual=False):
        offset = 0
        all_linops = []
        for cone, sz in cones:
            sz = sz if isinstance(sz, (tuple, list)) else (sz,)
            if sum(sz) == 0:
                continue
            for dim in sz:
                if cone == 's':
                    upd_dim = int(dim * (dim + 1) / 2)
                    dim = upd_dim
                elif cone in ['e', 'ep', 'ed']:
                    raise NotImplementedError("Exp cone not implemented")
                curr_linop = ConeProjection._dprojection(
                    v[:, offset:offset+dim], cone, dual
                )
                all_linops.append(curr_linop)
                offset += dim
        return BlockDiagonalLinearOperator(all_linops)