Causal inference in python - where to start? Point 1: I'm not sure if this question could be asked here, as it is may not seem to be about the "science" itself at the first glance! At the second glance though, I think in practice several newbies would face this question and it is a public benefit to have it for reference of people
Point 2: If the community think that this is an inappropriate place for this question, I would delete the whole question when I get an answer. Otherwise, I would edit the question and remove these two points and let the question be here for the reference of others.
So I'm new to the world of causal inference. I am learning some elementary concepts such as DAG, matching on covariates/propensity score, etc. The problem is that I don't know where to start in terms of available packages in python? I have found several packages DoWhy, EconML, Causalib, CausalML, CausalNex, etc... .
The point is that I don't know where to start for these simple tasks such as building a DAG, or matching in python? Does anyone know about a "meta-reference" to know how to work thorough among these libraries?

Take a look at https://github.com/gmgeorg/pypsps for a ready-to-go TensorFlow keras implementation for causal inference using computational graphs.  See README and notebooks for code examples and case studies.
For example here is an end-to-end example of simulating data, building a model, training & evaluating the model, and -- last but not least -- estimate the ATE & unit level treatment effects.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from pypsps.keras import models
from pypsps import datasets, inference, utils

np.random.seed(10)
ks_data = datasets.KangSchafer(n_samples=1000, true_ate=20).run()
tf.random.set_seed(10)
model = models.build_toy_model(
    n_states=4, n_features=ks_data.n_features, compile=True, alpha=10.
)
inputs, outputs = ks_data.to_keras_inputs_outputs()
history = model.fit(inputs,
                    outputs,
                    epochs=250,
                    batch_size=64,
                    verbose=2,
                    validation_split=0.2,
                    callbacks=models.recommended_callbacks(),
                    )
preds = model.predict(inputs)
outcome_pred, scale, propensity_score, weights = utils.split_y_pred(preds)

pred_ate = inference.predict_ate(model, ks_data.features)
print("ATE\n\t true: %.1f \n\tnaive: %.1f \n\t PSPS: %.1f" % (
    ks_data.true_ate, ks_data.naive_ate(), pred_ate)
    )
pd.DataFrame(history.history)[["loss", "val_loss"]].plot(logy=True); plt.grid()

ATE
     true: 20.0 
    naive: -1.3 
     PSPS: 17.3


