Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve import times #403

Closed
jyn514 opened this issue Oct 9, 2019 · 14 comments · Fixed by #480
Closed

Improve import times #403

jyn514 opened this issue Oct 9, 2019 · 14 comments · Fixed by #480

Comments

@jyn514
Copy link
Contributor

jyn514 commented Oct 9, 2019

Importing keyring takes more than 2 seconds with a cold cache on my machine, which is more than half the startup time of my CLI app (I have a very slow hard disk). Would it be possible to improve the start time a little?

The main offenders are secretstorage and keyring.core, which makes up more than half the time on its own. Timing info is generated with python -X importtime -c 'import keyring'. I ensured a cold cache with echo 3 | sudo tee /proc/sys/vm/drop_caches as per http://stackoverflow.com/questions/9551838/ddg#9551853, it's probably different on non-linux systems.

Timing info
import time:      1365 |       1365 |       collections.abc
import time:      4709 |       4709 |         enum
import time:       448 |        448 |           _sre
import time:      2479 |       2479 |             sre_constants
import time:      2616 |       5095 |           sre_parse
import time:      5423 |      10965 |         sre_compile
import time:     11241 |      11241 |         copyreg
import time:      5906 |      32819 |       re
import time:     18352 |      52535 |     configparser
import time:       538 |        538 |       time
import time:      8394 |       8394 |             token
import time:      6183 |      14577 |           tokenize
import time:      1330 |      15906 |         linecache
import time:      1987 |      17892 |       traceback
import time:      2693 |       2693 |         _weakrefset
import time:     12392 |      15085 |       weakref
import time:       298 |        298 |         _string
import time:      9539 |       9837 |       string
import time:      3303 |       3303 |       threading
import time:       252 |        252 |       atexit
import time:     23558 |      70461 |     logging
import time:      8688 |       8688 |           fnmatch
import time:     10666 |      19353 |         glob
import time:       418 |        418 |             errno
import time:       433 |        433 |             zlib
import time:      8698 |       8698 |               _compression
import time:     58627 |      58627 |               _bz2
import time:      1946 |      69270 |             bz2
import time:     20977 |      20977 |               _lzma
import time:     28508 |      49485 |             lzma
import time:       277 |        277 |             pwd
import time:       192 |        192 |             grp
import time:     12027 |     132099 |           shutil
import time:       431 |        431 |             _struct
import time:      1250 |       1681 |           struct
import time:      1200 |       1200 |           binascii
import time:     14949 |     149927 |         zipfile
import time:     41826 |     211105 |       entrypoints
import time:      1613 |       1613 |       keyring.credentials
import time:      1831 |       1831 |       keyring.errors
import time:     13431 |      13431 |       keyring.util
import time:      4978 |       4978 |       keyring.util.properties
import time:      2960 |     235916 |     keyring.backend
import time:      9649 |       9649 |           signal
import time:       190 |        190 |           _posixsubprocess
import time:       210 |        210 |           select
import time:       185 |        185 |             math
import time:      2080 |       2265 |           selectors
import time:      3351 |      15663 |         subprocess
import time:     13548 |      29210 |       platform
import time:     33676 |      62885 |     keyring.util.platform_
import time:     19072 |      19072 |     keyring.backends
import time:      1549 |       1549 |     keyring.backends.fail
import time:      1298 |       1298 |       dbus._compat
import time:      3634 |       3634 |       dbus.exceptions
import time:       603 |        603 |         _dbus_bindings
import time:      1491 |       2093 |       dbus.types
import time:      8496 |      15520 |     dbus
import time:      4473 |       4473 |             jeepney.auth
import time:     10266 |      10266 |             jeepney.low_level
import time:      5936 |       5936 |             jeepney.bus
import time:     10051 |      10051 |               typing
import time:      1125 |      11176 |             jeepney.wrappers
import time:      9950 |      41798 |           jeepney
import time:     13426 |      55224 |         jeepney.integrate
import time:       442 |        442 |           _socket
import time:     14430 |      14872 |         socket
import time:       605 |        605 |         jeepney.routing
import time:      8427 |       8427 |         jeepney.bus_messages
import time:      5204 |      84330 |       jeepney.integrate.blocking
import time:      5566 |       5566 |         secretstorage.defines
import time:     50755 |      50755 |             _hashlib
import time:        90 |         90 |               _blake2
import time:       148 |        148 |               _sha3
import time:      9855 |      10092 |             hashlib
import time:      5566 |      66412 |           hmac
import time:     12869 |      12869 |               __future__
import time:       883 |        883 |               cryptography.__about__
import time:     18692 |      32443 |             cryptography
import time:      1828 |       1828 |                   _opcode
import time:      9447 |      11274 |                 opcode
import time:      9412 |      20686 |               dis
import time:     18489 |      39175 |             inspect
import time:      8766 |      80382 |           cryptography.utils
import time:       661 |     147454 |         secretstorage.dhcrypto
import time:      1467 |       1467 |         secretstorage.exceptions
import time:      6755 |       6755 |                 cryptography.hazmat
import time:     15585 |      22339 |               cryptography.hazmat.primitives
import time:     33452 |      33452 |                 six
import time:      1417 |       1417 |                 cryptography.exceptions
import time:      8792 |       8792 |                   cryptography.hazmat.backends
import time:     14971 |      23763 |                 cryptography.hazmat.backends.interfaces
import time:      6305 |       6305 |                 cryptography.hazmat.primitives.ciphers.modes
import time:      3810 |      68745 |               cryptography.hazmat.primitives.ciphers.base
import time:      1920 |      93003 |             cryptography.hazmat.primitives.ciphers
import time:      2382 |       2382 |             cryptography.hazmat.primitives.ciphers.algorithms
import time:      1633 |      97018 |           secretstorage.util
import time:      1402 |      98419 |         secretstorage.item
import time:      9227 |     262131 |       secretstorage.collection
import time:      6188 |     352648 |     secretstorage
import time:       614 |        614 |       win32ctypes
import time:       109 |        722 |     win32ctypes.pywin32
import time:       477 |        477 |     pywintypes
import time:     38097 |      38097 |         _ctypes
import time:      1819 |       1819 |         ctypes._endian
import time:     17215 |      57130 |       ctypes
import time:      1176 |      58305 |     keyring.backends._OS_X_API
import time:   1114529 |    1984614 |   keyring.core
import time:     69843 |    2054456 | keyring
@mitya57
Copy link
Collaborator

mitya57 commented Oct 9, 2019

keyring.core tries to find and load the best backend during import (init_backend() is called).

You can probably speed up that by specifying a particular backend using the configuration file or PYTHON_KEYRING_BACKEND environment variable.

The other offender you named, secretstorage, does not do anything particular during import. Maybe the time is spent during initialization — it tries to connect and authenticate to session D-Bus, and tests that the Secret Service daemon is working. I’m not sure we can do anything about this. Do you need this back-end at all?

@jyn514
Copy link
Contributor Author

jyn514 commented Oct 10, 2019

I tried setting PYTHON_KEYRING_BACKEND but it did not speed up the import time. Looking at the implementation of init_backend it seems that all backends are loaded regardless of any environment variables. In the callgraph below you can see that get_all_backends (really, _load_plugins) takes 1.6 seconds of the startup time:

function call times
         80093 function calls (78373 primitive calls) in 2.513 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     99/1    0.003    0.000    2.513    2.513 {built-in method builtins.exec}
        1    0.000    0.000    2.513    2.513 <string>:1(<module>)
        1    0.000    0.000    2.513    2.513 runpy.py:195(run_module)
     21/3    0.000    0.000    2.465    0.822 {built-in method builtins.__import__}
    106/2    0.002    0.000    2.465    1.232 <frozen importlib._bootstrap>:978(_find_and_load)
    106/2    0.001    0.000    2.465    1.232 <frozen importlib._bootstrap>:948(_find_and_load_unlocked)
    102/2    0.002    0.000    2.463    1.231 <frozen importlib._bootstrap>:663(_load_unlocked)
     83/2    0.001    0.000    2.462    1.231 <frozen importlib._bootstrap_external>:722(exec_module)
      2/1    0.000    0.000    2.455    2.455 runpy.py:102(_get_module_details)
    144/2    0.001    0.000    2.415    1.207 <frozen importlib._bootstrap>:211(_call_with_frames_removed)
        5    0.000    0.000    2.406    0.481 __init__.py:1(<module>)
        1    0.000    0.000    2.349    2.349 core.py:3(<module>)
        1    0.000    0.000    1.772    1.772 core.py:80(init_backend)
        2    0.000    0.000    1.675    0.838 __init__.py:20(wrapper)
        1    0.000    0.000    1.675    1.675 backend.py:196(get_all_keyring)
        1    0.000    0.000    1.675    1.675 backend.py:166(_load_plugins)
        1    0.000    0.000    1.118    1.118 entrypoints.py:230(get_group_all)
       26    0.002    0.000    1.116    0.043 entrypoints.py:117(iter_files_distros)
   150/41    0.002    0.000    0.878    0.021 glob.py:39(_iglob)
       95    0.001    0.000    0.817    0.009 glob.py:85(_glob0)
       95    0.001    0.000    0.816    0.009 posixpath.py:178(lexists)
       95    0.815    0.009    0.815    0.009 {built-in method posix.lstat}
       84    0.005    0.000    0.685    0.008 <frozen importlib._bootstrap_external>:793(get_code)
       89    0.141    0.002    0.617    0.007 <frozen importlib._bootstrap_external>:914(get_data)
  198/133    0.001    0.000    0.565    0.004 <frozen importlib._bootstrap>:1009(_handle_fromlist)
        5    0.000    0.000    0.557    0.111 entrypoints.py:79(load)
        5    0.000    0.000    0.557    0.111 __init__.py:109(import_module)
        5    0.000    0.000    0.557    0.111 <frozen importlib._bootstrap>:994(_gcd_import)
       84    0.477    0.006    0.477    0.006 {method 'read' of '_io.FileIO' objects}
        1    0.000    0.000    0.375    0.375 SecretService.py:1(<module>)
        1    0.000    0.000    0.358    0.358 __init__.py:8(<module>)
        1    0.000    0.000    0.302    0.302 backend.py:3(<module>)
      107    0.003    0.000    0.300    0.003 <frozen importlib._bootstrap>:882(_find_spec)
       94    0.000    0.000    0.293    0.003 <frozen importlib._bootstrap_external>:1272(find_spec)
       94    0.002    0.000    0.293    0.003 <frozen importlib._bootstrap_external>:1240(_get_spec)
      173    0.007    0.000    0.285    0.002 <frozen importlib._bootstrap_external>:1356(find_spec)
      417    0.001    0.000    0.268    0.001 <frozen importlib._bootstrap_external>:74(_path_stat)
      443    0.268    0.001    0.268    0.001 {built-in method posix.stat}
      155    0.001    0.000    0.249    0.002 <frozen importlib._bootstrap_external>:84(_path_is_mode_type)
      136    0.000    0.000    0.249    0.002 <frozen importlib._bootstrap_external>:93(_path_isfile)
        1    0.000    0.000    0.239    0.239 collection.py:16(<module>)
       25    0.002    0.000    0.216    0.009 configparser.py:678(read)
       25    0.201    0.008    0.210    0.008 configparser.py:990(_read)
        1    0.000    0.000    0.140    0.140 dhcrypto.py:8(<module>)
      102    0.001    0.000    0.132    0.001 <frozen importlib._bootstrap>:576(module_from_spec)
        1    0.000    0.000    0.125    0.125 entrypoints.py:1(<module>)
        6    0.000    0.000    0.119    0.020 <frozen importlib._bootstrap_external>:1040(create_module)
        6    0.119    0.020    0.119    0.020 {built-in method _imp.create_dynamic}
       25    0.000    0.000    0.096    0.004 {built-in method builtins.max}
     15/8    0.008    0.001    0.096    0.012 properties.py:25(__get__)
        1    0.000    0.000    0.091    0.091 item.py:10(<module>)
        1    0.000    0.000    0.090    0.090 util.py:7(<module>)
        2    0.000    0.000    0.088    0.044 SecretService.py:30(priority)
        1    0.000    0.000    0.086    0.086 platform_.py:1(<module>)
       12    0.000    0.000    0.085    0.007 blocking.py:62(send_and_get_reply)
        1    0.000    0.000    0.085    0.085 zipfile.py:5(<module>)
        4    0.000    0.000    0.080    0.020 __init__.py:28(suppress_exceptions)
        4    0.000    0.000    0.080    0.020 __init__.py:5(<module>)
       10    0.000    0.000    0.078    0.008 util.py:45(send_and_get_reply)
       13    0.000    0.000    0.077    0.006 blocking.py:49(recv_messages)
        8    0.000    0.000    0.076    0.009 collection.py:150(get_all_collections)
        8    0.000    0.000    0.076    0.009 util.py:63(get_property)
        6    0.000    0.000    0.072    0.012 backend.py:60(viable)
        1    0.000    0.000    0.072    0.072 OS_X.py:1(<module>)
       15    0.070    0.005    0.070    0.005 {method 'recv' of '_socket.socket' objects}
        1    0.000    0.000    0.065    0.065 _OS_X_API.py:1(<module>)
        1    0.000    0.000    0.063    0.063 shutil.py:5(<module>)
        1    0.000    0.000    0.062    0.062 base.py:5(<module>)
        1    0.000    0.000    0.058    0.058 runpy.py:62(_run_code)
        1    0.000    0.000    0.058    0.058 __main__.py:1(<module>)
       14    0.000    0.000    0.055    0.004 glob.py:79(_glob1)
        1    0.000    0.000    0.054    0.054 hmac.py:4(<module>)
      528    0.006    0.000    0.050    0.000 glob.py:114(_iterdir)
        1    0.000    0.000    0.047    0.047 __init__.py:2(<module>)
       56    0.000    0.000    0.045    0.001 re.py:232(compile)
       56    0.001    0.000    0.044    0.001 re.py:271(_compile)
      312    0.017    0.000    0.043    0.000 {built-in method builtins.__build_class__}
     1126    0.043    0.000    0.043    0.000 {method 'is_dir' of 'posix.DirEntry' objects}
        1    0.000    0.000    0.043    0.043 __init__.py:24(<module>)
        1    0.000    0.000    0.042    0.042 blocking.py:2(<module>)
       32    0.001    0.000    0.042    0.001 sre_compile.py:759(compile)
        2    0.000    0.000    0.041    0.020 util.py:73(find_spec)
        3    0.000    0.000    0.039    0.013 platform.py:1084(system)
        3    0.000    0.000    0.039    0.013 platform.py:946(uname)
        1    0.000    0.000    0.039    0.039 platform.py:803(_syscmd_uname)
        1    0.037    0.037    0.037    0.037 {method 'read' of '_io.TextIOWrapper' objects}
        1    0.000    0.000    0.033    0.033 utils.py:5(<module>)
        1    0.000    0.000    0.033    0.033 cli.py:2(<module>)
        1    0.000    0.000    0.032    0.032 platform.py:10(<module>)
       79    0.001    0.000    0.028    0.000 <frozen importlib._bootstrap_external>:523(_compile_bytecode)
       32    0.001    0.000    0.028    0.001 sre_parse.py:919(parse)
   118/32    0.001    0.000    0.027    0.001 sre_parse.py:417(_parse_sub)
       79    0.026    0.000    0.026    0.000 {built-in method marshal.loads}
   130/35    0.009    0.000    0.026    0.001 sre_parse.py:475(_parse)
        1    0.000    0.000    0.025    0.025 bz2.py:5(<module>)
        1    0.000    0.000    0.024    0.024 wrappers.py:1(<module>)
        5    0.000    0.000    0.022    0.004 <frozen importlib._bootstrap_external>:785(source_to_code)
        5    0.022    0.004    0.022    0.004 {built-in method builtins.compile}
        1    0.000    0.000    0.022    0.022 lzma.py:9(<module>)
        1    0.000    0.000    0.020    0.020 inspect.py:27(<module>)
        1    0.000    0.000    0.018    0.018 kwallet.py:1(<module>)
        1    0.000    0.000    0.017    0.017 traceback.py:1(<module>)
       25    0.001    0.000    0.016    0.001 configparser.py:600(__init__)
        7    0.000    0.000    0.016    0.002 enum.py:633(_convert)
        6    0.000    0.000    0.016    0.003 collection.py:36(__init__)
        1    0.000    0.000    0.015    0.015 linecache.py:6(<module>)
        1    0.001    0.001    0.013    0.013 tokenize.py:21(<module>)
        1    0.000    0.000    0.013    0.013 socket.py:47(<module>)
        1    0.000    0.000    0.013    0.013 configparser.py:139(<module>)
        1    0.000    0.000    0.012    0.012 subprocess.py:42(<module>)
       32    0.000    0.000    0.012    0.000 sre_compile.py:598(_code)
        1    0.000    0.000    0.012    0.012 getpass.py:11(<module>)
        2    0.000    0.000    0.012    0.006 __init__.py:23(dbus_init)
      137    0.000    0.000    0.012    0.000 enum.py:284(__call__)
        7    0.000    0.000    0.011    0.002 enum.py:389(_create_)
        1    0.000    0.000    0.010    0.010 glob.py:1(<module>)
       12    0.004    0.000    0.010    0.001 enum.py:135(__new__)
        1    0.000    0.000    0.010    0.010 dis.py:1(<module>)
        2    0.000    0.000    0.010    0.005 __init__.py:10(<module>)
       25    0.002    0.000    0.010    0.000 configparser.py:1314(__init__)
      102    0.002    0.000    0.009    0.000 <frozen importlib._bootstrap>:504(_init_module_attrs)
   230/32    0.004    0.000    0.009    0.000 sre_compile.py:71(_compile)
        2    0.000    0.000    0.009    0.004 blocking.py:89(connect_and_authenticate)
      939    0.003    0.000    0.008    0.000 <frozen importlib._bootstrap_external>:56(_path_join)
       12    0.000    0.000    0.008    0.001 blocking.py:43(send_message)
        1    0.001    0.001    0.008    0.008 typing.py:19(<module>)
       12    0.000    0.000    0.007    0.001 low_level.py:380(serialise)
        2    0.000    0.000    0.007    0.004 blocking.py:35(__init__)
        2    0.000    0.000    0.007    0.003 blocking.py:80(inner)
       13    0.000    0.000    0.007    0.001 low_level.py:405(feed)
        1    0.000    0.000    0.007    0.007 configparser.py:559(RawConfigParser)
       27    0.000    0.000    0.006    0.000 low_level.py:413(_read1)
      168    0.003    0.000    0.006    0.000 <frozen importlib._bootstrap_external>:271(cache_from_source)
       12    0.000    0.000    0.006    0.000 low_level.py:339(serialise)
        1    0.000    0.000    0.006    0.006 signal.py:1(<module>)
      218    0.001    0.000    0.006    0.000 <frozen importlib._bootstrap_external>:1203(_path_importer_cache)
       14    0.000    0.000    0.006    0.000 low_level.py:370(from_buffer)
      261    0.003    0.000    0.006    0.000 posixpath.py:75(join)
       12    0.000    0.000    0.005    0.000 low_level.py:318(serialise_header_fields)
       37    0.000    0.000    0.005    0.000 utils.py:46(register_decorator)
       55    0.000    0.000    0.005    0.000 abc.py:125(__new__)
     2285    0.002    0.000    0.005    0.000 sre_parse.py:254(get)
       68    0.001    0.000    0.005    0.000 low_level.py:147(serialise)
       26    0.005    0.000    0.005    0.000 {built-in method builtins.dir}
       14    0.004    0.000    0.005    0.000 <frozen importlib._bootstrap_external>:1190(_path_hooks)
       33    0.004    0.000    0.005    0.000 {built-in method io.open}
      106    0.001    0.000    0.005    0.000 <frozen importlib._bootstrap>:147(__enter__)
        1    0.000    0.000    0.005    0.005 cli.py:129(main)
      173    0.001    0.000    0.005    0.000 <frozen importlib._bootstrap>:403(cached)
      216    0.005    0.000    0.005    0.000 {built-in method __new__ of type object at 0xaab820}
       12    0.001    0.000    0.005    0.000 low_level.py:199(serialise)
       37    0.000    0.000    0.005    0.000 utils.py:97(verify_interface)
       84    0.000    0.000    0.005    0.000 <frozen importlib._bootstrap_external>:951(path_stats)
        1    0.000    0.000    0.004    0.004 string.py:15(<module>)
       90    0.001    0.000    0.004    0.000 <frozen importlib._bootstrap_external>:369(_get_cached)
       14    0.000    0.000    0.004    0.000 low_level.py:347(from_buffer)
     3099    0.004    0.000    0.004    0.000 {method 'match' of 're.Pattern' objects}
     5823    0.004    0.000    0.004    0.000 {built-in method builtins.isinstance}
       14    0.001    0.000    0.004    0.000 fnmatch.py:48(filter)
        7    0.001    0.000    0.004    0.001 enum.py:654(<listcomp>)
        1    0.000    0.000    0.004    0.004 modes.py:5(<module>)
       14    0.000    0.000    0.004    0.000 low_level.py:300(parse_header_fields)
       16    0.000    0.000    0.004    0.000 low_level.py:187(parse_data)
        1    0.000    0.000    0.004    0.004 string.py:65(__init__)
       70    0.001    0.000    0.004    0.000 low_level.py:139(parse_data)
      939    0.003    0.000    0.004    0.000 <frozen importlib._bootstrap_external>:58(<listcomp>)
        1    0.000    0.000    0.004    0.004 low_level.py:1(<module>)
       55    0.001    0.000    0.003    0.000 typing.py:600(__init__)
        2    0.000    0.000    0.003    0.002 util.py:157(add_match_rules)
      119    0.002    0.000    0.003    0.000 <frozen importlib._bootstrap>:157(_get_module_lock)
     1627    0.002    0.000    0.003    0.000 sre_parse.py:164(__getitem__)
        2    0.000    0.000    0.003    0.002 util.py:59(call)
     2635    0.003    0.000    0.003    0.000 sre_parse.py:233(__next)
       32    0.000    0.000    0.003    0.000 inspect.py:3081(signature)
       32    0.001    0.000    0.003    0.000 sre_compile.py:536(_compile_info)
       13    0.001    0.000    0.003    0.000 __init__.py:316(namedtuple)
       32    0.000    0.000    0.003    0.000 inspect.py:2829(from_callable)
     1300    0.003    0.000    0.003    0.000 {built-in method builtins.getattr}
       32    0.001    0.000    0.003    0.000 inspect.py:2198(_signature_from_callable)
        1    0.000    0.000    0.003    0.003 cli.py:41(run)
   297/99    0.002    0.000    0.003    0.000 sre_parse.py:174(getwidth)
       91    0.001    0.000    0.003    0.000 <frozen importlib._bootstrap_external>:1351(_get_spec)
       67    0.002    0.000    0.003    0.000 configparser.py:1237(__init__)
        1    0.000    0.000    0.003    0.003 optparse.py:1639(print_help)
        1    0.000    0.000    0.003    0.003 optparse.py:1627(format_help)
      169    0.001    0.000    0.003    0.000 enum.py:70(__setitem__)
       66    0.001    0.000    0.003    0.000 low_level.py:240(parse_data)
    29/27    0.000    0.000    0.002    0.000 typing.py:245(inner)
        1    0.000    0.000    0.002    0.002 Windows.py:1(<module>)
       14    0.000    0.000    0.002    0.000 <frozen importlib._bootstrap_external>:1404(_fill_cache)
       58    0.001    0.000    0.002    0.000 low_level.py:249(serialise)
       38    0.000    0.000    0.002    0.000 typing.py:1190(_alias)
       79    0.001    0.000    0.002    0.000 sre_compile.py:276(_optimize_charset)
      134    0.001    0.000    0.002    0.000 low_level.py:109(serialise)
     1313    0.002    0.000    0.002    0.000 {built-in method builtins.hasattr}
       13    0.000    0.000    0.002    0.000 <frozen importlib._bootstrap>:740(create_module)
     1438    0.002    0.000    0.002    0.000 {method 'join' of 'str' objects}
      102    0.001    0.000    0.002    0.000 <frozen importlib._bootstrap>:318(__exit__)
       32    0.001    0.000    0.002    0.000 inspect.py:2117(_signature_from_function)
        1    0.000    0.000    0.002    0.002 selectors.py:5(<module>)
     4462    0.002    0.000    0.002    0.000 {method 'append' of 'list' objects}
3925/3673    0.002    0.000    0.002    0.000 {built-in method builtins.len}
       14    0.002    0.000    0.002    0.000 {built-in method posix.listdir}
        1    0.000    0.000    0.002    0.002 optparse.py:1607(format_option_help)
      396    0.001    0.000    0.002    0.000 typing.py:701(__setattr__)
       13    0.002    0.000    0.002    0.000 {built-in method _imp.create_builtin}
       79    0.001    0.000    0.002    0.000 <frozen importlib._bootstrap_external>:438(_classify_pyc)
        3    0.000    0.000    0.002    0.001 gettext.py:639(gettext)
        3    0.000    0.000    0.002    0.001 gettext.py:600(dgettext)
        3    0.000    0.000    0.002    0.001 gettext.py:529(translation)
        1    0.000    0.000    0.002    0.002 cli.py:16(__init__)
        1    0.000    0.000    0.002    0.002 interfaces.py:5(<module>)
      671    0.001    0.000    0.002    0.000 {built-in method builtins.setattr}
        2    0.000    0.000    0.002    0.001 fnmatch.py:38(_compile_pattern)
        3    0.000    0.000    0.002    0.001 gettext.py:474(find)
       67    0.000    0.000    0.002    0.000 sre_parse.py:96(closegroup)
       25    0.001    0.000    0.002    0.000 configparser.py:1112(_join_multiline_values)
       91    0.001    0.000    0.002    0.000 <frozen importlib._bootstrap_external>:574(spec_from_file_location)
      204    0.001    0.000    0.002    0.000 low_level.py:67(serialise)
      106    0.000    0.000    0.002    0.000 <frozen importlib._bootstrap>:151(__exit__)
     2768    0.002    0.000    0.002    0.000 {method 'startswith' of 'str' objects}
        1    0.000    0.000    0.002    0.002 os.py:977(popen)
      214    0.001    0.000    0.002    0.000 low_level.py:61(parse_data)
      128    0.000    0.000    0.002    0.000 low_level.py:102(parse_data)
      980    0.002    0.000    0.002    0.000 <frozen importlib._bootstrap>:222(_verbose_message)
      206    0.001    0.000    0.002    0.000 enum.py:376(__setattr__)
       14    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:1445(path_hook_for_FileFinder)
        1    0.000    0.000    0.001    0.001 threading.py:1(<module>)
      119    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:103(release)
        1    0.000    0.000    0.001    0.001 subprocess.py:656(__init__)
       24    0.000    0.000    0.001    0.000 six.py:837(wrapper)
       12    0.001    0.000    0.001    0.000 enum.py:177(<setcomp>)
  178/146    0.001    0.000    0.001    0.000 low_level.py:261(parse_signature)
     2455    0.001    0.000    0.001    0.000 {method 'rstrip' of 'str' objects}
      119    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:78(acquire)
        1    0.000    0.000    0.001    0.001 subprocess.py:1383(_execute_child)
        1    0.000    0.000    0.001    0.001 optparse.py:1055(format_option_help)
        5    0.000    0.000    0.001    0.000 optparse.py:296(format_option)
       55    0.001    0.000    0.001    0.000 {built-in method _abc._abc_init}
        1    0.000    0.000    0.001    0.001 optparse.py:1178(__init__)
      173    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:62(_path_split)
        1    0.000    0.000    0.001    0.001 hashlib.py:54(<module>)
      107    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap>:719(find_spec)
      237    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:51(_r_long)
       67    0.001    0.000    0.001    0.000 sre_parse.py:84(opengroup)
      138    0.001    0.000    0.001    0.000 {built-in method builtins.any}
        1    0.000    0.000    0.001    0.001 algorithms.py:5(<module>)
        1    0.000    0.000    0.001    0.001 six.py:21(<module>)
      349    0.001    0.000    0.001    0.000 posixpath.py:41(_get_sep)
      587    0.001    0.000    0.001    0.000 sre_parse.py:249(match)
      106    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:176(cb)
      472    0.001    0.000    0.001    0.000 low_level.py:11(struct_code)
        1    0.000    0.000    0.001    0.001 types.py:1(<module>)
        1    0.000    0.000    0.001    0.001 optparse.py:1245(_populate_option_list)
        1    0.000    0.000    0.001    0.001 optparse.py:1235(_add_help_option)
       14    0.000    0.000    0.001    0.000 hashlib.py:116(__get_openssl_constructor)
       79    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:471(_validate_timestamp_pyc)
      791    0.001    0.000    0.001    0.000 {method 'rpartition' of 'str' objects}
        7    0.000    0.000    0.001    0.000 zipfile.py:193(is_zipfile)
      651    0.001    0.000    0.001    0.000 {built-in method posix.fspath}
       16    0.000    0.000    0.001    0.000 inspect.py:2872(__eq__)
       52    0.001    0.000    0.001    0.000 codecs.py:319(decode)
       19    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:98(_path_isdir)
      298    0.001    0.000    0.001    0.000 {method 'search' of 're.Pattern' objects}
        1    0.000    0.000    0.001    0.001 configparser.py:375(BasicInterpolation)
        5    0.000    0.000    0.001    0.000 optparse.py:995(add_option)
        1    0.000    0.000    0.001    0.001 bus.py:1(<module>)
      396    0.000    0.000    0.001    0.000 typing.py:587(_is_dunder)
      365    0.001    0.000    0.001    0.000 socket.py:86(<lambda>)
        5    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:956(_cache_bytecode)
        5    0.000    0.000    0.001    0.000 textwrap.py:368(wrap)
       32    0.000    0.000    0.001    0.000 enum.py:836(__and__)
        8    0.000    0.000    0.001    0.000 hashlib.py:73(__get_builtin_constructor)
        6    0.000    0.000    0.001    0.000 _collections_abc.py:742(__iter__)
      948    0.001    0.000    0.001    0.000 {method 'strip' of 'str' objects}
       14    0.001    0.000    0.001    0.000 {built-in method posix.scandir}
       18    0.001    0.000    0.001    0.000 functools.py:37(update_wrapper)
      297    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:859(__exit__)
      106    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:58(__init__)
        1    0.000    0.000    0.001    0.001 opcode.py:5(<module>)
        1    0.001    0.001    0.001    0.001 __init__.py:259(_reset_cache)
      249    0.001    0.000    0.001    0.000 sre_parse.py:111(__init__)
      6/4    0.000    0.000    0.001    0.000 typing.py:337(__getitem__)
      522    0.000    0.000    0.001    0.000 glob.py:82(<genexpr>)
       52    0.001    0.000    0.001    0.000 {method 'format' of 'str' objects}
       64    0.000    0.000    0.001    0.000 inspect.py:2467(__init__)
        1    0.000    0.000    0.001    0.001 configparser.py:521(LegacyInterpolation)
        5    0.000    0.000    0.001    0.000 optparse.py:564(__init__)
        5    0.000    0.000    0.001    0.000 textwrap.py:342(wrap)
       12    0.000    0.000    0.001    0.000 enum.py:474(_find_new_)
      475    0.001    0.000    0.001    0.000 sre_parse.py:172(append)
        5    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:536(_code_to_timestamp_pyc)
      110    0.000    0.000    0.001    0.000 sre_compile.py:423(_simple)
       31    0.000    0.000    0.001    0.000 enum.py:442(_get_mixins_)
        1    0.000    0.000    0.001    0.001 errors.py:1(<module>)
       28    0.000    0.000    0.001    0.000 posixpath.py:154(dirname)
       32    0.000    0.000    0.001    0.000 inspect.py:2858(_hash_basis)
      658    0.001    0.000    0.001    0.000 {method 'endswith' of 'str' objects}
      500    0.001    0.000    0.001    0.000 sre_parse.py:160(__len__)
      509    0.001    0.000    0.001    0.000 {built-in method builtins.min}
        4    0.000    0.000    0.001    0.000 typing.py:238(_tp_cache)
        5    0.000    0.000    0.001    0.000 configparser.py:1249(__getitem__)
        1    0.000    0.000    0.001    0.001 exceptions.py:5(<module>)
        1    0.000    0.000    0.001    0.001 optparse.py:1571(get_usage)
      363    0.000    0.000    0.001    0.000 socket.py:76(<lambda>)
      365    0.001    0.000    0.001    0.000 sre_parse.py:286(tell)
        5    0.000    0.000    0.001    0.000 typing.py:618(__getitem__)
      142    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap>:416(parent)
        1    0.000    0.000    0.001    0.001 typing.py:290(_SpecialForm)
      364    0.000    0.000    0.001    0.000 socket.py:81(<lambda>)
      366    0.000    0.000    0.001    0.000 socket.py:91(<lambda>)
      674    0.001    0.000    0.001    0.000 {method 'get' of 'dict' objects}
       12    0.000    0.000    0.001    0.000 enum.py:125(__prepare__)
        1    0.000    0.000    0.001    0.001 optparse.py:380(format_usage)
      294    0.001    0.000    0.001    0.000 {method 'group' of 're.Match' objects}
        5    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:961(set_data)
     10/5    0.000    0.000    0.001    0.000 configparser.py:764(get)
      297    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap>:855(__enter__)
        1    0.000    0.000    0.001    0.001 configparser.py:447(ExtendedInterpolation)
        1    0.000    0.000    0.001    0.001 configparser.py:1304(ConverterMapping)
     1531    0.001    0.000    0.001    0.000 {method 'isupper' of 'str' objects}
    50/30    0.000    0.000    0.001    0.000 sre_compile.py:461(_get_literal_prefix)
       14    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:1319(__init__)
       14    0.000    0.000    0.001    0.000 low_level.py:288(calc_msg_size)
       80    0.000    0.000    0.001    0.000 sre_parse.py:343(_escape)
      137    0.000    0.000    0.001    0.000 types.py:164(__get__)
       11    0.000    0.000    0.001    0.000 sre_compile.py:411(_mk_bitmap)
        1    0.001    0.001    0.001    0.001 {built-in method _posixsubprocess.fork_exec}
        6    0.000    0.000    0.001    0.000 gettext.py:211(_expand_lang)
      101    0.000    0.000    0.001    0.000 {method 'extend' of 'list' objects}
       79    0.000    0.000    0.001    0.000 sre_compile.py:249(_compile_charset)
       84    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:401(_check_name_wrapper)
      107    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:369(__init__)
      484    0.000    0.000    0.000    0.000 {method 'add' of 'set' objects}
      522    0.000    0.000    0.000    0.000 {built-in method _imp.release_lock}
       26    0.000    0.000    0.000    0.000 _bootlocale.py:33(getpreferredencoding)
       84    0.000    0.000    0.000    0.000 glob.py:145(has_magic)
       13    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:433(spec_from_loader)
        1    0.000    0.000    0.000    0.000 {built-in method posix.read}
      622    0.000    0.000    0.000    0.000 low_level.py:49(padding)
        1    0.000    0.000    0.000    0.000 wrappers.py:156(Properties)
        5    0.000    0.000    0.000    0.000 {built-in method marshal.dumps}
       51    0.000    0.000    0.000    0.000 abc.py:137(__instancecheck__)
       19    0.000    0.000    0.000    0.000 sre_parse.py:267(getuntil)
       27    0.000    0.000    0.000    0.000 posixpath.py:121(splitext)
        1    0.000    0.000    0.000    0.000 struct.py:3(<module>)
      238    0.000    0.000    0.000    0.000 {built-in method from_bytes}
        7    0.000    0.000    0.000    0.000 typing.py:630(copy_with)
       32    0.000    0.000    0.000    0.000 inspect.py:2750(__init__)
       50    0.000    0.000    0.000    0.000 configparser.py:617(<genexpr>)
      130    0.000    0.000    0.000    0.000 enum.py:526(__new__)
      284    0.000    0.000    0.000    0.000 {built-in method _struct.unpack}
       37    0.000    0.000    0.000    0.000 abc.py:130(register)
       28    0.000    0.000    0.000    0.000 posixpath.py:104(split)
       83    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:35(_new_module)
        3    0.000    0.000    0.000    0.000 __init__.py:73(CFUNCTYPE)
        1    0.000    0.000    0.000    0.000 core.py:147(load_config)
        4    0.000    0.000    0.000    0.000 typing.py:816(__class_getitem__)
       25    0.000    0.000    0.000    0.000 genericpath.py:16(exists)
        1    0.000    0.000    0.000    0.000 exceptions.py:1(<module>)
      169    0.000    0.000    0.000    0.000 enum.py:26(_is_dunder)
       10    0.000    0.000    0.000    0.000 typing.py:841(__init_subclass__)
      522    0.000    0.000    0.000    0.000 {built-in method _imp.acquire_lock}
       13    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:194(_lock_unlock_module)
        3    0.000    0.000    0.000    0.000 __init__.py:1930(getLogger)
        5    0.000    0.000    0.000    0.000 configparser.py:392(before_get)
       45    0.000    0.000    0.000    0.000 re.py:252(escape)
      2/1    0.000    0.000    0.000    0.000 platform_.py:53(_config_root_Linux)
       60    0.000    0.000    0.000    0.000 {built-in method _imp.is_builtin}
        1    0.000    0.000    0.000    0.000 _endian.py:1(<module>)
       16    0.000    0.000    0.000    0.000 {method 'sendall' of '_socket.socket' objects}
        1    0.000    0.000    0.000    0.000 bus_messages.py:4(<module>)
      169    0.000    0.000    0.000    0.000 enum.py:34(_is_sunder)
       37    0.000    0.000    0.000    0.000 {built-in method _abc._abc_register}
       94    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:792(find_spec)
       26    0.000    0.000    0.000    0.000 os.py:673(__getitem__)
       23    0.000    0.000    0.000    0.000 low_level.py:134(__init__)
      134    0.000    0.000    0.000    0.000 enum.py:18(_is_descriptor)
       60    0.000    0.000    0.000    0.000 typing.py:162(_collect_type_vars)
        2    0.000    0.000    0.000    0.000 __init__.py:332(__init__)
        5    0.000    0.000    0.000    0.000 typing.py:177(_subs_tvars)
       32    0.000    0.000    0.000    0.000 sre_parse.py:224(__init__)
        2    0.000    0.000    0.000    0.000 typing.py:741(__getitem__)
        3    0.000    0.000    0.000    0.000 __init__.py:1221(getLogger)
      102    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:311(__enter__)
        5    0.000    0.000    0.000    0.000 optparse.py:592(_set_opt_strings)
        5    0.000    0.000    0.000    0.000 textwrap.py:336(_split_chunks)
        3    0.000    0.000    0.000    0.000 tokenize.py:132(_all_string_prefixes)
       51    0.000    0.000    0.000    0.000 {built-in method _abc._abc_instancecheck}
       52    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
       12    0.000    0.000    0.000    0.000 wrappers.py:47(new_method_call)
      528    0.000    0.000    0.000    0.000 glob.py:152(_ishidden)
       40    0.000    0.000    0.000    0.000 abc.py:141(__subclasscheck__)
        1    0.000    0.000    0.000    0.000 os.py:1003(close)
        1    0.000    0.000    0.000    0.000 token.py:1(<module>)
        5    0.000    0.000    0.000    0.000 textwrap.py:233(_wrap_chunks)
       79    0.000    0.000    0.000    0.000 {built-in method _imp._fix_co_filename}
        1    0.000    0.000    0.000    0.000 credentials.py:1(<module>)
      198    0.000    0.000    0.000    0.000 sre_parse.py:81(groups)
       52    0.000    0.000    0.000    0.000 sre_parse.py:408(_uniq)
        1    0.000    0.000    0.000    0.000 collection.py:33(Collection)
        5    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:105(_write_atomic)
        1    0.000    0.000    0.000    0.000 __init__.py:513(__init__)
        2    0.000    0.000    0.000    0.000 typing.py:757(__getitem_inner__)
        6    0.000    0.000    0.000    0.000 locale.py:384(normalize)
        1    0.000    0.000    0.000    0.000 bz2.py:28(BZ2File)
        1    0.000    0.000    0.000    0.000 platform_.py:32(_check_old_config_root)
      239    0.000    0.000    0.000    0.000 {built-in method _thread.get_ident}
       29    0.000    0.000    0.000    0.000 posixpath.py:144(basename)
        1    0.000    0.000    0.000    0.000 os.py:40(_get_exports_list)
        1    0.000    0.000    0.000    0.000 fail.py:1(<module>)
      402    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:321(<genexpr>)
       85    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:884(__init__)
      245    0.000    0.000    0.000    0.000 {method 'pop' of 'list' objects}
       40    0.000    0.000    0.000    0.000 {built-in method _abc._abc_subclasscheck}
        1    0.000    0.000    0.000    0.000 _compression.py:1(<module>)
       14    0.000    0.000    0.000    0.000 __init__.py:139(_check_size)
       67    0.000    0.000    0.000    0.000 configparser.py:1356(__iter__)
       31    0.000    0.000    0.000    0.000 enum.py:453(_find_data_type)
      216    0.000    0.000    0.000    0.000 {built-in method _struct.pack}
       16    0.000    0.000    0.000    0.000 _collections_abc.py:657(get)
        1    0.000    0.000    0.000    0.000 item.py:24(Item)
       12    0.000    0.000    0.000    0.000 low_level.py:319(<listcomp>)
        3    0.000    0.000    0.000    0.000 __init__.py:481(PYFUNCTYPE)
       32    0.000    0.000    0.000    0.000 inspect.py:484(unwrap)
      219    0.000    0.000    0.000    0.000 {method 'find' of 'bytearray' objects}
        2    0.000    0.000    0.000    0.000 bus.py:51(get_bus)
       27    0.000    0.000    0.000    0.000 genericpath.py:117(_splitext)
       92    0.000    0.000    0.000    0.000 {built-in method builtins.issubclass}
        1    0.000    0.000    0.000    0.000 chainer.py:4(<module>)
       50    0.000    0.000    0.000    0.000 {method 'translate' of 'str' objects}
       14    0.000    0.000    0.000    0.000 routing.py:34(incoming)
        5    0.000    0.000    0.000    0.000 functools.py:479(decorating_function)
        2    0.000    0.000    0.000    0.000 bus.py:41(find_session_bus)
        1    0.000    0.000    0.000    0.000 typing.py:1449(IO)
      106    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:143(__init__)
      215    0.000    0.000    0.000    0.000 {built-in method _thread.allocate_lock}
        8    0.000    0.000    0.000    0.000 wrappers.py:166(get)
      116    0.000    0.000    0.000    0.000 sre_parse.py:168(__setitem__)
       29    0.000    0.000    0.000    0.000 typing.py:110(_type_check)
      206    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
      255    0.000    0.000    0.000    0.000 configparser.py:1017(<dictcomp>)
       26    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
       73    0.000    0.000    0.000    0.000 signal.py:10(<lambda>)
        1    0.000    0.000    0.000    0.000 enum.py:830(__or__)
        5    0.000    0.000    0.000    0.000 {built-in method posix.open}
        5    0.000    0.000    0.000    0.000 textwrap.py:160(_split)
       32    0.000    0.000    0.000    0.000 {built-in method _sre.compile}
        1    0.000    0.000    0.000    0.000 subprocess.py:985(wait)
       24    0.000    0.000    0.000    0.000 sre_compile.py:492(_get_charset_prefix)
      163    0.000    0.000    0.000    0.000 {method 'encode' of 'str' objects}
        1    0.000    0.000    0.000    0.000 token.py:78(<dictcomp>)
      102    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:307(__init__)
        8    0.000    0.000    0.000    0.000 {method 'sort' of 'list' objects}
        1    0.000    0.000    0.000    0.000 threading.py:1174(__init__)
       11    0.000    0.000    0.000    0.000 sre_compile.py:413(<listcomp>)
      145    0.000    0.000    0.000    0.000 {method 'rfind' of 'str' objects}
        1    0.000    0.000    0.000    0.000 subprocess.py:1592(_wait)
      142    0.000    0.000    0.000    0.000 {method 'decode' of 'bytes' objects}
        1    0.000    0.000    0.000    0.000 properties.py:1(<module>)
        3    0.000    0.000    0.000    0.000 locale.py:350(_replace_encoding)
       94    0.000    0.000    0.000    0.000 {built-in method _imp.is_frozen}
      107    0.000    0.000    0.000    0.000 sre_compile.py:65(_combine_flags)
        1    0.000    0.000    0.000    0.000 enum.py:793(_missing_)
       26    0.000    0.000    0.000    0.000 codecs.py:309(__init__)
        5    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:381(_calc_mode)
        1    0.000    0.000    0.000    0.000 auth.py:1(<module>)
        1    0.000    0.000    0.000    0.000 enum.py:800(_create_pseudo_member_)
        2    0.000    0.000    0.000    0.000 fnmatch.py:74(translate)
        1    0.000    0.000    0.000    0.000 typing.py:591(_GenericAlias)
        1    0.000    0.000    0.000    0.000 low_level.py:36(HeaderFields)
        5    0.000    0.000    0.000    0.000 configparser.py:405(_interpolate_some)
       12    0.000    0.000    0.000    0.000 {built-in method builtins.next}
        3    0.000    0.000    0.000    0.000 posixpath.py:232(expanduser)
       52    0.000    0.000    0.000    0.000 {method 'split' of 'str' objects}
        5    0.000    0.000    0.000    0.000 entrypoints.py:89(from_string)
        1    0.000    0.000    0.000    0.000 optparse.py:331(store_option_strings)
       64    0.000    0.000    0.000    0.000 sre_compile.py:595(isstring)
       27    0.000    0.000    0.000    0.000 {method 'update' of 'dict' objects}
        1    0.000    0.000    0.000    0.000 low_level.py:7(Endianness)
       25    0.000    0.000    0.000    0.000 configparser.py:980(__contains__)
        1    0.000    0.000    0.000    0.000 typing.py:1559(TextIO)
        2    0.000    0.000    0.000    0.000 wrappers.py:143(__getattr__)
       16    0.000    0.000    0.000    0.000 {built-in method builtins.sorted}
        1    0.000    0.000    0.000    0.000 interfaces.py:253(DERSerializationBackend)
        1    0.000    0.000    0.000    0.000 typing.py:1545(BinaryIO)
        5    0.000    0.000    0.000    0.000 {method 'split' of 're.Pattern' objects}
       96    0.000    0.000    0.000    0.000 inspect.py:2799(<genexpr>)
       26    0.000    0.000    0.000    0.000 os.py:751(encode)
        2    0.000    0.000    0.000    0.000 {built-in method _ctypes.POINTER}
        4    0.000    0.000    0.000    0.000 bus.py:22(get_connectable_addresses)
        1    0.000    0.000    0.000    0.000 enum.py:872(_decompose)
        1    0.000    0.000    0.000    0.000 __future__.py:48(<module>)
       96    0.000    0.000    0.000    0.000 inspect.py:2859(<genexpr>)
       80    0.000    0.000    0.000    0.000 {built-in method builtins.iter}
       12    0.000    0.000    0.000    0.000 wrappers.py:43(new_header)
       55    0.000    0.000    0.000    0.000 low_level.py:135(<genexpr>)
       27    0.000    0.000    0.000    0.000 entrypoints.py:109(__init__)
       34    0.000    0.000    0.000    0.000 sre_parse.py:295(_class_escape)
       32    0.000    0.000    0.000    0.000 sre_parse.py:903(fix_flags)
        6    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:1048(exec_module)
        1    0.000    0.000    0.000    0.000 entrypoints.py:67(EntryPoint)
        5    0.000    0.000    0.000    0.000 optparse.py:613(_set_attrs)
      126    0.000    0.000    0.000    0.000 enum.py:628(value)
      224    0.000    0.000    0.000    0.000 {method 'items' of 'collections.OrderedDict' objects}
        2    0.000    0.000    0.000    0.000 typing.py:1168(__class_getitem__)
      349    0.000    0.000    0.000    0.000 {built-in method builtins.ord}
       10    0.000    0.000    0.000    0.000 configparser.py:1136(_unify_values)
       80    0.000    0.000    0.000    0.000 {method 'join' of 'bytes' objects}
        1    0.000    0.000    0.000    0.000 typing.py:737(_VariadicGenericAlias)
        3    0.000    0.000    0.000    0.000 __init__.py:1272(_fixupParents)
      173    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:40(_relax_case)
        9    0.000    0.000    0.000    0.000 typing.py:530(__init__)
        8    0.000    0.000    0.000    0.000 backend.py:29(__init__)
        5    0.000    0.000    0.000    0.000 contextlib.py:237(helper)
       32    0.000    0.000    0.000    0.000 inspect.py:2862(<dictcomp>)
        1    0.000    0.000    0.000    0.000 optparse.py:1355(parse_args)
       12    0.000    0.000    0.000    0.000 routing.py:19(outgoing)
       88    0.000    0.000    0.000    0.000 six.py:141(__init__)
        4    0.000    0.000    0.000    0.000 __init__.py:1341(__init__)
        1    0.000    0.000    0.000    0.000 routing.py:1(<module>)
        1    0.000    0.000    0.000    0.000 fnmatch.py:11(<module>)
        2    0.000    0.000    0.000    0.000 blocking.py:79(_method_call)
       32    0.000    0.000    0.000    0.000 sre_parse.py:76(__init__)
        1    0.000    0.000    0.000    0.000 exceptions.py:10(_Reasons)
      214    0.000    0.000    0.000    0.000 {method 'start' of 're.Match' objects}
        1    0.000    0.000    0.000    0.000 __init__.py:1145(__init__)
       12    0.000    0.000    0.000    0.000 enum.py:335(__getattr__)
       26    0.000    0.000    0.000    0.000 low_level.py:324(__init__)
        5    0.000    0.000    0.000    0.000 textwrap.py:146(_munge_whitespace)
       15    0.000    0.000    0.000    0.000 posixpath.py:52(normcase)
       13    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:232(_requires_builtin_wrapper)
        4    0.000    0.000    0.000    0.000 bus.py:11(parse_addresses)
        1    0.000    0.000    0.000    0.000 __init__.py:813(__init__)
        5    0.000    0.000    0.000    0.000 __init__.py:1373(info)
       12    0.000    0.000    0.000    0.000 enum.py:152(<dictcomp>)
        2    0.000    0.000    0.000    0.000 {built-in method _ctypes.dlopen}
        2    0.000    0.000    0.000    0.000 socket.py:139(__init__)
       13    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:748(exec_module)
      257    0.000    0.000    0.000    0.000 hmac.py:17(<genexpr>)
        1    0.000    0.000    0.000    0.000 low_level.py:21(MessageType)
       92    0.000    0.000    0.000    0.000 {method 'pop' of 'dict' objects}
        9    0.000    0.000    0.000    0.000 typing.py:319(__hash__)
       14    0.000    0.000    0.000    0.000 low_level.py:302(<dictcomp>)
      126    0.000    0.000    0.000    0.000 typing.py:610(<genexpr>)
       96    0.000    0.000    0.000    0.000 abc.py:7(abstractmethod)
        2    0.000    0.000    0.000    0.000 bus_messages.py:20(Hello)
        3    0.000    0.000    0.000    0.000 __init__.py:43(normalize_encoding)
        2    0.000    0.000    0.000    0.000 {method 'connect' of '_socket.socket' objects}
      257    0.000    0.000    0.000    0.000 hmac.py:18(<genexpr>)
       15    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:46(_w_long)
       64    0.000    0.000    0.000    0.000 inspect.py:158(isfunction)
        2    0.000    0.000    0.000    0.000 auth.py:4(make_auth_external)
       12    0.000    0.000    0.000    0.000 enum.py:64(__init__)
      112    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:1325(<genexpr>)
        1    0.000    0.000    0.000    0.000 subprocess.py:1579(_try_wait)
      172    0.000    0.000    0.000    0.000 configparser.py:368(before_read)
       32    0.000    0.000    0.000    0.000 inspect.py:2579(__eq__)
        1    0.000    0.000    0.000    0.000 os.py:44(<listcomp>)
       10    0.000    0.000    0.000    0.000 util.py:40(__init__)
        2    0.000    0.000    0.000    0.000 bus_messages.py:160(serialise)
        2    0.000    0.000    0.000    0.000 auth.py:42(feed)
       25    0.000    0.000    0.000    0.000 {built-in method builtins.hash}
        1    0.000    0.000    0.000    0.000 threading.py:758(__init__)
       23    0.000    0.000    0.000    0.000 {built-in method _struct.calcsize}
        1    0.000    0.000    0.000    0.000 exceptions.py:8(<module>)
        8    0.000    0.000    0.000    0.000 wrappers.py:161(__init__)
        5    0.000    0.000    0.000    0.000 contextlib.py:81(__init__)
      159    0.000    0.000    0.000    0.000 {method 'isidentifier' of 'str' objects}
        1    0.000    0.000    0.000    0.000 optparse.py:372(__init__)
        1    0.000    0.000    0.000    0.000 optparse.py:1306(get_default_values)
       12    0.000    0.000    0.000    0.000 typing.py:348(<genexpr>)
       67    0.000    0.000    0.000    0.000 configparser.py:1184(converters)
        5    0.000    0.000    0.000    0.000 optparse.py:349(format_option_strings)
       50    0.000    0.000    0.000    0.000 {method 'items' of 'dict' objects}
        1    0.000    0.000    0.000    0.000 enum.py:890(<listcomp>)
       42    0.000    0.000    0.000    0.000 {method 'replace' of 'str' objects}
        1    0.000    0.000    0.000    0.000 typing.py:784(Generic)
        1    0.000    0.000    0.000    0.000 subprocess.py:608(Popen)
        1    0.000    0.000    0.000    0.000 configparser.py:1269(__iter__)
       74    0.000    0.000    0.000    0.000 sre_compile.py:453(_get_iscased)
      102    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:424(has_location)
        1    0.000    0.000    0.000    0.000 {method 'close' of '_io.TextIOWrapper' objects}
        1    0.000    0.000    0.000    0.000 {built-in method posix.waitpid}
        1    0.000    0.000    0.000    0.000 platform_.py:19(_data_root_Linux)
        5    0.000    0.000    0.000    0.000 __init__.py:1619(isEnabledFor)
        1    0.000    0.000    0.000    0.000 entrypoints.py:36(BadEntryPoint)
        1    0.000    0.000    0.000    0.000 opcode.py:37(<listcomp>)
       84    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:909(get_filename)
       12    0.000    0.000    0.000    0.000 blocking.py:27(result)
        8    0.000    0.000    0.000    0.000 typing.py:769(<genexpr>)
        4    0.000    0.000    0.000    0.000 typing.py:209(_remove_dups_flatten)
      100    0.000    0.000    0.000    0.000 enum.py:659(<lambda>)
       14    0.000    0.000    0.000    0.000 os.py:755(decode)
       25    0.000    0.000    0.000    0.000 blocking.py:18(done)
        9    0.000    0.000    0.000    0.000 errors.py:46(__exit__)
        1    0.000    0.000    0.000    0.000 optparse.py:206(__init__)
       24    0.000    0.000    0.000    0.000 tokenize.py:143(<listcomp>)
        1    0.000    0.000    0.000    0.000 backend.py:67(get_viable_backends)
        1    0.000    0.000    0.000    0.000 configparser.py:1272(_options)
        1    0.000    0.000    0.000    0.000 abc.py:1(<module>)
        5    0.000    0.000    0.000    0.000 contextlib.py:107(__enter__)
        1    0.000    0.000    0.000    0.000 OS_X.py:17(Keyring)
        1    0.000    0.000    0.000    0.000 threading.py:513(set)
        5    0.000    0.000    0.000    0.000 __init__.py:212(_acquireLock)
        4    0.000    0.000    0.000    0.000 sre_parse.py:843(_parse_flags)
      115    0.000    0.000    0.000    0.000 {built-in method builtins.callable}
        3    0.000    0.000    0.000    0.000 _collections_abc.py:664(__contains__)
        1    0.000    0.000    0.000    0.000 kwallet.py:19(DBusKeyring)
       32    0.000    0.000    0.000    0.000 inspect.py:504(_is_wrapper)
        1    0.000    0.000    0.000    0.000 typing.py:1348(__new__)
        1    0.000    0.000    0.000    0.000 contextlib.py:210(contextmanager)
       26    0.000    0.000    0.000    0.000 codecs.py:260(__init__)
       83    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:719(create_module)
       13    0.000    0.000    0.000    0.000 {built-in method builtins.repr}
       16    0.000    0.000    0.000    0.000 typing.py:661(__hash__)
        1    0.000    0.000    0.000    0.000 low_level.py:47(<dictcomp>)
        5    0.000    0.000    0.000    0.000 optparse.py:286(expand_default)
       64    0.000    0.000    0.000    0.000 {method 'values' of 'mappingproxy' objects}
       11    0.000    0.000    0.000    0.000 typing.py:626(<genexpr>)
        8    0.000    0.000    0.000    0.000 typing.py:824(<genexpr>)
       56    0.000    0.000    0.000    0.000 {method 'items' of 'mappingproxy' objects}
        1    0.000    0.000    0.000    0.000 subprocess.py:1526(_handle_exitstatus)
        1    0.000    0.000    0.000    0.000 zipfile.py:1146(ZipFile)
       11    0.000    0.000    0.000    0.000 {method 'translate' of 'bytearray' objects}
        1    0.000    0.000    0.000    0.000 errors.py:53(ExceptionInfo)
        1    0.000    0.000    0.000    0.000 configparser.py:669(options)
        1    0.000    0.000    0.000    0.000 threading.py:739(Thread)
       20    0.000    0.000    0.000    0.000 {method 'extend' of 'bytearray' objects}
      128    0.000    0.000    0.000    0.000 inspect.py:2529(kind)
        1    0.000    0.000    0.000    0.000 socket.py:133(socket)
       20    0.000    0.000    0.000    0.000 tokenize.py:107(group)
       13    0.000    0.000    0.000    0.000 functools.py:67(wraps)
        1    0.000    0.000    0.000    0.000 genericpath.py:27(isfile)
       44    0.000    0.000    0.000    0.000 six.py:105(__init__)
        1    0.000    0.000    0.000    0.000 {built-in method builtins.print}
        2    0.000    0.000    0.000    0.000 bus.py:5(unescape)
        1    0.000    0.000    0.000    0.000 __init__.py:4(once)
       10    0.000    0.000    0.000    0.000 __init__.py:908(__getitem__)
        5    0.000    0.000    0.000    0.000 contextlib.py:116(__exit__)
        1    0.000    0.000    0.000    0.000 chainer.py:20(priority)
       18    0.000    0.000    0.000    0.000 wrappers.py:26(__init__)
        9    0.000    0.000    0.000    0.000 errors.py:42(__enter__)
        6    0.000    0.000    0.000    0.000 sre_compile.py:432(_generate_overlap_table)
       51    0.000    0.000    0.000    0.000 six.py:177(_add_module)
        1    0.000    0.000    0.000    0.000 __about__.py:5(<module>)
       26    0.000    0.000    0.000    0.000 low_level.py:363(__init__)
       74    0.000    0.000    0.000    0.000 signal.py:17(<lambda>)
       26    0.000    0.000    0.000    0.000 configparser.py:662(has_section)
        1    0.000    0.000    0.000    0.000 inspect.py:2407(_ParameterKind)
        1    0.000    0.000    0.000    0.000 __init__.py:794(_addHandlerRef)
       75    0.000    0.000    0.000    0.000 signal.py:22(<lambda>)
        3    0.000    0.000    0.000    0.000 {built-in method posix.close}
       27    0.000    0.000    0.000    0.000 enum.py:198(<genexpr>)
        1    0.000    0.000    0.000    0.000 weakref.py:102(__init__)
        5    0.000    0.000    0.000    0.000 functools.py:445(lru_cache)
       10    0.000    0.000    0.000    0.000 __init__.py:898(__init__)
        1    0.000    0.000    0.000    0.000 threading.py:499(__init__)
        5    0.000    0.000    0.000    0.000 textwrap.py:115(__init__)
      132    0.000    0.000    0.000    0.000 six.py:88(__init__)
       64    0.000    0.000    0.000    0.000 inspect.py:2517(name)
      119    0.000    0.000    0.000    0.000 opcode.py:39(def_op)
        1    0.000    0.000    0.000    0.000 low_level.py:28(<dictcomp>)
        5    0.000    0.000    0.000    0.000 configparser.py:875(has_option)
        1    0.000    0.000    0.000    0.000 Windows.py:29(WinVaultKeyring)
        1    0.000    0.000    0.000    0.000 lzma.py:38(LZMAFile)
       55    0.000    0.000    0.000    0.000 {built-in method _sre.unicode_iscased}
       24    0.000    0.000    0.000    0.000 {method 'copy' of 'mappingproxy' objects}
        1    0.000    0.000    0.000    0.000 optparse.py:920(__init__)
        1    0.000    0.000    0.000    0.000 optparse.py:1550(expand_prog_name)
       26    0.000    0.000    0.000    0.000 {method 'find' of 'str' objects}
        1    0.000    0.000    0.000    0.000 core.py:20(set_keyring)
        1    0.000    0.000    0.000    0.000 chainer.py:28(backends)
       64    0.000    0.000    0.000    0.000 inspect.py:2835(parameters)
       76    0.000    0.000    0.000    0.000 __init__.py:388(<genexpr>)
       37    0.000    0.000    0.000    0.000 utils.py:45(register_interface)
        1    0.000    0.000    0.000    0.000 backend.py:38(KeyringBackend)
        1    0.000    0.000    0.000    0.000 __init__.py:842(createLock)
       22    0.000    0.000    0.000    0.000 {built-in method sys._getframe}
        8    0.000    0.000    0.000    0.000 {method 'setter' of 'property' objects}
        7    0.000    0.000    0.000    0.000 typing.py:196(_check_generic)
       12    0.000    0.000    0.000    0.000 low_level.py:165(__eq__)
        5    0.000    0.000    0.000    0.000 optparse.py:675(_check_dest)
       76    0.000    0.000    0.000    0.000 {method '__contains__' of 'frozenset' objects}
        1    0.000    0.000    0.000    0.000 subprocess.py:1329(_get_handles)
        1    0.000    0.000    0.000    0.000 configparser.py:296(ParsingError)
        5    0.000    0.000    0.000    0.000 optparse.py:583(_check_opt_strings)
        1    0.000    0.000    0.000    0.000 optparse.py:825(__init__)
        2    0.000    0.000    0.000    0.000 os.py:1076(__subclasshook__)
        5    0.000    0.000    0.000    0.000 entrypoints.py:68(__init__)
        1    0.000    0.000    0.000    0.000 threading.py:216(__init__)
       24    0.000    0.000    0.000    0.000 six.py:835(add_metaclass)
        9    0.000    0.000    0.000    0.000 utils.py:41(read_only_property)
        1    0.000    0.000    0.000    0.000 __init__.py:1326(Logger)
        1    0.000    0.000    0.000    0.000 optparse.py:1544(get_prog_name)
        2    0.000    0.000    0.000    0.000 {built-in method posix.pipe}
       15    0.000    0.000    0.000    0.000 {method 'to_bytes' of 'int' objects}
        2    0.000    0.000    0.000    0.000 blocking.py:72(__init__)
        1    0.000    0.000    0.000    0.000 threading.py:358(notify_all)
        1    0.000    0.000    0.000    0.000 __init__.py:1673(__init__)
        7    0.000    0.000    0.000    0.000 enum.py:360(__members__)
        1    0.000    0.000    0.000    0.000 interfaces.py:275(X509Backend)
        1    0.000    0.000    0.000    0.000 bus_messages.py:13(DBus)
        5    0.000    0.000    0.000    0.000 typing.py:297(__new__)
        1    0.000    0.000    0.000    0.000 threading.py:567(Barrier)
        5    0.000    0.000    0.000    0.000 __init__.py:221(_releaseLock)
        1    0.000    0.000    0.000    0.000 __init__.py:1684(LoggerAdapter)
        1    0.000    0.000    0.000    0.000 core.py:139(load_env)
        1    0.000    0.000    0.000    0.000 cli.py:15(CommandLineTool)
        1    0.000    0.000    0.000    0.000 algorithms.py:76(Blowfish)
        1    0.000    0.000    0.000    0.000 subprocess.py:850(__del__)
        1    0.000    0.000    0.000    0.000 threading.py:894(_set_tstate_lock)
        2    0.000    0.000    0.000    0.000 _weakrefset.py:36(__init__)
        6    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:1029(__init__)
       11    0.000    0.000    0.000    0.000 typing.py:542(<genexpr>)
        5    0.000    0.000    0.000    0.000 typing.py:677(__mro_entries__)
       12    0.000    0.000    0.000    0.000 blocking.py:24(set_result)
       14    0.000    0.000    0.000    0.000 glob.py:22(iglob)
        5    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:929(_sanity_check)
        2    0.000    0.000    0.000    0.000 {built-in method binascii.hexlify}
       32    0.000    0.000    0.000    0.000 {built-in method sys.getrecursionlimit}
        2    0.000    0.000    0.000    0.000 {method 'sub' of 're.Pattern' objects}
        1    0.000    0.000    0.000    0.000 SecretService.py:25(Keyring)
        1    0.000    0.000    0.000    0.000 selectors.py:442(EpollSelector)
        1    0.000    0.000    0.000    0.000 _compat.py:3(<module>)
        1    0.000    0.000    0.000    0.000 {built-in method posix.uname}
       13    0.000    0.000    0.000    0.000 {method 'setdefault' of 'dict' objects}
        9    0.000    0.000    0.000    0.000 errors.py:38(__init__)
        1    0.000    0.000    0.000    0.000 zipfile.py:1922(PyZipFile)
        1    0.000    0.000    0.000    0.000 __init__.py:281(LogRecord)
        5    0.000    0.000    0.000    0.000 textwrap.py:179(<listcomp>)
        1    0.000    0.000    0.000    0.000 _collections_abc.py:676(items)
       38    0.000    0.000    0.000    0.000 {method 'upper' of 'str' objects}
        1    0.000    0.000    0.000    0.000 {built-in method _hashlib.openssl_sha1}
        1    0.000    0.000    0.000    0.000 typing.py:1276(SupportsInt)
        2    0.000    0.000    0.000    0.000 auth.py:36(process_line)
       11    0.000    0.000    0.000    0.000 low_level.py:57(__init__)
        9    0.000    0.000    0.000    0.000 errors.py:54(__init__)
        1    0.000    0.000    0.000    0.000 threading.py:204(Condition)
        5    0.000    0.000    0.000    0.000 __init__.py:187(_checkLevel)
        5    0.000    0.000    0.000    0.000 __init__.py:727(__init__)
        5    0.000    0.000    0.000    0.000 optparse.py:968(_check_conflict)
        2    0.000    0.000    0.000    0.000 enum.py:907(_power_of_two)
       37    0.000    0.000    0.000    0.000 {built-in method builtins.id}
       12    0.000    0.000    0.000    0.000 {method 'mro' of 'type' objects}
        1    0.000    0.000    0.000    0.000 algorithms.py:119(IDEA)
       12    0.000    0.000    0.000    0.000 blocking.py:15(__init__)
       12    0.000    0.000    0.000    0.000 low_level.py:14(dbus_code)
        1    0.000    0.000    0.000    0.000 <string>:1(__new__)
        1    0.000    0.000    0.000    0.000 kwallet.py:134(priority)
        1    0.000    0.000    0.000    0.000 selectors.py:80(BaseSelector)
        1    0.000    0.000    0.000    0.000 chainer.py:10(ChainerBackend)
        1    0.000    0.000    0.000    0.000 {built-in method _hashlib.openssl_md5}
        5    0.000    0.000    0.000    0.000 optparse.py:632(_check_action)
        2    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:873(_find_spec_legacy)
        3    0.000    0.000    0.000    0.000 {built-in method posix.register_at_fork}
       13    0.000    0.000    0.000    0.000 {built-in method _imp.exec_builtin}
        1    0.000    0.000    0.000    0.000 six.py:91(__get__)
        1    0.000    0.000    0.000    0.000 threading.py:88(_RLock)
        1    0.000    0.000    0.000    0.000 threading.py:335(notify)
        1    0.000    0.000    0.000    0.000 __init__.py:804(Handler)
       15    0.000    0.000    0.000    0.000 enum.py:355(<genexpr>)
        7    0.000    0.000    0.000    0.000 {built-in method builtins.vars}
        1    0.000    0.000    0.000    0.000 {method 'update' of 'collections.OrderedDict' objects}
       38    0.000    0.000    0.000    0.000 {built-in method _ctypes.sizeof}
        1    0.000    0.000    0.000    0.000 modes.py:14(Mode)
        1    0.000    0.000    0.000    0.000 OS_X.py:23(priority)
        6    0.000    0.000    0.000    0.000 six.py:126(__init__)
       32    0.000    0.000    0.000    0.000 inspect.py:2839(return_annotation)
        1    0.000    0.000    0.000    0.000 bus_messages.py:16(__init__)
        7    0.000    0.000    0.000    0.000 typing.py:652(__eq__)
        2    0.000    0.000    0.000    0.000 _weakrefset.py:81(add)
        5    0.000    0.000    0.000    0.000 {method 'acquire' of '_thread.RLock' objects}
       38    0.000    0.000    0.000    0.000 {built-in method _sre.unicode_tolower}
        2    0.000    0.000    0.000    0.000 {method 'split' of 'bytes' objects}
        1    0.000    0.000    0.000    0.000 modes.py:85(CBC)
        1    0.000    0.000    0.000    0.000 algorithms.py:42(Camellia)
       10    0.000    0.000    0.000    0.000 __future__.py:81(__init__)
        1    0.000    0.000    0.000    0.000 low_level.py:94(StringType)
        9    0.000    0.000    0.000    0.000 errors.py:59(__bool__)
        1    0.000    0.000    0.000    0.000 credentials.py:7(Credential)
        1    0.000    0.000    0.000    0.000 optparse.py:1230(_create_option_list)
       25    0.000    0.000    0.000    0.000 {built-in method builtins.globals}
        5    0.000    0.000    0.000    0.000 {method 'expandtabs' of 'str' objects}
        1    0.000    0.000    0.000    0.000 interfaces.py:12(CipherBackend)
        1    0.000    0.000    0.000    0.000 interfaces.py:131(DSABackend)
        1    0.000    0.000    0.000    0.000 interfaces.py:183(EllipticCurveBackend)
        1    0.000    0.000    0.000    0.000 interfaces.py:334(DHBackend)
        1    0.000    0.000    0.000    0.000 inspect.py:2590(BoundArguments)
        1    0.000    0.000    0.000    0.000 fail.py:4(Keyring)
        1    0.000    0.000    0.000    0.000 subprocess.py:60(CalledProcessError)
        1    0.000    0.000    0.000    0.000 zipfile.py:773(ZipExtFile)
        1    0.000    0.000    0.000    0.000 zipfile.py:1071(_ZipWriteFile)
        1    0.000    0.000    0.000    0.000 configparser.py:1234(SectionProxy)
        1    0.000    0.000    0.000    0.000 {built-in method posix.WIFSIGNALED}
        6    0.000    0.000    0.000    0.000 {built-in method _imp.exec_dynamic}
        1    0.000    0.000    0.000    0.000 algorithms.py:26(AES)
        3    0.000    0.000    0.000    0.000 __init__.py:99(CFunctionType)
        1    0.000    0.000    0.000    0.000 util.py:32(DBusAddressWrapper)
        1    0.000    0.000    0.000    0.000 socket.py:546(SocketIO)
        1    0.000    0.000    0.000    0.000 zipfile.py:313(ZipInfo)
        1    0.000    0.000    0.000    0.000 __init__.py:1139(_StderrHandler)
        1    0.000    0.000    0.000    0.000 optparse.py:1264(set_usage)
        3    0.000    0.000    0.000    0.000 {method 'index' of 'str' objects}
       14    0.000    0.000    0.000    0.000 {method 'lower' of 'str' objects}
        1    0.000    0.000    0.000    0.000 Windows.py:141(OldPywinError)
        3    0.000    0.000    0.000    0.000 __init__.py:482(CFunctionType)
        1    0.000    0.000    0.000    0.000 blocking.py:34(DBusConnection)
        5    0.000    0.000    0.000    0.000 typing.py:276(__init_subclass__)
        1    0.000    0.000    0.000    0.000 typing.py:1088(_ProtocolMeta)
        1    0.000    0.000    0.000    0.000 errors.py:32(ExceptionRaisedContext)
        1    0.000    0.000    0.000    0.000 traceback.py:227(FrameSummary)
        1    0.000    0.000    0.000    0.000 __init__.py:722(Filterer)
        5    0.000    0.000    0.000    0.000 optparse.py:587(<listcomp>)
       11    0.000    0.000    0.000    0.000 {method 'reverse' of 'list' objects}
        1    0.000    0.000    0.000    0.000 interfaces.py:79(PBKDF2HMACBackend)
        1    0.000    0.000    0.000    0.000 interfaces.py:96(RSABackend)
        1    0.000    0.000    0.000    0.000 modes.py:186(GCM)
        1    0.000    0.000    0.000    0.000 algorithms.py:133(SEED)
        1    0.000    0.000    0.000    0.000 hmac.py:26(HMAC)
        1    0.000    0.000    0.000    0.000 typing.py:1284(SupportsFloat)
        1    0.000    0.000    0.000    0.000 selectors.py:60(_SelectorMapping)
        1    0.000    0.000    0.000    0.000 configparser.py:1189(ConfigParser)
        1    0.000    0.000    0.000    0.000 __init__.py:246(_register_at_fork_acquire_release)
        1    0.000    0.000    0.000    0.000 __init__.py:468(Formatter)
        5    0.000    0.000    0.000    0.000 optparse.py:638(_check_type)
        5    0.000    0.000    0.000    0.000 optparse.py:705(_check_callback)
        2    0.000    0.000    0.000    0.000 {built-in method posix.geteuid}
       13    0.000    0.000    0.000    0.000 {built-in method sys.intern}
        1    0.000    0.000    0.000    0.000 {method 'union' of 'set' objects}
        1    0.000    0.000    0.000    0.000 modes.py:128(OFB)
        1    0.000    0.000    0.000    0.000 Windows.py:47(priority)
        1    0.000    0.000    0.000    0.000 base.py:44(CipherContext)
        1    0.000    0.000    0.000    0.000 base.py:141(_CipherContext)
       12    0.000    0.000    0.000    0.000 opcode.py:43(name_op)
        2    0.000    0.000    0.000    0.000 routing.py:12(__init__)
        2    0.000    0.000    0.000    0.000 bus_messages.py:124(__init__)
        1    0.000    0.000    0.000    0.000 low_level.py:180(Array)
        2    0.000    0.000    0.000    0.000 kwallet.py:29(priority)
        1    0.000    0.000    0.000    0.000 subprocess.py:97(TimeoutExpired)
        1    0.000    0.000    0.000    0.000 _compression.py:33(DecompressReader)
       10    0.000    0.000    0.000    0.000 entrypoints.py:45(err_to_warnings)
        1    0.000    0.000    0.000    0.000 traceback.py:437(TracebackException)
        1    0.000    0.000    0.000    0.000 string.py:175(Formatter)
        5    0.000    0.000    0.000    0.000 optparse.py:662(_check_choice)
        5    0.000    0.000    0.000    0.000 optparse.py:696(_check_nargs)
        3    0.000    0.000    0.000    0.000 optparse.py:246(indent)
       11    0.000    0.000    0.000    0.000 enum.py:623(name)
        1    0.000    0.000    0.000    0.000 enum.py:855(_high_bit)
       13    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:765(is_package)
        2    0.000    0.000    0.000    0.000 {method 'startswith' of 'bytes' objects}
        1    0.000    0.000    0.000    0.000 six.py:475(Module_six_moves_urllib)
        1    0.000    0.000    0.000    0.000 modes.py:98(XTS)
        1    0.000    0.000    0.000    0.000 modes.py:141(CFB)
        1    0.000    0.000    0.000    0.000 algorithms.py:91(CAST5)
        1    0.000    0.000    0.000    0.000 algorithms.py:106(ARC4)
        1    0.000    0.000    0.000    0.000 algorithms.py:148(ChaCha20)
        1    0.000    0.000    0.000    0.000 __init__.py:311(CDLL)
        1    0.000    0.000    0.000    0.000 kwallet.py:126(DBusKeyringKWallet4)
        1    0.000    0.000    0.000    0.000 tokenize.py:108(any)
        1    0.000    0.000    0.000    0.000 string.py:78(Template)
        2    0.000    0.000    0.000    0.000 threading.py:75(RLock)
        1    0.000    0.000    0.000    0.000 backend.py:138(Crypter)
        2    0.000    0.000    0.000    0.000 __init__.py:1175(append)
        1    0.000    0.000    0.000    0.000 __init__.py:1605(getEffectiveLevel)
        5    0.000    0.000    0.000    0.000 optparse.py:690(_check_const)
        3    0.000    0.000    0.000    0.000 optparse.py:250(dedent)
        2    0.000    0.000    0.000    0.000 enum.py:354(__iter__)
        1    0.000    0.000    0.000    0.000 weakref.py:290(update)
        1    0.000    0.000    0.000    0.000 os.py:1016(__getattr__)
       15    0.000    0.000    0.000    0.000 {method 'isalnum' of 'str' objects}
        7    0.000    0.000    0.000    0.000 {method 'keys' of 'dict' objects}
        1    0.000    0.000    0.000    0.000 modes.py:154(CFB8)
        1    0.000    0.000    0.000    0.000 modes.py:167(CTR)
        1    0.000    0.000    0.000    0.000 inspect.py:2435(Parameter)
        1    0.000    0.000    0.000    0.000 inspect.py:2720(Signature)
        7    0.000    0.000    0.000    0.000 opcode.py:47(jrel_op)
        6    0.000    0.000    0.000    0.000 typing.py:173(<listcomp>)
        1    0.000    0.000    0.000    0.000 selectors.py:290(SelectSelector)
        1    0.000    0.000    0.000    0.000 credentials.py:20(SimpleCredential)
        1    0.000    0.000    0.000    0.000 traceback.py:315(StackSummary)
        1    0.000    0.000    0.000    0.000 threading.py:243(__exit__)
        2    0.000    0.000    0.000    0.000 optparse.py:353(<listcomp>)
        1    0.000    0.000    0.000    0.000 os.py:803(fsencode)
        1    0.000    0.000    0.000    0.000 _collections_abc.py:698(__init__)
        1    0.000    0.000    0.000    0.000 {built-in method posix.WEXITSTATUS}
        1    0.000    0.000    0.000    0.000 {built-in method builtins.all}
       10    0.000    0.000    0.000    0.000 {method '__init_subclass__' of 'object' objects}
        1    0.000    0.000    0.000    0.000 interfaces.py:64(CMACBackend)
        1    0.000    0.000    0.000    0.000 algorithms.py:57(TripleDES)
        2    0.000    0.000    0.000    0.000 __init__.py:350(_FuncPtr)
        1    0.000    0.000    0.000    0.000 base.py:20(CipherAlgorithm)
        1    0.000    0.000    0.000    0.000 six.py:114(_resolve)
        1    0.000    0.000    0.000    0.000 {built-in method _hashlib.openssl_sha224}
        1    0.000    0.000    0.000    0.000 typing.py:1308(SupportsAbs)
        1    0.000    0.000    0.000    0.000 typing.py:1316(SupportsRound)
        2    0.000    0.000    0.000    0.000 auth.py:31(__init__)
        3    0.000    0.000    0.000    0.000 low_level.py:184(__init__)
        1    0.000    0.000    0.000    0.000 low_level.py:323(Header)
        1    0.000    0.000    0.000    0.000 selectors.py:206(_BaseSelectorImpl)
        1    0.000    0.000    0.000    0.000 credentials.py:37(EnvironCredential)
        1    0.000    0.000    0.000    0.000 tokenize.py:94(TokenInfo)
        2    0.000    0.000    0.000    0.000 tokenize.py:109(maybe)
        1    0.000    0.000    0.000    0.000 threading.py:240(__enter__)
        1    0.000    0.000    0.000    0.000 configparser.py:956(__getitem__)
        1    0.000    0.000    0.000    0.000 __init__.py:1205(Manager)
        1    0.000    0.000    0.000    0.000 configparser.py:283(InterpolationDepthError)
        5    0.000    0.000    0.000    0.000 {method 'release' of '_thread.RLock' objects}
        2    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
        1    0.000    0.000    0.000    0.000 interfaces.py:33(HashBackend)
        1    0.000    0.000    0.000    0.000 interfaces.py:48(HMACBackend)
        1    0.000    0.000    0.000    0.000 interfaces.py:231(PEMSerializationBackend)
        1    0.000    0.000    0.000    0.000 base.py:164(_AEADCipherContext)
        1    0.000    0.000    0.000    0.000 six.py:80(_import_module)
        1    0.000    0.000    0.000    0.000 blocking.py:14(_Future)
        1    0.000    0.000    0.000    0.000 blocking.py:71(Proxy)
        1    0.000    0.000    0.000    0.000 bus_messages.py:114(MatchRule)
        5    0.000    0.000    0.000    0.000 typing.py:310(__init__)
        1    0.000    0.000    0.000    0.000 typing.py:483(TypeVar)
        1    0.000    0.000    0.000    0.000 low_level.py:398(Parser)
        1    0.000    0.000    0.000    0.000 selectors.py:341(_PollLikeSelector)
        1    0.000    0.000    0.000    0.000 exceptions.py:33(DBusException)
        1    0.000    0.000    0.000    0.000 _compression.py:9(BaseStream)
        1    0.000    0.000    0.000    0.000 zipfile.py:592(LZMACompressor)
        1    0.000    0.000    0.000    0.000 tokenize.py:217(Untokenizer)
        1    0.000    0.000    0.000    0.000 threading.py:255(_is_owned)
        1    0.000    0.000    0.000    0.000 threading.py:370(Semaphore)
        1    0.000    0.000    0.000    0.000 threading.py:488(Event)
        1    0.000    0.000    0.000    0.000 __init__.py:426(__init__)
        2    0.000    0.000    0.000    0.000 __init__.py:1169(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:1210(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:2059(NullHandler)
        1    0.000    0.000    0.000    0.000 optparse.py:1624(format_epilog)
        1    0.000    0.000    0.000    0.000 {method 'write' of '_io.TextIOWrapper' objects}
        2    0.000    0.000    0.000    0.000 {method 'acquire' of '_thread.lock' objects}
        1    0.000    0.000    0.000    0.000 {method 'copy' of 'collections.OrderedDict' objects}
        1    0.000    0.000    0.000    0.000 {method 'rfind' of 'bytes' objects}
        1    0.000    0.000    0.000    0.000 modes.py:30(ModeWithInitializationVector)
        1    0.000    0.000    0.000    0.000 base.py:228(_AEADEncryptionContext)
        2    0.000    0.000    0.000    0.000 six.py:184(find_module)
        1    0.000    0.000    0.000    0.000 __future__.py:80(_Feature)
        6    0.000    0.000    0.000    0.000 opcode.py:51(jabs_op)
        1    0.000    0.000    0.000    0.000 {built-in method _hashlib.openssl_sha256}
        1    0.000    0.000    0.000    0.000 {built-in method _hashlib.openssl_sha384}
        1    0.000    0.000    0.000    0.000 routing.py:4(Router)
        1    0.000    0.000    0.000    0.000 typing.py:435(ForwardRef)
        1    0.000    0.000    0.000    0.000 typing.py:1292(SupportsComplex)
        1    0.000    0.000    0.000    0.000 typing.py:1300(SupportsBytes)
        1    0.000    0.000    0.000    0.000 low_level.py:56(FixedType)
        3    0.000    0.000    0.000    0.000 low_level.py:95(__init__)
        1    0.000    0.000    0.000    0.000 low_level.py:237(Variant)
        1    0.000    0.000    0.000    0.000 low_level.py:357(Message)
        2    0.000    0.000    0.000    0.000 low_level.py:401(__init__)
        1    0.000    0.000    0.000    0.000 wrappers.py:17(DBusAddress)
        1    0.000    0.000    0.000    0.000 wrappers.py:125(__init__)
        1    0.000    0.000    0.000    0.000 selectors.py:433(PollSelector)
        1    0.000    0.000    0.000    0.000 zipfile.py:715(_SharedFile)
        1    0.000    0.000    0.000    0.000 zipfile.py:753(_Tellable)
        1    0.000    0.000    0.000    0.000 threading.py:891(_set_ident)
        1    0.000    0.000    0.000    0.000 __init__.py:643(BufferingFormatter)
        1    0.000    0.000    0.000    0.000 __init__.py:991(StreamHandler)
        1    0.000    0.000    0.000    0.000 __init__.py:1070(FileHandler)
        1    0.000    0.000    0.000    0.000 optparse.py:383(format_heading)
        1    0.000    0.000    0.000    0.000 optparse.py:931(_create_option_mappings)
        5    0.000    0.000    0.000    0.000 optparse.py:325(<listcomp>)
        2    0.000    0.000    0.000    0.000 optparse.py:355(<listcomp>)
        1    0.000    0.000    0.000    0.000 os.py:1000(__init__)
        4    0.000    0.000    0.000    0.000 {built-in method _sre.ascii_tolower}
        1    0.000    0.000    0.000    0.000 modes.py:39(ModeWithTweak)
        1    0.000    0.000    0.000    0.000 chainer.py:35(<genexpr>)
        1    0.000    0.000    0.000    0.000 __init__.py:151(py_object)
        1    0.000    0.000    0.000    0.000 __init__.py:379(PyDLL)
        2    0.000    0.000    0.000    0.000 __init__.py:420(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:419(LibraryLoader)
        1    0.000    0.000    0.000    0.000 _endian.py:23(_swapped_meta)
        1    0.000    0.000    0.000    0.000 base.py:35(BlockCipherAlgorithm)
        1    0.000    0.000    0.000    0.000 base.py:86(AEADEncryptionContext)
        1    0.000    0.000    0.000    0.000 base.py:96(Cipher)
        5    0.000    0.000    0.000    0.000 six.py:181(_get_module)
        1    0.000    0.000    0.000    0.000 {built-in method _hashlib.openssl_sha512}
        1    0.000    0.000    0.000    0.000 bus_messages.py:86(Monitoring)
        1    0.000    0.000    0.000    0.000 bus_messages.py:96(Stats)
        1    0.000    0.000    0.000    0.000 defines.py:8(<module>)
        1    0.000    0.000    0.000    0.000 typing.py:1589(io)
        1    0.000    0.000    0.000    0.000 auth.py:22(AuthenticationError)
        1    0.000    0.000    0.000    0.000 low_level.py:131(Struct)
        2    0.000    0.000    0.000    0.000 wrappers.py:140(__init__)
        1    0.000    0.000    0.000    0.000 wrappers.py:134(ProxyBase)
        1    0.000    0.000    0.000    0.000 subprocess.py:398(CompletedProcess)
        1    0.000    0.000    0.000    0.000 entrypoints.py:63(CaseSensitiveConfigParser)
        1    0.000    0.000    0.000    0.000 entrypoints.py:108(Distribution)
        1    0.000    0.000    0.000    0.000 threading.py:1142(Timer)
        1    0.000    0.000    0.000    0.000 threading.py:1191(_DummyThread)
        1    0.000    0.000    0.000    0.000 backend.py:23(KeyringBackendMeta)
        1    0.000    0.000    0.000    0.000 __init__.py:420(PercentStyle)
        1    0.000    0.000    0.000    0.000 __init__.py:444(StringTemplateStyle)
        1    0.000    0.000    0.000    0.000 configparser.py:359(Interpolation)
        1    0.000    0.000    0.000    0.000 sre_parse.py:288(seek)
        1    0.000    0.000    0.000    0.000 optparse.py:947(set_conflict_handler)
        1    0.000    0.000    0.000    0.000 optparse.py:1300(_get_all_options)
        1    0.000    0.000    0.000    0.000 configparser.py:167(Error)
        1    0.000    0.000    0.000    0.000 {built-in method _thread._set_sentinel}
        2    0.000    0.000    0.000    0.000 {method 'clear' of 'dict' objects}
        1    0.000    0.000    0.000    0.000 six.py:164(_SixMetaPathImporter)
        1    0.000    0.000    0.000    0.000 modes.py:48(ModeWithNonce)
        1    0.000    0.000    0.000    0.000 modes.py:57(ModeWithAuthenticationTag)
        1    0.000    0.000    0.000    0.000 _OS_X_API.py:13(error)
        1    0.000    0.000    0.000    0.000 __init__.py:251(c_wchar_p)
        1    0.000    0.000    0.000    0.000 _endian.py:46(BigEndianStructure)
        1    0.000    0.000    0.000    0.000 base.py:67(AEADCipherContext)
        1    0.000    0.000    0.000    0.000 base.py:76(AEADDecryptionContext)
        8    0.000    0.000    0.000    0.000 six.py:75(_add_doc)
        1    0.000    0.000    0.000    0.000 six.py:103(MovedModule)
        1    0.000    0.000    0.000    0.000 six.py:173(__init__)
        1    0.000    0.000    0.000    0.000 dis.py:461(Bytecode)
        1    0.000    0.000    0.000    0.000 bus_messages.py:8(DBusNameFlags)
        1    0.000    0.000    0.000    0.000 wrappers.py:178(Introspectable)
        1    0.000    0.000    0.000    0.000 wrappers.py:184(DBusErrorResponse)
        1    0.000    0.000    0.000    0.000 typing.py:271(_Final)
        1    0.000    0.000    0.000    0.000 typing.py:280(_Immutable)
        1    0.000    0.000    0.000    0.000 typing.py:314(__eq__)
        2    0.000    0.000    0.000    0.000 typing.py:827(<genexpr>)
        1    0.000    0.000    0.000    0.000 typing.py:1156(_Protocol)
        1    0.000    0.000    0.000    0.000 typing.py:1346(NamedTupleMeta)
        1    0.000    0.000    0.000    0.000 typing.py:1377(NamedTuple)
        1    0.000    0.000    0.000    0.000 typing.py:1604(re)
        1    0.000    0.000    0.000    0.000 auth.py:30(SASLParser)
        1    0.000    0.000    0.000    0.000 wrappers.py:38(DBusObject)
        1    0.000    0.000    0.000    0.000 exceptions.py:93(MissingErrorHandlerException)
        1    0.000    0.000    0.000    0.000 properties.py:6(ClassProperty)
        1    0.000    0.000    0.000    0.000 properties.py:32(NonDataProperty)
        1    0.000    0.000    0.000    0.000 entrypoints.py:53(NoSuchEntryPoint)
        1    0.000    0.000    0.000    0.000 zipfile.py:615(LZMADecompressor)
        1    0.000    0.000    0.000    0.000 shutil.py:58(SameFileError)
        1    0.000    0.000    0.000    0.000 tokenize.py:212(TokenError)
        1    0.000    0.000    0.000    0.000 string.py:55(_TemplateMetaclass)
        1    0.000    0.000    0.000    0.000 threading.py:450(BoundedSemaphore)
        1    0.000    0.000    0.000    0.000 threading.py:1172(_MainThread)
        1    0.000    0.000    0.000    0.000 configparser.py:1221(SafeConfigParser)
        1    0.000    0.000    0.000    0.000 __init__.py:435(StrFormatStyle)
        1    0.000    0.000    0.000    0.000 __init__.py:1163(PlaceHolder)
        1    0.000    0.000    0.000    0.000 configparser.py:180(NoSectionError)
        5    0.000    0.000    0.000    0.000 optparse.py:749(takes_value)
        1    0.000    0.000    0.000    0.000 optparse.py:952(set_description)
        1    0.000    0.000    0.000    0.000 optparse.py:1255(_init_parsing_state)
        1    0.000    0.000    0.000    0.000 optparse.py:1349(_get_args)
        1    0.000    0.000    0.000    0.000 optparse.py:231(set_parser)
        1    0.000    0.000    0.000    0.000 {built-in method time.time}
        1    0.000    0.000    0.000    0.000 {built-in method posix.WIFEXITED}
        1    0.000    0.000    0.000    0.000 {method '__exit__' of '_thread.lock' objects}
        1    0.000    0.000    0.000    0.000 {built-in method atexit.register}
        4    0.000    0.000    0.000    0.000 {built-in method _sre.ascii_iscased}
        1    0.000    0.000    0.000    0.000 {method 'index' of 'tuple' objects}
        1    0.000    0.000    0.000    0.000 {method 'values' of 'dict' objects}
        1    0.000    0.000    0.000    0.000 {method 'copy' of 'dict' objects}
        1    0.000    0.000    0.000    0.000 exceptions.py:25(UnsupportedAlgorithm)
        1    0.000    0.000    0.000    0.000 interfaces.py:389(ScryptBackend)
        1    0.000    0.000    0.000    0.000 modes.py:121(ECB)
        1    0.000    0.000    0.000    0.000 getpass.py:26(GetPassWarning)
        1    0.000    0.000    0.000    0.000 __init__.py:160(c_short)
        1    0.000    0.000    0.000    0.000 __init__.py:164(c_ushort)
        1    0.000    0.000    0.000    0.000 __init__.py:168(c_long)
        1    0.000    0.000    0.000    0.000 __init__.py:193(c_double)
        1    0.000    0.000    0.000    0.000 __init__.py:235(c_char_p)
        1    0.000    0.000    0.000    0.000 __init__.py:246(c_bool)
        1    0.000    0.000    0.000    0.000 __init__.py:256(c_wchar)
        1    0.000    0.000    0.000    0.000 utils.py:130(_ModuleWithDeprecations)
        1    0.000    0.000    0.000    0.000 socket.py:130(_GiveupOnSendfile)
        1    0.000    0.000    0.000    0.000 dhcrypto.py:35(Session)
        1    0.000    0.000    0.000    0.000 typing.py:879(_TypingEmpty)
        1    0.000    0.000    0.000    0.000 exceptions.py:107(ValidationException)
        1    0.000    0.000    0.000    0.000 exceptions.py:114(IntrospectionParserException)
        1    0.000    0.000    0.000    0.000 exceptions.py:121(UnknownMethodException)
        2    0.000    0.000    0.000    0.000 low_level.py:98(alignment)
        1    0.000    0.000    0.000    0.000 low_level.py:169(DictEntry)
        1    0.000    0.000    0.000    0.000 wrappers.py:120(MessageGenerator)
        1    0.000    0.000    0.000    0.000 subprocess.py:57(SubprocessError)
        1    0.000    0.000    0.000    0.000 subprocess.py:226(_cleanup)
        1    0.000    0.000    0.000    0.000 subprocess.py:1544(_internal_poll)
        1    0.000    0.000    0.000    0.000 errors.py:7(KeyringError)
        1    0.000    0.000    0.000    0.000 errors.py:22(InitError)
        1    0.000    0.000    0.000    0.000 zipfile.py:38(BadZipFile)
        1    0.000    0.000    0.000    0.000 zipfile.py:42(LargeZipFile)
        1    0.000    0.000    0.000    0.000 shutil.py:55(Error)
        1    0.000    0.000    0.000    0.000 tokenize.py:214(StopTokenizing)
        1    0.000    0.000    0.000    0.000 threading.py:721(BrokenBarrierError)
        1    0.000    0.000    0.000    0.000 backend.py:155(NullCrypter)
        1    0.000    0.000    0.000    0.000 __init__.py:685(Filter)
        1    0.000    0.000    0.000    0.000 __init__.py:1667(RootLogger)
        1    0.000    0.000    0.000    0.000 configparser.py:189(DuplicateSectionError)
        1    0.000    0.000    0.000    0.000 configparser.py:253(InterpolationError)
        1    0.000    0.000    0.000    0.000 configparser.py:263(InterpolationMissingOptionError)
        1    0.000    0.000    0.000    0.000 optparse.py:1394(check_values)
        1    0.000    0.000    0.000    0.000 optparse.py:1407(_process_args)
        2    0.000    0.000    0.000    0.000 enum.py:901(<lambda>)
        1    0.000    0.000    0.000    0.000 {method '__enter__' of '_thread.lock' objects}
        1    0.000    0.000    0.000    0.000 {built-in method builtins.delattr}
        1    0.000    0.000    0.000    0.000 {method 'bit_length' of 'int' objects}
        1    0.000    0.000    0.000    0.000 {method 'rstrip' of 'bytes' objects}
        1    0.000    0.000    0.000    0.000 six.py:229(_MovedItems)
        1    0.000    0.000    0.000    0.000 six.py:322(Module_six_moves_urllib_parse)
        1    0.000    0.000    0.000    0.000 six.py:364(Module_six_moves_urllib_error)
        1    0.000    0.000    0.000    0.000 six.py:384(Module_six_moves_urllib_request)
        1    0.000    0.000    0.000    0.000 exceptions.py:35(AlreadyUpdated)
        1    0.000    0.000    0.000    0.000 exceptions.py:39(NotYetFinalized)
        1    0.000    0.000    0.000    0.000 exceptions.py:43(InvalidTag)
        1    0.000    0.000    0.000    0.000 exceptions.py:47(InvalidSignature)
        1    0.000    0.000    0.000    0.000 exceptions.py:51(InternalError)
        1    0.000    0.000    0.000    0.000 __init__.py:172(c_ulong)
        1    0.000    0.000    0.000    0.000 __init__.py:181(c_int)
        1    0.000    0.000    0.000    0.000 __init__.py:185(c_uint)
        1    0.000    0.000    0.000    0.000 __init__.py:189(c_float)
        1    0.000    0.000    0.000    0.000 __init__.py:197(c_longdouble)
        1    0.000    0.000    0.000    0.000 __init__.py:218(c_ubyte)
        1    0.000    0.000    0.000    0.000 __init__.py:225(c_byte)
        1    0.000    0.000    0.000    0.000 __init__.py:230(c_char)
        1    0.000    0.000    0.000    0.000 __init__.py:241(c_void_p)
        1    0.000    0.000    0.000    0.000 exceptions.py:10(SecretStorageException)
        1    0.000    0.000    0.000    0.000 exceptions.py:13(SecretServiceNotAvailableException)
        1    0.000    0.000    0.000    0.000 exceptions.py:19(LockedException)
        1    0.000    0.000    0.000    0.000 exceptions.py:26(ItemNotFoundException)
        1    0.000    0.000    0.000    0.000 six.py:86(_LazyDescr)
        1    0.000    0.000    0.000    0.000 six.py:124(_LazyModule)
        1    0.000    0.000    0.000    0.000 six.py:139(MovedAttribute)
        1    0.000    0.000    0.000    0.000 utils.py:16(CryptographyDeprecationWarning)
        1    0.000    0.000    0.000    0.000 inspect.py:878(EndOfBlock)
        1    0.000    0.000    0.000    0.000 inspect.py:880(BlockFinder)
        1    0.000    0.000    0.000    0.000 inspect.py:2399(_void)
        1    0.000    0.000    0.000    0.000 dis.py:199(Instruction)
        1    0.000    0.000    0.000    0.000 typing.py:886(_TypingEllipsis)
        1    0.000    0.000    0.000    0.000 exceptions.py:100(MissingReplyHandlerException)
        1    0.000    0.000    0.000    0.000 exceptions.py:129(NameExistsException)
        1    0.000    0.000    0.000    0.000 low_level.py:4(SizeLimitError)
        1    0.000    0.000    0.000    0.000 shutil.py:65(ExecError)
        1    0.000    0.000    0.000    0.000 shutil.py:68(ReadError)
        1    0.000    0.000    0.000    0.000 shutil.py:71(RegistryError)
        1    0.000    0.000    0.000    0.000 errors.py:12(PasswordSetError)
        1    0.000    0.000    0.000    0.000 errors.py:17(PasswordDeleteError)
        1    0.000    0.000    0.000    0.000 errors.py:27(KeyringLocked)
        1    0.000    0.000    0.000    0.000 shutil.py:61(SpecialFileError)
        1    0.000    0.000    0.000    0.000 configparser.py:215(DuplicateOptionError)
        1    0.000    0.000    0.000    0.000 configparser.py:242(NoOptionError)
        1    0.000    0.000    0.000    0.000 configparser.py:275(InterpolationSyntaxError)
        1    0.000    0.000    0.000    0.000 configparser.py:339(MissingSectionHeaderError)
        1    0.000    0.000    0.000    0.000 optparse.py:279(format_epilog)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        1    0.000    0.000    0.000    0.000 {method 'keys' of 'collections.OrderedDict' objects}
        1    0.000    0.000    0.000    0.000 six.py:436(Module_six_moves_urllib_response)
        1    0.000    0.000    0.000    0.000 six.py:457(Module_six_moves_urllib_robotparser)
        1    0.000    0.000    0.000    0.000 exceptions.py:31(AlreadyFinalized)
        1    0.000    0.000    0.000    0.000 exceptions.py:57(InvalidKey)
        1    0.000    0.000    0.000    0.000 exceptions.py:41(PromptDismissedException)
        1    0.000    0.000    0.000    0.000 utils.py:87(InterfaceNotImplemented)
        1    0.000    0.000    0.000    0.000 utils.py:123(_DeprecatedValue)
        1    0.000    0.000    0.000    0.000 inspect.py:2403(_empty)
        1    0.000    0.000    0.000    0.000 platform_.py:41(<lambda>)

@jyn514
Copy link
Contributor Author

jyn514 commented Oct 10, 2019

Ok if I set PYTHON_KEYRING_BACKEND and make the following change it speeds things up by about a second:

diff --git a/keyring/core.py b/keyring/core.py
index 4ab00c1..7050487 100644
--- a/keyring/core.py
+++ b/keyring/core.py
@@ -87,13 +87,12 @@ def init_backend(limit=None):
     # save the limit for the chainer to honor
     backend._limit = limit
 
-    # get all keyrings passing the limit filter
-    keyrings = filter(limit, backend.get_all_keyring())
-
     set_keyring(
         load_env()
         or load_config()
-        or max(keyrings, default=fail.Keyring(), key=backend.by_priority)
+        # get all keyrings passing the limit filter
+        or max(filter(limit, backend.get_all_keyring()),
+               default=fail.Keyring(), key=backend.by_priority)
     )

@jyn514
Copy link
Contributor Author

jyn514 commented Oct 10, 2019

I think ideally I would want keyring to only load the backend it was going to use, as opposed to loading every backend and only then choosing which to use.

@mitya57
Copy link
Collaborator

mitya57 commented Oct 10, 2019

Can you please make a pull request with that change?

jyn514 added a commit to jyn514/keyring that referenced this issue Oct 17, 2019
If a keyring is set in configuration or environment variables,
use that one and don't load all available keyrings.

Partially addresses jaraco#403.
@jyn514
Copy link
Contributor Author

jyn514 commented Oct 17, 2019

I made a pull request for that change. The import time is still poor if the PYTHON_KEYRING_BACKEND environment variable is not set, which it will not be for most users of my project. Maybe there could be a way to see the priority of a keyring without having to fully initialize it, with lazy loading or something similar?

@jyn514
Copy link
Contributor Author

jyn514 commented Oct 17, 2019

It seems like there is a great deal of runtime reflection currently (entrypoints.get_group_all, entry_point.load). Perhaps a better approach would be to have a static list of the available backends in __init__.py - that wouldn't require classes to be fully loaded before seeing whether or not they will be used.

@jyn514
Copy link
Contributor Author

jyn514 commented Oct 17, 2019

Ah I think I see the issue - the classes themselves are checking at runtime to see if they are viable

@mitya57
Copy link
Collaborator

mitya57 commented Oct 17, 2019

Perhaps a better approach would be to have a static list of the available backends in __init__.py - that wouldn't require classes to be fully loaded before seeing whether or not they will be used.

We support also third-party backends, not only our own ones.

@jaraco
Copy link
Owner

jaraco commented Nov 30, 2019

The latest keyring (19.3) uses importlib.metadata instead of entrypoints. I'll be interested to know if that affects the performance (positively or negatively).

@jyn514
Copy link
Contributor Author

jyn514 commented Nov 30, 2019

With a cold cache, 19.3 takes 3883241 microseconds (best two out of three, other times were 4051557 and 4525618), or about 4 seconds. I used echo 3 | sudo tee /proc/sys/vm/drop_caches && python -c pass && python -X importtime -c 'import keyring' so keyring wouldn't be penalized for python's slow startup time.

With a warm cache, 19.3 takes 100266 (best 2/3, others were 104365 104852) microseconds to start up. I used python -c 'import keyring' && python -X importtime -c 'import keyring' to ensure a warm cache.

With a cold cache, 19.2 takes 3310792 (best 2/3, others were 4067318 and 3724380) to import.

With a warm cache, 19.2 takes 65521 (best 2/3, others were 71301 and 66863) to import.

So in short there was a minor slowdown from 19.2 to 19.3.

@jyn514
Copy link
Contributor Author

jyn514 commented Nov 30, 2019

I want to emphasize though that most of the slowdown is coming from importing the backends, not from the normal startup time for a pip package.

@kulpaj
Copy link

kulpaj commented Jan 4, 2020

I've noticed that import ttime improved significantly if all backends are viable (or at least SecretService is there). With only kwallet i had like 10-12s 'import' time. (keyring==18.0.1)

in core.py the line keyrings = filter(limit, backend.get_all_keyring())
is executed even if config file is present (which seems to be a clean way to set up a default backend), and config file seems to be more 'neat' solution than env variable.
//edit: ok, I see that it was corrected, nvm

adding a function to save the config files based on the: keyrings = filter(limit, backend.get_all_keyring()) call would be a nice addition

@jaraco
Copy link
Owner

jaraco commented Apr 30, 2020

Startup times on macOS are about 170ms. I'd expect something similar on Windows. Part of the challenge on Linux is all of the service interop with long or indefinite timeouts. I welcome efforts to improve that performance and also welcome lazy evaluation. I do agree it would be best if keyring didn't have behavior on import.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants