ó
    °"³jú  ã                  óÞ   • S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
JrJr  \" SSS	9r \" S
SS	9r \" SSS	9r  " S S\\   5      r " S S\\   5      r\ " S S\\\4   5      5       rg)zÇCore node types for graph construction and execution.

This module defines the fundamental node types used to build execution graphs,
including start/end nodes and fork nodes for parallel execution.
é    )Úannotations)Ú	dataclass)ÚGeneric)ÚTypeVar)ÚForkIDÚJoinIDÚNodeIDÚStateTT)Úinfer_varianceÚOutputTÚInputTc                  ó(   • \ rS rSrSr\" S5      rSrg)Ú	StartNodeé   ziEntry point node for graph execution.

The StartNode represents the beginning of a graph execution flow.
Ú	__start__© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r	   ÚidÚ__static_attributes__r   ó    ÚP/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pydantic_graph/node.pyr   r      s   † ññ
 
�Ó	€BÚ.r   r   c                  ó4   • \ rS rSrSr\" S5      r SS jrSrg)ÚEndNodeé$   z¬Terminal node representing the completion of graph execution.

The EndNode marks the successful completion of a graph execution flow
and can collect the final output data.
Ú__end__c                ó   • [        S5      e)zûForce type variance for proper generic typing.

This method exists solely for type checking purposes and should never be called.

Args:
    inputs: Input data of type InputT.

Raises:
    RuntimeError: Always, as this method should never be executed.
úKThis method should never be called, it is just defined for typing purposes.©ÚRuntimeError©ÚselfÚinputss     r   Ú_force_varianceÚEndNode._force_variance.   s   € ô ÐhÓiÐir   r   N)r&   r   ÚreturnÚNone)	r   r   r   r   r   r	   r   r'   r   r   r   r   r   r   $   s   † ññ 
�	Ó	€BØ,÷jr   r   c                  óH   • \ rS rSr% SrS\S'    S\S'    S\S'    SS	 jrS
rg)ÚForké<   a  Fork node that creates parallel execution branches.

A Fork node splits the execution flow into multiple parallel branches,
enabling concurrent execution of downstream nodes. It can either map
a sequence across multiple branches or duplicate data to each branch.
r   r   ÚboolÚis_mapzJoinID | NoneÚdownstream_join_idc                ó   • [        S5      e)a3  Force type variance for proper generic typing.

This method exists solely for type checking purposes and should never be called.

Args:
    inputs: Input data to be forked.

Returns:
    Output data type (never actually returned).

Raises:
    RuntimeError: Always, as this method should never be executed.
r!   r"   r$   s     r   r'   ÚFork._force_varianceQ   s   € ô ÐhÓiÐir   r   N)r&   r   r)   r   )r   r   r   r   r   Ú__annotations__r'   r   r   r   r   r,   r,   <   s,   ‡ ñð 	ƒJØ/àƒLðð
 &Ó%Øn÷jr   r,   N)r   Ú
__future__r   Údataclassesr   Útypingr   Útyping_extensionsr   Úpydantic_graph.id_typesr   r   r	   r
   r   r   r   r   r,   r   r   r   Ú<module>r9      s•   ðñõ #å !Ý å %ç :Ñ :á	�¨$Ñ	/€Ø $á
�)¨DÑ
1€Ø )á	�¨$Ñ	/€Ø (ô/�˜Ñ ô /ôjˆg�f‰oô jð0 ô"jˆ7�6˜7�?Ñ#ó "jó ñ"jr   