paddle\_quantum.hamiltonian
==================================

哈密顿量的功能实现。

.. py:class:: Hamiltonian(pauli_str, compress=True)

   基类: :py:class:`object`

   Paddle Quantum 中的 Hamiltonian ``class``。

   用户可以通过一个 Pauli string 来实例化该 ``class``。

   :param pauli_str: 用列表定义的 Hamiltonian，如 ``[(1, 'Z0, Z1'), (2, 'I')]``。
   :type pauli_str: list
   :param compress: 是否对输入的 list 进行自动合并（例如 ``(1, 'Z0, Z1')`` 和 ``(2, 'Z1, Z0')`` 这两项将被自动合并），默认为 ``True``。
   :type compress: bool, optional

   .. note::
      
      若 ``compress`` 为 ``False``, 则不会检查输入的合法性。

   .. py:property:: n_terms()

      该哈密顿量的项数。

   .. py:property:: pauli_str()

      该哈密顿量对应的 Pauli string。

   .. py:property:: terms()

      该哈密顿量中的每一项，i.e. ``[['Z0, Z1'], ['I']]``。
   
   .. py:property:: coefficients()

      该哈密顿量中每一项的系数，i.e. ``[1.0, 2.0]``。

   .. py:property:: pauli_words()

      该哈密顿量中每一项对应的 Pauli word 构成的列表，i.e. ``['ZIZ', 'IIX']``。
   
   .. py:property:: pauli_words_r()

      该哈密顿量中每一项对应的简化（不包含 I） Pauli word 组成的列表，i.e. ``['ZXZZ', 'Z', 'X']``。

   .. py:property:: pauli_words_matrix()

      该哈密顿量中每一项对应的简化（不包含 I） Pauli word 对应的 matrix 组成的列表。

   .. py:property:: sites()

      该哈密顿量中的每一项对应的量子比特编号组成的列表。
   
   .. py:property:: n_qubits()

      该哈密顿量对应的量子比特数。
   
   .. py:method:: decompose_with_sites()

      将 pauli_str 分解为系数、泡利字符串的简化形式以及它们分别作用的量子比特下标。

      :return:
         包含如下元素的 tuple:

         - coefficients: 元素为每一项的系数。
         - pauli_words_r: 元素为每一项的泡利字符串的简化形式，例如 'Z0, Z1, X3' 这一项的泡利字符串为 'ZZX'。
         - sites: 元素为每一项作用的量子比特下标，例如 'Z0, Z1, X3' 这一项的 site 为 [0, 1, 3]。
      :rtype: Tuple[list]

   .. py:method:: decompose_pauli_words()

      将 pauli_str 分解为系数和泡利字符串。

      :return:
         包含如下元素的 tuple:

         - coefficients: 元素为每一项的系数。
         - pauli_words: 元素为每一项的泡利字符串，例如 'Z0, Z1, X3' 这一项的泡利字符串为 'ZZIX'。
      :rtype: Tuple[list]
   
   .. py:method:: construct_h_matrix(qubit_num=None)
        
      构建 Hamiltonian 在 Z 基底下的矩阵。

      :param qubit_num: 量子比特数量，默认值为 ``1``。
      :type qubit_num: int, optional

      :return: Z 基底下的哈密顿量矩阵形式。
      :rtype: np.ndarray


.. py:class:: SpinOps(size, use_sparse=False)
   
   基类: :py:class:`object`

   矩阵表示下的自旋算符，可以用来构建哈密顿量矩阵或者自旋可观测量。
   
   :param size: 系统的大小
   :type size: int
   :param use_sparse: 是否使用 sparse matrix 计算，默认为 ``False``。
   :type use_sparse: bool, optional

   .. py:property:: sigz_p()

      :math:`S^z_i` 算符组成的列表，其中每一项对应不同的 :math:`i`。
   
   .. py:property:: sigy_p()

      :math:`S^y_i` 算符组成的列表，其中每一项对应不同的 :math:`i`。

   .. py:property:: sigx_p()

      :math:`S^x_i` 算符组成的列表，其中每一项对应不同的 :math:`i`。
