class_docstr: Represents any parametric distribution that can be modeled by scipy.
code: def fit(self, X: np.ndarray) -> None:
      if self._distribution is None:
          # Currently only support continuous distributions for auto selection.
          (
              best_model,
              best_parameters,
          ) = self.find_suitable_continuous_distribution(X)
          self._distribution = best_model
          self._parameters = best_parameters
      elif not self._fixed_parameters:
          self._parameters = (
              self.map_scipy_distribution_parameters_to_names(
                  self._distribution,
                  self._distribution.fit(shape_into_2d(X)),
              )
          )
  
imports: import warnings
  from typing import Dict, Optional, Tuple, Union
  import numpy
  import scipy
  from scipy.stats import norm, rv_continuous, rv_discrete
  from sklearn.cluster import KMeans
  from sklearn.metrics import silhouette_score
  from sklearn.mixture import BayesianGaussianMixture
  from dowhy.gcm.causal_mechanisms import StochasticModel
  from dowhy.gcm.util.general import shape_into_2d
label_desc: Use image node_id 3 for calling the ScipyDistribution obj's underlying member method code with example usage: obj.fit(X) without return types