class_docstr: Represents a batch of CMS Swaps.
  
  A CMS swap is a swap contract where the floating leg payments are based on the
  constant maturity swap (CMS) rate. The CMS rate refers to a future fixing of
  swap rate of a fixed maturity, i.e. the breakeven swap rate on a standard
  fixed-to-float swap of the specified maturity [1].
  
  Let S_(i,m) denote a swap rate with maturity `m` (years) on the fixing date
  `T_i. Consider a CMS swap with the starting date T_0 and maturity date T_n
  and regularly spaced coupon payment dates T_1, T_2, ..., T_n such that
  
  T_0 < T_1 < T_2 < ... < T_n and dt_i = T_(i+1) - T_i    (A)
  
  The CMS rate, S_(i, m), is fixed on T_0, T_1, ..., T_(n-1) and floating
  payments made are on T_1, T_2, ..., T_n (payment dates) with the i-th payment
  being equal to tau_i * S_(i, m) where tau_i is the year fraction between
  [T_i, T_(i+1)].
  
  The CMSSwap class can be used to create and price multiple CMS swaps
  simultaneously. However all CMS swaps within an object must be priced using
  a common reference and discount curve.
  
  #### Example:
  The following example illustrates the construction of an CMS swap and
  calculating its price.
  
  ```python
  import numpy as np
  import tensorflow as tf
  import tf_quant_finance as tff
  dates = tff.datetime
  instruments = tff.experimental.instruments
  rc = tff.experimental.instruments.rates_common
  
  dtype = np.float64
  start_date = dates.convert_to_date_tensor([(2021, 1, 1)])
  maturity_date = dates.convert_to_date_tensor([(2023, 1, 1)])
  valuation_date = dates.convert_to_date_tensor([(2021, 1, 1)])
  p3m = dates.months(3)
  p6m = dates.months(6)
  p1y = dates.year()
  fix_spec = instruments.FixedCouponSpecs(
      coupon_frequency=p6m,
      currency='usd',
      notional=1.,
      coupon_rate=0.02,
      daycount_convention=instruments.DayCountConvention.ACTUAL_365,
      businessday_rule=dates.BusinessDayConvention.NONE)
  flt_spec = instruments.FloatCouponSpecs(
      coupon_frequency=p3m,
      reference_rate_term=p3m,
      reset_frequency=p3m,
      currency='usd',
      notional=1.,
      businessday_rule=dates.BusinessDayConvention.NONE,
      coupon_basis=0.,
      coupon_multiplier=1.,
      daycount_convention=instruments.DayCountConvention.ACTUAL_365)
  cms_spec = instruments.CMSCouponSpecs(
      coupon_frequency=p3m,
      tenor=p1y,
      float_leg=flt_spec,
      fixed_leg=fix_spec,
      notional=1.e6,
      coupon_basis=0.,
      coupon_multiplier=1.,
      businessday_rule=None,
      daycount_convention=instruments.DayCountConvention.ACTUAL_365)
  
  cms = instruments.CMSSwap(
      start_date, maturity_date, [fix_spec],
      [cms_spec], dtype=dtype)
  
  curve_dates = valuation_date + dates.years([0, 1, 2, 3, 5])
  reference_curve = instruments.RateCurve(
      curve_dates,
      np.array([
          0.02, 0.02, 0.025, 0.03, 0.035
      ], dtype=np.float64),
      valuation_date=valuation_date,
      dtype=np.float64)
  market = instruments.InterestRateMarket(
      reference_curve=reference_curve, discount_curve=reference_curve)
  
  price = cms.price(valuation_date, market)
  # Expected result: 16629.820479418966
  ```
  
  #### References:
  [1]: Leif B.G. Andersen and Vladimir V. Piterbarg. Interest Rate Modeling,
      Volume I: Foundations and Vanilla Models. Chapter 5. 2010.
class_docstr_tok: ["Represents","a","batch","of","CMS","Swaps",".","A","CMS","swap","is","a","swap","contract","where","the","floating","leg","payments","are","based","on","the","constant","maturity","swap","(","CMS",")","rate",".","The","CMS","rate","refers","to","a","future","fixing","of","swap","rate","of","a","fixed","maturity",",","i.e",".","the","breakeven","swap","rate","on","a","standard","fixed-to-float","swap","of","the","specified","maturity","[","1","]",".","Let","S_","(","i",",","m",")","denote","a","swap","rate","with","maturity","`","m","`","(","years",")","on","the","fixing","date","`","T_i",".","Consider","a","CMS","swap","with","the","starting","date","T_0","and","maturity","date","T_n","and","regularly","spaced","coupon","payment","dates","T_1",",","T_2",",","...",",","T_n","such","that","T_0","<","T_1","<","T_2","<","...","<","T_n","and","dt_i","=","T_","(","i+1",")","-","T_i","(","A",")","The","CMS","rate",",","S_","(","i",",","m",")",",","is","fixed","on","T_0",",","T_1",",","...",",","T_","(","n-1",")","and","floating","payments","made","are","on","T_1",",","T_2",",","...",",","T_n","(","payment","dates",")","with","the","i-th","payment","being","equal","to","tau_i","*","S_","(","i",",","m",")","where","tau_i","is","the","year","fraction","between","[","T_i",",","T_","(","i+1",")","]",".","The","CMSSwap","class","can","be","used","to","create","and","price","multiple","CMS","swaps","simultaneously",".","However","all","CMS","swaps","within","an","object","must","be","priced","using","a","common","reference","and","discount","curve",".","#","#","#","#","Example",":","The","following","example","illustrates","the","construction","of","an","CMS","swap","and","calculating","its","price",".","``","`","python","import","numpy","as","np","import","tensorflow","as","tf","import","tf_quant_finance","as","tff","dates","=","tff.datetime","instruments","=","tff.experimental.instruments","rc","=","tff.experimental.instruments.rates_common","dtype","=","np.float64","start_date","=","dates.convert_to_date_tensor","(","[","(","2021",",","1",",","1",")","]",")","maturity_date","=","dates.convert_to_date_tensor","(","[","(","2023",",","1",",","1",")","]",")","valuation_date","=","dates.convert_to_date_tensor","(","[","(","2021",",","1",",","1",")","]",")","p3m","=","dates.months","(","3",")","p6m","=","dates.months","(","6",")","p1y","=","dates.year","(",")","fix_spec","=","instruments.FixedCouponSpecs","(","coupon_frequency=p6m",",","currency='usd","'",",","notional=1.",",","coupon_rate=0.02",",","daycount_convention=instruments.DayCountConvention.ACTUAL_365",",","businessday_rule=dates.BusinessDayConvention.NONE",")","flt_spec","=","instruments.FloatCouponSpecs","(","coupon_frequency=p3m",",","reference_rate_term=p3m",",","reset_frequency=p3m",",","currency='usd","'",",","notional=1.",",","businessday_rule=dates.BusinessDayConvention.NONE",",","coupon_basis=0.",",","coupon_multiplier=1.",",","daycount_convention=instruments.DayCountConvention.ACTUAL_365",")","cms_spec","=","instruments.CMSCouponSpecs","(","coupon_frequency=p3m",",","tenor=p1y",",","float_leg=flt_spec",",","fixed_leg=fix_spec",",","notional=1.e6",",","coupon_basis=0.",",","coupon_multiplier=1.",",","businessday_rule=None",",","daycount_convention=instruments.DayCountConvention.ACTUAL_365",")","cms","=","instruments.CMSSwap","(","start_date",",","maturity_date",",","[","fix_spec","]",",","[","cms_spec","]",",","dtype=dtype",")","curve_dates","=","valuation_date","+","dates.years","(","[","0",",","1",",","2",",","3",",","5","]",")","reference_curve","=","instruments.RateCurve","(","curve_dates",",","np.array","(","[","0.02",",","0.02",",","0.025",",","0.03",",","0.035","]",",","dtype=np.float64",")",",","valuation_date=valuation_date",",","dtype=np.float64",")","market","=","instruments.InterestRateMarket","(","reference_curve=reference_curve",",","discount_curve=reference_curve",")","price","=","cms.price","(","valuation_date",",","market",")","#","Expected","result",":","16629.820479418966","``","`","#","#","#","#","References",":","[","1","]",":","Leif","B.G",".","Andersen","and","Vladimir","V.","Piterbarg",".","Interest","Rate","Modeling",",","Volume","I",":","Foundations","and","Vanilla","Models",".","Chapter","5",".","2010","."]
docstr: Setup swap legs.
docstr_tok: ["Setup","swap","legs","."]
code: def _setup_leg(self, leg):
      """Setup swap legs."""
      if isinstance(leg[0], rc.CMSCouponSpecs):
          new_leg = CMSCashflowStream(
              self._start_date,
              self._maturity_date,
              leg,
              dtype=self._dtype,
          )
          self._cms_leg = new_leg
      else:
          new_leg = super(CMSSwap, self)._setup_leg(leg)
  
      return new_leg
  
imports: import itertools
  import tensorflow.compat.v2
  import tensorflow_probability
  from tf_quant_finance import black_scholes
  from tf_quant_finance import datetime
  from tf_quant_finance.experimental.instruments import cashflow_stream
  from tf_quant_finance.experimental.instruments import interest_rate_swap
  from tf_quant_finance.experimental.instruments import rates_common
  from tf_quant_finance.math import integration
label_desc: Use image node_id 3 for calling the CMSSwap obj's underlying member method code with example usage: obj._setup_leg(leg) and returns: new_leg