code: def test_given_graph_with_multiple_parents_when_estimate_distribution_change_scores_then_returns_expected_result():
      X0 = np.random.uniform(-1, 1, 1000)
      X1 = np.random.uniform(-1, 1, 1000)
      X2 = X0 + X1
  
      original_observations = pd.DataFrame(
          {"X0": X0, "X1": X1, "X2": X2}
      )
  
      X0 = np.random.uniform(-1, 1, 1000)
      X1 = np.random.uniform(-1, 1, 1000)
      X2 = X0 + X1 + 1
      outlier_observations = pd.DataFrame(
          {"X0": X0, "X1": X1, "X2": X2}
      )
  
      causal_model = ProbabilisticCausalModel(
          nx.DiGraph([("X0", "X2"), ("X1", "X2")])
      )
      auto.assign_causal_mechanisms(
          causal_model,
          original_observations,
          auto.AssignmentQuality.GOOD,
      )
  
      fit(causal_model, original_observations)
  
      scores = estimate_distribution_change_scores(
          causal_model,
          original_observations,
          outlier_observations,
          difference_estimation_func=lambda x, y: abs(
              np.mean(x) - np.mean(y)
          ),
      )
  
      assert scores["X0"] == 0
      assert scores["X1"] == 0
      assert scores["X2"] == approx(1, abs=0.005)
  
imports: import operator
  import networkx
  import numpy
  import pandas
  from flaky import flaky
  from pytest import approx
  from dowhy.gcm import AdditiveNoiseModel, EmpiricalDistribution, InverseDensityScorer, ITAnomalyScorer, MeanDeviationScorer, MedianCDFQuantileScorer, MedianDeviationScorer, ProbabilisticCausalModel, RescaledMedianCDFQuantileScorer, anomaly_scores, auto, fit
  from dowhy.gcm.anomaly import conditional_anomaly_scores
  from dowhy.gcm.constant import EPS
  from dowhy.gcm.distribution_change import estimate_distribution_change_scores
  from dowhy.gcm.ml import create_linear_regressor
label_desc: Use image node_id 9 for calling a global function with example usage: test_given_graph_with_multiple_parents_when_estimate_distribution_change_scores_then_returns_expected_result() without return types