Hi, there:
In your paper, you minimize the mutual information of di---ds, di---ci.
However, in your code solver_disentangle.py, line 184-187
MI_ds_ci_src = self.mi_estimator(ds_src, ci_src, ci_src_shuffle)
MI_ds_ci_trg = self.mi_estimator(ds_trg, ci_trg, ci_trg_shuffle)
MI_di_ci_src = self.mi_estimator(di_src, ci_src, ci_src_shuffle)
MI_di_ci_trg = self.mi_estimator(di_trg, ci_trg, ci_trg_shuffle)
You minmize mutual information of ci---ds, di---ci.
Why? Your code dose not make sense.