
    z	iL                    0    S r SSKJr  SSKrSS jrSS jrg)z-A collection of discrete probability metrics.    )annotationsNc                :   [        U R                  5       5      n[        UR                  5       5      n0 nU R                  5        H  u  pVXb-  XE'   M     0 nUR                  5        H  u  pVXc-  Xu'   M     SnUR                  5        HG  u  pVXW;   a9  U[        R                  " U5      [        R                  " Xu   5      -
  S-  -  nXu	 MC  X-  nMI     U[        UR                  5       5      -  n[        R                  " U5      [        R                  " S5      -  n	U	$ )a&  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)
dist_pdist_qp_sumq_sump_normedkeyvalq_normedtotaldists
             _/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/quantum_info/analysis/distance.pyhellinger_distancer      s      E EHLLN # HLLN # ENN$?diintyy'??AEEELE % 
S"##E99Udiil*DK    c                .    [        X5      nSUS-  -
  S-  $ )a  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:

    .. plot::
       :include-source:
       :nofigs:

        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"    \ f-DaKAr   )r   dictr   r   returnfloat)__doc__
__future__r   r	   r   r    r   r   <module>r!      s    4 " $N/r   