
    rC
f_                         d Z ddlmZ ddlmZ 	 ddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlmZ dZdZdZ G d	 d
e      Zy# e$ r ddlZY ?w xY w)z" PCP Python Utils Config Routines     )deepcopy)OrderedDictN)pmapixxx   Fc                   <   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd1dZd Zd Zd Zd Zd2dZd Zd Zd Zdg fdZd Zd Zd Zd Z G d  d!e       Z!d" Z"d# Z#e$d$fd%Z%d& Z&d' Z'e$d$fd(Z(d) Z)d* Z*d+ Z+d, Z,d- Z-d. Z.d1d/Z/d1d0Z0y)3pmConfigz Config reader and validator c                    d| _         d| _        || _        g | _        g | _        g | _        g | _        g | _        t               | _	        d| _
        d | _        g | _        i | _        g | _        t               | _        g | _        y )N)z-?z--helpz-Vz	--version)label	instancesunittypewidth	precisionlimitformular   )arghelp
metricspecutilpmidsdescsinststextslabelsr   
res_labels_round_init_ts_pred_indom	_re_cache_tmp_conf_metrics_prev_insts)selfr   s     ./usr/lib/python3/dist-packages/pcp/pmconfig.py__init__zpmConfig.__init__.   s    :E 	 



%-    	 )]     c                       fd}dD ])  }	 t        t        |      }t        j                  ||       + y# t        $ r Y 8w xY w)z Set default signal handler c                 d    j                   j                          t        j                  d       y)z Default signal handler r   N)r   finalizesysexit)_signum_framer#   s     r$   handlerz,pmConfig.set_signal_handler.<locals>.handlerV   s    II HHQKr&   )SIGHUPSIGTERMN)getattrsignal	Exception)r#   r.   sigsignums   `   r$   set_signal_handlerzpmConfig.set_signal_handlerT   sL    	 ' 	C -fg.	  s   &6	AAc                 $    | j                  |      S )z Set default config file )set_config_path)r#   default_configs     r$   set_config_filezpmConfig.set_config_fileb   s    ##N33r&   c                 (   d}t         j                  j                  d      }t        j                  j                  d      }|D ]  }|j                  d|      }|j                  d|      }t        j                  |t         j                        sLt         j                  j                  |      s t         j                  j                  |      s|} n t        t        j                  dd       }|D ]  }|| j                  v r y|dv s|j                  d      s*	 |dv rt!        |      }n|j                  dd	d      }t        j                  |t         j                        r>t         j                  j                  |      s|t         j                  j                  |      s]t         j                  j#                  |      sd
}n)t        j                  |t         j                        sd}nd}t%        d|d|d       |S # t&        $ r Y  |S w xY w)z Set default config path N~PCP_SYSCONF_DIRz$HOMEz$PCP_SYSCONF_DIRr   )-cz--configr>    zNo such file or directoryzPermission deniedzNot a regular filez#Failed to read configuration from '':
.)ospath
expanduserr   	pmContextpmGetConfigreplaceaccessR_OKisfileisdiriterr*   argvr   
startswithnextexistsIOErrorStopIteration)	r#   r9   configusrdirsysdirconfargsargerrs	            r$   r8   zpmConfig.set_config_pathf   s   ##C(,,->?" 	D<<0D<< 2F;Dyyrww't$d(;	 CHHQRL! 	Cdll"((CNN4,@00!%d!$T2q!999VRWW5GGNN62bggmmF6K!ww~~f5"=C!#6277!;"5C"6C%X^`c&dee#	*  % s   C"H	HHc                    g }| j                   j                  r-t        j                  j	                  | j                   j                        r'|j                  | j                   j                         |S t        t        j                  | j                   j                              D ]  }t        j                  j                  | j                   j                  |      }|j                  d      sIt        j                  |t        j                        snt        j                  j	                  |      s|j                  |        |S )z' Helper to get individual config files z.conf)r   rS   rB   rC   rJ   appendsortedlistdirjoinendswithrH   rI   )r#   
conf_filesffns       r$   _get_conf_fileszpmConfig._get_conf_files   s    
99ww~~dii../!!$))"2"23 	  

499+;+; <= .Adii&6&6:B{{7+		"bgg0F277>>Z\K]"))"-. r&   c                    t        |      }|dk(  r9|j                  d      r|j                  d      r|dd }|| j                  _        y|dv rd}|dv rd}|d	k(  r|| j                  _        y|d
k(  rH|j                  d      dk7  r|| j                  _        y|j                  dd      | j                  _        y|dk(  rY| j                  j                  j                  |       | j                  j                  j                         | j                  _        y|dk(  rY| j                  j                  j                  |       | j                  j                  j                         | j                  _        y|dk(  r)|dk(  rd| j                  _        yd| j                  _        y|dk(  r)|dk(  rd| j                  _        yd| j                  _        y|dk(  r!|j%                  d      | j                  _        y	 t)        | j                  |t+        |             y# t,        $ rA |j                  d      r|j                  d      r|dd }t)        | j                  ||       Y yw xY w)z Set options read from file colxrow"r   N)trueTrueyyesYes)falseFalsennoNor   	speclocalderived;,samplesintervalr   rawtype_preferr   )strrN   r_   r   re   rr   findrs   rG   optspmSetOptionSamplespmGetOptionSamplesrv   pmSetOptionIntervalpmGetOptionIntervalrw   r   ry   splitr   setattrint
ValueError)r#   namevalues      r$   set_attrzpmConfig.set_attr   s   E
9 $)<a %DII77E77E;"'DIIYzz#"$$)		!$)MM#s$;		!YIINN--e4 $		 A A CDIIZIINN..u5!%!C!C!EDIIV^~!"		!"		]"~()		%()		%[ "'++c"2DII0		4U4 0##C(U^^C-@!!BKE		4/0s   9 H AI$#I$c                 p   |j                  |      sy|j                  |      D ]  }|| j                  j                  v r$|j	                  ||      st        d|d|d      || j                  j                  v r#| j                  ||j	                  ||             z|dk(  st        d|d|d       y)z0 Read options from a configuration file section NzNo value set for option  in []optionszUnknown option )has_sectionr   r   keysgetr   r   )r#   rS   sectionopts       r$   read_section_optionszpmConfig.read_section_options   s    !!'*>>'* 	OCdiinn$VZZ-E g!VWWdiinn$c6::gs#;<I% W!MNN	Or&   c                    t         j                  d   dk\  r+t         j                  d   dk\  rt        j                         }nt        j                         }t        |_        | j                         D ]  }	 |j                  |       d}| j                  ||       t        t         j                  dd       D ]A  }|j                  d      s|dd |j                         v s+|dd }| j                  ||       C  y# t        j                  $ r}t        |d      rt	        |j                        n|j                   d   d   }t         j"                  j%                  d	|d
|dt	        |j&                        d       t        j(                  d       Y d}~)d}~wt*        $ rF}t         j"                  j%                  d	|d|d       t        j(                  d       Y d}~vd}~ww xY w)z& Read options from configuration file r      r      r   N:lineno#Failed to read configuration file '', line :

r@   .
)r*   version_infoConfigParserSafeConfigParserrz   optionxformrc   readr   rL   rM   rN   sectionsErrorhasattrr   errorsstderrwritemessager+   r   )r#   rS   rV   r   rX   errorr   s          r$   read_optionszpmConfig.read_options   s    A!#(8(8(;q(@!..0F!224F ((* 	DD!#))&':- CC~~c*s12w&//:K/K"%ab'11&'BC	  %% .5eX.FU\\*ELLYZO\]L^

  $(&#emm2D"F G 

  UY[`!abs2   5AC=C=!C==G,BFG,&;G''G,c                 .   t         j                  j                  t         j                  j                         t         j                  j	                  t
        j                        rt        j                         t         j                  j                         S )z Read command line options )	r   c_apipmSetOptionFlagsPM_OPTFLAG_DONEpmGetOptionsFromListr*   rM   
pmUsageErrpmGetOperandsr#   s    r$   read_cmd_linezpmConfig.read_cmd_line   sV    $$U[[%@%@A;;++CHH5""$${{((**r&   c                    g }t        j                  |g      }t        |      d   D ]a  }|j                  d      s|j                  d      r|dd }|j	                  d      s|j	                  d      r|dd }|j                  |       c |S )z& Parse user-supplied instances string r   rf   'r   Nrg   )csvreaderlistrN   r_   r[   )r#   r   r   r   insts        r$   parse_instanceszpmConfig.parse_instances   s    YK(LO 	Ds#ts';ABx}}S!T]]3%7CRyLL	 r&   c                 .   g }|j                  d      dk  r|dz   |fS d}|j                  d      d   }|r t        |      dkD  r|d   dk(  s|d   dk(  rd}|j                  d      s|j                  d      r}|j                  d      d   j                  d      d   }|d   }|d|j	                  |      dz    }|r| j                  |dd	       }n| j                  |      }|j                  |d
      }n|r|g}|j                  d      dk  r|dz  }||fS )z" Parse instances from metric spec ru   r   z,,r   r   rf   r   Nrg   r?   )countr   len	partitionrfindr   rG   )r#   specr   quotedsinststrqs          r$   parse_metric_spec_instancesz$pmConfig.parse_metric_spec_instances  s'   ::c?Q$;%% JJsOAQ!1!F::c?djjonnS)!,66s;A>G
A1w}}Q/12G,,WQr];,,W5<<,D::c?QDLDU{r&   c                     |g||<   t        dt        | j                              D ]B  }t        ||         |k  s|dk(  r||   j                  g        /||   j                  d       D y)z Parse new verbose metric r   r   N)ranger   r   r[   )r#   metricskeyr   indexs        r$   parse_new_verbose_metricz!pmConfig.parse_new_verbose_metric  sh    w1c$//23 	.E73< E)A:CL''+CL''-	.r&   c                    |j                  d      r|j                  d      r|dd }|dk(  rf| j                  j                  !d||   d   z   dz   |z   | j                  _        y| j                  xj                  d||   d   z   dz   |z   z  c_        y| j                  j                  |      dk(  r&|g||   | j                  j                  |      dz   <   y|||   | j                  j                  |      dz   <   y)	z& Parse additional verbose metric info rf   r   rg   r   Nrt   r   =)rN   r_   r   rs   r   r   )r#   r   r   r   r   s        r$   parse_verbose_metric_infoz"pmConfig.parse_verbose_metric_info(  s    C U^^C%8!BKE9yy  ($''#,q/$9C$?%$G		!		!!S73<?%:S%@5%HH!$$T*a/?DgT__2248:;>CT__2248:;r&   c                    d}d|v s$d|v r"|j                  d      d   | j                  vrd}d|v rd|v r|j                  d      d   dk(  rd}|r7| j                  |dz   |z         \  }}|j                  d      ||<   |||   d<   y	d|vs |j                  d      d   | j                  vr| j	                  |||       y	|j                  d      \  }}||vrt        d|z        | j                  ||||       y	)
z Parse metric information Fru   rA   r   Tr   r   zUndeclared metric key %sN)rsplitr   r   r   r   r   r   )r#   r   r   r   compactr   r   s          r$   parse_metric_infozpmConfig.parse_metric_info7  s
    %<C3J3::c?1+=T__+TG%<SCZCJJsOA,>),KG::39u;LMKD%::c?GCL#GCLO #~C!34??!J--gsEB  JJsO	Tg%$%?#%EFF..wT5Ir&   c                 X     j                   j                  j                         s5|s3t        j                  j                  d       t        j                         s'|r% j                   j                  j                  d       fd}t               }t               } |       }t               }t        j                  d   dk\  r?t        j                  d   dk\  r)t        j                         }t        j                         }n(t        j                         }t        j                         }t        |_        t        |_         j!                         D ]  }		 |j#                  |	        j                   j0                  dk(  rO|j3                  d      r=t               }|j5                  d      D ]  }| j                   j6                  v rVt        j                  j                  d       t        j                  j                  d|	z         t        j.                  d       |j9                  d|      sZt        j                  j                  d       t        j                  j                  d|	d|d       t        j.                  d       	  j;                  |||j9                  d|              |D ]  }||   dd d   }||   dd ||<    |j?                         D ]  }|j3                  |      r|jA                  |       |jC                  |       |	||<   |jE                  |      D ](  \  }}|jG                  |||jI                  dd             * |dvs||jA                  |          |D ]<  }||   
|j3                  |      st               }|j5                  |      D ]  }|j9                  ||      sb||   }	t        j                  j                  d       t        j                  j                  d|	d|d|d       t        j.                  d       | j                   j6                  v s.t'         j                   d      r| j                   jJ                  v r	  j;                  |||j9                  ||              |D ]  }||   dd d   }||   dd ||<    |||<   ? |D ]?  }||   	t        j                  j                  d|z         t        j.                  d       A  j                   j0                  dk(  r#|D ]  }||    j                   jL                  |<     |D ]^  }tO        ||   tP              r||    j                   jL                  |<   3||   s9||   D ]  }||    j                   jL                  |<     `  j                   jL                  s4t        j                  j                  d       t        j.                  d       tS         j                   jL                         _*        y# t        j$                  $ r}
t'        |
d      rt        |
j(                        n|
j*                  d   d   }t        j                  j                  d	|	d
|dt        |
j,                        d       t        j.                  d       Y d}
~
<d}
~
ww xY w# t<        $ rp}
t        j                  j                  d       t        j                  j                  dt        |
      |	z  z   dz          t        j.                  d       Y d}
~
qd}
~
ww xY w# t<        $ ru}
||   }	t        j                  j                  d       t        j                  j                  d|	z  t        |
      z   dz          t        j.                  d       Y d}
~
d}
~
ww xY w)z! Construct and prepare metricset zNo metrics specified.
r?   c                      t               } D ]Q  }|j                  d      r	d| |dd <   j                  |      \  }}|j                  d      }||d<   |dd | |d   <   S | S )z# Helper to read command line items r   Nr   ru   r   r   )r   rN   r   r   )tempmetmetricr   r   mr   r#   s        r$   read_cmd_line_itemsz5pmConfig.prepare_metrics.<locals>.read_cmd_line_itemsZ  s{    !mG! *$$S)*.GF12J'"&"B"B6"JKD%

3A AaD$%abEGAaDM* Nr&   r   r   r   r   r   r   r   r   r   Nglobalz"Failed to read configuration file z)'%s':
Section [global] contains options.
r   z':
No value set for z in [global].
z'%s':
r   %z%%)r   r   r   z].
keys_ignorez&Metricset definition ':%s' not found.
)+r   r|   r   r*   r   r   r   r   contextpmGetChildrenr   r   r   r   rz   r   rc   r   r   r   r   r   r   r+   globalsr   r   r   r   r   r   r   remove_sectionadd_sectionitemssetrG   r   r   
isinstancer   r   r!   )r#   pmnsr   globmetconfmetcmdlmetsourcesrS   all_setsrV   r   r   parsemetr   r   r   r   r   r   r   r   s   `                   @r$   prepare_metricszpmConfig.prepare_metricsQ  sm   ))....0tJJ67""$$4ii''55b9G	 --%'- A!#(8(8(;q(@!..0F#002H!224F#446H" ((* )	3DD! yy  A%%%h/*}H%~~h7 ($))..0JJ,,-QRJJ,,-Z]a-abHHQK%zz(C8JJ,,-QRJJ,,\`be-fgHHQK( 228S&**XWZB[\( #+ ='/3A6(0(8(<=
 "??, 3''0++G4$$W-#' "(,,w"7 IJCLL#u}}S$/GHI"77))'23C)	3X  	,Dt}$''-*}H'//5 ('||D#6#*4=DJJ,,-QRJJ,,X\^acg-hiHHQK$))..0#DII}=#I^I^B^$( 228S(,,tUXBYZ(  #+ ='/3A6(0(8(<= %,GDM/	,4  	Dt}$

  !JT!QR	 99!! <,3FO		!!&)< 	:F'&/40,3FO		!!&)6?$V_ :/6qz		))!,:	: yy  JJ67HHQK%dii&7&78q  %% .5eX.FU\\*ELLYZO\]L^

  $(&#emm2D"F G	*  * (JJ,,-QRJJ,,YUd9J-JU-RSHHQKK(F  * (#*4=DJJ,,-QRJJ,,Y-=E
-JU-RSHHQKK	(sK   X
#Z/.#\+
Z,BZ''Z,/	\(8A%\##\(+	^)4A*^$$^)c                 ^    t        | j                  d      r| j                  j                  ryy)z Check if help texts requested include_textsTF)r   r   r   r   s    r$   provide_textszpmConfig.provide_texts  "    499o.4993J3Jr&   c                 ^    t        | j                  d      r| j                  j                  ryy)z Check if labels needed include_labelsTF)r   r   r   r   s    r$   provide_labelszpmConfig.provide_labels  #    499./DII4L4Lr&   c                     g }|j                         D ]I  \  }}t        |t              r!|j                  | j	                  |             7|j                  ||f       K |S )z  Helper to flatten dict to list )r   r   dictextend_dict_to_flat_listr[   )r#   dr   kvs        r$   r   zpmConfig._dict_to_flat_list  sX    GGI 	%DAq!T"T44Q78aV$		%
 r&   c                 H    |j                         }|j                  |       |S )z Helper to merge label dicts )copyupdate)r#   d1d2d3s       r$   merge_labelszpmConfig.merge_labels  s    WWY
		"	r&   NTc                    |r| j                   |   }nI| j                  t        | j                  j                  j                               j                  |         }|dt        j                  j                  fv r|d   }nA|r||d   vri n|d   |   }n|d   si n|d   |   }|s|}|sy|d   }| j                  ||      }ddj                  d | j                  |      D              z   dz   S )	z Return labels as string Nr   r   z{}{ru   c              3   4   K   | ]  \  }}d |d|d   yw)r   z':'N ).0r   r   s      r$   	<genexpr>z*pmConfig.get_labels_str.<locals>.<genexpr>  s     av1Q2as   })r   r   r   r   r   r   r   r   r   
PM_IN_NULLr   r^   r   )	r#   r   r   currcombinerefr   inst_labelsmetric_labelss	            r$   get_labels_strzpmConfig.get_labels_str  s    //&)C++d499#4#4#9#9#;<BB6JKCD%++0011VF$(A$6bCF4L(+AbCF4L$ #A**=+FSXXaAXAXY_A`aaadgggr&   c                 ^    t        | j                  d      r| j                  j                  ryy)z Check if doing live filtering live_filterTF)r   r   r  r   s    r$   do_live_filteringzpmConfig.do_live_filtering  s"    499m,1F1Fr&   c                 ^    t        | j                  d      r| j                  j                  ryy)z! Check if doing invert filtering invert_filterTF)r   r   r  r   s    r$   do_invert_filteringzpmConfig.do_invert_filtering  r   r&   c                    | j                   j                  j                  t        j                  j
                  k(  r%| j                   j                  j                  |      S | j                   j                  j                  |      S )z  Get instance domain for metric )r   r   r   r   r   PM_CONTEXT_ARCHIVEpmGetInDomArchive
pmGetInDom)r#   descs     r$   get_metric_indomzpmConfig.get_metric_indom  sZ    99!!U[[%C%CC99$$66t<<yy  ++D11r&   c                 *   |t         j                  j                  k(  r|ri S g S |r%| j                  j                  j                  |      S g }| j                  j                  j                  |      }|D ]  }|j                  ||v r||   ni         |S )z Get instance labels )r   r   PM_INDOM_NULLr   r   pmGetInstancesLabelsr[   )r#   indomr	  r   r  indom_labelsis          r$   get_inst_labelszpmConfig.get_inst_labels  s    EKK---2%2%99$$99%@@yy((==eD 	MA!|2C|AL	Mr&   c                     |j                  d      r|dd }|S |j                  d      r|dd }|j                  d      r|dd }t        j                  j	                  |      }|S )z Get process basename (r   rg   -Nr   )rN   r_   rB   rC   basename)r#   procs     r$   get_proc_basenamezpmConfig.get_proc_basename$  si    ??3":D  s#ABx}}S!CRy77##D)Dr&   c           
         	 | j                   j                  j                  |      d   }|| j                  v ry| j                   j                  j	                  |      d   }|j
                  j                  t        j                  j                  k(  rt        j                  j                  gdgf}n4| j                  |      }|d   st        j                  j                  gdgf}|j
                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                   t        j                  j"                  t        j                  j$                  t        j                  j&                  fvr-t        j(                  t        j                  j*                        | j,                  s| j                   j.                  n| j,                  }t1        | j                   d      r| j                   j2                  r	|d   d   sy|re|d   d   r\| j5                         sKg g g}|D ]0  }d}d}		 |j7                         rd}	|d   d   j9                         d   j7                         rt;        |d         D ]x  \  }
}|j9                         d   }|j7                         s*t=        |      t=        |      k(  sB|d   j?                  |d   |
          |d   j?                  |d   |
          d} n |jA                  d	d      jA                  d
d      jA                  dd      jC                         rd}	d|d   d   v r|d   d   j9                         d   j7                         rrt;        |d         D ]a  \  }
}|| jE                  |j9                         d         k(  s,|d   j?                  |d   |
          |d   j?                  |d   |
          d}c |sd}	tG        jH                  d|z   dz         }t;        |d         D ]P  \  }
}tG        jJ                  ||      s|d   j?                  |d   |
          |d   j?                  |d   |
          R ~3 |d   sytW        |      }| j                  j?                  |       | jX                  j?                  |       | jZ                  j?                  |       | j]                         rPd\  }}}}	 | j                   j                  j_                  |t        j                  j`                        }| j                   j                  j_                  |t        j                  jb                        }|j
                  j                  t        j                  j                  k7  r|| j                   j                  je                  |t        j                  j`                        }| j                   j                  je                  |t        j                  jb                        }| jj                  j?                  ||||g       i }g }i }| jm                         ru	 | j                   j                  jo                  |      }| jq                  |j
                  j                  d|d         }| jq                  |j
                  j                        }| jr                  j?                  ||g       ||g| jt                  |<   y# tL        $ rH}tN        jP                  jS                  |	d|d|d       tO        jT                  d       Y d}~d}~ww xY w# t        j(                  $ r6}|jf                  d   t        j                  jh                  k7  r Y d}~qd}~ww xY w# tL        $ r Y w xY w# t        j(                  $ r}t1        | j                   d      r| j                   jv                  rY d}~ytN        jP                  jS                  d|dty        |      d       tO        jT                  d       Y d}~yd}~ww xY w)z0 Validate individual metric and get its details r   N	omit_flatr   Fr?   zInvalid instanceTrA   _r$  zInvalid process zInvalid regex\A\Zz '': r   )NNNNignore_incompatInvalid metric  ().
)=r   r   pmLookupNamer   pmLookupDescscontentsr  r   r   r  r  r  r   
PM_TYPE_32PM_TYPE_U32
PM_TYPE_64PM_TYPE_U64PM_TYPE_FLOATPM_TYPE_DOUBLEPM_TYPE_STRINGpmErrPM_ERR_TYPEr    r   r   r)  r  isdigitr   	enumerater   r[   rG   isalnumr'  recompilematchr3   r*   r   r   r+   tupler   r   r   pmLookupTextPM_TEXT_ONELINEPM_TEXT_HELPpmLookupInDomTextrW   PM_ERR_TEXTr   r   pmLookupLabelsr!  r   r   r/  rz   )r#   r   pmidr  r   r   foundrhitmsgr   r   spcrr   linefulldomldomhr  r  	ri_labelss                         r$   check_metriczpmConfig.check_metric2  s   ]	99$$11&9!<Dtzz!99$$2248;D}}""ekk&?&??//04&9,,T2Aw"[[334tf=D}}!!%++*@*@*/++*A*A*/++*@*@*/++*A*A*/++*C*C*/++*D*D*/++*D*D*F F kk%++"9"9::3799		++$))Ityy+.4993F3FtTUwWXzT!WQZ0F0F0HR"  $ACC$99;"4C#Awqz//1!4<<>,5d1g,> !.DAq)*1B')zz|A#b'8I(-aQ
(C(-aQ
(C.2(-!. 99S"-55c2>FFsBOWWY"3C"d1gaj0T!WQZ5E5E5G5J5R5R5T,5d1g,> !3DAq'(D,B,B1779Q<,P'P(-aQ
(C(-aQ
(C.2	!3
  #"1C!#EAI,=!>B(1$q'(: @1#%88B?$)!HOODGAJ$?$)!HOODGAJ$?@ !#; $B QxU|JJd#JJd#JJd#!!#)?&dD$99,,99$@[@[\D99,,99$@X@XYD}}**ekk.G.GG#yy00BB4IdIde#yy00BB4IaIab 

!!4tT":;MKI""$$(II$5$5$D$DT$JM"&"6"6t}}7J7JESWXYSZ"[K $ 4 4T]]5H5H II KK{;<'4i&@DOOF#A % $

((S!U)KL$" {{ zz!}(?(?? @ !  {{ 	tyy"349R9RJJFCJOPHHQKK		s   6^? H^? <+^? (A0\\1C%\B\7\^? A4^? D)]$ 75^? -A4^0 !.^? 	]!=]^? ]!!^? $^-7+^("^? (^--^? 0	^<9^? ;^<<^? ?a,aAaac                 ^    t        | j                  d      r| j                  j                  ryy)z& Check if unknown metrics are ignored ignore_unknownTF)r   r   rZ  r   s    r$   ignore_unknown_metricszpmConfig.ignore_unknown_metrics  r   r&   c                     d|v rx|j                  dd      j                  dd      }|j                  dd      j                  dd	      }|j                  d
d
      j                  dd      }|j                  dd      }|S )z Format a metric text label z / nanosecnsmicrosecusmillisecmssecr   minhourh/)rG   )r#   r   s     r$   format_metric_labelzpmConfig.format_metric_label  sw     E>MM)T2:::tLEMM*d3;;E3GEMM%/77DEMM%-Er&   c                       e Zd ZdZd Zd Zy)pmConfig.pmfg_items_to_indomzC Helper to provide consistent interface with pmfg items and indoms c                     || _         y)z# Initialize an instance with items N_items)r#   r   s     r$   r%   z%pmConfig.pmfg_items_to_indom.__init__  s	    DKr&   c                     | j                   S )z Retrieve the items rl  r   s    r$   __call__z%pmConfig.pmfg_items_to_indom.__call__  s    ;;r&   N)__name__
__module____qualname____doc__r%   ro  r  r&   r$   pmfg_items_to_indomrj    s    Q	 	r&   rt  c                 \    t        t        j                  |t        |      z              |z  S )z8 Round an integer value up to the nearest upper integer )r   mathceilfloat)r#   r   uppers      r$   integer_roundupzpmConfig.integer_roundup  s$    499UU5\123e;;r&   c                    d}d}	 t        | j                  d      rF| j                  j                  r0d}t        | j                  j                        | j                  _        t        | j                  d      rF| j                  j                  r0d}t        | j                  j                        | j                  _        t        | j                  d      rF| j                  j
                  r0d}t        | j                  j
                        | j                  _        d}t        | j                  d      rj| j                  j                  rTd}t        | j                  j                        | j                  _        | j                  j                  dk  rt        |      t        | j                  d	      rj| j                  j                  rTd	}t        | j                  j                        | j                  _        | j                  j                  dk  rt        |      t        | j                  d
      rj| j                  j                  rTd
}t        | j                  j                        | j                  _	        | j                  j                  dk  rt        |      t        | j                  d      rj| j                  j                  rTd}t        | j                  j                        | j                  _
        | j                  j                  dk  rt        |      t        | j                  d      r| j                  j                  rod}| j                  j                  dk7  rSt        | j                  j                        | j                  _        | j                  j                  dk  rt        |      yyyy# t        $ r> t        j                  j                  d|d|d       t        j                  d       Y yw xY w)z! Validate common utility options zInteger expectedunknownranklimit_filterlimit_filter_forcezNon-negative integer expectedr   r   width_forcer   precision_forcerepeat_headerautozError while reading option : r   r   N)r   r   r}  r   r~  r  r   r   r  r   r  r  r*   r   r   r+   )r#   rY   attrs      r$   validate_common_optionsz pmConfig.validate_common_options  s    '	tyy&)diinn!$TYY^^!4		tyy.1dii6L6L%),TYY-C-C)D		&tyy"67DII<X<X+/24993O3O/P		,1Ctyy'*tyy"%diioo"6		99??Q&$S/)tyy-0TYY5J5J$(+DII,A,A(B		%99((1,$S/)tyy+.4993F3F"&)$))*=*=&>		#99&&*$S/)tyy"349R9R(,/		0I0I,J		)99,,q0$S/)tyy/2tyy7N7N&99**f4.1$))2I2I.JDII+yy..2(o- 3 5 8O2  	JJtSQRHHQK	s   N/N9 9AP ?P r   c           
      n7   # t         j                  d      s$t         j                         j                  _        t         j                  d      rt j                  j
                  r^ j                  j
                  j                  d      D ]6  }| j                  j                  vsdg g j                  j                  |<   8  j                  j                  rt        d j                  j                  j                  d            D ]  }|j                  d      s|j                  d      r'	  j                  j                  j                  |       Ld}d}	 |j                  dd      \  }} j                  j                  j'                  |j)                                |st        j                  j!                  d|z         t        j$                  d        t         j                  d      r j                  j8                  ss j                  j                  #t;                j                  _        # fd}
t=        #      D ]0  }| _        	  j                  j                  jA                  ||
       2  j                  j                  #t;                j                  _        #D ]  }	 tE         jF                        }#|   d    _         j                  j                  jA                  | jH                         tE         jF                        |k(  ro#|    j                  j                  |<     jJ                  s jC                         stt        j                  j!                  d        j                  jL                  r*tO        d       tO         j                  jL                         t        j$                  d       | }t;               }tQ         j                  j                        D ]  \  }}tS        dd      D ]~  }tE         j                  j                  |         |k  s)|dk(  r) j                  j                  |   jU                  g        W j                  j                  |   jU                  d         j                  j                  |   d   sWd}|j                  d      D ]  }||d   dz   z  } |dd |j                  d      d   z    j                  j                  |   d<    j                  j                  |   d   sv j                  jL                  r` jJ                  |   d   d   t        j,                  jV                  k7  r0 j                  jL                   j                  j                  |   d<    jJ                  |   d   d   t        j,                  jV                  k(  rg  j                  j                  |   d<   |r+ jY                  tE         jJ                  |   d         d      }t         j                  d      rM j                  j                  |   d    s1 j                  jZ                   j                  j                  |   d <   nX j                  j                  |   d    d!k(  rd j                  j                  |   d <   nd j                  j                  |   d <   t         j                  d"      r j                  j\                  dk(  sN j                  j                  |   d    d!k(  s/t         j                  d#      r5 j                  j^                  d$k(  rd j                  j                  |   d <   d% }d& }d' } j`                  |   jb                  jd                  } ||      rt         j                  d(      rG j                  jf                  r1 j                  jf                   j                  j                  |   d)<   nt         j                  d*      rc j                  jh                  rM j                  j                  |   d)   s1 j                  jh                   j                  j                  |   d)<   nA j                  j                  |   d)   s%t#        |       j                  j                  |   d)<    ||      rt         j                  d+      rG j                  jj                  r1 j                  jj                   j                  j                  |   d)<   nt         j                  d,      rc j                  jl                  rM j                  j                  |   d)   s1 j                  jl                   j                  j                  |   d)<   nA j                  j                  |   d)   s%t#        |       j                  j                  |   d)<    ||      rt         j                  d-      rG j                  jn                  r1 j                  jn                   j                  j                  |   d)<   nt         j                  d.      rc j                  jp                  rM j                  j                  |   d)   s1 j                  jp                   j                  j                  |   d)<   nA j                  j                  |   d)   s%t#        |       j                  j                  |   d)<    j                  j                  |   d)   s%t#        |       j                  j                  |   d)<   t         j                  d#      r> j                  j^                  d$k(  r%t#        |       j                  j                  |   d)<   	  j                  j                  |   d)   } j                  j                  js                   j                  j                  |   d)         \  }} j                  j                  |   d    dk(  r{ j`                  |   jb                  j\                  t        j,                  jt                  k7  r= j`                  |   jv                  t        j,                  jx                  k(  r	d|vr|d/z  } j{                  |      }|||f j                  j                  |   d)<   t        j,                  j|                  }t#              t#         j`                  |   jb                  jd                        k(  r# j`                  |   jb                  j\                  } j                  j                  |   d    dk(  rX j`                  |   jb                  jv                  t        j,                  jx                  k(  rt        j,                  j|                  } j`                  |   jb                  j\                  t        j,                  jt                  k(  r# j`                  |   jb                  j\                  } j                  j                  |   d1   rf	 t         j                  j                  |   d1          j                  j                  |   d1<    j                  j                  |   d1   dk  rt4        nct         j                  d3      r1 j                  j                   j                  j                  |   d1<   nd j                  j                  |   d1<   t         j                  d4      rF j                  j                  0 j                  j                   j                  j                  |   d1<    j                  j                  |   d1   s?tE         j                  j                  |   d          j                  j                  |   d1<    j                  j                  |   d1   tE        t              k  r)tE        t               j                  j                  |   d1<    j                  j                  |   d5   rA	 t         j                  j                  |   d5          j                  j                  |   d6<   nct         j                  d7      r1 j                  j                   j                  j                  |   d6<   nd  j                  j                  |   d6<   t         j                  d8      rF j                  j                  0 j                  j                   j                  j                  |   d6<   d j                  j                  |   d5<    j                  j                  |   d9   rA	 t         j                  j                  |   d9          j                  j                  |   d9<   nFt         j                  d;      r0 j                  j                   j                  j                  |   d9<   t         j                  d<      rF j                  j                  r0 j                  j                   j                  j                  |   d9<    j`                  |   jb                  j\                  t        j,                  jt                  k(  rd j                  j                  |   d9<   	 g }t        d|      } j                  j                  |   d)   d   }|rQ j                  j                  |   d   r4d}g }tS        dtE         jJ                  |   d               D ]}  }	  j                  j                  j                  ||| jJ                  |   d   |         } |jU                   jJ                  |   d   |    jJ                  |   d   |   | f       |dz  } |dkD  rZt        |      D ]L  }! jJ                  |   d   |!=  jJ                  |   d   |!=  j                         s: j                  |   d   |!= N  j                  |       j                  j                  |   d5<   nB j                  j                  j                  ||||       j                  j                  |   d5<    j                         ri	 g  j                  |<    j                  j                  |   d   D ]9  }" j                  |   jU                  t        j                  d=|"z   d>z                ; 	  t        |      D ]  } jF                  ||   =  j`                  ||   =  jJ                  ||   =  j                         r j                  ||   =  j                         r j                  ||   =  j                  j                  |=  ~ j                  j                  sd jC                         s t        j                  j!                  dB       nt        j                  j!                  dC       t        j$                  d       t         j                  d      r( j                  j
                  r j                          yyy# t        j                  $ rn}t        j                  j!                  d	       t        j                  j!                  d
|dt#        |      d       t        j$                  d       Y d}~zd}~ww xY w# t        j                  $ r}|j*                  d   t        j,                  j.                  k7  r|j1                         }n	  j                  j                  j3                  j)                         |j)                                Y d}~|st        j                  j!                  d|z         t        j$                  d       T# t        j                  $ r}	|	j1                         }Y d}	~	nd}	~	ww xY wY d}~d}~wt4        $ r}d}Y d}~d}~wt6        $ r}d}Y d}~d}~ww xY w# |r8t        j                  j!                  d|z         t        j$                  d       w w xY w# t        j                  $ r}|j*                  d   t        j,                  j.                  k7  r d}	  j                  j                  j'                  |       nk# t        j                  $ rU}	|	j*                  d   t        j,                  j.                  k7  r  jC                         r| j                  v rd}Y d}	~	nd}	~	ww xY w|s%t        #|          j                  j                  |<   Y d}~d}~ww xY w# t        j                  $ rO}t        j                  j!                  d|dt#        |      d       t        j$                  d       Y d}~d}~ww xY w# t        j                  $ rh}t        j                  j!                  t#        |      d0 j                  j                  |   d)   d       t        j$                  d       Y d}~=d}~ww xY w# t6        $ r; t        j                  j!                  d2|z         t        j$                  d       Y Vw xY w# t6        $ r; t        j                  j!                  d2|z         t        j$                  d       Y 	w xY w# t6        $ r; t        j                  j!                  d:|z         t        j$                  d       Y w xY w# t        j                  $ rG}|j*                  d   t        j,                  j                  k(  r |jU                  |       Y d}~)d}~ww xY w# t6        $ rF}t        j                  j!                  d?"d@|d       t        j$                  d       Y d}~d}~ww xY w# t6        $ r7 t         j                  dA      r j                  j                  r|||<   n Y w xY w)Dz Validate the metricset 	leaf_only	predicateru   r?   Nrt   rg  rA   z*Failed to load derived metric definitions zfrom file 'r@   r   r   r   r   z'Failed to register derived metric:
%s.
z+Invalid syntax (expected metric=expression)zUnidentified errorc                     | j                   k7  rI| j                  j                  vr0t        j                            j                  j                  | <   yyt        |          j                  j                  | <   y)z( Helper to support non-leaf metricspecs N)r    r   r   r   )r   r   r#   s    r$   metric_base_checkz4pmConfig.validate_metrics.<locals>.metric_base_check  sg    TYY&TYY%6%664<WTYY=O4P		))&1 7 190IDII%%f-r&   FTr0  r1  r2  zNo matching instances found.
z
Requested global instances:   rg   i  ry   r   rx   r   outputarchivec                 `    | j                   dk(  r| j                  dk(  r| j                  dk(  ryy)z Test count dimension r   r   TF)dimCountdimSpacedimTimer   s    r$   is_countz+pmConfig.validate_metrics.<locals>.is_countv  ,    ==A%==A%<<1$r&   c                 `    | j                   dk(  r| j                  dk(  r| j                  dk(  ryy)z Test space dimension r   r   TF)r  r  r  r  s    r$   is_spacez+pmConfig.validate_metrics.<locals>.is_space~  r  r&   c                 `    | j                   dk(  r| j                  dk(  r| j                  dk(  ryy)z Test time dimension r   r   TF)r  r  r  r  s    r$   is_timez*pmConfig.validate_metrics.<locals>.is_time  s,    <<1$==A%==A%r&   count_scale_forcer   count_scalespace_scale_forcespace_scaletime_scale_force
time_scalez / sr     z"Non-negative integer expected: %s
r   r        r   r     zInteger expected: %s
r~  r  r,  r-  zInvalid regex 'r.  r/  zNo compatible metrics found.
zNot one known metric found.
)Xr   r   r   r!   r   r  r   rs   filterrN   r   pmLoadDerivedConfigr   r=  r*   r   r   rz   r+   r3  striprW   r   PM_ERR_NAMEr   pmRegisterDerivedr   r3   r  r   r   r    pmTraversePMNSr[  r   r   rX  r   r   printr@  r   r[   r  rz  ry   r   r  r   r5  unitsr  r  r  r  r  r  pmParseUnitsStrr<  semPM_SEM_COUNTERrh  r;  r   r   r  TRUNCr   r  r~  r  maxpmfgextend_itemPM_ERR_CONVreversedr   r   rt  extend_indomr  r   rB  rC  r/  r   r   validate_predicate)$r#   
curr_insts	max_instsr  rs   r   rY   exprr   error2r  r   ignoreldynamic_instsincompat_metricsr   r   r   r  r  r  r   r   unitstrmultmtyper   scalemitemsvanishedjitemr   rN  r   s$   `                                  @r$   validate_metricszpmConfig.validate_metrics  s    tyy+. ();); <DII499k*tyy/B/B!YY0066s; <	DII$5$55468DII%%i0< 99!$		(9(9(?(?(DE (%%c*g.@.@.E$		))==gF CD(%,]]3%:
d		))66tzz|D JJ,,-X[^-^_HHQK=(@ tyy+.dii6I6Iii''G +DIIJ w- N"	NII%%44V=NON& ))##'M		 	F

O#FOA.			!!009J9JKtzz?a'07DII%%f-	 zz$"="="?JJ=>yy""56dii))*HHQK & '="499#4#45 \	IAvq! ?tyy((01U:z		))&188<		))&188>? 99$$V,Q/c* 'AAaD3J&D'/3CRy6<<;LR;P/P		!!&)!, 99$$V,Q/DII4G4G::a=#A&%++*@*@@37993F3FDII%%f-a0zz!}Q"ekk&<&<</1		!!&)!, 00TZZ]15E1FM	 tyy-09J9J69RST9U/3yy/D/D		!!&)!,""6*1-6/0		!!&)!,/0		!!&)!, 		6*tyy~~/Byy  (+u4		8,1A1AY1N/0		!!&)!, ::a=))//D~499&9:tyy?Z?Z37993N3NDII%%f-a0TYY6499;P;Pyy((0337993H3HDII%%f-a0**621536t9DII%%f-a0~499&9:tyy?Z?Z37993N3NDII%%f-a0TYY6499;P;Pyy((0337993H3HDII%%f-a0**621536t9DII%%f-a0t}499&89dii>X>X37993M3MDII%%f-a0TYY5$)):N:Nyy((0337993G3GDII%%f-a0**621536t9DII%%f-a099$$V,Q//24y		!!&)!, tyy(+		0@0@I0M/24y		!!&)!,		))&1!4"&))"3"3"C"CDIIDUDUV\D]^_D`"a$99$$V,Q/14::a=))..%++2L2LL::a=$$(B(BBe#VOE00705w/E		!!&)!, KK..E7|s4::a=#9#9#?#?@@

1..33yy  (+q0zz!}%%))U[[-G-GG22zz!}%%**ekk.H.HH

1..33 yy  (+ 36tyy7H7H7PQR7S3TDII%%f-a0yy((03a7(( 8
 G,/3yy		!!&)!,/0		!!&)!,tyy-0TYY5J5J5V/3yy/D/D		!!&)!,99$$V,Q//24993D3DV3LQ3O/P		!!&)!,yy  (+c%j8/25z		!!&)!, yy  (+ 36tyy7H7H7PQR7S3TDII%%f-a0 K0/3yy/B/B		!!&)!,/0		!!&)!,tyy"349R9R9^/3yy/H/H		!!&)!,+/DIIf%a( yy  (+ 36tyy7H7H7PQR7S3TDII%%f-a0 N3/3yy/E/E		!!&)!,tyy"67DII<X<X/3yy/K/K		!!&)!,zz!}%%**ekk.H.HH/3		!!&)!,)9-			))&1!4Q7$))"3"3F";A">F!H"1c$**Q-*:&;< //#'99>>#=#=feUTXT^T^_`TabcTdefTg#hD!LL$**Q-*:1*=tzz!}Q?OPQ?RTX)YZ"aKF	/ z!)(!3 9A $

1a 0 3 $

1a 0 3#224$(KKN1$5a$8	9
 483K3KE3RDII%%f-a0 		33FE5)T II%%f-a0 ))+$13v.!%!2!26!:1!= YA NN6299"**UQYQVEV:WXYe\	~ /0 	*F

+F34

+F34

+F34!!#JJ/78""$KK 0 89		!!&)	*  yy  ..0

  !AB

  !@AHHQK499k*tyy/B/B##% 0C*_
 !;; $

(()UV

((WcRWj)YZ$ !;; 7 ::a=EKK,C,CC"'--/C7 $		 1 1 C CDJJLRVR\R\R^ _ ( JJ,,-X[^-^_HHQK $);; 7&,nn&67% LK$ 323 JJ,,-X[^-^_HHQK , {{ Nzz!}(?(??"F*		))66v> ;; *!;;q>U[[-D-DD!668VtGYGY=Y%)F	*
 "4<WV_4M		))&1N8 ;; 

  E
!STD ;; 

  E
DII<M<Mf<UVW<X!YZ. !  JJ$$%JV%STHHQK & !  JJ$$%JV%STHHQK  !  JJ$$%=%FGHHQK .  %{{ /$zz!}0G0GG %$OOA../* % $

((5)QR$  499&78TYY=V=V/0$V, -sB  3%AXAAZ&A`6A*Ad!AdD(Ae2A$Ag0@?Ah7D>?Ai>I;A9Am4K5A:AkM/AAm4N;BAm4QA'Al"R6Am4XAZXA#AZZAZZA_Z";A^[AA]!\ A_]!A^]4A^	^A^^	A^^A^^A_^A_^#A^+^%A_^+A_^7A^?^9A_^?A__A__<A``Ad
`-Ada%Aa-a,Ada-Acb AAccAdcAcc*AddAd
dAe/d AAe*e*Ae/e2Ag-fAAg(g(Ag-g0A Ah4h3Ah4h7A Ai;i:Ai;i>A AkkAkkAlk<AllAm4lAllAm4l"	Am1l+;Am,m&Am4m,Am1m1Am4m4<An4n3An4c                    | j                   j                  j                         r| j                   j                  j                         d}n-t	        | j                   j                  j                               }t	        | j                   j                  j                               |z
  | j                   _        | j                   j                  j                         r!| j                   j                  j                         | j                   _        t        d| j                   j                        | j                   _        t	        | j                   j                        | j                   j                  dz
  z  | j                   _
        | j                   j                  j                  t        | j                   j                               | j                   j                  j                         | j                   _
        n&| j                   j                  j                         | j                   _
        | j                   j                  s$t        j                  d      | j                   _
        	 t!        | j                   j                  t	        | j                   j                        z  dz         | j                   _        nf| j                   j                  j                         | j                   _        | j                   j                  j                         | j                   _
        t	        | j                   j                        dk  r5t$        j&                  j)                  d       t%        j*                  d       yy# t"        $ r Y cw xY w)z Finalize util options Nr   r   r   z$Interval must be greater than zero.
)r   r|   pmGetOptionFinishOptargpmGetOptionOriginrx  pmGetOptionFinishruntimer~   rv   r  rw   r   rz   r   r   timevalr   r3   r*   r   r   r+   )r#   origins     r$   finalize_optionszpmConfig.finalize_optionsA  s9    99>>113yy~~//19tyy~~??AB %diinn&F&F&H IF RDIIyy~~002$(IINN$E$E$G		!$'499+<+<$=		!%*499+<+<%=ARARUVAV%W		"		223tyy7I7I3JK%)YY^^%G%G%I		"%)YY^^%G%G%I		"yy))).q)9DII&(+DII,=,=diiFXFX@Y,Y\],](^DII% !%		 A A CDII!%!C!C!EDII##$)JJDEHHQK * ! s   -AM= =	N	N	c                    t               | j                  _        g | _        g | _        g | _        g | _        g | _        t               | _        | j                  j                  j                          d| j                  _        y)z Clear metricset N)r   r   r   r   r   r   r   r   r   r  clearpmfg_tsr   s    r$   clear_metricszpmConfig.clear_metrics`  s\    'M		



%-		 		r&   c                     | j                          | j                  j                  j                         | j                  _        | j                  ||       y)z Update metricset N)r  r   r  extend_timestampr  r  )r#   r  r  s      r$   update_metricszpmConfig.update_metricsl  s;     IINN;;=		j)4r&   c                 \    t        | j                  d      r| j                  j                  S y)zV Action to take when namespace change occurs:
            ignore=0, abort=1, update=2 names_changer   )r   r   r  r   s    r$   names_change_actionzpmConfig.names_change_actionr  s%     499n-99)))r&   c                    	 | j                   j                  j                         }| j                   j                  se| j                   j                         j                  d      }| j                   j                  j                         }t        |      t        |      kD  ry|t        j                  j                  z  r| j!                         }|dk(  ry|d	k(  ryy# t        j                  $ r}|j
                  d   t        j                  j                  k(  rY d}~y|j
                  d   t        j                  j                  k(  r.t        j                  t        j                  j                  d      |d}~ww xY w)
z2 Sample using fetchgroup and handle special cases r   Nrg   z+
No metrics or instances to report present.z%sr  r   r   )r   r  fetchr   r=  rW   r   
PM_ERR_EOLPM_ERR_TOOSMALLinterpolr  strftimer|   r  rx  PMCD_NAMES_CHANGEr  )r#   stater   samplefinishactions         r$   r  zpmConfig.fetchy  s!   	IINN((*E yy!!YY&&(11$7FYY^^557FV}uV}, 5;;000--/F{1 1 {{ 	zz!} 6 66zz!} ; ;;kk%++"="="PR RK	s   $C E<.*E7AE77E<c                    | xj                   dz  c_         | j                  s7t        | j                  j	                         j                  d            | _        | j                  t        | j                  j                        | j                   z  z   }|t        j                         z
  }|dkD  rt        j                  |       yy)z Pause before next sampling r   z%s.%fr   N)	r   r   rx  r   r  r  rw   timesleep)r#   wakeupr  s      r$   pausezpmConfig.pause  s    q}}!$))"3"3"5">">w"GHDMtyy'9'9!:T[[!HH$19JJu r&   c                    | j                   |   sy| j                  j                  |   d   D ]  }|j                  dd      j                  dd      j                  dd      j	                         sDd|v sI|j                         d   j                         sk|| j                  |j                         d         k(  s y | j                   |   D ]  }t        j                  ||      s y y	)
z/ Filter instance name against metric instances Tr   rA   r?   r*  r$  r+  r   F)
r   r   r   rG   rA  r   r?  r'  rB  rD  )r#   r   r   rN  rR  s        r$   filter_instancezpmConfig.filter_instance  s    ~~f%""6*1- 	$Ayyb!))#r2::3CKKM$;4::<?#:#:#<D224::<?CC#		$ ..( 	BxxD!	 r&   c                     | j                   j                  s|S t        | j                   j                        }t        | j                   j                  dkD        }t	        |d |      d| S )z Rank instances r   c                     | d   S )Nr   r  )r   s    r$   <lambda>zpmConfig.rank.<locals>.<lambda>  s
    58 r&   )r   reverseN)r   r}  absboolr\   )r#   r   r}  revss       r$   r}  zpmConfig.rank  sS    yy~~499>>"DIINNQ&'i%;TJ5DQQr&   c                    | j                   j                  j                  d      D ]  }|| j                   j                  vr7t        j
                  j                  d|z         t	        j                  d       t        | j                   j                  j                               j                  |      }| j                  j                  | j                  |   j                  j                         | j                   |   d   d   t"        j$                  j&                  k(  r4t        j
                  j                  d       t	        j                  d       | j                  |   j                  j(                  t"        j$                  j*                  k(  sot        j
                  j                  d       t	        j                  d        y)z- Validate predicate filter reference metrics ru   z"Predicate metric %s filtered out.
r   r   z&Predicate metric must have instances.
z)Predicate metric values must be numeric.
N)r   r  r   r   r*   r   r   r+   r   r   r   r   r[   r   r5  r  r   r   r   r  r   r<  )r#   r  r   s      r$   r  zpmConfig.validate_predicate  s1   ,,2237 	I		 1 11

  !F!RSTYY&&++-.44Y?A##DJJqM$:$:$@$@Azz!}Q"ekk&<&<<

  !JKzz!}%%**ekk.H.HH

  !MN	r&   c                 $    | j                  |      S )z. Deprecated, use get_ranked_results() instead )get_ranked_results)r#   
valid_onlys     r$   get_sorted_resultszpmConfig.get_sorted_results  s    &&z22r&   c           
         t               }t        | j                  d      r<| j                  j                  r&| j                  j                  j	                  d      }nd}| j                         xr | j                          }t        | j                  j                        D ]  \  }}g ||<   	  | j                  j                  |   d          D ]  \  }}}		 |t        j                  j                  k7  r|s(|r0|t        j                  j                  k7  r| j                  ||      sZ |	       }
| j                  j                  |   d   r?||vr;| j                  j                  |   d   }|dkD  r|
|k  r|dk  r|
t        |      kD  r||   j                  |||
f        	 |s||   r||=  | j!                         ry|D cg c]!  }||   s	|t#        t%        ||          d   f# }}| j&                  |k7  r=| j(                  }t               | _        || _        |D ]  }d}||v rY||   d   }||   d   j+                         ||   rt#        t%        ||          d   ni }t-        fd	|D              rw||   d   }nnt#        | j                  j                  j+                               j/                  |      }| j                  j0                  j3                  | j4                  |         }|2| j7                  | j8                     j:                  j<                        }||g| j(                  |<    |s|S |ri t        |      D ]U  \  }}| j?                  ||         ||<   | j@                  |   vrg <      jC                  fd
||   D               W |D ]Z  }||v r| j                  j                  |   d   rn| j                  j                  |   d   }|dkD  r ||   D cg c]  }|d   |k\  s| c}||<   n-|dk  r(||   D cg c]  }|d   t        |      k  s| c}||<   t#        | j                  j                  j+                               j/                  |      }| j8                  |   j:                  j<                  | j@                  vr| j?                  ||         ||<   | j8                  |   j:                  j<                  }||   D cg c]  }|d   |   v s| c}||<   ] nJt        | j                  d      r4| j                  j>                  r|D ]  }| j?                  ||         ||<    | j                         rC| j                         r3|D ].  }||   D cg c]  }| j                  ||d         s| c}||<   0 |S # t        $ r Y w xY w# t        $ r Y #w xY wc c}w c c}w c c}w c c}w c c}w )z! Get filtered and ranked results r  ru   r  r  r  r   Nr   c              3   &   K   | ]  }|v  
 y w)Nr  )r  r   
prev_instss     r$   r  z.pmConfig.get_ranked_results.<locals>.<genexpr>  s     Idtz1Is   c              3   >   K   | ]  }|d       vs|d      yw)r   Nr  )r  xp
pred_instss     r$   r  z.pmConfig.get_ranked_results.<locals>.<genexpr>  s'     $ca1U_`aUbIbQqT$cs   
r   r}  )"r   r   r   r  r   r  r  r@  r   r   r   r  r  r  r[   r3   r   r   zipr"   r   r   allr   r   rK  r   r!  r   r5  r  r}  r   r   )r#   r  results
predicatesearly_live_filterr   r   r   r   valr   r   r   prev_labelsrW  r  r  r  r  
inst_indexr  r   r  s                       @@@r$   r  zpmConfig.get_ranked_results  s   -499k*tyy/B/B,,2237JJ 224WT=U=U=W9W"499#4#45 	$IAv GFO'Ctyy'8'8'@'C'E OD$5;;#9#99$$,9O9O1O#33FDA$ #99,,V4Q7%Z7(,		(9(9&(A!(D#(19$,%*QY53u:3E$,..dE/BC!, '&/FO5	$8  LSg&W^_eWffd3#89!<=gEg5("oo"--#( % IF $I,(3F(;A(>%0%8%;%@%@%B
GNvT#wv*?%@%C\^
IjII(3F(;A(>I !2!2!7!7!9:@@H(,		(9(9(H(HTU(W ($($8$8A9O9O9U9U$V	/<i.HDOOF+I NJ )* 5 d9%)YYwy/A%B	"$$Q'J&$&JqM1$$$c793E$ccd " aZ' yy((03 $		 1 1& 9! < 19:A&/.[QQqTUZ]q.[GFO"QY:A&/.`QQqTUXY^U_M_q.`GFO**//1288@::a=))//t7G7GG&*ii&@GFO!ZZ]3399
.5fo"`1T^I_A_1"`#a& tyy&)diinn% AF&*ii&@GFOA !!#(@(@(B! e.5fo"dAUAUV\^_`a^bAc1"de G %   hN /\.` #a #es   1(V?V/9V?:1V/+V?,AV/9V?:V/V?V/%V?
WW=WW"W9W2WWW#!W#/	V<8V?;V<<V??	WW)F)NTT)1rp  rq  rr  rs  r%   r6   r:   r8   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r!  r'  rX  r[  rh  objectrt  rz  r  
CURR_INSTSr  r  r  r  r  r  r  r  r}  r  r  r  r  r&   r$   r	   r	   ,   s   '$L4%N-0^
O4+
8.DJ4A9Fh,2 +/b 
_Bf <+Z +5 a&F>
! )3a 5<"R&3_r&   r	   )rs  r   r   collectionsr   configparserr   ImportErrorr2   r  rv  r   r*   rB   rB  pcpr   r  VERSIONr
  r	  r	   r  r&   r$   <module>r     se   * )  #'    
 
 	 	  	

Hv H#  s   A 	AA