class_docstr: Represents a batch of cashflows indexed to a CMS rate.
  
  #### Example:
  ```python
  import numpy as np
  import tensorflow as tf
  import tf_quant_finance as tff
  dates = tff.datetime
  instruments = tff.experimental.instruments
  
  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.periods.months(3)
  p6m = dates.periods.months(6)
  p1y = dates.periods.year()
  fix_spec = instruments.FixedCouponSpecs(
      coupon_frequency=p6m,
      currency='usd',
      notional=1.,
      coupon_rate=0.0,  # Not needed
      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.,
      coupon_basis=0.,
      coupon_multiplier=1.,
      businessday_rule=None,
      daycount_convention=instruments.DayCountConvention.ACTUAL_365)
  
  cms = instruments.CMSCashflowStream(
      start_date, maturity_date, [cms_spec], dtype=dtype)
  
  curve_dates = valuation_date + dates.periods.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: 55512.6295434207
  ```
class_docstr_tok: ["Represents","a","batch","of","cashflows","indexed","to","a","CMS","rate",".","#","#","#","#","Example",":","``","`","python","import","numpy","as","np","import","tensorflow","as","tf","import","tf_quant_finance","as","tff","dates","=","tff.datetime","instruments","=","tff.experimental.instruments","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.periods.months","(","3",")","p6m","=","dates.periods.months","(","6",")","p1y","=","dates.periods.year","(",")","fix_spec","=","instruments.FixedCouponSpecs","(","coupon_frequency=p6m",",","currency='usd","'",",","notional=1.",",","coupon_rate=0.0",",","#","Not","needed","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.",",","coupon_basis=0.",",","coupon_multiplier=1.",",","businessday_rule=None",",","daycount_convention=instruments.DayCountConvention.ACTUAL_365",")","cms","=","instruments.CMSCashflowStream","(","start_date",",","maturity_date",",","[","cms_spec","]",",","dtype=dtype",")","curve_dates","=","valuation_date","+","dates.periods.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",":","55512.6295434207","``","`"]
docstr: Initialize a batch of CMS cashflow streams.
  
  Args:
    start_date: A rank 1 `DateTensor` specifying the starting dates of the
      accrual of the first coupon of the cashflow stream. The shape of the
      input correspond to the numbercof streams being created.
    end_date: A rank 1 `DateTensor` specifying the end dates for accrual of
      the last coupon in each cashflow stream. The shape of the input should
      be the same as that of `start_date`.
    coupon_spec: A list of `CMSCouponSpecs` specifying the details of the
      coupon payment for the cashflow stream. The length of the list should
      be the same as the number of streams being created. Each coupon within
      the list must have the same daycount_convention and businessday_rule.
    dtype: `tf.Dtype`. If supplied the dtype for the real variables or ops
      either supplied to the FloatingCashflowStream object or created by the
      object.
      Default value: None which maps to the default dtype inferred by
      TensorFlow.
    name: Python str. The name to give to the ops created by this class.
      Default value: `None` which maps to 'floating_cashflow_stream'.
docstr_tok: ["Initialize","a","batch","of","CMS","cashflow","streams",".","Args",":","start_date",":","A","rank","1","`","DateTensor","`","specifying","the","starting","dates","of","the","accrual","of","the","first","coupon","of","the","cashflow","stream",".","The","shape","of","the","input","correspond","to","the","numbercof","streams","being","created",".","end_date",":","A","rank","1","`","DateTensor","`","specifying","the","end","dates","for","accrual","of","the","last","coupon","in","each","cashflow","stream",".","The","shape","of","the","input","should","be","the","same","as","that","of","`","start_date","`",".","coupon_spec",":","A","list","of","`","CMSCouponSpecs","`","specifying","the","details","of","the","coupon","payment","for","the","cashflow","stream",".","The","length","of","the","list","should","be","the","same","as","the","number","of","streams","being","created",".","Each","coupon","within","the","list","must","have","the","same","daycount_convention","and","businessday_rule",".","dtype",":","`","tf.Dtype","`",".","If","supplied","the","dtype","for","the","real","variables","or","ops","either","supplied","to","the","FloatingCashflowStream","object","or","created","by","the","object",".","Default","value",":","None","which","maps","to","the","default","dtype","inferred","by","TensorFlow",".","name",":","Python","str",".","The","name","to","give","to","the","ops","created","by","this","class",".","Default","value",":","`","None","`","which","maps","to","'floating_cashflow_stream","'","."]
code: def __init__(
      self, start_date, end_date, coupon_spec, dtype=None, name=None
  ):
      """Initialize a batch of CMS cashflow streams.
  
      Args:
        start_date: A rank 1 `DateTensor` specifying the starting dates of the
          accrual of the first coupon of the cashflow stream. The shape of the
          input correspond to the numbercof streams being created.
        end_date: A rank 1 `DateTensor` specifying the end dates for accrual of
          the last coupon in each cashflow stream. The shape of the input should
          be the same as that of `start_date`.
        coupon_spec: A list of `CMSCouponSpecs` specifying the details of the
          coupon payment for the cashflow stream. The length of the list should
          be the same as the number of streams being created. Each coupon within
          the list must have the same daycount_convention and businessday_rule.
        dtype: `tf.Dtype`. If supplied the dtype for the real variables or ops
          either supplied to the FloatingCashflowStream object or created by the
          object.
          Default value: None which maps to the default dtype inferred by
          TensorFlow.
        name: Python str. The name to give to the ops created by this class.
          Default value: `None` which maps to 'floating_cashflow_stream'.
      """
  
      super(CMSCashflowStream, self).__init__()
      self._name = name or "cms_cashflow_stream"
  
      with tf.name_scope(self._name):
          self._start_date = dates.convert_to_date_tensor(start_date)
          self._end_date = dates.convert_to_date_tensor(end_date)
          self._batch_size = self._start_date.shape[0]
          self._first_coupon_date = None
          self._penultimate_coupon_date = None
          self._dtype = dtype
  
          self._setup(coupon_spec)
  
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 1 to create a new CMSCashflowStream object from inherited base classes: cs with example: obj = CMSCashflowStream(start_date, end_date, coupon_spec, dtype, name)