
    Vh                     V    U d Z ddlZddlmZ ddlmZ  G d d      Z e       Zeed<   y)	a  
This module provides thread-safe code context management for TorchDynamo using weak references.

The CodeContextDict class maintains a mapping between Python code objects and their associated
context data, using weak references to automatically clean up entries when code objects are
garbage collected. This prevents memory leaks while allowing context data to be associated
with code objects throughout their lifecycle.

Key features:
- Thread-safe context storage and retrieval
- Automatic cleanup using weak references
- Safe context management for Python code objects
- Memory-leak prevention

Example usage:
    code_obj = compile('x = 1', '<string>', 'exec')

    # Store context
    context = code_context.get_context(code_obj)
    context['metadata'] = {'optimized': True}

    # Retrieve context
    if code_context.has_context(code_obj):
        ctx = code_context.get_context(code_obj)
        # Use context data...

    # Remove context
    ctx = code_context.pop_context(code_obj)
    N)Any   )ExactWeakKeyDictionaryc                       e Zd Zd	dZdej
                  defdZdej
                  dee	e
f   fdZdej
                  dee	e
f   fdZd	dZy)
CodeContextDictreturnNc                 "    t               | _        y N)r   code_contextselfs    J/home/dcms/DCMS/lib/python3.12/site-packages/torch/_dynamo/code_context.py__init__zCodeContextDict.__init__&   s    4J4L    codec                     || j                   v S r
   )r   )r   r   s     r   has_contextzCodeContextDict.has_context)   s    t((((r   c                 b    | j                   j                  |      }|i }|| j                   |<   |S r
   )r   getr   r   ctxs      r   get_contextzCodeContextDict.get_context,   s7    ##D);C&)Dd#
r   c                 p    | j                  |      }| j                  j                  t        |             |S r
   )r   r   
_remove_ididr   s      r   pop_contextzCodeContextDict.pop_context3   s/    t$$$RX.
r   c                 8    | j                   j                          y r
   )r   clearr   s    r   r   zCodeContextDict.clear8   s    !r   )r   N)__name__
__module____qualname__r   typesCodeTypeboolr   dictstrr   r   r   r    r   r   r   r   %   sb    M) )4 ) 4S>  4S> 
"r   r   r   )	__doc__r"   typingr   utilsr   r   r   __annotations__r'   r   r   <module>r,      s.   <   )" ". !0 1o 1r   