+
     GiJ  c                   s   ^ RI Ht ^ RIt ^ RIt ^ RIHt ^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIt^ RItR.t] P                  P!                  4       t ! R R]4      t ! R	 R] P                  P(                  P*                  4      tR# )
i    )exportsN)TunedException)commands)hotplug
Controllerc                   s8   a  ] tR t^t o R tR tR tR tRtV t	R# )
TimerStorec                sX    \        4       V n        \        P                  ! 4       V n        R # N)Zdict_timers	threadingZLock_timers_lockself   &</usr/lib/python3.14/site-packages/tuned/daemon/controller.py__init__ZTimerStore.__init__   s    $,nn&$    c                s    V P                   ;_uu_ 4        W P                  V&   R R R 4       R #   + '       g   i     R # ; ir   )r	   r   r   tokentimer   &&&r   store_timerZTimerStore.store_timer   s)    << s   .?	c                s    V P                   ;_uu_ 4         V P                  V,          pVP                  4        V P                  V R R R 4       R #     L; i  + '       g   i     R # ; ir   )r	   r   cancelr      && r   
drop_timerZTimerStore.drop_timer   sT    	LLE	LLNU	 
	 s   A0AAAA)	c                s    V P                   ;_uu_ 4        V P                  P                  4        F  pVP                  4        K  	  V P                  P	                  4        R R R 4       R #   + '       g   i     R # ; ir   )r	   r   Zvaluesr   clear)r   r      & r   
cancel_allZTimerStore.cancel_all"   sM    ##%u	LLN &<< s   AA++A<	)r   r	   N)
__name__
__module____qualname____firstlineno__r   r   r   r   __static_attributes____classdictcell__)__classdict__s   @r   r   r      s     '	 r   r   c                   s@  a a ] tR t^(t oRtV 3R ltR tR tR t]	P                  ! R4      R 4       tR t]	P                  ! R	R
4      R6R l4       t]	P                  ! R
R
4      R6R l4       t]	P                  ! RR4      R6R l4       tR7R lt]	P                  ! RR4      R6R l4       t]	P                  ! RR4      R6R l4       tR t]	P                  ! R
R4      R6R l4       t]	P                  ! RR4      R6R l4       t]	P                  ! RR
4      R6R l4       t]	P                  ! RR4      R6R l4       t]	P                  ! RR
4      R6R l4       t]	P                  ! RR4      R6R l4       t]	P                  ! RR4      R6R l4       t]	P                  ! RR4      R6R l4       t]	P                  ! RR4      R6R  l4       t]	P                  ! R
R!4      R6R" l4       t]	P                  ! RR
4      R6R# l4       t]	P                  ! RR4      R6R$ l4       t ]	P                  ! RR4      R6R% l4       t!]	P                  ! RR&4      R6R' l4       t"]	P                  ! R
R
4      R6R( l4       t#]	P                  ! R
R)4      R6R* l4       t$]	P                  ! R
R4      R6R+ l4       t%]	P                  ! R,R4      R6R- l4       t&]	P                  ! R
R.4      R6R/ l4       t']	P                  ! R
R04      R6R1 l4       t(]	P                  ! R2R4      R6R3 l4       t)]	P                  ! R
R4      R6R4 l4       t*R5t+Vt,V ;t-# )8r   z
Controller's purpose is to keep the program running, start/stop the tuning,
and export the controller interface (currently only over D-Bus).
c                s   < \         \        V `  4        Wn        W n        \
        P                  ! 4       V n        \        4       V n	        \        4       V n        R # r   )Zsuperr   r   _daemon_global_configr   ZEvent
_terminater   _cmdr   _timer_store)r   daemonZglobal_config	__class__s   &&&r   r   ZController.__init__.   s<    
D"$,%OO%$/j$) l$r   c                s   \         P                  R4       V P                  P                  4        V P                  P                  \        P                  \        P                  4      pV^ 8  EdL   \         P                  R4       \        P                  P                  \        P                  ! 4       4      pV P                  P                  R\        P                  4      p VP                  V4       Rp\$        P$                  ! 4       p \$        P$                  ! 4       WQ,           8  d=   V P                  P'                  4       '       g   V'       d   VP)                  ^R7      pK\  V P                  P'                  4       '       g4   V'       d   \         P                  R4       M\         P                  R4       ?V P/                  4       pV P                  P1                  \        P2                  \        P4                  4      pV'       g   V'       d   \6        P.                  ! 4        V'       dD   V P8                  P;                  V P                  ^4      '       g   \6        P<                  ! 4        KC  \         P                  R
4       V P?                  4        R	#   \          d    \         P#                  R4        ELi ; i  \*        \,        3 d(   p\         P#                  RT,          4        R	p?EL:R	p?ii ; i)z-
Controller main loop. The call is blocking.
zstarting controllerzwaiting for udev to settleudev_buffer_sizeT)timeoutzudev settle timed outzudev settledzudev settle failed, '%s'Nzterminating controllerzcannot set udev monitor receive buffer size, we are probably running inside container or with limited capabilites, TuneD functionality may be limited) loginfor$   r   r#   Zget_intconstsZCFG_STARTUP_UDEV_SETTLE_WAITZ CFG_DEF_STARTUP_UDEV_SETTLE_WAITpyudevZMonitorZfrom_netlinkZContextZget_sizeZCFG_DEF_UDEV_BUFFER_SIZEZset_receive_buffer_sizeZEnvironmentErrorwarningtimeis_setZpollZOSErrorZIOErrorstartget_bool
CFG_DAEMONCFG_DEF_DAEMONr    r%   ZwaitZperiod_checkstop)	r   Zwait_settleZmonitorr)   pZteresr'   s	   &        r   runZController.run6   s    (( !//##++F,O,O	**,+1_88()^^(()9:7))223EvGfGfgS##$45 1yy{1
0
))+
)$//2H2H2J2Jq		"Q??!!##		hh&'	hh~ 

#''(9(96;P;PQ&	
==?YY^^DOOQ//((#$))+;  SKK R SS G
 0KK*Q.//0sH   "J ?K K 3K K K %K  J>=J>K9K44K9c                s:    V P                   P                  4        R # r   )r$   setr
   r   r   	terminateZController.terminatec   s    //r   c                s
   V P                   P                  P                  4       '       d'   V P                   P                  P	                  4        R# R pV'       d   V P                   P                  P	                  4        V P                   P                  P                  4        V P                  4       '       g%   V P                   P                  P                  4        V P                   P                  P                  4       pK  R# )TN)r"   Z_sighup_processingr1   Z_sighup_pendingr;   r   reload)r   Z	do_reloadr   r   sighupZController.sighupf   s    	\\$$++--<<##%9	LL##'')LL  &&(;;==	\\$$**,,,335I 
r   Zsbsc                s    R # r    )r   profile_nameZresultZerrstrs   &&&&r   profile_changedZController.profile_changedr   s    r   c                sz    \         P                  P                  V4       V P                  P	                  V4       R # r   tunedlogslog_capture_finishr&   r   )r   r      &&r   _log_capture_abortZController._log_capture_abort{   s(    **&u%r   ZiiZsc                s   VR 8X  d   R # \         P                  P                  V4      pVf   R # V^ 8  dP   \        P                  ! VV P
                  V.R7      pV P                  P                  WE4       VP                  4        Vf   R # T# ) )Zargs)	rC   rD   log_capture_startr   ZTimerrG   r&   r   r2   )r   Z	log_levelr*   callerr   r   s   &&&&  r   rI   ZController.log_capture_start   sx    r\

**
&
&y
1%
]
q[??7	eW.5  .;;=}'%'r   c                s    VR 8X  d   R # \         P                  P                  V4      pV P                  P	                  V4       Vf   R # T# rH   rB   )r   r   rJ   r9   s   &&& r   rE   ZController.log_capture_finish   sC    r\


%%e,#u%{##r   rH   Zbc                sL   VR 8X  d   R# V P                   P                  \        P                  \        P                  4      '       dE   V P
                  P                  4       '       d   R# V P
                  P                  4       '       g   R# V P
                  P                  4       # )rH   FT)	r#   r3   r-   r4   r5   r"   
is_running
is_enabledr2   r   rJ   rF   r   r2   ZController.start   sp    r\
	!!&"3"3V5J5JKK
llLL##%%				r   c                s    V P                   P                  4       '       g   R pMV P                   P                  VR7      pV P                  P	                  4        V# )Tprofile_switch)r"   rL   r6   r&   r   )r   rP   r9   r   r   _stopZController._stop   sH    		 	 	"	"	3			N		;3 	*r   c                s8    VR 8X  d   R# V P                  RR7      # )rH   FrO   )rQ   rN   rF   r   r6   ZController.stop   s    r\
	U	++r   c                sL   VR 8X  d   R# V P                   P                  4       '       d   V P                  RR7      pV'       g   R#  V P                   P                  4        V P                  4       #   \         d(   p\
        P                  RT,          4        Rp?R# Rp?ii ; i)rH   FTrO   zFailed to reload TuneD: %sN)r"   rL   rQ   Zreload_profile_configr   r+   errorr2   )r   rJ   Zstop_okr8   s   &&  r   r=   ZController.reload   s    r\
	\\ZZZ.7
<<%%' 
 
 99)A-.
s   A1 1B#<BB#c                s   V P                   P                  4       pR pRpRp V'       d   V P                   P                  RR7       V P                   P                  W4       V'       d]   V'       d   \        P                  RV,          4       MV'       g   \        P                  R4       V P                   P                  4        WT3#   \        P
                  P                   d   pRp\        T4      pT'       dI   T P                   P                  P                  T8X  d$   \        P                  RT,          4       Rp Rp?L\        P                  RT,          4        Rp?ELRp?ii ; i  T'       d^   T'       d   \        P                  RT,          4       MT'       g   \        P                  R4       T P                   P                  4        i i ; i)	OKTFrO   z@Failed to reapply profile '%s'. Did it change on disk and break?zFailed to apply profile '%s'Nz>Applying previously applied (possibly out-dated) profile '%s'.z$Applying previously applied profile.)r"   rL   r6   Zset_profilerC   Z
exceptionsr   strprofilenamer+   rR   r/   r,   r2   )r   r@   manualZwas_runningZmsgZsuccessZreapplyr8   s   &&&     r   _switch_profileZController._switch_profile   sI   '')+#''LLt,<<L1 [[QT``aXX45LL
! 
			(	( =7	Q3dll**//<?IIPS__`GII,|;<<= [[QT``aXX45LL sB   ?C E+'AE&?E. E& E. &E++E. .G?$G$1Gz(bs)c                s~    VR 8X  d   R# V P                   P                  V4      '       g   R# V P                  VR4      # )rH   TFUnauthorized)FzInvalid profile_name)r%   is_valid_namerX   r   r@   rJ   r   r   switch_profileZController.switch_profile   s=    r\
!!		 	 	.	.
))			lD	11r   c                sX    VR 8X  d   R# V P                  4       pV P                  VR4      # )rH   FrY   )recommend_profilerX   )r   rJ   r@   r   r   auto_profileZController.auto_profile   s0    r\
!!''),			lE	22r   c                s    VR 8X  d   R # V P                   P                  e!   V P                   P                  P                  # R # rK   )r"   rU   rV   rN   rF   r   active_profileZController.active_profile   s5    r\
	\\%
,,


#
##
r   z(ss)c                s:   VR 8X  d   R# V P                   P                  pVf&    V P                  P                  4       w  r2Vf   VRJpV'       d   \        P                  M\        P                  pVR 3#   \         d   pRp\        T4      pYV3u Rp?# Rp?ii ; i)rH   unknownN)ra   rZ   )	r"   rW   r%   Zget_active_profiler   rT   r-   ZACTIVE_PROFILE_MANUALZACTIVE_PROFILE_AUTO)r   rJ   rW   rU   r8   ZmoderR   s   &&     r   profile_modeZController.profile_mode   s    r\
##<<&^ii224OG~T!V
 *0	%	%V5O5O$	r/  DFE;s   $A5 5B BBBc                sT    VR 8X  d   R # V P                   P                  ;'       g    R # rK   )r"   post_loaded_profilerN   rF   r   rc   ZController.post_loaded_profile  s$    r\
		)	)	/	/R/r   c                s
   VR 8X  d   R# V P                   P                  4       '       d   V P                   P                  4        V P                   P                  4       '       d    V P                   P	                  RRRRR7       R# )rH   FNT)Zsave_instantly)r"   rL   r6   rM   Zset_all_profilesrN   rF   r   disableZController.disable  se    r\
	\\<<	\\<<  tT ! !	r   c                sH    VR 8X  d   R# V P                   P                  4       # )rH   F)r"   rL   rN   rF   r   rL   ZController.is_running  s    r\
		 	 	""r   Zasc                p    VR 8X  d   . # V P                   P                  P                  P                  4       # rK   )r"   profile_loaderprofile_locatorZget_known_namesrN   rF   r   profilesZController.profiles  s-    r\
9		$	$	4	4	D	D	FFr   za(ss)c                re   rK   )r"   rf   rg   Zget_known_names_summaryrN   rF   r   	profiles2ZController.profiles2  s-    r\
9		$	$	4	4	L	L	NNr   z(bsss)c                s>   VR 8X  g"   V P                   P                  V4      '       g   R# Ve   VR 8X  d   V P                  4       p\        V P                  P
                  P                  P                  V\        P                  \        P                  .R .4      4      # )rH   )FrH   rH   rH   )r%   r[   r`   Ztupler"   rf   rg   Zget_profile_attrsr-   ZPROFILE_ATTR_SUMMARYZPROFILE_ATTR_DESCRIPTIONr\   r   r   profile_infoZController.profile_info%  s    r\00>>
\R/%%'<	t||**::LL\\b\w\wy  zY  zY  \Z  ]_  \`  a  
b  br   c                s\    VR 8X  d   R # V P                   P                  P                  4       # rK   )r"   Zprofile_recommenderZ	recommendrN   rF   r   r^   ZController.recommend_profile-  s%    r\
		)	)	3	3	55r   c                sL    VR 8X  d   R# V P                   P                  RR7      # )rH   FZignore_missingr"   verify_profilerN   rF   r   rm   ZController.verify_profile3  s$    r\
		$	$e	$	<<r   c                sL    VR 8X  d   R# V P                   P                  RR7      # )rH   FTrk   rl   rN   rF   r   verify_profile_ignore_missingZ(Controller.verify_profile_ignore_missing9  s$    r\
		$	$d	$	;;r   z	a{sa{ss}}c                sR   VR8X  d   / # / pV P                   P                  4        F}  pVP                  P                  R4      R,          P                  R^4      ^,          pVP	                  4       p/ W$&   VP                  4        F  w  rg\        V4      W$,          V&   K  	  K  	  V# )zoReturn dictionary with accesible plugins

Return:
dictionary -- {plugin_name: {parameter_name: default_value}}
rH   Z.Z_i)r"   get_all_pluginsr   ZsplitZ_get_config_optionsitemsrT   )r   rJ   pluginsZplugin_classplugin_nameZconf_optionskeyZvals   &&      r   ro   ZController.get_all_plugins?  s     r\
9'll224l((..s3B7==c1EaH;224<7%%'xs #CG (	 5 
.r   c                s    VR8X  g"   V P                   P                  V4      '       g   R# V P                  P                  \	        V4      4      # )z"Return docstring of plugin's classrH   )r%   r[   r"   get_plugin_documentationrT   r   rr   rJ   r   r   rt   Z#Controller.get_plugin_documentationQ  s<     r\00==
		.	.s;/?	@@r   za{ss}c                s    VR8X  g"   V P                   P                  V4      '       g   / # V P                  P                  \	        V4      4      # )zReturn dictionary with plugin's parameters and their hints

Parameters:
plugin_name -- name of plugin

Return:
dictionary -- {parameter_name: hint}
rH   )r%   r[   r"   get_plugin_hintsrT   ru   r   r   rv   ZController.get_plugin_hintsX  s>     r\00==
9		&	&s;'7	88r   c                s@   VR8X  g"   V P                   P                  V4      '       g   R# V P                  P                  '       dX   V P                  P                  P                  '       d2   V P                  P                  P                  P                  V4       R# R# )zAllows to dynamically add sockets to send signals to

Parameters:
path -- path to socket to register for sending signals

Return:
bool -- True on success
rH   FT)r%   r[   r"   Z_applicationZ_unix_socket_exporterZregister_signal_path)r   ZpathrJ   r   r   register_socket_signal_pathZ&Controller.register_socket_signal_pathf  sk     r\0066
	\\4<<#<#<#R#R#R<<22GGM
	r   Zssc                s   VR 8X  d   R# V P                   P                  V4      '       g   R# V P                   P                  V4      '       g   R# RpV P                  P                  P                   F>  pVP
                  V8X  g   K  \        P                  RVP
                  ,          4       Rp M	  V'       g#   RV,          p\        P                  V4       RV3# \        XP                  \        P                  4      '       g7   RVP                  P
                  ,          p\        P                  V4       RV3# \        V P                   P                  V4      4      p\        P                  RVP
                  : R\        V4      : R24       V P                  P                  P                   EFM  pVP                   V,          p	\#        V	4      '       g   K*  Wy,          p\        P%                  R	\        V	4      : R
VP
                  : RVP
                  : R24       VP                  P
                  VP                  P
                  8w  dx   RVP
                  : RVP                  P
                  : R\        V	4      : RVP
                  : RVP                  P
                  : R2p\        P                  V4       RV3u # VP                  P'                  W4       VP                  P)                  WY4       EKP  	  \#        V4      '       d,   R\        V4      ,          p\        P%                  V4       RV3# R# )rH   FzFound instance '%s'.TInstance '%s' not found>Plugin '%s' does not support hotplugging or dynamic instances.z
Instance 'z' trying to acquire devices ''.Moving devices '' from instance '' to instance 'zTarget instance 'z' is of type 'z', but devices 'z%' are currently handled by instance 'z' which is of type 'z2Ignoring devices not handled by any instance '%s'.rY   )FzInvalid devicesFInvalid instance_nameTrS   )r%   r[   r"   _unit_manager	instancesrV   r+   ZdebugrR   
isinstancepluginr   Pluginr;   Zdevstr2devsrT   processed_deviceslenr,   _remove_devices_nocheck_add_devices_nocheck)
r   devicesinstance_namerJ   ZfoundZinstance_targetretsZdevsinstancedevs_movings
   &&&&      r   instance_acquire_devicesZ#Controller.instance_acquire_devicesz  s[   r\
!!		 	 	)	)
$$		 	 	/	/
**
%33==om+II$';';;<E		 >
 

#m
3499T?$-	O**GNN	;	;
J_McMcMhMh
h499T?$-	TYY""7+	,$))?S?SUXY]U^_`,,,,66h++d2;	+DHH3{K[]]O((* + 6 6 ; ;;0?0D0D!!3{#3X]]HOODXDXZT 	YYt_DMOO++HB//M 7 
$ii
>T
J488D>$-	r   z	(bsa(ss))c                s  a VR8X  d   RR. 3# V P                   P                  S4      '       g   RR. 3# SR8w  dG   SV P                  4       P                  4       9  d$   RS,          p\        P                  V4       RV. 3# \        R V P                  P                  P                  4      pSR8w  d   \        V3R lV4      pRR	\        \        R
 V4      4      3# )a   Return a list of active instances of a plugin or all active instances

Parameters:
plugin_name -- name of the plugin or an empty string

Return:
bool -- True on success
string -- error message or "OK"
list of string pairs -- [(instance_name, plugin_name)]
rH   FrZ   Invalid plugin_namezPlugin '%s' does not existc                 s    V P                   # r   )Zactiver   r   r   <lambda>*Controller.get_instances.<locals>.<lambda>  s    hoor   c                 s6   < V P                   P                  S8H  # r   )r   rV   )r   rr   s   &r   r   r     s    x';';{'Jr   TrS   c                 sF    V P                   V P                  P                   3# r   )rV   r   r   r   r   r   r     s    @T@T0Ur   )r%   r[   ro   keysr+   rR   Zfilterr"   r   r   listZmap)r   rr   rJ   r   r   s   &f&  r   get_instancesZController.get_instances  s     r\."
%%		 	 	-	-'
,,B;d.B.B.D.I.I.KK
&
4499T?$
5t||7Q7Q7[7[\)BJIV9
d3UW`ab	ccr   z(bsas)c                sb   VR8X  d   RR. 3# V P                   P                  V4      '       g   RR. 3# V P                  P                  P                   F7  pVP
                  V8X  g   K  RR\        \        VP                  4      4      3u # 	  RV,          p\        P                  V4       RV. 3# )zReturn a list of devices assigned to an instance

Parameters:
instance_name -- name of the instance

Return:
bool -- True on success
string -- error message or "OK"
list of strings -- device names
rH   FrZ   r   TrS   rx   )r%   r[   r"   r   r   rV   Zsortedr   r   r+   rR   )r   r   rJ   r   r   s   &&&  r   instance_get_devicesZController.instance_get_devices  s     r\."
%%		 	 	/	/)2
..,,,,66hmm}$$tH$>$>?@AA 7 
#]	2$))D/
r	r   zssa{ss}c           
     s   VR8X  d   R# V P                   P                  V4      '       g   R# V P                   P                  V4      '       g   R# VP                  4        FK  w  rVV P                   P                  V4      '       d$   V P                   P                  V4      '       d   KI  Ru # 	  V P                  P                  P
                   Uu/ uF  qwP                  VbK  	  ppWP                  4       9   g#   RV,          p	\        P                  V	4       RV	3# W,          p
\        V
\        P                  4      '       g-   RV
P                  ,          p	\        P                  V	4       RV	3# VP                  RR4      pVP                  RR4      pVP                  RR4      pVP                  R	R4      p\        VP                  R
V P                  P                  P                  4      4      p V
P!                  W/WWV4      pV
P#                  V4       V P                  P                  P$                  P'                  V4       \        P-                  RT: RT: R24       T
P/                  T4       T
P1                  T4       T P                  P                  P$                   F  pTT8X  g-   TP2                  T
8w  g   TP4                  TP4                  8  d   K8  T
P7                  TTP8                  4      p\;        T4      '       g   Kg  \        P-                  R\+        T4      : RTP                  : RTP                  : R24       T
P=                  TT4       T
P?                  TT4       K  	  R# u upi   \(         d7   pRT: R\+        T4      : 2p	\        P                  T	4       RT	3u Rp?# Rp?ii ; i)zDynamically create a plugin instance

Parameters:
plugin_name -- name of the plugin
instance_name -- name of the new instance
dict of string-string -- options for the new instance

Return:
bool -- True on success
string -- error message or "OK"
rH   FzPlugin '%s' not foundry   r   Ndevices_udev_regex
script_prescript_postpriorityzError creating instance '': zCreated dynamic instance 'z' of plugin 'Z'r{   r|   r}   rz   rY   )Fr   r~   )FzInvalid optionsr   ) r%   r[   rp   r"   r   rq   rV   r   r+   rR   r   r   r   ZpopZintZ_def_instance_priorityZcreate_instanceZinitialize_instancer   Zappend	ExceptionrT   r,   Zassign_free_devicesZinstance_apply_tuningr   r   Z_get_matching_devicesr   r   r   r   )r   rr   r   ZoptionsrJ   rs   Zvaluer7   rq   r   r   r   r   r   r   r   r   r8   Zother_instancer   s   &&&&&               r   instance_createZController.instance_create  s    r\
!!		 	 	-	-
((		 	 	/	/
**mmols
))
!
!#
&
&dii.E.Ee.L.L%% & !% : : B BC B1VVQY B'C		&
!K
/499T?$-&	FGNN	+	+
JV[[
X499T?$-KK	4('{{#7>{{<.*M40+Z)C)C)Z)Z[\($$]g[et{|8	h'<<''..x8
 ((]KXYX&x( 22<<n!V#///--h8X8XY;	+HH3{K[(--) *
"">;?
+6 = 
Q D& 
 0=s1v
F499T?$-s%   M84AM= =N>+N93N>9N>c                s    VR8X  d   R	# V P                   P                  V4      '       g   R
#  V P                  P                  P                   Uu. uF  q3P
                  V8X  g   K  VNK  	  up^ ,          pTP                  p\        T\        P                  4      '       g-   RTP
                  ,          p\        P                  T4       RT3# TP                  P                  4       p TP                  YG4       T P                  P                  P                  P!                  T4       TP#                  T4       TP%                  T4       \        P+                  RT,          4       T F  p	TP-                  T	4       K  	  R# u upi   \         d&    RT,          p\        P                  T4       RT3u # i ; i  \&         d7   pRT: R\)        T4      : 2p\        P                  T4       RT3u Rp?# Rp?ii ; i)zDestroy a dynamically created plugin instance

Parameters:
instance_name -- name of the new instance

Return:
bool -- True on success
string -- error message or "OK"
rH   Frx   ry   zError deleting instance 'r   NzDeleted instance '%s'rY   r~   r   )r%   r[   r"   r   r   rV   Z
IndexErrorr+   rR   r   r   r   r   r   Zcopyr   ZremoveZinstance_unapply_tuningZdestroy_instancer   rT   r,   Z_add_device)
r   r   rJ   Zir   r   r   r   r8   Zdevices
   &&&       r   instance_destroyZController.instance_destroy  s    r\
!!		 	 	/	/
**,,44>>Z>Q&&MBYqq>Z[\]8
 ??&	FGNN	+	+
JV[[
X499T?$-&&++-'	!!(4<<''..x8	!!(+	8$
 (("]23f	f  
1 [	 
#m
3499T?$- 
 0=s1v
F499T?$-sH   "F	 F'F-
F	 *A"F< F	 	-F98F9<G=+G82G=8G=)r%   r"   r#   r$   r&   r   )F).r   r   r   r   Z__doc__r   r:   r<   r>   r    ZsignalrA   rG   ZexportrI   rE   r2   rQ   r6   r=   rX   r]   r_   r`   rb   rc   rd   rL   rh   ri   rj   r^   rm   rn   ro   rt   rv   rw   r   r   r   r   r   r   r    Z__classcell__)r(   r!   s   @@r   r   r   (   s    
#+Z
6 
.. & 
..s( ( 
..c$ $ 
..S  
..S, ,
 
..S 6 
..f2 2 
..V3 3 
..S  
..V " 
..S0 0
 
..S  
..S# #
 
..TG G
 
..WO O
 
..hb  b 
..S6 6
 
..S= =
 
..S< <
 
..[! "" 
..SA A 
..W9 9 
..c & 
..v) )V 
..k"d #d0 
..h  , 
..F#= $=~ 
..f' ' 'r   )rC   r    Z
tuned.logsZtuned.exceptionsr   r   Ztuned.constsr-   Ztuned.utils.commandsr   Ztuned.pluginsr   r.   r0   Z__all__rD   Zgetr+   Zobjectr   Z
interfacesZExportableInterfacer   r?   r   r   <module>r      sd       +   ) !  .jjnn 0V))== Vr   