Creates multiple latent variables

        Parameters
        ----------
        name : str
            Name of the latent variable

        dim : list
            Dimension of the latent variable arrays

        prior : Prior object
            Which prior distribution? E.g. Normal(0,1)

        q : Distribution object
            Which distribution to use for variational approximation

        Returns
        ----------
        None (changes priors in LatentVariables object)

def create(self, name, dim, prior, q):
        """ Creates multiple latent variables

        Parameters
        ----------
        name : str
            Name of the latent variable

        dim : list
            Dimension of the latent variable arrays

        prior : Prior object
            Which prior distribution? E.g. Normal(0,1)

        q : Distribution object
            Which distribution to use for variational approximation

        Returns
        ----------
        None (changes priors in LatentVariables object)
        """   

        def rec(dim, prev=[]):
           if len(dim) > 0:
               return [rec(dim[1:], prev + [i]) for i in range(dim[0])]
           else:
               return "(" + ",".join([str(j) for j in prev]) + ")" 

        indices = rec(dim)

        for f_dim in range(1, len(dim)):
            indices = sum(indices, [])

        if self.z_list is None:
            starting_index = 0
        else:
            starting_index = len(self.z_list)

        self.z_indices[name] = {'start': starting_index, 'end': starting_index+len(indices)-1, 'dim': len(dim)}

        for index in indices:
            self.add_z(name + " " + index, prior, q, index=False)