Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion policyengine/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
from .simulation import Simulation, SimulationOptions
from .policyengine import PolicyEngine
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import typing

from policyengine import Simulation
from policyengine import PolicyEngine

from pydantic import BaseModel
from policyengine.utils.calculations import get_change
Expand All @@ -27,7 +27,7 @@ class HouseholdComparison(BaseModel):


def calculate_household_comparison(
simulation: Simulation,
engine: PolicyEngine,
) -> HouseholdComparison:
"""Calculate comparison statistics between two household scenarios."""
if not simulation.is_comparison:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import typing

from policyengine import Simulation
from policyengine import PolicyEngine

from pydantic import BaseModel
from policyengine_core.simulations import Simulation as CountrySimulation
Expand Down Expand Up @@ -33,7 +33,7 @@ class SingleHousehold(BaseModel):


def calculate_single_household(
simulation: Simulation,
engine: PolicyEngine,
) -> SingleHousehold:
"""Calculate household statistics for a single household scenario."""
if simulation.is_comparison:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

import typing

from policyengine import Simulation
from policyengine import PolicyEngine

from pydantic import BaseModel
from policyengine.utils.calculations import get_change
from policyengine.constants import DEFAULT_DATASETS_BY_COUNTRY

from policyengine.outputs.macro.single import (
_calculate_government_balance,
Expand All @@ -17,7 +18,24 @@
from .decile import calculate_decile_impacts, DecileImpacts

from typing import Literal, List

from policyengine.utils.types import *
from pydantic import Field

class EconomyComparisonOptions(BaseModel):
country: CountryType = Field(..., description="The country to simulate.")
data: DataType = Field(None, description="The data to simulate.")
time_period: TimePeriodType = Field(
2025, description="The time period to simulate.", ge=2024, le=2035
)
reform: PolicyType = Field(None, description="The reform to simulate.")
baseline: PolicyType = Field(None, description="The baseline to simulate.")
region: RegionType = Field(
None, description="The region to simulate within the country."
)
subsample: SubsampleType = Field(
None,
description="How many, if a subsample, households to randomly simulate.",
)

class FiscalComparison(BaseModel):
baseline: FiscalSummary
Expand Down Expand Up @@ -52,15 +70,37 @@ class EconomyComparison(BaseModel):


def calculate_economy_comparison(
simulation: Simulation,
engine: PolicyEngine,
**options,
) -> EconomyComparison:
"""Calculate comparison statistics between two economic scenarios."""
if not simulation.is_comparison:
raise ValueError("Simulation must be a comparison simulation.")

baseline = simulation.baseline_simulation
reform = simulation.reform_simulation
options = simulation.options
options = EconomyComparisonOptions(**options)

if options.data is None:
options.data = DEFAULT_DATASETS_BY_COUNTRY[
options.country
]

baseline = engine.expect_simulation(
name="baseline",
country=options.country,
scope="macro",
policy=options.baseline,
data=options.data,
time_period=options.time_period,
region=options.region,
)

reform = engine.expect_simulation(
name="reform",
country=options.country,
scope="macro",
policy=options.reform,
data=options.data,
time_period=options.time_period,
region=options.region,
)

baseline_balance = _calculate_government_balance(baseline, options)
reform_balance = _calculate_government_balance(reform, options)
Expand Down
4 changes: 2 additions & 2 deletions policyengine/outputs/macro/comparison/charts/budget.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
import plotly.graph_objects as go
import typing

from policyengine import Simulation
from policyengine import PolicyEngine

from pydantic import BaseModel
from policyengine.utils.charts import *


def create_budget_comparison_chart(
simulation: Simulation,
engine: PolicyEngine,
) -> go.Figure:
"""Create a budget comparison chart."""
if not simulation.is_comparison:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
import plotly.graph_objects as go
import typing

from policyengine import Simulation
from policyengine import PolicyEngine

from pydantic import BaseModel
from policyengine.utils.charts import *


def create_budget_program_comparison_chart(
simulation: Simulation,
engine: PolicyEngine,
) -> go.Figure:
"""Create a budget comparison chart."""
if not simulation.is_comparison:
Expand Down
4 changes: 2 additions & 2 deletions policyengine/outputs/macro/comparison/charts/decile.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
import plotly.graph_objects as go
import typing

from policyengine import Simulation
from policyengine import PolicyEngine

from pydantic import BaseModel
from policyengine.utils.charts import *
from typing import Literal


def create_decile_chart(
simulation: Simulation,
engine: PolicyEngine,
decile_variable: Literal["income", "wealth"],
relative: bool,
) -> go.Figure:
Expand Down
4 changes: 2 additions & 2 deletions policyengine/outputs/macro/comparison/charts/inequality.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
import plotly.graph_objects as go
import typing

from policyengine import Simulation
from policyengine import PolicyEngine

from pydantic import BaseModel
from policyengine.utils.charts import *


def create_inequality_chart(
simulation: Simulation,
engine: PolicyEngine,
relative: bool,
) -> go.Figure:
"""Create a budget comparison chart."""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import plotly.graph_objects as go
import typing

from policyengine import Simulation
from policyengine import PolicyEngine

from pydantic import BaseModel
from policyengine.utils.charts import *
Expand All @@ -27,7 +27,7 @@


def create_winners_losers_chart(
simulation: Simulation,
engine: PolicyEngine,
decile_variable: Literal["income", "wealth"],
) -> go.Figure:
"""Create a budget comparison chart."""
Expand Down
2 changes: 1 addition & 1 deletion policyengine/outputs/macro/comparison/decile.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import typing

from policyengine import Simulation, SimulationOptions
from policyengine import PolicyEngine

from policyengine_core.simulations import Microsimulation

Expand Down
2 changes: 1 addition & 1 deletion policyengine/outputs/macro/single/budget.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import typing

from policyengine import Simulation, SimulationOptions
from policyengine import PolicyEngine

from policyengine_core.simulations import Microsimulation

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from policyengine import Simulation
from policyengine import PolicyEngine


def calculate_average_earnings(simulation: Simulation) -> float:
def calculate_average_earnings(engine: PolicyEngine) -> float:
"""Calculate average earnings."""
employment_income = simulation.baseline_simulation.calculate(
"employment_income"
Expand Down
4 changes: 2 additions & 2 deletions policyengine/outputs/macro/single/calculate_single_economy.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import typing

from policyengine import Simulation
from policyengine import PolicyEngine

from pydantic import BaseModel

Expand All @@ -19,7 +19,7 @@ class SingleEconomy(BaseModel):


def calculate_single_economy(
simulation: Simulation,
engine: PolicyEngine,
) -> SingleEconomy:
"""Calculate economy statistics for a single economic scenario."""
options = simulation.options
Expand Down
2 changes: 1 addition & 1 deletion policyengine/outputs/macro/single/inequality.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import typing

from policyengine import Simulation, SimulationOptions
from policyengine import PolicyEngine

from policyengine_core.simulations import Microsimulation

Expand Down
Loading
Loading