def uinit(self, ushape):
        """Return initialiser for working variable U."""

        if  self.opt['Y0'] is None:
            return np.zeros(ushape, dtype=self.dtype)
        else:
            # If initial Y is non-zero, initial U is chosen so that
            # the relevant dual optimality criterion (see (3.10) in
            # boyd-2010-distributed) is satisfied.
            Yss = np.sqrt(np.sum(self.Y[..., 0:-1]**2, axis=self.S.ndim,
                                 keepdims=True))
            U0 = (self.lmbda/self.rho)*sl.zdivide(self.Y[..., 0:-1], Yss)
            U1 = (1.0 / self.rho)*np.sign(self.Y[..., -1:])
            return np.concatenate((U0, U1), axis=self.S.ndim)
Return initialiser for working variable U.