Skip to content

Commit 6b47f9d

Browse files
authored
GaussianCopula get_learned_distributions crashes if nothing was learned (#2339)
1 parent 7384de0 commit 6b47f9d

File tree

4 files changed

+53
-2
lines changed

4 files changed

+53
-2
lines changed

sdv/single_table/copulagan.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,11 @@ def get_learned_distributions(self):
246246
"Distributions have not been learned yet. Please fit your model first using 'fit'."
247247
)
248248

249-
field_transformers = self._gaussian_normalizer_hyper_transformer.field_transformers
250-
251249
learned_distributions = {}
250+
if not hasattr(self._gaussian_normalizer_hyper_transformer, 'field_transformers'):
251+
return learned_distributions
252+
253+
field_transformers = self._gaussian_normalizer_hyper_transformer.field_transformers
252254
for column_name, transformer in field_transformers.items():
253255
if isinstance(transformer, rdt.transformers.GaussianNormalizer):
254256
learned_params = deepcopy(transformer._univariate.to_dict())

sdv/single_table/copulas.py

+3
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,9 @@ def get_learned_distributions(self):
216216
"Distributions have not been learned yet. Please fit your model first using 'fit'."
217217
)
218218

219+
if not hasattr(self._model, 'to_dict') or not self._model.to_dict():
220+
return {}
221+
219222
parameters = self._model.to_dict()
220223
columns = parameters['columns']
221224
univariates = deepcopy(parameters['univariates'])

tests/unit/single_table/test_copulagan.py

+23
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,29 @@ def test_get_learned_distributions(self):
369369
},
370370
}
371371

372+
def test_get_learned_distributions_nothing_learned(self):
373+
"""Test that ``get_learned_distributions`` returns an empty dict when nothing is learned."""
374+
# Setup
375+
metadata = Metadata().load_from_dict({
376+
'tables': {
377+
'table1': {
378+
'columns': {
379+
'col_1': {'sdtype': 'id'},
380+
'col_2': {'sdtype': 'credit_card_number'},
381+
},
382+
}
383+
}
384+
})
385+
data = pd.DataFrame({'col_1': range(100), 'col_2': range(100)})
386+
synthesizer = CopulaGANSynthesizer(metadata, default_distribution='beta')
387+
synthesizer.fit(data)
388+
389+
# Run
390+
result = synthesizer.get_learned_distributions()
391+
392+
# Assert
393+
assert result == {}
394+
372395
def test_get_learned_distributions_raises_an_error(self):
373396
"""Test that ``get_learned_distributions`` raises an error."""
374397
# Setup

tests/unit/single_table/test_copulas.py

+23
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,29 @@ def test_get_learned_distributions(self):
568568
'one': {'distribution': 'uniform', 'learned_parameters': {'loc': 1.0, 'scale': 0.0}},
569569
}
570570

571+
def test_get_learned_distributions_nothing_learned(self):
572+
"""Test that ``get_learned_distributions`` returns an empty dict when nothing is learned."""
573+
# Setup
574+
metadata = Metadata().load_from_dict({
575+
'tables': {
576+
'table1': {
577+
'columns': {
578+
'col_1': {'sdtype': 'id'},
579+
'col_2': {'sdtype': 'credit_card_number'},
580+
},
581+
}
582+
}
583+
})
584+
data = pd.DataFrame({'col_1': range(100), 'col_2': range(100)})
585+
synthesizer = GaussianCopulaSynthesizer(metadata, default_distribution='beta')
586+
synthesizer.fit(data)
587+
588+
# Run
589+
result = synthesizer.get_learned_distributions()
590+
591+
# Assert
592+
assert result == {}
593+
571594
def test_get_learned_distributions_raises_an_error(self):
572595
"""Test that ``get_learned_distributions`` returns a dict.
573596

0 commit comments

Comments
 (0)