def METHOD_NAME(gaussian: bool, particles: bool, ndim_state: int, timestamp: datetime):
    """Create random states of particular dimensions"""
    if gaussian:
        # create Gaussian state
        sv = StateVector(np.random.rand(ndim_state))
        cov = np.random.uniform(1, 10) * np.eye(ndim_state)
        if particles:
            # create particle state
            number_particles = 1000
            samples = multivariate_normal.rvs(sv.flatten(), cov, size=number_particles)
            return ParticleState(state_vector=StateVectors(samples.T),
                                 weight=np.array(
                                     [Probability(1 / number_particles)] * number_particles),
                                 timestamp=timestamp)
        return GaussianState(sv, cov, timestamp=timestamp)
    else:
        # create categorical state
        return CategoricalState(np.random.rand(ndim_state), timestamp=timestamp)