
    &`i]!                         d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 d dl
Z
d dlmZmZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ ee G d
 de                                  Ze G d de                      ZdS )    N)defaultdict)	dataclass)DictListOptionalSet)AcquiredResourcesRemoteRayEntityResourceRequest)ResourceManager)DeveloperAPI)PlacementGroupremove_placement_group) PlacementGroupSchedulingStrategyc                   B    e Zd ZU eed<   dedeeef         de	defdZ
dS )PlacementGroupAcquiredResourcesplacement_groupentitybundlebundle_indexreturnc                    |                                 }|                    dd          }|                    dd          }|                    dd          }|                    t          | j        |d          ||||          S )	NCPUr   GPUmemoryg        T)r   placement_group_bundle_index#placement_group_capture_child_tasks)scheduling_strategynum_cpusnum_gpusr   	resources)copypopoptionsr   r   )selfr   r   r   r   r    r   s          /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/air/execution/resources/placement_group.py_annotate_remote_entityz7PlacementGroupAcquiredResources._annotate_remote_entity   s     ::eQ''::eQ''Hc**~~ @ $ 4-948! ! !
   

 

 
	
    N)__name__
__module____qualname__r   __annotations__r
   r   strfloatintr'    r(   r&   r   r      sa          $###
%
/3CJ/?
OR
	
 
 
 
 
 
r(   r   c                       e Zd ZU dZeZeed<   ddefdZ	de
ej                 fdZd Zd	 Zd
efdZd
efdZd
edefdZd
edee         fdZdefdZd Zd ZdS )PlacementGroupResourceManagera  Resource manager using placement groups as the resource backend.

    This manager will use placement groups to fulfill resource requests. Requesting
    a resource will schedule the placement group. Acquiring a resource will
    return a ``PlacementGroupAcquiredResources`` that can be used to schedule
    Ray tasks and actors on the placement group. Freeing an acquired resource
    will destroy the associated placement group.

    Ray core does not emit events when resources are available. Instead, the
    scheduling state has to be periodically updated.

    Per default, placement group scheduling state is refreshed every time when
    resource state is inquired, but not more often than once every ``update_interval_s``
    seconds. Alternatively, staging futures can be retrieved (and awaited) with
    ``get_resource_futures()`` and state update can be force with ``update_state()``.

    Args:
        update_interval_s: Minimum interval in seconds between updating scheduling
            state of placement groups.

    _resource_cls皙?update_interval_sc                 >   i | _         t          t                    | _        t          t                    | _        t                      | _        t                      | _        t                      | _        || _	        t          j                    | j	        z
  dz
  | _        d S )N   )_pg_to_requestr   set_request_to_staged_pgs_request_to_ready_pgsdict_staging_future_to_pg_pg_to_staging_future_acquired_pgsr5   time	monotonic_last_update)r%   r5   s     r&   __init__z&PlacementGroupResourceManager.__init__F   s    " FH
  	#  	" KO&&"JN&&" 36%% "3 N,,t/EEIr(   r   c                 N    t          | j                                                  S N)listr=   keysr%   s    r&   get_resource_futuresz2PlacementGroupResourceManager.get_resource_futuresp   s    D.3355666r(   c                 ~    t          j                    }|| j        | j        z   k    r|                                  d S d S rE   )r@   rA   rB   r5   update_state)r%   nows     r&   _maybe_update_statez1PlacementGroupResourceManager._maybe_update_states   sE    n"T%;;;; <;r(   c                    t          j        t          | j                                                  t          | j                  d          \  }}|D ]}| j                            |          }| j                            |           | j        |         }| j	        |         
                    |           | j        |                             |           t          j                    | _        d S )Nr   )num_returnstimeout)raywaitrF   r=   rG   lenr#   r>   r8   r:   remover;   addr@   rA   rB   )r%   ready	not_readyfuturepgrequests         r&   rK   z*PlacementGroupResourceManager.update_statex   s    8+002233D677
 
 
y
  	8 	8F+//77B&**2...)"-G'077;;;&w/33B7777 N,,r(   resource_requestc                     |                                 }|| j        |<   | j        |                             |           |                                }|| j        |<   || j        |<   d S rE   )to_placement_groupr8   r:   rU   rV   r=   r>   r%   r[   rY   rX   s       r&   request_resourcesz/PlacementGroupResourceManager.request_resources   sj    0022"2B#$4599"===-/"6*)/"2&&&r(   c                    | j         |         rh| j         |                                         }| j                            |          }| j                            |           t	          j        |           n3| j        |                                         }|st          d|           | j                            |           t          j	        
                    |           d S )NzCannot cancel resource request: No placement group was staged or is ready. Make sure to not cancel more resource requests than you've created. Request: )r:   r#   r>   r=   rQ   cancelr;   RuntimeErrorr8   utilr   r^   s       r&   cancel_resource_requestz5PlacementGroupResourceManager.cancel_resource_request   s    &'78 	,-=>BBDDB /33B77F&**6222 Jv +,<=AACCB "Q>NQ Q   	###''+++++r(   c                     t          t          | j        |                             s|                                  t          t          | j        |                             S rE   )boolrS   r;   rM   )r%   r[   s     r&   has_resources_readyz1PlacementGroupResourceManager.has_resources_ready   sT    C23CDEEFF 	'$$&&&C23CDEEFFFr(   c                     |                      |          sd S | j        |                                         }| j                            |           |                     ||          S )N)r   r[   )rg   r;   r#   r?   rU   r3   )r%   r[   rY   s      r&   acquire_resourcesz/PlacementGroupResourceManager.acquire_resources   sk     ''(899 	4'(89==??r"""!!"GW!XXXr(   acquired_resourcec                     |j         }| j                            |           t          |           | j                            |           d S rE   )r   r?   rT   r   r8   r#   )r%   rj   rY   s      r&   free_resourcesz,PlacementGroupResourceManager.free_resources   sL    .!!"%%%r"""#####r(   c                 X   t          j                    sd S | j                                        D ]}|D ]}t	          |           | j                                        D ]}|D ]}t	          |           | j        D ]}t	          |           |                     | j                   d S )N)r5   )	rQ   is_initializedr:   valuesr   r;   r?   rC   r5   )r%   
staged_pgs	staged_pg	ready_pgsready_pgacquired_pgs         r&   clearz#PlacementGroupResourceManager.clear   s    !## 	F5<<>> 	2 	2J' 2 2	&y11112 3::<< 	1 	1I% 1 1&x00001  - 	0 	0K";//// 	(>?????r(   c                 .    |                                   d S rE   )ru   rH   s    r&   __del__z%PlacementGroupResourceManager.__del__   s    

r(   N)r4   )r)   r*   r+   __doc__r   r3   r	   r,   r.   rC   r   rQ   	ObjectRefrI   rM   rK   r   r_   rd   rf   rg   r   ri   rl   ru   rw   r0   r(   r&   r2   r2   ,   sf         , (GM$FFF(J (J% (J (J (J (JT7d3=&9 7 7 7 7     
- - -"0/ 0 0 0 0, , , , ,0GO G G G G G	Y /	Y	1	2	Y 	Y 	Y 	Y$0O $ $ $ $@ @ @$    r(   r2   )r@   collectionsr   dataclassesr   typingr   r   r   r   rQ   #ray.air.execution.resources.requestr	   r
   r   ,ray.air.execution.resources.resource_managerr   ray.util.annotationsr   ray.util.placement_groupr   r   ray.util.scheduling_strategiesr   r   r2   r0   r(   r&   <module>r      sm    # # # # # # ! ! ! ! ! ! , , , , , , , , , , , , 



         
 I H H H H H - - - - - - K K K K K K K K K K K K K K 

 
 
 
 
&7 
 
  
0 i i i i iO i i i i ir(   