from __future__ import annotations

from fuggers_py.data import (
    BasisSwapQuote as data_basis_swap_quote,
    BasisSwapQuoteOutput as data_basis_swap_quote_output,
    BondFutureContractReference as data_bond_future_contract_reference,
    BondFutureQuote as data_bond_future_quote,
    BondFutureReferenceData as data_bond_future_reference_data,
    DeliverableBondReference as data_deliverable_bond_reference,
    FutureQuoteOutput as data_future_quote_output,
    FutureReferenceData as data_future_reference_data,
    SwapQuote as data_swap_quote,
    SwapQuoteOutput as data_swap_quote_output,
    SwapReferenceData as data_swap_reference_data,
)
from fuggers_py.rates import (
    AssetSwap,
    AssetSwapBreakdown,
    AssetSwapPricer,
    BachelierPricer,
    BasisSwap,
    BasisSwapQuote,
    BasisSwapQuoteOutput,
    BasisSwapPricer,
    BasisSwapPricingResult,
    Black76Pricer,
    BondFutureContractReference,
    BondFutureQuote,
    BondFutureReferenceData,
    CapFloor,
    CapFloorPricingResult,
    CapFloorType,
    CrossCurrencyBasisSwap,
    CrossCurrencyBasisSwapPricer,
    CrossCurrencyBasisSwapPricingResult,
    DeliverableBasket,
    DeliverableBond,
    DeliverableBondReference,
    FixedFloatSwap,
    FixedLegSpec,
    FloatingLegSpec,
    Fra,
    FraPricer,
    FraPricingResult,
    FuturesOption,
    FuturesOptionPricingResult,
    FutureQuoteOutput,
    FutureReferenceData,
    GovernmentBondFuture,
    HullWhiteOptionPricer,
    HullWhiteRateOptionModel,
    MultiFactorScenario,
    Ois,
    OptionGreeks,
    OptionType,
    PayReceive,
    Swaption,
    SwaptionPricingResult,
    SwapPricer,
    SwapPricingResult,
    SwapQuote,
    SwapQuoteOutput,
    SwapReferenceData,
    black76_formula,
    pv01,
)
from fuggers_py.rates.futures import MultiFactorScenario as futures_multi_factor_scenario
from fuggers_py.rates.instruments import BasisSwap as instruments_basis_swap
from fuggers_py.rates.instruments import AssetSwap as instruments_asset_swap
from fuggers_py.rates.instruments import CrossCurrencyBasisSwap as instruments_cross_currency_basis_swap
from fuggers_py.rates.instruments import FixedFloatSwap as instruments_fixed_float_swap
from fuggers_py.rates.instruments import FixedLegSpec as instruments_fixed_leg_spec
from fuggers_py.rates.instruments import FloatingLegSpec as instruments_floating_leg_spec
from fuggers_py.rates.instruments import Fra as instruments_fra
from fuggers_py.rates.instruments import Ois as instruments_ois
from fuggers_py.rates.instruments import PayReceive as instruments_pay_receive
from fuggers_py.rates.options import CapFloor as options_cap_floor
from fuggers_py.rates.options import CapFloorPricingResult as options_cap_floor_pricing_result
from fuggers_py.rates.options import CapFloorType as options_cap_floor_type
from fuggers_py.rates.options import FuturesOption as options_futures_option
from fuggers_py.rates.options import FuturesOptionPricingResult as options_futures_option_pricing_result
from fuggers_py.rates.options import HullWhiteOptionPricer as options_hull_white_option_pricer
from fuggers_py.rates.options import HullWhiteRateOptionModel as options_hull_white_rate_option_model
from fuggers_py.rates.options import OptionGreeks as options_option_greeks
from fuggers_py.rates.options import OptionType as options_option_type
from fuggers_py.rates.options import Swaption as options_swaption
from fuggers_py.rates.options import SwaptionPricingResult as options_swaption_pricing_result
from fuggers_py.rates.pricing import BasisSwapPricer as pricing_basis_swap_pricer
from fuggers_py.rates.pricing import BasisSwapPricingResult as pricing_basis_swap_pricing_result
from fuggers_py.rates.pricing import AssetSwapBreakdown as pricing_asset_swap_breakdown
from fuggers_py.rates.pricing import AssetSwapPricer as pricing_asset_swap_pricer
from fuggers_py.rates.pricing import CrossCurrencyBasisSwapPricer as pricing_cross_currency_basis_swap_pricer
from fuggers_py.rates.pricing import CrossCurrencyBasisSwapPricingResult as pricing_cross_currency_basis_swap_pricing_result
from fuggers_py.rates.pricing import FraPricer as pricing_fra_pricer
from fuggers_py.rates.pricing import FraPricingResult as pricing_fra_pricing_result
from fuggers_py.rates.pricing import SwapPricer as pricing_swap_pricer
from fuggers_py.rates.pricing import SwapPricingResult as pricing_swap_pricing_result
from fuggers_py.rates.risk import pv01 as risk_pv01


def test_rates_root_exports_scaffold_records() -> None:
    assert SwapQuote is data_swap_quote
    assert SwapQuoteOutput is data_swap_quote_output
    assert BasisSwapQuote is data_basis_swap_quote
    assert BasisSwapQuoteOutput is data_basis_swap_quote_output
    assert BondFutureContractReference is data_bond_future_contract_reference
    assert BondFutureQuote is data_bond_future_quote
    assert BondFutureReferenceData is data_bond_future_reference_data
    assert DeliverableBondReference is data_deliverable_bond_reference
    assert FutureQuoteOutput is data_future_quote_output
    assert FutureReferenceData is data_future_reference_data
    assert SwapReferenceData is data_swap_reference_data
    assert GovernmentBondFuture is not None
    assert DeliverableBond is not None
    assert DeliverableBasket is not None
    assert AssetSwap is instruments_asset_swap
    assert Swaption is options_swaption
    assert CapFloor is options_cap_floor
    assert FuturesOption is options_futures_option
    assert FixedFloatSwap is instruments_fixed_float_swap
    assert Ois is instruments_ois
    assert Fra is instruments_fra
    assert BasisSwap is instruments_basis_swap
    assert CrossCurrencyBasisSwap is instruments_cross_currency_basis_swap
    assert FixedLegSpec is instruments_fixed_leg_spec
    assert FloatingLegSpec is instruments_floating_leg_spec
    assert PayReceive is instruments_pay_receive
    assert CapFloorType is options_cap_floor_type
    assert OptionType is options_option_type
    assert OptionGreeks is options_option_greeks
    assert AssetSwapPricer is pricing_asset_swap_pricer
    assert AssetSwapBreakdown is pricing_asset_swap_breakdown
    assert SwapPricer is pricing_swap_pricer
    assert SwapPricingResult is pricing_swap_pricing_result
    assert FraPricer is pricing_fra_pricer
    assert FraPricingResult is pricing_fra_pricing_result
    assert BasisSwapPricer is pricing_basis_swap_pricer
    assert BasisSwapPricingResult is pricing_basis_swap_pricing_result
    assert CrossCurrencyBasisSwapPricer is pricing_cross_currency_basis_swap_pricer
    assert CrossCurrencyBasisSwapPricingResult is pricing_cross_currency_basis_swap_pricing_result
    assert MultiFactorScenario is futures_multi_factor_scenario
    assert SwaptionPricingResult is options_swaption_pricing_result
    assert CapFloorPricingResult is options_cap_floor_pricing_result
    assert FuturesOptionPricingResult is options_futures_option_pricing_result
    assert Black76Pricer is not None
    assert BachelierPricer is not None
    assert HullWhiteRateOptionModel is options_hull_white_rate_option_model
    assert HullWhiteOptionPricer is options_hull_white_option_pricer
    assert callable(black76_formula)
    assert pv01 is risk_pv01
