Ë
    Ìi´	  ã                   ób   — d dl mZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ  G d„ de«      Zy)	é    )ÚHasNulls)ÚComputation)ÚDateÚDateTimeÚNumberÚ	TimeDelta)ÚDataTypeError)Úwarn_null_calculationc                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚChangeaÅ  
    Calculate the difference between two columns.

    This calculation can be applied to :class:`.Number` columns to calculate
    numbers. It can also be applied to :class:`.Date`, :class:`.DateTime`, and
    :class:`.TimeDelta` columns to calculate time deltas.

    :param before_column_name:
        The name of a column containing the "before" values.
    :param after_column_name:
        The name of a column containing the "after" values.
    c                 ó    — || _         || _        y ©N)Ú_before_column_nameÚ_after_column_name)ÚselfÚbefore_column_nameÚafter_column_names      úZ/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/agate/computations/change.pyÚ__init__zChange.__init__   s   € Ø#5ˆÔ Ø"3ˆÕó    c                 óÜ   — |j                   | j                     }t        |j                  t        t
        t        f«      r
t        «       S t        |j                  t        «      r
t        «       S y r   )Úcolumnsr   Ú
isinstanceÚ	data_typer   r   r   r   )r   ÚtableÚbefore_columns      r   Úget_computed_data_typezChange.get_computed_data_type   sQ   € ØŸ™ d×&>Ñ&>Ñ?ˆä�m×-Ñ-´´hÄ	Ð/JÔKÜ“;ÐÜ�m×-Ñ-¬vÔ6Ü“8ˆOð 7r   c                 óä  — |j                   | j                     }|j                   | j                     }t        t        t
        t        fD ]›  }t        |j                  |«      sŒt        |j                  |«      st        d«      ‚t        | j                  «      j                  |«      rt        | |«       t        | j                  «      j                  |«      rt        | |«        y  t        d«      ‚)Nz*Specified columns must be of the same typezkChange before and after columns must both contain data that is one of: Number, Date, DateTime or TimeDelta.)r   r   r   r   r   r   r   r   r   r	   r   Úrunr
   )r   r   r   Úafter_columnr   s        r   ÚvalidatezChange.validate!   sÎ   € ØŸ™ d×&>Ñ&>Ñ?ˆØ—}‘} T×%<Ñ%<Ñ=ˆä ¤$¬´)Ð<ò 	ˆIÜ˜-×1Ñ1°9Õ=Ü! ,×"8Ñ"8¸)ÔDÜ'Ð(TÓUÐUä˜D×4Ñ4Ó5×9Ñ9¸%Ô@Ü)¨$°Ô>ä˜D×3Ñ3Ó4×8Ñ8¸Ô?Ü)¨$°Ô=áð	ô ð Có Dð 	Dr   c                 ó¼   — g }|j                   D ]J  }|| j                     }|| j                     }|�|�|j                  ||z
  «       Œ:|j                  d «       ŒL |S r   )Úrowsr   r   Úappend)r   r   Ú
new_columnÚrowÚbeforeÚafters         r   r   z
Change.run5   sm   € Øˆ
à—:‘:ò 	(ˆCØ˜×1Ñ1Ñ2ˆFØ˜×/Ñ/Ñ0ˆEàÐ! eÐ&7Ø×!Ñ! %¨&¡.Õ1à×!Ñ! $Õ'ð	(ð Ðr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r!   r   © r   r   r   r      s   „ ñò4òòDó(r   r   N)Úagate.aggregations.has_nullsr   Úagate.computations.baser   Úagate.data_typesr   r   r   r   Úagate.exceptionsr	   Úagate.warnsr
   r   r-   r   r   ú<module>r3      s#   ðÝ 1Ý /ß >Ó >Ý *Ý -ô9ˆ[õ 9r   