Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
graph.html
phase_output_path.zip
*.pickle
example/
Expand Down
3 changes: 3 additions & 0 deletions autofit/mapper/prior/arithmetic/compound.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ def __init__(self, left, right):
self.left = left
self.right = right

def __repr__(self):
return str(self)

def dict(self) -> dict:
from autofit import ModelObject

Expand Down
19 changes: 14 additions & 5 deletions autofit/mapper/prior_model/prior_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -406,12 +406,11 @@ def __setattr__(self, key, value):
logger.exception(key)

def __getattr__(self, item):
if item in ("_is_frozen", "tuple_prior_tuples"):
return self.__getattribute__(item)

try:
if (
"_" in item
and item not in ("_is_frozen", "tuple_prior_tuples")
and not item.startswith("_")
):
if "_" in item and not item.startswith("_"):
return getattr(
[v for k, v in self.tuple_prior_tuples if item.split("_")[0] == k][
0
Expand All @@ -422,6 +421,16 @@ def __getattr__(self, item):
except IndexError:
pass

try:
return getattr(
self.instance_for_arguments(
{prior: prior for prior in self.priors},
),
item,
)
except (AttributeError, TypeError):
pass

self.__getattribute__(item)

@property
Expand Down
11 changes: 6 additions & 5 deletions test_autofit/graphical/gaussian/test_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,9 @@ def test_default(factor_model, laplace):
assert model.normalization.mean == pytest.approx(25, rel=0.1)
assert model.sigma.mean == pytest.approx(10, rel=0.1)

@pytest.mark.filterwarnings('ignore::RuntimeWarning')
def test_set_model_identifier(dynesty, prior_model, analysis):

@pytest.mark.filterwarnings("ignore::RuntimeWarning")
def _test_set_model_identifier(dynesty, prior_model, analysis):
dynesty.fit(prior_model, analysis)

identifier = dynesty.paths.identifier
Expand All @@ -48,13 +49,13 @@ def test_set_model_identifier(dynesty, prior_model, analysis):


class TestDynesty:
@pytest.mark.filterwarnings('ignore::RuntimeWarning')
@pytest.mark.filterwarnings("ignore::RuntimeWarning")
@output_path_for_test()
def test_optimisation(self, factor_model, laplace, dynesty):
factor_model.optimiser = dynesty
factor_model.optimise(laplace)

@pytest.mark.filterwarnings('ignore::RuntimeWarning')
@pytest.mark.filterwarnings("ignore::RuntimeWarning")
def test_null_paths(self, factor_model):
search = af.DynestyStatic(maxcall=10)
result, status = search.optimise(
Expand All @@ -64,7 +65,7 @@ def test_null_paths(self, factor_model):
assert isinstance(result, g.MeanField)
assert isinstance(status, Status)

@pytest.mark.filterwarnings('ignore::RuntimeWarning')
@pytest.mark.filterwarnings("ignore::RuntimeWarning")
@output_path_for_test()
def test_optimise(self, factor_model, dynesty):
result, status = dynesty.optimise(
Expand Down
64 changes: 64 additions & 0 deletions test_autofit/graphical/test_declarative_deterministic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import autofit as af
from autofit.mock import MockAnalysis


def test():
model_1 = af.Model(af.Gaussian)
analysis_factor_1 = af.AnalysisFactor(
prior_model=model_1,
analysis=MockAnalysis(),
)

model_2 = af.Model(af.Gaussian)
analysis_factor_2 = af.AnalysisFactor(
prior_model=model_2,
analysis=MockAnalysis(),
)

model_3 = af.Collection(
model_1.fwhm,
model_2.fwhm,
)
analysis_factor_3 = af.AnalysisFactor(
prior_model=model_3,
analysis=MockAnalysis(),
)

factor_graph = af.FactorGraphModel(
analysis_factor_1,
analysis_factor_2,
analysis_factor_3,
)

assert (
factor_graph.info
== """PriorFactors

PriorFactor0 (AnalysisFactor1.sigma, AnalysisFactor2.1.self) UniformPrior [5], lower_limit = 0.0, upper_limit = 1.0
PriorFactor1 (AnalysisFactor1.normalization) UniformPrior [4], lower_limit = 0.0, upper_limit = 1.0
PriorFactor2 (AnalysisFactor1.centre) UniformPrior [3], lower_limit = 0.0, upper_limit = 1.0
PriorFactor3 (AnalysisFactor0.sigma, AnalysisFactor2.0.self) UniformPrior [2], lower_limit = 0.0, upper_limit = 1.0
PriorFactor4 (AnalysisFactor0.normalization) UniformPrior [1], lower_limit = 0.0, upper_limit = 1.0
PriorFactor5 (AnalysisFactor0.centre) UniformPrior [0], lower_limit = 0.0, upper_limit = 1.0

AnalysisFactors

AnalysisFactor0

centre (PriorFactor5) UniformPrior [0], lower_limit = 0.0, upper_limit = 1.0
normalization (PriorFactor4) UniformPrior [1], lower_limit = 0.0, upper_limit = 1.0
sigma (AnalysisFactor2.0.self, PriorFactor3) UniformPrior [2], lower_limit = 0.0, upper_limit = 1.0

AnalysisFactor1

centre (PriorFactor2) UniformPrior [3], lower_limit = 0.0, upper_limit = 1.0
normalization (PriorFactor1) UniformPrior [4], lower_limit = 0.0, upper_limit = 1.0
sigma (AnalysisFactor2.1.self, PriorFactor0) UniformPrior [5], lower_limit = 0.0, upper_limit = 1.0

AnalysisFactor2

0
self (AnalysisFactor0.sigma, PriorFactor3) UniformPrior [2], lower_limit = 0.0, upper_limit = 1.0
1
self (AnalysisFactor1.sigma, PriorFactor0) UniformPrior [5], lower_limit = 0.0, upper_limit = 1.0"""
)
Loading