### Solution design:
`P(y|do(x)) = \sum_z P(z|x)  \sum_x' P(y|x',z)` \
`P(i2|do(i1)) = \sum_{sex} P(sex|i1) * \sum_{i1'} P(i2| i1', sex)`\
**IDGEN:** \
Step 1: Z~ P(Z|I1)    
Step2.1: Sex~U[0,1]; I1 ~ P(I1) ; I2~ P(I2|I1, Sex);  
Step2.2: I2~ P'(I2|Sex)  ; 
Step 3:  I1 -> Sex -> I2\

**Need to train:** 
1. A classifier: P(Z|I1)
2. A diffusion model M_1 that takes dataset I_1 and uniform Sex as input and generates I2.
3. A diffusion model M_2 that takes Sex as input and generates I2 trained on new data.  

Code files:

Issues: 
P(Y|Z) = P(Y|do(Z)) because the backdoor path is not active. We have to use some other backdoor path that depends 
on the value of Z (Sex)
