o
    ix                     @   sn   d dl mZmZ d dlmZmZmZmZmZm	Z	 			ddeeef de
de
ded	eeeef  f
d
dZdS )    )ListUnion)LatticeStdVectorFstconvert_nbest_to_vectorlattice_scalescale_latticeshortest_path      ?   latacoustic_scalelm_scalenreturnc                 C   sH   |dks|dkrt | | } t||d}t|| d t| |d}t|S )a  Work out N-best paths in lattices

    It implements
    https://github.com/kaldi-asr/kaldi/blob/master/src/latbin/lattice-to-nbest.cc

    Args:
      lat:
        The input lattice.
      acoustic_scale:
        Scaling factor for acoustic likelihoods.
      lm_scale:
        Scaling factor for language model scores.
      n:
        Number of distinct paths.
    Returns:
      Return a list of linear FSTs.

    **Example for a StdVectorFst**

    .. literalinclude:: ./code/lattice_to_nbest/ex1.py
       :language: python
       :linenos:
       :caption: lattice_to_nbest for a StdVectorFst

    .. figure:: ./code/lattice_to_nbest/vector-fst.svg
        :alt: vector-fst.svg
        :align: center
        :figwidth: 600px

        Visualization of vector-fst.svg

    .. figure:: ./code/lattice_to_nbest/vector-fst-3best-0.svg
        :alt: vector-fst-3best-0.svg
        :align: center
        :figwidth: 600px

        Visualization of vector-fst-3best-0.svg

    .. figure:: ./code/lattice_to_nbest/vector-fst-3best-1.svg
        :alt: vector-fst-3best-1.svg
        :align: center
        :figwidth: 600px

        Visualization of vector-fst-3best-1.svg

    .. figure:: ./code/lattice_to_nbest/vector-fst-3best-2.svg
        :alt: vector-fst-3best-2.svg
        :align: center
        :figwidth: 600px

        Visualization of vector-fst-3best-2.svg

    **Example for a Lattice**

    .. literalinclude:: ./code/lattice_to_nbest/ex2.py
       :language: python
       :linenos:
       :caption: lattice_to_nbest for a Lattice

    .. figure:: ./code/lattice_to_nbest/lattice.svg
        :alt: lattice.svg
        :align: center
        :figwidth: 600px

        Visualization of lattice.svg

    .. figure:: ./code/lattice_to_nbest/lattice-3best-0.svg
        :alt: lattice-3best-0.svg
        :align: center
        :figwidth: 600px

        Visualization of lattice-3best-0.svg

    .. figure:: ./code/lattice_to_nbest/lattice-3best-1.svg
        :alt: lattice-3best-1.svg
        :align: center
        :figwidth: 600px

        Visualization of lattice-3best-1.svg

    .. figure:: ./code/lattice_to_nbest/lattice-3best-2.svg
        :alt: lattice-3best-2.svg
        :align: center
        :figwidth: 600px

        Visualization of lattice-3best-2.svg
    r   )lmwtacwt)scalein_out)r   )typer   r   r	   r   )r   r   r   r   	lat_scalenbest r   M/home/ubuntu/.local/lib/python3.10/site-packages/kaldifst/lattice_to_nbest.pylattice_to_nbest   s   ]r   N)r
   r
   r   )typingr   r   	_kaldifstr   r   r   r   r   r	   floatintr   r   r   r   r   <module>   s      
