def test_midcurve_vol_return_data():
    replace = Replacer()
    test_data = dict(midcurveVol=[1, 2, 3])
    df = MarketDataResponseFrame(
        data=test_data,
        index=[dt.date(2019, 1, 1),
               dt.date(2019, 1, 2),
               dt.date(2019, 1, 3)])

    replace('gs_quant.timeseries.measures.Asset.get_identifier',
            Mock()).return_value = "GBP"
    replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets',
            Mock(),
            Mock()).return_value = ["MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"]
    replace('gs_quant.timeseries.measures_rates._range_from_pricing_date',
            Mock(),
            Mock()).return_value = [dt.date(2019, 1, 2),
                                    dt.date(2019, 1, 5)]
    replace('gs_quant.timeseries.measures_rates._market_data_timed',
            Mock()).return_value = df

    actual = tm_rates.midcurve_vol(Currency("GBP", name="GBP"), "1y", "1y",
                                   "1y", 0)
    assert_series_equal(tm._extract_series_from_df(df, QueryType.MIDCURVE_VOL),
                        actual)
    replace.restore()
示例#2
0
def test_currency_to_tdapi_midcurve_asset():
    replace = Replacer()
    replace('gs_quant.timeseries.measures.Asset.get_identifier',
            Mock()).return_value = 'ZAR'
    asset = Currency('MA1', 'ZAR')
    assert tm_rates._currency_to_tdapi_midcurve_asset(asset) == 'MA1'
    replace.restore()
def test_swaption_atmFwdRate_return_data():
    replace = Replacer()
    test_data = dict(atmFwdRate=[1, 2, 3])
    df = MarketDataResponseFrame(
        data=test_data,
        index=[dt.date(2019, 1, 1),
               dt.date(2019, 1, 2),
               dt.date(2019, 1, 3)])

    replace('gs_quant.timeseries.measures.Asset.get_identifier',
            Mock()).return_value = "GBP"
    replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets',
            Mock(),
            Mock()).return_value = ["MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"]
    replace('gs_quant.timeseries.measures_rates._range_from_pricing_date',
            Mock(),
            Mock()).return_value = [dt.date(2019, 1, 2),
                                    dt.date(2019, 1, 5)]
    replace('gs_quant.timeseries.measures_rates._market_data_timed',
            Mock()).return_value = df

    actual = tm_rates.swaption_atm_fwd_rate(Currency("GBP", name="GBP"))
    assert_series_equal(tm._extract_series_from_df(df, QueryType.ATM_FWD_RATE),
                        actual)
    replace.restore()
def test_currency_to_tdapi_swaption_rate_asset_retuns_throws():
    replace = Replacer()
    replace('gs_quant.timeseries.measures.Asset.get_identifier',
            Mock()).return_value = "ZAR"
    asset = Currency("MA1", "ZAR")

    assert _currency_to_tdapi_swaption_rate_asset(asset) == "MA1"
def test_swaption_swaption_vol_term2_throws():
    with pytest.raises(NotImplementedError):
        tm_rates.swaption_vol_term(Currency("GBP", name="GBP"),
                                   tm.SwaptionTenorType.SWAP_MATURITY,
                                   '5y',
                                   0,
                                   real_time=True)
示例#6
0
def test_swaption_premium_throws_for_unsupported_ccy():
    replace = Replacer()
    replace('gs_quant.timeseries.measures.Asset.get_identifier',
            Mock()).return_value = "ZAR"
    with pytest.raises(NotImplementedError):
        tm_rates.swaption_premium(Currency("KRW", name="KRW"))
    replace.restore()
def test_swaption_vol2_return__empty_data():
    replace = Replacer()
    df = ExtendedSeries()

    replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP"
    replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(), Mock()).return_value = [
        "MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"]
    replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [
        dt.date(2019, 1, 2), dt.date(2019, 1, 5)]
    replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df

    actual = tm_rates.swaption_vol(Currency("GBP", name="GBP"))
    assert_series_equal(ExtendedSeries(), actual)
    replace.restore()
def test_swaption_vol_smile2_returns_no_data():
    replace = Replacer()
    df = ExtendedSeries()
    replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP"
    replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(), Mock()).return_value = [
        "MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"]
    replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [
        dt.date(2020, 1, 2), dt.date(2020, 1, 2)]
    replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df

    with DataContext('2019-01-01', '2025-01-01'):
        actual = tm_rates.swaption_vol_smile(Currency("GBP", name="GBP"), '3m', '10y')
    assert_series_equal(ExtendedSeries(), actual)
    replace.restore()
def test_swaption_swaption_vol_term2_returns_data():
    replace = Replacer()
    df = MarketDataResponseFrame(
        data=dict(expirationTenor=['1m', '6m', '1y'], terminationTenor=['1y', '2y', '3y'], swaptionVol=[1, 2, 3]),
        index=_index * 3)

    replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP"
    replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(), Mock()).return_value = [
        "MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"]
    replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [
        dt.date(2020, 1, 2), dt.date(2020, 1, 2)]
    replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df

    with DataContext('2019-01-01', '2025-01-01'):
        actual = tm_rates.swaption_vol_term(Currency("GBP", name="GBP"), tm.SwaptionTenorType.SWAP_MATURITY, '5y', 0)
    expected = pd.Series([1, 2, 3], index=pd.to_datetime(['2019-02-01', '2019-07-01', '2020-01-01']))
    assert_series_equal(expected, pd.Series(actual), check_names=False)

    with DataContext('2019-01-01', '2025-01-01'):
        actual = tm_rates.swaption_vol_term(Currency("GBP", name="GBP"), tm.SwaptionTenorType.OPTION_EXPIRY, '5y', 0)
    expected = pd.Series([1, 2, 3], index=pd.to_datetime(['2020-01-01', '2021-01-01', '2021-12-31']))
    assert_series_equal(expected, pd.Series(actual), check_names=False)
    replace.restore()
def test_swaption_swaption_vol_term2_returns_empty():
    replace = Replacer()
    df = ExtendedSeries()
    replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP"
    replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(), Mock()).return_value = [
        "MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"]
    replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [
        dt.date(2020, 1, 2), dt.date(2020, 1, 2)]
    replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df

    with DataContext('2019-01-01', '2025-01-01'):
        actual = tm_rates.swaption_vol_term(Currency("GBP", name="GBP"), tm.SwaptionTenorType.SWAP_MATURITY, '5y', 0)

    assert_series_equal(ExtendedSeries(), actual, check_names=False)
    replace.restore()
def test_swaption_premium_return_data():
    replace = Replacer()
    test_data = dict(swaptionPremium=[1, 2, 3])
    df = MarketDataResponseFrame(data=test_data, index=[dt.date(2019, 1, 1), dt.date(2019, 1, 2),
                                                        dt.date(2019, 1, 3)])

    replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP"
    replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(),
            Mock()).return_value = "MADWG3WHCKNE1DJA"
    replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [
        dt.date(2019, 1, 2), dt.date(2019, 1, 5)]
    replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df

    actual = tm_rates.swaption_premium(Currency("GBP", name="GBP"))
    assert_series_equal(tm._extract_series_from_df(df, QueryType.SWAPTION_PREMIUM), actual)
    replace.restore()
def test_swaption_vol_smile2_returns_data():
    replace = Replacer()
    test_data = dict(strikeRelative=["ATM", "ATM+50", "ATM+100"], swaptionVol=[1, 2, 3])
    df = MarketDataResponseFrame(data=test_data, index=_index * 3)

    replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock()).return_value = "GBP"
    replace('gs_quant.timeseries.measures_rates._get_tdapi_rates_assets', Mock(), Mock()).return_value = [
        "MADWG3WHCKNE1DJA", "MAH6JK3TZJJGFQ65"]
    replace('gs_quant.timeseries.measures_rates._range_from_pricing_date', Mock(), Mock()).return_value = [
        dt.date(2020, 1, 2), dt.date(2020, 1, 2)]
    replace('gs_quant.timeseries.measures_rates._market_data_timed', Mock()).return_value = df

    with DataContext('2019-01-01', '2025-01-01'):
        actual = tm_rates.swaption_vol_smile(Currency("GBP", name="GBP"), '3m', '10y')
    assert_series_equal(pd.Series([1, 2, 3], index=[0.0, 50.0, 100.0]), pd.Series(actual))
    replace.restore()
def test_currency_to_tdapi_swaption_rate_asset_retuns_asset_id(mocker):
    replace = Replacer()
    mocker.patch.object(GsSession.__class__,
                        'current',
                        return_value=GsSession.get(Environment.QA, 'client_id',
                                                   'secret'))
    mocker.patch.object(GsSession.current, '_get', side_effect=mock_request)
    mocker.patch.object(SecurityMaster, 'get_asset', side_effect=mock_request)
    bbid_mock = replace('gs_quant.timeseries.measures.Asset.get_identifier',
                        Mock())

    with tm.PricingContext(dt.date.today()):
        cur = [{
            "currency_assetId": "MAK1FHKH5P5GJSHH",
            "currency": "JPY",
            "swaption_id": "MATT7CA7PRA4B8YB"
        }, {
            "currency_assetId": "MA66CZBQJST05XKG",
            "currency": "GBP",
            "swaption_id": "MAX2SBXZRPYR3NTY"
        }, {
            "currency_assetId": "MAPSDDS072PHYMVQ",
            "currency": "AUD",
            "swaption_id": "MAQHSC1PAF4X5H4B"
        }, {
            "currency_assetId": "MAJNQPFGN1EBDHAE",
            "currency": "EUR",
            "swaption_id": "MAZB3PAH8JFVVT80"
        }, {
            "currency_assetId": "MAZ7RWC904JYHYPS",
            "currency": "USD",
            "swaption_id": "MAY0X3KRD4AN77E2"
        }]
        for c in cur:
            print(c)
            asset = Currency(c.get("currency_assetId"), c.get("currency"))
            bbid_mock.return_value = c.get("currency")
            mqid = _currency_to_tdapi_swaption_rate_asset(asset)
            assert mqid == c.get("swaption_id")

        bbid_mock.return_value = None
        assert _currency_to_tdapi_swaption_rate_asset(asset) == c.get(
            "currency_assetId")
        replace.restore()
def test_currency_to_tdapi_inflation_swap_rate_asset(mocker):
    replace = Replacer()
    mocker.patch.object(GsSession.__class__,
                        'current',
                        return_value=GsSession.get(Environment.QA, 'client_id',
                                                   'secret'))
    mocker.patch.object(GsSession.current, '_get', side_effect=mock_request)
    mocker.patch.object(SecurityMaster, 'get_asset', side_effect=mock_request)
    bbid_mock = replace(
        'gs_quant.timeseries.measures_inflation.Asset.get_identifier', Mock())

    with tm_rates.PricingContext(dt.date.today()):
        cur = [{
            "currency_assetId": "MAK1FHKH5P5GJSHH",
            "currency": "JPY",
            "inflation_id": "MA1CENMCA88VXJ28"
        }, {
            "currency_assetId": "MA66CZBQJST05XKG",
            "currency": "GBP",
            "inflation_id": "MAW75DV9777630QN"
        }, {
            "currency_assetId": "MAJNQPFGN1EBDHAE",
            "currency": "EUR",
            "inflation_id": "MAJTD8XDA8EJZYRG"
        }, {
            "currency_assetId": "MAZ7RWC904JYHYPS",
            "currency": "USD",
            "inflation_id": "MA4016GCT3MDRYVY"
        }]
        for c in cur:
            print(c)
            asset = Currency(c.get("currency_assetId"), c.get("currency"))
            bbid_mock.return_value = c.get("currency")
            mqid = _currency_to_tdapi_inflation_swap_rate_asset(asset)
            assert mqid == c.get("inflation_id")

        bbid_mock.return_value = None
        assert _currency_to_tdapi_inflation_swap_rate_asset(asset) == c.get(
            "currency_assetId")
        replace.restore()
示例#15
0
def test_currencypair_to_tdapi_fxo_asset(mocker):
    replace = Replacer()
    mocker.patch.object(GsSession.__class__,
                        'current',
                        return_value=GsSession.get(Environment.QA, 'client_id',
                                                   'secret'))
    mocker.patch.object(GsSession.current, '_get', side_effect=mock_request)
    mocker.patch.object(SecurityMaster, 'get_asset', side_effect=mock_request)
    bbid_mock = replace(
        'gs_quant.timeseries.measures_fx_vol.Asset.get_identifier', Mock())

    with tm_rates.PricingContext(dt.date.today()):
        cur = [
            {
                "currency_assetId": "MAK1FHKH5P5GJSHH",
                "currency": "USDJPY",
                "id": "MAW3BZY6KFQ6TP95"
            },
            {
                "currency_assetId": "MA66CZBQJST05XKG",
                "currency": "GBPUSD",
                "id": "MA7F5P92330NGKAR"
            },
            {
                "currency_assetId": "MAJNQPFGN1EBDHAE",
                "currency": "EURUSD",
                "id": "MASN9J5N0H418Y6A"
            },
        ]
        for c in cur:
            print(c)
            asset = Currency(c.get("currency_assetId"), c.get("currency"))
            bbid_mock.return_value = c.get("currency")
            mqid = _currencypair_to_tdapi_fxo_asset(asset)
            assert mqid == c.get("id")

        bbid_mock.return_value = None
        assert _currencypair_to_tdapi_fxo_asset(asset) == c.get(
            "currency_assetId")
        replace.restore()
def test_currency_to_tdapi_xccy_swap_rate_asset(mocker):
    replace = Replacer()
    mocker.patch.object(GsSession.__class__, 'current',
                        return_value=GsSession.get(Environment.QA, 'client_id', 'secret'))
    mocker.patch.object(GsSession.current, '_get', side_effect=mock_request)
    mocker.patch.object(SecurityMaster, 'get_asset', side_effect=mock_request)
    bbid_mock = replace('gs_quant.timeseries.measures_xccy.Asset.get_identifier', Mock())

    with tm_rates.PricingContext(dt.date.today()):
        cur = [
            {
                "currency_assetId": "MAK1FHKH5P5GJSHH",
                "currency": "JPY",
                "xccy_id": "MAFMW4HJC5TDE51H"
            },
            {
                "currency_assetId": "MA66CZBQJST05XKG",
                "currency": "GBP",
                "xccy_id": "MATDD783JM1C2GGD"
            },
            {
                "currency_assetId": "MAJNQPFGN1EBDHAE",
                "currency": "EUR",
                "xccy_id": "MAW8SAXPSKYA94E2"
            },
        ]
        for c in cur:
            print(c)
            asset = Currency(c.get("currency_assetId"), c.get("currency"))
            bbid_mock.return_value = c.get("currency")
            mqid = _currency_to_tdapi_crosscurrency_swap_rate_asset(asset)
            assert mqid == c.get("xccy_id")

        bbid_mock.return_value = None
        assert _currency_to_tdapi_crosscurrency_swap_rate_asset(asset) == c.get("currency_assetId")
        replace.restore()
def test_swaption_premium_throws_for_unsupported_ccy():
    with pytest.raises(NotImplementedError):
        tm_rates.swaption_premium(Currency("KRW", name="KRW"))
def test_swaption_premium_throws_for_realtime():
    with pytest.raises(NotImplementedError):
        tm_rates.swaption_premium(Currency("GBP", name="GBP"), real_time=True)
def test_swaption_vol_smile2_returns_throws():
    with pytest.raises(NotImplementedError):
        tm_rates.swaption_vol_smile(Currency("GBP", name="GBP"),
                                    "1m",
                                    "1m",
                                    real_time=True)
示例#20
0
def test_inflation_swap_term(mocker):
    replace = Replacer()
    args = dict(forward_tenor='1y',
                pricing_date='0d',
                clearing_house=_ClearingHouse.LCH,
                real_time=False)

    class ObjectView(object):
        def __init__(self, d):
            self.__dict__ = d

    holidays = replace('gs_quant.datetime.GsCalendar.get', Mock(holidays=[]))
    holidays.return_value = ObjectView({'holidays': []})

    bd_calendar = replace(
        'gs_quant.timeseries.measures_inflation._get_custom_bd', Mock())
    bd_calendar.return_value = CustomBusinessDay()
    pricing_date_mock = replace(
        'gs_quant.timeseries.measures_inflation._range_from_pricing_date',
        Mock())
    pricing_date_mock.return_value = [dt.date(2019, 1, 1), dt.date(2019, 1, 1)]

    mock_nok = Currency('MA891', 'PLN')
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier',
                    Mock())
    xrefs.return_value = 'ACU'
    args['asset'] = mock_nok
    with pytest.raises(NotImplementedError):
        tm.inflation_swap_term(**args)

    mock_usd = Currency('MAZ7RWC904JYHYPS', 'USD')
    args['asset'] = mock_usd
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier',
                    Mock())
    xrefs.return_value = 'USD'
    args['real_time'] = True
    with pytest.raises(NotImplementedError):
        tm.inflation_swap_term(**args)
    args['real_time'] = False

    args['forward_tenor'] = '5yr'
    with pytest.raises(MqValueError):
        tm.inflation_swap_term(**args)
    args['forward_tenor'] = '1y'

    bd_mock = replace('gs_quant.data.dataset.Dataset.get_data', Mock())
    bd_mock.return_value = pd.DataFrame(data=dict(date="2020-04-10",
                                                  exchange="NYC",
                                                  description="Good Friday"),
                                        index=[pd.Timestamp('2020-04-10')])

    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier',
                    Mock())
    xrefs.return_value = 'USD'
    identifiers_empty = replace(
        'gs_quant.timeseries.measures.GsAssetApi.get_many_assets', Mock())
    identifiers_empty.return_value = {}
    with pytest.raises(MqValueError):
        tm.inflation_swap_term(**args)

    identifiers = replace(
        'gs_quant.timeseries.measures.GsAssetApi.get_many_assets', Mock())
    mock_asset = Currency('USD', name='USD')
    mock_asset.id = 'MAEMPCXQG3T716EX'
    mock_asset.exchange = 'OTC'
    identifiers.return_value = [mock_asset]

    d = {
        'terminationTenor': ['1y', '2y', '3y', '4y'],
        'swapRate': [1, 2, 3, 4],
        'assetId': [
            'MAEMPCXQG3T716EX', 'MAFRSWPAF5QPNTP2', 'MA88BXZ3TCTXTFW1',
            'MAC4KAG9B9ZAZHFT'
        ]
    }

    bd_mock.return_value = pd.DataFrame()
    market_data_mock = replace(
        'gs_quant.timeseries.measures_inflation._get_inflation_swap_data',
        Mock())

    market_data_mock.return_value = pd.DataFrame()
    df = pd.DataFrame(data=d, index=_index * 4)
    actual = tm.inflation_swap_term(**args)
    assert actual.empty

    series_apply_mock = replace(
        'gs_quant.timeseries.measures_inflation.pd.Series.apply', Mock())
    series_apply_mock.return_value = pd.Series([
        dt.date(2022, 3, 30),
        dt.date(2023, 3, 30),
        dt.date(2024, 3, 30),
        dt.date(2025, 3, 30)
    ],
                                               index=df.index)

    market_data_mock.return_value = df
    with DataContext('2019-01-01', '2026-01-01'):
        actual = tm.inflation_swap_term(**args)
    actual.dataset_ids = _test_datasets
    expected = tm.ExtendedSeries([1, 2, 3, 4],
                                 index=[
                                     dt.date(2022, 3, 30),
                                     dt.date(2023, 3, 30),
                                     dt.date(2024, 3, 30),
                                     dt.date(2025, 3, 30)
                                 ])
    expected.dataset_ids = _test_datasets
    assert_series_equal(expected, actual, check_names=False)
    assert actual.dataset_ids == expected.dataset_ids

    args['location'] = PricingLocation.NYC
    with DataContext('2019-01-01', '2026-01-01'):
        tm.inflation_swap_term(**args)

    holidays.return_value = ObjectView({'holidays': ['0d']})
    with pytest.raises(MqValueError):
        tm.inflation_swap_term(**args)

    replace.restore()
def test_inflation_swap_rate(mocker):
    replace = Replacer()
    args = dict(swap_tenor='5y',
                index_type='UKRPI',
                clearing_house='LCH',
                forward_tenor='5y',
                real_time=False)

    mock_gbp = Currency('MA26QSMPX9990G66', 'GBP')
    args['asset'] = mock_gbp
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier',
                    Mock())
    xrefs.return_value = 'GBP'

    args['swap_tenor'] = '5yr'
    with pytest.raises(MqValueError):
        tm.inflation_swap_rate(**args)
    args['swap_tenor'] = '5y'

    args['forward_tenor'] = '5yr'
    with pytest.raises(MqValueError):
        tm.inflation_swap_rate(**args)
    args['forward_tenor'] = '5y'

    args['real_time'] = True
    with pytest.raises(NotImplementedError):
        tm.inflation_swap_rate(**args)
    args['real_time'] = False

    args['asset'] = Currency('MA666', 'AED')
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier',
                    Mock())
    xrefs.return_value = 'AED'
    with pytest.raises(NotImplementedError):
        tm.inflation_swap_rate(**args)
    args['asset'] = mock_gbp
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier',
                    Mock())
    xrefs.return_value = 'GBP'

    args['index_type'] = tm.InflationIndexType.TESTCPI
    with pytest.raises(MqValueError):
        tm.inflation_swap_rate(**args)
    args['index_type'] = tm.InflationIndexType.UKRPI

    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier',
                    Mock())
    xrefs.return_value = 'GBP'
    identifiers = replace(
        'gs_quant.timeseries.measures_inflation._get_tdapi_inflation_rates_assets',
        Mock())
    identifiers.return_value = {'MA26QSMPX9990G66'}
    mocker.patch.object(GsDataApi,
                        'get_market_data',
                        return_value=mock_curr(None, None))
    actual = tm.inflation_swap_rate(**args)
    expected = tm.ExtendedSeries([1, 2, 3], index=_index * 3, name='swapRate')
    expected.dataset_ids = _test_datasets
    assert_series_equal(expected, actual)
    assert actual.dataset_ids == _test_datasets

    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier',
                    Mock())
    xrefs.return_value = 'EUR'
    identifiers = replace(
        'gs_quant.timeseries.measures_inflation._get_tdapi_inflation_rates_assets',
        Mock())
    identifiers.return_value = {'MAZBW57ZPS54ET7K'}
    mocker.patch.object(GsDataApi,
                        'get_market_data',
                        return_value=mock_curr(None, None))
    args['asset'] = Currency('MAZBW57ZPS54ET7K', 'EUR')
    args['index_type'] = 'FRCPXTOB'
    actual = tm.inflation_swap_rate(**args)
    expected = tm.ExtendedSeries([1, 2, 3], index=_index * 3, name='swapRate')
    expected.dataset_ids = _test_datasets
    assert_series_equal(expected, actual)
    assert actual.dataset_ids == _test_datasets
    replace.restore()
def test_crosscurrency_swap_rate(mocker):
    replace = Replacer()
    args = dict(swap_tenor='5y', rateoption_type='LIBOR', clearing_house='LCH', forward_tenor='5y', real_time=False)

    mock_gbp = Currency('MA26QSMPX9990G66', 'GBP')
    args['asset'] = mock_gbp
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock())
    xrefs.return_value = 'GBP'
    xrefs = replace('gs_quant.timeseries.measures.SecurityMaster.get_asset', Mock())
    mock_usd = Currency('MA26QSMPX9990G63', 'USD')
    xrefs.return_value = mock_usd

    args['swap_tenor'] = '5yr'
    with pytest.raises(MqValueError):
        tm.crosscurrency_swap_rate(**args)
    args['swap_tenor'] = '5y'

    args['forward_tenor'] = '5yr'
    with pytest.raises(MqValueError):
        tm.crosscurrency_swap_rate(**args)
    args['forward_tenor'] = '5y'

    args['real_time'] = True
    with pytest.raises(NotImplementedError):
        tm.crosscurrency_swap_rate(**args)
    args['real_time'] = False

    args['asset'] = Currency('MA666', 'AED')
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock())
    xrefs.return_value = 'AED'
    with pytest.raises(NotImplementedError):
        tm.crosscurrency_swap_rate(**args)
    args['asset'] = mock_gbp

    args['asset'] = Bond('MA667', 'TEST')
    with pytest.raises(MqValueError):
        tm.crosscurrency_swap_rate(**args)
    args['asset'] = mock_gbp

    args['asset'] = Cross('MA667', 'USDAED')
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock())
    xrefs.side_effect = ['AED', 'USD']
    with pytest.raises(NotImplementedError):
        tm.crosscurrency_swap_rate(**args)

    args['asset'] = Cross('MA667', 'USDAED')
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock())
    xrefs.side_effect = ['USD', 'AED']
    with pytest.raises(NotImplementedError):
        tm.crosscurrency_swap_rate(**args)

    args['asset'] = Cross('MA667', 'USDGBP')
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock())
    xrefs.return_value = 'GBP'
    xrefs = replace('gs_quant.timeseries.measures_xccy._check_crosscurrency_rateoption_type', Mock())
    xrefs.side_effect = [tm.CrossCurrencyRateOptionType.LIBOR, tm.CrossCurrencyRateOptionType.OIS]
    with pytest.raises(MqValueError):
        tm.crosscurrency_swap_rate(**args)
    replace.restore()

    xrefs = replace('gs_quant.timeseries.measures.SecurityMaster.get_asset', Mock())
    xrefs.return_value = mock_usd

    args['asset'] = Cross('MA667', 'USDGBP')
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock())
    xrefs.return_value = 'GBP'
    identifiers = replace('gs_quant.timeseries.measures_xccy._get_tdapi_crosscurrency_rates_assets', Mock())
    identifiers.return_value = {'MA26QSMPX9990G66'}
    mocker.patch.object(GsDataApi, 'get_market_data', return_value=mock_curr(None, None))
    actual = tm.crosscurrency_swap_rate(**args)
    expected = tm.ExtendedSeries([1, 2, 3], index=_index * 3, name='xccySwapSpread')
    expected.dataset_ids = _test_datasets
    assert_series_equal(expected, actual)
    assert actual.dataset_ids == _test_datasets

    args['asset'] = Cross('MA667', 'USDCAD')
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock())
    xrefs.return_value = 'CAD'
    identifiers = replace('gs_quant.timeseries.measures_xccy._get_tdapi_crosscurrency_rates_assets', Mock())
    identifiers.return_value = {'MA26QSMPX9990G66'}
    mocker.patch.object(GsDataApi, 'get_market_data', return_value=mock_curr(None, None))
    actual = tm.crosscurrency_swap_rate(**args)
    expected = tm.ExtendedSeries([1, 2, 3], index=_index * 3, name='xccySwapSpread')
    expected.dataset_ids = _test_datasets
    assert_series_equal(expected, actual)
    assert actual.dataset_ids == _test_datasets

    args['asset'] = mock_gbp
    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock())
    xrefs.return_value = 'GBP'

    args['rateoption_type'] = tm.CrossCurrencyRateOptionType.TestRateOption
    with pytest.raises(MqValueError):
        tm.crosscurrency_swap_rate(**args)
    args['rateoption_type'] = tm.CrossCurrencyRateOptionType.LIBOR

    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock())
    xrefs.return_value = 'GBP'
    identifiers = replace('gs_quant.timeseries.measures_xccy._get_tdapi_crosscurrency_rates_assets', Mock())
    identifiers.return_value = {'MA26QSMPX9990G66'}
    mocker.patch.object(GsDataApi, 'get_market_data', return_value=mock_curr(None, None))
    actual = tm.crosscurrency_swap_rate(**args)
    expected = tm.ExtendedSeries([1, 2, 3], index=_index * 3, name='xccySwapSpread')
    expected.dataset_ids = _test_datasets
    assert_series_equal(expected, actual)
    assert actual.dataset_ids == _test_datasets

    xrefs = replace('gs_quant.timeseries.measures.Asset.get_identifier', Mock())
    xrefs.return_value = 'EUR'
    identifiers = replace('gs_quant.timeseries.measures_xccy._get_tdapi_crosscurrency_rates_assets', Mock())
    identifiers.return_value = {'MAZBW57ZPS54ET7K'}
    mocker.patch.object(GsDataApi, 'get_market_data', return_value=mock_curr(None, None))
    args['asset'] = Currency('MAZBW57ZPS54ET7K', 'EUR')
    args['rateoption_type'] = 'OIS'
    actual = tm.crosscurrency_swap_rate(**args)
    expected = tm.ExtendedSeries([1, 2, 3], index=_index * 3, name='xccySwapSpread')
    expected.dataset_ids = _test_datasets
    assert_series_equal(expected, actual)
    assert actual.dataset_ids == _test_datasets
    replace.restore()