code: def compute_data_from_noise(
      causal_model: StructuralCausalModel, noise_data: pd.DataFrame
  ) -> pd.DataFrame:
      validate_causal_dag(causal_model.graph)
  
      sorted_nodes = list(nx.topological_sort(causal_model.graph))
      data = pd.DataFrame(
          np.empty((noise_data.shape[0], len(sorted_nodes))),
          columns=sorted_nodes,
      )
  
      for node in sorted_nodes:
          if is_root_node(causal_model.graph, node):
              data[node] = noise_data[node].to_numpy().squeeze()
          else:
              data[node] = (
                  causal_model.causal_mechanism(node)
                  .evaluate(
                      data[
                          get_ordered_predecessors(
                              causal_model.graph, node
                          )
                      ].to_numpy(),
                      noise_data[node].to_numpy(),
                  )
                  .squeeze()
              )
  
      return data
  
file_path: dowhy/dowhy/gcm/_noise.py
imports: from typing import Any, Callable, List, Optional, Tuple
  import networkx
  import numpy
  import pandas
  from dowhy.gcm.causal_models import InvertibleStructuralCausalModel, ProbabilisticCausalModel, StructuralCausalModel, validate_causal_dag
  from dowhy.gcm.ml.prediction_model import PredictionModel
  from dowhy.gcm.util.general import shape_into_2d
  from dowhy.graph import get_ordered_predecessors, is_root_node, node_connected_subgraph_view
label_desc: Use image node_id 1 for calling a global function with example usage: compute_data_from_noise(causal_model, noise_data) and returns: data