Source code for test_microlcaustics

import numpy as np
import unittest.mock
import pytest

from pyLIMA import microlcaustics


[docs]def test_find_2_lenses_caustics_and_critical_curves(): separation = 1 mass_ratio = 1 caustic_regime, caustics, critical_curves = microlcaustics.find_2_lenses_caustics_and_critical_curves(separation, mass_ratio, resolution=1000) assert caustic_regime == 'resonant' for caustic in caustics[:-1]: assert caustic is None for critical_curve in critical_curves[:-1]: assert critical_curve is None assert len(caustics[-1]) == 4000 assert len(critical_curves[-1]) == 4000 separation = 1.05 mass_ratio = 10 ** -6 caustic_regime, caustics, critical_curves = microlcaustics.find_2_lenses_caustics_and_critical_curves(separation, mass_ratio, resolution=1000) assert caustic_regime == 'wide' solution = ['something', None, None, 'something', None] for index, caustic in enumerate(caustics): if solution[index] is not None: assert caustic is not None else: assert caustic is None for index, critical_curve in enumerate(critical_curves): if solution[index] is not None: assert critical_curve is not None else: assert critical_curve is None assert len(caustics[0]) == 2000 assert len(critical_curves[0]) == 2000 assert len(caustics[3]) == 2000 assert len(critical_curves[3]) == 2000 separation = 0.65 mass_ratio = 10 ** -2 caustic_regime, caustics, critical_curves = microlcaustics.find_2_lenses_caustics_and_critical_curves(separation, mass_ratio, resolution=1000) assert caustic_regime == 'close' solution = ['something', 'something', 'something', None, None] for index, caustic in enumerate(caustics): if solution[index] is not None: assert caustic is not None else: assert caustic is None for index, critical_curve in enumerate(critical_curves): if solution[index] is not None: assert critical_curve is not None else: assert critical_curve is None assert len(caustics[0]) == 2000 assert len(critical_curves[0]) == 2000 assert len(caustics[1]) == 1000 assert len(critical_curves[1]) == 1000 assert len(caustics[2]) == 1000 assert len(critical_curves[2]) == 1000
[docs]def test_sort_2lenses_resonant_caustic(): separation = 1 mass_ratio = 1 caustics, critical_curves = microlcaustics.compute_2_lenses_caustics_points(separation, mass_ratio, resolution=1000) resonant_caustic, resonant_cc = microlcaustics.sort_2lenses_resonant_caustic(caustics, critical_curves) assert len(resonant_caustic) == 4000 assert len(resonant_cc) == 4000
[docs]def test_sort_2lenses_wide_caustic(): separation = 10.8 mass_ratio = 0.8 caustics, critical_curves = microlcaustics.compute_2_lenses_caustics_points(separation, mass_ratio, resolution=1000) central_caustic, wide_caustic, central_cc, wide_cc = microlcaustics.sort_2lenses_wide_caustics(caustics, critical_curves) assert len(central_caustic) == 2000 assert len(central_cc) == 2000 assert len(wide_caustic) == 2000 assert len(wide_cc) == 2000
[docs]def test_sort_2lenses_close_caustics(): separation = 0.8 mass_ratio = 10 ** -7 caustics, critical_curves = microlcaustics.compute_2_lenses_caustics_points(separation, mass_ratio, resolution=1000) central_caustic, close_top_caustic, close_bottom_caustic, central_cc, close_top_cc, close_bottom_cc = \ microlcaustics.sort_2lenses_close_caustics(caustics, critical_curves) assert len(central_caustic) == 2000 assert len(central_cc) == 2000 assert len(close_top_caustic) == 1000 assert len(close_top_cc) == 1000 assert len(close_bottom_caustic) == 1000 assert len(close_bottom_cc) == 1000
[docs]def test_compute_2_lenses_caustics_points(): separation = 1 mass_ratio = 1 caustics, critical_curves = microlcaustics.compute_2_lenses_caustics_points(separation, mass_ratio, resolution=10) expected_caustics = np.array([[0.34062502 - 3.94430453e-31j, -0.34062502 - 3.38963670e-32j, 0.00000000 - 5.89979840e-01j, 0.00000000 + 5.89979840e-01j], [0.32489215 - 3.74174390e-03j, -0.32489215 + 3.74174390e-03j, -0.14198333 - 6.13822318e-01j, 0.14198333 + 6.13822318e-01j], [0.28067735 - 3.06011670e-02j, -0.28067735 + 3.06011670e-02j, -0.21082253 - 6.50713550e-01j, 0.21082253 + 6.50713550e-01j], [0.21790294 - 1.08073125e-01j, -0.21790294 + 1.08073125e-01j, -0.20257117 - 6.36141383e-01j, 0.20257117 + 6.36141383e-01j], [0.16039580 - 2.74010967e-01j, -0.16039580 + 2.74010967e-01j, -0.15982495 - 5.07258799e-01j, 0.15982495 + 5.07258799e-01j], [0.15982495 - 5.07258799e-01j, -0.15982495 + 5.07258799e-01j, -0.16039580 - 2.74010967e-01j, 0.16039580 + 2.74010967e-01j], [0.20257117 - 6.36141383e-01j, -0.20257117 + 6.36141383e-01j, -0.21790294 - 1.08073125e-01j, 0.21790294 + 1.08073125e-01j], [0.21082253 - 6.50713550e-01j, -0.21082253 + 6.50713550e-01j, -0.28067735 - 3.06011670e-02j, 0.28067735 + 3.06011670e-02j], [0.14198333 - 6.13822318e-01j, -0.14198333 + 6.13822318e-01j, -0.32489215 - 3.74174390e-03j, 0.32489215 + 3.74174390e-03j], [0.00000000 - 5.89979840e-01j, 0.00000000 + 5.89979840e-01j, -0.34062502 - 4.74549138e-31j, 0.34062502 - 1.77493704e-30j]]) expected_cc = np.array([[1.27122988e+00 + 2.89236268e-16j, -1.27122988e+00 + 2.77844475e-17j, -1.48013047e-18 + 3.40625019e-01j, 3.30645600e-17 - 3.40625019e-01j], [1.21229332e+00 + 2.87839951e-01j, -1.21229332e+00 - 2.87839951e-01j, -7.73913354e-02 + 3.56017165e-01j, 7.73913354e-02 - 3.56017165e-01j], [1.04372694e+00 + 5.28204089e-01j, -1.04372694e+00 - 5.28204089e-01j, -1.47894990e-01 + 3.98235002e-01j, 1.47894990e-01 - 3.98235002e-01j], [7.91336472e-01 + 6.75204341e-01j, -7.91336472e-01 - 6.75204341e-01j, -2.17214969e-01 + 4.66363434e-01j, 2.17214969e-01 - 4.66363434e-01j], [5.09656858e-01 + 6.85437065e-01j, -5.09656858e-01 - 6.85437065e-01j, -3.11897539e-01 + 5.71750678e-01j, 3.11897539e-01 - 5.71750678e-01j], [3.11897539e-01 + 5.71750678e-01j, -3.11897539e-01 - 5.71750678e-01j, -5.09656858e-01 + 6.85437065e-01j, 5.09656858e-01 - 6.85437065e-01j], [2.17214969e-01 + 4.66363434e-01j, -2.17214969e-01 - 4.66363434e-01j, -7.91336472e-01 + 6.75204341e-01j, 7.91336472e-01 - 6.75204341e-01j], [1.47894990e-01 + 3.98235002e-01j, -1.47894990e-01 - 3.98235002e-01j, -1.04372694e+00 + 5.28204089e-01j, 1.04372694e+00 - 5.28204089e-01j], [7.73913354e-02 + 3.56017165e-01j, -7.73913354e-02 - 3.56017165e-01j, -1.21229332e+00 + 2.87839951e-01j, 1.21229332e+00 - 2.87839951e-01j], [5.42176191e-17 + 3.40625019e-01j, 5.38347107e-18 - 3.40625019e-01j, -1.27122988e+00 + 2.05998413e-16j, 1.27122988e+00 - 5.72458747e-16j]]) assert np.allclose(caustics, expected_caustics) assert np.allclose(critical_curves, expected_cc)
[docs]def test_find_area_of_interest_around_caustics(): separation = 0.98 mass_ratio = 10 ** -3.98 caustics, critical_curves = microlcaustics.compute_2_lenses_caustics_points(separation, mass_ratio, resolution=10) area_of_interest = microlcaustics.find_area_of_interest_around_caustics(caustics, secure_factor=0.1) expected_area = np.array([[-0.16472971920662491, 0.1487364691472782], [-0.11476825367160942, 0.11476825367161236], [-0.0079966250296733543, 1.4710455076283324e-15]] ) assert np.allclose(expected_area, area_of_interest)
[docs]def test_find_2_lenses_caustic_regime(): separation = 0.6 mass_ratio = 10 ** -3.98 regime = microlcaustics.find_2_lenses_caustic_regime(separation, mass_ratio) assert regime == 'close' separation = 1.4 mass_ratio = 10 ** -0.9 regime = microlcaustics.find_2_lenses_caustic_regime(separation, mass_ratio) assert regime == 'resonant' separation = 2.6 mass_ratio = 10 ** -8 regime = microlcaustics.find_2_lenses_caustic_regime(separation, mass_ratio) assert regime == 'wide'
[docs]def test_change_source_trajectory_center_to_planetary_caustics_center(): separation = 0.5 mass_ratio = 10 ** -3.98 x_center, y_center = microlcaustics.change_source_trajectory_center_to_planetary_caustics_center(separation, mass_ratio) assert np.allclose(x_center,-1.4997160687085691) assert np.allclose(y_center ,0.035497175763441455) separation = 0.8 mass_ratio = 0.85 x_center, y_center = microlcaustics.change_source_trajectory_center_to_planetary_caustics_center(separation, mass_ratio) assert x_center == 0 assert y_center == 0 separation = 6.8 mass_ratio = 0.85 x_center, y_center = microlcaustics.change_source_trajectory_center_to_planetary_caustics_center(separation, mass_ratio) assert np.allclose(x_center,3.597042535016731) assert y_center == 0
[docs]def test_change_source_trajectory_center_to_central_caustics_center(): separation = 0.5 mass_ratio = 10 ** -1 x_center, y_center = microlcaustics.change_source_trajectory_center_to_central_caustics_center(separation, mass_ratio) assert np.allclose(x_center,-0.010300719769916603) assert y_center == 0 separation = 0.8 mass_ratio = 0.85 x_center, y_center = microlcaustics.change_source_trajectory_center_to_central_caustics_center(separation, mass_ratio) assert x_center == 0 assert y_center == 0 separation = 6.8 mass_ratio = 0.85 x_center, y_center = microlcaustics.change_source_trajectory_center_to_central_caustics_center(separation, mass_ratio) assert np.allclose(x_center,-3.0576148720596557) assert y_center == 0