Skip to content

Commit 57ea4d2

Browse files
authored
Merge pull request #376 from DoubleML/sk-refactor-framework
Refactor framework class
2 parents 48936a7 + 78e6baa commit 57ea4d2

17 files changed

Lines changed: 556 additions & 481 deletions

doubleml/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from .data import DoubleMLClusterData, DoubleMLData, DoubleMLDIDData, DoubleMLPanelData, DoubleMLRDDData, DoubleMLSSMData
44
from .did.did import DoubleMLDID
55
from .did.did_cs import DoubleMLDIDCS
6-
from .double_ml_framework import DoubleMLFramework, concat
6+
from .double_ml_framework import DoubleMLCore, DoubleMLFramework, concat
77
from .irm.apo import DoubleMLAPO
88
from .irm.apos import DoubleMLAPOS
99
from .irm.cvar import DoubleMLCVAR
@@ -21,6 +21,7 @@
2121

2222
__all__ = [
2323
"concat",
24+
"DoubleMLCore",
2425
"DoubleMLFramework",
2526
"DoubleMLPLR",
2627
"DoubleMLPLIV",

doubleml/did/tests/test_did_aggregation.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import pytest
33

44
from doubleml.did.did_aggregation import DoubleMLDIDAggregation
5-
from doubleml.double_ml_framework import DoubleMLFramework
5+
from doubleml.double_ml_framework import DoubleMLCore, DoubleMLFramework
66
from doubleml.tests._utils import generate_dml_dict
77

88

@@ -28,7 +28,8 @@ def base_framework(n_rep):
2828
psi_b = np.random.normal(size=(n_obs, n_thetas, n_rep))
2929

3030
doubleml_dict = generate_dml_dict(psi_a, psi_b)
31-
return DoubleMLFramework(doubleml_dict)
31+
dml_core = DoubleMLCore(**doubleml_dict)
32+
return DoubleMLFramework(dml_core=dml_core)
3233

3334

3435
@pytest.fixture(scope="module", params=["ones", "random", "zeros", "mixed"])

doubleml/did/tests/test_did_aggregation_exceptions.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import pytest
33

44
from doubleml.did.did_aggregation import DoubleMLDIDAggregation
5-
from doubleml.double_ml_framework import DoubleMLFramework
5+
from doubleml.double_ml_framework import DoubleMLCore, DoubleMLFramework
66
from doubleml.tests._utils import generate_dml_dict
77

88

@@ -24,7 +24,8 @@ def mock_framework(n_rep, n_thetas):
2424
psi_a = np.ones(shape=(n_obs, n_thetas, n_rep))
2525
psi_b = np.random.normal(size=(n_obs, n_thetas, n_rep))
2626
doubleml_dict = generate_dml_dict(psi_a, psi_b)
27-
return DoubleMLFramework(doubleml_dict)
27+
dml_core = DoubleMLCore(**doubleml_dict)
28+
return DoubleMLFramework(dml_core)
2829

2930

3031
@pytest.fixture
@@ -67,7 +68,8 @@ def test_invalid_framework_dim():
6768
psi_a = np.ones(shape=(10, 2, 1))
6869
psi_b = np.random.normal(size=(10, 2, 1))
6970
doubleml_dict = generate_dml_dict(psi_a, psi_b)
70-
framework = DoubleMLFramework(doubleml_dict)
71+
dml_core = DoubleMLCore(**doubleml_dict)
72+
framework = DoubleMLFramework(dml_core=dml_core)
7173

7274
# Test with invalid framework dimension
7375
with pytest.raises(ValueError, match="All frameworks must be one-dimensional"):

doubleml/did/tests/test_did_aggregation_plot.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from matplotlib.figure import Figure
66

77
from doubleml.did.did_aggregation import DoubleMLDIDAggregation
8-
from doubleml.double_ml_framework import DoubleMLFramework
8+
from doubleml.double_ml_framework import DoubleMLCore, DoubleMLFramework
99
from doubleml.tests._utils import generate_dml_dict
1010

1111

@@ -23,7 +23,8 @@ def mock_framework(n_rep):
2323
psi_a = np.ones(shape=(n_obs, n_thetas, n_rep))
2424
psi_b = np.random.normal(size=(n_obs, n_thetas, n_rep))
2525
doubleml_dict = generate_dml_dict(psi_a, psi_b)
26-
return DoubleMLFramework(doubleml_dict)
26+
dml_core = DoubleMLCore(**doubleml_dict)
27+
return DoubleMLFramework(dml_core=dml_core)
2728

2829

2930
@pytest.fixture

doubleml/did/tests/test_did_aggregation_return_types.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from matplotlib.figure import Figure
77

88
from doubleml.did.did_aggregation import DoubleMLDIDAggregation
9-
from doubleml.double_ml_framework import DoubleMLFramework
9+
from doubleml.double_ml_framework import DoubleMLCore, DoubleMLFramework
1010
from doubleml.tests._utils import generate_dml_dict
1111

1212

@@ -24,7 +24,8 @@ def mock_framework(n_rep):
2424
psi_a = np.ones(shape=(n_obs, n_thetas, n_rep))
2525
psi_b = np.random.normal(size=(n_obs, n_thetas, n_rep))
2626
doubleml_dict = generate_dml_dict(psi_a, psi_b)
27-
return DoubleMLFramework(doubleml_dict)
27+
dml_core = DoubleMLCore(**doubleml_dict)
28+
return DoubleMLFramework(dml_core=dml_core)
2829

2930

3031
@pytest.fixture

doubleml/double_ml.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from doubleml.data import DoubleMLDIDData, DoubleMLPanelData, DoubleMLRDDData, DoubleMLSSMData
1111
from doubleml.data.base_data import DoubleMLBaseData
12-
from doubleml.double_ml_framework import DoubleMLFramework
12+
from doubleml.double_ml_framework import DoubleMLCore, DoubleMLFramework
1313
from doubleml.double_ml_sampling_mixins import SampleSplittingMixin
1414
from doubleml.utils._checks import _check_external_predictions
1515
from doubleml.utils._estimation import _aggregate_coefs_and_ses, _rmse, _set_external_predictions, _var_est
@@ -626,14 +626,11 @@ def construct_framework(self):
626626
scaled_psi_reshape = np.transpose(scaled_psi, (0, 2, 1))
627627

628628
doubleml_dict = {
629-
"thetas": self.coef,
630629
"all_thetas": self.all_coef,
631-
"ses": self.se,
632630
"all_ses": self.all_se,
633631
"var_scaling_factors": self._var_scaling_factors,
634632
"scaled_psi": scaled_psi_reshape,
635633
"is_cluster_data": self._is_cluster_data,
636-
"treatment_names": self._dml_data.d_cols,
637634
}
638635

639636
if self._sensitivity_implemented:
@@ -670,8 +667,8 @@ def construct_framework(self):
670667
},
671668
}
672669
)
673-
674-
doubleml_framework = DoubleMLFramework(doubleml_dict)
670+
dml_core = DoubleMLCore(**doubleml_dict)
671+
doubleml_framework = DoubleMLFramework(dml_core=dml_core, treatment_names=self._dml_data.d_cols)
675672
return doubleml_framework
676673

677674
def bootstrap(self, method="normal", n_rep_boot=500):

0 commit comments

Comments
 (0)