JNRowe / hubugs

Simple client for GitHub issues
https://hubugs.readthedocs.io/
GNU General Public License v3.0
6 stars 2 forks source link

Hubugs Speed #21

Closed sorin-ionescu closed 12 years ago

sorin-ionescu commented 12 years ago

As you have asked in #20, I have run curl to compare it with hubugs and also run cProfile on both commands. I have used an empty cache each time. It's about 1.5 seconds slower than curl in each case, which is not too bad. I suppose, most of my annoyance was when opening browser tabs.

hubugs -p robbyrussell/oh-my-zsh show 923  1.09s user 0.37s system 80% cpu 1.806 total
curl -I https://github.com/api/v2/json/repos/show/robbyrussell/oh-my-zsh  0.02s user 0.01s system 4% cpu 0.643 total

hubugs -p robbyrussell/oh-my-zsh list  1.44s user 0.39s system 32% cpu 5.702 total
curl https://github.com/api/v2/json/issues/list/robbyrussell/oh-my-zsh/open >  0.03s user 0.02s system 1% cpu 4.218 total
python -m cProfile $(which hubugs) -p robbyrussell/oh-my-zsh show 923

         244830 function calls (238158 primitive calls) in 5.598 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 <string>:1(ArgInfo)
        1    0.000    0.000    0.000    0.000 <string>:1(ArgSpec)
        1    0.000    0.000    0.000    0.000 <string>:1(Arguments)
        1    0.000    0.000    0.000    0.000 <string>:1(Attribute)
        1    0.000    0.000    0.000    0.000 <string>:1(ModuleInfo)
        1    0.000    0.000    0.000    0.000 <string>:1(ParseResult)
        1    0.000    0.000    0.000    0.000 <string>:1(SplitResult)
        1    0.000    0.000    0.000    0.000 <string>:1(Traceback)
        2    0.000    0.000    0.000    0.000 <string>:8(__new__)
        1    0.013    0.013    0.032    0.032 HTMLParser.py:1(<module>)
        2    0.000    0.000    0.000    0.000 HTMLParser.py:101(feed)
        1    0.000    0.000    0.000    0.000 HTMLParser.py:110(close)
        1    0.000    0.000    0.000    0.000 HTMLParser.py:126(clear_cdata_mode)
        3    0.000    0.000    0.000    0.000 HTMLParser.py:132(goahead)
        1    0.000    0.000    0.000    0.000 HTMLParser.py:227(parse_starttag)
        1    0.000    0.000    0.000    0.000 HTMLParser.py:278(check_for_whole_start_tag)
        1    0.000    0.000    0.000    0.000 HTMLParser.py:308(parse_endtag)
        1    0.000    0.000    0.000    0.000 HTMLParser.py:49(HTMLParseError)
        1    0.000    0.000    0.000    0.000 HTMLParser.py:67(HTMLParser)
        1    0.000    0.000    0.000    0.000 HTMLParser.py:90(__init__)
        1    0.000    0.000    0.000    0.000 HTMLParser.py:94(reset)
        8    0.000    0.000    0.000    0.000 StringIO.py:114(tell)
       18    0.000    0.000    0.000    0.000 StringIO.py:119(read)
        1    0.000    0.000    0.000    0.000 StringIO.py:30(<module>)
       36    0.000    0.000    0.000    0.000 StringIO.py:38(_complain_ifclosed)
        1    0.000    0.000    0.000    0.000 StringIO.py:42(StringIO)
        2    0.000    0.000    0.000    0.000 StringIO.py:54(__init__)
       10    0.000    0.000    0.000    0.000 StringIO.py:95(seek)
       60    0.000    0.000    0.000    0.000 UserDict.py:18(__getitem__)
        1    0.000    0.000    0.000    0.000 UserDict.py:4(__init__)
      109    0.000    0.000    0.001    0.000 UserDict.py:58(get)
      123    0.000    0.000    0.000    0.000 UserDict.py:70(__contains__)
        1    0.000    0.000    0.000    0.000 __future__.py:48(<module>)
        1    0.000    0.000    0.000    0.000 __future__.py:74(_Feature)
        7    0.000    0.000    0.000    0.000 __future__.py:75(__init__)
        5    0.122    0.024    0.198    0.040 __init__.py:1(<module>)
        5    0.008    0.002    0.088    0.018 __init__.py:10(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:1029(Http)
        2    0.000    0.000    0.000    0.000 __init__.py:1036(_fixupParents)
        3    0.000    0.000    0.000    0.000 __init__.py:104(CFunctionType)
        2    0.000    0.000    0.001    0.000 __init__.py:1042(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:1077(Logger)
        3    0.000    0.000    0.000    0.000 __init__.py:1092(__init__)
        1    0.018    0.018    0.018    0.018 __init__.py:11(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:1104(setLevel)
        2    0.000    0.000    1.403    0.702 __init__.py:1129(_conn_request)
        1    0.000    0.000    0.000    0.000 __init__.py:1134(warning)
        2    0.000    0.000    1.424    0.712 __init__.py:1188(_request)
        2    0.000    0.000    0.000    0.000 __init__.py:1257(_normalize_headers)
        1    0.000    0.000    0.000    0.000 __init__.py:1262(addHandler)
        2    0.000    0.000    1.639    0.820 __init__.py:1265(request)
        1    0.000    0.000    0.000    0.000 __init__.py:128(HttpLib2Error)
        3    0.000    0.000    0.000    0.000 __init__.py:1310(getEffectiveLevel)
        1    0.000    0.000    0.000    0.000 __init__.py:132(HttpLib2ErrorWithResponse)
        3    0.000    0.000    0.000    0.000 __init__.py:1324(isEnabledFor)
        1    0.000    0.000    0.000    0.000 __init__.py:1351(RootLogger)
        1    0.000    0.000    0.000    0.000 __init__.py:1357(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:1365(LoggerAdapter)
        1    0.000    0.000    0.000    0.000 __init__.py:138(RedirectMissingLocation)
        1    0.000    0.000    0.000    0.000 __init__.py:139(RedirectLimit)
        1    0.000    0.000    0.000    0.000 __init__.py:140(FailedToDecompressContent)
        2    0.000    0.000    0.000    0.000 __init__.py:140(__getattr__)
        2    0.000    0.000    0.431    0.216 __init__.py:140(show)
        1    0.000    0.000    0.000    0.000 __init__.py:141(UnimplementedDigestAuthOptionError)
        1    0.000    0.000    0.000    0.000 __init__.py:142(UnimplementedHmacDigestAuthOptionError)
        1    0.000    0.000    0.000    0.000 __init__.py:144(MalformedHeader)
        1    0.000    0.000    0.000    0.000 __init__.py:145(RelativeURIError)
        1    0.000    0.000    0.000    0.000 __init__.py:146(ServerNotFoundError)
        1    0.000    0.000    0.000    0.000 __init__.py:147(ProxiesUnavailableError)
       14    0.000    0.000    0.000    0.000 __init__.py:147(_check_size)
        1    0.000    0.000    0.000    0.000 __init__.py:1471(basicConfig)
        1    0.000    0.000    0.000    0.000 __init__.py:1477(Response)
        1    0.000    0.000    0.000    0.000 __init__.py:148(CertificateValidationUnsupported)
        1    0.000    0.000    0.000    0.000 __init__.py:149(SSLHandshakeError)
        2    0.000    0.000    0.000    0.000 __init__.py:1494(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:150(NotSupportedOnThisPlatform)
        1    0.000    0.000    0.000    0.000 __init__.py:151(CertificateHostnameMismatch)
        2    0.000    0.000    0.000    0.000 __init__.py:1531(getLogger)
        1    0.000    0.000    0.000    0.000 __init__.py:159(py_object)
        1    0.000    0.000    0.000    0.000 __init__.py:1649(NullHandler)
       20    0.000    0.000    0.000    0.000 __init__.py:166(make_wrapper)
        1    0.000    0.000    0.000    0.000 __init__.py:168(c_short)
        1    0.015    0.015    0.015    0.015 __init__.py:17(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:172(c_ushort)
        1    0.000    0.000    0.000    0.000 __init__.py:176(c_long)
        1    0.000    0.000    0.000    0.000 __init__.py:180(c_ulong)
        5    0.000    0.000    0.000    0.000 __init__.py:182(_checkLevel)
        1    0.000    0.000    0.000    0.000 __init__.py:189(c_int)
        1    0.000    0.000    0.000    0.000 __init__.py:193(c_uint)
        2    0.000    0.000    0.000    0.000 __init__.py:193(parse_uri)
        1    0.000    0.000    0.000    0.000 __init__.py:197(c_float)
        1    0.000    0.000    0.000    0.000 __init__.py:201(c_double)
        2    0.000    0.000    0.000    0.000 __init__.py:201(urlnorm)
        1    0.000    0.000    0.000    0.000 __init__.py:205(c_longdouble)
        1    0.000    0.000    0.000    0.000 __init__.py:206(_MarkupEscapeHelper)
        1    0.000    0.000    0.000    0.000 __init__.py:209(_automodule)
        5    0.000    0.000    0.000    0.000 __init__.py:210(_acquireLock)
        5    0.000    0.000    0.000    0.000 __init__.py:219(_releaseLock)
        1    0.000    0.000    0.000    0.000 __init__.py:22(Markup)
        4    0.000    0.000    0.105    0.026 __init__.py:221(safename)
        1    0.000    0.000    0.000    0.000 __init__.py:226(c_ubyte)
        1    0.000    0.000    0.000    0.000 __init__.py:230(LogRecord)
        1    0.000    0.000    0.000    0.000 __init__.py:233(c_byte)
        1    0.000    0.000    0.000    0.000 __init__.py:238(c_char)
        2    0.087    0.044    0.350    0.175 __init__.py:24(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:243(c_char_p)
        2    0.000    0.000    0.000    0.000 __init__.py:249(_normalize_headers)
        6    0.000    0.000    0.000    0.000 __init__.py:252(_parse_cache_control)
        1    0.000    0.000    0.000    0.000 __init__.py:255(c_void_p)
        1    0.000    0.000    0.000    0.000 __init__.py:260(c_bool)
        1    0.013    0.013    0.021    0.021 __init__.py:27(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:275(c_wchar_p)
        1    0.000    0.000    0.000    0.000 __init__.py:278(c_wchar)
        1    0.032    0.032    0.232    0.232 __init__.py:28(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:28(Terminal)
        2    0.000    0.000    0.000    0.000 __init__.py:281(loads)
        1    0.224    0.224    2.356    2.356 __init__.py:3(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:320(CDLL)
        1    0.000    0.000    0.000    0.000 __init__.py:322(derivative_colors)
        1    0.000    0.000    0.000    0.000 __init__.py:336(ParametrizingString)
        3    0.000    0.000    0.001    0.000 __init__.py:337(__init__)
        1    0.000    0.000    1.962    1.962 __init__.py:339(main)
        1    0.000    0.000    0.000    0.000 __init__.py:346(Formatter)
        3    0.000    0.000    0.000    0.000 __init__.py:347(_FuncPtr)
        4    0.000    0.000    0.000    0.000 __init__.py:363(__getattr__)
        4    0.000    0.000    0.000    0.000 __init__.py:370(__getitem__)
        1    0.000    0.000    0.000    0.000 __init__.py:376(PyDLL)
        1    0.000    0.000    0.000    0.000 __init__.py:378(FormattingString)
        2    0.000    0.000    0.001    0.001 __init__.py:379(_decompressContent)
        2    0.000    0.000    0.000    0.000 __init__.py:390(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:396(NullCallableString)
        2    0.000    0.000    0.020    0.010 __init__.py:397(_updateCache)
        1    0.033    0.033    0.034    0.034 __init__.py:4(<module>)
        2    0.000    0.000    0.000    0.000 __init__.py:404(__new__)
       10    0.000    0.000    0.000    0.000 __init__.py:408(__call__)
        1    0.000    0.000    0.000    0.000 __init__.py:416(LibraryLoader)
        2    0.000    0.000    0.000    0.000 __init__.py:417(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:432(Location)
        1    0.000    0.000    0.000    0.000 __init__.py:450(Authentication)
        1    0.000    0.000    0.000    0.000 __init__.py:48(__init__)
        3    0.000    0.000    0.000    0.000 __init__.py:483(PYFUNCTYPE)
        1    0.000    0.000    0.000    0.000 __init__.py:484(BasicAuthentication)
        3    0.000    0.000    0.000    0.000 __init__.py:484(CFunctionType)
       36    0.000    0.000    0.000    0.000 __init__.py:49(normalize_encoding)
        1    0.000    0.000    0.000    0.000 __init__.py:490(BufferingFormatter)
        1    0.000    0.000    0.000    0.000 __init__.py:494(DigestAuthentication)
        1    0.008    0.008    0.008    0.008 __init__.py:5(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:532(Filter)
        1    0.000    0.000    0.000    0.000 __init__.py:553(HmacDigestAuthentication)
        1    0.000    0.000    0.000    0.000 __init__.py:569(Filterer)
        4    0.000    0.000    0.000    0.000 __init__.py:574(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:6(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:615(WsseAuthentication)
        1    0.000    0.000    0.000    0.000 __init__.py:631(_addHandlerRef)
        1    0.000    0.000    0.000    0.000 __init__.py:639(GoogleLoginAuthentication)
        9    0.000    0.000    0.000    0.000 __init__.py:64(command)
        1    0.000    0.000    0.000    0.000 __init__.py:641(Handler)
        1    0.000    0.000    0.000    0.000 __init__.py:650(__init__)
        2    0.000    0.000    0.203    0.102 __init__.py:66(_ssl_wrap_socket)
        1    0.000    0.000    0.000    0.000 __init__.py:678(FileCache)
        1    0.000    0.000    0.000    0.000 __init__.py:679(createLock)
        2    0.000    0.000    0.001    0.000 __init__.py:683(__init__)
        2    0.000    0.000    0.105    0.052 __init__.py:689(get)
        2    0.001    0.000    0.001    0.001 __init__.py:700(set)
        5    0.000    0.000    0.149    0.030 __init__.py:71(search_function)
        1    0.000    0.000    0.000    0.000 __init__.py:711(Credentials)
        4    0.000    0.000    0.000    0.000 __init__.py:712(__init__)
        2    0.000    0.000    0.000    0.000 __init__.py:721(iter)
        1    0.000    0.000    0.000    0.000 __init__.py:726(KeyCerts)
        1    0.000    0.000    0.000    0.000 __init__.py:732(ProxyInfo)
        1    0.000    0.000    0.000    0.000 __init__.py:74(LazyImporter)
        1    0.000    0.000    0.000    0.000 __init__.py:749(setFormatter)
       19    0.000    0.000    0.000    0.000 __init__.py:75(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:750(HTTPConnectionWithTimeout)
        3    0.000    0.000    0.000    0.000 __init__.py:78(CFUNCTYPE)
        1    0.000    0.000    0.110    0.110 __init__.py:78(__getattr__)
        1    0.000    0.000    0.000    0.000 __init__.py:8(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:801(HTTPSConnectionWithTimeout)
        1    0.000    0.000    0.000    0.000 __init__.py:805(StreamHandler)
        2    0.000    0.000    0.000    0.000 __init__.py:810(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:812(__init__)
        2    0.000    0.000    0.000    0.000 __init__.py:843(_GetValidHostsForCert)
        2    0.000    0.000    0.001    0.000 __init__.py:858(_ValidateCertificateHostname)
        1    0.000    0.000    0.000    0.000 __init__.py:872(FileHandler)
        2    0.001    0.000    1.277    0.639 __init__.py:874(connect)
        1    0.000    0.000    0.000    0.000 __init__.py:9(<module>)
        1    0.000    0.000    0.000    0.000 __init__.py:932(PlaceHolder)
        1    0.000    0.000    0.000    0.000 __init__.py:938(__init__)
        2    0.000    0.000    0.000    0.000 __init__.py:96(has_timeout)
        1    0.000    0.000    0.000    0.000 __init__.py:979(Manager)
        1    0.000    0.000    0.000    0.000 __init__.py:984(__init__)
        1    0.022    0.022    0.088    0.088 __init__.py:99(<module>)
        2    0.000    0.000    0.000    0.000 __init__.py:994(getLogger)
        5    0.000    0.000    0.000    0.000 _abcoll.py:97(__subclasshook__)
        1    0.000    0.000    0.000    0.000 _endian.py:22(_swapped_meta)
        1    0.000    0.000    0.000    0.000 _endian.py:4(<module>)
        1    0.000    0.000    0.000    0.000 _endian.py:45(BigEndianStructure)
        2    0.031    0.016    0.079    0.040 _mapping.py:14(<module>)
        1    0.000    0.000    0.000    0.000 _native.py:10(<module>)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:172(AddrlistClass)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:182(__init__)
        7    0.000    0.000    0.000    0.000 _parseaddr.py:201(gotonext)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:211(getaddrlist)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:225(getaddress)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:284(getrouteaddr)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:316(getaddrspec)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:341(getdomain)
        5    0.000    0.000    0.000    0.000 _parseaddr.py:409(getatom)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:429(getphraselist)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:452(AddressList)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:454(__init__)
        1    0.000    0.000    0.000    0.000 _parseaddr.py:7(<module>)
        2    0.000    0.000    0.000    0.000 _version.py:4(<module>)
       13    0.000    0.000    0.000    0.000 _weakrefset.py:16(__init__)
       13    0.000    0.000    0.000    0.000 _weakrefset.py:20(__enter__)
       13    0.000    0.000    0.000    0.000 _weakrefset.py:26(__exit__)
       30    0.000    0.000    0.000    0.000 _weakrefset.py:36(__init__)
       13    0.000    0.000    0.000    0.000 _weakrefset.py:52(_commit_removals)
       29    0.000    0.000    0.000    0.000 _weakrefset.py:58(__iter__)
       14    0.000    0.000    0.000    0.000 _weakrefset.py:68(__contains__)
       23    0.000    0.000    0.000    0.000 _weakrefset.py:77(add)
       10    0.000    0.000    0.001    0.000 abc.py:105(register)
    13/10    0.000    0.000    0.001    0.000 abc.py:148(__subclasscheck__)
        6    0.000    0.000    0.001    0.000 abc.py:86(__new__)
        6    0.000    0.000    0.000    0.000 abc.py:89(<genexpr>)
        1    0.000    0.000    0.000    0.000 argparse.py:1022(_SubParsersAction)
        1    0.000    0.000    0.000    0.000 argparse.py:1024(_ChoicesPseudoAction)
        9    0.000    0.000    0.000    0.000 argparse.py:1026(__init__)
        1    0.000    0.000    0.000    0.000 argparse.py:1030(__init__)
        9    0.000    0.000    0.013    0.001 argparse.py:1051(add_parser)
        1    0.000    0.000    0.001    0.001 argparse.py:1070(__call__)
        1    0.000    0.000    0.000    0.000 argparse.py:1099(FileType)
        1    0.000    0.000    0.000    0.000 argparse.py:111(_AttributeHolder)
        1    0.000    0.000    0.000    0.000 argparse.py:1142(Namespace)
        1    0.000    0.000    0.000    0.000 argparse.py:1149(__init__)
        1    0.000    0.000    0.000    0.000 argparse.py:1165(_ActionsContainer)
       30    0.001    0.000    0.003    0.000 argparse.py:1167(__init__)
      340    0.001    0.000    0.001    0.000 argparse.py:1219(register)
       89    0.000    0.000    0.000    0.000 argparse.py:1223(_registry_get)
        9    0.000    0.000    0.000    0.000 argparse.py:1229(set_defaults)
       42    0.001    0.000    0.004    0.000 argparse.py:1248(add_argument)
       20    0.000    0.000    0.002    0.000 argparse.py:1288(add_argument_group)
       43    0.000    0.000    0.001    0.000 argparse.py:1298(_add_action)
       11    0.000    0.000    0.000    0.000 argparse.py:1362(_get_positional_kwargs)
       31    0.001    0.000    0.001    0.000 argparse.py:1378(_get_optional_kwargs)
       43    0.000    0.000    0.000    0.000 argparse.py:1413(_pop_action_class)
       30    0.000    0.000    0.000    0.000 argparse.py:1417(_get_handler)
       43    0.000    0.000    0.000    0.000 argparse.py:1426(_check_conflict)
        1    0.000    0.000    0.000    0.000 argparse.py:146(HelpFormatter)
        1    0.000    0.000    0.000    0.000 argparse.py:1462(_ArgumentGroup)
       20    0.000    0.000    0.002    0.000 argparse.py:1464(__init__)
       43    0.000    0.000    0.001    0.000 argparse.py:1485(_add_action)
        1    0.000    0.000    0.000    0.000 argparse.py:1495(_MutuallyExclusiveGroup)
        1    0.000    0.000    0.000    0.000 argparse.py:1515(ArgumentParser)
        1    0.000    0.000    0.001    0.001 argparse.py:153(__init__)
       10    0.000    0.000    0.016    0.002 argparse.py:1533(__init__)
        3    0.000    0.000    0.000    0.000 argparse.py:1579(identity)
        1    0.000    0.000    0.001    0.001 argparse.py:1626(add_subparsers)
       42    0.000    0.000    0.001    0.000 argparse.py:1657(_add_action)
        3    0.000    0.000    0.000    0.000 argparse.py:1669(_get_positional_actions)
        1    0.000    0.000    1.484    1.484 argparse.py:1677(parse_args)
      2/1    0.000    0.000    1.484    1.484 argparse.py:1684(parse_known_args)
      2/1    0.000    0.000    1.484    1.484 argparse.py:1719(_parse_known_args)
      3/2    0.000    0.000    1.483    0.741 argparse.py:1766(take_action)
        1    0.000    0.000    1.482    1.482 argparse.py:1787(consume_optional)
      2/1    0.000    0.000    0.002    0.002 argparse.py:1864(consume_positionals)
        1    0.000    0.000    0.000    0.000 argparse.py:194(_Section)
        1    0.000    0.000    0.000    0.000 argparse.py:196(__init__)
        1    0.000    0.000    0.000    0.000 argparse.py:1986(_match_argument)
        2    0.000    0.000    0.002    0.001 argparse.py:2005(_match_arguments_partial)
        1    0.000    0.000    0.000    0.000 argparse.py:202(format_help)
        5    0.000    0.000    0.000    0.000 argparse.py:2021(_parse_optional)
        3    0.000    0.000    0.000    0.000 argparse.py:2122(_get_nargs_pattern)
        3    0.000    0.000    0.000    0.000 argparse.py:2166(_get_values)
        4    0.000    0.000    0.000    0.000 argparse.py:2215(_get_value)
        3    0.000    0.000    0.000    0.000 argparse.py:2240(_check_value)
        1    0.000    0.000    0.000    0.000 argparse.py:227(_add_item)
        1    0.000    0.000    0.001    0.001 argparse.py:2289(_get_formatter)
        1    0.000    0.000    0.000    0.000 argparse.py:247(add_usage)
        1    0.000    0.000    0.000    0.000 argparse.py:277(format_help)
        2    0.000    0.000    0.000    0.000 argparse.py:284(_join_parts)
        2    0.000    0.000    0.000    0.000 argparse.py:289(_format_usage)
        1    0.001    0.001    0.001    0.001 argparse.py:62(<module>)
        1    0.000    0.000    0.000    0.000 argparse.py:626(RawDescriptionHelpFormatter)
        1    0.000    0.000    0.000    0.000 argparse.py:637(RawTextHelpFormatter)
        1    0.000    0.000    0.000    0.000 argparse.py:648(ArgumentDefaultsHelpFormatter)
        1    0.000    0.000    0.000    0.000 argparse.py:682(ArgumentError)
        1    0.000    0.000    0.000    0.000 argparse.py:702(ArgumentTypeError)
        1    0.000    0.000    0.000    0.000 argparse.py:711(Action)
       52    0.000    0.000    0.000    0.000 argparse.py:762(__init__)
        1    0.000    0.000    0.000    0.000 argparse.py:802(_StoreAction)
       19    0.000    0.000    0.000    0.000 argparse.py:804(__init__)
        1    0.000    0.000    0.000    0.000 argparse.py:833(__call__)
        1    0.000    0.000    0.000    0.000 argparse.py:837(_StoreConstAction)
        8    0.000    0.000    0.000    0.000 argparse.py:839(__init__)
        1    0.000    0.000    0.000    0.000 argparse.py:860(_StoreTrueAction)
        8    0.000    0.000    0.000    0.000 argparse.py:862(__init__)
        1    0.000    0.000    0.000    0.000 argparse.py:877(_StoreFalseAction)
        1    0.000    0.000    0.000    0.000 argparse.py:894(_AppendAction)
        3    0.000    0.000    0.000    0.000 argparse.py:896(__init__)
        1    0.000    0.000    0.000    0.000 argparse.py:931(_AppendConstAction)
       88    0.000    0.000    0.000    0.000 argparse.py:94(_callable)
        1    0.000    0.000    0.000    0.000 argparse.py:957(_CountAction)
        1    0.000    0.000    0.000    0.000 argparse.py:978(_HelpAction)
       10    0.000    0.000    0.000    0.000 argparse.py:980(__init__)
        1    0.000    0.000    0.000    0.000 argparse.py:997(_VersionAction)
        1    0.000    0.000    0.000    0.000 argparse.py:999(__init__)
        1    0.000    0.000    0.000    0.000 ascii.py:13(Codec)
        1    0.000    0.000    0.000    0.000 ascii.py:20(IncrementalEncoder)
        1    0.000    0.000    0.000    0.000 ascii.py:24(IncrementalDecoder)
        1    0.000    0.000    0.000    0.000 ascii.py:28(StreamWriter)
        1    0.000    0.000    0.000    0.000 ascii.py:31(StreamReader)
        1    0.000    0.000    0.000    0.000 ascii.py:34(StreamConverter)
        2    0.000    0.000    0.000    0.000 ascii.py:41(getregentry)
        1    0.000    0.000    0.000    0.000 ascii.py:8(<module>)
        2    0.000    0.000    0.000    0.000 atexit.py:37(register)
        1    0.000    0.000    0.000    0.000 atexit.py:6(<module>)
        1    0.001    0.001    0.001    0.001 base64.py:3(<module>)
        1    0.000    0.000    0.000    0.000 base64mime.py:25(<module>)
        1    0.001    0.001    0.020    0.020 bbcode.py:10(<module>)
        1    0.000    0.000    0.000    0.000 bbcode.py:19(BBCodeFormatter)
        1    0.000    0.000    0.000    0.000 bccache.py:114(BytecodeCache)
        1    0.032    0.032    0.032    0.032 bccache.py:16(<module>)
        1    0.000    0.000    0.000    0.000 bccache.py:192(FileSystemBytecodeCache)
        1    0.000    0.000    0.000    0.000 bccache.py:245(MemcachedBytecodeCache)
        1    0.000    0.000    0.000    0.000 bccache.py:62(Bucket)
        1    0.015    0.015    0.015    0.015 bisect.py:1(<module>)
        1    0.000    0.000    0.000    0.000 calendar.py:126(Calendar)
        1    0.000    0.000    0.000    0.000 calendar.py:132(__init__)
        1    0.000    0.000    0.000    0.000 calendar.py:138(setfirstweekday)
        1    0.000    0.000    0.000    0.000 calendar.py:21(IllegalMonthError)
        1    0.000    0.000    0.000    0.000 calendar.py:255(TextCalendar)
        1    0.000    0.000    0.000    0.000 calendar.py:28(IllegalWeekdayError)
        1    0.000    0.000    0.000    0.000 calendar.py:372(HTMLCalendar)
        1    0.000    0.000    0.000    0.000 calendar.py:47(_localized_month)
        1    0.000    0.000    0.000    0.000 calendar.py:484(TimeEncoding)
        1    0.000    0.000    0.000    0.000 calendar.py:496(LocaleTextCalendar)
        2    0.000    0.000    0.000    0.000 calendar.py:52(__init__)
        1    0.000    0.000    0.000    0.000 calendar.py:531(LocaleHTMLCalendar)
        1    0.001    0.001    0.001    0.001 calendar.py:6(<module>)
        1    0.000    0.000    0.000    0.000 calendar.py:66(_localized_day)
        2    0.000    0.000    0.000    0.000 calendar.py:71(__init__)
        1    0.000    0.000    0.000    0.000 charset.py:156(Charset)
        2    0.000    0.000    0.000    0.000 charset.py:200(__init__)
       30    0.000    0.000    0.000    0.000 charset.py:238(__str__)
       30    0.000    0.000    0.000    0.000 charset.py:243(__eq__)
       26    0.000    0.000    0.000    0.000 charset.py:246(__ne__)
       26    0.000    0.000    0.000    0.000 charset.py:277(to_splittable)
       26    0.000    0.000    0.000    0.000 charset.py:299(from_splittable)
       78    0.000    0.000    0.000    0.000 charset.py:324(get_output_charset)
       78    0.000    0.000    0.000    0.000 charset.py:332(encoded_header_len)
        1    0.022    0.022    0.025    0.025 charset.py:6(<module>)
        1    0.005    0.005    0.010    0.010 client.py:1(<module>)
        1    0.000    0.000    0.000    0.000 client.py:11(Github)
        2    0.000    0.000    0.002    0.001 client.py:13(__init__)
        5    0.000    0.000    0.000    0.000 codecs.py:77(__new__)
        1    0.047    0.047    0.087    0.087 collections.py:1(<module>)
        1    0.000    0.000    0.000    0.000 collections.py:20(_recursive_repr)
        8    0.009    0.001    0.011    0.001 collections.py:208(namedtuple)
      343    0.000    0.000    0.000    0.000 collections.py:248(<genexpr>)
       43    0.000    0.000    0.000    0.000 collections.py:265(<genexpr>)
        1    0.000    0.000    0.000    0.000 collections.py:326(Counter)
        1    0.000    0.000    0.000    0.000 collections.py:46(OrderedDict)
        1    0.000    0.000    0.000    0.000 commands.py:20(<module>)
        1    0.000    0.000    0.000    0.000 commits.py:1(<module>)
        1    0.000    0.000    0.000    0.000 commits.py:27(Commits)
        1    0.000    0.000    0.000    0.000 commits.py:5(Commit)
        1    0.001    0.001    0.001    0.001 compiler.py:10(<module>)
        1    0.000    0.000    0.000    0.000 compiler.py:103(Identifiers)
        1    0.000    0.000    0.004    0.004 compiler.py:1037(visit_For)
        6    0.000    0.000    0.000    0.000 compiler.py:106(__init__)
        5    0.000    0.000    0.005    0.001 compiler.py:1162(visit_If)
       10    0.001    0.000    0.005    0.000 compiler.py:1212(visit_Output)
        1    0.000    0.000    0.000    0.000 compiler.py:125(add_special)
       40    0.000    0.000    0.000    0.000 compiler.py:130(is_declared)
        2    0.000    0.000    0.000    0.000 compiler.py:1335(visit_Assign)
        6    0.000    0.000    0.005    0.001 compiler.py:136(copy)
       42    0.000    0.000    0.000    0.000 compiler.py:1374(visit_Name)
       16    0.000    0.000    0.000    0.000 compiler.py:1380(visit_Const)
        1    0.000    0.000    0.000    0.000 compiler.py:140(Frame)
        9    0.000    0.000    0.000    0.000 compiler.py:1421(binop)
        1    0.000    0.000    0.000    0.000 compiler.py:1422(visitor)
        6    0.000    0.000    0.000    0.000 compiler.py:143(__init__)
        3    0.000    0.000    0.000    0.000 compiler.py:1437(uaop)
        1    0.000    0.000    0.000    0.000 compiler.py:1477(visit_Compare)
        1    0.000    0.000    0.000    0.000 compiler.py:1482(visit_Operand)
       21    0.000    0.000    0.001    0.000 compiler.py:1486(visit_Getattr)
    25/23    0.000    0.000    0.002    0.000 compiler.py:1515(visit_Filter)
        7    0.000    0.000    0.000    0.000 compiler.py:186(copy)
        6    0.000    0.000    0.009    0.002 compiler.py:194(inspect)
        1    0.000    0.000    0.000    0.000 compiler.py:203(find_shadowed)
        1    0.000    0.000    0.000    0.000 compiler.py:210(<genexpr>)
        1    0.000    0.000    0.000    0.000 compiler.py:212(inner)
        5    0.000    0.000    0.000    0.000 compiler.py:216(soft)
        1    0.000    0.000    0.000    0.000 compiler.py:228(VisitorExit)
        1    0.000    0.000    0.000    0.000 compiler.py:232(DependencyFinderVisitor)
        5    0.000    0.000    0.000    0.000 compiler.py:235(__init__)
    25/23    0.000    0.000    0.002    0.000 compiler.py:239(visit_Filter)
        4    0.000    0.000    0.000    0.000 compiler.py:247(visit_Block)
        1    0.000    0.000    0.000    0.000 compiler.py:251(UndeclaredNameVisitor)
        7    0.000    0.000    0.000    0.000 compiler.py:257(__init__)
       44    0.000    0.000    0.000    0.000 compiler.py:261(visit_Name)
        4    0.000    0.000    0.000    0.000 compiler.py:269(visit_Block)
        1    0.000    0.000    0.000    0.000 compiler.py:273(FrameIdentifierVisitor)
        6    0.000    0.000    0.000    0.000 compiler.py:276(__init__)
       42    0.000    0.000    0.000    0.000 compiler.py:279(visit_Name)
        5    0.000    0.000    0.006    0.001 compiler.py:289(visit_If)
       10    0.000    0.000    0.006    0.001 compiler.py:296(inner_visit)
        2    0.000    0.000    0.000    0.000 compiler.py:335(visit_Assign)
        1    0.000    0.000    0.000    0.000 compiler.py:340(visit_For)
        4    0.000    0.000    0.000    0.000 compiler.py:355(visit_Block)
        1    0.000    0.000    0.000    0.000 compiler.py:359(CompilerExit)
        1    0.000    0.000    0.000    0.000 compiler.py:366(CodeGenerator)
        1    0.000    0.000    0.000    0.000 compiler.py:368(__init__)
        6    0.000    0.000    0.000    0.000 compiler.py:427(temporary_identifier)
       19    0.000    0.000    0.000    0.000 compiler.py:453(indent)
       19    0.000    0.000    0.000    0.000 compiler.py:457(outdent)
        4    0.000    0.000    0.000    0.000 compiler.py:461(start_write)
        4    0.000    0.000    0.000    0.000 compiler.py:468(end_write)
        4    0.000    0.000    0.000    0.000 compiler.py:473(simple_write)
     12/5    0.000    0.000    0.009    0.002 compiler.py:479(blockvisit)
        1    0.000    0.000    0.000    0.000 compiler.py:49(unoptimize_before_dead_code)
      298    0.001    0.000    0.002    0.000 compiler.py:494(write)
       78    0.000    0.000    0.001    0.000 compiler.py:509(writeline)
      106    0.000    0.000    0.000    0.000 compiler.py:514(newline)
       25    0.000    0.000    0.001    0.000 compiler.py:521(signature)
       25    0.000    0.000    0.000    0.000 compiler.py:531(<genexpr>)
        1    0.000    0.000    0.038    0.038 compiler.py:57(generate)
        6    0.000    0.000    0.000    0.000 compiler.py:574(pull_locals)
        5    0.000    0.000    0.005    0.001 compiler.py:579(pull_dependencies)
        1    0.000    0.000    0.000    0.000 compiler.py:604(push_scope)
        1    0.000    0.000    0.000    0.000 compiler.py:626(pop_scope)
        1    0.000    0.000    0.038    0.038 compiler.py:759(visit_Template)
        5    0.000    0.000    0.000    0.000 compiler.py:850(<genexpr>)
       30    0.000    0.000    0.000    0.000 compiler.py:855(<genexpr>)
        4    0.000    0.000    0.000    0.000 compiler.py:858(visit_Block)
        7    0.000    0.000    0.005    0.001 compiler.py:90(find_undeclared)
        1    0.000    0.000    0.000    0.000 completion.py:19(<module>)
        1    0.000    0.000    0.000    0.000 completion.py:29(autocomplete)
        1    0.000    0.000    0.000    0.000 console.py:10(<module>)
        1    0.000    0.000    0.000    0.000 constants.py:17(<module>)
    157/6    0.001    0.000    0.005    0.001 copy.py:145(deepcopy)
       49    0.000    0.000    0.000    0.000 copy.py:198(_deepcopy_atomic)
       30    0.000    0.000    0.000    0.000 copy.py:226(_deepcopy_list)
       36    0.001    0.000    0.002    0.000 copy.py:234(_deepcopy_tuple)
        6    0.000    0.000    0.004    0.001 copy.py:253(_deepcopy_dict)
      157    0.000    0.000    0.001    0.000 copy.py:267(_keep_alive)
     36/6    0.000    0.000    0.004    0.001 copy.py:306(_reconstruct)
        6    0.000    0.000    0.000    0.000 copy_reg.py:92(__newobj__)
        1    0.000    0.000    0.000    0.000 copy_reg.py:95(_slotnames)
        1    0.036    0.036    0.065    0.065 core.py:1(<module>)
        1    0.000    0.000    0.000    0.000 core.py:120(enhanced_by_auth)
        1    0.000    0.000    0.000    0.000 core.py:133(GithubCommand)
       14    0.000    0.000    0.000    0.000 core.py:135(__init__)
        2    0.000    0.000    1.646    0.823 core.py:138(make_request)
        2    0.000    0.000    1.650    0.825 core.py:160(get_value)
       10    0.000    0.000    0.000    0.000 core.py:188(doc_generator)
      108    0.000    0.000    0.000    0.000 core.py:196(bullet)
        1    0.000    0.000    0.000    0.000 core.py:204(Attribute)
      108    0.000    0.000    0.000    0.000 core.py:206(__init__)
       25    0.000    0.000    0.000    0.000 core.py:209(to_python)
        1    0.000    0.000    0.000    0.000 core.py:215(DateAttribute)
       16    0.000    0.000    0.000    0.000 core.py:224(__init__)
        4    0.000    0.000    0.003    0.001 core.py:228(to_python)
        1    0.000    0.000    0.000    0.000 core.py:239(BaseDataType)
       10    0.001    0.000    0.002    0.000 core.py:241(__new__)
       20    0.000    0.000    0.000    0.000 core.py:252(_contribute_method)
        2    0.000    0.000    0.003    0.002 core.py:256(constructor)
        4    0.000    0.000    0.003    0.001 core.py:27(string_to_datetime)
        1    0.000    0.000    0.000    0.000 core.py:277(BaseData)
        2    0.000    0.000    0.000    0.000 core.py:38(_handle_naive_datetimes)
        1    0.000    0.000    0.000    0.000 core.py:94(AuthError)
       23    0.000    0.000    0.000    0.000 core.py:98(requires_auth)
        1    0.000    0.000    0.011    0.011 decoder.py:17(_floatconstants)
        1    0.030    0.030    0.064    0.064 decoder.py:2(<module>)
        1    0.000    0.000    0.000    0.000 decoder.py:268(JSONDecoder)
        1    0.000    0.000    0.000    0.000 decoder.py:298(__init__)
        2    0.000    0.000    0.000    0.000 decoder.py:355(decode)
        2    0.000    0.000    0.000    0.000 decoder.py:366(raw_decode)
       30    0.000    0.000    0.000    0.000 decorators.py:112(wrapper)
        2    0.000    0.000    0.000    0.000 decorators.py:15(alias)
        2    0.000    0.000    0.000    0.000 decorators.py:26(wrapper)
        1    0.013    0.013    0.171    0.171 decorators.py:5(<module>)
       14    0.000    0.000    0.000    0.000 decorators.py:71(arg)
        1    0.041    0.041    0.059    0.059 defaults.py:10(<module>)
       14    0.000    0.000    0.000    0.000 defaults.py:40(<genexpr>)
        1    0.000    0.000    0.000    0.000 dep_util.py:5(<module>)
        1    0.034    0.034    0.034    0.034 dis.py:1(<module>)
       28    0.000    0.000    0.001    0.000 dyld.py:103(dyld_default_search)
        4    0.000    0.000    0.059    0.015 dyld.py:125(dyld_find)
        8    0.000    0.000    0.000    0.000 dyld.py:34(ensure_utf8)
       10    0.000    0.000    0.000    0.000 dyld.py:40(dyld_env)
        4    0.000    0.000    0.000    0.000 dyld.py:48(dyld_image_suffix)
        1    0.000    0.000    0.000    0.000 dyld.py:53(dyld_framework_path)
        4    0.000    0.000    0.000    0.000 dyld.py:56(dyld_library_path)
        1    0.000    0.000    0.000    0.000 dyld.py:59(dyld_fallback_framework_path)
        1    0.004    0.004    0.014    0.014 dyld.py:6(<module>)
        4    0.000    0.000    0.000    0.000 dyld.py:62(dyld_fallback_library_path)
        4    0.000    0.000    0.000    0.000 dyld.py:65(dyld_image_suffix_search)
        4    0.000    0.000    0.000    0.000 dyld.py:79(dyld_override_search)
        4    0.000    0.000    0.000    0.000 dyld.py:96(dyld_executable_path_search)
        1    0.000    0.000    0.005    0.005 dylib.py:6(<module>)
        1    0.000    0.000    0.000    0.000 encoder.py:102(__init__)
        1    0.000    0.000    0.002    0.002 encoder.py:2(<module>)
        1    0.000    0.000    0.000    0.000 encoder.py:71(JSONEncoder)
        1    0.000    0.000    0.000    0.000 encoders.py:5(<module>)
        1    0.064    0.064    0.167    0.167 environment.py:10(<module>)
        1    0.000    0.000    0.000    0.000 environment.py:1019(TemplateExpression)
        1    0.000    0.000    0.000    0.000 environment.py:1038(TemplateStream)
        1    0.000    0.000    0.000    0.000 environment.py:217(__init__)
        3    0.000    0.000    0.000    0.000 environment.py:345(iter_extensions)
       15    0.000    0.000    0.000    0.000 environment.py:367(getattr)
        1    0.000    0.000    0.087    0.087 environment.py:396(_parse)
        1    0.000    0.000    0.000    0.000 environment.py:417(preprocess)
        1    0.000    0.000    0.013    0.013 environment.py:425(_tokenize)
        1    0.000    0.000    0.038    0.038 environment.py:437(_generate)
        1    0.000    0.000    0.003    0.003 environment.py:445(_compile)
        1    0.000    0.000    0.139    0.139 environment.py:453(compile)
        1    0.000    0.000    0.000    0.000 environment.py:50(create_cache)
        1    0.000    0.000    0.000    0.000 environment.py:68(load_extensions)
        1    0.000    0.000    0.192    0.192 environment.py:684(_load_template)
        1    0.000    0.000    0.192    0.192 environment.py:698(get_template)
        1    0.000    0.000    0.000    0.000 environment.py:771(make_globals)
        1    0.000    0.000    0.000    0.000 environment.py:778(Template)
        1    0.000    0.000    0.000    0.000 environment.py:80(_environment_sanity_check)
        1    0.000    0.000    0.000    0.000 environment.py:833(from_code)
        1    0.000    0.000    0.000    0.000 environment.py:856(_from_namespace)
        1    0.000    0.000    0.033    0.033 environment.py:879(render)
        1    0.000    0.000    0.000    0.000 environment.py:920(new_context)
        1    0.000    0.000    0.000    0.000 environment.py:93(Environment)
        1    0.000    0.000    0.000    0.000 environment.py:987(TemplateModule)
        1    0.000    0.000    0.000    0.000 errors.py:13(DistutilsError)
        1    0.000    0.000    0.000    0.000 errors.py:13(MessageParseError)
        1    0.000    0.000    0.000    0.000 errors.py:16(DistutilsModuleError)
        1    0.000    0.000    0.000    0.000 errors.py:17(HeaderParseError)
        1    0.000    0.000    0.000    0.000 errors.py:20(DistutilsClassError)
        1    0.000    0.000    0.000    0.000 errors.py:21(BoundaryError)
        1    0.000    0.000    0.000    0.000 errors.py:25(MultipartConversionError)
        1    0.000    0.000    0.000    0.000 errors.py:26(DistutilsGetoptError)
        1    0.000    0.000    0.000    0.000 errors.py:29(CharsetError)
        1    0.000    0.000    0.000    0.000 errors.py:29(DistutilsArgError)
        1    0.000    0.000    0.000    0.000 errors.py:33(DistutilsFileError)
        1    0.000    0.000    0.000    0.000 errors.py:35(MessageDefect)
        1    0.000    0.000    0.000    0.000 errors.py:38(DistutilsOptionError)
        1    0.000    0.000    0.000    0.000 errors.py:41(NoBoundaryInMultipartDefect)
        1    0.000    0.000    0.000    0.000 errors.py:44(StartBoundaryNotFoundDefect)
        1    0.000    0.000    0.000    0.000 errors.py:46(DistutilsSetupError)
        1    0.000    0.000    0.000    0.000 errors.py:47(FirstHeaderLineIsContinuationDefect)
        1    0.001    0.001    0.001    0.001 errors.py:5(<module>)
        1    0.000    0.000    0.000    0.000 errors.py:50(DistutilsPlatformError)
        1    0.000    0.000    0.000    0.000 errors.py:50(MisplacedEnvelopeHeaderDefect)
        1    0.000    0.000    0.000    0.000 errors.py:53(MalformedHeaderDefect)
        1    0.000    0.000    0.000    0.000 errors.py:55(DistutilsExecError)
        1    0.000    0.000    0.000    0.000 errors.py:56(MultipartInvariantViolationDefect)
        1    0.000    0.000    0.000    0.000 errors.py:59(DistutilsInternalError)
        1    0.000    0.000    0.000    0.000 errors.py:63(DistutilsTemplateError)
        1    0.000    0.000    0.000    0.000 errors.py:66(DistutilsByteCompileError)
        1    0.000    0.000    0.000    0.000 errors.py:70(CCompilerError)
        1    0.000    0.000    0.000    0.000 errors.py:73(PreprocessError)
        1    0.000    0.000    0.000    0.000 errors.py:76(CompileError)
        1    0.000    0.000    0.000    0.000 errors.py:79(LibError)
        1    0.000    0.000    0.000    0.000 errors.py:83(LinkError)
        1    0.000    0.000    0.000    0.000 errors.py:87(UnknownFileError)
        1    0.001    0.001    0.001    0.001 errors.py:9(<module>)
        1    0.000    0.000    0.000    0.000 errors.py:9(MessageError)
        1    0.001    0.001    0.001    0.001 exceptions.py:10(<module>)
        1    0.000    0.000    0.000    0.000 exceptions.py:116(TemplateAssertionError)
        1    0.000    0.000    0.000    0.000 exceptions.py:124(TemplateRuntimeError)
        1    0.000    0.000    0.000    0.000 exceptions.py:13(TemplateError)
        1    0.000    0.000    0.000    0.000 exceptions.py:130(UndefinedError)
        1    0.000    0.000    0.000    0.000 exceptions.py:134(SecurityError)
        1    0.000    0.000    0.000    0.000 exceptions.py:140(FilterArgumentError)
        1    0.000    0.000    0.000    0.000 exceptions.py:29(TemplateNotFound)
        3    0.000    0.000    0.000    0.000 exceptions.py:36(__init__)
        1    0.000    0.000    0.000    0.000 exceptions.py:4(<module>)
        1    0.000    0.000    0.000    0.000 exceptions.py:55(TemplatesNotFound)
        1    0.000    0.000    0.000    0.000 exceptions.py:6(CommandError)
        1    0.000    0.000    0.000    0.000 exceptions.py:71(TemplateSyntaxError)
        1    0.005    0.005    0.005    0.005 expat.py:1(<module>)
        1    0.014    0.014    0.017    0.017 filters.py:10(<module>)
        1    0.000    0.000    0.000    0.000 filters.py:258(do_join)
        4    0.000    0.000    0.000    0.000 filters.py:32(evalcontextfilter)
        8    0.000    0.000    0.000    0.000 filters.py:43(environmentfilter)
        1    0.000    0.000    0.000    0.000 filters.py:664(_GroupTuple)
        1    0.000    0.000    0.000    0.000 fnmatch.py:11(<module>)
        1    0.017    0.017    0.019    0.019 formatter.py:10(<module>)
        1    0.000    0.000    0.000    0.000 formatter.py:26(Formatter)
        8    0.000    0.000    0.000    0.000 framework.py:22(framework_info)
        1    0.000    0.000    0.005    0.005 framework.py:6(<module>)
        2    0.000    0.000    0.000    0.000 generator.py:120(_dispatch)
        2    0.001    0.000    0.004    0.002 generator.py:140(_write_headers)
        2    0.000    0.000    0.000    0.000 generator.py:172(_handle_text)
       26    0.000    0.000    0.000    0.000 generator.py:22(_is8bitstring)
        1    0.000    0.000    0.000    0.000 generator.py:294(DecodedGenerator)
        1    0.000    0.000    0.000    0.000 generator.py:32(Generator)
        1    0.001    0.001    0.007    0.007 generator.py:4(<module>)
        2    0.000    0.000    0.000    0.000 generator.py:42(__init__)
        2    0.000    0.000    0.004    0.002 generator.py:67(flatten)
        2    0.000    0.000    0.004    0.002 generator.py:93(_write)
      373    0.004    0.000    0.264    0.001 genericpath.py:15(exists)
      255    0.002    0.000    0.080    0.000 genericpath.py:26(isfile)
      198    0.001    0.000    0.005    0.000 genericpath.py:38(isdir)
        1    0.000    0.000    0.000    0.000 genericpath.py:52(getmtime)
      170    0.001    0.000    0.001    0.000 genericpath.py:85(_splitext)
       62    0.001    0.000    0.003    0.000 gettext.py:130(_expand_lang)
       31    0.002    0.000    0.010    0.000 gettext.py:421(find)
       31    0.000    0.000    0.010    0.000 gettext.py:461(translation)
       31    0.000    0.000    0.010    0.000 gettext.py:527(dgettext)
       31    0.000    0.000    0.011    0.000 gettext.py:565(gettext)
        2    0.000    0.000    0.000    0.000 gzip.py:141(_check_closed)
        2    0.000    0.000    0.000    0.000 gzip.py:174(_init_read)
        2    0.000    0.000    0.000    0.000 gzip.py:178(_read_gzip_header)
        2    0.000    0.000    0.001    0.000 gzip.py:232(read)
        6    0.000    0.000    0.000    0.000 gzip.py:24(read32)
        4    0.000    0.000    0.001    0.000 gzip.py:269(_read)
        2    0.000    0.000    0.000    0.000 gzip.py:319(_add_read_data)
        2    0.000    0.000    0.000    0.000 gzip.py:327(_read_eof)
        4    0.000    0.000    0.000    0.000 gzip.py:351(closed)
        2    0.000    0.000    0.000    0.000 gzip.py:355(close)
        1    0.000    0.000    0.000    0.000 gzip.py:36(GzipFile)
        1    0.032    0.032    0.043    0.043 gzip.py:4(<module>)
        2    0.000    0.000    0.000    0.000 gzip.py:45(__init__)
        1    0.021    0.021    0.021    0.021 hashlib.py:55(<module>)
        6    0.000    0.000    0.000    0.000 hashlib.py:91(__get_openssl_constructor)
        1    0.000    0.000    0.000    0.000 header.py:140(Header)
       26    0.000    0.000    0.001    0.000 header.py:141(__init__)
       26    0.000    0.000    0.001    0.000 header.py:229(append)
       26    0.000    0.000    0.001    0.000 header.py:284(_split)
        2    0.000    0.000    0.000    0.000 header.py:330(_split_ascii)
       26    0.000    0.000    0.000    0.000 header.py:335(_encode_chunks)
       26    0.000    0.000    0.001    0.000 header.py:370(encode)
        2    0.000    0.000    0.000    0.000 header.py:410(_split_ascii)
        1    0.000    0.000    0.005    0.005 header.py:5(<module>)
        1    0.024    0.024    0.039    0.039 heapq.py:31(<module>)
        1    0.000    0.000    1.942    1.942 helpers.py:118(dispatch)
        1    0.089    0.089    0.091    0.091 helpers.py:14(<module>)
        1    0.000    0.000    0.000    0.000 helpers.py:216(_encode)
        2    0.000    0.000    0.431    0.216 helpers.py:237(_execute_command)
        2    0.000    0.000    0.431    0.216 helpers.py:248(_call)
        1    0.000    0.000    0.000    0.000 helpers.py:283(ArghParser)
        1    0.000    0.000    0.017    0.017 helpers.py:291(add_commands)
        1    0.000    0.000    1.942    1.942 helpers.py:298(dispatch)
        1    0.000    0.000    0.017    0.017 helpers.py:34(add_commands)
        3    0.000    0.000    0.000    0.000 helpers.py:368(wrap_errors)
        3    0.000    0.000    0.000    0.000 helpers.py:380(wrapper)
        1    0.000    0.000    0.000    0.000 hex_codec.py:27(hex_decode)
        1    0.000    0.000    0.000    0.000 hex_codec.py:45(Codec)
        1    0.000    0.000    0.000    0.000 hex_codec.py:52(IncrementalEncoder)
        1    0.000    0.000    0.000    0.000 hex_codec.py:57(IncrementalDecoder)
        1    0.000    0.000    0.000    0.000 hex_codec.py:62(StreamWriter)
        1    0.000    0.000    0.000    0.000 hex_codec.py:65(StreamReader)
        1    0.000    0.000    0.000    0.000 hex_codec.py:70(getregentry)
        1    0.001    0.001    0.001    0.001 hex_codec.py:8(<module>)
        1    0.000    0.000    0.000    0.000 hmac.py:20(HMAC)
        1    0.000    0.000    0.001    0.001 hmac.py:4(<module>)
        1    0.002    0.002    0.004    0.004 html.py:10(<module>)
        1    0.000    0.000    0.000    0.000 html.py:105(HtmlFormatter)
        1    0.000    0.000    0.001    0.001 html2text.py:177(HTML2Text)
        1    0.000    0.000    0.000    0.000 html2text.py:178(__init__)
        1    0.048    0.048    0.083    0.083 html2text.py:2(<module>)
        2    0.000    0.000    0.000    0.000 html2text.py:233(feed)
        1    0.000    0.000    0.003    0.003 html2text.py:237(handle)
        3    0.000    0.000    0.000    0.000 html2text.py:242(outtextf)
        1    0.000    0.000    0.000    0.000 html2text.py:246(close)
        1    0.000    0.000    0.000    0.000 html2text.py:265(handle_starttag)
        1    0.000    0.000    0.000    0.000 html2text.py:268(handle_endtag)
        2    0.000    0.000    0.000    0.000 html2text.py:361(handle_tag)
        1    0.000    0.000    0.000    0.000 html2text.py:548(pbr)
        2    0.000    0.000    0.000    0.000 html2text.py:551(p)
        3    0.000    0.000    0.000    0.000 html2text.py:557(o)
       39    0.000    0.000    0.000    0.000 html2text.py:63(name2cp)
        2    0.000    0.000    0.000    0.000 html2text.py:631(handle_data)
        1    0.000    0.000    0.003    0.003 html2text.py:685(optwrap)
        1    0.000    0.000    0.004    0.004 html2text.py:717(html2text)
        2    0.000    0.000    0.000    0.000 html2text.py:96(hn)
        1    0.001    0.001    0.001    0.001 htmlentitydefs.py:1(<module>)
        1    0.000    0.000    0.000    0.000 httplib.py:1027(HTTP)
        1    0.000    0.000    0.000    0.000 httplib.py:1123(HTTPSConnection)
        2    0.000    0.000    0.000    0.000 httplib.py:1128(__init__)
        1    0.000    0.000    0.000    0.000 httplib.py:1148(HTTPS)
        1    0.000    0.000    0.000    0.000 httplib.py:1181(HTTPException)
        1    0.000    0.000    0.000    0.000 httplib.py:1186(NotConnected)
        1    0.000    0.000    0.000    0.000 httplib.py:1189(InvalidURL)
        1    0.000    0.000    0.000    0.000 httplib.py:1192(UnknownProtocol)
        1    0.000    0.000    0.000    0.000 httplib.py:1197(UnknownTransferEncoding)
        1    0.000    0.000    0.000    0.000 httplib.py:1200(UnimplementedFileMode)
        1    0.000    0.000    0.000    0.000 httplib.py:1203(IncompleteRead)
        1    0.000    0.000    0.000    0.000 httplib.py:1217(ImproperConnectionState)
        1    0.000    0.000    0.000    0.000 httplib.py:1220(CannotSendRequest)
        1    0.000    0.000    0.000    0.000 httplib.py:1223(CannotSendHeader)
        1    0.000    0.000    0.000    0.000 httplib.py:1226(ResponseNotReady)
        1    0.000    0.000    0.000    0.000 httplib.py:1229(BadStatusLine)
        1    0.000    0.000    0.000    0.000 httplib.py:1239(LineAndFileWrapper)
        1    0.000    0.000    0.000    0.000 httplib.py:215(HTTPMessage)
       26    0.000    0.000    0.000    0.000 httplib.py:217(addheader)
        2    0.001    0.000    0.007    0.004 httplib.py:231(readheaders)
        1    0.000    0.000    0.000    0.000 httplib.py:320(HTTPResponse)
        2    0.000    0.000    0.000    0.000 httplib.py:330(__init__)
        2    0.000    0.000    0.115    0.058 httplib.py:358(_read_status)
        2    0.000    0.000    0.123    0.061 httplib.py:395(begin)
        2    0.000    0.000    0.000    0.000 httplib.py:478(_check_close)
        2    0.000    0.000    0.000    0.000 httplib.py:508(close)
        2    0.000    0.000    0.001    0.000 httplib.py:524(read)
        2    0.000    0.000    0.001    0.000 httplib.py:560(_read_chunked)
        4    0.000    0.000    0.000    0.000 httplib.py:614(_safe_read)
        2    0.000    0.000    0.000    0.000 httplib.py:650(getheaders)
        1    0.000    0.000    0.000    0.000 httplib.py:657(HTTPConnection)
        2    0.000    0.000    0.000    0.000 httplib.py:668(__init__)
        1    0.032    0.032    0.074    0.074 httplib.py:67(<module>)
        2    0.000    0.000    0.000    0.000 httplib.py:698(_set_hostport)
        2    0.000    0.000    0.000    0.000 httplib.py:715(set_debuglevel)
        2    0.000    0.000    0.000    0.000 httplib.py:755(send)
       10    0.000    0.000    0.000    0.000 httplib.py:775(_output)
        2    0.000    0.000    0.000    0.000 httplib.py:782(_send_output)
        2    0.000    0.000    0.000    0.000 httplib.py:803(putrequest)
        8    0.000    0.000    0.000    0.000 httplib.py:913(putheader)
        2    0.000    0.000    0.000    0.000 httplib.py:924(endheaders)
        2    0.000    0.000    0.001    0.000 httplib.py:939(request)
        2    0.000    0.000    0.001    0.000 httplib.py:960(_send_request)
        2    0.000    0.000    0.123    0.062 httplib.py:977(getresponse)
        1    0.019    0.019    5.599    5.599 hubugs:3(<module>)
        1    0.000    0.000    0.000    0.000 idna.py:146(Codec)
        4    0.000    0.000    0.000    0.000 idna.py:147(encode)
        1    0.000    0.000    0.000    0.000 idna.py:197(IncrementalEncoder)
        1    0.000    0.000    0.000    0.000 idna.py:231(IncrementalDecoder)
        1    0.000    0.000    0.000    0.000 idna.py:271(StreamWriter)
        1    0.000    0.000    0.000    0.000 idna.py:274(StreamReader)
        1    0.000    0.000    0.000    0.000 idna.py:279(getregentry)
        1    0.022    0.022    0.074    0.074 idna.py:3(<module>)
        8    0.000    0.000    0.000    0.000 idna.py:62(ToASCII)
        1    0.023    0.023    0.023    0.023 img.py:10(<module>)
        1    0.000    0.000    0.000    0.000 img.py:167(ImageFormatter)
        1    0.000    0.000    0.000    0.000 img.py:48(PilNotAvailable)
        1    0.000    0.000    0.000    0.000 img.py:511(GifImageFormatter)
        1    0.000    0.000    0.000    0.000 img.py:52(FontNotFound)
        1    0.000    0.000    0.000    0.000 img.py:526(JpgImageFormatter)
        1    0.000    0.000    0.000    0.000 img.py:541(BmpImageFormatter)
        1    0.000    0.000    0.000    0.000 img.py:56(FontManager)
        2    0.000    0.000    0.000    0.000 inspect.py:142(isfunction)
        2    0.000    0.000    0.000    0.000 inspect.py:209(iscode)
        1    0.041    0.041    0.158    0.158 inspect.py:25(<module>)
        1    0.000    0.000    0.000    0.000 inspect.py:628(EndOfBlock)
        1    0.000    0.000    0.000    0.000 inspect.py:630(BlockFinder)
        2    0.000    0.000    0.000    0.000 inspect.py:67(ismethod)
        2    0.000    0.000    0.000    0.000 inspect.py:741(getargs)
        2    0.000    0.000    0.001    0.000 inspect.py:801(getargspec)
        1    0.010    0.010    0.011    0.011 io.py:34(<module>)
        1    0.000    0.000    0.000    0.000 io.py:78(IOBase)
        1    0.000    0.000    0.000    0.000 io.py:81(RawIOBase)
        1    0.000    0.000    0.000    0.000 io.py:84(BufferedIOBase)
        1    0.000    0.000    0.000    0.000 io.py:87(TextIOBase)
        1    0.000    0.000    0.000    0.000 iri2uri.py:6(<module>)
        2    0.000    0.000    0.000    0.000 iri2uri.py:65(iri2uri)
        1    0.000    0.000    0.000    0.000 issue.txt:1(<module>)
        1    0.000    0.000    0.000    0.000 issue.txt:103(block_patch)
        3    0.000    0.000    0.032    0.011 issue.txt:23(block_body)
        5    0.000    0.000    0.001    0.000 issue.txt:33(block_header)
        8    0.000    0.000    0.033    0.004 issue.txt:5(root)
        1    0.000    0.000    0.000    0.000 issue.txt:75(block_comments)
        1    0.000    0.000    0.001    0.001 issues.py:1(<module>)
        1    0.000    0.000    0.000    0.000 issues.py:10(Issue)
        1    0.000    0.000    0.000    0.000 issues.py:30(Comment)
        1    0.000    0.000    0.000    0.000 issues.py:41(Issues)
        1    0.000    0.000    0.194    0.194 issues.py:85(show)
        1    0.000    0.000    0.000    0.000 iterators.py:5(<module>)
        1    0.000    0.000    0.000    0.000 keyword.py:11(<module>)
        1    0.000    0.000    0.000    0.000 latex.py:10(<module>)
        1    0.000    0.000    0.000    0.000 latex.py:133(LatexFormatter)
       27    0.000    0.000    0.000    0.000 lexer.py:131(<genexpr>)
       26    0.000    0.000    0.000    0.000 lexer.py:132(<lambda>)
        1    0.001    0.001    0.009    0.009 lexer.py:16(<module>)
        1    0.000    0.000    0.000    0.000 lexer.py:186(compile_rules)
        1    0.000    0.000    0.000    0.000 lexer.py:209(Failure)
        2    0.000    0.000    0.000    0.000 lexer.py:214(__init__)
        1    0.000    0.000    0.000    0.000 lexer.py:222(Token)
        4    0.000    0.000    0.000    0.000 lexer.py:225(<genexpr>)
      351    0.001    0.000    0.002    0.000 lexer.py:227(__new__)
      498    0.002    0.000    0.003    0.000 lexer.py:237(test)
       19    0.000    0.000    0.000    0.000 lexer.py:250(test_any)
        1    0.000    0.000    0.000    0.000 lexer.py:265(TokenStreamIterator)
        1    0.000    0.000    0.000    0.000 lexer.py:285(TokenStream)
        1    0.000    0.000    0.000    0.000 lexer.py:291(__init__)
       85    0.000    0.000    0.000    0.000 lexer.py:303(__nonzero__)
       14    0.000    0.000    0.000    0.000 lexer.py:308(push)
       14    0.000    0.000    0.001    0.000 lexer.py:312(look)
      229    0.000    0.000    0.002    0.000 lexer.py:325(next_if)
      229    0.000    0.000    0.002    0.000 lexer.py:332(skip_if)
      364    0.002    0.000    0.053    0.000 lexer.py:336(next)
        1    0.000    0.000    0.000    0.000 lexer.py:348(close)
      121    0.000    0.000    0.040    0.000 lexer.py:354(expect)
        1    0.000    0.000    0.012    0.012 lexer.py:375(get_lexer)
        1    0.000    0.000    0.000    0.000 lexer.py:394(Lexer)
        1    0.000    0.000    0.012    0.012 lexer.py:402(__init__)
       10    0.000    0.000    0.011    0.001 lexer.py:404(<lambda>)
       46    0.000    0.000    0.000    0.000 lexer.py:493(_normalize_newlines)
        1    0.000    0.000    0.000    0.000 lexer.py:497(tokenize)
      350    0.003    0.000    0.051    0.000 lexer.py:503(wrap)
      528    0.007    0.000    0.013    0.000 lexer.py:548(tokeniter)
        1    0.001    0.001    0.001    0.001 loaders.py:10(<module>)
        1    0.000    0.000    0.192    0.192 loaders.py:101(load)
        1    0.000    0.000    0.000    0.000 loaders.py:140(FileSystemLoader)
        3    0.000    0.000    0.000    0.000 loaders.py:155(__init__)
        3    0.000    0.000    0.030    0.010 loaders.py:161(get_source)
        1    0.000    0.000    0.000    0.000 loaders.py:197(PackageLoader)
        1    0.000    0.000    0.000    0.000 loaders.py:212(__init__)
        1    0.000    0.000    0.022    0.022 loaders.py:223(get_source)
        4    0.000    0.000    0.000    0.000 loaders.py:24(split_template_path)
        1    0.000    0.000    0.000    0.000 loaders.py:262(DictLoader)
        1    0.000    0.000    0.000    0.000 loaders.py:284(FunctionLoader)
        1    0.000    0.000    0.000    0.000 loaders.py:314(PrefixLoader)
        1    0.000    0.000    0.000    0.000 loaders.py:354(ChoiceLoader)
        1    0.000    0.000    0.000    0.000 loaders.py:368(__init__)
        1    0.000    0.000    0.053    0.053 loaders.py:371(get_source)
        1    0.000    0.000    0.000    0.000 loaders.py:386(_TemplateModule)
        1    0.000    0.000    0.000    0.000 loaders.py:39(BaseLoader)
        1    0.000    0.000    0.000    0.000 loaders.py:390(ModuleLoader)
       62    0.001    0.000    0.002    0.000 locale.py:334(normalize)
        3    0.000    0.000    0.000    0.000 locale.py:517(setlocale)
        1    0.000    0.000    0.000    0.000 locale.py:560(getpreferredencoding)
        1    0.000    0.000    0.000    0.000 log.py:1(<module>)
        1    0.000    0.000    0.000    0.000 log.py:14(Log)
        1    0.000    0.000    0.000    0.000 log.py:16(__init__)
        1    0.000    0.000    0.000    0.000 markdown2.py:1215(_do_headers)
       16    0.000    0.000    0.000    0.000 markdown2.py:123(_hash_ascii)
        1    0.000    0.000    0.015    0.015 markdown2.py:1249(_do_lists)
        1    0.000    0.000    0.000    0.000 markdown2.py:137(MarkdownError)
        1    0.000    0.000    0.004    0.004 markdown2.py:1432(_do_code_blocks)
        1    0.000    0.000    0.000    0.000 markdown2.py:1472(_do_code_spans)
        1    0.000    0.000    0.000    0.000 markdown2.py:1526(_do_italics_and_bold)
        1    0.000    0.000    0.029    0.029 markdown2.py:156(markdown)
        1    0.000    0.000    0.000    0.000 markdown2.py:1610(_do_block_quotes)
        1    0.000    0.000    0.001    0.001 markdown2.py:1615(_form_paragraphs)
        1    0.000    0.000    0.066    0.066 markdown2.py:164(Markdown)
        1    0.000    0.000    0.000    0.000 markdown2.py:1686(_encode_amps_and_angles)
        1    0.000    0.000    0.000    0.000 markdown2.py:1700(_encode_backslash_escapes)
        1    0.000    0.000    0.000    0.000 markdown2.py:1724(_do_auto_links)
        1    0.000    0.000    0.000    0.000 markdown2.py:1780(_unescape_special_chars)
        1    0.000    0.000    0.000    0.000 markdown2.py:1791(MarkdownWithExtras)
        1    0.000    0.000    0.000    0.000 markdown2.py:1808(UnicodeWithAttrs)
        1    0.000    0.000    0.001    0.001 markdown2.py:185(__init__)
        1    0.000    0.000    0.000    0.000 markdown2.py:1991(_memoized)
        2    0.000    0.000    0.000    0.000 markdown2.py:1998(__init__)
        1    0.000    0.000    0.000    0.000 markdown2.py:2090(_NoReflowFormatter)
        1    0.000    0.000    0.000    0.000 markdown2.py:224(reset)
        1    0.000    0.000    0.028    0.028 markdown2.py:237(convert)
        1    0.000    0.000    0.000    0.000 markdown2.py:318(postprocess)
        1    0.045    0.045    0.267    0.267 markdown2.py:34(<module>)
        1    0.000    0.000    0.000    0.000 markdown2.py:448(_detab)
        2    0.000    0.000    0.000    0.000 markdown2.py:528(_hash_html_blocks)
        1    0.000    0.000    0.007    0.007 markdown2.py:636(_strip_link_definitions)
        1    0.000    0.000    0.020    0.020 markdown2.py:720(_run_block_gamut)
        1    0.000    0.000    0.001    0.001 markdown2.py:820(_run_span_gamut)
        1    0.000    0.000    0.000    0.000 markdown2.py:869(_escape_special_chars)
        1    0.000    0.000    0.000    0.000 markdown2.py:963(_do_links)
        1    0.000    0.000    0.000    0.000 markupbase.py:24(ParserBase)
JNRowe commented 12 years ago

At first glance I suspect your profile output may have been truncated somehow, the times seem to be way off.

I suppose, most of my annoyance was when opening browser tabs.

That is fixed in 0.13.0. It will also format your code blocks a lot nicer than 0.12.0 ;)

sorin-ionescu commented 12 years ago

Yes, it was truncated. I have fixed it.

sorin-ionescu commented 12 years ago

Misaka requires Cython?

Downloading/unpacking misaka
  Downloading misaka-1.0.0.tar.gz (56Kb): 56Kb downloaded
  Running setup.py egg_info for package misaka
    Cython is not installed. Please install Cython first.
sorin-ionescu commented 12 years ago

I had some trouble compiling it with llvm-gcc-4.2, but I got it to work.

JNRowe commented 12 years ago

Misaka requires Cython?

Yes. Upstream has workaround for people using pip, and have released 1.0.1. This should no longer be an issue.

As for speed, I'm not convinced there is a whole lot to be gained. There are no glaringly obvious problems, and adding a heap of micro-optimisations will make maintenance far harder. For example, even resorting to import-on-use for the possibly unused template filters only shaves off ~0.05 seconds at the expense of horrific __import__ hacks.

There are some semi-obvious ways to speed up single bug displays. If you're willing to put up with bare unformatted markdown and patches without highlighting, see https://gist.github.com/1770350. We're still only talking about a less than a tenth of second improvement though.

I'm going to look a little deeper, I may well have missed something.

JNRowe commented 12 years ago

Given that the obvious savings available are so close to zero as to almost be indistinguishable I'm closing this. I'm really not interested in piling in micro-optimisations when they'll still be totally overshadowed by the network roundtrips.

Note to future readers: If I've missed something obvious please open a pull request and shame me ;)