code: def run_estimate(unknown_gate, qnum, repetitions):
      
  
      qubits = [None] * qnum
      for i in range(len(qubits)):
          qubits[i] = cirq.GridQubit(0, i)
      ancilla = cirq.GridQubit(0, len(qubits))
  
      circuit = cirq.Circuit.from_ops(
          cirq.H.on_each(*qubits),
          [cirq.ControlledGate(unknown_gate**(2**i)).on(qubits[qnum-i-1], ancilla)
           for i in range(qnum)],
          QftInverse(qnum)(*qubits),
          cirq.measure(*qubits, key='phase'))
      simulator = cirq.Simulator()
      result = simulator.run(circuit, repetitions=repetitions)
      return result
docs: Construct the following phase estimator circuit and execute simulations.
  
                                       ---------
      ---H---------------------@------|         |---M--- [m4]:lowest bit
                               |      |         |
      ---H---------------@-----+------|         |---M--- [m3]
                         |     |      | QFT_inv |
      ---H---------@-----+-----+------|         |---M--- [m2]
                   |     |     |      |         |
      ---H---@-----+-----+-----+------|         |---M--- [m1]:highest bit
             |     |     |     |       ---------
      -------U-----U^2---U^4---U^8----------------------
  
      The measurement results M=[m1, m2,...] are translated to the estimated
      phase with the following formula:
      phi = m1*(1/2) + m2*(1/2)^2 + m3*(1/2)^3 + ...