import matplotlib.pyplot as plt
import numpy as np

def sample_distribution_discrete(
    values: np.ndarray,
    probabilities: np.ndarray,
    size: int
) -> np.ndarray:
    probabilities_ = probabilities / np.sum(probabilities)
    rng = np.random.default_rng()
    return rng.choice(values, size, p=probabilities_)

n_bins_distribution = 100
n_bins_histogram = 80 # which is not 100!

x = np.linspace(-2, 2, n_bins_distribution)
y = x**2
samples = sample_distribution_discrete(x, y, 1_000_000)

plt.hist(samples, 80)