def METHOD_NAME(self) -> List[IngredientGroup]:
    # This content must be present for recipes on this website.
    ingredients_div = self.soup.find("div", {"id": "ingredients"})
    section = []
    if ingredients_div is None:
        raise ElementNotFoundInHtml("Ingredients not found.")
    # Find more than one lists of ingredients
    ingredients_h4_sections = ingredients_div.find_all("h4")
    # Ingredients are broken down into sections
    # https://healthyeating.nhlbi.nih.gov/recipedetail.aspx?linkId=11&cId=1&rId=5
    if len(ingredients_h4_sections) >= 2:
        ingredients_sections = ingredients_div.find_all("tr")
        for ingredients_section in ingredients_sections:
            items = ingredients_section.find("p").get_text().strip().split("\n")
            # create ingredient group for each section
            res = IngredientGroup(
                ingredients=items,
                purpose=normalize_string(ingredients_section.find("h4").get_text()),
            )
            section.append(res)
        return section
    # Default case
    ingredients_p = ingredients_div.findAll("p")
    ingredients = [normalize_string(para.get_text()) for para in ingredients_p]
    ingredients_list = [
        ing for ing in ingredients if not ing.lower().startswith("recipe cards")
    ]
    # Edge case: ingredents are a mix for single main ingredients and a single sub section
    # https://healthyeating.nhlbi.nih.gov/recipedetail.aspx?linkId=0&cId=10&rId=163
    if len(ingredients_h4_sections) == 1:
        items = (
            ingredients_div.find("h4")
            .find_next_sibling("p")
            .get_text()
            .strip()
            .split("\n")
        )
        group = IngredientGroup(
            purpose=normalize_string(ingredients_h4_sections[0].get_text()),
            ingredients=items,
        )
        section.append(group)
        section.append(IngredientGroup(ingredients=ingredients_list[:-1]))
        return section
    return [IngredientGroup(ingredients_list)]