§
    º³Ùg"  ã                  ó.   — d Z ddlmZ ddlZdd	„Zdd
„ZdS )z-A collection of discrete probability metrics.é    )ÚannotationsNÚdist_pÚdictÚdist_qÚreturnÚfloatc                óp  — t          |                      ¦   «         ¦  «        }t          |                     ¦   «         ¦  «        }i }|                      ¦   «         D ]\  }}||z  ||<   Œi }|                     ¦   «         D ]\  }}||z  ||<   Œd}|                     ¦   «         D ]G\  }}||v r9|t          j        |¦  «        t          j        ||         ¦  «        z
  dz  z  }||= ŒB||z  }ŒH|t          |                     ¦   «         ¦  «        z  }t          j        |¦  «        t          j        d¦  «        z  }	|	S )aJ  Computes the Hellinger distance between
    two counts distributions.

    Parameters:
        dist_p (dict): First dict of counts.
        dist_q (dict): Second dict of counts.

    Returns:
        float: Distance

    References:
        `Hellinger Distance @ wikipedia <https://en.wikipedia.org/wiki/Hellinger_distance>`_
    r   é   )ÚsumÚvaluesÚitemsÚmathÚsqrt)
r   r   Úp_sumÚq_sumÚp_normedÚkeyÚvalÚq_normedÚtotalÚdists
             ú[/granary/edev/quantum/lib/python3.11/site-packages/qiskit/quantum_info/analysis/distance.pyÚhellinger_distancer      s2  € õ �—’‘”Ñ Ô €EÝ�—’‘”Ñ Ô €Eà€HØ—L’L‘N”Nð $ð $‰ˆˆSØ˜e™ˆ�‰ˆà€HØ—L’L‘N”Nð $ð $‰ˆˆSØ˜e™ˆ�‰ˆà€EØ—N’NÑ$Ô$ð ð ‰ˆˆSØ�(ˆ?ˆ?Ø•d”i ‘n”n¥t¤y°¸#´Ñ'?Ô'?Ñ?ÀAÑEÑEˆEØ˜��à�S‰LˆEˆEØ	�S�—’Ñ"Ô"Ñ#Ô#Ñ#€EåŒ9�UÑÔ�dœi¨™lœlÑ*€Dà€Kó    c                ó8   — t          | |¦  «        }d|dz  z
  dz  S )av  Computes the Hellinger fidelity between
    two counts distributions.

    The fidelity is defined as :math:`\left(1-H^{2}\right)^{2}` where H is the
    Hellinger distance.  This value is bounded in the range [0, 1].

    This is equivalent to the standard classical fidelity
    :math:`F(Q,P)=\left(\sum_{i}\sqrt{p_{i}q_{i}}\right)^{2}` that in turn
    is equal to the quantum state fidelity for diagonal density matrices.

    Parameters:
        dist_p (dict): First dict of counts.
        dist_q (dict): Second dict of counts.

    Returns:
        float: Fidelity

    Example:

        .. code-block::

            from qiskit import QuantumCircuit
            from qiskit.quantum_info.analysis import hellinger_fidelity
            from qiskit.providers.basic_provider import BasicSimulator

            qc = QuantumCircuit(5, 5)
            qc.h(2)
            qc.cx(2, 1)
            qc.cx(2, 3)
            qc.cx(3, 4)
            qc.cx(1, 0)
            qc.measure(range(5), range(5))

            sim = BasicSimulator()
            res1 = sim.run(qc).result()
            res2 = sim.run(qc).result()

            hellinger_fidelity(res1.get_counts(), res2.get_counts())

    References:
        `Quantum Fidelity @ wikipedia <https://en.wikipedia.org/wiki/Fidelity_of_quantum_states>`_
        `Hellinger Distance @ wikipedia <https://en.wikipedia.org/wiki/Hellinger_distance>`_
    é   r
   )r   )r   r   r   s      r   Úhellinger_fidelityr   9   s'   € õX ˜f fÑ-Ô-€DØ��a‘‰K˜AÑÐr   )r   r   r   r   r   r   )Ú__doc__Ú
__future__r   r   r   r   © r   r   ú<module>r!      s[   ðð 4Ð 3Ø "Ð "Ð "Ð "Ð "Ð "Ø €€€ð$ð $ð $ð $ðN-ð -ð -ð -ð -ð -r   