code: def damping_after_dephasing(T1, T2, gate_time):
      
      assert T1 >= 0
      assert T2 >= 0
  
      if T1 != INFINITY:
          damping = damping_kraus_map(p=1 - np.exp(-float(gate_time) / float(T1)))
      else:
          damping = [np.eye(2)]
  
      if T2 != INFINITY:
          gamma_phi = float(gate_time) / float(T2)
          if T1 != INFINITY:
              if T2 > 2 * T1:
                  raise ValueError("T2 is upper bounded by 2 * T1")
              gamma_phi -= float(gate_time) / float(2 * T1)
  
          dephasing = dephasing_kraus_map(p=.5 * (1 - np.exp(-2 * gamma_phi)))
      else:
          dephasing = [np.eye(2)]
      return combine_kraus_maps(damping, dephasing)
docs: Generate the Kraus map corresponding to the composition
      of a dephasing channel followed by an amplitude damping channel.
  
      :param float T1: The amplitude damping time
      :param float T2: The dephasing time
      :param float gate_time: The gate duration.
      :return: A list of Kraus operators.