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
64 changes: 33 additions & 31 deletions autofit/__init__.py
Original file line number Diff line number Diff line change
@@ -1,61 +1,63 @@
from autoconf import conf
from autofit.mapper.model import path_instances_of_class
from autofit.mapper.prior_model.attribute_pair import (
cast_collection,
AttributeNameValue,
PriorNameValue,
InstanceNameValue,
)

dir(conf)
from . import conf
from . import exc
from autofit.optimize.non_linear.samples import AbstractSamples, MCMCSamples, NestedSamplerSamples
from .aggregator import Aggregator, PhaseOutput
from .mapper import *
from .aggregator import Aggregator
from .aggregator import PhaseOutput
from .mapper import link
from .mapper import prior
from .mapper.model import AbstractModel
from .mapper.model import ModelInstance
from .mapper.model import ModelInstance as Instance
from .mapper.model import path_instances_of_class
from .mapper.model_mapper import ModelMapper
from .mapper.model_mapper import ModelMapper as Mapper
from .mapper.model_object import ModelObject
from .mapper.prior_model import *
from .mapper.prior import AbstractPromise
from .mapper.prior import GaussianPrior
from .mapper.prior import LogUniformPrior
from .mapper.prior import Prior
from .mapper.prior import UniformPrior
from .mapper.prior import last
from .mapper.prior.deferred import DeferredArgument
from .mapper.prior.deferred import DeferredInstance
from .mapper.prior_model.abstract import AbstractPriorModel
from .mapper.prior_model.annotation import AnnotationPriorModel
from .mapper.prior_model.attribute_pair import AttributeNameValue
from .mapper.prior_model.attribute_pair import InstanceNameValue
from .mapper.prior_model.attribute_pair import PriorNameValue
from .mapper.prior_model.attribute_pair import cast_collection
from .mapper.prior_model.collection import CollectionPriorModel
from .mapper.prior_model.collection import CollectionPriorModel as Collection
from autofit.mapper.prior.deferred import DeferredArgument
from autofit.mapper.prior.deferred import DeferredInstance
from .mapper.prior_model.dimension_type import DimensionType, map_types
from .mapper.prior_model.dimension_type import DimensionType
from .mapper.prior_model.dimension_type import map_types
from .mapper.prior_model.prior_model import PriorModel
from .mapper.prior_model.prior_model import PriorModel as Model
from .mapper.prior_model.util import PriorModelNameValue
from .optimize.grid_search import GridSearch as OptimizerGridSearch
from .optimize import *
from .optimize.non_linear.downhill_simplex import DownhillSimplex
from .optimize.non_linear.nested_sampling.dynesty import DynestyStatic, DynestyDynamic
from .optimize.grid_search import GridSearchResult
from .optimize.non_linear.nested_sampling.multi_nest import MultiNest
from .optimize.non_linear.downhill_simplex import DownhillSimplex
from .optimize.non_linear.emcee import Emcee
from .optimize.non_linear.mock_nlo import MockNLO
from .optimize.non_linear.nested_sampling.dynesty import DynestyDynamic
from .optimize.non_linear.nested_sampling.dynesty import DynestyStatic
from .optimize.non_linear.nested_sampling.multi_nest import MultiNest
from .optimize.non_linear.non_linear import Analysis
from .optimize.non_linear.non_linear import NonLinearOptimizer
from .optimize.non_linear.emcee import Emcee
from autofit.optimize.non_linear.paths import Paths
from autofit.optimize.non_linear.paths import make_path
from autofit.optimize.non_linear.paths import convert_paths
from .optimize.non_linear.non_linear import Result
from .text import formatter, samples_text
from .tools import *
from .optimize.non_linear.paths import Paths
from .optimize.non_linear.paths import convert_paths
from .optimize.non_linear.paths import make_path
from .optimize.non_linear.samples import AbstractSamples
from .optimize.non_linear.samples import MCMCSamples
from .optimize.non_linear.samples import NestedSamplerSamples
from .text import formatter
from .text import samples_text
from .tools import path_util
from .tools.phase import AbstractPhase
from .tools.phase import Phase
from .tools.phase import Dataset
from .tools.phase import Phase
from .tools.phase import as_grid_search
from .tools.phase_property import PhaseProperty
from .tools.pipeline import Pipeline
from .tools.pipeline import ResultsCollection
from autofit.mapper.prior import AbstractPromise
from autofit.mapper.prior import last
from .mapper.prior import *

__version__ = '0.58.0'
1 change: 1 addition & 0 deletions autofit/conf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from autoconf.conf import *
4 changes: 4 additions & 0 deletions autofit/exc.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,7 @@ class DeferredInstanceException(Exception):
"""

pass


class AggregatorException(Exception):
pass
2 changes: 1 addition & 1 deletion autofit/mapper/prior/prior.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import numpy as np
from scipy.special import erfcinv

from autoconf import conf
from autofit import conf
from autofit import exc
from autofit.mapper.model_object import ModelObject
from autofit.mapper.prior.arithmetic import ArithmeticMixin
Expand Down
7 changes: 3 additions & 4 deletions autofit/mapper/prior_model/abstract.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
import autofit.mapper.model
import autofit.mapper.model_mapper
import autofit.mapper.prior_model.collection
from autofit import cast_collection, PriorNameValue, InstanceNameValue
from autofit import exc
from autofit.mapper.model import AbstractModel
from autofit.mapper.prior.deferred import DeferredArgument
from autofit.mapper.prior.prior import GaussianPrior
from autofit.mapper.prior.prior import TuplePrior, Prior, WidthModifier, Limits
from autofit.mapper.prior_model import dimension_type as dim
from autofit.mapper.prior_model.attribute_pair import DeferredNameValue
from autofit.mapper.prior_model.attribute_pair import cast_collection, PriorNameValue, InstanceNameValue
from autofit.mapper.prior_model.recursion import DynamicRecursionCache
from autofit.mapper.prior_model.util import PriorModelNameValue
from autofit.text.formatter import TextFormatter
Expand Down Expand Up @@ -429,7 +429,7 @@ def instance_from_prior_medians(self):

def log_priors_from_vector(
self,
vector : [float],
vector: [float],
):
"""
Compute the log priors of every parameter in a vector, using the Prior of every parameter.
Expand All @@ -449,13 +449,12 @@ def log_priors_from_vector(
"""
return list(
map(
lambda prior_tuple, value : prior_tuple.prior.log_prior_from_value(value=value),
lambda prior_tuple, value: prior_tuple.prior.log_prior_from_value(value=value),
self.prior_tuples_ordered_by_id,
vector,
)
)


def random_instance(self):
"""
Creates a random instance of the model.
Expand Down
2 changes: 1 addition & 1 deletion autofit/mapper/prior_model/util.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from autofit import AttributeNameValue
from autofit.mapper.prior_model.attribute_pair import AttributeNameValue


class PriorModelNameValue(AttributeNameValue):
Expand Down
2 changes: 1 addition & 1 deletion autofit/optimize/non_linear/mock_nlo.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import math

import autofit as af
from autofit import AbstractSamples
from autofit.optimize.non_linear.samples import AbstractSamples
from autofit.optimize.non_linear.non_linear import NonLinearOptimizer
from autofit.optimize.non_linear.non_linear import Analysis

Expand Down
164 changes: 164 additions & 0 deletions autofit/tools/edenise.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
import re
import shutil
from os import walk
from uuid import uuid1


class Line:
def __init__(self, string):
if "*" in string:
print("Please ensure no imports in the __init__ contain a *")
exit(1)
if "," in string:
print("Comma separated imports not allowed")
exit(1)
self.string = string.replace("\n", "")
self.id = str(uuid1())

def __str__(self):
return f"{self.source} -> {self.import_target}"

def __repr__(self):
return f"<{self.__class__.__name__} {self}>"

def __len__(self):
return len(self.source)

def __lt__(self, other):
return len(self) < len(other)

def __gt__(self, other):
return len(self) > len(other)

def __eq__(self, other):
return self._target == other._target

@property
def is_import(self):
return self.string.startswith("from")

@property
def source(self):
match = re.match("from .* as (.+)", self.string)
if match is not None:
return match.group(1)
return re.match("from .* import (.+)", self.string).group(1)

@property
def target(self):
return self._target.split(".")[-1]

@property
def import_target(self):
target = ".".join(
self._target.split(".")[:-1]
)
if len(target) > 0:
return f".{target}"
return target

def __hash__(self):
return hash(self._target)

@property
def _target(self):
return self.string.replace(
f" as {self.source}",
""
).replace(
"from ",
""
).replace(
" import ",
"."
).lstrip(
"."
)


class Converter:
def __init__(self, name, prefix, lines):
self.name = name
self.prefix = prefix
self.lines = sorted(
filter(
lambda line: line.is_import,
lines
),
reverse=True
)

@classmethod
def from_prefix_and_source_directory(
cls,
name,
prefix,
source_directory
):
source_directory = source_directory
with open(
f"{source_directory}/__init__.py"
) as f:
lines = map(Line, f.readlines())
return Converter(name, prefix, lines)

def convert(self, string):
matched_lines = set()
string = string.replace(f"import {self.name} as {self.prefix}", "")
for line in self.lines:
source = f"{self.prefix}.{line.source}"
if source in string:
matched_lines.add(
line
)
string = string.replace(
source,
line.id
)
for line in self.lines:
string = string.replace(
line.id,
line.target
)

import_string = "\n".join(
f"from {self.name}{line.import_target} import {line.target}"
for line in matched_lines
)
return f"{import_string}\n{string}"


def edenise(
root_directory,
name,
prefix
):
target_directory = f"{root_directory}/../{name}_eden"

print(f"Creating {target_directory}...")
shutil.copytree(
root_directory,
target_directory,
symlinks=True
)

converter = Converter.from_prefix_and_source_directory(
name=name,
prefix=prefix,
source_directory=f"{root_directory}/{name}"
)

for root, _, files in walk(f"{target_directory}/test_{name}"):
for file in files:
if file.endswith(".py"):
with open(f"{root}/{file}", "r+") as f:
string = f.read()
f.seek(0)
f.write(
converter.convert(
string
)
)
f.truncate()

open(f"{target_directory}/{name}/__init__.py", "w+").close()
3 changes: 3 additions & 0 deletions eden.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[eden]
name = autofit
prefix = af
31 changes: 31 additions & 0 deletions scripts/edenise.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env python

from configparser import ConfigParser
from sys import argv

from autofit.tools import edenise


def main(
root_directory
):
try:
config = ConfigParser()
config.read(
f"{root_directory}/eden.ini"
)

edenise.edenise(
root_directory,
config.get("eden", "name"),
config.get("eden", "prefix")
)
except ValueError:
print("Usage: ./edenise.py root_directory")
exit(1)


if __name__ == "__main__":
main(
argv[1]
)
2 changes: 1 addition & 1 deletion test_autofit/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import pytest

import autofit as af
from autoconf import conf
from autofit import conf
import shutil

directory = path.dirname(path.realpath(__file__))
Expand Down
Loading