ó
    ioøgÆÕ ã                   ó2(  • S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	r
SSKrSSKJrJrJrJrJrJr  SSKJrJrJrJrJrJr  SSKJrJrJrJrJr  SSKJrJrJrJ r J!r!  SS	K"J#r#  \" \#" S
5      5      r$\RJ                  S:w  a  SOSr&\" \#" \&5      5      r'\RP                  S:¼  a  \)4r*\)r+\,r-O\)\+4r*\.r-S r/ " S S\05      r1 " S S\05      r2\
Rf                  S:X  a  \r4O&\
Rf                  S:X  a  \r4O\1" \
Rj                  S5      e\
Rl                  S:X  a  \r7O&\
Rl                  S:X  a  \r7O\1" \
Rj                  S5      e " S S\5      r8 " S S\5      r9 " S S\5      r: " S S\5      r; " S  S!\5      r< " S" S#\5      r= " S$ S%\5      r> " S& S'\5      r? " S( S)\5      r@\" \@5      rA\B" S* SSS5      \AlC        \B" S+ SSS5      \AlD        \B" S, SSS5      \AlE        \B" S- SSS5      \AlF         " S. S/\5      rG " S0 S1\5      rH\rI\rJ " S2 S3\5      rK\" \K5      rL\B" S4 SSS5      \LlM        \B" S5 SSS5      \LlN        \B" S6 SSS5      \LlO        \B" S7 SSS5      \LlP        S8 rQ " S9 S:\5      rR " S; S<\5      rS " S= S>\5      rT " S? S@\5      rU\" \U5      rV\B" SA SSS5      \VlW        \B" SB SSS5      \VlX        \B" SC SSS5      \VlY        \B" SD SSS5      \VlZ        \B" SE SSS5      \Vl[         " SF SG\5      r\\\$Rº                  l^        \\" \" \5      5      /\$Rº                  l_        \\$RÀ                  l^        \\" \" \5      5      \" \" \5      5      /\$RÀ                  l_        \\$RÂ                  l^        / \$RÂ                  l_        \\$RÄ                  l^        \/\$RÄ                  l_        \\$RÆ                  l^        \\SH-  \" \5      /\$RÆ                  l_        \\$RÈ                  l^        \\" \" \5      5      /\$RÈ                  l_        \\$RÊ                  l^        \\" \5      /\$RÊ                  l_        \" S\5      rf\\$RÎ                  l^        \\f/\$RÎ                  l_        \\$RÐ                  l^        / \$RÐ                  l_        \\$RÒ                  l^        \\\" \5      /\$RÒ                  l_        \\$RÔ                  l^        \/\$RÔ                  l_        \\$RÖ                  l^        \\" \K5      /\$RÖ                  l_        \\$RØ                  l^        \\" \5      \" \K5      /\$RØ                  l_        \\$RÚ                  l^        \\\" \5      /\$RÚ                  l_        \\$RÜ                  l^        \\\" \5      /\$RÜ                  l_        \\$RÞ                  l^        \\" \" \5      5      \" \" \5      5      /\$RÞ                  l_        \\$Rà                  l^        \\/\$Rà                  l_        \\$Râ                  l^        \\\" \5      /\$Râ                  l_        \\$Rä                  l^        \\/\$Rä                  l_        \\$Ræ                  l^        \/\$Ræ                  l_        \\$Rè                  l^        / \$Rè                  l_        \\$Rê                  l^        \/\$Rê                  l_        \\$Rì                  l^        / \$Rì                  l_        \\$Rî                  l^        \\\" \5      /\$Rî                  l_        \\$Rð                  l^        \\\" \5      /\$Rð                  l_        \\$Rò                  l^        \\" \85      \/\$Rò                  l_        \\$Rô                  l^        \\" \95      \" \95      /\$Rô                  l_        \\$Rö                  l^        \/\$Rö                  l_        \\$Rø                  l^        \\\/\$Rø                  l_        \\$Rú                  l^        / \$Rú                  l_        \\$Rü                  l^        \/\$Rü                  l_        \\$Rþ                  l^        \/\$Rþ                  l_        \\$GR                   l^        \" \5      /\$GR                   l_        \" \:5      \$GR                  l^        \" \5      \" \:5      /\$GR                  l_        \\$GR                  l^        \" \5      \/\$GR                  l_        \\$GR                  l^        \\" \5      \" \" \G5      5      /\$GR                  l_        \\$GR                  l^        \\" \5      \" \" \H5      5      /\$GR                  l_        \\$GR
                  l^        \\" \5      \" \" \H5      5      /\$GR
                  l_        S\$GR                  l^        \" \G5      /\$GR                  l_        S\$GR                  l^        \" \H5      /\$GR                  l_        \\$GR                  l^        \" \G5      /\$GR                  l_        \\$GR                  l^        \" \H5      /\$GR                  l_        \\$GR                  l^        \" \S5      /\$GR                  l_        \\$GR                  l^        \" \85      /\$GR                  l_        \\$GR                  l^        \" \T5      /\$GR                  l_        \\$GR                  l^        \" \95      /\$GR                  l_        \\$GR                  l^        \\" \" \5      5      \" \" \5      5      /\$GR                  l_        \\$GR                  l^        \\/\$Rà                  l_        \J\/\$GR                  l_        \\$GR                   l^        \J\/\$GR                   l_        \\$GR"                  l^        \" \" \G5      5      /\$GR"                  l_        \\$GR$                  l^        \" \" \H5      5      /\$GR$                  l_        \\$GR&                  l^        \/\$GR&                  l_        \\$GR(                  l^        \\\/\$GR(                  l_        \\$GR*                  l^        \\" \?5      \\" \;5      \/\$GR*                  l_        \\$GR,                  l^        \\" \;5      \" \<5      \" \;5      \" \<5      /\$GR,                  l_        \\$GR.                  l^        \" \<5      \\/\$GR.                  l_        \\$GR0                  l^        \\\/\$GR0                  l_        \\$GR2                  l^        \\\/\$GR2                  l_        \\$GR4                  l^        \/\$GR4                  l_        \\$GR6                  l^        \/\$GR6                  l_        \\$GR8                  l^        \/\$GR8                  l_        \\$GR:                  l^        \\\/\$GR:                  l_        \\$GR<                  l^        \\/\$GR<                  l_        \\$GR>                  l^        \/\$GR>                  l_        \\$GR@                  l^        \/\$GR@                  l_        \\$GRB                  l^        \\\/\$GRB                  l_        \\$GRD                  l^        \\\/\$GRD                  l_        \\$GRF                  l^        \" \;5      \\\/\$GRF                  l_        \\$GRH                  l^        \\\/\$GRH                  l_        S\$GRJ                  l^        \\\\" \?5      \/\$GRJ                  l_        \\$GRL                  l^        \\" \95      \" \5      /\$GRL                  l_        \\$GRN                  l^        \\" \85      \" \5      /\$GRN                  l_        \\$GRP                  l^        \\\\" \" \R5      5      \" \5      /\$GRP                  l_        \\$GRR                  l^        / \$GRR                  l_        \\$GRT                  l^        \/\$GRT                  l_        S\$GRV                  l^        \" \H5      /\$GRV                  l_        S\$GRX                  l^        \" \G5      /\$GRX                  l_        \\$GRZ                  l^        \\" \" \\5      5      /\$GRZ                  l_        \\$GR\                  l^        \\" \" \\5      5      /\$GR\                  l_        \\$GR^                  l^        \\" \" \\5      5      /\$GR^                  l_        \\$GR`                  l^        \\" \" \\5      5      /\$GR`                  l_        \\$GRb                  l^        \\" \" \\5      5      /\$GRb                  l_        \\$GRd                  l^        \\" \" \\5      5      /\$GRd                  l_        \\$GRf                  l^        \" \" \\5      5      /\$GRf                  l_        \\$GRh                  l^        \" \5      \\\/\$GRh                  l_        \" \\" \U5      \\5      rµ\\$GRl                  l^        \" \" \\5      5      \\\\µ\/\$GRl                  l_        S\$GRn                  l^        \" \\5      \/\$GRn                  l_         " SI SJ\¸5      r¹ " SK SL\¸5      rº\\$GRv                  l^        \" \5      \\/\$GRv                  l_        \\$GRx                  l^        \/\$GRx                  l_        \\$GRz                  l^        \/\$GRz                  l_        \\$GR|                  l^        \/\$GR|                  l_        \\$GR~                  l^        \\\\\" \;5      \\" \5      /\$GR~                  l_        \\$GR€                  l^        \\\\" \5      \" \5      \" \;5      \\" \5      \\" \5      \" \5      /\$GR€                  l_        \\$GR‚                  l^        \\\\\\" \95      \" \;5      \\" \5      \\" \5      \" \5      /\$GR‚                  l_        \\$GR„                  l^        \\" \85      /\$GR„                  l_        \\$GR†                  l^        \\" \95      /\$GR†                  l_        \\$GRˆ                  l^        \/\$GRˆ                  l_         " SM SN\¸5      rÅg)Oaì  Wrapper module for LIBPCP - the core Performace Co-Pilot API
#
# Copyright (C) 2012-2024 Red Hat
# Copyright (C) 2009-2012 Michael T. Werner
#
# This file is part of the "pcp" module, the python interfaces for the
# Performance Co-Pilot toolkit.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#

# Additional Information:
#
# Performance Co-Pilot Web Site
# https://pcp.io
#
# Performance Co-Pilot Programmer's Guide
# cf. Chapter 3. PMAPI - The Performance Metrics API
#
# EXAMPLE

    from pcp import pmapi
    import cpmapi as c_api

    # Create a pcp class
    context = pmapi.pmContext(c_api.PM_CONTEXT_HOST, "local:")

    # Get ids for number cpus and load metrics
    metric_ids = context.pmLookupName(("hinv.ncpu","kernel.all.load"))
    # Get the description of the metrics
    descs = context.pmLookupDescs(metric_ids)
    # Fetch the current value for number cpus
    results = context.pmFetch(metric_ids)
    # Extract the value into a scalar value
    atom = context.pmExtractValue(results.contents.get_valfmt(0),
                                  results.contents.get_vlist(0, 0),
                                  descs[0].contents.type,
                                  c_api.PM_TYPE_U32)
    print "#cpus=", atom.ul

    # Get the instance ids for kernel.all.load
    inst1 = context.pmLookupInDom(descs[1], "1 minute")
    inst5 = context.pmLookupInDom(descs[1], "5 minute")

    # Loop through the metric ids
    for i in range(results.contents.numpmid):
        # Is this the kernel.all.load id?
        if (results.contents.get_pmid(i) != metric_ids[1]):
            continue
        # Extract the kernel.all.load instance
        for j in range(results.contents.get_numval(i) - 1):
            atom = context.pmExtractValue(results.contents.get_valfmt(i),
                                          results.contents.get_vlist(i, j),
                                          descs[i].contents.type,
                                          c_api.PM_TYPE_FLOAT)
            value = atom.f
            if results.contents.get_inst(i, j) == inst1:
                print "load average 1=",atom.f
            elif results.contents.get_inst(i, j) == inst5:
                print "load average 5=",atom.f


    # ... or, using the fetchgroup interface:

    from pcp import pmapi
    import cpmapi as c_api

    pmfg = pmapi.fetchgroup(c_api.PM_CONTEXT_HOST, "local:")
    v = pmfg.extend_item("hinv.ncpu")
    vv = pmfg.extend_indom("kernel.all.load", c_api.PM_TYPE_FLOAT)
    vvv = pmfg.extend_event("systemd.journal.records", field="systemd.journal.field.string")
    t = pmfg.extend_timestamp()

    pmfg.fetch()
    print("time: %s" % t())
    print("number of cpus: %d" % v())
    for icode, iname, value in vv():
        print("load average %s: %f" % (iname, value()))
    for ts, line in vvv():
        print("%s : %s" % (ts, line()))
é    N)Údatetime)Úmodf)Úc_charÚc_intÚc_uintÚc_longÚc_char_pÚc_void_p)Úc_floatÚc_doubleÚc_int32Úc_uint32Úc_int64Úc_uint64)ÚCDLLÚPOINTERÚ	CFUNCTYPEÚ	StructureÚUnion)Ú	addressofÚpointerÚsizeofÚcastÚbyref)Úfind_libraryÚpcpÚwin32ÚcÚmsvcrtÚ3c                 ó  • [         R                  S:¼  a„  [        [        R                  R
                  l        [        R                  /[        R                  R
                  l        [        R                  " [        R                  R                  U 5      SSS9$ [        [        R                  R                  l        [        R                  /[        R                  R                  l        [        R                  R                  U 5      $ )Nr    ÚrF)Úclosefd)ÚsysÚversionr   ÚctypesÚ	pythonapiÚPyObject_AsFileDescriptorÚrestypeÚ	py_objectÚargtypesÚosÚfdopenr
   ÚPyFile_AsFile)ÚfileObjs    Ú+/usr/lib/python3/dist-packages/pcp/pmapi.pyÚpyFileToCFiler1   ˆ   s¬   € Ü
‡{�{�cÓÜ=BŒ×Ñ×2Ñ2Ô:Ü?E×?OÑ?OÐ>PŒ×Ñ×2Ñ2Ô;Ü�yŠyœ×)Ñ)×CÑCÀGÓLÈcÐ[`ÑaÐaä19Œ×Ñ×&Ñ&Ô.Ü39×3CÑ3CÐ2DŒ×Ñ×&Ñ&Ô/Ü×Ñ×-Ñ-¨gÓ6Ð6ó    c                   ó@   ^ • \ rS rSrU 4S jrS rS rS rS rSr	U =r
$ )ÚpmErré˜   c                 óª   >• [         [        U ]
  " U6   [        U5      U l        U(       a#  [        US   [        5      (       a  US   U l        g SU l        g ©Nr   )Úsuperr4   Ú__init__ÚlistÚargsÚ
isinstanceÚintÚcode©Úselfr;   Ú	__class__s     €r0   r9   ÚpmErr.__init__™   sB   ø€ ÜŒe�TÒ# TÑ*Ü˜“JˆŒ	Þ”J˜t A™w¬×,Ñ,Ø˜Q™ˆD�IàˆD�Ir2   c                 ó¶   • S n [         R                  U R                     nUc  U R	                  5       $ U< SU R	                  5       < 3$ ! [         a     N6f = f)NÚ )Úc_apiÚpmErrSymDictr>   ÚKeyErrorÚmessage)r@   ÚerrSyms     r0   Ú__str__ÚpmErr.__str__¡   sX   € Øˆð	Ü×'Ñ'¨¯	©	Ñ2ˆFð ‰>Ø—<‘<“>Ð!Û  $§,¡,¥.Ð1Ð1øô	 ó 	Ùð	ús   „A Á
AÁAc                 óf  • [         R                  " [        R                  5      n[        R                  U R                  U[        R                  5      n[        UR                  5       5      n[        S[        U R                  5      5       H!  nUS[        U R                  U   5      -   -  nM#     U$ )Né   rD   )r&   Úcreate_string_bufferrE   ÚPM_MAXERRMSGLENÚLIBPCPÚ
pmErrStr_rr>   ÚstrÚdecodeÚrangeÚlenr;   )r@   ÚerrStrÚresultÚindexs       r0   rH   ÚpmErr.message«   s�   € Ü×,Ò,¬U×-BÑ-BÓCˆÜ×"Ñ" 4§9¡9¨f´e×6KÑ6KÓLˆÜ�V—]‘]“_Ó%ˆÜ˜1œc $§)¡)›nÖ-ˆEØ�cœC §	¡	¨%Ñ 0Ó1Ñ1Ñ1ŠFñ .àˆr2   c                 óz   • [        [        R                  " [        S5      R                  R                  5       5      $ ©NÚ
pmProgname©rR   r	   Úin_dllrP   ÚvaluerS   ©r@   s    r0   ÚprognameÚpmErr.progname³   s'   € Ü”8—?’?¤6¨<Ó8×>Ñ>×EÑEÓGÓHÐHr2   c                 ó   • U R                   $ ©N)r>   r`   s    r0   ÚerrnoÚpmErr.errno¶   ó   € Ø�y‰yÐr2   )r;   r>   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r9   rJ   rH   ra   re   Ú__static_attributes__Ú__classcell__©rA   s   @r0   r4   r4   ˜   s"   ø† õò2òòI÷ð r2   r4   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )Ú
pmUsageErré¹   c                 óH   >• [         [        U ]
  " U6   [        U5      U l        g rd   )r8   rp   r9   r:   r;   r?   s     €r0   r9   ÚpmUsageErr.__init__º   s   ø€ ÜŒj˜$Ò(¨$Ñ/Ü˜“Jˆ�	r2   c                 óì   • [        S[        U R                  5      5       H=  n[        R	                  [        U R                  U   5      R                  S5      5        M?     [        R                  " 5       $ )Nr   úutf-8)	rT   rU   r;   rP   ÚpmprintfrR   ÚencoderE   ÚpmUsageMessage)r@   rX   s     r0   rH   ÚpmUsageErr.message¾   sO   € Ü˜1œc $§)¡)›nÖ-ˆEÜ�O‰OœC §	¡	¨%Ñ 0Ó1×8Ñ8¸ÓAÖBñ .ä×#Ò#Ó%Ð%r2   )r;   )rh   ri   rj   rk   r9   rH   rl   rm   rn   s   @r0   rp   rp   ¹   s   ø† õ÷&ð &r2   rp   é   é   zUnexpected suseconds_t sizezUnexpected time_t sizec                   óh   • \ rS rSrS\4S\4/rSS jr\S 5       r	S r
S rS	 rS
 rS rS rS rSrg)Útimevaléä   Útv_secÚtv_usecNc                 ób  • [         R                  " U 5        Ucv  [        U[        5      (       a1  [        R                  " S5      n[        X-
  R                  5       5      n[        U[
        5      (       a  [        U5      nUS   nUS   S-  nOSn[        U5      U l	        [        U5      U l
        g )Nr   rM   i@B )r   r9   r<   r   ÚutcfromtimestampÚfloatÚtotal_secondsr   r=   r   r€   )r@   ÚsecÚusecÚepochÚtss        r0   r9   Útimeval.__init__è   sŽ   € Ü×Ò˜4Ô Ø‰<Ü˜#œx×(Ñ(Ü ×1Ò1°!Ó4�Ü˜S™[×7Ñ7Ó9Ó:�Ü˜#œu×%Ñ%Ü˜#“Y�Ø˜‘e�Ø˜!‘u˜w‘‘à�Ü˜#“hˆŒÜ˜4“yˆ�r2   c                 óè   • U " 5       n[        5       n[        U[        5      (       d  UR                  S5      n[        R                  U[        U5      [        U5      5      nUS:  a  [        XC5      eU$ ©z6Construct timeval from a string using pmParseInterval ru   r   )r	   r<   Úbytesrw   rP   ÚpmParseIntervalr   r4   )ÚclsÚintervalÚtvpÚerrmsgÚstatuss        r0   ÚfromIntervalÚtimeval.fromInterval÷   s`   € ñ ‹eˆÜ“ˆÜ˜(¤E×*Ñ*Ø—‘ wÓ/ˆHÜ×'Ñ'¨´%¸³*¼eÀF»mÓLˆØ�A‹:Ü˜Ó'Ð'Øˆ
r2   c                 ó^   • S[         R                  " U R                  U R                  5      -  $ ©Nz%.3f)rE   ÚpmtimevalToRealr   r€   r`   s    r0   rJ   Útimeval.__str__  s"   € Øœ×-Ò-¨d¯k©k¸4¿<¹<ÓHÑHÐHr2   c                 ój   • [        [        R                  " U R                  U R                  5      5      $ rd   )rƒ   rE   r—   r   r€   r`   s    r0   Ú	__float__Útimeval.__float__  s"   € Ü”U×*Ò*¨4¯;©;¸¿¹ÓEÓFÐFr2   c                 ój   • [        [        R                  " U R                  U R                  5      5      $ rd   )ÚcomplexrE   r—   r   r€   r`   s    r0   Ú__complex__Útimeval.__complex__	  s"   € Ü”u×,Ò,¨T¯[©[¸$¿,¹,ÓGÓHÐHr2   c                 ó,   • [        U R                  5      $ rd   ©r=   r   r`   s    r0   Ú	__index__Útimeval.__index__  ó   € Ü�4—;‘;ÓÐr2   c                 ó,   • [        U R                  5      $ rd   ©Úlongr   r`   s    r0   Ú__long__Útimeval.__long__  ó   € Ü�D—K‘KÓ Ð r2   c                 ó,   • [        U R                  5      $ rd   r¡   r`   s    r0   Ú__int__Útimeval.__int__  r¤   r2   c                 óB   • [         R                  " [        U 5      5        g)z8Delay for the amount of time specified by this timeval. N©ÚtimeÚsleeprƒ   r`   s    r0   r±   Útimeval.sleep  ó   € ä�
Š
”5˜“;Õr2   )r   r€   ©r   N)rh   ri   rj   rk   Úc_time_tÚc_suseconds_tÚ_fields_r9   Úclassmethodr“   rJ   rš   rž   r¢   r¨   r¬   r±   rl   © r2   r0   r}   r}   ä   sX   † Ø˜8Ð$Ø˜MÐ*ð,€Hô!ð ñ	ó ð	òIòGòIò ò!ò õ r2   r}   c                   óh   • \ rS rSrS\4S\4/rSS jr\S 5       r	S r
S rS	 rS
 rS rS rS rSrg)Útimespeci  r   Útv_nsecNc                 ó^  • [         R                  " U 5        Ucˆ  [        U[        5      (       a1  [        R                  " S5      n[        X-
  R                  5       5      n[        U[
        5      (       a+  [        U5      n[        US   5      n[        US   S-  5      nOSnXl	        X l
        g )Nr   rM   i Êš;)r   r9   r<   r   r‚   rƒ   r„   r   r=   r   r¼   )r@   r…   Únsecr‡   rˆ   s        r0   r9   Útimespec.__init__  sŒ   € Ü×Ò˜4Ô Ø‰<Ü˜#œx×(Ñ(Ü ×1Ò1°!Ó4�Ü˜S™[×7Ñ7Ó9Ó:�Ü˜#œu×%Ñ%Ü˜#“Y�Ü˜"˜Q™%“j�Ü˜2˜a™5 :Ñ-Ó.‘à�ØŒØ�r2   c                 óè   • U " 5       n[        5       n[        U[        5      (       d  UR                  S5      n[        R                  U[        U5      [        U5      5      nUS:  a  [        XC5      eU$ r‹   )r	   r<   rŒ   rw   rP   ÚpmParseHighResIntervalr   r4   )rŽ   r�   Útspr‘   r’   s        r0   r“   Útimespec.fromInterval,  s`   € ñ ‹eˆÜ“ˆÜ˜(¤E×*Ñ*Ø—‘ wÓ/ˆHÜ×.Ñ.¨x¼¸s»ÄUÈ6Ã]ÓSˆØ�A‹:Ü˜Ó'Ð'Øˆ
r2   c                 ó^   • S[         R                  " U R                  U R                  5      -  $ r–   )rE   ÚpmtimespecToRealr   r¼   r`   s    r0   rJ   Útimespec.__str__8  s"   € Øœ×.Ò.¨t¯{©{¸D¿L¹LÓIÑIÐIr2   c                 ój   • [        [        R                  " U R                  U R                  5      5      $ rd   )rƒ   rE   rÅ   r   r¼   r`   s    r0   rš   Útimespec.__float__;  s"   € Ü”U×+Ò+¨D¯K©K¸¿¹ÓFÓGÐGr2   c                 ój   • [        [        R                  " U R                  U R                  5      5      $ rd   )r�   rE   rÅ   r   r¼   r`   s    r0   rž   Útimespec.__complex__>  s"   € Ü”u×-Ò-¨d¯k©k¸4¿<¹<ÓHÓIÐIr2   c                 ó,   • [        U R                  5      $ rd   r¡   r`   s    r0   r¢   Útimespec.__index__A  r¤   r2   c                 ó,   • [        U R                  5      $ rd   r¦   r`   s    r0   r¨   Útimespec.__long__D  rª   r2   c                 ó,   • [        U R                  5      $ rd   r¡   r`   s    r0   r¬   Útimespec.__int__G  r¤   r2   c                 óB   • [         R                  " [        U 5      5        g)z9Delay for the amount of time specified by this timespec. Nr¯   r`   s    r0   r±   Útimespec.sleepJ  r³   r2   )r¼   r   r´   )rh   ri   rj   rk   rµ   r   r·   r9   r¸   r“   rJ   rš   rž   r¢   r¨   r¬   r±   rl   r¹   r2   r0   r»   r»     sX   † Ø˜8Ð$Ø˜FÐ#ð%€Hôð ñ	ó ð	òJòHòJò ò!ò õ r2   r»   c                   óf   • \ rS rSrS\4S\4S\4S\4S\4S\4S\4S	\4S
\4S\4S\4/rS rS r	Sr
g)ÚtmiN  Útm_secÚtm_minÚtm_hourÚtm_mdayÚtm_monÚtm_yearÚtm_wdayÚtm_ydayÚtm_isdstÚ	tm_gmtoffÚtm_zonec           	      ó"  • U R                   S-
  nUS:  a  SnU R                  S-   U R                  S-   U R                  U R                  U R
                  U R                  XR                  S-   U R                  /	n[        R                  " U5      $ )NrM   r   é   él  )rÛ   rÚ   rÙ   rØ   r×   rÖ   rÕ   rÜ   rÝ   r°   Ústruct_time)r@   ÚpywdayÚstlists      r0   rã   Útm.struct_time[  sy   € ð —‘ Ñ!ˆØ�A‹:ØˆFØ—,‘, Ñ% t§{¡{°Q¡¸¿¹Ø—,‘, §¡¨T¯[©[ØŸ,™,¨Ñ*¨D¯M©Mð;ˆô ×Ò Ó'Ð'r2   c                 ó6  • [         R                  " S5      n[        R                  " U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  [        U R                  5      [        U R                   5      5      n[#        [        U5      5      n[$        R'                  [)        U5      U5        [        UR*                  R-                  5       5      R/                  5       $ )Né    )r&   rN   rE   ÚpmMktimerÕ   rÖ   r×   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   r§   rÞ   rR   rß   r   rP   ÚpmCtimer   r_   rS   Úrstrip)r@   rW   ÚsecondÚtimetps       r0   rJ   Ú
tm.__str__f  sµ   € ô ×,Ò,¨RÓ0ˆÜ—’ §¡¨T¯[©[¸$¿,¹,Ø $§¡¨d¯k©k¸4¿<¹<Ø $§¡¨d¯l©l¸D¿M¹MÜ $ T§^¡^Ó 4´c¸$¿,¹,Ó6GóIˆô œ˜V›Ó%ˆÜ�‰”u˜V“} fÔ-Ü�6—<‘<×&Ñ&Ó(Ó)×0Ñ0Ó2Ð2r2   r¹   N)rh   ri   rj   rk   r   r   r	   r·   rã   rJ   rl   r¹   r2   r0   rÔ   rÔ   N  sk   † Ø˜5Ð!Ø˜5Ð!Ø˜EÐ"Ø˜EÐ"Ø˜5Ð!Ø˜EÐ"Ø˜EÐ"Ø˜EÐ"Ø˜UÐ#Ø˜fÐ%Ø˜HÐ%ð
'€Hò	(õ3r2   rÔ   c                   ó¨  • \ rS rSrSrS\4S\4S\4S\4S\	4S\
4S	\4S
\4/r\R                  S \R                   S \R"                  S \R$                  S \R&                  S \R(                  S \R*                  S \R,                  S \R.                  S \R0                  S \R2                  S \R4                  S \R6                  S 0rS rSrg)ÚpmAtomValueiw  z|Union used for unpacking metric values according to type

Constants for specifying metric types are defined in module pmapi
ÚlÚulÚllÚullÚfÚdÚcpÚvpc                 ó   • U R                   $ rd   )rñ   ©Úxs    r0   Ú<lambda>ÚpmAtomValue.<lambda>…  s   € ¨q¯sªsr2   c                 ó   • U R                   $ rd   )rò   rú   s    r0   rü   rý   †  s   € °·²r2   c                 ó   • U R                   $ rd   )ró   rú   s    r0   rü   rý   ‡  s   € ¨q¯tªtr2   c                 ó   • U R                   $ rd   )rô   rú   s    r0   rü   rý   ˆ  s   € °·²r2   c                 ó   • U R                   $ rd   )rõ   rú   s    r0   rü   rý   ‰  s   € °!·#²#r2   c                 ó   • U R                   $ rd   )rö   rú   s    r0   rü   rý   Š  s   € °1·3²3r2   c                 ó   • U R                   $ rd   )r÷   rú   s    r0   rü   rý   ‹  s   € °1·4²4r2   c                 ó   • g rd   r¹   rú   s    r0   rü   rý   Œ  ó   € °dr2   c                 ó   • g rd   r¹   rú   s    r0   rü   rý   �  s   € ¸Tr2   c                 ó   • g rd   r¹   rú   s    r0   rü   rý   Ž  s   € °$r2   c                 ó   • g rd   r¹   rú   s    r0   rü   rý   �  s   € ¸$r2   c                 ó   • g rd   r¹   rú   s    r0   rü   rý   �  r  r2   c                 ó   • g rd   r¹   rú   s    r0   rü   rý   ‘  s   € °Dr2   c                 óÊ   • U R                   U   " U 5      nU[        R                  :X  a   [        UR	                  S5      5      nU$ U$ ! [
         a    [        U5      n U$ f = f)Nru   )Ú
_atomDrefDrE   ÚPM_TYPE_STRINGrR   rS   Ú	Exception)r@   Útypedr_   s      r0   ÚdrefÚpmAtomValue.dref”  se   € Ø—‘ Ò& tÓ,ˆØ”E×(Ñ(Ó(ð#Ü˜EŸL™L¨Ó1Ó2�ð ˆˆuˆøô ó #Ü˜E›
‘Øˆð#ús   «A	 Á	A"Á!A"r¹   N)rh   ri   rj   rk   Ú__doc__r   r   r   r   r   r   r	   r
   r·   rE   Ú
PM_TYPE_32ÚPM_TYPE_U32Ú
PM_TYPE_64ÚPM_TYPE_U64ÚPM_TYPE_FLOATÚPM_TYPE_DOUBLEr  ÚPM_TYPE_AGGREGATEÚPM_TYPE_AGGREGATE_STATICÚPM_TYPE_EVENTÚPM_TYPE_HIGHRES_EVENTÚPM_TYPE_NOSUPPORTÚPM_TYPE_UNKNOWNr  r  rl   r¹   r2   r0   rð   rð   w  sé   † ñð �g�Ø�xÐ Ø�w�Ø˜Ð!Ø�g�Ø�h�Ø�xÐ Ø�xÐ ð"€Hð ×"Ñ"¡]Ø×#Ñ#¡nØ×"Ñ"¡^Ø×#Ñ#¡oØ×%Ñ%©Ø×&Ñ&©Ø×&Ñ&©Ø×)Ñ)©NØ×0Ñ0±>Ø×%Ñ%©Ø×-Ñ-±Ø×)Ñ)©NØ×'Ñ'©.ð€Jõr2   rð   c            	       óÊ   • \ rS rSrSr\R                  (       a  S\S4S\S4S\S4S\S4S\S4S	\S4S
\S4/rOS
\S4S	\S4S\S4S\S4S\S4S\S4S\S4/rSS jr	S r
S rSrg)ÚpmUnitsi�  z¿
Compiler-specific bitfields specifying scale and dimension of metric values
Constants for specifying metric units are defined in module pmapi
IRIX => HAVE_BITFIELDS_LTOR, gcc => not so much
ÚdimSpacerz   ÚdimTimeÚdimCountÚ
scaleSpaceÚ	scaleTimeÚ
scaleCountÚpadr{   c                 ó†   • [         R                  " U 5        Xl        X l        X0l        X@l        XPl        X`l        SU l        g r7   )	r   r9   r!  r"  r#  r$  r%  r&  r'  )r@   ÚdimSÚdimTÚdimCÚscaleSÚscaleTÚscaleCs          r0   r9   ÚpmUnits.__init__´  s5   € Ü×Ò˜4Ô ØŒØŒØŒØ ŒØŒØ ŒØˆ�r2   c                 ó°   • [         R                  " U R                  U R                  U R                  U R
                  U R                  U R                  5      $ rd   )rE   ÚpmUnits_intr!  r"  r#  r$  r%  r&  r`   s    r0   r¬   ÚpmUnits.__int__¾  s<   € Ü× Ò  §¡°·±¸d¿m¹mØ!%§¡°$·.±.À$Ç/Á/óSð 	Sr2   c                 óŒ   • [         R                  " S5      n[        R                  XS5      n[	        UR                  5       5      $ )Né@   ©r&   rN   rP   ÚpmUnitsStr_rrR   rS   )r@   ÚunitstrrW   s      r0   rJ   ÚpmUnits.__str__Â  s5   € Ü×-Ò-¨bÓ1ˆÜ×$Ñ$ T°BÓ7ˆÜ�6—=‘=“?Ó#Ð#r2   )r#  r!  r"  r'  r&  r$  r%  N)r   r   r   r   r   r   )rh   ri   rj   rk   r  rE   ÚHAVE_BITFIELDS_LTORr   r·   r9   r¬   rJ   rl   r¹   r2   r0   r   r   �  s¾   † ñð
 × × Ø ¨Ð*Ø  qÐ)Ø ¨Ð*Ø! 5¨!Ð,Ø  %¨Ð+Ø! 5¨!Ð,Ø˜E 1Ð%ð'‰ð ˜E 1Ð%Ø! 5¨!Ð,Ø  %¨Ð+Ø! 5¨!Ð,Ø ¨Ð*Ø  qÐ)Ø ¨Ð*ð,ˆôòSõ$r2   r   c                   ó€   • \ rS rSrSr\R                  (       a  S\S4S\S4S\S-  4/r	S	r
g
S\S4S\S4S\S-  4/r	S	r
g
)ÚpmValueBlockiÇ  zÕValue block bitfields for different compilers
A value block holds the value of an instance of a metric
pointed to by the pmValue structure, when that value is
too large (> 32 bits) to fit in the pmValue structure
Úvtyper{   Úvlené   ÚvbufrM   r¹   N)rh   ri   rj   rk   r  rE   r9  r   r   r·   rl   r¹   r2   r0   r;  r;  Ç  sb   † ñð
 × × Ø˜f aÐ(Ø˜V RÐ(Ø˜V a™ZÐ(ð*‹ð ˜V RÐ(Ø˜f aÐ(Ø˜V a™ZÐ(ð*‹r2   r;  c                   ó:   • \ rS rSrSrS\" \5      4S\4/rS r	Sr
g)Ú	valueDrefiÖ  zÜUnion in pmValue for dereferencing the value of an instance of a metric

For small items, e.g. a 32-bit number, the union contains the actual value
For large items, e.g. a text string, the union points to a pmValueBlock
ÚpvalÚlvalc                 ó    • SU R                   -  $ )Nz
value=%#lx)rC  r`   s    r0   rJ   ÚvalueDref.__str__Þ  s   € Ø˜tŸy™yÑ)Ð)r2   r¹   N)rh   ri   rj   rk   r  r   r;  r   r·   rJ   rl   r¹   r2   r0   rA  rA  Ö  s)   † ñð
 ™ Ó.Ð/Ø˜�ð!€Hõ*r2   rA  c                   ó.   • \ rS rSrSrS\4S\4/rS rSr	g)ÚpmValueiá  z1Structure holding the value of a metric instance Úinstr_   c                 óf   • [        U R                  5      nS[        U 5      U R                  4-  U-   $ )NzpmValue@%#lx inst=%d )rR   r_   r   rH  )r@   Úvstrs     r0   rJ   ÚpmValue.__str__å  s,   € Ü�4—:‘:‹ˆØ&¬)°D«/¸4¿9¹9Ð)EÑEÈÑLÐLr2   r¹   N)
rh   ri   rj   rk   r  r   rA  r·   rJ   rl   r¹   r2   r0   rG  rG  á  s!   † Ù;Ø˜�Ø˜)Ð$ð&€HõMr2   rG  c                   ó\   • \ rS rSrSrS\4S\4S\4S\S-  4/rS r	S	 r
\" \
S
S
S
5      rSrg
)Ú
pmValueSetié  a½  Structure holding a metric's list of instance values

A performance metric may contain one or more instance values, one for each
item that the metric concerns. For example, a metric measuring filesystem
free space would contain one instance value for each filesystem that exists
on the target machine. Whereas, a metric measuring free memory would have
only one instance value, representing the total amount of free memory on
the target system.
ÚpmidÚnumvalÚvalfmtÚvlistrM   c           
      ó,  • U R                   S:X  a  [        U R                  5      n[        U Vs/ s H  nS[        U R                  U   5      -  PM      sn5      n[        U 5      U R                  U R                  U R                   4nSU-  U-   $ gs  snf )Nr   ú %sz+pmValueSet@%#lx id=%#lx numval=%d valfmt=%dÚ )rP  rT   rO  rR   rQ  r   rN  )r@   ÚvalsÚirJ  Úvsets        r0   rJ   ÚpmValueSet.__str__ø  s~   € Ø�;‰;˜!ÓÜ˜Ÿ™Ó%ˆDÜ¹DÓAºD°q˜¤ D§J¡J¨q¡MÓ 2Ô2¹DÑAÓBˆDÜ˜d“O T§Y¡Y°·±¸T¿[¹[ÐIˆDØ@À4ÑGÈ$ÑNÐNàùò	 Bs   ¯%Bc                 ó2   • [        U R                  S   5      $ r7   )r   Ú_vlistr`   s    r0   Ú
vlist_readÚpmValueSet.vlist_read  s   € Ü�t—{‘{ 1‘~Ó&Ð&r2   Nr¹   )rh   ri   rj   rk   r  r   r   rG  r·   rJ   r[  ÚpropertyrQ  rl   r¹   r2   r0   rM  rM  é  sP   † ñð ˜Ð Ø˜5Ð!Ø˜5Ð!Ø˜7 Q™;Ð(ð*€Hò
ò'ñ �Z  t¨TÓ2ƒEr2   rM  c                 ó.   • U R                   R                  $ rd   )ÚcontentsrN  rú   s    r0   rü   rü     s   € ¨¯
©
¯ªr2   c                 ó.   • U R                   R                  $ rd   )r_  rO  rú   s    r0   rü   rü   	  ó   € ¨!¯*©*×*;Ò*;r2   c                 ó.   • U R                   R                  $ rd   )r_  rP  rú   s    r0   rü   rü   
  ra  r2   c                 ó.   • U R                   R                  $ rd   )r_  rQ  rú   s    r0   rü   rü     s   € ¨¯©×)9Ò)9r2   c                   óp   • \ rS rSrSrS\4S\4S\" \5      S-  4/r	S r
S rS	 rS
 rS rS rS rS rSrg)ÚpmResulti  zÝStructure returned by pmFetch, with a value set for each metric queried

The vset is defined with a "fake" array bounds of 1, which can give runtime
array bounds complaints.  The getter methods are array bounds agnostic.
Ú	timestampÚnumpmidrW  rM   c                 ó>   • [         R                  " U 5        SU l        g r7   ©r   r9   rg  r`   s    r0   r9   ÚpmResult.__init__  ó   € Ü×Ò˜4Ô Øˆ�r2   c           
      óî   • [        U R                  5      n[        U Vs/ s H(  nS[        U R                  U   R                  5      -  PM*     sn5      nS[        U 5      U R                  4-  U-   $ s  snf )NrS  zpmResult@%#lx id#=%d ©rT   rg  rR   rW  r_  r   ©r@   rU  rV  rJ  s       r0   rJ   ÚpmResult.__str__  sd   € Ü�T—\‘\Ó"ˆÜÁÓEÂ¸1�EœC §	¡	¨!¡× 5Ñ 5Ó6Ô6ÁÑEÓFˆØ&¬)°D«/¸4¿<¹<Ð)HÑHÈ4ÑOÐOùò Fó   Ÿ/A2c                 óx   • [        U R                  [        [        5      5      nX!   R                  R
                  $ ©z"Return the pmid of vset[vset_idx] ©r   rW  r   ÚpmValueSetPtrr_  rN  ©r@   Úvset_idxÚvsetptrs      r0   Úget_pmidÚpmResult.get_pmid!  ó,   € ä�t—y‘y¤'¬-Ó"8Ó9ˆØÑ ×)Ñ)×.Ñ.Ð.r2   c                 óŠ   • [        U R                  [        [        [        5      5      5      nX!   R                  R
                  $ ©z$Return the valfmt of vset[vset_idx] ©r   rW  r   rM  r_  rP  ru  s      r0   Ú
get_valfmtÚpmResult.get_valfmt&  ó1   € ä�t—y‘y¤'¬'´*Ó*=Ó">Ó?ˆØÑ ×)Ñ)×0Ñ0Ð0r2   c                 óŠ   • [        U R                  [        [        [        5      5      5      nX!   R                  R
                  $ ©z$Return the numval of vset[vset_idx] ©r   rW  r   rM  r_  rO  ru  s      r0   Ú
get_numvalÚpmResult.get_numval+  r€  r2   c                 ób   • [        U R                  [        [        [        5      5      5      nX!   $ ©zReturn the vset[vset_idx] ©r   rW  r   rM  ru  s      r0   Úget_vsetÚpmResult.get_vset0  ó%   € ä�t—y‘y¤'¬'´*Ó*=Ó">Ó?ˆØÑ Ð r2   c                 ó‚   • [        U R                  U5      R                  R                  [	        [
        5      5      nX2   $ ©z.Return the vlist[vlist_idx] of vset[vset_idx] ©r   r‰  r_  rQ  r   rG  ©r@   rv  Ú	vlist_idxÚlistptrs       r0   Ú	get_vlistÚpmResult.get_vlist5  ó1   € ä�t—}‘} XÓ.×7Ñ7×=Ñ=¼wÄwÓ?OÓPˆØÑ!Ð!r2   c                 ó8   • U R                  X5      R                  $ ©z7Return the inst for vlist[vlist_idx] of vset[vset_idx] ©r’  rH  ©r@   rv  r�  s      r0   Úget_instÚpmResult.get_inst:  ó   € à�~‰~˜hÓ2×7Ñ7Ð7r2   ©rg  N)rh   ri   rj   rk   r  r}   r   r   rM  r·   r9   rJ   rx  r~  r„  r‰  r’  r™  rl   r¹   r2   r0   re  re    s[   † ñð
 ˜gÐ&Ø˜EÐ"à™' *Ó-°Ñ2Ð3ð5€HòòPò
/ò
1ò
1ò
!ò
"õ
8r2   re  c                   ó‚   • \ rS rSrSrS\4S\4S\" \5      S-  4/r	S r
S rS	 rS
 rS rS rS rS rS rS rS rSrg)ÚpmHighResResulti>  zHStructure returned by pmFetchHighRes, uses struct timespec for time
    rf  rg  rW  rM   c                 ó>   • [         R                  " U 5        SU l        g r7   ri  r`   s    r0   r9   ÚpmHighResResult.__init__E  rk  r2   c           
      óî   • [        U R                  5      n[        U Vs/ s H(  nS[        U R                  U   R                  5      -  PM*     sn5      nS[        U 5      U R                  4-  U-   $ s  snf )NrS  zpmHighResResult@%#lx id#=%d rm  rn  s       r0   rJ   ÚpmHighResResult.__str__I  se   € Ü�T—\‘\Ó"ˆÜÁÓEÂ¸1�EœC §	¡	¨!¡× 5Ñ 5Ó6Ô6ÁÑEÓFˆØ-´¸4³À$Ç,Á,Ð0OÑOÐRVÑVÐVùò Frp  c                 ó.   • U R                   R                  $ )z%Return the sec part of the timestamp )rf  r   r`   s    r0   Úget_secÚpmHighResResult.get_secN  s   € à�~‰~×$Ñ$Ð$r2   c                 ó.   • U R                   R                  $ )z&Return the nsec part of the timestamp )rf  r¼   r`   s    r0   Úget_nsecÚpmHighResResult.get_nsecR  s   € à�~‰~×%Ñ%Ð%r2   c                 ó   • U R                   $ )zReturn the number of pmids rœ  r`   s    r0   Úget_numpmidÚpmHighResResult.get_numpmidV  s   € à�|‰|Ðr2   c                 óx   • [        U R                  [        [        5      5      nX!   R                  R
                  $ rr  rs  ru  s      r0   rx  ÚpmHighResResult.get_pmidZ  rz  r2   c                 óŠ   • [        U R                  [        [        [        5      5      5      nX!   R                  R
                  $ r|  r}  ru  s      r0   r~  ÚpmHighResResult.get_valfmt_  r€  r2   c                 óŠ   • [        U R                  [        [        [        5      5      5      nX!   R                  R
                  $ r‚  rƒ  ru  s      r0   r„  ÚpmHighResResult.get_numvald  r€  r2   c                 ób   • [        U R                  [        [        [        5      5      5      nX!   $ r‡  rˆ  ru  s      r0   r‰  ÚpmHighResResult.get_vseti  r‹  r2   c                 ó‚   • [        U R                  U5      R                  R                  [	        [
        5      5      nX2   $ r�  rŽ  r�  s       r0   r’  ÚpmHighResResult.get_vlistn  r”  r2   c                 ó8   • U R                  X5      R                  $ r–  r—  r˜  s      r0   r™  ÚpmHighResResult.get_insts  r›  r2   rœ  N)rh   ri   rj   rk   r  r»   r   r   rM  r·   r9   rJ   r¤  r§  rª  rx  r~  r„  r‰  r’  r™  rl   r¹   r2   r0   rž  rž  >  sh   † ñà˜hÐ'Ø˜EÐ"à™' *Ó-°Ñ2Ð3ð5€HòòWò
%ò&òò/ò
1ò
1ò
!ò
"õ
8r2   rž  c                   ó@   • \ rS rSrSrS\4S\4S\4S\4S\4/rS r	S	r
g
)ÚpmDesciz  z"Structure describing a metric
    rN  ÚtypeÚindomÚsemÚunitsc                 óP   • [        U 5      U R                  U R                  4nSU-  $ )NzpmDesc@%#lx id=%#lx type=%d)r   rN  rº  )r@   Úfieldss     r0   rJ   ÚpmDesc.__str__‚  s%   € Ü˜D“/ 4§9¡9¨d¯i©iÐ8ˆØ,¨vÑ5Ð5r2   r¹   N)rh   ri   rj   rk   r  r   r   r   r·   rJ   rl   r¹   r2   r0   r¹  r¹  z  s9   † ñà˜Ð Ø˜�Ø˜&Ð!Ø˜�Ø˜'Ð"ð	$€Hõ
6r2   r¹  c                 ó.   • U R                   R                  $ rd   )r_  r¼  rú   s    r0   rü   rü   ‡  s   €  1§:¡:§>¢>r2   c                 ó.   • U R                   R                  $ rd   )r_  rº  rú   s    r0   rü   rü   ˆ  s   €  A§J¡J§O¢Or2   c                 ó.   • U R                   R                  $ rd   )r_  r»  rú   s    r0   rü   rü   ‰  ó   €  Q§Z¡Z×%5Ò%5r2   c                 ó.   • U R                   R                  $ rd   )r_  r½  rú   s    r0   rü   rü   Š  rÄ  r2   c                 óº   •  " S S[         5      n[        U [        [        5      5      (       a  U R                  R
                  $ U" 5       nXl        UR                  $ )zwInternal function to extract an indom from a pmdesc

Allow functions requiring an indom to be passed a pmDesc* instead
c                   ó0   • \ rS rSrS\" \5      4S\4/rSrg)Úget_indom.<locals>.Valuei’  rB  rC  r¹   N)	rh   ri   rj   rk   r   r¹  r   r·   rl   r¹   r2   r0   ÚValuerÈ  ’  s   † Ø™W V›_Ð-Ø˜VÐ$ð&‹r2   rÉ  )r   r<   r   r¹  r_  r»  rB  rC  )ÚpmdescrÉ  r_   s      r0   Ú	get_indomrË  �  sI   € ô
&”ô &ô �&œ'¤&›/×*Ñ*Ø�‰×$Ñ$Ð$ñ “ˆØŒ
Ø�z‰zÐr2   c                   ód   • \ rS rSrSrS\4S\4S\4S\4S\" \5      4/rSr	S	 r
\SS
 j5       rSrg)ÚpmMetricSpeci�  z.Structure describing a metric's specification ÚisarchÚsourceÚmetricÚninstrH  Nc                 ó¬   ^ • [        [        U 4S j[        T R                  5      5      5      n[	        T 5      T R
                  T R                  U4nSU-  $ )Nc                 ó4   >• [        TR                  U    5      $ rd   )rR   rH  )rû   r@   s    €r0   rü   Ú&pmMetricSpec.__str__.<locals>.<lambda>§  s   ø€ ¤3 t§y¡y°¡|Ô#4r2   z+pmMetricSpec@%#lx src=%s metric=%s insts=%s)r:   ÚmaprT   rÑ  r   rÎ  rÏ  )r@   Úinstsr¿  s   `  r0   rJ   ÚpmMetricSpec.__str__¦  sC   ø€ Ü”SÔ4´e¸D¿J¹JÓ6GÓHÓIˆÜ˜D“/ 4§;¡;°·±¸UÐCˆØ<¸vÑEÐEr2   c           	      ó¬  • [        U 5      " 5       n[        5       n[        U[        5      (       d  UR	                  S5      n[        U[        5      (       d  UR	                  S5      n[
        R                  " U5      n[
        R                  " U5      n[        R                  XbU[        U5      [        U5      5      nUS:  a  [        X…5      eXtl        U$ ©Nru   r   )r   r	   r<   rŒ   rw   r&   rN   rP   ÚpmParseMetricSpecr   r4   Úcsbuffer)	rŽ   ÚstringrÎ  rÏ  rW   r‘   ÚcstringÚcsourcer’   s	            r0   Ú
fromStringÚpmMetricSpec.fromString«  s¨   € ä˜”“ˆÜ“ˆÜ˜&¤%×(Ñ(Ø—]‘] 7Ó+ˆFÜ˜&¤%×(Ñ(Ø—]‘] 7Ó+ˆFÜ×-Ò-¨fÓ5ˆÜ×-Ò-¨fÓ5ˆÜ×)Ñ)¨'¸7Ü*/°«-¼¸v»óHˆà�A‹:Ü˜Ó'Ð'à!ŒØˆr2   r¹   ©r   rT  )rh   ri   rj   rk   r  r   r	   r   r·   rÛ  rJ   r¸   rß  rl   r¹   r2   r0   rÍ  rÍ  �  sZ   † Ù8Ø˜5Ð!Ø˜8Ð$Ø˜8Ð$Ø˜%Ð Ø™ Ó*Ð+ð	-€Hð
 €HòFð
 óó ór2   rÍ  c                   óz   • \ rS rSrSrS\4S\4S\4S\\R                  -  4S\\R                  -  4/rS rS	 rS
rg)Ú
pmLogLabeli½  z1Label record at the start of every (v2) log file ÚmagicÚpid_tÚstartÚhostnameÚtzc                 óH   • [        U R                  R                  5       5      $ ©z5Return the hostname from the structure as native str ©rR   rç  rS   r`   s    r0   Úget_hostnameÚpmLogLabel.get_hostnameÅ  ó   € ä�4—=‘=×'Ñ'Ó)Ó*Ð*r2   c                 óH   • [        U R                  R                  5       5      $ ©z5Return the timezone from the structure as native str )rR   rè  rS   r`   s    r0   Úget_timezoneÚpmLogLabel.get_timezoneÉ  s   € ä�4—7‘7—>‘>Ó#Ó$Ð$r2   r¹   N)rh   ri   rj   rk   r  r   r}   r   rE   ÚPM_LOG_MAXHOSTLENÚPM_TZ_MAXLENr·   rì  rñ  rl   r¹   r2   r0   rã  rã  ½  sT   † Ù;Ø˜%Ð Ø˜%Ð Ø˜'Ð"Ø˜V e×&=Ñ&=Ñ=Ð>Ø�v × 2Ñ 2Ñ2Ð3ð	5€Hò+õ%r2   rã  c                   ó    • \ rS rSrSrS\4S\4S\4S\\R                  -  4S\\R                  -  4S\\R                  -  4/rS	 rS
 rS rSrg)ÚpmHighResLogLabeliÍ  z1Label record at the start of every (v3) log file rä  rå  ræ  rç  ÚtimezoneÚzoneinfoc                 óH   • [        U R                  R                  5       5      $ rê  rë  r`   s    r0   rì  ÚpmHighResLogLabel.get_hostnameÖ  rî  r2   c                 óH   • [        U R                  R                  5       5      $ rð  )rR   r÷  rS   r`   s    r0   rñ  ÚpmHighResLogLabel.get_timezoneÚ  rî  r2   c                 óH   • [        U R                  R                  5       5      $ )z5Return the zoneinfo from the structure as native str )rR   rø  rS   r`   s    r0   Úget_zoneinfoÚpmHighResLogLabel.get_zoneinfoÞ  rî  r2   r¹   N)rh   ri   rj   rk   r  r   r»   r   rE   ÚPM_MAX_HOSTNAMELENÚPM_MAX_TIMEZONELENÚPM_MAX_ZONEINFOLENr·   rì  rñ  rþ  rl   r¹   r2   r0   rö  rö  Í  sm   † Ù;Ø˜%Ð Ø˜%Ð Ø˜(Ð#Ø˜V e×&>Ñ&>Ñ>Ð?Ø˜V e×&>Ñ&>Ñ>Ð?Ø˜V e×&>Ñ&>Ñ>Ð?ðA€Hò+ò+õ+r2   rö  c                   óJ   • \ rS rSrSrS\S4S\S4S\S4S\S4S	\S4/rS
 rSrg)ÚpmLabeliâ  z*Structure describing label's specificationÚnameé   Únamelenr{   Úflagsr_   Úvaluelenc                 óF   • U R                   S-   S-   U R                  -   S-   $ )NÚ:Ú")r  r_   r`   s    r0   rJ   ÚpmLabel.__str__é  s#   € Ø�y‰y˜3‰ Ñ$ t§z¡zÑ1°CÑ7Ð7r2   r¹   N)	rh   ri   rj   rk   r  r   r·   rJ   rl   r¹   r2   r0   r  r  â  sC   † Ù4Ø˜ Ð#Ø˜E 1Ð%Ø˜% Ð#Ø˜% Ð$Ø˜U BÐ'ð	)€Hõ
8r2   r  c                 ó.   • U R                   R                  $ rd   )r_  r  rú   s    r0   rü   rü   í  s   €  Q§Z¡Z§_¢_r2   c                 ó.   • U R                   R                  $ rd   )r_  r  rú   s    r0   rü   rü   î  s   € ¨¯
©
×(:Ò(:r2   c                 ó.   • U R                   R                  $ rd   )r_  r  rú   s    r0   rü   rü   ï  ó   €  a§j¡j×&6Ò&6r2   c                 ó.   • U R                   R                  $ rd   )r_  r_   rú   s    r0   rü   rü   ð  r  r2   c                 ó.   • U R                   R                  $ rd   )r_  r	  rú   s    r0   rü   rü   ñ  s   € ¨¯©×)<Ò)<r2   c            
       ód   • \ rS rSrSrS\4S\4S\4S\S4S\S	4S
\S4S\" \	5      4S\
4/rS rSrg)Ú
pmLabelSetió  z-Structure describing label set specificationsrH  ÚnlabelsÚjsonÚjsonlenr  Úpaddingé   ÚcompoundrM   ÚlabelsÚhashc                 óR   • U R                   c  gU R                   R                  5       $ )Nz{})r  rS   r`   s    r0   rJ   ÚpmLabelSet.__str__ý  s"   € Ø�9‰9ÑØØ�y‰y×ÑÓ!Ð!r2   r¹   N)rh   ri   rj   rk   r  r   r   r	   r   r  r
   r·   rJ   rl   r¹   r2   r0   r  r  ó  s\   † Ù8Ø˜Ð Ø˜EÐ"Ø˜Ð"Ø˜E 2Ð&Ø˜E 2Ð&Ø˜U AÐ&Ø™7 7Ó+Ð,Ø˜Ð"ð$€Hõ"r2   r  rM   c                   ó$  • \ rS rSrSrS rS rS rS r\	" \SSS5      r
\	" \SSS5      r\	" \\SS5      rSOS jrS	 r\S
 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%S  r&S! r'S" r(S# r)S$ r*S% r+S& r,S' r-S( r.S) r/S* r0S+ r1S, r2S- r3S. r4S/ r5S0 r6S1 r7S2 r8S3 r9S4 r:S5 r;S6 r<S7 r=S8 r>S9 r?S: r@S; rAS< rBS= rCS> rDS? rES@ rFSA rGSB rHSC rISD rJSE rKSF rLSG rMSH rNSI rOSJ rPSK rQSL rRSM rSSNrTg)PÚ	pmOptionsiC  z}Command line option parsing for short and long form arguments
Passed into pmGetOptions, pmGetContextOptions, pmUsageMessage.
c                 ó   • U R                   $ rd   )Ú_moder`   s    r0   Ú_R_modeÚpmOptions._R_modeJ  ó   € Ø�z‰zÐr2   c                 ó   • U R                   $ rd   )Ú_deltar`   s    r0   Ú_R_deltaÚpmOptions._R_deltaL  s   € Ø�{‰{Ðr2   c                 ó   • U R                   $ rd   ©Ú_need_resetr`   s    r0   Ú_R_need_resetÚpmOptions._R_need_resetN  s   € Ø×ÑÐr2   c                 ó   • Xl         g rd   r,  )r@   r_   s     r0   Ú_W_need_resetÚpmOptions._W_need_resetP  s   € Ø Õr2   Nc                 óZ  • [         R                  " 5         Ub  [         R                  " U5        Ub  [         R                  " U5        US:w  a  [         R                  " U5        O$[         R                  " [         R
                  5        SU l        [         R                  U l        SU l	        g )Nr   rM   F)
rE   ÚpmResetAllOptionsÚpmSetShortOptionsÚpmSetShortUsageÚpmSetOptionFlagsÚPM_OPTFLAG_BOUNDARIESr(  ÚPM_MODE_INTERPr#  r-  )r@   Úshort_optionsÚshort_usager  s       r0   r9   ÚpmOptions.__init__]  s{   € Ü×ÒÔ!ØÑ$Ü×#Ò# MÔ2ØÑ"Ü×!Ò! +Ô.Ø�A‹:Ü×"Ò" 5Õ)ä×"Ò"¤5×#>Ñ#>Ô?ØˆŒÜ×)Ñ)ˆŒ
Ø ˆÕr2   c                 ób   • [         b(  U R                  (       a  [        R                  " 5         g g g rd   )rP   r-  rE   r4  r`   s    r0   Ú__del__ÚpmOptions.__del__k  s$   € ÜÑ $×"2×"2Ü×#Ò#Õ%ð #3Ðr2   c                  ó,   • [         R                  " 5       $ )z=Cross-platform --daemonize (re-parent to init) option helper )rE   ÚpmServerStartr¹   r2   r0   Ú	daemonizeÚpmOptions.daemonizeo  s   € ô ×"Ò"Ó$Ð$r2   c                 ó,   • [         R                  " 5       $ rd   )rE   ÚpmGetOptionFlagsr`   s    r0   rE  ÚpmOptions.pmGetOptionFlagsw  ó   € Ü×%Ò%Ó'Ð'r2   c                 ó.   • [         R                  " U5      $ rd   )rE   ÚpmSetOptionContext)r@   Úcontexts     r0   rI  ÚpmOptions.pmSetOptionContextz  ó   € Ü×'Ò'¨Ó0Ð0r2   c                 ó.   • [         R                  " U5      $ rd   )rE   r7  )r@   r  s     r0   r7  ÚpmOptions.pmSetOptionFlags}  s   € Ü×%Ò% eÓ,Ð,r2   c                 ó,   • [         R                  " 5       $ rd   )rE   ÚpmGetOptionErrorsr`   s    r0   rP  ÚpmOptions.pmGetOptionErrors€  s   € Ü×&Ò&Ó(Ð(r2   c                 ó^   • [         R                  " 5       S-   n[         R                  " U5      $ ©NrM   )rE   rP  ÚpmSetOptionErrors)r@   Úerrorss     r0   rT  ÚpmOptions.pmSetOptionErrorsƒ  s&   € Ü×(Ò(Ó*¨QÑ.ˆÜ×&Ò& vÓ.Ð.r2   c                 ó.   • [         R                  " U5      $ rd   )rE   r6  )r@   r;  s     r0   r6  ÚpmOptions.pmSetShortUsage‡  s   € Ü×$Ò$ [Ó1Ð1r2   c                 ó.   • [         R                  " U5      $ rd   )rE   r5  )r@   r:  s     r0   r5  ÚpmOptions.pmSetShortOptionsŠ  s   € Ü×&Ò& }Ó5Ð5r2   c                 ó.   • [         R                  " U5      $ )z.Set sample count (converts string to integer) )rE   ÚpmSetOptionSamples)r@   Úcounts     r0   r\  ÚpmOptions.pmSetOptionSamples�  s   € ä×'Ò'¨Ó.Ð.r2   c                 ó.   • [         R                  " U5      $ )z6Set sampling interval (pmParseHighResInterval string) )rE   ÚpmSetOptionInterval)r@   r�   s     r0   r`  ÚpmOptions.pmSetOptionInterval‘  s   € ä×(Ò(¨Ó2Ð2r2   c                 ó,   • [         R                  " 5       $ )zôAfter a pmGetOptions(3) call has been made this method
returns a list of any remaining parameters which were
not parsed as command line options, aka "operands".
http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap03.html#tag_03_254
)rE   ÚpmGetOperandsr`   s    r0   rc  ÚpmOptions.pmGetOperands•  s   € ô ×"Ò"Ó$Ð$r2   c                 ó.   • [         R                  " U5      $ rd   ©rE   ÚpmGetNonOptionsFromList©r@   Úargvs     r0   rg  Ú!pmOptions.pmGetNonOptionsFromListž  ó   € Ü×,Ò,¨TÓ2Ð2r2   c                 ó.   • [         R                  " U5      $ rd   rf  rh  s     r0   ÚpmNonOptionsFromListÚpmOptions.pmNonOptionsFromList¢  rk  r2   c                 ó.   • [         R                  " U5      $ )ag  Handle individual command line options, outside of the PCP
"standard" set (or overridden).

For every non-standard or overridden option, this callback
will be called with the short option character (as an int)
or zero for long-option only, and the usual getopts global
state (optind, opterr, optopt, optarg, and index - all int
except optarg which is a str).
)rE   ÚpmSetOptionCallback©r@   Úfuncs     r0   rp  ÚpmOptions.pmSetOptionCallback¥  s   € ô ×(Ò(¨Ó.Ð.r2   c                 ó.   • [         R                  " U5      $ )a5  Allow a "standard" PCP option to be overridden.

For every option parsed, this callback is called and it may
return zero, meaning continue with processing the option in
the standard way, or non-zero, meaning the caller wishes to
override and interpret the option differently.
Callback input: int, output: int
)rE   ÚpmSetOverrideCallbackrq  s     r0   ru  ÚpmOptions.pmSetOverrideCallback±  s   € ô ×*Ò*¨4Ó0Ð0r2   c                 ó<   • Uc  Sn[         R                  " XX4U5      $ )zùAdd long option into the set of supported long options

Pass in the option name (str), whether it takes an argument (int),
its short option form (str), and two usage message hints (argname
(str) and message (str) - see pmGetOptions(3) for details).
rT  )rE   ÚpmSetLongOption)r@   Úlong_optÚhas_argÚ	short_optÚargnamerH   s         r0   rx  ÚpmOptions.pmSetLongOption¼  s$   € ð ÑØˆIÜ×$Ò$ X¸	ÈGÓTÐTr2   c                 ó.   • [         R                  " U5      $ )z=Add a new section heading into the long option usage message )rE   ÚpmSetLongOptionHeader)r@   Úheadings     r0   r  ÚpmOptions.pmSetLongOptionHeaderÇ  s   € ä×*Ò*¨7Ó3Ð3r2   c                 ó.   • [         R                  " U5      $ )z=Add some descriptive text into the long option usage message )rE   ÚpmSetLongOptionText)r@   Útexts     r0   rƒ  ÚpmOptions.pmSetLongOptionTextË  s   € ä×(Ò(¨Ó.Ð.r2   c                 ó,   • [         R                  " 5       $ )z3Add support for -A/--align into PMAPI monitor tool )rE   ÚpmSetLongOptionAlignr`   s    r0   r‡  ÚpmOptions.pmSetLongOptionAlignÏ  ó   € ä×)Ò)Ó+Ð+r2   c                 ó,   • [         R                  " 5       $ )z5Add support for -a/--archive into PMAPI monitor tool )rE   ÚpmSetLongOptionArchiver`   s    r0   r‹  Ú pmOptions.pmSetLongOptionArchiveÓ  ó   € ä×+Ò+Ó-Ð-r2   c                 ó,   • [         R                  " 5       $ )z3Add support for -D/--debug into PMAPI monitor tool )rE   ÚpmSetLongOptionDebugr`   s    r0   r�  ÚpmOptions.pmSetLongOptionDebug×  r‰  r2   c                 ó   • g©zUnimplemented Nr¹   r`   s    r0   ÚpmSetLongOptionGuiModeÚ pmOptions.pmSetLongOptionGuiModeÛ  ó   € àr2   c                 ó,   • [         R                  " 5       $ )z2Add support for -h/--host into PMAPI monitor tool )rE   ÚpmSetLongOptionHostr`   s    r0   r—  ÚpmOptions.pmSetLongOptionHostß  ó   € ä×(Ò(Ó*Ð*r2   c                 ó,   • [         R                  " 5       $ )z7Add support for -H/--hostsfile into PMAPI monitor tool )rE   ÚpmSetLongOptionHostsFiler`   s    r0   r›  Ú"pmOptions.pmSetLongOptionHostsFileã  ó   € ä×-Ò-Ó/Ð/r2   c                 ó,   • [         R                  " 5       $ )z8Add support for -K/--spec-local into PMAPI monitor tool )rE   ÚpmSetLongOptionSpecLocalr`   s    r0   rŸ  Ú"pmOptions.pmSetLongOptionSpecLocalç  r�  r2   c                 ó,   • [         R                  " 5       $ )z8Add support for -L/--local-PMDA into PMAPI monitor tool )rE   ÚpmSetLongOptionLocalPMDAr`   s    r0   r¢  Ú"pmOptions.pmSetLongOptionLocalPMDAë  r�  r2   c                 ó,   • [         R                  " 5       $ )z4Add support for -O/--origin into PMAPI monitor tool )rE   ÚpmSetLongOptionOriginr`   s    r0   r¥  ÚpmOptions.pmSetLongOptionOriginï  ó   € ä×*Ò*Ó,Ð,r2   c                 ó   • gr’  r¹   r`   s    r0   ÚpmSetLongOptionGuiPortÚ pmOptions.pmSetLongOptionGuiPortó  r•  r2   c                 ó,   • [         R                  " 5       $ )z3Add support for -S/--start into PMAPI monitor tool )rE   ÚpmSetLongOptionStartr`   s    r0   r¬  ÚpmOptions.pmSetLongOptionStart÷  r‰  r2   c                 ó,   • [         R                  " 5       $ )z5Add support for -s/--samples into PMAPI monitor tool )rE   ÚpmSetLongOptionSamplesr`   s    r0   r¯  Ú pmOptions.pmSetLongOptionSamplesû  r�  r2   c                 ó,   • [         R                  " 5       $ )z4Add support for -T/--finish into PMAPI monitor tool )rE   ÚpmSetLongOptionFinishr`   s    r0   r²  ÚpmOptions.pmSetLongOptionFinishÿ  r§  r2   c                 ó,   • [         R                  " 5       $ )z6Add support for -t/--interval into PMAPI monitor tool )rE   ÚpmSetLongOptionIntervalr`   s    r0   rµ  Ú!pmOptions.pmSetLongOptionInterval  ó   € ä×,Ò,Ó.Ð.r2   c                 ó,   • [         R                  " 5       $ )z5Add support for -V/--version into PMAPI monitor tool )rE   ÚpmSetLongOptionVersionr`   s    r0   r¹  Ú pmOptions.pmSetLongOptionVersion  r�  r2   c                 ó,   • [         R                  " 5       $ )z6Add support for -Z/--timezone into PMAPI monitor tool )rE   ÚpmSetLongOptionTimeZoner`   s    r0   r¼  Ú!pmOptions.pmSetLongOptionTimeZone  r·  r2   c                 ó,   • [         R                  " 5       $ )z6Add support for -z/--hostzone into PMAPI monitor tool )rE   ÚpmSetLongOptionHostZoner`   s    r0   r¿  Ú!pmOptions.pmSetLongOptionHostZone  r·  r2   c                 ó,   • [         R                  " 5       $ )z2Add support for -?/--help into PMAPI monitor tool )rE   ÚpmSetLongOptionHelpr`   s    r0   rÂ  ÚpmOptions.pmSetLongOptionHelp  r™  r2   c                 ó,   • [         R                  " 5       $ )z7Add support for --archive-list into PMAPI monitor tool )rE   ÚpmSetLongOptionArchiveListr`   s    r0   rÅ  Ú$pmOptions.pmSetLongOptionArchiveList  s   € ä×/Ò/Ó1Ð1r2   c                 ó,   • [         R                  " 5       $ )z8Add support for --archive-folio into PMAPI monitor tool )rE   ÚpmSetLongOptionArchiveFolior`   s    r0   rÈ  Ú%pmOptions.pmSetLongOptionArchiveFolio  s   € ä×0Ò0Ó2Ð2r2   c                 ó,   • [         R                  " 5       $ )z4Add support for --container into PMAPI monitor tool )rE   ÚpmSetLongOptionContainerr`   s    r0   rË  Ú"pmOptions.pmSetLongOptionContainer  r�  r2   c                 ó,   • [         R                  " 5       $ )z4Add support for --host-list into PMAPI monitor tool )rE   ÚpmSetLongOptionHostListr`   s    r0   rÎ  Ú!pmOptions.pmSetLongOptionHostList#  r·  r2   c                 ó,   • [         R                  " 5       $ rd   )rE   ÚpmGetOptionContextr`   s    r0   rÑ  ÚpmOptions.pmGetOptionContext'  ó   € Ü×'Ò'Ó)Ð)r2   c                 ó,   • [         R                  " 5       $ rd   )rE   ÚpmGetOptionHostsr`   s    r0   rÕ  ÚpmOptions.pmGetOptionHosts*  rG  r2   c                 ó,   • [         R                  " 5       $ rd   )rE   ÚpmGetOptionArchivesr`   s    r0   rØ  ÚpmOptions.pmGetOptionArchives-  ó   € Ü×(Ò(Ó*Ð*r2   c                 ó^   • [         R                  " 5       nUc  g [        R                  U5      $ rd   )rE   ÚpmGetOptionAlign_optargr}   r“   ©r@   Ú	alignments     r0   ÚpmGetOptionAlignmentÚpmOptions.pmGetOptionAlignment0  s*   € Ü×1Ò1Ó3ˆ	ØÑØÜ×#Ñ# IÓ.Ð.r2   c                 ó^   • [         R                  " 5       nUc  g [        R                  U5      $ rd   )rE   rÜ  r»   r“   rÝ  s     r0   ÚpmGetOptionHighResAlignmentÚ%pmOptions.pmGetOptionHighResAlignment6  s*   € Ü×1Ò1Ó3ˆ	ØÑØÜ×$Ñ$ YÓ/Ð/r2   c                 ór   • [         R                  " 5       nUc  g [        U[         R                  " 5       5      $ rd   )rE   ÚpmGetOptionStart_secr}   ÚpmGetOptionStart_usec©r@   r…   s     r0   ÚpmGetOptionStartÚpmOptions.pmGetOptionStart<  s.   € Ü×(Ò(Ó*ˆØ‰;ØÜ�sœE×7Ò7Ó9Ó:Ð:r2   c                 ór   • [         R                  " 5       nUc  g [        U[         R                  " 5       5      $ rd   )rE   rå  r»   ÚpmGetOptionStart_nsecrç  s     r0   ÚpmGetOptionHighResStartÚ!pmOptions.pmGetOptionHighResStartB  s.   € Ü×(Ò(Ó*ˆØ‰;ØÜ˜œU×8Ò8Ó:Ó;Ð;r2   c                 ó,   • [         R                  " 5       $ rd   )rE   rÜ  r`   s    r0   ÚpmGetOptionAlignOptargÚ pmOptions.pmGetOptionAlignOptargH  s   € Ü×,Ò,Ó.Ð.r2   c                 ó,   • [         R                  " 5       $ rd   )rE   ÚpmGetOptionFinish_optargr`   s    r0   ÚpmGetOptionFinishOptargÚ!pmOptions.pmGetOptionFinishOptargK  s   € Ü×-Ò-Ó/Ð/r2   c                 ór   • [         R                  " 5       nUc  g [        U[         R                  " 5       5      $ rd   )rE   ÚpmGetOptionFinish_secr}   ÚpmGetOptionFinish_usecrç  s     r0   ÚpmGetOptionFinishÚpmOptions.pmGetOptionFinishN  ó.   € Ü×)Ò)Ó+ˆØ‰;ØÜ�sœE×8Ò8Ó:Ó;Ð;r2   c                 ór   • [         R                  " 5       nUc  g [        U[         R                  " 5       5      $ rd   )rE   rö  r»   ÚpmGetOptionFinish_nsecrç  s     r0   ÚpmGetOptionHighResFinishÚ"pmOptions.pmGetOptionHighResFinishT  ó.   € Ü×)Ò)Ó+ˆØ‰;ØÜ˜œU×9Ò9Ó;Ó<Ð<r2   c                 ór   • [         R                  " 5       nUc  g [        U[         R                  " 5       5      $ rd   )rE   ÚpmGetOptionOrigin_secr}   ÚpmGetOptionOrigin_usecrç  s     r0   ÚpmGetOptionOriginÚpmOptions.pmGetOptionOriginZ  rú  r2   c                 ór   • [         R                  " 5       nUc  g [        U[         R                  " 5       5      $ rd   )rE   r  r»   ÚpmGetOptionOrigin_nsecrç  s     r0   ÚpmGetOptionHighResOriginÚ"pmOptions.pmGetOptionHighResOrigin`  rÿ  r2   c                 ór   • [         R                  " 5       nUc  g [        U[         R                  " 5       5      $ rd   )rE   ÚpmGetOptionInterval_secr}   ÚpmGetOptionInterval_usecrç  s     r0   ÚpmGetOptionIntervalÚpmOptions.pmGetOptionIntervalf  s.   € Ü×+Ò+Ó-ˆØ‰;ØÜ�sœE×:Ò:Ó<Ó=Ð=r2   c                 ór   • [         R                  " 5       nUc  g [        U[         R                  " 5       5      $ rd   )rE   r
  r»   ÚpmGetOptionInterval_nsecrç  s     r0   ÚpmGetOptionHighResIntervalÚ$pmOptions.pmGetOptionHighResIntervall  s.   € Ü×+Ò+Ó-ˆØ‰;ØÜ˜œU×;Ò;Ó=Ó>Ð>r2   c                 ó,   • [         R                  " 5       $ rd   )rE   ÚpmGetOptionSamplesr`   s    r0   r  ÚpmOptions.pmGetOptionSamplesr  rÓ  r2   c                 ó8   • [         R                  " 5       S:X  a  gg©Nr   FT)rE   ÚpmGetOptionHostZoner`   s    r0   r  ÚpmOptions.pmGetOptionHostZoneu  s   € Ü×$Ò$Ó&¨!Ó+ØØr2   c                 ó,   • [         R                  " 5       $ rd   )rE   ÚpmGetOptionTimezoner`   s    r0   r  ÚpmOptions.pmGetOptionTimezonez  rÚ  r2   c                 ó,   • [         R                  " 5       $ rd   )rE   ÚpmGetOptionContainerr`   s    r0   r  ÚpmOptions.pmGetOptionContainer}  ó   € Ü×)Ò)Ó+Ð+r2   c                 ó8   • [         R                  " 5       S:X  a  ggr  )rE   ÚpmGetOptionLocalPMDAr`   s    r0   r!  ÚpmOptions.pmGetOptionLocalPMDA€  s   € Ü×%Ò%Ó'¨1Ó,ØØr2   c                 ó.   • [         R                  " U5      $ rd   )rE   ÚpmSetOptionArchive)r@   Úarchives     r0   r$  ÚpmOptions.pmSetOptionArchive…  rL  r2   c                 ó.   • [         R                  " U5      $ rd   )rE   ÚpmSetOptionArchiveList)r@   Úarchivess     r0   r(  Ú pmOptions.pmSetOptionArchiveListˆ  s   € Ü×+Ò+¨HÓ5Ð5r2   c                 ó.   • [         R                  " U5      $ rd   )rE   ÚpmSetOptionArchiveFolio)r@   Úfolios     r0   r,  Ú!pmOptions.pmSetOptionArchiveFolio‹  s   € Ü×,Ò,¨UÓ3Ð3r2   c                 ó.   • [         R                  " U5      $ rd   )rE   ÚpmSetOptionContainer)r@   Ú	containers     r0   r0  ÚpmOptions.pmSetOptionContainerŽ  s   € Ü×)Ò)¨)Ó4Ð4r2   c                 ó.   • [         R                  " U5      $ rd   )rE   ÚpmSetOptionHost)r@   Úhosts     r0   r4  ÚpmOptions.pmSetOptionHost‘  s   € Ü×$Ò$ TÓ*Ð*r2   c                 ó.   • [         R                  " U5      $ rd   )rE   ÚpmSetOptionHostList)r@   Úhostss     r0   r8  ÚpmOptions.pmSetOptionHostList”  s   € Ü×(Ò(¨Ó/Ð/r2   c                 ó.   • [         R                  " U5      $ rd   )rE   ÚpmSetOptionSpecLocal)r@   Úspecs     r0   r<  ÚpmOptions.pmSetOptionSpecLocal—  s   € Ü×)Ò)¨$Ó/Ð/r2   c                 ó,   • [         R                  " 5       $ rd   )rE   ÚpmSetOptionLocalPMDAr`   s    r0   r@  ÚpmOptions.pmSetOptionLocalPMDAš  r  r2   )r(  r#  r-  )NNr   )Urh   ri   rj   rk   r  r$  r)  r.  r1  r]  ÚmodeÚdeltaÚ
need_resetr9   r>  ÚstaticmethodrB  rE  rI  r7  rP  rT  r6  r5  r\  r`  rc  rg  rm  rp  ru  rx  r  rƒ  r‡  r‹  r�  r“  r—  r›  rŸ  r¢  r¥  r©  r¬  r¯  r²  rµ  r¹  r¼  r¿  rÂ  rÅ  rÈ  rË  rÎ  rÑ  rÕ  rØ  rß  râ  rè  rì  rï  ró  rø  rý  r  r  r  r  r  r  r  r  r!  r$  r(  r,  r0  r4  r8  r<  r@  rl   r¹   r2   r0   r!  r!  C  s»  † ñòòò ò!ñ �G˜T 4¨Ó.€DÙ�X˜t T¨4Ó0€EÙ˜-¨¸¸dÓC€Jô
!ò&ð ñ%ó ð%ò(ò1ò-ò)ò/ò2ò6ò/ò3ò%ò3ò3ò
/ò	1ò	Uò4ò/ò,ò.ò,òò+ò0ò0ò0ò-òò,ò.ò-ò/ò.ò/ò/ò+ò2ò3ò0ò/ò*ò(ò+ò/ò0ò;ò<ò/ò0ò<ò=ò<ò=ò>ò?ò*òò
+ò,òò
1ò6ò4ò5ò+ò0ò0õ,r2   r!  c                   óL  • \ rS rSrSrS rS rS r\" \SSS5      r	\" \SSS5      r
\" \SSS5      r\R                  S4S jrS	 r\SrS
 j5       r\S 5       rS rS rS rS rSsS jrS rS rS rS rS rS r\S 5       rS r S r!\RD                  4S jr#\RD                  4S jr$StS jr%S r&S r'S r(S  r)S! r*S" r+S# r,\S$ 5       r-S% r.S& r/S' r0S( r1S) r2S* r3S+ r4\S, 5       r5\S- 5       r6\S. 5       r7S/ r8S0 r9S1 r:S2 r;S3 r<\S4 5       r=\S5 5       r>S6 r?S7 r@S8 rAS9 rBS: rCS; rDS< rES= rFS> rGS? rHS@ rISuSA jrJSB rKSC rLSD rMSE rNSF rOSG rPSH rQ\SI 5       rR\StSJ j5       rS\SvSK j5       rT\SL 5       rU\SM 5       rV\SN 5       rW\SO 5       rX\SP 5       rY\SQ 5       rZ\SR 5       r[\SS 5       r\\ST 5       r]\SU 5       r^\SV 5       r_\SW 5       r`\SX 5       ra\SY 5       rb\SZ 5       rc\S[ 5       rd\S\ 5       re\S] 5       rf\S^ 5       rg\S_ 5       rh\S` 5       ri\Sa 5       rj\Sb 5       rk\Sc 5       rl\Sd 5       rm\SwSe j5       rn\Sf 5       ro\Sg 5       rp\Sh 5       rq\Si 5       rr\Sj 5       rs\SxSk j5       rt\Sl 5       ru\Sm 5       rv\\Rî                  4Sn j5       rx\So 5       rySp rzSqr{g)yÚ	pmContexti¥  a˜  Defines a metrics source context (e.g. host, archive, etc) to operate on

pmContext(c_api.PM_CONTEXT_HOST,"local:")
pmContext(c_api.PM_CONTEXT_ARCHIVE,"FILENAME")

This object defines a PMAPI context, and its methods wrap calls to PMAPI
library functions. Detailled information about those C library functions
can be found in the following document.

SGI Document: 007-3434-005
Performance Co-Pilot Programmer's Guide
Section 3.7 - PMAPI Procedural Interface, pp. 67

Detailed information about the underlying data structures can be found
in the same document.

Section 3.4 - Performance Metric Descriptions, pp. 59
Section 3.5 - Performance Metric Values, pp. 62
c                 ó   • U R                   $ rd   )Ú_typer`   s    r0   Ú_R_typeÚpmContext._R_typeÀ  r&  r2   c                 ó   • U R                   $ rd   )Ú_targetr`   s    r0   Ú	_R_targetÚpmContext._R_targetÂ  s   € Ø�|‰|Ðr2   c                 ó   • U R                   $ rd   )Ú_ctxr`   s    r0   Ú_R_ctxÚpmContext._R_ctxÄ  rg   r2   Núlocal:c                 ó(  • Xl         X l        [        R                  U l        U(       a'  [        U[        5      (       d  UR                  S5      nOUn[        R                  X5      U l        U R                  S:  a  [        U R                  U/5      eg rÙ  )rI  rM  rE   ÚPM_ERR_NOCONTEXTrQ  r<   rŒ   rw   rP   ÚpmNewContextr4   )r@   r  ÚtargetrÏ  s       r0   r9   ÚpmContext.__init__Ñ  sp   € ØŒ
ØŒÜ×*Ñ*ˆŒ	Þœ* V¬U×3Ñ3Ø—]‘] 7Ó+‰FàˆFÜ×'Ñ'¨Ó6ˆŒ	Ø�9‰9�q‹=Ü˜Ÿ	™	 F 8Ó,Ð,ð r2   c                 ó�   • [         b?  U R                  [        R                  :w  a   [         R	                  U R                  5        g g g rd   )rP   rQ  rE   rV  ÚpmDestroyContextr`   s    r0   r>  ÚpmContext.__del__Ý  s4   € ÜÑ $§)¡)¬u×/EÑ/EÓ"EÜ×#Ñ# D§I¡IÕ.ð #FÐr2   c                 ó|  • Ub  US::  a8  SUl         [        R                  " U5      (       a  [        eUR	                  5       nU[        R
                  :X  a  UR                  5       nXT   nOˆU[        R                  :X  a  UR                  5       nXt   nO_U[        R                  :X  a  SnOHUR                  5       b%  UR                  5       nXT   n[        R
                  nO[        R                  nSnU " X65      n[        R                  " UR                  UR                  UR                  5      (       a  [        eU$ )aD  Helper interface, simple PCP monitor argument parsing.

Take argv list, create a context using pmGetOptions(3)
and standard options default values like local: etc
based on the contents of the list.

Caller should have already registered any options of
interest using the option family of interfaces, i.e.
pmSetShortOptions, pmSetLongOption*, pmSetOptionFlags,
pmSetOptionCallback, and pmSetOptionOverrideCallback.

When the MULTI/MIXED pmGetOptions flags are being used,
the typed/index parameters can be used to setup several
contexts based on the given command line parameters.
Nr   TrT  )rD  rE   ÚpmGetOptionsFromListrp   rÑ  ÚPM_CONTEXT_ARCHIVErØ  ÚPM_CONTEXT_HOSTrÕ  ÚPM_CONTEXT_LOCALr  ÚpmSetContextOptionsÚctxrB  rC  )	rŽ   Úoptionsri  r  rX   r)  rÏ  r9  rJ  s	            r0   ÚfromOptionsÚpmContext.fromOptionsá  s  € ð" ‰=˜E Q›JØ!%ˆGÔÜ×)Ò)¨$×/Ñ/Ü Ð Ø×.Ñ.Ó0ˆEà”E×,Ñ,Ó,Ø×2Ñ2Ó4ˆHØ‘_‰FØ”e×+Ñ+Ó+Ø×,Ñ,Ó.ˆEØ‘\‰FØ”e×,Ñ,Ó,Ø‰FØ×&Ñ&Ó(Ñ4Ø×2Ñ2Ó4ˆHØ‘_ˆFÜ×,Ñ,‰Eä×)Ñ)ˆEØˆFñ �eÓ$ˆô ×$Ò$ W§[¡[°'·,±,ÀÇÁ×NÑNÜÐàˆr2   c                 óì  • Sn[         R                  " 5       (       aC  [         R                  nU R                  [         R                  5        U R                  5       S   nO¨[         R                  " 5       (       aC  [         R
                  nU R                  [         R
                  5        U R	                  5       S   nOK[         R                  " 5       (       a1  [         R                  nU R                  [         R                  5        SnU(       dÏ  SU;   aA  [         R                  nU R                  U5        U R                  [         R                  5        OˆUS:w  aA  [         R
                  nU R                  U5        U R                  [         R
                  5        OA[         R                  nU R                  5         U R                  [         R                  5        SnU[         R                  :X  a:  U(       a3  [        SUR                  S5      5       H  nU R                  U5        M     U R                  5       nU R                  U[         R                   -  5        [         R"                  " 5         X14$ )zEHelper to set connection options and to get context/source for pmfg. Nr   Ú/Ú@Ú;)rE   rØ  r_  rI  rÕ  r`  r!  ra  r$  r4  r@  ÚfilterÚsplitr<  rE  r7  ÚPM_OPTFLAG_DONEÚpmEndOptions)rd  rÏ  Ú	speclocalrJ  r=  r  s         r0   Úset_connect_optionsÚpmContext.set_connect_options  sÎ  € ð ˆä×$Ò$×&Ñ&Ü×.Ñ.ˆGØ×&Ñ&¤u×'?Ñ'?Ô@Ø×0Ñ0Ó2°1Ñ5‰FÜ×#Ò#×%Ñ%Ü×+Ñ+ˆGØ×&Ñ&¤u×'<Ñ'<Ô=Ø×-Ñ-Ó/°Ñ2‰FÜ×'Ò'×)Ñ)Ü×,Ñ,ˆGØ×&Ñ&¤u×'=Ñ'=Ô>ØˆFæØ�f‹}Ü×2Ñ2�Ø×*Ñ*¨6Ô2Ø×*Ñ*¬5×+CÑ+CÕDØ˜3“Ü×/Ñ/�Ø×'Ñ'¨Ô/Ø×*Ñ*¬5×+@Ñ+@ÕAä×0Ñ0�Ø×,Ñ,Ô.Ø×*Ñ*¬5×+AÑ+AÔBØ�à”e×,Ñ,Ó,¶Ü˜t Y§_¡_°SÓ%9Ö:�Ø×,Ñ,¨TÖ2ñ ;ð ×(Ñ(Ó*ˆØ× Ñ  ¬×)>Ñ)>Ñ!>Ô?Ü×ÒÔàˆÐr2   c                 ó¸  ^• [        [        5      " 5       m[        R                  U R                  5      nUS:  a  [        U5      e[        U[        5      (       d  UR                  S5      n[        R                  U[        T5      5      nUS:  a  [        U5      eUS:”  a9  [        [        U4S j[        U5      5      5      n[        R                  T5        U$ g)zcPMAPI - Return names of children of the given PMNS node NAME
tuple names = pmGetChildren("kernel")
r   ru   c                 ó<   >• [        TU    R                  5       5      $ rd   ©rR   rS   ©rû   Ú	offsprings    €r0   rü   Ú)pmContext.pmGetChildren.<locals>.<lambda>N  ó   ø€ ¬¨I°a©L×,?Ñ,?Ó,AÔ(Br2   N)r   r	   rP   ÚpmUseContextrc  r4   r<   rŒ   rw   ÚpmGetChildrenr   r:   rÕ  rT   ÚLIBCÚfree)r@   r  r’   ÚchildLrv  s       @r0   rz  ÚpmContext.pmGetChildren@  s¯   ø€ ô œHÔ%Ó'ˆ	Ü×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDÜ×%Ñ% d¬E°)Ó,<Ó=ˆØ�A‹:Ü˜“-ÐØ�A‹:Üœ#ÔBÄEÈ&ÃMÓRÓSˆFÜ�I‰I�iÔ ð ˆð r2   c                 óf  ^^• [        [        5      " 5       m[        [        5      " 5       m[        R	                  U R
                  5      nUS:  a  [        U5      e[        U[        5      (       d  UR                  S5      n[        R                  U[        T5      [        T5      5      nUS:  a  [        U5      eUS:”  aq  [        [        U4S j[        U5      5      5      n[        [        U4S j[        U5      5      5      n[        R!                  T5        [        R!                  T5        X44$ g)z€PMAPI - Return names and status of children of the given metric NAME
(tuple names,tuple status) = pmGetChildrenStatus("kernel")
r   ru   c                 ó<   >• [        TU    R                  5       5      $ rd   rt  ru  s    €r0   rü   Ú/pmContext.pmGetChildrenStatus.<locals>.<lambda>d  rx  r2   c                 ó    >• [        TU    5      $ rd   ©r=   )rû   Ú	childstats    €r0   rü   r�  e  s   ø€ ¤s¨9°Q©<Ô'8r2   ©NN)r   r	   r   rP   ry  rc  r4   r<   rŒ   rw   ÚpmGetChildrenStatusr   r:   rÕ  rT   r{  r|  )r@   r  r’   r}  ÚstatLr„  rv  s        @@r0   r†  ÚpmContext.pmGetChildrenStatusT  së   ù€ ô œHÔ%Ó'ˆ	ÜœE”NÓ$ˆ	Ü×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDÜ×+Ñ+¨DÜ,1°)Ó,<¼eÀIÓ>NóPˆà�A‹:Ü˜“-ÐØ�A‹:Üœ#ÔBÄEÈ&ÃMÓRÓSˆFÜœÔ8¼%À»-ÓHÓIˆEÜ�I‰I�iÔ Ü�I‰I�iÔ ð ˆ}Ðð r2   c                 ó°   • [         R                  U R                  5      nUS:  a  [        U5      e[         R	                  5       nUS:  a  [        U5      eU$ )zEPMAPI - Return the namespace location type
loc = pmGetPMNSLocation()
r   )rP   ry  rc  r4   ÚpmGetPMNSLocation©r@   r’   s     r0   rŠ  ÚpmContext.pmGetPMNSLocationl  sM   € ô ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×)Ñ)Ó+ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óþ   • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      n[         R                  U5      nUS:  a  [        U5      eU$ )zDPMAPI - Load a local namespace
status = pmLoadNameSpace("filename")
r   ru   )rP   ry  rc  r4   r<   rŒ   rw   ÚpmLoadNameSpace)r@   Úfilenamer’   s      r0   rŽ  ÚpmContext.pmLoadNameSpacex  sj   € ô ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ˜(¤E×*Ñ*Ø—‘ wÓ/ˆHÜ×'Ñ'¨Ó1ˆØ�A‹:Ü˜“-ÐØˆr2   c                 ó´  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        [        45      (       a  SnO[        U5      n[        U-  " 5       n[	        U[
        5      (       a  [        UR                  S5      5      US'   Ox[	        U[        5      (       a  [        U5      US'   OT[        U5       HE  u  pg[	        U[        5      (       a  [        U5      XV'   M)  [        UR                  S5      5      XV'   MG     [        U-  " 5       n[        [        U-  [        [        5      /[         R                  l        [         R                  XEU5      nUS:  a  [        X85      eUS:X  aT  X4:w  aO  [!        X5       VV	s/ s H  u  pyU	["        R$                  :X  d  M  UPM     n
nn	[        ["        R&                  U
5      eU$ s  sn	nf )z§PMAPI - Lookup pmIDs from a list of metric names nameA

c_uint pmid [] = pmLookupName("MetricName")
c_uint pmid [] = pmLookupName(("MetricName1", "MetricName2", ...))
r   rM   ru   )rP   ry  rc  r4   r<   rR   rŒ   rU   r	   rw   Ú	enumerater   r   r   ÚpmLookupNamer+   ÚziprE   Ú
PM_ID_NULLÚPM_ERR_NAME)r@   ÚnameAÚrelaxedr’   ÚnÚnamesrV  r  ÚpmidArN  ÚbadLs              r0   r“  ÚpmContext.pmLookupName†  s{  € ô ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ�eœc¤5˜\×*Ñ*Ø‰Aä�E“
ˆAÜ˜A’Ó ˆÜ�eœS×!Ñ!Ü §¡¨WÓ 5Ó6ˆE�!ŠHÜ˜œu×%Ñ%Ü “ˆE�!ŠHä$ UÖ+‘�Ü˜d¤E×*Ñ*Ü'¨›~�E“Hä'¨¯©°GÓ(<Ó=�E“Hñ	 ,ô
 ˜!’“ˆÜ(-´¸1±¼wÄv»Ð'OŒ×ÑÔ$Ü×$Ñ$ Q¨uÓ5ˆØ�A‹:Ü˜Ó&Ð&Ø�a‹<˜F›KÜ-0°Ô->ô MÒ->™\˜dØ37¼5×;KÑ;KÑ3K÷ Ñ->ˆDñ Mäœ×)Ñ)¨4Ó0Ð0ØˆùóMs   ÆGÆ/Gc                 ó^  ^• [         R                  U R                  5      nUS:  a  [        U5      e[	        [
        5      " 5       m[         R                  U[        T5      5      nUS:  a  [        U5      e[        [        U4S j[        U5      5      5      n[        R                  T5        U$ )zfPMAPI - Return list of all metric names having this identical PMID
tuple names = pmNameAll(metric_id)
r   c                 ó<   >• [        TU    R                  5       5      $ rd   rt  ©rû   ÚnameA_ps    €r0   rü   Ú%pmContext.pmNameAll.<locals>.<lambda>´  s   ø€ ¤3 w¨q¡z×'8Ñ'8Ó':Ô#;r2   )rP   ry  rc  r4   r   r	   Ú	pmNameAllr   r:   rÕ  rT   r{  r|  )r@   rN  r’   ÚnameLr¡  s       @r0   r£  ÚpmContext.pmNameAll©  s…   ø€ ô ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜœ(Ô#Ó%ˆÜ×!Ñ! $¬¨g«Ó7ˆØ�A‹:Ü˜“-ÐÜ”SÔ;¼UÀ6»]ÓKÓLˆÜ�	‰	�'ÔØˆr2   c                 óJ  • [        5       n[        R                  U R                  5      nUS:  a  [	        U5      e[        R                  U[        U5      5      nUS:  a  [	        U5      eUR                  n[        R                  U5        [        UR                  5       5      $ )zIPMAPI - Return a metric name from a PMID
name = pmNameID(self.metric_id)
r   )r	   rP   ry  rc  r4   ÚpmNameIDr   r_   r{  r|  rR   rS   )r@   rN  r  r’   rW   s        r0   r§  ÚpmContext.pmNameID¸  sz   € ô ‹zˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ—‘ ¤u¨T£{Ó3ˆØ�A‹:Ü˜“-ÐØ—‘ˆÜ�	‰	�$ŒÜ�6—=‘=“?Ó#Ð#r2   c                 ó²   • [         R                  U R                  5      nUS:  a  [        U5      e[        R
                  " X5      nUS:  a  [        U5      eg)ztPMAPI - Scan namespace, depth first, run CALLBACK at each node
status = pmTraversePMNS("kernel", traverse_callback)
r   N)rP   ry  rc  r4   rE   ÚpmnsTraverse)r@   r  Úcallbackr’   s       r0   ÚpmTraversePMNSÚpmContext.pmTraversePMNSÇ  sO   € ô ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×#Ò# DÓ3ˆØ�A‹:Ü˜“-Ðð r2   c                 ó®   • [         R                  U R                  5      nUS:  a  [        U5      e[         R	                  5       nUS:  a  [        U5      eg)z]PMAPI - Unloads a local PMNS, if one was previously loaded
pm.pmUnLoadNameSpace("NameSpace")
r   N)rP   ry  rc  r4   ÚpmUnloadNameSpacer‹  s     r0   ÚpmUnLoadNameSpaceÚpmContext.pmUnLoadNameSpaceÒ  sM   € ô ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×)Ñ)Ó+ˆØ�A‹:Ü˜“-Ðð r2   c                 óþ  • [        U[        5      (       d  UR                  S5      n[        U[        5      (       d  UR                  S5      n[        5       n[        R                  X[        U5      5      nUS:w  aR  [        UR                  R                  5       5      n[        R                  U5        [        [        R                  U5      e[        R                  U R                   5      nUS:  a  [        U5      eg)zrPMAPI - Register a derived metric name and definition
pm.pmRegisterDerived("MetricName", "MetricName Expression")
ru   r   N)r<   rŒ   rw   r	   rP   ÚpmRegisterDerivedMetricr   rR   r_   rS   r{  r|  r4   rE   ÚPM_ERR_CONVÚpmReconnectContextrc  )r@   r  Úexprr‘   rW   r„  r’   s          r0   ÚpmRegisterDerivedÚpmContext.pmRegisterDerivedÝ  s¾   € ô ˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDÜ˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDÜ“ˆÜ×/Ñ/°¼EÀ&»MÓJˆØ�Q‹;Ü�v—|‘|×*Ñ*Ó,Ó-ˆDÜ�I‰I�fÔÜœ×)Ñ)¨4Ó0Ð0Ü×*Ñ*¨4¯8©8Ó4ˆØ�A‹:Ü˜“-Ðð r2   c                 ó   • [        U[        5      (       d  UR                  S5      n[        R	                  U5      =p#US:  a  [        U5      e[        R                  U R                  5      nUS:  a  [        U5      eU$ )zePMAPI - Register derived metric names and definitions from a file
pm.pmLoadDerivedConfig("FileName")
ru   r   )r<   rŒ   rw   rP   ÚpmLoadDerivedConfigr4   rµ  rc  )r@   Úfnamer’   r]  s       r0   rº  ÚpmContext.pmLoadDerivedConfigï  sm   € ô ˜%¤×'Ñ'Ø—L‘L Ó)ˆEÜ×3Ñ3°EÓ:Ð:ˆØ�A‹:Ü˜“-ÐÜ×*Ñ*¨4¯8©8Ó4ˆØ�A‹:Ü˜“-ÐØˆr2   c                  ód   • [         R                  5       n U b  [        U R                  5       5      $ g)zvPMAPI - Return an error message if the pmRegisterDerived(3) metric
definition cannot be parsed
pm.pmRegisterDerived()
N)rP   ÚpmDerivedErrStrrR   rS   )rW   s    r0   r¾  ÚpmContext.pmDerivedErrStrÿ  s,   € ô ×'Ñ'Ó)ˆØÑÜ�v—}‘}“Ó'Ð'Ør2   c                 ó@  • [         R                  U R                  5      nUS:  a  [        U5      e[        R
                  " [        [        5      5      n[        U[        [        5      5      n[        U5      n[         R                  XT5      nUS:  a  [        U5      eU$ )zfPMAPI - Lookup a metric description structure from a pmID

pmDesc* pmdesc = pmLookupDesc(c_uint pmid)
r   )rP   ry  rc  r4   r&   rN   r   r¹  r   r   r   ÚpmLookupDesc)r@   Úpmid_pr’   ÚdescbufÚdescrN  s         r0   rÁ  ÚpmContext.pmLookupDesc  s|   € ô ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-Ðä×-Ò-¬f´V«nÓ=ˆÜ�GœW¤V›_Ó-ˆÜ�f‹~ˆÜ×$Ñ$ TÓ0ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óª  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       a  [        S-  " 5       nXS'   O8[        [        U5      -  " 5       n[        U5       H  u  pE[        U5      X4'   M     [        R                  " [        U5      [        [        5      -  5      n[        U[        [        5      5      n[         R                  [        U5      X75      nUS:  a  [        U5      e[        [        5      [        U5      -  " 5       n[!        [        U5      5       H  n[#        Xt   5      X„'   M     U$ )zœPMAPI - Lookup metric description structures from pmIDs

(pmDesc* pmdesc)[] = pmLookupDescs(c_uint pmid[N])
(pmDesc* pmdesc)[] = pmLookupDescs(c_uint pmid)
r   rM   )rP   ry  rc  r4   r<   Úinteger_typesr   rU   r’  r&   rN   r   r¹  r   r   ÚpmLookupDescsrT   r   )	r@   Úpmids_pr’   ÚpmidsrV  rN  ÚdescsbufÚdesclistÚdescss	            r0   rÈ  ÚpmContext.pmLookupDescs  s  € ô ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-Ðä�gœ}×-Ñ-Ü˜a’Z“NˆEØ�!ŠHäœc '›lÒ*Ó-ˆEÜ$ WÖ-‘�Ü! $›<�“ñ .ô ×.Ò.¬s°5«z¼FÄ6»NÑ/JÓKˆÜ˜¤'¬&£/Ó2ˆÜ×%Ñ%¤c¨%£j°%ÓBˆØ�A‹:Ü˜“-Ðô œ“¤3 u£:Ò-Ó0ˆÜ”s˜5“zÖ"ˆAÜ˜x™{Ó+ˆE‹Hñ #àˆr2   c                 ó^  • [        5       n[        R                  U R                  5      nUS:  a  [	        U5      e[        R                  [        U5      U[        U5      5      nUS:  a  [	        U5      eUR                  n[        R                  U5        [        UR                  5       5      $ )zlPMAPI - Lookup the description of a metric's instance domain

"instance" = pmLookupInDomText(pmDesc pmdesc)
r   )r	   rP   ry  rc  r4   ÚpmLookupInDomTextrË  r   r_   r{  r|  rR   rS   )r@   rÊ  ÚkindÚbufr’   rW   s         r0   rÐ  ÚpmContext.pmLookupInDomText>  sƒ   € ô
 ‹jˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-Ðä×)Ñ)¬)°FÓ*;¸TÄ5ÈÃ:ÓNˆØ�A‹:Ü˜“-ÐØ—‘ˆÜ�	‰	�#ŒÜ�6—=‘=“?Ó#Ð#r2   c                 óJ  • [        5       n[        R                  U R                  5      nUS:  a  [	        U5      e[        R                  X[        U5      5      nUS:  a  [	        U5      eUR                  n[        R                  U5        [        UR                  5       5      $ )zUPMAPI - Lookup the description of a metric from its pmID
"desc" = pmLookupText(pmid)
r   )r	   rP   ry  rc  r4   ÚpmLookupTextr   r_   r{  r|  rR   rS   )r@   rN  rÑ  rÒ  r’   r„  s         r0   rÕ  ÚpmContext.pmLookupTextO  s|   € ô ‹jˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×$Ñ$ T´°s³Ó<ˆØ�A‹:Ü˜“-ÐØ�y‰yˆÜ�	‰	�#ŒÜ�4—;‘;“=Ó!Ð!r2   c                 ó‚  ^^• Uc  Uc  [        [        R                  S5      e[        [        5      " 5       m[        [
        5      " 5       m[        R                  U R                  5      nUS:  a  [        U5      eUc  [        U5      n[        R                  U[        T5      [        T5      5      nUS:  a  [        U5      eUS:”  aq  [        [        U4S j[        U5      5      5      n[        [        U4S j[        U5      5      5      n[        R!                  T5        [        R!                  T5        XT4$ SnSnXT4$ )z–PMAPI - Lookup the list of instances from an instance domain PMDESCP or indom
([instance1, instance2...] [name1, name2...]) pmGetInDom(pmDesc pmdesc)
Nzinvalid argumentsr   c                 ó@   >• [        TU    R                  SS5      5      $ ©NÚasciiÚignorert  r   s    €r0   rü   Ú&pmContext.pmGetInDom.<locals>.<lambda>s  ó   ø€ ¤s¨7°1©:×+<Ñ+<¸WÀhÓ+OÔ'Pr2   c                 ó    >• [        TU    5      $ rd   rƒ  ©rû   ÚinstA_ps    €r0   rü   rÜ  t  ó   ø€ ¤s¨7°1©:¤r2   )r4   rE   ÚPM_ERR_GENERICr   r   r	   rP   ry  rc  rË  Ú
pmGetInDomr   r:   rÕ  rT   r{  r|  )r@   Úpmdescpr»  r’   r¤  ÚinstLrà  r¡  s         @@r0   rã  ÚpmContext.pmGetInDoma  s  ù€ ð ‰?˜u™}Üœ×,Ñ,Ð.AÓBÐBäœ%”.Ó"ˆÜœ(Ô#Ó%ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐØ‰=Ü˜gÓ&ˆEÜ×"Ñ" 5¬%°«.¼%À».ÓIˆØ�A‹:Ü˜“-ÐØ�A‹:ÜœÔPÔRWÐX^ÓR_Ó`ÓaˆEÜœÔ6¼¸f»ÓFÓGˆEÜ�I‰I�gÔÜ�I‰I�gÔð ˆ|Ðð ˆEØˆEØˆ|Ðr2   c                 ó  • [         R                  U R                  5      nUS:  a  [        U5      e0 nU R	                  US9u  pEUb  Uc  U$ [        U5      n[        U5       H  nUR                  XG   XW   05        M     U$ )z0helper to return dict of inst:name for an indom r   )r»  )rP   ry  rc  r4   rã  rU   rT   Úupdate)r@   r»  r’   ÚretDrå  r¤  r™  rV  s           r0   ÚpmGetInDomDictÚpmContext.pmGetInDomDict|  s}   € ä×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐØˆØ—‘¨U�Ð3‰ˆØ‰=˜E™MØˆKÜ�‹JˆÜ�q–ˆAØ�K‰K˜™ 5¡8Ð,Ö-ñ àˆr2   c                 ó  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      n[         R                  [        U5      U5      nUS:  a  [        U5      eU$ )zzPMAPI - Lookup the instance id with the given NAME in the indom

c_uint instid = pmLookupInDom(pmDesc pmdesc, "Instance")
r   ru   )	rP   ry  rc  r4   r<   rŒ   rw   ÚpmLookupInDomrË  ©r@   rÊ  r  r’   s       r0   rí  ÚpmContext.pmLookupInDomŠ  sq   € ô
 ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDÜ×%Ñ%¤i°Ó&7¸Ó>ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óŒ  • U[         R                  :X  a  g[        5       n[        R	                  U R
                  5      nUS:  a  [        U5      e[        R                  [        U5      U[        U5      5      nUS:  a  [        U5      eUR                  n[        R                  U5        [        UR                  SS5      5      $ )zxPMAPI - Lookup the text name of an instance in an instance domain

"string" = pmNameInDom(pmDesc pmdesc, c_uint instid)
Ú
PM_IN_NULLr   rÚ  rÛ  )rE   rñ  r	   rP   ry  rc  r4   ÚpmNameInDomrË  r   r_   r{  r|  rR   rS   )r@   rÊ  ÚinstvalÚname_pr’   rW   s         r0   rò  ÚpmContext.pmNameInDom™  sš   € ð
 ”e×&Ñ&Ó&ØÜ“ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×#Ñ#¤I¨fÓ$5°wÄÀfÃÓNˆØ�A‹:Ü˜“-ÐØ—‘ˆÜ�	‰	�&ÔÜ�6—=‘= ¨(Ó3Ó4Ð4r2   c                 ó   • g)zœPMAPI - NOOP - Establish a new PMAPI context (done in constructor)

This is unimplemented. A new context is established when a pmContext
object is created.
Nr¹   )r@   r  r  s      r0   rW  ÚpmContext.pmNewContext®  ó   � r2   c                 ó   • g)z•PMAPI - NOOP - Destroy a PMAPI context (done in destructor)

This is unimplemented. The context is destroyed when the pmContext
object is destroyed.
Nr¹   ©r@   Úhandles     r0   r[  ÚpmContext.pmDestroyContextµ  rø  r2   c                 ó°   • [         R                  U R                  5      nUS:  a  [        U5      e[         R	                  5       nUS:  a  [        U5      eU$ )zVPMAPI - Duplicate the current PMAPI Context

This supports copying a pmContext object
r   )rP   ry  rc  r4   ÚpmDupContextr‹  s     r0   rþ  ÚpmContext.pmDupContext¼  sM   € ô
 ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×$Ñ$Ó&ˆØ�A‹:Ü˜“-ÐØˆr2   c                 ó   • g)z¯PMAPI - NOOP - Set the PMAPI context to that identified by handle

This is unimplemented. Context changes are handled by the individual
methods in a pmContext class instance.
Nr¹   rú  s     r0   ry  ÚpmContext.pmUseContextÉ  rø  r2   c                  óP   • [         R                  5       n U S:  a  [        U 5      eU $ )zSPMAPI - Returns the handle of the current PMAPI context
context = pmWhichContext()
r   )rP   ÚpmWhichContextr4   ©r’   s    r0   r  ÚpmContext.pmWhichContextÐ  s(   € ô
 ×&Ñ&Ó(ˆØ�A‹:Ü˜“-ÐØˆr2   c                 ó¾  • [        U[        5      (       a  Sn[        U-  " 5       nX$S'   ORUb  U(       d  Sn[        [        5      " 5       nO1[	        U5      n[        U-  " 5       n[        U5       H	  u  pVXdU'   M     [        R                  U R                  5      nUS:  a  [        U5      e[        R                  [        U5      X45      nUS:  a  [        U5      eU$ )zuPMAPI - add instances to list that will be collected from indom

status = pmAddProfile(pmDesc pmdesc, c_uint instid)
rM   r   )r<   r=   r   r   rU   r’  rP   ry  rc  r4   ÚpmAddProfilerË  ©r@   rÊ  rå  ÚnuminstÚinstArX   r_   r’   s           r0   r  ÚpmContext.pmAddProfileÚ  sÀ   € ô
 �eœS×!Ñ!ØˆGÜ˜W’_Ó'ˆEØ�!ŠHØ‰]¦%ØˆGÜœE”NÓ$‰Eä˜%“jˆGÜ˜W’_Ó'ˆEÜ )¨%Ö 0‘�Ø$�e“ñ !1ä×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×$Ñ$¤Y¨vÓ%6¸ÓGˆØ�A‹:Ü˜“-ÐØˆr2   c                 ój  • Ub  U(       d  Sn[        [        5      " 5       nO1[        U5      n[        U-  " 5       n[        U5       H	  u  pVXdU'   M     [        R                  U R                  5      nUS:  a  [        U5      e[        R                  [        U5      X45      nUS:  a  [        U5      eU$ )z¥PMAPI - delete instances from list to be collected from indom

status = pmDelProfile(pmDesc pmdesc, c_uint inst)
status = pmDelProfile(pmDesc pmdesc, [c_uint inst])
r   )
r   r   rU   r’  rP   ry  rc  r4   ÚpmDelProfilerË  r  s           r0   r  ÚpmContext.pmDelProfileó  s›   € ð ‰=¦ØˆGÜœE”NÓ$‰Eä˜%“jˆGÜ˜W’_Ó'ˆEÜ )¨%Ö 0‘�Ø$�e“ñ !1ä×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×$Ñ$¤Y¨vÓ%6¸ÓGˆØ�A‹:Ü˜“-ÐØˆr2   c                 ó   • [         R                  U R                  5      nUS:  a  [        U5      eSnUb  [	        U5      nSnUb  US:w  a  [	        U5      n[         R                  XU5      nUS:  a  [        U5      eU$ )z{PMAPI - set interpolation mode for reading archive files
code = pmSetModeHighRes(c_api.PM_MODE_INTERP, timespec, timespec)
r   N)rP   ry  rc  r4   r   ÚpmSetModeHighRes)r@   rB  Úoriginr�   r’   ÚwhenrC  s          r0   r  ÚpmContext.pmSetModeHighRes	  s€   € ô ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐØˆØÑÜ˜6“?ˆDØˆØÑ H°£MÜ˜HÓ%ˆEÜ×(Ñ(¨°UÓ;ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óÔ   • [         R                  U R                  5      nUS:  a  [        U5      eSnUb  [	        U5      n[         R                  XU5      nUS:  a  [        U5      eU$ )zlPMAPI - set interpolation mode for reading archive files
code = pmSetMode(c_api.PM_MODE_INTERP, timeval, 0)
r   N)rP   ry  rc  r4   r   Ú	pmSetMode)r@   rB  ÚtimeValrC  r’   r  s         r0   r  ÚpmContext.pmSetMode  sf   € ô ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐØˆØÑÜ˜7Ó#ˆDÜ×!Ñ! $¨eÓ4ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óf   • [         R                  U R                  5      nUS:  a  [        U5      eU$ )zÙPMAPI - Reestablish the context connection

Unlike the underlying PMAPI function, this method takes no parameter.
This method simply attempts to reestablish the the context belonging
to its pmContext instance object.
r   )rP   rµ  rc  r4   r‹  s     r0   rµ  ÚpmContext.pmReconnectContext*  s.   € ô ×*Ñ*¨4¯8©8Ó4ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óÀ   • [         R                  n[        R                  " U5      n[        R                  U R                  X!5      n[        UR                  5       5      $ )z¼PMAPI - Lookup the hostname for the given context

This method simply returns the hostname for the context belonging to
its pmContext instance object.

"hostname" = pmGetContextHostName()
)	rE   ró  r&   rN   rP   ÚpmGetContextHostName_rrc  rR   rS   )r@   ÚbuflenÚbufferrW   s       r0   ÚpmGetContextHostNameÚpmContext.pmGetContextHostName6  sF   € ô ×(Ñ(ˆÜ×,Ò,¨VÓ4ˆÜ×.Ñ.¨t¯x©x¸ÓHˆÜ�6—=‘=“?Ó#Ð#r2   c                 ó°   • [         R                  U R                  5      nUS:  a  [        U5      e[         R	                  5       nUS:  a  [        U5      eU$ )z5PMAPI - Query and set the current reporting timezone r   )rP   ry  rc  r4   ÚpmNewContextZoner‹  s     r0   r!  ÚpmContext.pmNewContextZoneF  sK   € ä×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×(Ñ(Ó*ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óž   • [        U [        5      (       d  U R                  S5      n [        R	                  U 5      nUS:  a  [        U5      eU$ )z:PMAPI - Create new zone handle and set reporting timezone ru   r   )r<   rŒ   rw   rP   Ú	pmNewZoner4   )rè  r’   s     r0   r$  ÚpmContext.pmNewZoneP  sE   € ô ˜"œe×$Ñ$Ø—‘˜7Ó#ˆBÜ×!Ñ! "Ó%ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óR   • [         R                  U 5      nUS:  a  [        U5      eU$ )z,PMAPI - Sets the current reporting timezone r   )rP   Ú	pmUseZoner4   )Ú	tz_handler’   s     r0   r'  ÚpmContext.pmUseZoneZ  s*   € ô ×!Ñ! )Ó,ˆØ�A‹:Ü˜“-ÐØˆr2   c                  ó¾   • [        5       n [        R                  [        U 5      5      nUS:  a  [	        U5      eU R
                  n[        UR                  5       5      $ )z-PMAPI - Query the current reporting timezone r   )r	   rP   ÚpmWhichZoner   r4   r_   rR   rS   )Útz_pr’   rè  s      r0   r+  ÚpmContext.pmWhichZoneb  sJ   € ô ‹zˆÜ×#Ñ#¤E¨$£KÓ0ˆØ�A‹:Ü˜“-ÐØ�Z‰ZˆÜ�2—9‘9“;ÓÐr2   c                 óò   • [         R                  U R                  5      nUS:  a  [        U5      e[	        5       n[        [        U5      5      n[         R                  [        U5      [        U5      5        U$ )z;PMAPI - convert the date and time for a reporting timezone r   )	rP   ry  rc  r4   rÔ   r   r§   ÚpmLocaltimer   ©r@   Úsecondsr’   rW   rí   s        r0   r/  ÚpmContext.pmLocaltimel  sY   € ä×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ“ˆÜœ˜W›Ó&ˆÜ×Ñœ5 ›=¬%°«-Ô8Øˆr2   c                 ó:  • [         R                  U R                  5      nUS:  a  [        U5      e[        R
                  " S5      n[        [        U5      5      n[         R                  [        U5      U5        [        UR                  R                  5       5      $ )z:PMAPI - format the date and time for a reporting timezone r   rè   )rP   ry  rc  r4   r&   rN   r   r§   rê   r   rR   r_   rS   r0  s        r0   rê   ÚpmContext.pmCtimev  so   € ä×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×,Ò,¨RÓ0ˆÜœ˜W›Ó&ˆÜ�‰”u˜V“} fÔ-Ü�6—<‘<×&Ñ&Ó(Ó)Ð)r2   c                 ó  • [        [        5      " 5       n[        R                  U R                  5      nUS:  a  [        U5      e[        R                  [        U5      U[        U5      5      nUS:  a  [        U5      eU$ )z[PMAPI - Fetch pmResult from the target source

pmResult* pmresult = pmFetch(c_uint pmid[])
r   )	r   re  rP   ry  rc  r4   ÚpmFetchrU   r   ©r@   r›  Úresult_pr’   s       r0   r6  ÚpmContext.pmFetchƒ  sf   € ô
 œ8Ô$Ó&ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ—‘¤ E£
¨E´5¸³?ÓCˆØ�A‹:Ü˜“-ÐØˆr2   c                 ó  • [        [        5      " 5       n[        R                  U R                  5      nUS:  a  [        U5      e[        R                  [        U5      U[        U5      5      nUS:  a  [        U5      eU$ )zpPMAPI - Fetch pmHighResResult from the target source

pmHighResResult* pmresult = pmFetchHighRes(c_uint pmid[])
r   ©	r   rž  rP   ry  rc  r4   ÚpmFetchHighResrU   r   r7  s       r0   r<  ÚpmContext.pmFetchHighRes‘  óh   € ô
 œ?Ô+Ó-ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×&Ñ&¤s¨5£z°5¼%À»/ÓJˆØ�A‹:Ü˜“-ÐØˆr2   c                 ó  • [        [        5      " 5       n[        R                  U R                  5      nUS:  a  [        U5      e[        R                  [        U5      U[        U5      5      nUS:  a  [        U5      eU$ )z}PMAPI - Fetch pmHighResResult from the target source (deprecated)

pmHighResResult* pmresult = pmHighResFetch(c_uint pmid[])
r   r;  r7  s       r0   ÚpmHighResFetchÚpmContext.pmHighResFetchŸ  r>  r2   c                 ó.   • [         R                  U 5        g)zWPMAPI - Free a result previously allocated by pmFetch
pmFreeResult(pmResult* pmresult)
N)rP   ÚpmFreeResult©r8  s    r0   rC  ÚpmContext.pmFreeResult­  s   € ô
 	×Ñ˜HÕ%r2   c                 ó.   • [         R                  U 5        g)zePMAPI - Free a result previously allocated by pmFetch
pmFreeHighResResult(pmHighResResult* pmresult)
N)rP   ÚpmFreeHighResResultrD  s    r0   rG  ÚpmContext.pmFreeHighResResult´  s   € ô
 	×"Ñ" 8Õ,r2   c                 óð   • [        U5      /[        R                  l        [        R	                  U R
                  5      nUS:  a  [        U5      e[        R                  U5      nUS:  a  [        U5      eU$ )z_PMAPI - Set values on target source, inverse of pmFetch
pmresult = pmStore(pmResult* pmresult)
r   )rº  rP   ÚpmStorer+   ry  rc  r4   ©r@   rW   r’   s      r0   rJ  ÚpmContext.pmStore»  s`   € ô %)¨£LÐ"2Œ�‰ÔÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ—‘ Ó'ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óð   • [        U5      /[        R                  l        [        R	                  U R
                  5      nUS:  a  [        U5      e[        R                  U5      nUS:  a  [        U5      eU$ )ztPMAPI - Set values on target source, inverse of pmFetchHighRes
pmresult = pmStoreHighRes(pmHighResResult* pmresult)
r   )rº  rP   ÚpmStoreHighResr+   ry  rc  r4   rK  s      r0   rN  ÚpmContext.pmStoreHighResÈ  sd   € ô ,0°«<Ð)9Œ×ÑÔ&Ü×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×&Ñ& vÓ.ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óØ   • [        5       n[        R                  U R                  5      nUS:  a  [	        U5      e[        R                  [        U5      5      nUS:  a  [	        U5      eU$ )zMPMAPI - Get the label record from the archive
loglabel = pmGetArchiveLabel()
r   )rã  rP   ry  rc  r4   ÚpmGetArchiveLabelr   ©r@   Úloglabelr’   s      r0   rQ  ÚpmContext.pmGetArchiveLabelÙ  sZ   € ô “<ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×)Ñ)¬%°«/Ó:ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óØ   • [        5       n[        R                  U R                  5      nUS:  a  [	        U5      e[        R                  [        U5      5      nUS:  a  [	        U5      eU$ )zTPMAPI - Get the label record from the archive
loglabel = pmGetHighResArchiveLabel()
r   )rö  rP   ry  rc  r4   ÚpmGetHighResArchiveLabelr   rR  s      r0   rV  Ú"pmContext.pmGetHighResArchiveLabelæ  s[   € ô %Ó&ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×0Ñ0´°x³ÓAˆØ�A‹:Ü˜“-ÐØˆr2   c                 óØ   • [        5       n[        R                  U R                  5      nUS:  a  [	        U5      e[        R                  [        U5      5      nUS:  a  [	        U5      eU$ ©zAPMAPI - Get the last recorded timestamp from the archive
        r   )r}   rP   ry  rc  r4   ÚpmGetArchiveEndr   )r@   r�   r’   s      r0   rZ  ÚpmContext.pmGetArchiveEndó  sZ   € ô ‹iˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×'Ñ'¬¨c«
Ó3ˆØ�A‹:Ü˜“-ÐØˆ
r2   c                 óØ   • [        5       n[        R                  U R                  5      nUS:  a  [	        U5      e[        R                  [        U5      5      nUS:  a  [	        U5      eU$ rY  )r»   rP   ry  rc  r4   ÚpmGetHighResArchiveEndr   )r@   r=  r’   s      r0   r]  Ú pmContext.pmGetHighResArchiveEndÿ  sZ   € ô ‹zˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×.Ñ.¬u°T«{Ó;ˆØ�A‹:Ü˜“-ÐØˆr2   c                 ó<  ^^• [        [        5      " 5       m[        [        5      " 5       m[        R	                  U R
                  5      nUS:  a  [        U5      e[        U5      n[        R                  U[        T5      [        T5      5      nUS:  a  [        U5      eUS:”  aq  [        [        U4S j[        U5      5      5      n[        [        U4S j[        U5      5      5      n[        R                  T5        [        R                  T5        XT4$ SnSnXT4$ )z‡PMAPI - Get the instance IDs and names for an instance domain

((instance1, instance2...) (name1, name2...)) pmGetInDom(pmDesc pmdesc)
r   c                 ó@   >• [        TU    R                  SS5      5      $ rÙ  rt  r   s    €r0   rü   Ú-pmContext.pmGetInDomArchive.<locals>.<lambda>	  rÝ  r2   c                 ó    >• [        TU    5      $ rd   rƒ  rß  s    €r0   rü   ra  	  rá  r2   N)r   r   r	   rP   ry  rc  r4   rË  ÚpmGetInDomArchiver   r:   rÕ  rT   r{  r|  )r@   rä  r’   r»  r¤  rå  rà  r¡  s         @@r0   rc  ÚpmContext.pmGetInDomArchive	  sæ   ù€ ô
 œ%”.Ó"ˆÜœ(Ô#Ó%ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ˜'Ó"ˆÜ×)Ñ)¨%´°w³ÄÀwÃÓPˆØ�A‹:Ü˜“-ÐØ�A‹:ÜœÔPÔRWÐX^ÓR_Ó`ÓaˆEÜœÔ6¼¸f»ÓFÓGˆEÜ�I‰I�gÔÜ�I‰I�gÔð ˆ|Ðð ˆEØˆEØˆ|Ðr2   c                 ó  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      n[         R                  [        U5      U5      nUS:  a  [        U5      eU$ )z�PMAPI - Lookup the instance id with the given name in the indom

c_uint instid = pmLookupInDomArchive(pmDesc pmdesc, "Instance")
r   ru   )	rP   ry  rc  r4   r<   rŒ   rw   ÚpmLookupInDomArchiverË  rî  s       r0   rf  ÚpmContext.pmLookupInDomArchive#	  sq   € ô
 ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDÜ×,Ñ,¬Y°vÓ->ÀÓEˆØ�A‹:Ü˜“-ÐØˆr2   c                 ód  • [        5       n[        R                  U R                  5      nUS:  a  [	        U5      e[        U5      n[        R                  XR[        U5      5      nUS:  a  [	        U5      eUR                  n[        R                  U5        [        UR                  SS5      5      $ )zPMAPI - Lookup the text name of an instance in an instance domain

"string" = pmNameInDomArchive(pmDesc pmdesc, c_uint instid)
r   rÚ  rÛ  )r	   rP   ry  rc  r4   rË  ÚpmNameInDomArchiver   r_   r{  r|  rR   rS   )r@   rÊ  rH  rô  r’   r»  rW   s          r0   ri  ÚpmContext.pmNameInDomArchive2	  sŒ   € ô
 “ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ˜&Ó!ˆÜ×*Ñ*¨5¼¸f»ÓFˆØ�A‹:Ü˜“-ÐØ—‘ˆÜ�	‰	�&ÔÜ�6—=‘= ¨(Ó3Ó4Ð4r2   c                 óì   • [        [        5      " 5       n[        R                  U R                  5      nUS:  a  [        U5      e[        R                  [        U5      5      nUS:  a  [        U5      eU$ )z]PMAPI - Fetch raw measurements from the target source

pmResult* pmresult = pmFetchArchive()
r   )r   re  rP   ry  rc  r4   ÚpmFetchArchiver   ©r@   r8  r’   s      r0   rl  ÚpmContext.pmFetchArchiveC	  s`   € ô
 œ8Ô$Ó&ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×&Ñ&¤u¨X£Ó7ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óì   • [        [        5      " 5       n[        R                  U R                  5      nUS:  a  [        U5      e[        R                  [        U5      5      nUS:  a  [        U5      eU$ )zkPMAPI - Fetch raw measurements from the target source

pmHighResResult* pmresult = pmFetchHighResArchive()
r   )r   rž  rP   ry  rc  r4   ÚpmFetchHighResArchiver   rm  s      r0   rp  ÚpmContext.pmFetchHighResArchiveQ	  s`   € ô
 œ?Ô+Ó-ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×-Ñ-¬e°H«oÓ>ˆØ�A‹:Ü˜“-ÐØˆr2   c                 ó¦   • 0 nUbK  UR                   S:”  a;  UR                  b.  [        R                  " UR                  R                  5       5      nU$ )zVreturn a dict of a pmLabelSet, i.e. {name: value, ...}
flags arg is currently ignored
r   )r  r  ÚloadsrS   )r@   Úlsetr  Úrets       r0   Úpmlabelset_to_dictÚpmContext.pmlabelset_to_dict_	  sC   € ð ˆØÑ §¡¨qÓ 0°T·Y±YÑ5Jä—*’*˜TŸY™Y×-Ñ-Ó/Ó0ˆCØˆ
r2   c                 ó:  • 0 n[         R                  U R                  5      nUS:  a  [        U5      eU R	                  U5      nU R                  5       nU(       a!  UR                  [        R                  U05        U R                  [         R                  U5      5      nU(       a!  UR                  [        R                  U05        UR                  [        R                  :w  aC  U R                  UR                  5      nU(       a!  UR                  [        R                  U05        U R!                  U5      nU(       a!  UR                  [        R"                  U05        U R%                  U5      nU(       a!  UR                  [        R&                  U05        U$ )z¡PMAPI - Get all labels for a single metric, excluding instance
level labels (use pmGetInstancesLabels for those).
Return dict of {type: {name: value, ...}, ...}
r   )rP   ry  rc  r4   rÁ  ÚpmGetContextLabelsrè  rE   ÚPM_LABEL_CONTEXTÚpmGetDomainLabelsÚpmID_domainÚPM_LABEL_DOMAINr»  ÚPM_INDOM_NULLÚpmGetInDomLabelsÚPM_LABEL_INDOMÚpmGetClusterLabelsÚPM_LABEL_CLUSTERÚpmGetItemLabelsÚPM_LABEL_ITEM)r@   rN  ru  r’   rÄ  rt  s         r0   ÚpmLookupLabelsÚpmContext.pmLookupLabelsi	  s4  € ð
 ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐØ× Ñ  Ó&ˆà×&Ñ&Ó(ˆÞØ�J‰Jœ×.Ñ.°Ð5Ô6à×%Ñ%¤f×&8Ñ&8¸Ó&>Ó?ˆÞØ�J‰Jœ×-Ñ-¨tÐ4Ô5à�:‰:œ×,Ñ,Ó,Ø×(Ñ(¨¯©Ó4ˆDÞØ—
‘
œE×0Ñ0°$Ð7Ô8à×&Ñ& tÓ,ˆÞØ�J‰Jœ×.Ñ.°Ð5Ô6à×#Ñ# DÓ)ˆÞØ�J‰Jœ×+Ñ+¨TÐ2Ô3àˆ
r2   c                 ó0  • 0 n[         R                  U R                  5      nUS:  a  [        U5      eU[        R
                  :X  a  U$ [        [        5      " 5       n[         R                  U[        U5      5      nUS:  a  [        U5      e[        U5       H_  nXE   nUR                  c  M  UR                  UR                  [        R                  " UR                  R                  5       5      05        Ma     US:”  a  [         R!                  XC5        U$ )zmPMAPI - Get instance level labels for all instances in indom
return a dict {instid: {name: value, ...}, ...}
r   )rP   ry  rc  r4   rE   r~  r   r  ÚpmGetInstancesLabelsr   rT   r  rè  rH  rs  rS   ÚpmFreeLabelSets)r@   r»  ÚinstlabelsDr’   r8  rV  rt  s          r0   rˆ  ÚpmContext.pmGetInstancesLabels‹	  sß   € ð ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐØ”E×'Ñ'Ó'ØÐÜœ:Ô&Ó(ˆÜ×,Ñ,¨U´E¸(³OÓDˆØ�A‹:Ü˜“-ÐÜ�v–ˆAØ‘;ˆDØ�y‰yÓ$Ø×"Ñ" D§I¡I¬t¯zªz¸$¿)¹)×:JÑ:JÓ:LÓ/MÐ#NÖOñ ð �A‹:Ü×"Ñ" 8Ô4àÐr2   c                 óJ  • [        [        5      " 5       n[        R                  U R                  5      nUS:  a  [        U5      e[        R                  U[        U5      5      nUS:  a  [        U5      eUS:X  a  0 $ U R                  US   5      nU R                  US5        U$ )zuPMAPI - Get labels of a given metric identifier
On success, this returns a dict of the labels in a single pmLabelSet
r   rM   )
r   r  rP   ry  rc  r4   rƒ  r   rv  r‰  ©r@   rN  r8  r’   ru  s        r0   rƒ  ÚpmContext.pmGetItemLabels¢	  s’   € ô œ:Ô&Ó(ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×'Ñ'¨¬e°H«oÓ>ˆØ�A‹:Ü˜“-ÐØ�Q‹;ØˆIØ×%Ñ% h¨q¡kÓ2ˆØ×Ñ˜X qÔ)Øˆ
r2   c                 óJ  • [        [        5      " 5       n[        R                  U R                  5      nUS:  a  [        U5      e[        R                  U[        U5      5      nUS:  a  [        U5      eUS:X  a  0 $ U R                  US   5      nU R                  US5        U$ )zrPMAPI - Get labels of a given metric cluster
On success, this returns a dict of the labels in a single pmLabelSet
r   rM   )
r   r  rP   ry  rc  r4   r�  r   rv  r‰  r�  s        r0   r�  ÚpmContext.pmGetClusterLabels³	  s’   € ô œ:Ô&Ó(ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×*Ñ*¨4´°x³ÓAˆØ�A‹:Ü˜“-ÐØ�Q‹;ØˆIØ×%Ñ% h¨q¡kÓ2ˆØ×Ñ˜X qÔ)Øˆ
r2   c                 óv  • 0 n[        [        5      " 5       n[        R                  U R                  5      nUS:  a  [        U5      eU[        R                  :X  a  U$ [        R                  U[        U5      5      nUS:  a  [        U5      eUS:”  a&  U R                  US   5      nU R                  US5        U$ )zsPMAPI - Get labels of a given instance domain
On success, this returns a dict of the labels in a single pmLabelSet
r   rM   )r   r  rP   ry  rc  r4   rE   r~  r  r   rv  r‰  )r@   r»  ÚindomLabelsDr8  r’   s        r0   r  ÚpmContext.pmGetInDomLabelsÄ	  s§   € ð ˆÜœ:Ô&Ó(ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐØ”E×'Ñ'Ó'ØÐÜ×(Ñ(¨´°h³Ó@ˆØ�A‹:Ü˜“-ÐØ�A‹:Ø×2Ñ2°8¸A±;Ó?ˆLØ× Ñ  ¨1Ô-ØÐr2   c                 óJ  • [        [        5      " 5       n[        R                  U R                  5      nUS:  a  [        U5      e[        R                  U[        U5      5      nUS:  a  [        U5      eUS:X  a  0 $ U R                  US   5      nU R                  US5        U$ )zvPMAPI - Get labels of a given performance domain
On success, this returns a dict of the labels in a single pmLabelSet
r   rM   )
r   r  rP   ry  rc  r4   r{  r   rv  r‰  )r@   Údomainr8  r’   ru  s        r0   r{  ÚpmContext.pmGetDomainLabels×	  s’   € ô œ:Ô&Ó(ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×)Ñ)¨&´%¸³/ÓBˆØ�A‹:Ü˜“-ÐØ�Q‹;ØˆIØ×%Ñ% h¨q¡kÓ2ˆØ×Ñ˜X qÔ)Øˆ
r2   c                 óH  • [        [        5      " 5       n[        R                  U R                  5      nUS:  a  [        U5      e[        R                  [        U5      5      nUS:  a  [        U5      eUS:X  a  0 $ U R                  US   5      nU R                  US5        U$ )zoPMAPI - Get labels of the current context
On success, this returns a dict of the labels in a single pmLabelSet
r   rM   )
r   r  rP   ry  rc  r4   ry  r   rv  r‰  )r@   r8  r’   ru  s       r0   ry  ÚpmContext.pmGetContextLabelsè	  s�   € ô œ:Ô&Ó(ˆÜ×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-ÐÜ×*Ñ*¬5°«?Ó;ˆØ�A‹:Ü˜“-ÐØ�Q‹;ØˆIØ×%Ñ% h¨q¡kÓ2ˆØ×Ñ˜X qÔ)Øˆ
r2   c                 óÒ  • [        U [        5      (       d  U /nOU n[        R                  " [        R
                  5      n[        [        U5      -  " 5       n[        U5       H!  u  pE[        UR                  S5      5      X4'   M#     [        R                  U[        U5      U[        U5      5      nUS:  a  [        U5      eUR                  n[        UR                  SS5      5      $ )z3PMAPI - Merges string labels into a string
        ru   r   rÚ  rÛ  )r<   r:   r&   rN   rE   ÚPM_MAXLABELJSONLENr	   rU   r’  rw   rP   ÚpmMergeLabelsr4   r_   rR   rS   )r  ÚlabelsLr8  Úarg_arrrV  Úlabelr’   rW   s           r0   r›  ÚpmContext.pmMergeLabelsü	  s»   € ô ˜&¤$×'Ñ'Ø�h‰GàˆGÜ×.Ò.¬u×/GÑ/GÓHˆÜœc '›lÒ*Ó-ˆÜ! 'Ö*‰HˆAÜ! %§,¡,¨wÓ"7Ó8ˆG‹Jñ +ä×%Ñ% g¬s°7«|Ø&.´°H³ó?ˆà�A‹:Ü˜“-ÐØ—‘ˆÜ�6—=‘= ¨(Ó3Ó4Ð4r2   c                 óð  • [         R                  " [        R                  5      nUc  S n[	        U5      nU c	  SUl        GO[        U [        5      (       d  U /nOI/ nU  HA  n[        U[        5      (       a  UR                  U5        M+  Uc  M0  UR                  U5        MC     [        [        5      [        U5      -  " 5       n[        U5       H)  u  p‰[        [        U	5      [        [        5      5      Xx'   M+     [        [!        U5      ["        5      n[$        R'                  U[        U5      U[        U5      XB5      n
U
S:  a  [)        U
5      eUR
                  n[+        UR-                  SS5      5      $ )z„PMAPI - Merges list of pmLabelSets based on labelSets hierarchy into
a string. Each list element may also be either a list or None.
c                 ó   • grS  r¹   )rû   ÚyÚzs      r0   rü   Ú,pmContext.pmMergeLabelSets.<locals>.<lambda>
  s   €  qr2   s   {}r   rÚ  rÛ  )r&   rN   rE   rš  ÚmergeLabelSetsCB_typer_   r<   r:   ÚextendÚappendr   r  rU   r’  r   r   r	   r
   rP   ÚpmMergeLabelSetsr4   rR   rS   )Ú	labelSetsr«  Úargr8  Úcb_funcÚ
labelSetsLrñ   r�  rV  Úlabelsetr’   rW   s               r0   r¨  ÚpmContext.pmMergeLabelSets
  s1  € ô
 ×.Ò.¬u×/GÑ/GÓHˆØÑÙ(ˆHÜ'¨Ó1ˆàÑØ"ˆHŽNä˜i¬×.Ñ.Ø'˜[‘
à�
Û"�AÜ! !¤T×*Ñ*Ø"×)Ñ)¨!Ö,Ø›Ø"×)Ñ)¨!Ö,ñ	 #ô œzÓ*¬S°«_Ò<Ó?ˆGÜ(¨Ö4‘�Ü!¤%¨£/´7¼:Ó3FÓG�“
ñ  5ä”x “}¤hÓ/ˆCÜ×,Ñ,¨W´c¸*³oÀxÜ-0°«]¸GóJˆFà˜‹zÜ˜F“mÐ#à—‘ˆÜ�6—=‘= ¨(Ó3Ó4Ð4r2   c                 ó®   • [        U5       HF  n[        [        X   5      [        [        5      5      nU(       d  M0  [
        R                  US5        MH     g)zhPMAPI - Free the pmLabelSets memory. The labelsets argument is
an array of nsets pmLabelSet structures.
rM   N)rT   r   r   r   r  rP   r‰  )r©  ÚnsetsrV  rª  s       r0   r‰  ÚpmContext.pmFreeLabelSets2
  s?   € ô
 �u–ˆAÜ”u˜Y™\Ó*¬G´JÓ,?Ó@ˆCßˆsÜ×&Ñ& s¨AÖ.ò r2   c                 ó´   • [        U [        5      (       d  U R                  S5      n [        R	                  U 5      nUc  U$ [        UR                  5       5      $ )z@PMAPI - Return single value from environment or pcp config file ru   )r<   rŒ   rw   rP   ÚpmGetOptionalConfigrR   rS   )ÚvariablerW   s     r0   ÚpmGetConfigÚpmContext.pmGetConfig<
  sJ   € ô ˜(¤E×*Ñ*Ø—‘ wÓ/ˆHÜ×+Ñ+¨HÓ5ˆØ‰>ØˆMÜ�6—=‘=“?Ó#Ð#r2   c                 óÄ   • [         R                  " [        R                  5      n[        R                  X[        R                  5      n[        UR                  5       5      $ )z4PMAPI - Convert an error code to a readable string  )r&   rN   rE   rO   rP   rQ   rR   rS   )r>   ÚerrstrrW   s      r0   ÚpmErrStrÚpmContext.pmErrStrF
  sC   € ô ×,Ò,¬U×-BÑ-BÓCˆÜ×"Ñ" 4´×1FÑ1FÓGˆÜ�6—=‘=“?Ó#Ð#r2   c                 ó~   • [        5       n[        R                  XU[        U5      U5      nUS:  a  [	        U5      eU$ )a'  PMAPI - Extract a value from a pmValue struct and convert its type

pmAtomValue = pmExtractValue(results.contents.get_valfmt(i),
                             results.contents.get_vlist(i, 0),
                             descs[i].contents.type,
                             c_api.PM_TYPE_FLOAT)
r   )rð   rP   ÚpmExtractValuer   r4   )rP  rQ  ÚintypeÚouttypeÚoutAtomr’   s         r0   r¼  ÚpmContext.pmExtractValueM
  s?   € ô “-ˆÜ×&Ñ& v°fÜ',¨W£~°wó@ˆà�A‹:Ü˜“-ÐØˆr2   c           	      ó@  • [        U[        5      (       a  [        5       nSUl        XEl        OUn[        5       n[        R                  U [        U5      [        X#   R                  R                  5      [        U5      [        U5      5      nUS:  a  [        U5      eU$ )z°PMAPI - Convert a value to a different scale

pmAtomValue = pmConvScale(c_api.PM_TYPE_FLOAT, pmAtomValue,
                                    pmDesc*, 3, c_api.PM_SPACE_MBYTE)
rM   r   )r<   r=   r   r!  r$  rð   rP   ÚpmConvScaler   r_  r½  r4   )ÚinTypeÚinAtomrÄ  Ú
metric_idxÚoutUnitsÚpmunitsr¿  r’   s           r0   rÂ  ÚpmContext.pmConvScale]
  s‡   € ô �h¤×$Ñ$Ü“iˆGØ ˆGÔØ!)ÕàˆGÜ“-ˆÜ×#Ñ# F¬E°&«MÜ$)¨$Ñ*:×*CÑ*C×*IÑ*IÓ$JÜ$)¨'£N´E¸'³NóDˆð �A‹:Ü˜“-ÐØˆr2   c                 óŒ   • [         R                  " S5      n[        R                  XS5      n[	        UR                  5       5      $ )z2PMAPI - Convert units struct to a readable string r4  r5  )r½  r7  rW   s      r0   Ú
pmUnitsStrÚpmContext.pmUnitsStrr
  s7   € ô ×-Ò-¨bÓ1ˆÜ×$Ñ$ U°RÓ8ˆÜ�6—=‘=“?Ó#Ð#r2   c                 óŒ   • [         R                  " S5      n[        R                  XS5      n[	        UR                  5       5      $ )z3PMAPI - Convert double value to fixed-width string r{   )r&   rN   rP   ÚpmNumberStr_rrR   rS   )r_   ÚnumstrrW   s      r0   ÚpmNumberStrÚpmContext.pmNumberStry
  s7   € ô ×,Ò,¨QÓ/ˆÜ×%Ñ% e°QÓ7ˆÜ�6—=‘=“?Ó#Ð#r2   c                 ó2   • [         R                  XU5      nU$ )z/PMAPI - build a pmID from domain, cluster, item)rP   Ú
pmID_build)rö   r   rV  rW   s       r0   rÒ  ÚpmContext.pmID_build€
  s   € ô ×"Ñ" 1¨Ó+ˆØˆr2   c                 ó0   • [         R                  U 5      nU$ )z&PMAPI - return domain number from pmID)rP   r|  ©rN  rW   s     r0   r|  ÚpmContext.pmID_domain†
  s   € ô ×#Ñ# DÓ)ˆØˆr2   c                 ó0   • [         R                  U 5      nU$ )z'PMAPI - return cluster number from pmID)rP   ÚpmID_clusterrÕ  s     r0   rØ  ÚpmContext.pmID_clusterŒ
  s   € ô ×$Ñ$ TÓ*ˆØˆr2   c                 ó0   • [         R                  U 5      nU$ )z$PMAPI - return item number from pmID)rP   Ú	pmID_itemrÕ  s     r0   rÛ  ÚpmContext.pmID_item’
  s   € ô ×!Ñ! $Ó'ˆØˆr2   c                 óŒ   • [         R                  " S5      n[        R                  XS5      n[	        UR                  5       5      $ )z,PMAPI - Convert a pmID to a readable string rè   )r&   rN   rP   Ú	pmIDStr_rrR   rS   )rN  ÚpmidstrrW   s      r0   ÚpmIDStrÚpmContext.pmIDStr˜
  s7   € ô ×-Ò-¨bÓ1ˆÜ×!Ñ! $°Ó4ˆÜ�6—=‘=“?Ó#Ð#r2   c                 ó0   • [         R                  X5      nU$ )z-PMAPI - build an indom from domain and serial)rP   ÚpmInDom_build)rö   ÚsrW   s      r0   rã  ÚpmContext.pmInDom_buildŸ
  s   € ô ×%Ñ% aÓ+ˆØˆr2   c                 ó0   • [         R                  U 5      nU$ )z'PMAPI - return domain number from indom)rP   ÚpmInDom_domain©r»  rW   s     r0   rç  ÚpmContext.pmInDom_domain¥
  ó   € ô ×&Ñ& uÓ-ˆØˆr2   c                 ó0   • [         R                  U 5      nU$ )z'PMAPI - return serial number from indom)rP   ÚpmInDom_serialrè  s     r0   rì  ÚpmContext.pmInDom_serial«
  rê  r2   c                 ó    • [         R                  " S5      n[        R                  [	        U 5      US5      n[        UR                  5       5      $ )z`PMAPI - Convert an instance domain ID  to a readable string
"indom" = pmGetInDom(pmDesc pmdesc)
rè   )r&   rN   rP   ÚpmInDomStr_rrË  rR   rS   )rä  ÚindomstrrW   s      r0   Ú
pmInDomStrÚpmContext.pmInDomStr±
  s>   € ô
 ×.Ò.¨rÓ2ˆÜ×$Ñ$¤Y¨wÓ%7¸À2ÓFˆÜ�6—=‘=“?Ó#Ð#r2   c                 óŒ   • [         R                  " S5      n[        R                  XS5      n[	        UR                  5       5      $ )zgPMAPI - Convert a performance metric type to a readable string
"type" = pmTypeStr(c_api.PM_TYPE_FLOAT)
rè   )r&   rN   rP   ÚpmTypeStr_rrR   rS   )r  ÚtypestrrW   s      r0   Ú	pmTypeStrÚpmContext.pmTypeStrº
  s7   € ô
 ×-Ò-¨bÓ1ˆÜ×#Ñ# E°BÓ7ˆÜ�6—=‘=“?Ó#Ð#r2   c                 ó    • [         R                  " S5      n[        R                  [	        U 5      XS5      n[        UR                  5       5      $ )z_PMAPI - Convert a value atom to a readable string
"value" = pmAtomStr(atom, c_api.PM_TYPE_U32)
é`   )r&   rN   rP   ÚpmAtomStr_rr   rR   rS   )Úatomr  ÚatomstrrW   s       r0   Ú	pmAtomStrÚpmContext.pmAtomStrÃ
  s=   € ô
 ×-Ò-¨bÓ1ˆÜ×#Ñ#¤E¨$£K°ÀÓDˆÜ�6—=‘=“?Ó#Ð#r2   c                 óŒ   • [         R                  " S5      n[        R                  XS5      n[	        UR                  5       5      $ )zmPMAPI - Convert a performance metric semantic to a readable string
"string" = pmSemStr(c_api.PM_SEM_COUNTER)
rè   )r&   rN   rP   Ú
pmSemStr_rrR   rS   )r¼  ÚsemstrrW   s      r0   ÚpmSemStrÚpmContext.pmSemStrÌ
  s7   € ô
 ×,Ò,¨RÓ0ˆÜ×"Ñ" 3°Ó3ˆÜ�6—=‘=“?Ó#Ð#r2   c           	      óX  • [         R                  [        U 5      [        UR                  R
                  U   R                  R                  5      [        UR                  R                  5      [        UR                  R
                  U   R                  R                  U   5      U5        g)zjPMAPI - Print the value of a metric
pmPrintValue(file, value, pmdesc, vset_index, vlist_index, min_width)
N)
rP   ÚpmPrintValuer1   r   r_  rW  rP  rº  r   rQ  )r/   rW   Úptyperv  r�  Ú	min_widths         r0   r  ÚpmContext.pmPrintValueÕ
  sz   € ô
 	×ÑœM¨'Ó2Ü! &§/¡/×"6Ñ"6°xÑ"@×"IÑ"I×"PÑ"PÓQÜ! %§.¡.×"5Ñ"5Ó6Ü! &§/¡/×"6Ñ"6°xÑ"@×"IÑ"I×"OÑ"OÐPYÑ"ZÓ[Ø%õ		'r2   c                  óP   • [         R                  5       n U S:  a  [        U 5      eU $ )z7PMAPI - flush the internal buffer shared with pmprintf r   )rP   Úpmflushr4   r  s    r0   r
  ÚpmContext.pmflushà
  s&   € ô —‘Ó!ˆØ�A‹:Ü˜“-ÐØˆr2   c                 óT   • [         R                  " U /UQ76 nUS:  a  [        U5      eg)z=PMAPI - append message to internal buffer for later printing r   N)rP   rv   r4   )Úfmtr;   r’   s      r0   rv   ÚpmContext.pmprintfè
  s-   € ô —’ Ð, tÒ,ˆØ�A‹:Ü˜“-Ðð r2   c                 ó.   • [         R                  U 5        g)zGPMAPI - sort all metric instances in result returned by pmFetchHighRes N)rP   ÚpmSortHighResInstancesrD  s    r0   r  Ú pmContext.pmSortHighResInstancesï
  s   € ô 	×%Ñ% hÕ/r2   c                 ó.   • [         R                  U 5        g)z@PMAPI - sort all metric instances in result returned by pmFetch N)rP   ÚpmSortInstancesrD  s    r0   r  ÚpmContext.pmSortInstancesô
  s   € ô 	×Ñ˜xÕ(r2   c                 ó0   • [         R                  U 5      S4$ )zzPMAPI - parse a textual time interval into a timespec struct
(timespec_ctype, '') = pmParseHighResInterval("time string")
rT  )r»   r“   ©r�   s    r0   rÁ   Ú pmContext.pmParseHighResIntervalù
  s   € ô
 ×%Ñ% hÓ/°Ð4Ð4r2   c                 ó0   • [         R                  U 5      S4$ )zqPMAPI - parse a textual time interval into a timeval struct
(timeval_ctype, '') = pmParseInterval("time string")
rT  )r}   r“   r  s    r0   r�   ÚpmContext.pmParseInterval   s   € ô
 ×$Ñ$ XÓ.°Ð3Ð3r2   c                 ó2   • [         R                  XU5      S4$ )zyPMAPI - parse a textual metric specification into a struct
(result, '') = pmParseMetricSpec("hinv.ncpu", 0, "localhost")
rT  )rÍ  rß  )rÜ  rÎ  rÏ  s      r0   rÚ  ÚpmContext.pmParseMetricSpec  s   € ô
 ×'Ñ'¨¸Ó?ÀÐDÐDr2   c                 ó  • [        U [        [        45      (       d#  [        [        R
                  [        U 5      5      e[        U [        5      (       d  U R                  S5      n [        5       n[        5       n[        5       n[        R                  U [        U5      [        U5      [        U5      5      nUS:  aC  [        UR                  R                  5       5      n[         R#                  U5        [        XE5      eXR                  4$ rÙ  )r<   rŒ   Ú	text_typer4   rE   r´  rR   rw   r   r	   r   rP   ÚpmParseUnitsStrr   r_   rS   r{  r|  )rÜ  rW   r‘   Ú
multiplierr’   r„  s         r0   r  ÚpmContext.pmParseUnitsStr  sÅ   € ä˜&¤5¬)Ð"4×5Ñ5Üœ×)Ñ)¬3¨v«;Ó7Ð7Ü˜&¤%×(Ñ(Ø—]‘] 7Ó+ˆFÜ“ˆÜ“ˆÜ“Zˆ
Ü×'Ñ'¨´°f³¼uÀZÓ?PÔRWÐX^ÓR_Ó`ˆØ�A‹:Ü�v—|‘|×*Ñ*Ó,Ó-ˆDÜ�I‰I�fÔÜ˜Ó%Ð%Ø×(Ñ(Ð)Ð)r2   c                 ó"   • U R                  5       $ )z°Delay for a specified amount of time (timespec).
Useful for implementing tools that do metric sampling.
Single arg is timespec in tuple returned from pmParseHighResInterval().
©r±   )r=  s    r0   ÚpmtimespecSleepÚpmContext.pmtimespecSleep  s   € ð �z‰z‹|Ðr2   c                 ó"   • U R                  5       $ )z§Delay for a specified amount of time (timeval).
Useful for implementing tools that do metric sampling.
Single arg is timeval in tuple returned from pmParseInterval().
r"  )r�   s    r0   ÚpmtimevalSleepÚpmContext.pmtimevalSleep&  s   € ð �y‰y‹{Ðr2   c                  óz   • [        [        R                  " [        S5      R                  R                  5       5      $ r[   r]   r¹   r2   r0   r\   ÚpmContext.pmProgname.  s'   € ä”8—?’?¤6¨<Ó8×>Ñ>×EÑEÓGÓHÐHr2   c                 ó`   • [         R                  " [        S5      R                  U -  (       a  gg)NÚpmDebugTF)r   r^   rP   r_   )r  s    r0   r+  ÚpmContext.pmDebug2  s!   € ä�<Š<œ 	Ó*×0Ñ0°5×8ØØr2   c                 óú  • US:¼  a  U(       a  SOSnOWU (       a1  U R                  5       n[        R                  " U5      R                  nO[        R                  " 5       R                  nU(       a  [        R                  O[        R
                  n[        R                  U   nU(       aP  [        US-  5      n[        US-  S-  5      nUS:¼  a  US-  nU[        U5      -  nU(       a  US[        U5      -   -  nU$ )z:Get current timezone offset string using POSIX convention r   rM   ç      ¬@i  é<   Ú+r  )	r  r°   Ú	localtimerÝ   Úaltzoner÷  Útznamer=   rR   )rd  Úset_dstÚdstr�   Úoffsetr÷  Ú	offset_hrÚ
offset_mins           r0   Úget_current_tzÚpmContext.get_current_tz;  sÇ   € ð �a‹<Þ‘! A‰CÞØ×+Ñ+Ó-ˆCÜ—.’. Ó%×.Ñ.‰Cä—.’.Ó"×+Ñ+ˆCÞ!$”—’¬$¯-©-ˆÜ—;‘;˜sÑ#ˆÞÜ˜F V™OÓ,ˆIÜ˜V d™]¨RÑ/Ó0ˆJØ˜‹{Ø˜C‘�Øœ˜I›Ñ&ˆHÞØ˜C¤# j£/Ñ1Ñ1�Øˆr2   c                 óà   • U (       a  SS Vs/ s H  oU ;   PM	     sn;  a  gSU ;   a  U R                  S5      S   OU R                  S5      S   nSU ;   a  SOSnSU-   [        U5      -   $ s  snf )zBConvert POSIX timezone offset string to human readable UTC offset T)r0  Ú-zUTC+0r0  rM   r<  ÚUTC)rl  rR   )r÷  r   r6  Úsigns       r0   Úposix_tz_to_utc_offsetÚ pmContext.posix_tz_to_utc_offsetQ  sr   € ö ˜t¹zÓ'Jºz¸!¨X¬¹zÑ'JÓJØØ+.°(«?�—‘ Ó$ QÒ'ÀÇÁÈsÓ@SÐTUÑ@VˆØ˜X“o‰s¨3ˆØ�t‰|œc &›kÑ)Ð)ùò	 (Ks   �A+c                 ó&  • U R                  5       (       aZ  U R                  5       [        R                  S'   [        R                  " 5         [
        R                  U R                  5       5        gU R                  5       (       a;  [
        R                  5       [        R                  S'   [        R                  " 5         g[
        R                  U 5      nU[        R                  S'   [        R                  " 5         [
        R                  U5        g)zSet timezone for a Python tool ÚTZN)
r  r,   Úenvironr°   ÚtzsetrG  r$  r  r+  r9  )rd  r÷  s     r0   Úset_timezoneÚpmContext.set_timezoneZ  s®   € ð ×&Ñ&×(Ñ(Ø&×:Ñ:Ó<ŒB�J‰J�tÑÜ�JŠJŒLÜ×Ñ × ;Ñ ;Ó =Õ>Ø×(Ñ(×*Ñ*Ü(×4Ñ4Ó6ŒB�J‰J�tÑÜ�JŠJ�Lä ×/Ñ/°Ó8ˆHØ'ŒB�J‰J�tÑÜ�JŠJŒLÜ×Ñ Õ)r2   c                 óŠ  • U [         R                  " S5      -
  nU[        R                  :X  a4  UR                  UR
                  UR                  S-  S-  -   S-  -   S-  nU$ U[        R                  :X  a4  UR                  UR
                  UR                  S-  S-  -   S-  -   S-  nU$ U[        R                  :X  a4  UR                  UR
                  UR                  S-  S-  -   S-  -   S-  nU$ U[        R                  :X  a4  UR                  UR
                  UR                  S-  S-  -   S-  -   S-  nU$ [        S5      e)z5Convert datetime value to seconds of given precision r   g      8@r.  g    €„.Ag     @�@g      ð?zUnsupported precision requested)r   ÚfromtimestamprE   ÚPM_TIME_SECÚmicrosecondsr1  ÚdaysÚPM_TIME_MSECÚPM_TIME_USECÚPM_TIME_NSECÚ
ValueError)r_   Ú	precisionÚtdtÚtsts       r0   Údatetime_to_secsÚpmContext.datetime_to_secsj  sI  € ð ”h×,Ò,¨QÓ/Ñ/ˆØœ×)Ñ)Ó)Ø×#Ñ# s§{¡{°S·X±XÀ±_ÀvÑ5MÑ'MÐQXÑ&XÑXÐ\cÑcˆCð ˆ
ð œ%×,Ñ,Ó,Ø×#Ñ# s§{¡{°S·X±XÀ±_ÀvÑ5MÑ'MÐQXÑ&XÑXÐ\cÑcˆCð ˆ
ð œ%×,Ñ,Ó,Ø×#Ñ# s§{¡{°S·X±XÀ±_ÀvÑ5MÑ'MÐQXÑ&XÑXÐ\_Ñ_ˆCð
 ˆ
ð	 œ%×,Ñ,Ó,Ø×#Ñ# s§{¡{°S·X±XÀ±_ÀvÑ5MÑ'MÐQXÑ&XÑXÐ\cÑcˆCð ˆ
ô Ð>Ó?Ð?r2   c                 ó´   • U(       a  U (       a  [         R                  nSnX44$ [         R                  n[        UR                  UR
                  S-  5      nX44$ )z Get mode and step for pmSetMode Néè  )rE   ÚPM_MODE_FORWr9  r»   r   r€   )r%  Úinterpolr�   rB  Ústeps        r0   Úget_mode_stepÚpmContext.get_mode_stepz  sS   € ö ž7Ü×%Ñ%ˆDØˆDð ˆzÐô ×'Ñ'ˆDÜ˜HŸO™O¨X×-=Ñ-=ÀÑ-DÓEˆDØˆzÐr2   c                 ó4  • [         R                  U R                  5      nUS:  a  [        U5      eU R	                  U5        U R
                  [        R                  :X  a9  [        R                  X#U5      u  pgU R                  XaR                  5       U5        gg)zCommon execution preparation r   N)rP   ry  rc  r4   rE  rº  rE   r_  rG  rZ  r  r  )r@   rd  r%  rX  r�   r’   rB  rY  s           r0   Úprepare_executeÚpmContext.prepare_execute…  sy   € ä×$Ñ$ T§X¡XÓ.ˆØ�A‹:Ü˜“-Ðà×Ñ˜'Ô"à�9‰9œ×0Ñ0Ó0Ü"×0Ñ0°ÀHÓM‰JˆDØ×!Ñ! $×(HÑ(HÓ(JÈDÕQð 1r2   ©rQ  rM  rI  )r   r   )r   r…  )éÿ   )rM   rá  )Néÿÿÿÿ)|rh   ri   rj   rk   r  rJ  rN  rR  r]  rº  rX  rc  rE   r`  r9   r>  r¸   re  rE  rp  rz  r†  rŠ  rŽ  r“  r£  r§  r¬  r°  r·  rº  r¾  rÁ  rÈ  ÚPM_TEXT_ONELINErÐ  rÕ  rã  rê  rí  rò  rW  r[  rþ  ry  r  r  r  r  r  rµ  r  r!  r$  r'  r+  r/  rê   r6  r<  r@  rC  rG  rJ  rN  rQ  rV  rZ  r]  rc  rf  ri  rl  rp  rv  r…  rˆ  rƒ  r�  r  r{  ry  r›  r¨  r‰  rµ  r¹  r¼  rÂ  rÊ  rÏ  rÒ  r|  rØ  rÛ  rà  rã  rç  rì  rñ  rö  rý  r  r  r
  rv   r  r  rÁ   r�   rÚ  r  r#  r&  r\   r+  r9  r?  rE  rI  rS  rZ  r]  rl   r¹   r2   r0   rG  rG  ¥  s[  † ñò4òòñ �G˜T 4¨Ó.€DÙ�i  t¨TÓ2€FÙ
�6˜4  tÓ
,€Cð
 #×2Ñ2¸8ô 
-ò/ð ó-ó ð-ð^ ñ(ó ð(ò\ò(ò0
òô!òFò$ò	 ò	 ò ò$ð  ñó ðòò$ð> .3×-BÑ-Bô $ð" ',×&;Ñ&;ô "ô$ò6òò5ò*òòòð ñó ðòò2ò,ò$ò
ò$ò ð ñó ðð ñó ðð ñ ó ð òò*òòòð ñ&ó ð&ð ñ-ó ð-òòò"òò
ò
òò0ò5ò"òôò òDò.ò"ò"ò&ò"ð( ñ5ó ð5ð$ ó 5ó ð 5ðD ó/ó ð/ð ñ$ó ð$ð ñ$ó ð$ð ñó ðð ñó ðð( ñ$ó ð$ð ñ$ó ð$ð ñó ðð
 ñó ðð
 ñó ðð
 ñó ðð
 ñ$ó ð$ð ñó ðð
 ñó ðð
 ñó ðð
 ñ$ó ð$ð ñ$ó ð$ð ñ$ó ð$ð ñ$ó ð$ð ñ'ó ð'ð ñó ðð ñ ó ð ð ñ0ó ð0ð ñ)ó ð)ð ñ5ó ð5ð ñ4ó ð4ð óEó ðEð ñ*ó ð*ð ñó ðð ñó ðð ñIó ðIð ñó ðð óó ðð* ñ*ó ð*ð ñ*ó ð*ð Ø*/×*;Ñ*;ó ó ðð ñó ðõ
Rr2   rG  c                   ó  • \ rS rSrSr " S S\5      r " S S\5      r " S S\5      r\r	 " S	 S
\5      r
 " S S\5      r " S S\5      r\R                  S4S jrS rS rSS jrSS jrS rS r\rSS jrS rS rSrg)Ú
fetchgroupi¹  aÍ  Defines a PMAPI fetchgroup.

This class wraps the pmFetchGroup set of C PMAPI functions (q.v.)
in an object-oriented manner.

Each instance of this class represents one fetchgroup, in which
interest in several metrics (individual or indoms) is registered.
Each registration results in an function-like object that may be
called to decode that metric's value(s).  Errors are signalled
with exceptions rather than result integers.  Strings are all
UTF-8 encoded.
c                   ó$   • \ rS rSrSrS rS rSrg)Úfetchgroup.fetchgroup_itemiÇ  zÃ
An internal class to receive value/status for a single item.
It may be called as if it were a function object to decode
the embedded pmAtomValue, which was set at the most recent
.fetch() call.
c                 ój   • [        [        R                  5      U l        Xl        [        5       U l        g©z8Allocate a single instance to receive a fetchgroup item.N)r   rE   ÚPM_ERR_VALUEÚstsÚpmtyperð   r_   )r@   rk  s     r0   r9   Ú#fetchgroup.fetchgroup_item.__init__Ï  s"   € äœU×/Ñ/Ó0ˆDŒHØ ŒKÜ$›ˆD�Jr2   c                 ó¾   • U R                   R                  S:  a  [        U R                   R                  5      eU R                  R                  U R                  5      $ )ú>Retrieve a converted value of a fetchgroup item, if available.r   )rj  r_   r4   r  rk  r`   s    r0   Ú__call__Ú#fetchgroup.fetchgroup_item.__call__Õ  s<   € à�x‰x�~‰~ Ó!Ü˜DŸH™HŸN™NÓ+Ð+Ø—:‘:—?‘? 4§;¡;Ó/Ð/r2   )rk  rj  r_   N©rh   ri   rj   rk   r  r9   ro  rl   r¹   r2   r0   Úfetchgroup_itemrf  Ç  s   † ñ	ò	'õ	0r2   rr  c                   ó$   • \ rS rSrSrS rS rSrg)Úfetchgroup.fetchgroup_timespeciÛ  zÌ
An internal class to receive value for a single timespec.
It may be called as if it were a function object to decode
the timespec, which was set at the most recent
.fetch() call, into a datetime object.
c                 ó.   • [        5       U l        Xl        g)z<Allocate a single instance to receive a fetchgroup timespec.N)r»   r_   rc  ©r@   rc  s     r0   r9   Ú'fetchgroup.fetchgroup_timespec.__init__ã  s   € ä!›ˆDŒJØ�Hr2   c           
      óP  • U R                   R                  U R                  R                  5      n[	        U R                  R
                  5      S-  n[        UR                  S-   UR                  S-   UR                  UR                  UR                  UR                  US5      nU$ )zm
Retrieve a converted value of a timespec, if available.  Use
pmLocaltime() to convert to a datetime object.
rV  râ   rM   N)rc  r/  r_   r   r=   r¼   r   rÚ   rÙ   rØ   r×   rÖ   rÕ   ©r@   rˆ   ÚusÚdts       r0   ro  Ú'fetchgroup.fetchgroup_timespec.__call__è  s|   € ð
 —‘×%Ñ% d§j¡j×&7Ñ&7Ó8ˆBÜ�T—Z‘Z×'Ñ'Ó(¨DÑ0ˆBÜ˜"Ÿ*™* T™/¨2¯9©9°Q©;¸¿
¹
ØŸ*™* b§i¡i°·±¸BÀóFˆBàˆIr2   ©rc  r_   Nrq  r¹   r2   r0   Úfetchgroup_timespecrt  Û  ó   † ñ	ò	õ
		r2   r~  c                   ó$   • \ rS rSrSrS rS rSrg)Úfetchgroup.fetchgroup_timevalió  zÊ
An internal class to receive value for a single timeval.
It may be called as if it were a function object to decode
the timeval, which was set at the most recent
.fetch() call, into a datetime object.
c                 ó.   • [        5       U l        Xl        g)z;Allocate a single instance to receive a fetchgroup timeval.N)r}   r_   rc  rv  s     r0   r9   Ú&fetchgroup.fetchgroup_timeval.__init__û  s   € ä ›ˆDŒJØ�Hr2   c           
      óJ  • U R                   R                  U R                  R                  5      n[	        U R                  R
                  5      n[        UR                  S-   UR                  S-   UR                  UR                  UR                  UR                  US5      nU$ )zl
Retrieve a converted value of a timeval, if available.  Use
pmLocaltime() to convert to a datetime object.
râ   rM   N)rc  r/  r_   r   r=   r€   r   rÚ   rÙ   rØ   r×   rÖ   rÕ   ry  s       r0   ro  Ú&fetchgroup.fetchgroup_timeval.__call__   sw   € ð
 —‘×%Ñ% d§j¡j×&7Ñ&7Ó8ˆBÜ�T—Z‘Z×'Ñ'Ó(ˆBÜ˜"Ÿ*™* T™/¨2¯9©9°Q©;¸¿
¹
ØŸ*™* b§i¡i°·±¸BÀóFˆBàˆIr2   r}  Nrq  r¹   r2   r0   Úfetchgroup_timevalr�  ó  r  r2   r†  c                   ó$   • \ rS rSrSrS rS rSrg)Úfetchgroup.fetchgroup_indomi  a9  
An internal class to receive value/status for an indom of
items.  It may be called as if it were a function object to
create an list of tuples containing instance-code/-name/value
information.  Each value is a function object that decodes
the embedded pmAtomValue, which was set at the most recent
fetch() call.
c                 óô   • [         U-  n[        U-  n[        U-  n[        U-  n[        5       U l        U" 5       U l        Xl        U" 5       U l        U" 5       U l        U" 5       U l	        [        5       U l
        grh  )r   rð   r   r	   rj  Ústssrk  ÚvaluesÚicodesÚinamesÚnum)r@   rk  rŽ  Ústss_tÚvalues_tÚicodes_tÚinames_ts          r0   r9   Ú$fetchgroup.fetchgroup_indom.__init__  sb   € ä˜S‘[ˆFÜ" SÑ(ˆHÜ ‘|ˆHÜ #‘~ˆHÜ“wˆDŒHÙ›ˆDŒIØ ŒKÙ"›*ˆDŒKÙ"›*ˆDŒKÙ"›*ˆDŒKÜ“xˆD�Hr2   c                 óŽ  ^ ^• / nT R                   R                  S:  a  [        T R                   R                  5      e[        T R                  R                  5       Hd  nS mUR                  T R                  U   T R                  U   (       a  T R                  U   R                  S5      OSUU 4S j" U5      45        Mf     U$ )rn  r   c                 ó¨   • U R                   U   S:  a  [        U R                   U   5      eU R                  U   R                  U R                  5      $ r7   ©rŠ  r4   r‹  r  rk  ©r@   rV  s     r0   Ú
decode_oneÚ8fetchgroup.fetchgroup_indom.__call__.<locals>.decode_one,  óB   € Ø—y‘y ‘| aÓ'Ü# D§I¡I¨a¡LÓ1Ð1ØŸ;™; q™>×.Ñ.¨t¯{©{Ó;Ð;r2   ru   Nc                 ó   >^ • UU U4S j$ )Nc                  ó   >• T " TT5      $ rd   r¹   ©r˜  rV  r@   s   €€€r0   rü   ÚHfetchgroup.fetchgroup_indom.__call__.<locals>.<lambda>.<locals>.<lambda>4  ó   ø€ ©z¸$ÀÔ/Br2   r¹   ©rV  r˜  r@   s   `€€r0   rü   Ú6fetchgroup.fetchgroup_indom.__call__.<locals>.<lambda>4  ó   ù€ ×'Br2   )	rj  r_   r4   rT   rŽ  r§  rŒ  r�  rS   )r@   ÚvvrV  r˜  s   `  @r0   ro  Ú$fetchgroup.fetchgroup_indom.__call__&  s›   ù€ àˆBØ�x‰x�~‰~ Ó!Ü˜DŸH™HŸN™NÓ+Ð+Ü˜4Ÿ8™8Ÿ>™>Ö*�ò<ð —	‘	˜4Ÿ;™; q™>Ø=A¿[¹[È¿^˜4Ÿ;™; q™>×0Ñ0°Ô9ÐQUö DÀQÓGð	Iö Jñ +ð ˆIr2   )rŒ  r�  rŽ  rk  rj  rŠ  r‹  Nrq  r¹   r2   r0   Úfetchgroup_indomrˆ    s   † ñ	ò	 õ	r2   r¥  c                   ó$   • \ rS rSrSrS rS rSrg)Úfetchgroup.fetchgroup_eventi8  a3  
An internal class to receive value/status for an
event record field.  It may be called as if it were a function
object to create an list of tuples containing timestamp/value
information.  Each value is a function object that decodes
the embedded pmAtomValue, which was set at the most recent
fetch() call.
c                 óÖ   • [         U-  n[        U-  n[        U-  n[        5       U l        U" 5       U l        Xl        U" 5       U l        U" 5       U l        [        5       U l	        X0l
        grh  )r   rð   r»   rj  rŠ  rk  Útimesr‹  r   rŽ  rc  )r@   rk  rŽ  rc  r�  r�  Ú
timespec_ts          r0   r9   Ú$fetchgroup.fetchgroup_event.__init__B  sU   € ä˜S‘[ˆFÜ" SÑ(ˆHÜ! C™ˆJÜ“wˆDŒHÙ›ˆDŒIØ ŒKÙ#›ˆDŒJÙ"›*ˆDŒKÜ“xˆDŒHØ�Hr2   c                 ód  ^ ^• / nT R                   R                  S:  a  [        T R                   R                  5      e[        T R                  R                  5       HÏ  nS mT R
                  R                  T R                  U   R                  5      n[        T R                  U   R                  5      S-  n[        UR                  S-   UR                  S-   UR                  UR                  UR                   UR"                  US5      nUR%                  UUU 4S j" U5      45        MÑ     U$ )rn  r   c                 ó¨   • U R                   U   S:  a  [        U R                   U   5      eU R                  U   R                  U R                  5      $ r7   r–  r—  s     r0   r˜  Ú8fetchgroup.fetchgroup_event.__call__.<locals>.decode_oneV  rš  r2   rV  râ   rM   Nc                 ó   >^ • UU U4S j$ )Nc                  ó   >• T " TT5      $ rd   r¹   r�  s   €€€r0   rü   ÚHfetchgroup.fetchgroup_event.__call__.<locals>.<lambda>.<locals>.<lambda>b  rŸ  r2   r¹   r   s   `€€r0   rü   Ú6fetchgroup.fetchgroup_event.__call__.<locals>.<lambda>b  r¢  r2   )rj  r_   r4   rT   rŽ  rc  r/  r©  r   r=   r¼   r   rÚ   rÙ   rØ   r×   rÖ   rÕ   r§  )r@   r£  rV  rˆ   rz  r{  r˜  s   `     @r0   ro  Ú$fetchgroup.fetchgroup_event.__call__O  sê   ù€ àˆBØ�x‰x�~‰~ Ó!Ü˜DŸH™HŸN™NÓ+Ð+ä˜4Ÿ8™8Ÿ>™>Ö*�ò<ð
 —X‘X×)Ñ)¨$¯*©*°Q©-×*>Ñ*>Ó?�Ü˜Ÿ™ A™×.Ñ.Ó/°4Ñ7�Ü˜bŸj™j¨™o¨r¯y©y¸©{¸B¿J¹JØ Ÿj™j¨"¯)©)°R·Y±YÀÀDóJ�ð —	‘	˜2ÞCÀQÓGðIö Jñ +ð ˆIr2   )rc  rŽ  rk  rj  rŠ  r©  r‹  Nrq  r¹   r2   r0   Úfetchgroup_eventr§  8  s   † ñ	ò	õ	r2   r´  c                   ó$   • \ rS rSrSrS rS rSrg)Úfetchgroup.pmContext_borrowedif  zÖ
An internal class for accessing the private PMAPI context
belonging to a fetchgroup.  It works just like a pmContext,
except it overrides the constructor/destructor to reflect
the "borrowed" state of the context.
c                 ó(   • Xl         X l        X0l        g)z/Override pmContext ctor to eschew pmNewContext.N)rQ  rI  rM  )r@   rc  r  rX  s       r0   r9   Ú&fetchgroup.pmContext_borrowed.__init__m  s   € ð ŒIØŒJØ!�Lr2   c                 ó|   • [         b5  U R                  [         R                  :w  a  [         R                  U l        ggg)z3Override pmContext ctor to eschew pmDestroyContext.N)rE   rQ  rV  r`   s    r0   r>  Ú%fetchgroup.pmContext_borrowed.__del__u  s/   € äÑ  T§Y¡Y´%×2HÑ2HÓ%HÜ!×2Ñ2�•	ð &IÐ r2   r_  N)rh   ri   rj   rk   r  r9   r>  rl   r¹   r2   r0   ÚpmContext_borrowedr¶  f  s   † ñ	ò	"õ	3r2   r»  rT  c                 ód  • [        5       U l        / U l        U[        R                  :X  a  Uc  Sn[
        R                  [        U R                  5      XR                  S5      5      nUS:  a  [        U5      e[        R                  [
        R                  U R                  5      X5      U l        g)z%Create a fetchgroup from a pmContext.NrT  ru   r   )r
   ÚpmfgÚitemsrE   ra  rP   ÚpmCreateFetchGroupr   rw   r4   rd  r»  ÚpmGetFetchGroupContextrc  )r@   r  rX  rj  s       r0   r9   Úfetchgroup.__init__z  s…   € ä“JˆŒ	ØˆŒ
Ø”E×*Ñ*Ó*¨v©~ØˆFÜ×'Ñ'¬¨d¯i©iÓ(8¸%ÇÁÈwÓAWÓXˆØ�‹7Ü˜“*ÐÜ×0Ñ0´×1NÑ1NÈtÏyÉyÓ1YØ16ó@ˆ�r2   c                 ó¾   • [         bG  U R                  R                  b0  [         R                  U R                  5      nUS:  a  [	        U5      eU R
                  SS2	 g)z?Destroy the fetchgroup.  Drop references to fetchgroup_* items.Nr   )rP   r½  r_   ÚpmDestroyFetchGroupr4   r¾  ©r@   rj  s     r0   r>  Úfetchgroup.__del__†  sE   € äÑ $§)¡)§/¡/Ñ"=Ü×,Ñ,¨T¯Y©YÓ7ˆCØ�Q‹wÜ˜C“jÐ Ø�J‰J’q‰Mr2   c                 ó   • U R                   $ )z—
Return the private pmContext used by the fetchgroup.
WARNING: mutation of this context by other PMAPI functions
may disrupt fetchgroup functionality.
)rc  r`   s    r0   Úget_contextÚfetchgroup.get_contextŽ  s   € ð �x‰xˆr2   Nc                 óÀ  • Uc  [        [        R                  * 5      eUcE  U R                  R	                  U5      nU R                  R                  U5      nUS   R                  n[        R                  U5      n[        R                  U R                  [        U(       a  UR                  S5      OS5      [        U(       a  UR                  S5      OS5      [        U(       a  UR                  S5      OS5      [        UR                  5      [!        U5      [        UR"                  5      5      nUS:  a  [        U5      eU R$                  R'                  U5        U$ )z´Extend the fetchgroup with a single metric.  Infer type if
necessary.  Convert scale/rate if appropriate/requested.
Requires a specified instance if metric has an instance
domain.
Nr   ru   )r4   re   ÚEINVALrc  r“  rÈ  rº  rd  rr  rP   ÚpmExtendFetchGroup_itemr½  r	   rw   r   r_   r   rj  r¾  r§  )	r@   rÐ  ÚmtypeÚscaleÚinstancerÊ  rÍ  Úvrj  s	            r0   Úextend_itemÚfetchgroup.extend_item–  s   € ð ‰>ÜœŸ™˜Ó&Ð&à‰=à—H‘H×)Ñ)¨&Ó1ˆEØ—H‘H×*Ñ*¨5Ó1ˆEØ˜!‘H—M‘MˆEÜ×&Ñ& uÓ-ˆÜ×,Ñ,¨T¯Y©YÜ¾˜vŸ}™}¨WÔ5ÀTÓJÜ¾8˜xŸ™¨wÔ7ÈÓNÜ¾˜uŸ|™|¨GÔ4À4ÓHÜ˜aŸg™gÓ&¬¨e«Ü˜aŸe™e“nó&ˆð �‹7Ü˜“*ÐØ�
‰
×Ñ˜!ÔØˆr2   c                 óô  • Ub  US:  a  [        [        R                  * 5      eUcE  U R                  R	                  U5      nU R                  R                  U5      nUS   R                  n[        R                  X$5      n[        R                  U R                  [        U(       a  UR                  S5      OS5      [        U(       a  UR                  S5      OS5      [        [        UR                   5      [#        [$        5      5      [        [        UR&                  5      [#        [        5      5      [        [        UR(                  5      [#        [*        5      5      [%        U5      [        [        UR,                  5      [#        [$        5      5      [/        U5      [        UR0                  5      [        UR2                  5      5      nUS:  a  [        U5      eU R4                  R7                  U5        U$ )z·Extend the fetchgroup with up to @maxnum instances of a metric.
(Metrics without instances are also accepted.)  Infer type if
necessary.  Convert scale/rate if appropriate/requested.
Nr   ru   )r4   re   rÊ  rc  r“  rÈ  rº  rd  r¥  rP   ÚpmExtendFetchGroup_indomr½  r	   rw   r   r   rŒ  r   r   r�  r‹  rð   rŠ  r   rŽ  rj  r¾  r§  )	r@   rÐ  rÌ  rÍ  ÚmaxnumrÊ  rÍ  r£  rj  s	            r0   Úextend_indomÚfetchgroup.extend_indom±  sU  € ð ‰>˜V a›ZÜœŸ™˜Ó&Ð&Ø‰=à—H‘H×)Ñ)¨&Ó1ˆEØ—H‘H×*Ñ*¨5Ó1ˆEØ˜!‘H—M‘MˆEÜ×(Ñ(¨Ó7ˆÜ×-Ñ-¨d¯i©iÜ¾˜vŸ}™}¨WÔ5ÀTÓJÜ¾˜uŸ|™|¨GÔ4À4ÓHÜœ7 2§9¡9Ó-¬w´u«~Ó>Üœ7 2§9¡9Ó-¬w´xÓ/@ÓAÜœ7 2§9¡9Ó-¬w´{Ó/CÓDÜ˜E“lÜœ7 2§7¡7Ó+¬W´U«^Ó<Ü˜V“n¤g¨b¯f©f£o´w¸r¿v¹v³óHˆð �‹7Ü˜“*ÐØ�
‰
×Ñ˜"ÔØˆ	r2   c                 ó  • [         R                  U R                  5      n[        R	                  U R
                  [        UR                  5      5      nUS:  a  [        U5      eU R                  R                  U5        U$ )z-Extend the fetchgroup with a timespec query. r   )rd  r~  rc  rP   ÚpmExtendFetchGroup_timespecr½  r   r_   r4   r¾  r§  ©r@   rÏ  rj  s      r0   Úextend_timespecÚfetchgroup.extend_timespecÍ  s]   € ä×*Ñ*¨4¯8©8Ó4ˆÜ×0Ñ0°·±¼GÀAÇGÁGÓ<LÓMˆØ�‹7Ü˜“*ÐØ�
‰
×Ñ˜!ÔØˆr2   c                 ó  • [         R                  U R                  5      n[        R	                  U R
                  [        UR                  5      5      nUS:  a  [        U5      eU R                  R                  U5        U$ )z,Extend the fetchgroup with a timeval query. r   )rd  r†  rc  rP   ÚpmExtendFetchGroup_timevalr½  r   r_   r4   r¾  r§  rÙ  s      r0   Úextend_timevalÚfetchgroup.extend_timevalÖ  s]   € ä×)Ñ)¨$¯(©(Ó3ˆÜ×/Ñ/°·	±	¼7À1Ç7Á7Ó;KÓLˆØ�‹7Ü˜“*ÐØ�
‰
×Ñ˜!ÔØˆr2   c                 ó<  • Ub  US:  a  [        [        R                  * 5      eUcE  U R                  R	                  U5      nU R                  R                  U5      nUS   R                  n[        R                  X6U R                  5      n	[        R                  U R                  [        U(       a  UR                  S5      OS5      [        U(       a  UR                  S5      OS5      [        U(       a  UR                  S5      OS5      [        U(       a  UR                  S5      OS5      [        [        U	R                   5      [#        [$        5      5      [        [        U	R&                  5      [#        [(        5      5      [+        U5      [        [        U	R,                  5      [#        [*        5      5      [/        U5      [        U	R0                  5      [        U	R2                  5      5      n
U
S:  a  [        U
5      eU R4                  R7                  U	5        U	$ )z­Extend the fetchgroup with up to @maxnum instances of the given
field of the given event metric's records.  Infer type if necessary.
Convert scale if appropriate/requested.
Nr   ru   )r4   re   rÊ  rc  r“  rÈ  rº  rd  r´  rP   ÚpmExtendFetchGroup_eventr½  r	   rw   r   r   r©  r   r»   r‹  rð   r   rŠ  r   rŽ  rj  r¾  r§  )r@   rÐ  ÚfieldÚftyperÍ  rÎ  rÔ  rÊ  rÍ  r£  rj  s              r0   Úextend_eventÚfetchgroup.extend_eventâ  sn  € ð ‰>˜V a›ZÜœŸ™˜Ó&Ð&Ø‰=à—H‘H×)Ñ)¨%Ó0ˆEØ—H‘H×*Ñ*¨5Ó1ˆEØ˜!‘H—M‘MˆEÜ×(Ñ(¨¸¿¹ÓAˆÜ×-Ñ-¨d¯i©iÜ¾˜vŸ}™}¨WÔ5ÀTÓJÜ¾8˜xŸ™¨wÔ7ÈÓNÜ¾˜uŸ|™|¨GÔ4À4ÓHÜ¾˜uŸ|™|¨GÔ4À4ÓHÜœ7 2§8¡8Ó,¬g´hÓ.?Ó@Üœ7 2§9¡9Ó-¬w´{Ó/CÓDÜ˜E“lÜœ7 2§7¡7Ó+¬W´U«^Ó<Ü˜V“n¤g¨b¯f©f£o´w¸r¿v¹v³ó	Hˆð �‹7Ü˜“*ÐØ�
‰
×Ñ˜"ÔØˆ	r2   c                 óf   • [         R                  U R                  5      nUS:  a  [        U5      eU$ )z?Fetch all the metrics in this fetchgroup and update all values.r   )rP   ÚpmFetchGroupr½  r4   rÄ  s     r0   ÚfetchÚfetchgroup.fetchÿ  s,   € ä×!Ñ! $§)¡)Ó,ˆØ�‹7Ü˜“*ÐØˆ
r2   c                 ó�   • [         R                  U R                  5      nU R                  SS2	 US:  a  [	        U5      e/ U l        g)z>Clear all the metrics in this fetchgroup ready to start again.Nr   )rP   ÚpmClearFetchGroupr½  r¾  r4   rÄ  s     r0   ÚclearÚfetchgroup.clear  s9   € ä×&Ñ& t§y¡yÓ1ˆØ�J‰J’qˆMØ�‹7Ü˜“*ÐØˆ�
r2   )rc  r¾  r½  )NNNN)NNNéd   )NNNNNrî  )rh   ri   rj   rk   r  Úobjectrr  r~  r†  Úfetchgroup_timestampr¥  r´  rG  r»  rE   r`  r9   r>  rÇ  rÐ  rÕ  rÚ  rÞ  Úextend_timestamprä  rè  rì  rl   r¹   r2   r0   rd  rd  ¹  s¡   † ñô0˜&ô 0ô(˜fô ô0˜Vô ð2 .Ðô'˜6ô 'ôT+˜6ô +ô\3˜Yô 3ð( #×2Ñ2¸8ô 
@òòôô6ò8òð &Ðôò:õr2   rd  )Ær  r,   r$   r°   re   r  r   Úmathr   ÚcpmapirE   r&   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úctypes.utilr   rP   ÚplatformÚ	libc_namer{  r%   r=   rÇ  r§   rR   r  Úunicoder1   r  r4   rp   ÚPM_SIZEOF_SUSECONDS_Tr¶   r´  ÚPM_SIZEOF_TIME_Trµ   r}   r»   rÔ   rð   r   r;  rA  rG  rM  rt  r]  rN  rO  rP  rQ  re  rž  ÚpmIDÚpmInDomr¹  Ú	pmDescPtrr¼  rº  r»  r½  rË  rÍ  rã  rö  r  Ú
pmLabelPtrr  r  r  r_   r	  r  rz  r)   r+   r†  rŠ  rŽ  r“  r£  r§  ÚtraverseCB_typer¬  r¯  r³  rº  rÁ  rÈ  rÐ  rÕ  rã  rí  rò  rW  r[  rþ  ry  r  r  r  r  r  rµ  r  r!  r$  r'  r+  r/  rê   r6  r<  r@  rC  rG  rJ  rN  rQ  rZ  rV  r]  rc  rf  ri  rl  rp  r³  rQ   r¼  rÂ  r6  rÍ  rÒ  r|  rØ  rÛ  rÞ  rã  rç  rì  rï  rô  rú  r   r  rÁ   r�   rÚ  r
  rv   r  r  r…  rˆ  rƒ  r�  r  r{  ry  r›  r¥  r¨  r‰  rï  r!  rG  r¿  rÀ  rë  rÃ  rË  rÓ  rá  rÝ  rØ  rç  rd  r¹   r2   r0   Ú<module>rÿ     s™  ðñXóx 
Û 
Û Û Û å Ý ó ó ß D× Dß J× Jß =Õ =ß :Õ :Ý $ñ 
‰l˜5Ó!Ó	"€Ø—<‘< 7Ó*‰C°€	Ù‰L˜Ó#Ó$€ð ‡;�;�#ÓØ�F€MØ€DØ�Ià˜$�L€MØ€Iò7ô ˆIô ôB&�ô &ð: 	×Ñ !Ó#Ø�MØ
× Ñ  AÓ%Ø�Má
�×!Ñ!Ð#@Ó
AÐAà×Ñ˜QÓØ�HØ
×Ñ˜qÓ Ø�Há
�×!Ñ!Ð#;Ó
<Ð<ô3 ˆiô 3 ôj3 ˆyô 3 ôj'3ˆô '3ôR$�%ô $ôL($ˆiô ($ôT*�9ô *ô	*�ô 	*ôMˆiô Mô3�ô 3ñ< ˜
Ó#€ÙÑ7¸¸tÀTÓJ€Ô ÙÑ ;¸TÀ4ÈÓN€Ô ÙÑ ;¸TÀ4ÈÓN€Ô ÙÑ9¸4ÀÀtÓL€Ô ô.8ˆyô .8ô`78�iô 78ðr €Ø
€ô
6ˆYô 
6ñ �F‹O€	ÙÑ1°4¸¸tÓD€	„ÙÑ3°T¸4ÀÓF€	„ÙÑ5°t¸TÀ4ÓH€	„ÙÑ5°t¸TÀ4ÓH€	„òô �9ô ô@%�ô %ô +˜	ô +ô*8ˆiô 8ñ �WÓ€
ÙÑ4°d¸DÀ$ÓG€
„ÙÑ:¸DÀ$ÈÓM€
Ô ÙÑ6¸¸dÀDÓI€
Ô ÙÑ6¸¸dÀDÓI€
Ô ÙÑ<¸dÀDÈ$ÓO€
Ô ô"�ô "ð.  %€× Ñ Ô Ø!)©7±7¸8Ó3DÓ+EÐ F€× Ñ Ô à%*€× Ñ Ô "à‰g‘g˜hÓ'Ó(©'±'¸%³.Ó*Að'C€× Ñ Ô #ð $)€× Ñ Ô  Ø$&€× Ñ Ô !à!&€× Ñ Ô Ø#+ *€× Ñ Ô à#€× Ñ Ô Ø %¨°1©±w¸v³ÐG€× Ñ Ô à €× Ñ Ô Ø"¡G©G°HÓ,=Ó$>Ð?€× Ñ Ô à€‡�Ô Ø!¡7¨8Ó#4Ð5€‡�Ô á˜D (Ó+€Ø %€× Ñ Ô Ø"*¨OÐ!<€× Ñ Ô à#(€× Ñ Ô  Ø$&€× Ñ Ô !à).€× Ñ Ô &Ø+3°X¹wÀxÓ?PÐ*Q€× Ñ Ô 'à%*€× Ñ Ô "Ø'/ j€× Ñ Ô #ð $€× Ñ Ô Ø &©°«Ð8€× Ñ Ô à$€× Ñ Ô Ø!&©°«¹À»Ð I€× Ñ Ô à#(€× Ñ Ô  Ø%+¨U±G¸HÓ4EÐ$F€× Ñ Ô !à#€× Ñ Ô Ø &¨©w°xÓ/@ÐA€× Ñ Ô ð "€× Ñ Ô à
‰G‘G˜E“NÓ#¡W©W°XÓ->Ó%?ðA€× Ñ Ô ð  %€× Ñ Ô Ø!'¨Ð 2€× Ñ Ô à"€× Ñ Ô Ø% v©w°xÓ/@ÐA€× Ñ Ô ð $€× Ñ Ô Ø % xÐ0€× Ñ Ô à"'€× Ñ Ô Ø$) 7€× Ñ Ô  à#€× Ñ Ô Ø!€× Ñ Ô à#€× Ñ Ô Ø %˜w€× Ñ Ô à %€× Ñ Ô Ø!#€× Ñ Ô à#€× Ñ Ô Ø &¨©w°u«~Ð>€× Ñ Ô à#€× Ñ Ô Ø &¨©w°u«~Ð>€× Ñ Ô à €× Ñ Ô Ø"¡G¨GÓ$4°eÐ<€× Ñ Ô à"'€× Ñ Ô Ø$)©7°8Ó+<¹gÀhÓ>OÐ#P€× Ñ Ô  à$)€× Ñ Ô !Ø&+ W€× Ñ Ô "à(0€× Ñ Ô %Ø*/°¸5Ð)A€× Ñ Ô &ð #(€× Ñ Ô Ø#%€× Ñ Ô  à €× Ñ Ô Ø%˜J€× Ñ Ô à €× Ñ Ô Ø"˜G€× Ñ Ô à"€× Ò Ô Ù& xÓ0Ð1€× Ò Ô á$ R›[€× Ò Ô Ù& v›±¸³Ð<€× Ò Ô à!€‡‚Ô Ù" 6›?¨HÐ5€‡‚Ô ð €‡‚Ô Ø ¡'¨&£/±7¹7À8Ó;LÓ3MÐN€‡‚Ô à %€× Ò Ô Ø"'©°«¹'Á'È/ÓBZÓ:[Ð!\€× Ò Ô à %€× Ò Ô Ø"'©°«¹'Á'È/ÓBZÓ:[Ð!\€× Ò Ô à"€× Ò Ô Ù '¨Ó 1Ð2€× Ò Ô à%)€× Ò Ô "Ù'.¨Ó'?Ð&@€× Ò Ô #à€‡‚Ô Ù" 8Ó,Ð-€‡‚Ô à %€× Ò Ô Ù")¨/Ó":Ð!;€× Ò Ô ð $)€× Ò Ô  Ù%,¨ZÓ%8Ð$9€× Ò Ô !à!&€× Ò Ô Ù#*¨7Ó#3Ð"4€× Ò Ô à*/€× Ò Ô 'Ù,3Ð4EÓ,FÐ+G€× Ò Ô (à(-€× Ò Ô %Ù*1°(Ó*;Ð)<€× Ò Ô &à#(€× Ò Ô  Ø%+©W±W¸U³^Ó-DÙ%,©W°XÓ->Ó%?ð%A€× Ò Ô !ð ',€× Ò Ô #Ø!'¨Ð 2€× Ñ Ô Ø(/°Ð':€× Ò Ô $à$)€× Ò Ô !Ø&-¨uÐ%5€× Ò Ô "à %€× Ò Ô Ù")©'°(Ó*;Ó"<Ð!=€× Ò Ô à',€× Ò Ô $Ù)0±¸Ó1IÓ)JÐ(K€× Ò Ô %ð &.€× Ò Ô "Ø'/ j€× Ò Ô #à$€× Ò Ô Ø# X¨uÐ5€× Ò Ô à %€× Ò Ô à	‰7�7Ó˜U¡G¨KÓ$8¸%ð"A€× Ò Ô ð #€× Ò Ô à	‰7�;Ó¡¨Ó!1±7¸;Ó3GÙˆGÓð€× Ò Ô ð '€× Ò Ô Ù '¨Ó 0°(¸EÐB€× Ò Ô à'€× Ò Ô Ø!)¨8°UÐ ;€× Ò Ô à"€× Ò Ô Ø$ f¨fÐ5€× Ò Ô à#€× Ò Ô Ø%˜h€× Ò Ô à$€× Ò Ô Ø &˜x€× Ò Ô à!€× Ò Ô Ø#˜H€× Ò Ô à#€× Ò Ô Ø# X¨uÐ5€× Ò Ô à%€× Ò Ô Ø!'¨Ð 0€× Ò Ô à &€× Ò Ô Ø"( €× Ò Ô à &€× Ò Ô Ø"( €× Ò Ô à&€× Ò Ô Ø &¨°%Ð8€× Ò Ô à%€× Ò Ô Ø$ h°Ð6€× Ò Ô à%€× Ò Ô Ù& {Ó3°U¸HÀeÐL€× Ò Ô à$€× Ò Ô Ø# X¨uÐ5€× Ò Ô à"€× Ò Ô Ø (¨%°¹ÀÓ8HÈ%ÐP€× Ò Ô à(-€× Ò Ô %Ø*2±G¸HÓ4EÙ*1°(Ó*;ð*=€× Ò Ô &ð "'€× Ò Ô Ø#+©W°WÓ-=Ù#*¨8Ó#4ð#6€× Ò Ô ð $)€× Ò Ô  Ø%-¨u°hÙ%,©W°\Ó-BÓ%CÙ%,¨XÓ%6ð%8€× Ò Ô !ð €‡‚Ô Ø€‡‚Ô à€‡‚Ô Ø$˜:€‡‚Ô à(,€× Ò Ô %Ù*1°/Ó*BÐ)C€× Ò Ô &à!%€× Ò Ô Ù#*¨8Ó#4Ð"5€× Ò Ô à %€× Ò Ô Ø"'©±¸Ó1DÓ)EÐ!F€× Ò Ô à&+€× Ò Ô #Ø(-©w±w¸zÓ7JÓ/KÐ'L€× Ò Ô $à!&€× Ò Ô Ø#(©'±'¸*Ó2EÓ*FÐ"G€× Ò Ô à$)€× Ò Ô !Ø&+©W±W¸ZÓ5HÓ-IÐ%J€× Ò Ô "à"'€× Ò Ô Ø$)©7±7¸:Ó3FÓ+GÐ#H€× Ò Ô  à#(€× Ò Ô  Ø%*©G±G¸JÓ4GÓ,HÐ$I€× Ò Ô !à$)€× Ò Ô !Ù&-©g°jÓ.AÓ&BÐ%C€× Ò Ô "à$€× Ò Ô Ù!(¨Ó!2°E¸8ÀUÐ K€× Ò Ô á! %©°Ó)9¸8ÀXÓNÐ Ø"'€× Ò Ô Ù$+©G°JÓ,?Ó$@À%Ø$,¨eÐ5JØ$,ð$.€× Ò Ô  ð "&€× Ò Ô Ù#*¨:Ó#6¸Ð">€× Ò Ô ôX,�ô X,ôDjR�ô jRð\/ %*€× Ò Ô !Ù&-¨hÓ&7¸ÀÐ%I€× Ò Ô "Ø(-€× Ò Ô %Ø*2¨€× Ò Ô &Ø#(€× Ò Ô  Ø%- J€× Ò Ô !Ø%*€× Ò Ô "Ø'/ j€× Ò Ô #Ø).€× Ò Ô &Ø+3°X¸xÈÙ+2°;Ó+?ÀÉÐPUËð+X€× Ò Ô 'à*/€× Ò Ô 'Ø,4°hÀÙ,3°E«NÙ,3°HÓ,=Ù,3°KÓ,@Ø,1Ù,3°E«NØ,2Ù,3°F«OÙ,3°E«Nð,<€× Ò Ô (ð +0€× Ò Ô 'Ø,4°hÀÈ(ÐT\Ù,3°HÓ,=Ù,3°KÓ,@Ø,1Ù,3°E«NØ,2Ù,3°F«OÙ,3°E«Nð,<€× Ò Ô (ð -2€× !Ò !Ô )Ø.6¹ÀÓ8HÐ-I€× !Ò !Ô *Ø-2€× "Ò "Ô *Ø/7¹ÀÓ9JÐ.K€× "Ò "Ô +Ø#€× Ò Ô Ø (˜z€× Ò Ô ôS�õ Sr2   