from typing import Tuple


def find_vaccine_action(vacc_prop_prevent_infection: float, overall_efficacy: float) -> Tuple[float, float]:
    """
    Calculate the vaccine efficacy in preventing infection and prevntion of symptomatic disese given infection.

    Args:
        vacc_prop_prevent_infection: The proportion of the observed effectiveness attributable to infection prevention
        overall_efficacy: The observed effectiveness on clinical cases

    Returns:
        VE for preventing infection and for preventing clinical outcomes given infection

    """

    # Infection efficacy follows from how we have defined these
    infection_efficacy = vacc_prop_prevent_infection * overall_efficacy

    # Severity efficacy must be calculated as the risk of severe outcomes given that the person was infected
    if vacc_prop_prevent_infection < 1.0:
        prop_attribute_severity = 1.0 - vacc_prop_prevent_infection
        prop_infect_prevented = 1.0 - vacc_prop_prevent_infection * overall_efficacy
        severity_efficacy = overall_efficacy * prop_attribute_severity / prop_infect_prevented
    else:
        severity_efficacy = 0.0

    msg = f"Infection efficacy not in [0, 1]: {infection_efficacy}"
    assert 0.0 <= infection_efficacy <= 1.0, msg
    msg = f"Severity efficacy not in [0, 1]: {severity_efficacy}"
    assert 0.0 <= severity_efficacy <= 1.0, msg

    return infection_efficacy, severity_efficacy