Source code for test_microlfits

# -*- coding: utf-8 -*-
"""
Created on Mon Dec  7 15:46:17 2015

@author: ebachelet
"""
import unittest.mock as mock
import numpy as np
import collections
from collections import OrderedDict

from pyLIMA import microlfits
from pyLIMA import microlmodels





[docs]def _create_event(): event = mock.MagicMock() event.telescopes = [mock.MagicMock()] event.telescopes[0].name = 'Test' event.telescopes[0].lightcurve_flux = np.random.random((100, 3)) event.telescopes[0].lightcurve_magnitude = np.random.random((100, 3)) event.telescopes[0].filter = 'I' event.telescopes[0].gamma = 0.5 event.total_number_of_data_points.return_value = sum([len(i.lightcurve_flux) for i in event.telescopes]) event.telescopes[0].n_data.return_value = len( event.telescopes[0].lightcurve_flux) return event
[docs]def _create_model(kind): model = mock.MagicMock() model.parameters_guess = [] model.parameters_boundaries = [[0, 100], [0, 1], [0, 300]] model.Jacobian_flag = 'Not OK' model_dictionnary = {'to': 0, 'uo': 1, 'tE': 2, 'fs_Test': 3, 'g_Test': 4} model.model_dictionnary = OrderedDict( sorted(model_dictionnary.items(), key=lambda x: x[1])) model.pyLIMA_standards_dictionnary = model.model_dictionnary model.compute_the_microlensing_model.return_value = np.random.random(100).tolist(), 0.0,0.0 model.model_magnification.return_value = np.random.random(100).tolist() fancy_namedtuple = collections.namedtuple('Parameters', model.model_dictionnary.keys()) model.pyLIMA_standard_parameters_to_fancy_parameters.return_value = fancy_namedtuple(10.0, 0.1, 20, 10, 5) model.model_type = kind model.model_Jacobian.return_value = np.random.random((100,6)).T model.derive_telescope_flux.return_value = 42, 69 model.compute_pyLIMA_parameters.return_value = fancy_namedtuple(10.0, 0.1, 20, 10, 5) return model
[docs]def test_mlfit_PSPL_LM_without_guess(): current_event = _create_event() model = microlmodels.create_model('PSPL',current_event) fit = microlfits.MLFits(current_event) fit.mlfit(model, 'LM') assert fit.fit_covariance.shape == (3 + 2 * len(current_event.telescopes), 3 + 2 * len(current_event.telescopes)) assert len(fit.fit_results) == 3 + 2 * len(current_event.telescopes) + 1
[docs]def test_mlfit_FSPL_LM_without_guess(): current_event = _create_event() model = model = microlmodels.create_model('FSPL',current_event) fit = microlfits.MLFits(current_event) fit.mlfit(model, 'LM') assert fit.fit_covariance.shape == (4 + 2 * len(current_event.telescopes), 4 + 2 * len(current_event.telescopes)) assert len(fit.fit_results) == 4 + 2 * len(current_event.telescopes) + 1
[docs]def test_mlfit_DSPL_LM_without_guess(): current_event = _create_event() model = model = microlmodels.create_model('DSPL',current_event) fit = microlfits.MLFits(current_event) fit.mlfit(model, 'LM') assert fit.fit_covariance.shape == (6 + 2 * len(current_event.telescopes), 6 + 2 * len(current_event.telescopes)) assert len(fit.fit_results) == 6 + 2 * len(current_event.telescopes) + 1
[docs]def test_mlfit_PSPL_LM_with_guess(): current_event = _create_event() model = microlmodels.create_model('PSPL',current_event) model.parameters_boundaries = [[0, 100], [0, 1], [0, 300]] model.parameters_guess = [10, 0.1, 20] fit = microlfits.MLFits(current_event) fit.mlfit(model, 'LM') assert fit.fit_covariance.shape == (3 + 2 * len(current_event.telescopes), 3 + 2 * len(current_event.telescopes)) assert len(fit.fit_results) == 3 + 2 * len(current_event.telescopes) + 1
[docs]def test_mlfit_FSPL_LM_with_guess(): current_event = _create_event() model = microlmodels.create_model('FSPL',current_event) model.parameters_boundaries = [[0, 100], [0, 1], [0, 300], [0, 1]] fit = microlfits.MLFits(current_event) fit.mlfit(model, 'LM') assert fit.fit_covariance.shape == (4 + 2 * len(current_event.telescopes), 4 + 2 * len(current_event.telescopes)) assert len(fit.fit_results) == 4 + 2 * len(current_event.telescopes) + 1
#def test_mlfit_PSPL_MCMC_with_guess(): # current_event = _create_event() # model = _create_model('PSPL') # fit = microlfits.MLFits(current_event) # fit.mlfit(model, 'MCMC',flux_estimation_MCMC='polyfit') # assert fit.MCMC_chains.shape == (240000, 6)
[docs]def test_check_fit_bad_covariance(): current_event = _create_event() model = _create_model('PSPL') fit = microlfits.MLFits(current_event) fit.fit_covariance = np.array([[-1.0, 0.0], [0.0, 0.0]]) flag = fit.check_fit() assert flag == 'Bad Fit'
[docs]def test_check_fit_bad_rho(): current_event = _create_event() model = microlmodels.create_model('FSPL',current_event) model.define_model_parameters() fit = microlfits.MLFits(current_event) fit.model = model fit.fit_results = [0.0, 0.0, 0.0, -1.0, 1.0, 0.0] flag = fit.check_fit() assert flag == 'Bad Fit' fit.fit_results = [0.0, 0.0, 0.0, 0.8, 1.0, 0.0] flag = fit.check_fit() assert flag == 'Bad Fit' fit.fit_results = [0.0, 0.0, 0.0, 0.05, 1.0, 0.0] flag = fit.check_fit() assert flag == 'Good Fit'
[docs]def test_check_fit_source_flux(): current_event = _create_event() model = microlmodels.create_model('FSPL',current_event) model.define_model_parameters() fit = microlfits.MLFits(current_event) fit.model = model fit.fit_results = [0.0, 0.0, 0.0, 0.0, 1.0, 0.0] flag = fit.check_fit() assert flag == 'Good Fit' fit.fit_results = [0.0, 0.0, 0.0, 0.8, -1.0, 0.0] flag = fit.check_fit() assert flag == 'Bad Fit'
[docs]def test_LM_Jacobian(): current_event = _create_event() model = microlmodels.create_model('FSPL',current_event) model.define_model_parameters() fit = microlfits.MLFits(current_event) fit.model = model to = 0.0 uo = 0.1 tE = 1.0 rho = 0.26 fs = 10 g = 1.0 parameters = [to, uo, tE, rho, fs, g] Jacobian = fit.LM_Jacobian(parameters) Jacobian = Jacobian.T assert Jacobian.shape == (6, len(current_event.telescopes[0].lightcurve_flux))
[docs]def test_chichi_telescopes(): current_event = _create_event() model = microlmodels.create_model('FSPL',current_event) model.define_model_parameters() fit = microlfits.MLFits(current_event) fit.model = model to = 0.0 uo = 0.1 tE = 1.0 rho = 0.26 fs = 10 g = 1.0 parameters = [to, uo, tE, rho, fs, g] chichi_telescopes = fit.chichi_telescopes(parameters) chichi = sum(fit.residuals_LM(parameters)**2) assert len(chichi_telescopes) == 1 assert np.allclose(chichi,chichi_telescopes[0])