def test__stellar_mass_angular_within_galaxy__is_sum_of_individual_profiles(
        smp_0, smp_1):

    galaxy = ag.Galaxy(
        redshift=0.5,
        stellar_0=smp_0,
        non_stellar_profile=ag.mp.EllIsothermal(einstein_radius=1.0),
    )
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    stellar_mass_0 = smp_0.mass_angular_within_circle_from(radius=0.5)

    gal_mass = decomp.stellar_mass_angular_within_circle_from(radius=0.5)

    assert stellar_mass_0 == gal_mass

    galaxy = ag.Galaxy(
        redshift=0.5,
        stellar_0=smp_0,
        stellar_1=smp_1,
        non_stellar_profile=ag.mp.EllIsothermal(einstein_radius=1.0),
    )
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    stellar_mass_1 = smp_1.mass_angular_within_circle_from(radius=0.5)

    gal_mass = decomp.stellar_mass_angular_within_circle_from(radius=0.5)

    assert stellar_mass_0 + stellar_mass_1 == gal_mass

    galaxy = ag.Galaxy(redshift=0.5)
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    with pytest.raises(exc.GalaxyException):
        decomp.stellar_mass_angular_within_circle_from(radius=1.0)
def test__stellar_profile_quantities__is_list_of_stellar_profile_list():

    galaxy = ag.Galaxy(redshift=0.5)

    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    assert decomp.stellar_profile_list == []

    galaxy = ag.Galaxy(redshift=0.5,
                       light=ag.lp.EllGaussian(),
                       mass=ag.mp.EllIsothermal())

    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    assert decomp.stellar_profile_list == []

    stellar_0 = ag.lmp.EllSersic()
    galaxy = ag.Galaxy(redshift=0.5, stellar_0=stellar_0)
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    assert decomp.stellar_profile_list == [stellar_0]

    stellar_0 = ag.lmp.SphDevVaucouleurs()
    stellar_1 = ag.lmp.EllDevVaucouleurs()
    stellar_2 = ag.lmp.EllGaussian()
    galaxy = ag.Galaxy(redshift=0.5,
                       stellar_0=stellar_0,
                       stellar_1=stellar_1,
                       stellar_2=stellar_2)
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    assert decomp.stellar_profile_list == [stellar_0, stellar_1, stellar_2]
def test__dark_profile_list__is_list_of_dark_profile_list():
    galaxy = ag.Galaxy(redshift=0.5)
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    assert decomp.dark_profile_list == []

    galaxy = ag.Galaxy(redshift=0.5,
                       light=ag.lp.EllGaussian(),
                       mass=ag.mp.EllIsothermal())
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    assert decomp.dark_profile_list == []

    dark_0 = ag.mp.SphNFW()
    galaxy = ag.Galaxy(redshift=0.5, dark_0=dark_0)
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    assert decomp.dark_profile_list == [dark_0]

    dark_0 = ag.mp.SphNFW()
    dark_1 = ag.mp.EllNFW()
    dark_2 = ag.mp.EllNFWGeneralized()
    galaxy = ag.Galaxy(redshift=0.5,
                       dark_0=dark_0,
                       dark_1=dark_1,
                       dark_2=dark_2)
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    assert decomp.dark_profile_list == [dark_0, dark_1, dark_2]
def test__stellar_fraction_at_radius(dmp_0, dmp_1, smp_0, smp_1):

    galaxy = ag.Galaxy(redshift=0.5, stellar_0=smp_0, dark_0=dmp_0)
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    stellar_mass_0 = smp_0.mass_angular_within_circle_from(radius=1.0)
    dark_mass_0 = dmp_0.mass_angular_within_circle_from(radius=1.0)

    stellar_fraction = decomp.stellar_fraction_at_radius_from(radius=1.0)

    assert stellar_fraction == pytest.approx(
        stellar_mass_0 / (dark_mass_0 + stellar_mass_0), 1.0e-4)

    galaxy = ag.Galaxy(redshift=0.5,
                       stellar_0=smp_0,
                       stellar_1=smp_1,
                       dark_0=dmp_0)
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    stellar_fraction = decomp.stellar_fraction_at_radius_from(radius=1.0)
    stellar_mass_1 = smp_1.mass_angular_within_circle_from(radius=1.0)

    assert stellar_fraction == pytest.approx(
        (stellar_mass_0 + stellar_mass_1) /
        (dark_mass_0 + stellar_mass_0 + stellar_mass_1),
        1.0e-4,
    )

    galaxy = ag.Galaxy(redshift=0.5,
                       stellar_0=smp_0,
                       stellar_1=smp_1,
                       dark_0=dmp_0,
                       dark_mass_1=dmp_1)
    decomp = ag.StellarDarkDecomp(galaxy=galaxy)

    stellar_fraction = decomp.stellar_fraction_at_radius_from(radius=1.0)
    dark_mass_1 = dmp_1.mass_angular_within_circle_from(radius=1.0)

    assert stellar_fraction == pytest.approx(
        (stellar_mass_0 + stellar_mass_1) /
        (dark_mass_0 + dark_mass_1 + stellar_mass_0 + stellar_mass_1),
        1.0e-4,
    )