
    M/Ph                        d dl mZmZmZmZ d dlZd dlmZ  ed          ZdedefdZ	 e
            fded	e
defd
Z e
            fded	e
defdZ ej        d           G d d                      Z ej        d           G d de                      Z ej        d           G d de                      ZdS )    )AnyCallableOptionalTypeVarN)multimethodTfuncreturnc                 4    t          | d          r| j        ndS )N__name__lambda)hasattrr   )r	   s    [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/visions/relations/relations.py	func_reprr   	   s    #D*55C4==8C    seriesstatec                     | S N r   r   s     r   identity_transformr      s    Mr   c                     t           r   )NotImplementedErrorr   s     r   default_relationr      s    
r   T)frozenc                   L   e Zd ZU dZ ej                    Z ej                    Zee	d<    ej        e
e          Zeeegef         e	d<    ej        ee
e          Zeeegef         e	d<    ej        d          Zdd	ed
ee         defdZdd	ed
ee         defdZd ZdS )TypeRelationa  Relationship encoder between implementations of :class:`visions.types.type.VisionsBaseType`

    Defines a one to one relationship between two :class:`visions.types.type.VisionsBaseType` implementations,
    A and B, with respect to an underlying data series. In order to define a relationship we need
    two methods:

        - **is_relationship**, determines whether a series of type B can be alternatively represented as type A.
        - **transform**, provides a mechanism to convert the series from B -> A.

    For example, the series `pd.Series([1.0, 2.0, 3.0])` is encoded as a sequence of
    floats but in reality they are all integers.

    Examples:
        >>> from visions.types import Integer, Float
        >>> x = pd.Series([1.0, 2.0, 3.0])
        >>> state = dict()
        >>> relation = TypeRelation(Integer, Float)
        >>> relation.is_relation(x, state)
        True

        >>> relation.transform(x, state)
        pd.Series([1, 2, 3])
    inferential)	converterreprtransformer)defaultr    r!   relationshipNr#   r   r   r
   c                 6    |i }|                      ||          S r   )r$   selfr   r   s      r   is_relationzTypeRelation.is_relation9   s"    =E  ///r   c                 6    |i }|                      ||          S r   )r"   r'   s      r   	transformzTypeRelation.transform>   s"    =E...r   c                 $    | j          d| j         S )Nz->)related_typetype)r(   s    r   __str__zTypeRelation.__str__C   s    #22ty222r   r   )r   
__module____qualname____doc__attribr-   r   bool__annotations__r   r   r"   r   r   dictr   r$   r   r.   r   r)   r+   r/   r   r   r   r   r      sK         0 4799L		K!!!*1$'I+ + +K1d)Q,'    18 Ki1 1 1L(C;,-    474   D0 0# 0htn 0 0 0 0 0
/ / /(4. /A / / / /
3 3 3 3 3r   r   c                       e Zd ZU  ej        ed          Zeee	ge
f         ed<    ej        ee          Zeee	gef         ed<    ej        d          Ze
ed<   dS )	IdentityRelationNr!   r#   r$   )r#   r!   r"   Fr%   r   )r   r0   r1   r3   r4   r   r$   r   r   r7   r5   r6   r   r"   r   r   r   r   r9   r9   G   s         .5dg9d.S.S.SL(At9d?+SSS*1$'"+ + +K1d)Q,'     ...K.....r   r9   c                       e Zd ZU  ej        ee          Zee	e
gef         ed<    ej        ee          Zee	e
ge	f         ed<    ej        d          Zeed<   dS )InferenceRelationr:   r$   r"   Tr%   r   N)r   r0   r1   r3   r4   r   r   r$   r   r   r7   r5   r6   r   r"   r   r   r   r   r<   r<   P   s         .5dg 0/ / /L(At9d?+    +2$' 2+ + +K1d)Q,'     ---K-----r   r<   )typingr   r   r   r   r3   r   r   strr   r7   r   r5   r   sr   r9   r<   r   r   r   <module>r@      s   3 3 3 3 3 3 3 3 3 3 3 3  # # # # # #GCLLDH D D D D D 37$&&  s 4 S     15  S  4     t.3 .3 .3 .3 .3 .3 .3 .3b t/ / / / /| / / / t. . . . . . . . . .r   