def METHOD_NAME(self, nsamples: PositiveInteger):
    """
    Execute the random sampling in the :class:`.LatinHypercubeSampling` class.
    :param nsamples: If the :meth:`run` method is invoked multiple times, the newly generated samples will
     overwrite the existing samples.
    The :meth:`run` method is the function that performs random sampling in the :class:`.LatinHypercubeSampling`
    class. If `nsamples` is provided, the :meth:`run` method is automatically called when the
    :class:`.LatinHypercubeSampling` object is defined. The user may also call the :meth:`run` method directly to
    generate samples. The :meth:`run` method of the :class:`.LatinHypercubeSampling` class cannot be invoked
    multiple times for sample size extension.
    The :meth:`run` method has no returns, although it creates and/or appends the :py:attr:`samples` and
    :py:attr:`samplesU01` attributes of the :class:`.LatinHypercubeSampling` object.
    """
    self.nsamples = nsamples
    self.logger.info("UQpy: Running Latin Hypercube sampling...")
    self.criterion.create_bins(self._samples, self.random_state)
    u_lhs = self.criterion.generate_samples(self.random_state)
    self.samplesU01 = u_lhs
    if isinstance(self.distributions, list):
        for j in range(len(self.distributions)):
            if hasattr(self.distributions[j], "icdf"):
                self._samples[:, j] = self.distributions[j].icdf(u_lhs[:, j])
    elif isinstance(self.distributions, JointIndependent):
        if all(hasattr(m, "icdf") for m in self.distributions.marginals):
            for j in range(len(self.distributions.marginals)):
                self._samples[:, j] = self.distributions.marginals[j].icdf(u_lhs[:, j])
    elif isinstance(self.distributions, DistributionContinuous1D):
        if hasattr(self.distributions, "icdf"):
            self._samples = self.distributions.icdf(u_lhs)
    self.logger.info("Successful execution of LHS design.")