From cdb98254f027fe94ee986dec7c34a376d67b2f68 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Tue, 25 Jul 2023 18:13:36 +0200 Subject: [PATCH 01/41] allowing q_source as a parameter, adding test_xallarap_n_sources(); one old test fails --- source/MulensModel/modelparameters.py | 18 ++++++++++-------- .../MulensModel/tests/test_ModelParameters.py | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 651e8da6..b81e1f89 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -217,7 +217,7 @@ def __init__(self, parameters): "as a parameter\ne.g., ModelParameters({'t_0': " + "2456789.0, 'u_0': 0.123, 't_E': 23.45})") - self._count_sources(parameters.keys()) + self._count_sources(set(parameters.keys())) self._count_lenses(parameters.keys()) self._set_type(parameters.keys()) self._check_types('alpha' in parameters.keys()) @@ -254,9 +254,11 @@ def _count_sources(self, keys): """How many sources there are?""" binary_params = ['t_0_1', 't_0_2', 'u_0_1', 'u_0_2', 'rho_1', 'rho_2', 't_star_1', 't_star_2'] - common = set(binary_params).intersection(set(keys)) - if len(common) == 0: + common = set(binary_params).intersection(keys) + if len(common) == 0 and 'q_source' not in keys: self._n_sources = 1 + elif len(common) == 0 and 'q_source' in keys: + self._n_sources = 2 elif len(common) == 1: raise ValueError('Wrong parameters - the only binary source ' + 'parameter is {:}'.format(common)) @@ -269,6 +271,7 @@ def _count_sources(self, keys): raise ValueError( 'Given binary source parameters do not allow defining ' + 'the Model: {:}'.format(common)) + self._n_sources = 2 def _count_lenses(self, keys): @@ -327,10 +330,6 @@ def _check_types(self, alpha_defined): 'You defined alpha for single lens model ' 'without external mass sheet. This is not allowed.') - if n_sources > 1 and self._type['xallarap']: - raise NotImplementedError('We have not yet implemented xallarap ' - 'and multiple luminous sources') - def _check_valid_combination_1_source(self, keys): """ Check that the user hasn't over-defined the ModelParameters. @@ -343,7 +342,7 @@ def _check_valid_combination_1_source(self, keys): 'x_caustic_in x_caustic_out t_caustic_in t_caustic_out ' 'xi_period xi_semimajor_axis xi_inclination xi_Omega_node ' 'xi_argument_of_latitude_reference xi_eccentricity ' - 'xi_omega_periapsis t_0_xi').split()) + 'xi_omega_periapsis t_0_xi q_source').split()) difference = set(keys) - allowed_keys if len(difference) > 0: derived_1 = ['gamma', 'gamma_perp', 'gamma_parallel'] @@ -388,6 +387,7 @@ def _divide_parameters(self, parameters): """ separate_parameters = ( 't_0_1 t_0_2 u_0_1 u_0_2 rho_1 rho_2 t_star_1 t_star_2'.split()) + skipped_parameters = ['q_source'] parameters_1 = {} parameters_2 = {} for (key, value) in parameters.items(): @@ -398,6 +398,8 @@ def _divide_parameters(self, parameters): parameters_2[key[:-2]] = value else: raise ValueError('unexpected error') + elif key in skipped_parameters: + continue # XXX change parameters here else: parameters_1[key] = value parameters_2[key] = value diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index 5eaabb5e..815e6531 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -588,3 +588,20 @@ def test_is_xallarap_2(): parameters = {'t_0_1': 0, 'u_0_1': 1, 't_0_2': 5, 'u_0_2': 0.1, 't_E': 9} model_params = mm.ModelParameters(parameters) assert not model_params.is_xallarap + + +def test_xallarap_n_sources(): + """ + Make sure that number of sources in xallarap models is properly calculated + """ + parameters = { + 't_0': 0, 't_E': 9., 'u_0': 0.1, 'xi_period': 12.345, + 'xi_semimajor_axis': 0.54321, 'xi_Omega_node': 100., + 'xi_inclination': 50., 'xi_argument_of_latitude_reference': 200., + 't_0_xi': 1.} + model_1S = mm.ModelParameters(parameters) + assert model_1S.n_sources == 1 + + parameters['q_source'] = 1. + model_2S = mm.ModelParameters(parameters) + assert model_2S.n_sources == 2 \ No newline at end of file From c21c5c6d373ae937b91ae1a8cc3d17819d8a4748 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Tue, 25 Jul 2023 19:30:51 +0200 Subject: [PATCH 02/41] setting second source xallarap parameters, some PEP8 work --- source/MulensModel/modelparameters.py | 7 ++- .../MulensModel/tests/test_ModelParameters.py | 47 +++++++++++++++---- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index b81e1f89..eab826d1 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -399,10 +399,15 @@ def _divide_parameters(self, parameters): else: raise ValueError('unexpected error') elif key in skipped_parameters: - continue # XXX change parameters here + continue else: parameters_1[key] = value parameters_2[key] = value + + if self.n_sources == 2 and self._type['xallarap']: + parameters_2['xi_semimajor_axis'] *= parameters['q_source'] + parameters_2['xi_argument_of_latitude_reference'] += 180. + return (parameters_1, parameters_2) def __repr__(self): diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index 815e6531..e31a35c8 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -112,6 +112,7 @@ def test_repr_t_0_par(): assert (out_1 + out_2) == str(params) + def test_repr_t_0_kep(): """ Make sure that t_0_kep is printed properly if provided directly. @@ -122,15 +123,17 @@ def test_repr_t_0_kep(): s = 1.0 q = 0.003 alpha = 30. - params = mm.ModelParameters( - {'t_0': t_0, 'u_0': u_0, 't_E': t_E, 's': s, 'q': q, 'alpha': alpha, - 'ds_dt': 0.47, 'dalpha_dt': 3.14, + params = mm.ModelParameters({ + 't_0': t_0, 'u_0': u_0, 't_E': t_E, 's': s, 'q': q, 'alpha': alpha, + 'ds_dt': 0.47, 'dalpha_dt': 3.14, 't_0_kep': t_0+1}) - out_1 = (" t_0 (HJD) u_0 t_E (d) s q alpha (deg) ds/dt (/yr) dalpha/dt (deg/yr) " - "t_0_kep (HJD) \n") - out_2 = ("2456145.00000 0.010000 62.6300 1.00000 0.00300000 30.00000 0.47000 3.14000 " - "2456146.00000 ") + out_1 = ( + " t_0 (HJD) u_0 t_E (d) s q alpha (deg)" + " ds/dt (/yr) dalpha/dt (deg/yr) t_0_kep (HJD) \n") + out_2 = ( + "2456145.00000 0.010000 62.6300 1.00000 0.00300000 30.00000" + " 0.47000 3.14000 2456146.00000 ") assert (out_1 + out_2) == str(params) @@ -604,4 +607,32 @@ def test_xallarap_n_sources(): parameters['q_source'] = 1. model_2S = mm.ModelParameters(parameters) - assert model_2S.n_sources == 2 \ No newline at end of file + assert model_2S.n_sources == 2 + + +def test_2S1L_xallarap_individual_source_parameters(): + """ + Make sure that parameters of both sources are properly set. + Most importantly, xi_u is shifted by 180 deg and xi_a is scaled by + q_source. + """ + q_source = 1.23456 + parameters_1st = { + 't_0': 0, 't_E': 9., 'u_0': 0.1, 'xi_period': 12.345, + 'xi_semimajor_axis': 0.54321, 'xi_Omega_node': 100., + 'xi_inclination': 50., 'xi_argument_of_latitude_reference': 200., + 't_0_xi': 1.} + + parameters_2nd = {**parameters_1st} + parameters_2nd['xi_semimajor_axis'] *= q_source + parameters_2nd['xi_argument_of_latitude_reference'] += 180. + + parameters = {**parameters_1st, 'q_source': q_source} + model = mm.Model(parameters) + check_1st = model.parameters.source_1_parameters.as_dict() + check_1st['t_E'] = check_1st['t_E'].value + check_2nd = model.parameters.source_2_parameters.as_dict() + check_2nd['t_E'] = check_2nd['t_E'].value + + assert check_1st == parameters_1st + assert check_2nd == parameters_2nd From a1c4a2e21c261c62b8d6e557034605932f97a819 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Wed, 26 Jul 2023 15:01:24 +0200 Subject: [PATCH 03/41] making tests shorter --- source/MulensModel/tests/test_ModelParameters.py | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index e31a35c8..ed44bb94 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -448,7 +448,7 @@ def test_failing_single_lens_with_mass_sheet(self): xallarap_parameters = { - 't_0': 0, 't_E': 9., 'u_0': 0.1, 'xi_period': 12.345, + 't_0': 2., 't_E': 9., 'u_0': 0.1, 'xi_period': 12.345, 'xi_semimajor_axis': 0.54321, 'xi_Omega_node': 0.123, 'xi_inclination': 9.8765, 'xi_argument_of_latitude_reference': 24.68, 'xi_eccentricity': 0.5, 'xi_omega_periapsis': 12.3456, 't_0_xi': 1.} @@ -458,7 +458,7 @@ def setup_xallarap(key): """ Setup for xallarap tests. """ - model = mm.ModelParameters(xallarap_parameters) + model = mm.ModelParameters({**xallarap_parameters}) return (model, xallarap_parameters[key]) @@ -597,11 +597,7 @@ def test_xallarap_n_sources(): """ Make sure that number of sources in xallarap models is properly calculated """ - parameters = { - 't_0': 0, 't_E': 9., 'u_0': 0.1, 'xi_period': 12.345, - 'xi_semimajor_axis': 0.54321, 'xi_Omega_node': 100., - 'xi_inclination': 50., 'xi_argument_of_latitude_reference': 200., - 't_0_xi': 1.} + parameters = {**xallarap_parameters} model_1S = mm.ModelParameters(parameters) assert model_1S.n_sources == 1 @@ -617,11 +613,7 @@ def test_2S1L_xallarap_individual_source_parameters(): q_source. """ q_source = 1.23456 - parameters_1st = { - 't_0': 0, 't_E': 9., 'u_0': 0.1, 'xi_period': 12.345, - 'xi_semimajor_axis': 0.54321, 'xi_Omega_node': 100., - 'xi_inclination': 50., 'xi_argument_of_latitude_reference': 200., - 't_0_xi': 1.} + parameters_1st = {**xallarap_parameters} parameters_2nd = {**parameters_1st} parameters_2nd['xi_semimajor_axis'] *= q_source From 4b9921b42fc9bd758f8729c294fb3553b77a466c Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Wed, 26 Jul 2023 15:40:43 +0200 Subject: [PATCH 04/41] ModelParameters._update_sources() for binary source with xallarap --- source/MulensModel/modelparameters.py | 13 +++++++ .../MulensModel/tests/test_ModelParameters.py | 35 ++++++++++++++++--- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index eab826d1..da3dda76 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -790,6 +790,11 @@ def _update_sources(self, parameter, value): if parameter in self._source_1_parameters.parameters: setattr(self._source_1_parameters, parameter, value) + if parameter == 'xi_semimajor_axis': + value *= self.parameters['q_source'] + elif parameter == 'xi_argument_of_latitude_reference': + value += 180. + if parameter in self._source_2_parameters.parameters: setattr(self._source_2_parameters, parameter, value) @@ -1440,6 +1445,7 @@ def xi_period(self, new_value): if new_value < 0.: raise ValueError('Xallarap period cannot be negative') self.parameters['xi_period'] = new_value + self._update_sources('xi_period', new_value) @property def xi_semimajor_axis(self): @@ -1455,6 +1461,7 @@ def xi_semimajor_axis(self, new_value): if new_value < 0.: raise ValueError('Xallarap semimajor axis cannot be negative') self.parameters['xi_semimajor_axis'] = new_value + self._update_sources('xi_semimajor_axis', new_value) @property def xi_Omega_node(self): @@ -1473,6 +1480,7 @@ def xi_Omega_node(self, new_value): self._warn_if_angle_outside_reasonable_range(new_value, 'xi_Omega_node') self.parameters['xi_Omega_node'] = new_value + self._update_sources('xi_Omega_node', new_value) @property def xi_inclination(self): @@ -1490,6 +1498,7 @@ def xi_inclination(self, new_value): self._warn_if_angle_outside_reasonable_range(new_value, 'xi_inclination') self.parameters['xi_inclination'] = new_value + self._update_sources('xi_inclination', new_value) @property def xi_argument_of_latitude_reference(self): @@ -1510,6 +1519,7 @@ def xi_argument_of_latitude_reference(self, new_value): self._warn_if_angle_outside_reasonable_range( new_value, 'xi_argument_of_latitude_reference') self.parameters['xi_argument_of_latitude_reference'] = new_value + self._update_sources('xi_argument_of_latitude_reference', new_value) @property def xi_eccentricity(self): @@ -1525,6 +1535,7 @@ def xi_eccentricity(self, new_value): if new_value < 0. or new_value >= 1.: raise ValueError('xallarap eccentricity has to be between 0 and 1') self.parameters['xi_eccentricity'] = new_value + self._update_sources('xi_eccentricity', new_value) @property def xi_omega_periapsis(self): @@ -1543,6 +1554,7 @@ def xi_omega_periapsis(self, new_value): self._warn_if_angle_outside_reasonable_range( new_value, 'xi_omega_periapsis') self.parameters['xi_omega_periapsis'] = new_value + self._update_sources('xi_omega_periapsis', new_value) @property def t_0_xi(self): @@ -1560,6 +1572,7 @@ def t_0_xi(self): @t_0_xi.setter def t_0_xi(self, new_value): self.parameters['t_0_xi'] = new_value + self._update_sources('t_0_xi', new_value) @property def t_0_1(self): diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index ed44bb94..3792bb99 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -619,12 +619,39 @@ def test_2S1L_xallarap_individual_source_parameters(): parameters_2nd['xi_semimajor_axis'] *= q_source parameters_2nd['xi_argument_of_latitude_reference'] += 180. - parameters = {**parameters_1st, 'q_source': q_source} - model = mm.Model(parameters) - check_1st = model.parameters.source_1_parameters.as_dict() + parameters = {'q_source': q_source, **parameters_1st} + model = mm.ModelParameters(parameters) + check_1st = model.source_1_parameters.as_dict() check_1st['t_E'] = check_1st['t_E'].value - check_2nd = model.parameters.source_2_parameters.as_dict() + check_2nd = model.source_2_parameters.as_dict() check_2nd['t_E'] = check_2nd['t_E'].value assert check_1st == parameters_1st assert check_2nd == parameters_2nd + + +tested_keys_3 = tested_keys_2 + ['q_source'] +@pytest.mark.parametrize("key", tested_keys_2) # XXX TO BE CHANGE TO _3 +def test_changes_of_xallrap_parameters_for_both_sources(key): + """ + Make sure that chainging a xallarap parameter in a binary source event + with binary sources model properly changes parameters of each parameter. + """ + q_source = 1.23456 + factor = 1.1 + parameters = {'q_source': q_source, **xallarap_parameters} + model = mm.ModelParameters(parameters) + old_value = getattr(model, key) + new_value = factor * old_value + setattr(model, key, new_value) + + assert getattr(model, key) == new_value + assert getattr(model.source_1_parameters, key) == new_value + + new_value_2 = new_value + if key == 'xi_argument_of_latitude_reference': + new_value_2 += 180. + elif key == 'xi_semimajor_axis': + new_value_2 *= q_source + + assert getattr(model.source_2_parameters, key) == new_value_2 From 09ea3aed5eaf3d69f9c6fa387a265ff802c43e01 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Wed, 26 Jul 2023 17:27:45 +0200 Subject: [PATCH 05/41] adding ModelParameters.q_source --- source/MulensModel/modelparameters.py | 16 ++++++++++++++++ source/MulensModel/tests/test_ModelParameters.py | 12 +++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index da3dda76..9d52bd30 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -1574,6 +1574,22 @@ def t_0_xi(self, new_value): self.parameters['t_0_xi'] = new_value self._update_sources('t_0_xi', new_value) + @property + def q_source(self): + """ + *float* + + The mass ratio of the second and the first source. + This is value must be positive and can be > 1. + Defined only for xallarap binary-source models because it does not + affect the magnification for binary-source models without xallrap. + """ + return self.parameters['q_source'] + + @q_source.setter + def q_source(self, new_value): + self.parameters['q_source'] = new_value + @property def t_0_1(self): """ diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index 3792bb99..fdbfbde6 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -631,11 +631,15 @@ def test_2S1L_xallarap_individual_source_parameters(): tested_keys_3 = tested_keys_2 + ['q_source'] -@pytest.mark.parametrize("key", tested_keys_2) # XXX TO BE CHANGE TO _3 +@pytest.mark.parametrize("key", tested_keys_3) + + def test_changes_of_xallrap_parameters_for_both_sources(key): """ Make sure that chainging a xallarap parameter in a binary source event with binary sources model properly changes parameters of each parameter. + For q_source make sure that it actually it's not passed to the parameters + of each source. """ q_source = 1.23456 factor = 1.1 @@ -646,6 +650,12 @@ def test_changes_of_xallrap_parameters_for_both_sources(key): setattr(model, key, new_value) assert getattr(model, key) == new_value + + if key == 'q_source': + assert 'q_source' not in model.source_1_parameters.parameters + assert 'q_source' not in model.source_2_parameters.parameters + return + assert getattr(model.source_1_parameters, key) == new_value new_value_2 = new_value From 2847ce88235d452fa3ecf113e07340290285c789 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Thu, 10 Aug 2023 16:14:54 +0200 Subject: [PATCH 06/41] xallarap_reference_position and _get_xallarap_orbit() added in ModelParameters; bug in using q_source --- source/MulensModel/modelparameters.py | 35 ++++++++++++++++++- .../MulensModel/tests/test_ModelParameters.py | 4 +-- source/MulensModel/trajectory.py | 4 +-- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 9d52bd30..752c66a9 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -3,6 +3,7 @@ import warnings from MulensModel.uniformcausticsampling import UniformCausticSampling +from MulensModel.orbits.orbit import Orbit # For definition of class ModelParameters see below. @@ -227,6 +228,11 @@ def __init__(self, parameters): if self._type['Cassan08']: self._uniform_caustic = None self._standard_parameters = None + if self.is_xallarap: + orbit_1 = self._get_xallarap_orbit({**parameters}) + t_0_xi = parameters.get('t_0_xi', parameters['t_0']) + position_1 = orbit_1.get_reference_plane_position(t_0_xi) + self.xallarap_reference_position = position_1 elif self.n_sources == 2: self._check_valid_combination_2_sources(parameters.keys()) if 't_E' not in parameters.keys(): @@ -241,15 +247,42 @@ def __init__(self, parameters): raise try: self._source_2_parameters = ModelParameters(params_2) + except Exception: print("ERROR IN ITIALIZING SOURCE 2") raise # The block above forces checks from "== 1" block above to be # run on each source parameters separately. + + if self.is_xallarap: + orbit_1 = self._source_1_parameters._get_xallarap_orbit() + t_0_xi = parameters.get('t_0_xi', parameters['t_0']) + position_1 = orbit_1.get_reference_plane_position(t_0_xi) + position_2 = position_1 / -parameters['q_source'] + self._source_1_parameters.xallarap_reference_position = ( + position_1) + orbit_2 = self._source_2_parameters._get_xallarap_orbit() + position_2 -= orbit_2.get_reference_plane_position(t_0_xi) + self._source_2_parameters.xallarap_reference_position = ( + position_1 - position_2) else: raise ValueError('wrong number of sources') self._set_parameters(parameters) + def _get_xallarap_orbit(self, parameters=None): + """ + Get Orbit object that defines the xallarap orbit. + """ + if parameters is None: + parameters = self.parameters + zip_ = parameters.items() + orbit_parameters = {key[3:]: value + for (key, value) in zip_ if key[:3] == "xi_"} + orbit_parameters['epoch_reference'] = parameters.get( + 't_0_xi', parameters['t_0']) + orbit = Orbit(**orbit_parameters) + return orbit + def _count_sources(self, keys): """How many sources there are?""" binary_params = ['t_0_1', 't_0_2', 'u_0_1', 'u_0_2', 'rho_1', 'rho_2', @@ -405,7 +438,7 @@ def _divide_parameters(self, parameters): parameters_2[key] = value if self.n_sources == 2 and self._type['xallarap']: - parameters_2['xi_semimajor_axis'] *= parameters['q_source'] + parameters_2['xi_semimajor_axis'] /= parameters['q_source'] parameters_2['xi_argument_of_latitude_reference'] += 180. return (parameters_1, parameters_2) diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index fdbfbde6..1a223e9d 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -616,7 +616,7 @@ def test_2S1L_xallarap_individual_source_parameters(): parameters_1st = {**xallarap_parameters} parameters_2nd = {**parameters_1st} - parameters_2nd['xi_semimajor_axis'] *= q_source + parameters_2nd['xi_semimajor_axis'] /= q_source parameters_2nd['xi_argument_of_latitude_reference'] += 180. parameters = {'q_source': q_source, **parameters_1st} @@ -631,9 +631,9 @@ def test_2S1L_xallarap_individual_source_parameters(): tested_keys_3 = tested_keys_2 + ['q_source'] -@pytest.mark.parametrize("key", tested_keys_3) +@pytest.mark.parametrize("key", tested_keys_3) def test_changes_of_xallrap_parameters_for_both_sources(key): """ Make sure that chainging a xallarap parameter in a binary source event diff --git a/source/MulensModel/trajectory.py b/source/MulensModel/trajectory.py index ece50bae..f07d574a 100644 --- a/source/MulensModel/trajectory.py +++ b/source/MulensModel/trajectory.py @@ -321,6 +321,6 @@ def _get_shifts_xallarap(self): key[3:]: value for (key, value) in zip_ if key[:3] == "xi_"} orbit_parameters['epoch_reference'] = t_0_xi orbit = Orbit(**orbit_parameters) - reference_position = orbit.get_reference_plane_position(t_0_xi) + #reference_position = orbit.get_reference_plane_position(t_0_xi) positions = orbit.get_reference_plane_position(self.times) - return positions - reference_position.reshape((2, 1)) + return positions - self.parameters.xallarap_reference_position From e9cfe2e2f9617b657c143ac3b3d948f72aa74e44 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Thu, 10 Aug 2023 16:15:43 +0200 Subject: [PATCH 07/41] extending input types in OrbitCircular._get_periapsis_epoch() --- source/MulensModel/orbits/orbit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/MulensModel/orbits/orbit.py b/source/MulensModel/orbits/orbit.py index 1e62a009..3f0d0e5c 100644 --- a/source/MulensModel/orbits/orbit.py +++ b/source/MulensModel/orbits/orbit.py @@ -213,7 +213,7 @@ def _get_periapsis_epoch(self, u_reference, epoch_reference): the argument_of_latitude (u) at given epoch """ time_shift = self._period * u_reference / (2. * np.pi) - return epoch_reference - time_shift + return np.float64(epoch_reference - time_shift) def get_orbital_plane_position(self, time): """ From 06da53094d8e861f412a0b56783bf05e53ea3035 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Fri, 11 Aug 2023 20:13:05 +0200 Subject: [PATCH 08/41] reverting recent change because of failing tests: get_reference_plane_position([t_0_xi]) --- source/MulensModel/modelparameters.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 752c66a9..dd16a501 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -231,7 +231,7 @@ def __init__(self, parameters): if self.is_xallarap: orbit_1 = self._get_xallarap_orbit({**parameters}) t_0_xi = parameters.get('t_0_xi', parameters['t_0']) - position_1 = orbit_1.get_reference_plane_position(t_0_xi) + position_1 = orbit_1.get_reference_plane_position([t_0_xi]) self.xallarap_reference_position = position_1 elif self.n_sources == 2: self._check_valid_combination_2_sources(parameters.keys()) @@ -257,12 +257,12 @@ def __init__(self, parameters): if self.is_xallarap: orbit_1 = self._source_1_parameters._get_xallarap_orbit() t_0_xi = parameters.get('t_0_xi', parameters['t_0']) - position_1 = orbit_1.get_reference_plane_position(t_0_xi) + position_1 = orbit_1.get_reference_plane_position([t_0_xi]) position_2 = position_1 / -parameters['q_source'] self._source_1_parameters.xallarap_reference_position = ( position_1) orbit_2 = self._source_2_parameters._get_xallarap_orbit() - position_2 -= orbit_2.get_reference_plane_position(t_0_xi) + position_2 -= orbit_2.get_reference_plane_position([t_0_xi]) self._source_2_parameters.xallarap_reference_position = ( position_1 - position_2) else: From f422b3cff6e4c00205fff85571fa40fa923024bc Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Fri, 11 Aug 2023 20:20:32 +0200 Subject: [PATCH 09/41] moving t_0_xi = ... and expanding docsting in ModelParameters --- source/MulensModel/modelparameters.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index dd16a501..b7764eae 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -223,6 +223,9 @@ def __init__(self, parameters): self._set_type(parameters.keys()) self._check_types('alpha' in parameters.keys()) + if self.is_xallarap: + t_0_xi = parameters.get('t_0_xi', parameters['t_0']) + if self.n_sources == 1: self._check_valid_combination_1_source(parameters.keys()) if self._type['Cassan08']: @@ -230,7 +233,6 @@ def __init__(self, parameters): self._standard_parameters = None if self.is_xallarap: orbit_1 = self._get_xallarap_orbit({**parameters}) - t_0_xi = parameters.get('t_0_xi', parameters['t_0']) position_1 = orbit_1.get_reference_plane_position([t_0_xi]) self.xallarap_reference_position = position_1 elif self.n_sources == 2: @@ -256,7 +258,6 @@ def __init__(self, parameters): if self.is_xallarap: orbit_1 = self._source_1_parameters._get_xallarap_orbit() - t_0_xi = parameters.get('t_0_xi', parameters['t_0']) position_1 = orbit_1.get_reference_plane_position([t_0_xi]) position_2 = position_1 / -parameters['q_source'] self._source_1_parameters.xallarap_reference_position = ( @@ -272,6 +273,10 @@ def __init__(self, parameters): def _get_xallarap_orbit(self, parameters=None): """ Get Orbit object that defines the xallarap orbit. + + Note: this function is called in 2 different ways: + - directly, i.e., self._get_xallarap_orbit(), and + - indirectly, i.e., self._source_1_parameters._get_xallarap_orbit(). """ if parameters is None: parameters = self.parameters From 040bd3c7dbe87aad88bc192d5b768aaff525a54a Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Fri, 11 Aug 2023 20:32:24 +0200 Subject: [PATCH 10/41] simplifying division of orbits into 2 --- source/MulensModel/modelparameters.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index b7764eae..48f4975f 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -223,17 +223,13 @@ def __init__(self, parameters): self._set_type(parameters.keys()) self._check_types('alpha' in parameters.keys()) - if self.is_xallarap: - t_0_xi = parameters.get('t_0_xi', parameters['t_0']) - if self.n_sources == 1: self._check_valid_combination_1_source(parameters.keys()) if self._type['Cassan08']: self._uniform_caustic = None self._standard_parameters = None if self.is_xallarap: - orbit_1 = self._get_xallarap_orbit({**parameters}) - position_1 = orbit_1.get_reference_plane_position([t_0_xi]) + position_1 = self._get_xallarap_position({**parameters}) self.xallarap_reference_position = position_1 elif self.n_sources == 2: self._check_valid_combination_2_sources(parameters.keys()) @@ -257,22 +253,20 @@ def __init__(self, parameters): # run on each source parameters separately. if self.is_xallarap: - orbit_1 = self._source_1_parameters._get_xallarap_orbit() - position_1 = orbit_1.get_reference_plane_position([t_0_xi]) + position_1 = self._source_1_parameters._get_xallarap_position() position_2 = position_1 / -parameters['q_source'] self._source_1_parameters.xallarap_reference_position = ( position_1) - orbit_2 = self._source_2_parameters._get_xallarap_orbit() - position_2 -= orbit_2.get_reference_plane_position([t_0_xi]) + position_2 -= self._source_2_parameters._get_xallarap_position() self._source_2_parameters.xallarap_reference_position = ( position_1 - position_2) else: raise ValueError('wrong number of sources') self._set_parameters(parameters) - def _get_xallarap_orbit(self, parameters=None): + def _get_xallarap_position(self, parameters=None): """ - Get Orbit object that defines the xallarap orbit. + Get position at t_0_xi from xallarap Orbit object. Note: this function is called in 2 different ways: - directly, i.e., self._get_xallarap_orbit(), and @@ -280,13 +274,14 @@ def _get_xallarap_orbit(self, parameters=None): """ if parameters is None: parameters = self.parameters + t_0_xi = parameters.get('t_0_xi', parameters['t_0']) + zip_ = parameters.items() orbit_parameters = {key[3:]: value for (key, value) in zip_ if key[:3] == "xi_"} - orbit_parameters['epoch_reference'] = parameters.get( - 't_0_xi', parameters['t_0']) + orbit_parameters['epoch_reference'] = t_0_xi orbit = Orbit(**orbit_parameters) - return orbit + return orbit.get_reference_plane_position([t_0_xi]) def _count_sources(self, keys): """How many sources there are?""" From d5d429f4f6c9c22cd448b5ac6ec5e62cd2378364 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Fri, 11 Aug 2023 20:39:34 +0200 Subject: [PATCH 11/41] simplifying equations for ModelParameters.xallarap_reference_position --- source/MulensModel/modelparameters.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 48f4975f..065bc58b 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -229,8 +229,8 @@ def __init__(self, parameters): self._uniform_caustic = None self._standard_parameters = None if self.is_xallarap: - position_1 = self._get_xallarap_position({**parameters}) - self.xallarap_reference_position = position_1 + delta_1 = self._get_xallarap_position(parameters) + self.xallarap_reference_position = delta_1 elif self.n_sources == 2: self._check_valid_combination_2_sources(parameters.keys()) if 't_E' not in parameters.keys(): @@ -253,13 +253,11 @@ def __init__(self, parameters): # run on each source parameters separately. if self.is_xallarap: - position_1 = self._source_1_parameters._get_xallarap_position() - position_2 = position_1 / -parameters['q_source'] - self._source_1_parameters.xallarap_reference_position = ( - position_1) - position_2 -= self._source_2_parameters._get_xallarap_position() - self._source_2_parameters.xallarap_reference_position = ( - position_1 - position_2) + delta_1 = self._source_1_parameters._get_xallarap_position() + delta_2 = self._source_2_parameters._get_xallarap_position() + delta = delta_1 * (1. + 1. / parameters['q_source']) + delta_2 + self._source_1_parameters.xallarap_reference_position = delta_1 + self._source_2_parameters.xallarap_reference_position = delta_2 else: raise ValueError('wrong number of sources') self._set_parameters(parameters) From 8decd290bf9865494bd6917dde515ca8b65cde20 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Thu, 24 Aug 2023 00:57:17 +0200 Subject: [PATCH 12/41] correcting bug and test: xi_a_2 = xi_a_1 / q_source, not * q_source --- source/MulensModel/modelparameters.py | 2 +- source/MulensModel/tests/test_ModelParameters.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 065bc58b..19001884 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -822,7 +822,7 @@ def _update_sources(self, parameter, value): setattr(self._source_1_parameters, parameter, value) if parameter == 'xi_semimajor_axis': - value *= self.parameters['q_source'] + value /= self.parameters['q_source'] elif parameter == 'xi_argument_of_latitude_reference': value += 180. diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index 1a223e9d..24be8145 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -662,6 +662,6 @@ def test_changes_of_xallrap_parameters_for_both_sources(key): if key == 'xi_argument_of_latitude_reference': new_value_2 += 180. elif key == 'xi_semimajor_axis': - new_value_2 *= q_source + new_value_2 /= q_source assert getattr(model.source_2_parameters, key) == new_value_2 From 9038305f9918d03c4f6be24ac317454f88be69ce Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Thu, 24 Aug 2023 01:08:40 +0200 Subject: [PATCH 13/41] bug in updating xi_a values --- source/MulensModel/modelparameters.py | 5 +++++ source/MulensModel/tests/test_ModelParameters.py | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 19001884..28b72520 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -829,6 +829,10 @@ def _update_sources(self, parameter, value): if parameter in self._source_2_parameters.parameters: setattr(self._source_2_parameters, parameter, value) + if parameter == 'q_source': + value = self.parameters['xi_semimajor_axis'] / self.parameters['q_source'] + setattr(self._source_2_parameters, 'xi_semimajor_axis', value) + def _set_time_quantity(self, key, new_time): """ Save a variable with units of time (e.g. t_E, t_star, @@ -1620,6 +1624,7 @@ def q_source(self): @q_source.setter def q_source(self, new_value): self.parameters['q_source'] = new_value + self._update_sources('q_source', new_value) @property def t_0_1(self): diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index 24be8145..0a2db88d 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -654,6 +654,10 @@ def test_changes_of_xallrap_parameters_for_both_sources(key): if key == 'q_source': assert 'q_source' not in model.source_1_parameters.parameters assert 'q_source' not in model.source_2_parameters.parameters + key_a = 'xi_semimajor_axis' + xi_a = xallarap_parameters[key_a] + assert model.source_1_parameters.parameters[key_a] == xi_a + assert model.source_2_parameters.parameters[key_a] == xi_a / new_value return assert getattr(model.source_1_parameters, key) == new_value From 56e52f6c9eaa0ab3fb9b5ea717364b6158f2ce64 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Thu, 24 Aug 2023 01:22:08 +0200 Subject: [PATCH 14/41] introducing ModelParameters._update_sources_xallarap_reference() - also removes a bug --- source/MulensModel/modelparameters.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 28b72520..0179046d 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -253,15 +253,22 @@ def __init__(self, parameters): # run on each source parameters separately. if self.is_xallarap: - delta_1 = self._source_1_parameters._get_xallarap_position() - delta_2 = self._source_2_parameters._get_xallarap_position() - delta = delta_1 * (1. + 1. / parameters['q_source']) + delta_2 - self._source_1_parameters.xallarap_reference_position = delta_1 - self._source_2_parameters.xallarap_reference_position = delta_2 + self._update_sources_xallarap_reference(parameters['q_source']) else: raise ValueError('wrong number of sources') self._set_parameters(parameters) + def _update_sources_xallarap_reference(self, q_source=None): + """ + Update .xallarap_reference_position for each source parameters + """ + if q_source is None: + q_source = self.q_source + + delta_1 = self._source_1_parameters._get_xallarap_position() + self._source_1_parameters.xallarap_reference_position = delta_1 + self._source_2_parameters.xallarap_reference_position = delta_1 + def _get_xallarap_position(self, parameters=None): """ Get position at t_0_xi from xallarap Orbit object. @@ -833,6 +840,9 @@ def _update_sources(self, parameter, value): value = self.parameters['xi_semimajor_axis'] / self.parameters['q_source'] setattr(self._source_2_parameters, 'xi_semimajor_axis', value) + if self.is_xallarap and self.n_sources > 1: + self._update_sources_xallarap_reference() + def _set_time_quantity(self, key, new_time): """ Save a variable with units of time (e.g. t_E, t_star, From ab83097cd208af00b3619a4259cb2a04212d98a9 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Thu, 24 Aug 2023 01:23:12 +0200 Subject: [PATCH 15/41] PEP8 in modelparameters.py --- source/MulensModel/modelparameters.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 0179046d..c7d894ee 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -353,7 +353,6 @@ def _check_types(self, alpha_defined): Check if self._type values make sense """ n_lenses = self._n_lenses - n_sources = self._n_sources # Lens orbital motion requires binary lens: if self._type['lens 2-parameter orbital motion'] and n_lenses == 1: @@ -837,8 +836,8 @@ def _update_sources(self, parameter, value): setattr(self._source_2_parameters, parameter, value) if parameter == 'q_source': - value = self.parameters['xi_semimajor_axis'] / self.parameters['q_source'] - setattr(self._source_2_parameters, 'xi_semimajor_axis', value) + value_ = self.parameters['xi_semimajor_axis'] / value + setattr(self._source_2_parameters, 'xi_semimajor_axis', value_) if self.is_xallarap and self.n_sources > 1: self._update_sources_xallarap_reference() From 053a76034dca69161ba14692cb121d7a31ea4a44 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Wed, 30 Aug 2023 07:44:12 +0200 Subject: [PATCH 16/41] 2 luminous sources and xallarap - allowing FS of one source --- source/MulensModel/modelparameters.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index c7d894ee..15f0ff7d 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -218,9 +218,9 @@ def __init__(self, parameters): "as a parameter\ne.g., ModelParameters({'t_0': " + "2456789.0, 'u_0': 0.123, 't_E': 23.45})") + self._set_type(parameters.keys()) self._count_sources(set(parameters.keys())) self._count_lenses(parameters.keys()) - self._set_type(parameters.keys()) self._check_types('alpha' in parameters.keys()) if self.n_sources == 1: @@ -298,8 +298,12 @@ def _count_sources(self, keys): elif len(common) == 0 and 'q_source' in keys: self._n_sources = 2 elif len(common) == 1: - raise ValueError('Wrong parameters - the only binary source ' + - 'parameter is {:}'.format(common)) + finite_source_params = ['rho_1', 'rho_2', 't_star_1', 't_star_2'] + if self.is_xallarap and list(common)[0] in finite_source_params: + self._n_sources = 2 + else: + raise ValueError('Wrong parameters - the only binary ' + + 'source parameter is {:}'.format(common)) else: common_no_1_2 = {param[:-2] for param in common} condition_1 = (len(common_no_1_2) == len(common)) From 332728a19743e2443290692d6d429df3711efbc6 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Thu, 21 Sep 2023 17:58:36 +0200 Subject: [PATCH 17/41] do not mix xallarap with t_0_1 etc. --- source/MulensModel/modelparameters.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 15f0ff7d..c096dab1 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -594,15 +594,22 @@ def _get_formats_for_repr(self, form, full_name): def _check_valid_combination_2_sources(self, keys): """ - make sure that there is no conflict between t_0 and t_0_1 etc. + Make sure that there is no conflict between t_0 and t_0_1 etc. + Also make sure that xallarap is not mixed with t_0_1, u_0_1 etc. """ - binary_params = ( - 't_0_1 t_0_2 u_0_1 u_0_2 rho_1 rho_2 t_star_1 t_star_2'.split()) + binary_params_nonFS = 't_0_1 t_0_2 u_0_1 u_0_2'.split() + binary_params_FS = 'rho_1 rho_2 t_star_1 t_star_2'.split() + binary_params = binary_params_nonFS + binary_params_FS for parameter in binary_params: if (parameter in keys) and (parameter[:-2] in keys): raise ValueError('You cannot set {:} and {:}'.format( parameter, parameter[:-2])) + common = set(keys).intersection(binary_params_nonFS) + if self.is_xallarap and len(common) > 0: + msg = 'xallarap parameters cannot be mixed with {:}' + raise NotImplementedError(msg.format(common)) + def _check_valid_combination_1_source_standard(self, keys): """ Here we check parameters for non-Cassan08 parameterization. From 9943fabe56a3e9ee5ef180ce6914e8ff634e928b Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Thu, 21 Sep 2023 19:23:33 +0200 Subject: [PATCH 18/41] simplifying ModelParameters._update_sources_xallarap_reference() --- source/MulensModel/modelparameters.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index c096dab1..b0065e5e 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -253,18 +253,15 @@ def __init__(self, parameters): # run on each source parameters separately. if self.is_xallarap: - self._update_sources_xallarap_reference(parameters['q_source']) + self._update_sources_xallarap_reference() else: raise ValueError('wrong number of sources') self._set_parameters(parameters) - def _update_sources_xallarap_reference(self, q_source=None): + def _update_sources_xallarap_reference(self): """ Update .xallarap_reference_position for each source parameters """ - if q_source is None: - q_source = self.q_source - delta_1 = self._source_1_parameters._get_xallarap_position() self._source_1_parameters.xallarap_reference_position = delta_1 self._source_2_parameters.xallarap_reference_position = delta_1 From e3361908249335cd597e1f26da5865a64a8fc0b4 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Sat, 30 Sep 2023 10:22:34 +0200 Subject: [PATCH 19/41] q_source must be positive --- source/MulensModel/modelparameters.py | 4 ++++ .../MulensModel/tests/test_ModelParameters.py | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index b0065e5e..aa0cf643 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -443,6 +443,8 @@ def _divide_parameters(self, parameters): parameters_2[key] = value if self.n_sources == 2 and self._type['xallarap']: + if parameters['q_source'] < 0.: + raise ValueError('q_source cannot be negative') parameters_2['xi_semimajor_axis'] /= parameters['q_source'] parameters_2['xi_argument_of_latitude_reference'] += 180. @@ -1640,6 +1642,8 @@ def q_source(self): @q_source.setter def q_source(self, new_value): + if new_value < 0.: + raise ValueError('q_source cannot be negative') self.parameters['q_source'] = new_value self._update_sources('q_source', new_value) diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index 0a2db88d..355b3be4 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -548,6 +548,23 @@ def test_xallarap_and_Cassan08(self): with self.assertRaises(NotImplementedError): mm.ModelParameters(parameters) + def test_negative_source_mass_ratio_1(self): + """ + q_source must be positive in __init__() + """ + parameters = {**xallarap_parameters, 'q_source': -0.12345} + with self.assertRaises(ValueError): + model = mm.ModelParameters(parameters) + + def test_negative_source_mass_ratio_2(self): + """ + q_source must be positive + """ + parameters = {**xallarap_parameters, 'q_source': 0.12345} + model = mm.ModelParameters(parameters) + with self.assertRaises(ValueError): + setattr(model, 'q_source', -0.12345) + @pytest.mark.parametrize( "parameter", From 89b3afd43702572defed57763e9b9ce4ef4c982d Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Sat, 30 Sep 2023 13:03:34 +0200 Subject: [PATCH 20/41] clarifying ModelParameters._count_sources() --- source/MulensModel/modelparameters.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index aa0cf643..1689ca26 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -286,16 +286,16 @@ def _get_xallarap_position(self, parameters=None): return orbit.get_reference_plane_position([t_0_xi]) def _count_sources(self, keys): - """How many sources there are?""" - binary_params = ['t_0_1', 't_0_2', 'u_0_1', 'u_0_2', 'rho_1', 'rho_2', - 't_star_1', 't_star_2'] + """How many luminous sources there are?""" + finite_source_params = ['rho_1', 'rho_2', 't_star_1', 't_star_2'] + binary_params = ['t_0_1', 't_0_2', 'u_0_1', 'u_0_2'] + binary_params += finite_source_params common = set(binary_params).intersection(keys) if len(common) == 0 and 'q_source' not in keys: self._n_sources = 1 elif len(common) == 0 and 'q_source' in keys: self._n_sources = 2 elif len(common) == 1: - finite_source_params = ['rho_1', 'rho_2', 't_star_1', 't_star_2'] if self.is_xallarap and list(common)[0] in finite_source_params: self._n_sources = 2 else: From 86ee73859134ea8f5b76e80010a87941b7726b4a Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Sat, 30 Sep 2023 18:35:28 +0200 Subject: [PATCH 21/41] 2 sources with xallarap - allowing both to have finite size --- source/MulensModel/modelparameters.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 1689ca26..c7349ef0 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -286,11 +286,16 @@ def _get_xallarap_position(self, parameters=None): return orbit.get_reference_plane_position([t_0_xi]) def _count_sources(self, keys): - """How many luminous sources there are?""" + """ + How many luminous sources there are? + We're also checking for ill-defined xallarap with + *_1 and *_2 binary source parameters. + """ finite_source_params = ['rho_1', 'rho_2', 't_star_1', 't_star_2'] binary_params = ['t_0_1', 't_0_2', 'u_0_1', 'u_0_2'] binary_params += finite_source_params common = set(binary_params).intersection(keys) + common_finite_source = common.intersection(finite_source_params) if len(common) == 0 and 'q_source' not in keys: self._n_sources = 1 elif len(common) == 0 and 'q_source' in keys: @@ -301,6 +306,11 @@ def _count_sources(self, keys): else: raise ValueError('Wrong parameters - the only binary ' + 'source parameter is {:}'.format(common)) + elif len(common) == 2 and len(common_finite_source) == 2 and 'q_source' in keys: + if common in [{'rho_1', 't_star_1'}, {'rho_2', 't_star_2'}]: + raise ValueError('source size overdefined: {:}'.format(common)) + else: + self._n_sources = 2 else: common_no_1_2 = {param[:-2] for param in common} condition_1 = (len(common_no_1_2) == len(common)) From 6b3e5935d763f86dcee1b6d3755bf1bac0d30e81 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Sat, 30 Sep 2023 18:40:27 +0200 Subject: [PATCH 22/41] further simplifying _count_sources --- source/MulensModel/modelparameters.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index c7349ef0..14a46a95 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -295,18 +295,18 @@ def _count_sources(self, keys): binary_params = ['t_0_1', 't_0_2', 'u_0_1', 'u_0_2'] binary_params += finite_source_params common = set(binary_params).intersection(keys) - common_finite_source = common.intersection(finite_source_params) + n_finite = len(common.intersection(finite_source_params)) if len(common) == 0 and 'q_source' not in keys: self._n_sources = 1 elif len(common) == 0 and 'q_source' in keys: self._n_sources = 2 elif len(common) == 1: - if self.is_xallarap and list(common)[0] in finite_source_params: + if self.is_xallarap and n_finite == 1: self._n_sources = 2 else: raise ValueError('Wrong parameters - the only binary ' + 'source parameter is {:}'.format(common)) - elif len(common) == 2 and len(common_finite_source) == 2 and 'q_source' in keys: + elif len(common) == 2 and n_finite == 2 and 'q_source' in keys: if common in [{'rho_1', 't_star_1'}, {'rho_2', 't_star_2'}]: raise ValueError('source size overdefined: {:}'.format(common)) else: From f92677644bebd7ab4a9d9fd1e9bebd2b93442819 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Thu, 5 Oct 2023 06:57:55 +0200 Subject: [PATCH 23/41] correcting n_sources for xallarap with FS --- source/MulensModel/modelparameters.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 14a46a95..09d47c0b 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -302,7 +302,11 @@ def _count_sources(self, keys): self._n_sources = 2 elif len(common) == 1: if self.is_xallarap and n_finite == 1: - self._n_sources = 2 + finite_param = list(common.intersection(finite_source_params))[0] + if finite_param in ['rho_2', 't_star_2']: + self._n_sources = 2 + else: + self._n_sources = 1 else: raise ValueError('Wrong parameters - the only binary ' + 'source parameter is {:}'.format(common)) From bdc9851e650cf2305e378362687195e72f93b546 Mon Sep 17 00:00:00 2001 From: rpoleski Date: Thu, 25 Apr 2024 02:43:28 +0200 Subject: [PATCH 24/41] direct documentation of ModelParameters.xallarap_reference_position --- source/MulensModel/modelparameters.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 09d47c0b..a823af14 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -230,7 +230,7 @@ def __init__(self, parameters): self._standard_parameters = None if self.is_xallarap: delta_1 = self._get_xallarap_position(parameters) - self.xallarap_reference_position = delta_1 + self._xallarap_reference_position = delta_1 elif self.n_sources == 2: self._check_valid_combination_2_sources(parameters.keys()) if 't_E' not in parameters.keys(): @@ -261,10 +261,14 @@ def __init__(self, parameters): def _update_sources_xallarap_reference(self): """ Update .xallarap_reference_position for each source parameters + + Note: below we're calling private function and set private + properties NOT of self, but self._source_X_parameters, + which both are of the same type as self. """ delta_1 = self._source_1_parameters._get_xallarap_position() - self._source_1_parameters.xallarap_reference_position = delta_1 - self._source_2_parameters.xallarap_reference_position = delta_1 + self._source_1_parameters._xallarap_reference_position = delta_1 + self._source_2_parameters._xallarap_reference_position = delta_1 def _get_xallarap_position(self, parameters=None): """ @@ -1661,6 +1665,18 @@ def q_source(self, new_value): self.parameters['q_source'] = new_value self._update_sources('q_source', new_value) + @property + def xallarap_reference_position(self): + """ + *np.ndarray* of shape (2, 1) + + The position of the first source at :py:attr:`~t_0_xi` relative to + the source center of mass. It is a 2D vector that is subtracted from + the source position along the orbit in order to calculate the shift + caused by xallarap. + """ + return self._xallarap_reference_position + @property def t_0_1(self): """ From b53e0a0606c143bd7c70bb836f1736257b3c537c Mon Sep 17 00:00:00 2001 From: rpoleski Date: Thu, 25 Apr 2024 03:11:00 +0200 Subject: [PATCH 25/41] printing xallrap reference position --- source/MulensModel/modelparameters.py | 9 +++++++- .../MulensModel/tests/test_ModelParameters.py | 21 ++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index a823af14..69a947d8 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -485,7 +485,14 @@ def __repr__(self): variables += fmt_1.format(full_name) values += fmt_2.format(value) - return '{0}\n{1}'.format(variables, values) + out = '{0}\n{1}'.format(variables, values) + + if self.is_xallarap: + fmt = "\nxallarap reference position: ({:.4f}, {:.4f})" + position = self.xallarap_reference_position + out += fmt.format(position[0, 0], position[1, 0]) + + return out def _get_keys_for_repr(self): """ diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index 355b3be4..0dfacdbd 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -554,7 +554,7 @@ def test_negative_source_mass_ratio_1(self): """ parameters = {**xallarap_parameters, 'q_source': -0.12345} with self.assertRaises(ValueError): - model = mm.ModelParameters(parameters) + _ = mm.ModelParameters(parameters) def test_negative_source_mass_ratio_2(self): """ @@ -566,6 +566,25 @@ def test_negative_source_mass_ratio_2(self): setattr(model, 'q_source', -0.12345) +def test_print_xallarap(): + """ + Test if printing of printing of xallarap model works as expected. + """ + model = setup_xallarap('t_0')[0] + expected = ( + " t_0 (HJD) u_0 t_E (d) xallarap period (d) xallarap " + "semimajor axis xallarap inclination (deg) xallarap Omega node (deg) " + "xallarap argument of latitude reference (deg) xallarap eccentricity " + "xallarap omega periapsis (deg) t_0_xi (HJD) " + "\n 2.00000 0.100000 9.0000 12.3450 " + " 0.543210 9.87650 0.12300 " + " 24.68000 0.500000 " + " 12.34560 1.00000 " + "\nxallarap reference position: (0.2673, 0.0582)" + ) + assert model.__repr__() == expected + + @pytest.mark.parametrize( "parameter", ['xi_Omega_node', 'xi_inclination', 'xi_argument_of_latitude_reference']) From b6a5b53c48c24b8b7f7fb2bed9a6827d421271db Mon Sep 17 00:00:00 2001 From: rpoleski Date: Thu, 25 Apr 2024 03:16:26 +0200 Subject: [PATCH 26/41] splitting ModelParameters.__repr__() into shorter functions --- source/MulensModel/modelparameters.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 69a947d8..0a7bd5f9 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -470,6 +470,19 @@ def _divide_parameters(self, parameters): def __repr__(self): """A nice way to represent a ModelParameters object as a string""" + out = self._get_main_parameters_to_print() + + if self.is_xallarap: + fmt = "\nxallarap reference position: ({:.4f}, {:.4f})" + position = self.xallarap_reference_position + out += fmt.format(position[0, 0], position[1, 0]) + + return out + + def _get_main_parameters_to_print(self): + """ + prepare all the standard parameters to be printed + """ keys = self._get_keys_for_repr() formats = self._get_formats_dict_for_repr() ordered_keys = self._get_ordered_keys_for_repr() @@ -485,14 +498,7 @@ def __repr__(self): variables += fmt_1.format(full_name) values += fmt_2.format(value) - out = '{0}\n{1}'.format(variables, values) - - if self.is_xallarap: - fmt = "\nxallarap reference position: ({:.4f}, {:.4f})" - position = self.xallarap_reference_position - out += fmt.format(position[0, 0], position[1, 0]) - - return out + return '{0}\n{1}'.format(variables, values) def _get_keys_for_repr(self): """ From d7aae7f278961095ffe808a45e41746234361de9 Mon Sep 17 00:00:00 2001 From: rpoleski Date: Thu, 25 Apr 2024 04:03:58 +0200 Subject: [PATCH 27/41] printing q_source --- source/MulensModel/modelparameters.py | 9 +++++++-- source/MulensModel/tests/test_ModelParameters.py | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 0a7bd5f9..541caa9e 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -474,7 +474,11 @@ def __repr__(self): if self.is_xallarap: fmt = "\nxallarap reference position: ({:.4f}, {:.4f})" - position = self.xallarap_reference_position + if self.n_sources == 1: + source = self + else: + source = self._source_1_parameters + position = source.xallarap_reference_position out += fmt.format(position[0, 0], position[1, 0]) return out @@ -566,6 +570,7 @@ def _get_formats_dict_for_repr(self): 'name': 'xallarap eccentricity'}, 'xi_omega_periapsis': {'width': 11, 'precision': 5, 'unit': 'deg', 'name': 'xallarap omega periapsis'}, + 'q_source': {'width': 12, 'precision': 8}, 't_0_xi': {'width': 13, 'precision': 5, 'unit': 'HJD'}, } # Add binary source parameters with the same settings. @@ -594,7 +599,7 @@ def _get_ordered_keys_for_repr(self): 'x_caustic_in', 'x_caustic_out', 't_caustic_in', 't_caustic_out', 'xi_period', 'xi_semimajor_axis', 'xi_inclination', 'xi_Omega_node', 'xi_argument_of_latitude_reference', - 'xi_eccentricity', 'xi_omega_periapsis', 't_0_xi' + 'xi_eccentricity', 'xi_omega_periapsis', 'q_source', 't_0_xi' ] return ordered_keys diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index 0dfacdbd..44ec3055 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -570,7 +570,7 @@ def test_print_xallarap(): """ Test if printing of printing of xallarap model works as expected. """ - model = setup_xallarap('t_0')[0] + model = mm.ModelParameters(xallarap_parameters) expected = ( " t_0 (HJD) u_0 t_E (d) xallarap period (d) xallarap " "semimajor axis xallarap inclination (deg) xallarap Omega node (deg) " @@ -585,6 +585,20 @@ def test_print_xallarap(): assert model.__repr__() == expected +def test_print_xallarap_with_q_source(): + """ + Test if printing of printing of xallarap model with q_source works + as expected. Most stuff was tested in test_print_xallarap(), so we + check only the parts that are important here. + """ + parameters = {**xallarap_parameters, 'q_source': 0.12345} + model = mm.ModelParameters(parameters) + lines = model.__repr__().split("\n") + assert lines[0][-27:] == " q_source t_0_xi (HJD) " + assert lines[1][-27:] == " 0.12345000 1.00000 " + assert lines[2] == "xallarap reference position: (0.2673, 0.0582)" + + @pytest.mark.parametrize( "parameter", ['xi_Omega_node', 'xi_inclination', 'xi_argument_of_latitude_reference']) From bd113c1cd65a987cd30287f5b28d1c151cdf5fde Mon Sep 17 00:00:00 2001 From: rpoleski Date: Thu, 25 Apr 2024 17:27:53 +0200 Subject: [PATCH 28/41] splitting main part of ModelParameters.__init__() into 2 --- source/MulensModel/modelparameters.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 541caa9e..720d70b0 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -224,6 +224,18 @@ def __init__(self, parameters): self._check_types('alpha' in parameters.keys()) if self.n_sources == 1: + self._init_1_source(parameters) + elif self.n_sources == 2: + self._init_2_sources(parameters) + else: + raise ValueError('wrong number of sources') + + self._set_parameters(parameters) + + def _init_1_source(self, parameters): + """ + initialize model with 1 source + """ self._check_valid_combination_1_source(parameters.keys()) if self._type['Cassan08']: self._uniform_caustic = None @@ -231,7 +243,11 @@ def __init__(self, parameters): if self.is_xallarap: delta_1 = self._get_xallarap_position(parameters) self._xallarap_reference_position = delta_1 - elif self.n_sources == 2: + + def _init_2_sources(self, parameters): + """ + initialize model with s sources + """ self._check_valid_combination_2_sources(parameters.keys()) if 't_E' not in parameters.keys(): raise KeyError('Currently, the binary source calculations ' + @@ -254,9 +270,6 @@ def __init__(self, parameters): if self.is_xallarap: self._update_sources_xallarap_reference() - else: - raise ValueError('wrong number of sources') - self._set_parameters(parameters) def _update_sources_xallarap_reference(self): """ From 84401cd0cff386458f5fc5b38e31ff07def34cfe Mon Sep 17 00:00:00 2001 From: rpoleski Date: Thu, 25 Apr 2024 17:31:39 +0200 Subject: [PATCH 29/41] correcting indentation --- source/MulensModel/modelparameters.py | 69 ++++++++++++++------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 720d70b0..e15aa64c 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -233,43 +233,44 @@ def __init__(self, parameters): self._set_parameters(parameters) def _init_1_source(self, parameters): - """ - initialize model with 1 source - """ - self._check_valid_combination_1_source(parameters.keys()) - if self._type['Cassan08']: - self._uniform_caustic = None - self._standard_parameters = None - if self.is_xallarap: - delta_1 = self._get_xallarap_position(parameters) - self._xallarap_reference_position = delta_1 + """ + initialize model with 1 source + """ + self._check_valid_combination_1_source(parameters.keys()) + if self._type['Cassan08']: + self._uniform_caustic = None + self._standard_parameters = None + if self.is_xallarap: + delta_1 = self._get_xallarap_position(parameters) + self._xallarap_reference_position = delta_1 def _init_2_sources(self, parameters): - """ - initialize model with s sources - """ - self._check_valid_combination_2_sources(parameters.keys()) - if 't_E' not in parameters.keys(): - raise KeyError('Currently, the binary source calculations ' + - 'require t_E to be directly defined, i.e., ' + - 'has to be the same for both sources.') - (params_1, params_2) = self._divide_parameters(parameters) - try: - self._source_1_parameters = ModelParameters(params_1) - except Exception: - print("ERROR IN ITIALIZING SOURCE 1") - raise - try: - self._source_2_parameters = ModelParameters(params_2) - - except Exception: - print("ERROR IN ITIALIZING SOURCE 2") - raise - # The block above forces checks from "== 1" block above to be - # run on each source parameters separately. + """ + initialize model with s sources + """ + self._check_valid_combination_2_sources(parameters.keys()) + if 't_E' not in parameters.keys(): + raise KeyError('Currently, the binary source calculations ' + + 'require t_E to be directly defined, i.e., ' + + 'has to be the same for both sources.') + + (params_1, params_2) = self._divide_parameters(parameters) + + try: + self._source_1_parameters = ModelParameters(params_1) + except Exception: + print("ERROR IN ITIALIZING SOURCE 1") + raise + try: + self._source_2_parameters = ModelParameters(params_2) + except Exception: + print("ERROR IN ITIALIZING SOURCE 2") + raise + # The try/except blocks above force checks from ._init_1_source() + # to be run on each source parameters separately. - if self.is_xallarap: - self._update_sources_xallarap_reference() + if self.is_xallarap: + self._update_sources_xallarap_reference() def _update_sources_xallarap_reference(self): """ From f436d180eee9e7b30553623dfc3e6b86aafbe59a Mon Sep 17 00:00:00 2001 From: rpoleski Date: Thu, 25 Apr 2024 17:52:09 +0200 Subject: [PATCH 30/41] making ModelParameters._count_sources() shorter --- source/MulensModel/modelparameters.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index e15aa64c..ca912c6c 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -313,18 +313,16 @@ def _count_sources(self, keys): binary_params = ['t_0_1', 't_0_2', 'u_0_1', 'u_0_2'] binary_params += finite_source_params common = set(binary_params).intersection(keys) - n_finite = len(common.intersection(finite_source_params)) + finite_params = common.intersection(finite_source_params) + n_finite = len(finite_params) + if len(common) == 0 and 'q_source' not in keys: self._n_sources = 1 elif len(common) == 0 and 'q_source' in keys: self._n_sources = 2 elif len(common) == 1: if self.is_xallarap and n_finite == 1: - finite_param = list(common.intersection(finite_source_params))[0] - if finite_param in ['rho_2', 't_star_2']: - self._n_sources = 2 - else: - self._n_sources = 1 + self._n_sources = int(list(finite_params)[0][-1]) else: raise ValueError('Wrong parameters - the only binary ' + 'source parameter is {:}'.format(common)) @@ -334,6 +332,11 @@ def _count_sources(self, keys): else: self._n_sources = 2 else: + self._check_for_overdefined_source(common) + self._n_sources = 2 + + def _check_for_overdefined_source(self, common): + """XXX""" common_no_1_2 = {param[:-2] for param in common} condition_1 = (len(common_no_1_2) == len(common)) condition_2 = not ( @@ -343,8 +346,6 @@ def _count_sources(self, keys): 'Given binary source parameters do not allow defining ' + 'the Model: {:}'.format(common)) - self._n_sources = 2 - def _count_lenses(self, keys): """How many lenses there are?""" self._n_lenses = 1 From 6f3f1394dfed97801f8e8049f60e65cb32c3d2d6 Mon Sep 17 00:00:00 2001 From: rpoleski Date: Thu, 25 Apr 2024 17:54:03 +0200 Subject: [PATCH 31/41] docstring and indentation in _check_for_overdefined_source() --- source/MulensModel/modelparameters.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index ca912c6c..7ce19196 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -336,15 +336,18 @@ def _count_sources(self, keys): self._n_sources = 2 def _check_for_overdefined_source(self, common): - """XXX""" - common_no_1_2 = {param[:-2] for param in common} - condition_1 = (len(common_no_1_2) == len(common)) - condition_2 = not ( - 'rho' in common_no_1_2 and 't_star' in common_no_1_2) - if condition_1 and condition_2: - raise ValueError( - 'Given binary source parameters do not allow defining ' + - 'the Model: {:}'.format(common)) + """ + Make sure that finite source size in binary source model + is not overdefined. + """ + common_no_1_2 = {param[:-2] for param in common} + condition_1 = (len(common_no_1_2) == len(common)) + condition_2 = not ( + 'rho' in common_no_1_2 and 't_star' in common_no_1_2) + if condition_1 and condition_2: + raise ValueError( + 'Given binary source parameters do not allow defining ' + + 'the Model: {:}'.format(common)) def _count_lenses(self, keys): """How many lenses there are?""" From 05042eb142b3c8a9cceb2d26f3cdcf665b1155fb Mon Sep 17 00:00:00 2001 From: rpoleski Date: Fri, 26 Apr 2024 18:50:52 +0200 Subject: [PATCH 32/41] adding more tests and setting model type to xallarap based on more keywords --- source/MulensModel/modelparameters.py | 3 ++- .../MulensModel/tests/test_ModelParameters.py | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 7ce19196..7b2aaa02 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -372,7 +372,8 @@ def _set_type(self, keys): 'lens 2-parameter orbital motion': 'dalpha_dt ds_dt', 'mass sheet': 'convergence_K shear_G', 'xallarap': ('xi_period xi_semimajor_axis xi_inclination ' - 'xi_Omega_node xi_argument_of_latitude_reference')} + 'xi_Omega_node xi_argument_of_latitude_reference ' + 'xi_eccentricity xi_omega_periapsis q_source')} parameter_to_type = dict() for (key, values) in temp.items(): diff --git a/source/MulensModel/tests/test_ModelParameters.py b/source/MulensModel/tests/test_ModelParameters.py index 44ec3055..5458173c 100644 --- a/source/MulensModel/tests/test_ModelParameters.py +++ b/source/MulensModel/tests/test_ModelParameters.py @@ -45,6 +45,8 @@ def test_init_for_2_sources(self): with self.assertRaises(KeyError): mm.ModelParameters({'t_01': 1, 'u_0_1': 0.1, 't_eff_1': 10, 't_0_2': 10., 'u_0_2': 0.01, 't_eff_2': 20.}) + with self.assertRaises(Exception): + mm.ModelParameters({'t_0_1': 1, 'u_0_2': 0.1, 't_E': 10}) def test_init_parameters(): @@ -565,6 +567,15 @@ def test_negative_source_mass_ratio_2(self): with self.assertRaises(ValueError): setattr(model, 'q_source', -0.12345) + def test_overdefined_source_size(self): + """ + overdefine first sourece size + """ + parameters = {**xallarap_parameters, + 'rho_1': 0.1, 't_star_1': 0.1, 'q_source': 1.0} + with self.assertRaises(ValueError): + mm.ModelParameters(parameters) + def test_print_xallarap(): """ @@ -655,6 +666,16 @@ def test_xallarap_n_sources(): model_2S = mm.ModelParameters(parameters) assert model_2S.n_sources == 2 + parameters['rho_1'] = 0.1 + parameters['rho_2'] = 0.2 + model_3 = mm.ModelParameters(parameters) + assert model_3.n_sources == 2 + + parameters = {**xallarap_parameters, 't_star_1': 2.} + model_4 = mm.ModelParameters(parameters) + assert model_4.n_sources == 1 + + def test_2S1L_xallarap_individual_source_parameters(): """ From dbd99449271648acc74952f48a303a26403a60ec Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Sat, 27 Apr 2024 07:49:00 +0200 Subject: [PATCH 33/41] minor spelling and wording --- source/MulensModel/modelparameters.py | 10 +++++----- source/MulensModel/version.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/MulensModel/modelparameters.py b/source/MulensModel/modelparameters.py index 9269ca03..e1d4f05b 100644 --- a/source/MulensModel/modelparameters.py +++ b/source/MulensModel/modelparameters.py @@ -332,13 +332,13 @@ def _count_sources(self, keys): else: self._n_sources = 2 else: - self._check_for_overdefined_source(common) + self._check_for_underdefined_source(common) self._n_sources = 2 - def _check_for_overdefined_source(self, common): + def _check_for_underdefined_source(self, common): """ Make sure that finite source size in binary source model - is not overdefined. + is not underdefined. """ common_no_1_2 = {param[:-2] for param in common} condition_1 = (len(common_no_1_2) == len(common)) @@ -1660,7 +1660,7 @@ def xi_omega_periapsis(self): """ *float* - The argument of periapsis of the xallrap orbit, i.e., the angle + The argument of periapsis of the xallarap orbit, i.e., the angle between the ascending node and periapsis measured in the direction of motion. The units are degrees. @@ -1700,7 +1700,7 @@ def q_source(self): The mass ratio of the second and the first source. This is value must be positive and can be > 1. Defined only for xallarap binary-source models because it does not - affect the magnification for binary-source models without xallrap. + affect the magnification for binary-source models without xallarap. """ return self.parameters['q_source'] diff --git a/source/MulensModel/version.py b/source/MulensModel/version.py index 0ca05961..a1f167d2 100644 --- a/source/MulensModel/version.py +++ b/source/MulensModel/version.py @@ -1 +1 @@ -__version__ = "2.22.0" +__version__ = "2.22.1" From 228ba16d9722bdc8ed43f7eb2e71561be2be7013 Mon Sep 17 00:00:00 2001 From: radek_poleski Date: Sat, 27 Apr 2024 07:49:21 +0200 Subject: [PATCH 34/41] sphinx run --- docs/.buildinfo | 2 +- docs/.doctrees/environment.pickle | Bin 2160735 -> 2217478 bytes docs/MulensModel.binarylens.html | 4 +- docs/MulensModel.binarylensimports.html | 2 +- docs/MulensModel.binarylenswithshear.html | 2 +- docs/MulensModel.caustics.html | 6 +- docs/MulensModel.causticspointwithshear.html | 2 +- docs/MulensModel.causticswithshear.html | 2 +- docs/MulensModel.coordinates.html | 2 +- docs/MulensModel.event.html | 4 +- docs/MulensModel.fitdata.html | 10 +- docs/MulensModel.horizons.html | 4 +- docs/MulensModel.html | 177 +++++++++- docs/MulensModel.limbdarkeningcoeffs.html | 4 +- docs/MulensModel.magnificationcurve.html | 4 +- docs/MulensModel.model.html | 22 +- docs/MulensModel.modelparameters.html | 26 +- docs/MulensModel.mulensdata.html | 4 +- docs/MulensModel.mulensobjects.html | 317 +++++++++++++++++- docs/MulensModel.mulensobjects.lens.html | 4 +- ...ulensModel.mulensobjects.mulenssystem.html | 4 +- docs/MulensModel.mulensobjects.source.html | 4 +- docs/MulensModel.pointlens.html | 4 +- docs/MulensModel.pointlenswithshear.html | 2 +- docs/MulensModel.satelliteskycoord.html | 4 +- docs/MulensModel.trajectory.html | 4 +- docs/MulensModel.uniformcausticsampling.html | 4 +- docs/MulensModel.utils.html | 9 +- docs/MulensModel.version.html | 2 +- docs/_static/documentation_options.js | 2 +- docs/genindex.html | 208 +++++++++--- docs/index.html | 2 +- docs/install.html | 2 +- docs/modules.html | 2 +- docs/objects.inv | Bin 3247 -> 3449 bytes docs/py-modindex.html | 2 +- docs/search.html | 2 +- docs/searchindex.js | 2 +- docs/tutorial.html | 2 +- docs/tutorial_fit_pi_E.html | 2 +- docs/tutorial_fit_pspl.html | 2 +- 41 files changed, 756 insertions(+), 107 deletions(-) diff --git a/docs/.buildinfo b/docs/.buildinfo index 09629d00..446e98f9 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: da46b56c84a2d26d9988fc4d22bc954f +config: 2acbe60213cec1ff5d56a56e4cbac976 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.doctrees/environment.pickle b/docs/.doctrees/environment.pickle index 256a4c2a7c756190c007a13658ac93aa14019dd2..a8bc3d2931de04787bac803cce2adc1d62a4f8b1 100644 GIT binary patch literal 2217478 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