Parameter
        ---------
        N: int
            number of particles

        Returns
        -------
        wgts: Weights object
            The importance weights (with attributes lw, W, and ESS)
        X: ThetaParticles object
            The N particles (with attributes theta, logpost)
        norm_cst: float
            Estimate of the normalising constant of the target

def run(self, N=100):
        """
        
        Parameter
        ---------
        N: int
            number of particles

        Returns
        -------
        wgts: Weights object
            The importance weights (with attributes lw, W, and ESS)
        X: ThetaParticles object
            The N particles (with attributes theta, logpost)
        norm_cst: float
            Estimate of the normalising constant of the target
        """
        th = self.proposal.rvs(size=N)
        self.X = ThetaParticles(theta=th, lpost=None)
        self.X.lpost = self.model.logpost(th)
        lw = self.X.lpost - self.proposal.logpdf(th)
        self.wgts = rs.Weights(lw=lw)
        self.norm_cst = rs.log_mean_exp(lw)