
    g
f                     v    d Z dZdZdZdZdZddlZ ej                  dd	       dd
lm	Z	 ddl
mZ  G d d      Zy)a  
Utilities for obtaining role-related information.
These utilities are app-type- and toolkit-agnostic. Utilities that might have
different implementations or results depending on the type of app (e.g. terminal,
chat, web) or toolkit (e.g. Qt, Gtk) should be in script_utilities.py file(s).

N.B. There are currently utilities that should never have custom implementations
that live in script_utilities.py files. These will be moved over time.
z$Id$z
$Revision$z$Date$zCopyright (c) 2023 Igalia, S.L.LGPL    NAtspiz2.0)r      )AXObjectc                      e Zd ZdZedd       Zed        Zed        Zed        Zed        Z	ed        Z
ed        Zedd	       Zed
        Zedd       Zed        Zed        Zed        Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Z edd       Z!edd        Z"edd!       Z#edd"       Z$edd#       Z%edd$       Z&edd%       Z'edd&       Z(edd'       Z)edd(       Z*edd)       Z+edd*       Z,edd+       Z-edd,       Z.edd-       Z/edd.       Z0edd/       Z1edd0       Z2edd1       Z3edd2       Z4edd3       Z5edd4       Z6edd5       Z7edd6       Z8edd7       Z9edd8       Z:edd9       Z;edd:       Z<edd;       Z=edd<       Z>edd=       Z?edd>       Z@edd?       ZAedd@       ZBeddA       ZCeddB       ZDeddC       ZEeddD       ZFeddE       ZGeddF       ZHeddG       ZIeddH       ZJeddI       ZKeddJ       ZLeddK       ZMeddL       ZNeddM       ZOeddN       ZPeddO       ZQeddP       ZReddQ       ZSeddR       ZTeddS       ZUeddT       ZVeddU       ZWeddV       ZXeddW       ZYeddX       ZZeddY       Z[eddZ       Z\edd[       Z]edd\       Z^edd]       Z_edd^       Z`edd_       Zaedd`       Zbedda       Zceddb       Zdeddc       Zeeddd       Zfedde       Zgeddf       Zheddg       Zieddh       Zjeddi       Zkeddj       Zleddk       Zmeddl       Zneddm       Zoeddn       Zpeddo       Zqeddp       Zreddq       Zseddr       Ztedds       Zueddt       Zveddu       Zweddv       Zxeddw       Zyeddx       Zzeddy       Z{eddz       Z|edd{       Z}edd|       Z~edd}       Zedd~       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zy)AXUtilitiesRolez1Utilities for obtaining role-related information.c                     t         j                  j                  t         j                  j                  t         j                  j                  g}| r)|j                  t         j                  j                         |S z/Returns the list of roles we consider documents)r   RoleCOLOR_CHOOSERDIALOGFILE_CHOOSERappendALERT)include_alert_as_dialogroless     8/usr/lib/python3/dist-packages/orca/ax_utilities_role.pyget_dialog_rolesz AXUtilitiesRole.get_dialog_roles.   sR     ))""((* #LL))*    c                  6   t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  g} | S r
   )r   r   DOCUMENT_EMAILDOCUMENT_FRAMEDOCUMENT_PRESENTATIONDOCUMENT_SPREADSHEETDOCUMENT_TEXTDOCUMENT_WEBr   s    r   get_document_rolesz"AXUtilitiesRole.get_document_roles9   s`     ****1100))((* r   c            
         t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  g
} | S )z1Returns the list of roles we consider form fields)r   r   	CHECK_BOXRADIO_BUTTON	COMBO_BOXr   TEXTLIST_BOXENTRYPASSWORD_TEXTPUSH_BUTTONSPIN_BUTTONr   s    r   get_form_field_rolesz$AXUtilitiesRole.get_form_field_rolesE   s     %%((%%**$$!!))''''	) r   c                      t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  g} | S )z0Returns the list of roles we consider menu items)r   r   	MENU_ITEMCHECK_MENU_ITEMRADIO_MENU_ITEMTEAROFF_MENU_ITEMr   s    r   get_menu_item_rolesz#AXUtilitiesRole.get_menu_item_rolesU   sF     %%++++--/ r   c                  h   t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  t         j                  j                  g} | S )z2Returns the list of roles we consider menu related)	r   r   MENUMENU_BAR
POPUP_MENUr+   r,   r-   r.   r   s    r   get_menu_related_rolesz&AXUtilitiesRole.get_menu_related_roles_   sk     $$&&%%++++--/ r   c                  \   t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                   t         j                  j"                  t         j                  j$                  g} | S )zHReturns the list of roles we want to exclude from the list of clickables)r   r   r"   r%   r$   r1   r+   r,   r-   PAGE_TABPAGE_TAB_LISTr&   PROGRESS_BARSLIDERr(   TOOL_BAR	TREE_ITEM
TREE_TABLETREEr   s    r   )get_roles_to_exclude_from_clickables_listz9AXUtilitiesRole.get_roles_to_exclude_from_clickables_listl   s     %%!!$$%%++++$$))))((""''$$%%&&!"" r   c                  6   t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  g} | S )z5Returns the list of roles we consider a set container)r   r   LISTr1   r7   TABLEr=   r<   r   s    r   get_set_container_rolesz'AXUtilitiesRole.get_set_container_roles   sZ     ))!!&&( r   c                 *   t         j                  j                  g}| ru|j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  g       |S )z1Returns the list of roles we consider table cells)r   r   
TABLE_CELLextendTABLE_COLUMN_HEADERTABLE_ROW_HEADERCOLUMN_HEADER
ROW_HEADER)include_headersr   s     r   get_table_cell_rolesz$AXUtilitiesRole.get_table_cell_roles   sd     &&'LL%**88**55**22**//1 2 r   c                      t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  g} | S )z3Returns the list of roles we consider table headers)r   r   rF   rG   rH   rI   r   s    r   get_table_header_rolesz&AXUtilitiesRole.get_table_header_roles   sF     //,,))&&( r   c                    t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  g}| r)|j                  t         j                  j                         |S )z3Returns the list of roles we consider table related)
r   r   rA   rD   rF   rG   rH   rI   r   CAPTION)include_captionr   s     r   get_table_related_rolesz'AXUtilitiesRole.get_table_related_roles   sy     !!&&//,,))&&( LL++,r   c                      t         j                  j                  t         j                  j                  t         j                  j                  g} | S )z2Returns the list of roles we consider tree related)r   r   r=   r;   r<   r   s    r   get_tree_related_rolesz&AXUtilitiesRole.get_tree_related_roles   s7     %%&&( r   c            
         t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  g
} | S )z-Returns the list of roles we consider widgets)r   r   r    r"   r%   r&   r'   r!   r9   r(   r#   TOGGLE_BUTTONr   s    r   get_widget_rolesz AXUtilitiesRole.get_widget_roles   s     %%%%!!))''((""''))	+ r   c                 X    t        j                  |       t        j                  |      k(  S )z0Returns True if obj1 and obj2 have the same role)r   get_role)obj1obj2s     r   have_same_rolezAXUtilitiesRole.have_same_role   s%       &(*;*;D*AAAr   Nc                 j    |t        j                  |       }|t        j                  j                  k(  S )z2Returns True if obj has the accelerator label role)r   rX   r   r   ACCELERATOR_LABELobjroles     r   is_accelerator_labelz$AXUtilitiesRole.is_accelerator_label   .     <$$S)Duzz3333r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the alert role)r   rX   r   r   r   r^   s     r   is_alertzAXUtilitiesRole.is_alert   .     <$$S)Duzz''''r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the animation role)r   rX   r   r   	ANIMATIONr^   s     r   is_animationzAXUtilitiesRole.is_animation   .     <$$S)Duzz++++r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z,Returns True if obj has the application role)r   rX   r   r   APPLICATIONr^   s     r   is_applicationzAXUtilitiesRole.is_application   .     <$$S)Duzz----r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the arrow role)r   rX   r   r   ARROWr^   s     r   is_arrowzAXUtilitiesRole.is_arrow   re   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the article role)r   rX   r   r   ARTICLEr^   s     r   
is_articlezAXUtilitiesRole.is_article   .     <$$S)Duzz))))r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the audio role)r   rX   r   r   AUDIOr^   s     r   is_audiozAXUtilitiesRole.is_audio  re   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z-Returns True if obj has the autocomplete role)r   rX   r   r   AUTOCOMPLETEr^   s     r   is_autocompletezAXUtilitiesRole.is_autocomplete
  .     <$$S)Duzz....r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z,Returns True if obj has the block quote role)r   rX   r   r   BLOCK_QUOTEr^   s     r   is_block_quotezAXUtilitiesRole.is_block_quote  rm   r   c                     |t        j                  |       }|t        j                  j                  t        j                  j
                  fv S )z7Returns True if obj has the push- or toggle-button role)r   rX   r   r   r'   rU   r^   s     r   	is_buttonzAXUtilitiesRole.is_button  s=     <$$S)D

..

0H0HIIIr   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the calendar role)r   rX   r   r   CALENDARr^   s     r   is_calendarzAXUtilitiesRole.is_calendar"  .     <$$S)Duzz****r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z'Returns True if obj has the canvas role)r   rX   r   r   CANVASr^   s     r   	is_canvaszAXUtilitiesRole.is_canvas*  .     <$$S)Duzz((((r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the caption role)r   rX   r   r   rO   r^   s     r   
is_captionzAXUtilitiesRole.is_caption2  rt   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the chart role)r   rX   r   r   CHARTr^   s     r   is_chartzAXUtilitiesRole.is_chart:  re   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the checkbox role)r   rX   r   r   r    r^   s     r   is_check_boxzAXUtilitiesRole.is_check_boxB  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z/Returns True if obj has the check menuitem role)r   rX   r   r   r,   r^   s     r   is_check_menu_itemz"AXUtilitiesRole.is_check_menu_itemJ  .     <$$S)Duzz1111r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z.Returns True if obj has the color_chooser role)r   rX   r   r   r   r^   s     r   is_color_chooserz AXUtilitiesRole.is_color_chooserR  .     <$$S)Duzz////r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z.Returns True if obj has the column header role)r   rX   r   r   rH   r^   s     r   is_column_headerz AXUtilitiesRole.is_column_headerZ  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the combobox role)r   rX   r   r   r"   r^   s     r   is_combo_boxzAXUtilitiesRole.is_combo_boxb  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the comment role)r   rX   r   r   COMMENTr^   s     r   
is_commentzAXUtilitiesRole.is_commentj  rt   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z1Returns True if obj has the content deletion role)r   rX   r   r   CONTENT_DELETIONr^   s     r   is_content_deletionz#AXUtilitiesRole.is_content_deletionr  .     <$$S)Duzz2222r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z2Returns True if obj has the content insertion role)r   rX   r   r   CONTENT_INSERTIONr^   s     r   is_content_insertionz$AXUtilitiesRole.is_content_insertionz  rb   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z,Returns True if obj has the date editor role)r   rX   r   r   DATE_EDITORr^   s     r   is_date_editorzAXUtilitiesRole.is_date_editor  rm   r   c                     t         j                  | |      xr. t        j                  | t        j
                  j                        S )zAReturns True if obj has the push button role the is-default state)r   is_push_buttonr   	has_stater   	StateType
IS_DEFAULTr^   s     r   is_default_buttonz!AXUtilitiesRole.is_default_button  s:     --c48 D""3(B(BC	Dr   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z+Returns True if obj has the definition role)r   rX   r   r   
DEFINITIONr^   s     r   is_definitionzAXUtilitiesRole.is_definition  .     <$$S)Duzz,,,,r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z1Returns True if obj has the description list role)r   rX   r   r   DESCRIPTION_LISTr^   s     r   is_description_listz#AXUtilitiesRole.is_description_list  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z1Returns True if obj has the description term role)r   rX   r   r   DESCRIPTION_TERMr^   s     r   is_description_termz#AXUtilitiesRole.is_description_term  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z2Returns True if obj has the description value role)r   rX   r   r   DESCRIPTION_VALUEr^   s     r   is_description_valuez$AXUtilitiesRole.is_description_value  rb   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z.Returns True if obj has the desktop frame role)r   rX   r   r   DESKTOP_FRAMEr^   s     r   is_desktop_framez AXUtilitiesRole.is_desktop_frame  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z-Returns True if obj has the desktop icon role)r   rX   r   r   DESKTOP_ICONr^   s     r   is_desktop_iconzAXUtilitiesRole.is_desktop_icon  r{   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the dial role)r   rX   r   r   DIALr^   s     r   is_dialzAXUtilitiesRole.is_dial  ,     <$$S)Duzz&&r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z'Returns True if obj has the dialog role)r   rX   r   r   r   r^   s     r   	is_dialogzAXUtilitiesRole.is_dialog  r   r   c                 b    t         j                  d      }|t        j                  |       }||v S )z0Returns True if obj has any dialog or alert roleT)r   r   r   rX   r_   r`   r   s      r   is_dialog_or_alertz"AXUtilitiesRole.is_dialog_or_alert  s3      006<$$S)Du}r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z/Returns True if obj has the directory pane role)r   rX   r   r   DIRECTORY_PANEr^   s     r   is_directory_panez!AXUtilitiesRole.is_directory_pane  .     <$$S)Duzz0000r   c                 `    t         j                         }|t        j                  |       }||v S )z1Returns True if obj has any document-related role)r   r   r   rX   r   s      r   is_documentzAXUtilitiesRole.is_document  s1      224<$$S)Du}r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z/Returns True if obj has the document email role)r   rX   r   r   r   r^   s     r   is_document_emailz!AXUtilitiesRole.is_document_email  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z/Returns True if obj has the document frame role)r   rX   r   r   r   r^   s     r   is_document_framez!AXUtilitiesRole.is_document_frame  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z6Returns True if obj has the document presentation role)r   rX   r   r   r   r^   s     r   is_document_presentationz(AXUtilitiesRole.is_document_presentation  s.     <$$S)Duzz7777r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z5Returns True if obj has the document spreadsheet role)r   rX   r   r   r   r^   s     r   is_document_spreadsheetz'AXUtilitiesRole.is_document_spreadsheet  s.     <$$S)Duzz6666r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z.Returns True if obj has the document text role)r   rX   r   r   r   r^   s     r   is_document_textz AXUtilitiesRole.is_document_text  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z-Returns True if obj has the document web role)r   rX   r   r   r   r^   s     r   is_document_webzAXUtilitiesRole.is_document_web  r{   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z-Returns True if obj has the drawing area role)r   rX   r   r   DRAWING_AREAr^   s     r   is_drawing_areazAXUtilitiesRole.is_drawing_area  r{   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the editbar role)r   rX   r   r   EDITBARr^   s     r   
is_editbarzAXUtilitiesRole.is_editbar#  rt   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the embedded role)r   rX   r   r   EMBEDDEDr^   s     r   is_embeddedzAXUtilitiesRole.is_embedded+  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the entry role)r   rX   r   r   r%   r^   s     r   is_entryzAXUtilitiesRole.is_entry3  re   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the extended role)r   rX   r   r   EXTENDEDr^   s     r   is_extendedzAXUtilitiesRole.is_extended;  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z-Returns True if obj has the file chooser role)r   rX   r   r   r   r^   s     r   is_file_chooserzAXUtilitiesRole.is_file_chooserC  r{   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z'Returns True if obj has the filler role)r   rX   r   r   FILLERr^   s     r   	is_fillerzAXUtilitiesRole.is_fillerK  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z2Returns True if obj has the focus traversable role)r   rX   r   r   FOCUS_TRAVERSABLEr^   s     r   is_focus_traversablez$AXUtilitiesRole.is_focus_traversableS  rb   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z-Returns True if obj has the font chooser role)r   rX   r   r   FONT_CHOOSERr^   s     r   is_font_chooserzAXUtilitiesRole.is_font_chooser[  r{   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z'Returns True if obj has the footer role)r   rX   r   r   FOOTERr^   s     r   	is_footerzAXUtilitiesRole.is_footerc  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the footnote role)r   rX   r   r   FOOTNOTEr^   s     r   is_footnotezAXUtilitiesRole.is_footnotek  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the form role)r   rX   r   r   FORMr^   s     r   is_formzAXUtilitiesRole.is_forms  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the frame role)r   rX   r   r   FRAMEr^   s     r   is_framezAXUtilitiesRole.is_frame{  re   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z+Returns True if obj has the glass pane role)r   rX   r   r   
GLASS_PANEr^   s     r   is_glass_panezAXUtilitiesRole.is_glass_pane  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the grouping role)r   rX   r   r   GROUPINGr^   s     r   is_groupingzAXUtilitiesRole.is_grouping  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z'Returns True if obj has the header role)r   rX   r   r   HEADERr^   s     r   	is_headerzAXUtilitiesRole.is_header  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the heading role)r   rX   r   r   HEADINGr^   s     r   
is_headingzAXUtilitiesRole.is_heading  rt   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z/Returns True if obj has the html container role)r   rX   r   r   HTML_CONTAINERr^   s     r   is_html_containerz!AXUtilitiesRole.is_html_container  r   r   c                     t         j                  | |      xr. t        j                  | t        j
                  j                        S )z-Returns True if obj is a horizontal scrollbar)r   is_scroll_barr   r   r   r   
HORIZONTALr^   s     r   is_horizontal_scrollbarz'AXUtilitiesRole.is_horizontal_scrollbar  s:     ,,S$7 D""3(B(BC	Dr   c                     t         j                  | |      xr. t        j                  | t        j
                  j                        S )z-Returns True if obj is a horizontal separator)r   is_separatorr   r   r   r   r  r^   s     r   is_horizontal_separatorz'AXUtilitiesRole.is_horizontal_separator  s:     ++C6 D""3(B(BC	Dr   c                     t         j                  | |      xr. t        j                  | t        j
                  j                        S )z*Returns True if obj is a horizontal slider)r   	is_sliderr   r   r   r   r  r^   s     r   is_horizontal_sliderz$AXUtilitiesRole.is_horizontal_slider  s:     ((d3 D""3(B(BC	Dr   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the icon role)r   rX   r   r   ICONr^   s     r   is_iconzAXUtilitiesRole.is_icon  r   r   c                     |t        j                  |       }|t        j                  j                  t        j                  j
                  fv S )z/Returns True if obj has the icon or canvas role)r   rX   r   r   r  r   r^   s     r   is_icon_or_canvasz!AXUtilitiesRole.is_icon_or_canvas  s;     <$$S)D

):):;;;r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the image role)r   rX   r   r   IMAGEr^   s     r   is_imagezAXUtilitiesRole.is_image  re   r   c                     |t        j                  |       }|t        j                  j                  t        j                  j
                  fv S )z0Returns True if obj has the image or canvas role)r   rX   r   r   r  r   r^   s     r   is_image_or_canvasz"AXUtilitiesRole.is_image_or_canvas  s=     <$$S)D

((%***;*;<<<r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the image map role)r   rX   r   r   	IMAGE_MAPr^   s     r   is_image_mapzAXUtilitiesRole.is_image_map  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the info bar role)r   rX   r   r   INFO_BARr^   s     r   is_info_barzAXUtilitiesRole.is_info_bar  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z4Returns True if obj has the input method window role)r   rX   r   r   INPUT_METHOD_WINDOWr^   s     r   is_input_method_windowz&AXUtilitiesRole.is_input_method_window  .     <$$S)Duzz5555r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z/Returns True if obj has the internal frame role)r   rX   r   r   INTERNAL_FRAMEr^   s     r   is_internal_framez!AXUtilitiesRole.is_internal_frame  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the invalid role)r   rX   r   r   INVALIDr^   s     r   is_invalid_rolezAXUtilitiesRole.is_invalid_role   rt   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the label role)r   rX   r   r   LABELr^   s     r   is_labelzAXUtilitiesRole.is_label  re   r   c                     |t        j                  |       }|t        j                  j                  t        j                  j
                  fv S )z1Returns True if obj has the label or caption role)r   rX   r   r   r4  rO   r^   s     r   is_label_or_captionz#AXUtilitiesRole.is_label_or_caption  s=     <$$S)D

((%***<*<===r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the landmark role)r   rX   r   r   LANDMARKr^   s     r   is_landmarkzAXUtilitiesRole.is_landmark  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z-Returns True if obj has the layered pane role)r   rX   r   r   LAYERED_PANEr^   s     r   is_layered_panezAXUtilitiesRole.is_layered_pane   r{   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the level bar role)r   rX   r   r   	LEVEL_BARr^   s     r   is_level_barzAXUtilitiesRole.is_level_bar(  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the link role)r   rX   r   r   LINKr^   s     r   is_linkzAXUtilitiesRole.is_link0  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the list role)r   rX   r   r   r@   r^   s     r   is_listzAXUtilitiesRole.is_list8  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the list box role)r   rX   r   r   r$   r^   s     r   is_list_boxzAXUtilitiesRole.is_list_box@  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the list item role)r   rX   r   r   	LIST_ITEMr^   s     r   is_list_itemzAXUtilitiesRole.is_list_itemH  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z$Returns True if obj has the log role)r   rX   r   r   LOGr^   s     r   is_logzAXUtilitiesRole.is_logP  s,     <$$S)Duzz~~%%r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the mark role)r   rX   r   r   MARKr^   s     r   is_markzAXUtilitiesRole.is_markX  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the marquee role)r   rX   r   r   MARQUEEr^   s     r   
is_marqueezAXUtilitiesRole.is_marquee`  rt   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the math role)r   rX   r   r   MATHr^   s     r   is_mathzAXUtilitiesRole.is_mathh  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z.Returns True if obj has the math fraction role)r   rX   r   r   MATH_FRACTIONr^   s     r   is_math_fractionz AXUtilitiesRole.is_math_fractionp  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the math root role)r   rX   r   r   	MATH_ROOTr^   s     r   is_math_rootzAXUtilitiesRole.is_math_rootx  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the menu role)r   rX   r   r   r1   r^   s     r   is_menuzAXUtilitiesRole.is_menu  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the menubar role)r   rX   r   r   r2   r^   s     r   is_menu_barzAXUtilitiesRole.is_menu_bar  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the menu item role)r   rX   r   r   r+   r^   s     r   is_menu_itemzAXUtilitiesRole.is_menu_item  ri   r   c                 `    t         j                         }|t        j                  |       }||v S )z*Returns True if obj has any menu item role)r   r/   r   rX   r   s      r   is_menu_item_of_any_kindz(AXUtilitiesRole.is_menu_item_of_any_kind  s1      335<$$S)Du}r   c                 `    t         j                         }|t        j                  |       }||v S )z-Returns True if obj has any menu-related role)r   r4   r   rX   r   s      r   is_menu_relatedzAXUtilitiesRole.is_menu_related  1      668<$$S)Du}r   c                     t         j                  | |      xr. t        j                  | t        j
                  j                        S )z@Returns True if obj has the alert or dialog role and modal state)r   r   r   r   r   r   MODALr^   s     r   is_modal_dialogzAXUtilitiesRole.is_modal_dialog  s8     11#t< ?""3(=(=>	?r   c                     t         j                  | |      xr. t        j                  | t        j
                  j                        S z:Returns True if obj has the entry role and multiline state)r   r   r   r   r   r   
MULTI_LINEr^   s     r   is_multi_line_entryz#AXUtilitiesRole.is_multi_line_entry  s:     ''T2 D""3(B(BC	Dr   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z-Returns True if obj has the notification role)r   rX   r   r   NOTIFICATIONr^   s     r   is_notificationzAXUtilitiesRole.is_notification  r{   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z,Returns True if obj has the option pane role)r   rX   r   r   OPTION_PANEr^   s     r   is_option_panezAXUtilitiesRole.is_option_pane  rm   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the page role)r   rX   r   r   PAGEr^   s     r   is_pagezAXUtilitiesRole.is_page  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the page tab role)r   rX   r   r   r6   r^   s     r   is_page_tabzAXUtilitiesRole.is_page_tab  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z.Returns True if obj has the page tab list role)r   rX   r   r   r7   r^   s     r   is_page_tab_listz AXUtilitiesRole.is_page_tab_list  r   r   c                     t         j                  j                  t         j                  j                  g}|t	        j
                  |       }||v S )z:Returns True if obj has the page tab or page tab list role)r   r   r7   r6   r   rX   r   s      r   is_page_tab_list_relatedz(AXUtilitiesRole.is_page_tab_list_related  sA     ))5::+>+>?<$$S)Du}r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the panel role)r   rX   r   r   PANELr^   s     r   is_panelzAXUtilitiesRole.is_panel  re   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the paragraph role)r   rX   r   r   	PARAGRAPHr^   s     r   is_paragraphzAXUtilitiesRole.is_paragraph  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z.Returns True if obj has the password text role)r   rX   r   r   r&   r^   s     r   is_password_textz AXUtilitiesRole.is_password_text  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z+Returns True if obj has the popup menu role)r   rX   r   r   r3   r^   s     r   is_popup_menuzAXUtilitiesRole.is_popup_menu  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z-Returns True if obj has the progress bar role)r   rX   r   r   r8   r^   s     r   is_progress_barzAXUtilitiesRole.is_progress_bar	  r{   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z,Returns True if obj has the push button role)r   rX   r   r   r'   r^   s     r   r   zAXUtilitiesRole.is_push_button  rm   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z1Returns True if obj has the push button menu role)r   rX   r   r   PUSH_BUTTON_MENUr^   s     r   is_push_button_menuz#AXUtilitiesRole.is_push_button_menu  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z-Returns True if obj has the radio button role)r   rX   r   r   r!   r^   s     r   is_radio_buttonzAXUtilitiesRole.is_radio_button!  r{   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z0Returns True if obj has the radio menu item role)r   rX   r   r   r-   r^   s     r   is_radio_menu_itemz"AXUtilitiesRole.is_radio_menu_item)  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z'Returns True if obj has the rating role)r   rX   r   r   RATINGr^   s     r   	is_ratingzAXUtilitiesRole.is_rating1  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z1Returns True if obj has the redundant object role)r   rX   r   r   REDUNDANT_OBJECTr^   s     r   is_redundant_objectz#AXUtilitiesRole.is_redundant_object9  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the root pane role)r   rX   r   r   	ROOT_PANEr^   s     r   is_root_panezAXUtilitiesRole.is_root_paneA  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z+Returns True if obj has the row header role)r   rX   r   r   rI   r^   s     r   is_row_headerzAXUtilitiesRole.is_row_headerI  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the ruler role)r   rX   r   r   RULERr^   s     r   is_rulerzAXUtilitiesRole.is_rulerQ  re   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the scrollbar role)r   rX   r   r   
SCROLL_BARr^   s     r   r  zAXUtilitiesRole.is_scroll_barY  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z,Returns True if obj has the scroll pane role)r   rX   r   r   SCROLL_PANEr^   s     r   is_scroll_panezAXUtilitiesRole.is_scroll_panea  rm   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the section role)r   rX   r   r   SECTIONr^   s     r   
is_sectionzAXUtilitiesRole.is_sectioni  rt   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the separator role)r   rX   r   r   	SEPARATORr^   s     r   r  zAXUtilitiesRole.is_separatorq  ri   r   c                     t         j                  | |      xr. t        j                  | t        j
                  j                        S rl  )r   r   r   r   r   r   SINGLE_LINEr^   s     r   is_single_line_entryz$AXUtilitiesRole.is_single_line_entryy  s:     ''T2 E""3(C(CD	Er   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z'Returns True if obj has the slider role)r   rX   r   r   r9   r^   s     r   r  zAXUtilitiesRole.is_slider  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z,Returns True if obj has the spin button role)r   rX   r   r   r(   r^   s     r   is_spin_buttonzAXUtilitiesRole.is_spin_button  rm   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z+Returns True if obj has the split pane role)r   rX   r   r   
SPLIT_PANEr^   s     r   is_split_panezAXUtilitiesRole.is_split_pane  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z'Returns True if obj has the static role)r   rX   r   r   STATICr^   s     r   	is_staticzAXUtilitiesRole.is_static  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the statusbar role)r   rX   r   r   
STATUS_BARr^   s     r   is_status_barzAXUtilitiesRole.is_status_bar  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the subscript role)r   rX   r   r   	SUBSCRIPTr^   s     r   is_subscriptzAXUtilitiesRole.is_subscript  ri   r   c                     |t        j                  |       }|t        j                  j                  t        j                  j
                  fv S )z9Returns True if obj has the subscript or superscript role)r   rX   r   r   r  SUPERSCRIPTr^   s     r   is_subscript_or_superscriptz+AXUtilitiesRole.is_subscript_or_superscript  s=     <$$S)D

,,ejj.D.DEEEr   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z+Returns True if obj has the suggestion role)r   rX   r   r   
SUGGESTIONr^   s     r   is_suggestionzAXUtilitiesRole.is_suggestion  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z,Returns True if obj has the superscript role)r   rX   r   r   r  r^   s     r   is_superscriptzAXUtilitiesRole.is_superscript  rm   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the table role)r   rX   r   r   rA   r^   s     r   is_tablezAXUtilitiesRole.is_table  re   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z+Returns True if obj has the table cell role)r   rX   r   r   rD   r^   s     r   is_table_cellzAXUtilitiesRole.is_table_cell  r   r   c                 `    t         j                         }|t        j                  |       }||v S )z?Returns True if obj has the table cell or a header-related role)r   rK   r   rX   r   s      r   is_table_cell_or_headerz'AXUtilitiesRole.is_table_cell_or_header  s1      446<$$S)Du}r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z4Returns True if obj has the table column header role)r   rX   r   r   rF   r^   s     r   is_table_column_headerz&AXUtilitiesRole.is_table_column_header  r,  r   c                 `    t         j                         }|t        j                  |       }||v S )z3Returns True if obj has a table header related role)r   rM   r   rX   r   s      r   is_table_headerzAXUtilitiesRole.is_table_header  rg  r   c                 b    t         j                  |      }|t        j                  |       }||v S )z,Returns True if obj has a table-related role)r   rQ   r   rX   )r_   r`   rP   r   s       r   is_table_relatedz AXUtilitiesRole.is_table_related  s3      77H<$$S)Du}r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the table row role)r   rX   r   r   	TABLE_ROWr^   s     r   is_table_rowzAXUtilitiesRole.is_table_row  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z1Returns True if obj has the table row header role)r   rX   r   r   rG   r^   s     r   is_table_row_headerz#AXUtilitiesRole.is_table_row_header  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z2Returns True if obj has the tearoff menu item role)r   rX   r   r   r.   r^   s     r   is_tearoff_menu_itemz$AXUtilitiesRole.is_tearoff_menu_item  rb   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the terminal role)r   rX   r   r   TERMINALr^   s     r   is_terminalzAXUtilitiesRole.is_terminal  s.     <$$S)Duzz****r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the text role)r   rX   r   r   r#   r^   s     r   is_textzAXUtilitiesRole.is_text  r   r   c                     t         j                  j                  t         j                  j                  t         j                  j                  g}|t        j                  |       }||v S )z>Returns True if obj has any role associated with textual input)r   r   r%   r&   r(   r   rX   r   s      r   is_text_inputzAXUtilitiesRole.is_text_input"  sM     !!5::#;#;UZZ=S=ST<$$S)Du}r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the timer role)r   rX   r   r   TIMERr^   s     r   is_timerzAXUtilitiesRole.is_timer+  re   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the titlebar role)r   rX   r   r   	TITLE_BARr^   s     r   is_title_barzAXUtilitiesRole.is_title_bar3  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z.Returns True if obj has the toggle button role)r   rX   r   r   rU   r^   s     r   is_toggle_buttonz AXUtilitiesRole.is_toggle_button;  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the toolbar role)r   rX   r   r   r:   r^   s     r   is_tool_barzAXUtilitiesRole.is_tool_barC  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the tooltip role)r   rX   r   r   TOOL_TIPr^   s     r   is_tool_tipzAXUtilitiesRole.is_tool_tipK  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z%Returns True if obj has the tree role)r   rX   r   r   r=   r^   s     r   is_treezAXUtilitiesRole.is_treeS  r   r   c                     |t        j                  |       }|t        j                  j                  t        j                  j
                  fv S )z3Returns True if obj has the tree or tree table role)r   rX   r   r   r=   r<   r^   s     r   is_tree_or_tree_tablez%AXUtilitiesRole.is_tree_or_tree_table[  s;     <$$S)D

)>)>???r   c                     t         j                  j                  t         j                  j                  t         j                  j                  g}|t        j                  |       }||v S )z+Returns True if obj has a tree-related role)r   r   r=   r;   r<   r   rX   r   s      r   is_tree_relatedzAXUtilitiesRole.is_tree_relatedc  sQ     %%&&( <$$S)Du}r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z*Returns True if obj has the tree item role)r   rX   r   r   r;   r^   s     r   is_tree_itemzAXUtilitiesRole.is_tree_itemn  ri   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z+Returns True if obj has the tree table role)r   rX   r   r   r<   r^   s     r   is_tree_tablezAXUtilitiesRole.is_tree_tablev  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z(Returns True if obj has the unknown role)r   rX   r   r   UNKNOWNr^   s     r   
is_unknownzAXUtilitiesRole.is_unknown~  rt   r   c                     |t        j                  |       }|t        j                  j                  t        j                  j
                  fv S )z<Returns True if obj has the unknown or redundant object role)r   rX   r   r   r  r  r^   s     r   is_unknown_or_redundantz'AXUtilitiesRole.is_unknown_or_redundant  s=     <$$S)D

**EJJ,G,GHHHr   c                     t         j                  | |      xr. t        j                  | t        j
                  j                        S )z+Returns True if obj is a vertical scrollbar)r   r  r   r   r   r   VERTICALr^   s     r   is_vertical_scrollbarz%AXUtilitiesRole.is_vertical_scrollbar  s:     ,,S$7 B""3(@(@A	Br   c                     t         j                  | |      xr. t        j                  | t        j
                  j                        S )z+Returns True if obj is a vertical separator)r   r  r   r   r   r   r  r^   s     r   is_vertical_separatorz%AXUtilitiesRole.is_vertical_separator  s:     ++C6 B""3(@(@A	Br   c                     t         j                  | |      xr. t        j                  | t        j
                  j                        S )z(Returns True if obj is a vertical slider)r   r  r   r   r   r   r  r^   s     r   is_vertical_sliderz"AXUtilitiesRole.is_vertical_slider  s:     ((d3 B""3(@(@A	Br   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z&Returns True if obj has the video role)r   rX   r   r   VIDEOr^   s     r   is_videozAXUtilitiesRole.is_video  re   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z)Returns True if obj has the viewport role)r   rX   r   r   VIEWPORTr^   s     r   is_viewportzAXUtilitiesRole.is_viewport  r   r   c                 j    |t        j                  |       }|t        j                  j                  k(  S )z'Returns True if obj has the window role)r   rX   r   r   WINDOWr^   s     r   	is_windowzAXUtilitiesRole.is_window  r   r   )T)F)N)NF)__name__
__module____qualname____doc__staticmethodr   r   r)   r/   r4   r>   rB   rK   rM   rQ   rS   rV   r[   ra   rd   rh   rl   rp   rs   rw   rz   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  r  r  r  r  r  r  r  r  r  r   r"  r%  r(  r+  r/  r2  r5  r7  r:  r=  r@  rC  rE  rG  rJ  rM  rP  rS  rV  rY  r\  r^  r`  rb  rd  rf  rj  rn  rq  rt  rw  ry  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  r  r  r  r  r  r  r  r  r  r   r  r  r	   r   r   r   r   +   sg   ;  	 	     
 
  , 	 	 	 	         B B
 4 4 ( ( , , . . ( ( * * ( ( / / . . J J + + ) ) * * ( ( , , 2 2 0 0 0 0 , , * * 3 3 4 4 . . D D - - 3 3 3 3 4 4 0 0 / / ' ' ) )   1 1   1 1 1 1 8 8 7 7 0 0 / / / / * * + + ( ( + + / / ) ) 4 4 / / ) ) + + ' ' ( ( - - + + ) ) * * 1 1 D D D D D D ' ' < < ( ( = = , , + + 6 6 1 1 * * ( ( > > + + / / , , ' ' ' ' + + , , & & ' ' * * ' ' 0 0 , , ' ' + + , ,     ? ? D D / / . . ' ' + + 0 0   ( ( , , 0 0 - - / / . . 3 3 / / 2 2 ) ) 3 3 , , - - ( ( - - . . * * , , E E ) ) . . - - ) ) - - , , F F - - . . ( ( - -   6 6     , , 3 3 4 4 + + ' '   ( ( , , 0 0 + + + + ' ' @ @   , , - - * * I I B B B B B B ( ( + + ) )r   r   )r  __id____version____date____copyright____license__girequire_versiongi.repositoryr   	ax_objectr   r   r  r   r   <module>r     sL   * 1 	   7E "  N) N)r   