o
    jo™iï  ã                   @   sV   d Z ddlmZmZ ddlZddlmZ ddlmZ G dd„ deƒZG dd	„ d	ƒZ	dS )
zFGrammar for generating simple weather expressions given tabular input.é    )ÚDictÚ
NamedTupleN)Úbyte)Úrewritec                   @   s2   e Zd ZU dZeed< eed< eed< eed< dS )ÚWeatherTuplez%Stores single entry in weather table.ÚstateÚtemperatureÚwind_directionÚ
wind_speedN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__Úint© r   r   úK/home/ubuntu/.local/lib/python3.10/site-packages/pynini/examples/weather.pyr      s   
 r   c                   @   sÞ   e Zd ZU dZe ej¡ ¡ Z	e 
ddddd¡ ¡ Ze ddg¡Ze ee 
d	d
¡ d¡e 
d
de¡e	¡ ¡ ZdZeeef ed< ddd„Zdedededededdfdd„Zedejdejfdd„ƒZdedefdd„ZdS ) ÚWeatherTablezðSimple object for holding a set of weather data.

  The table is indexed by city and for each city there is data on temperature,
  wind speed, wind direction, current state of the weather (raining, snowing,
  clear, partly cloudy, etc.).
  Ú*ú,ú:ú?ú!)ÚdegreesÚdegree)Ú
kilometersÚ	kilometerz[BOS]ú z1 z[EOS]zzIn $CITY, it is $TEMPERATURE degrees and $STATE, with winds out of the $WIND_DIRECTION at $WIND_SPEED kilometers per hour.Ú_tableÚreturnNc                 C   s
   i | _ d S ©N)r   )Úselfr   r   r   Ú__init__7   s   
zWeatherTable.__init__Úcityr   r
   r	   r   c                 C   s   t ||||ƒ| j|< d S r!   )r   r   )r"   r$   r   r
   r	   r   r   r   r   Úadd_city:   s   ÿzWeatherTable.add_cityÚargsc                  G   s*   t j ¡ }| D ]	}||t j 7 }q| ¡ S )z¾Helper function that pads a series of arguments with _sigma_star.

    Args:
      args: strings or FSTs.

    Returns:
      _sigma_star + args0 + _sigma_star ... + argsN + _sigma_star
    )r   Ú_sigma_starÚcopyÚoptimize)r&   ÚvalÚargr   r   r   Ú	sigma_pad?   s   

zWeatherTable.sigma_padc                 C   sh   | j | }t t d|¡t dt|jƒ¡t d|j¡t d|j¡t dt|j	ƒ¡¡}t
 | j|| j ¡S )zˆGenerates weather report for the given city.

    Args:
      city: a city string.

    Returns:
      Weather report for the city.
    z$CITYz$TEMPERATUREz$STATEz$WIND_DIRECTIONz$WIND_SPEED)r   r   r,   ÚpyniniÚcrossr   r   r   r	   r
   r   Úone_top_rewriteÚ	_templateÚ_singularize)r"   r$   ÚdataÚpopulater   r   r   Úgenerate_reportN   s   
	
ûzWeatherTable.generate_report)r    N)r   r   r   r   r-   Úclosurer   ÚBYTEr)   r'   ÚunionÚ_punctÚ
string_mapÚ_singularizationÚ	cdrewriteÚconcatr1   r0   r   r   r   r   r#   r   r%   ÚstaticmethodÚFstLikeÚFstr,   r4   r   r   r   r   r   !   s6   
 ÿýý
ÿÿ
ÿr   )
r   Útypingr   r   r-   Ú
pynini.libr   r   r   r   r   r   r   r   Ú<module>   s   