def METHOD_NAME(self, x, tau, out = None):
    r"""Proximal operator of the BlockFunction at x:
        .. math:: \mathrm{prox}_{\tau F}(x) =  (\mathrm{prox}_{\tau f_{i}}(x_{i}))_{i=1}^{m}
        Parameter:
            x : BlockDataContainer and must have as many rows as self.length            
    """
    if self.length != x.shape[0]:
        raise ValueError('BlockFunction and BlockDataContainer have incompatible size')        
    if out is None:
        out = [None]*self.length
        if isinstance(tau, Number):
            for i in range(self.length):
                out[i] = self.functions[i].METHOD_NAME(x.get_item(i), tau)
        else:
            for i in range(self.length):
                out[i] = self.functions[i].METHOD_NAME(x.get_item(i), tau.get_item(i))                        
        return BlockDataContainer(*out)  
    else:
        if isinstance(tau, Number):
            for i in range(self.length):
                self.functions[i].METHOD_NAME(x.get_item(i), tau, out[i])
        else:
            for i in range(self.length):
                self.functions[i].METHOD_NAME(x.get_item(i), tau.get_item(i), out[i])