tinygrad 0.10.1__py3-none-any.whl → 0.10.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tinygrad/codegen/devectorizer.py +247 -0
 - tinygrad/codegen/expander.py +121 -0
 - tinygrad/codegen/kernel.py +35 -37
 - tinygrad/codegen/linearize.py +19 -10
 - tinygrad/codegen/lowerer.py +31 -8
 - tinygrad/codegen/symbolic.py +476 -0
 - tinygrad/codegen/transcendental.py +10 -0
 - tinygrad/device.py +28 -11
 - tinygrad/dtype.py +12 -3
 - tinygrad/engine/jit.py +3 -2
 - tinygrad/engine/multi.py +0 -1
 - tinygrad/engine/realize.py +7 -4
 - tinygrad/engine/schedule.py +227 -255
 - tinygrad/engine/search.py +20 -27
 - tinygrad/gradient.py +3 -0
 - tinygrad/helpers.py +7 -4
 - tinygrad/nn/state.py +2 -2
 - tinygrad/ops.py +64 -329
 - tinygrad/renderer/__init__.py +19 -3
 - tinygrad/renderer/cstyle.py +39 -18
 - tinygrad/renderer/llvmir.py +55 -18
 - tinygrad/renderer/ptx.py +6 -2
 - tinygrad/renderer/wgsl.py +20 -12
 - tinygrad/runtime/autogen/libc.py +404 -71
 - tinygrad/runtime/autogen/{libpciaccess.py → pci.py} +25 -715
 - tinygrad/runtime/autogen/webgpu.py +6985 -0
 - tinygrad/runtime/graph/metal.py +28 -29
 - tinygrad/runtime/ops_amd.py +37 -34
 - tinygrad/runtime/{ops_clang.py → ops_cpu.py} +4 -2
 - tinygrad/runtime/ops_disk.py +1 -1
 - tinygrad/runtime/ops_dsp.py +59 -33
 - tinygrad/runtime/ops_llvm.py +14 -12
 - tinygrad/runtime/ops_metal.py +78 -62
 - tinygrad/runtime/ops_nv.py +9 -6
 - tinygrad/runtime/ops_python.py +5 -5
 - tinygrad/runtime/ops_webgpu.py +200 -38
 - tinygrad/runtime/support/am/amdev.py +23 -11
 - tinygrad/runtime/support/am/ip.py +10 -10
 - tinygrad/runtime/support/elf.py +2 -0
 - tinygrad/runtime/support/hcq.py +7 -5
 - tinygrad/runtime/support/llvm.py +8 -14
 - tinygrad/shape/shapetracker.py +3 -2
 - tinygrad/shape/view.py +2 -3
 - tinygrad/spec.py +21 -20
 - tinygrad/tensor.py +150 -90
 - tinygrad/viz/assets/cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/highlight.min.js +1232 -0
 - tinygrad/viz/assets/cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/languages/cpp.min.js +47 -0
 - tinygrad/viz/assets/cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/languages/python.min.js +42 -0
 - tinygrad/viz/assets/cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/styles/default.min.css +9 -0
 - tinygrad/viz/assets/d3js.org/d3.v5.min.js +2 -0
 - tinygrad/viz/assets/dagrejs.github.io/project/dagre-d3/latest/dagre-d3.min.js +4816 -0
 - tinygrad/viz/assets/unpkg.com/@highlightjs/cdn-assets@11.10.0/styles/tokyo-night-dark.min.css +8 -0
 - tinygrad/viz/index.html +544 -0
 - tinygrad/viz/perfetto.html +178 -0
 - tinygrad/viz/serve.py +205 -0
 - {tinygrad-0.10.1.dist-info → tinygrad-0.10.2.dist-info}/METADATA +20 -8
 - tinygrad-0.10.2.dist-info/RECORD +99 -0
 - tinygrad/codegen/rewriter.py +0 -516
 - tinygrad-0.10.1.dist-info/RECORD +0 -86
 - {tinygrad-0.10.1.dist-info → tinygrad-0.10.2.dist-info}/LICENSE +0 -0
 - {tinygrad-0.10.1.dist-info → tinygrad-0.10.2.dist-info}/WHEEL +0 -0
 - {tinygrad-0.10.1.dist-info → tinygrad-0.10.2.dist-info}/top_level.txt +0 -0
 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /*! `cpp` grammar compiled for Highlight.js 11.10.0 */
         
     | 
| 
      
 2 
     | 
    
         
            +
            (()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,a=e.COMMENT("//","$",{
         
     | 
| 
      
 3 
     | 
    
         
            +
            contains:[{begin:/\\\n/}]
         
     | 
| 
      
 4 
     | 
    
         
            +
            }),n="decltype\\(auto\\)",r="[a-zA-Z_]\\w*::",i="(?!struct)("+n+"|"+t.optional(r)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",s={
         
     | 
| 
      
 5 
     | 
    
         
            +
            className:"type",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{
         
     | 
| 
      
 6 
     | 
    
         
            +
            begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
         
     | 
| 
      
 7 
     | 
    
         
            +
            begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
         
     | 
| 
      
 8 
     | 
    
         
            +
            end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
         
     | 
| 
      
 9 
     | 
    
         
            +
            begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={
         
     | 
| 
      
 10 
     | 
    
         
            +
            className:"number",variants:[{
         
     | 
| 
      
 11 
     | 
    
         
            +
            begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"
         
     | 
| 
      
 12 
     | 
    
         
            +
            },{
         
     | 
| 
      
 13 
     | 
    
         
            +
            begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"
         
     | 
| 
      
 14 
     | 
    
         
            +
            }],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
         
     | 
| 
      
 15 
     | 
    
         
            +
            keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
         
     | 
| 
      
 16 
     | 
    
         
            +
            },contains:[{begin:/\\\n/,relevance:0},e.inherit(c,{className:"string"}),{
         
     | 
| 
      
 17 
     | 
    
         
            +
            className:"string",begin:/<.*?>/},a,e.C_BLOCK_COMMENT_MODE]},u={
         
     | 
| 
      
 18 
     | 
    
         
            +
            className:"title",begin:t.optional(r)+e.IDENT_RE,relevance:0
         
     | 
| 
      
 19 
     | 
    
         
            +
            },d=t.optional(r)+e.IDENT_RE+"\\s*\\(",p={
         
     | 
| 
      
 20 
     | 
    
         
            +
            type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],
         
     | 
| 
      
 21 
     | 
    
         
            +
            keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],
         
     | 
| 
      
 22 
     | 
    
         
            +
            literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],
         
     | 
| 
      
 23 
     | 
    
         
            +
            _type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]
         
     | 
| 
      
 24 
     | 
    
         
            +
            },_={className:"function.dispatch",relevance:0,keywords:{
         
     | 
| 
      
 25 
     | 
    
         
            +
            _hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]
         
     | 
| 
      
 26 
     | 
    
         
            +
            },
         
     | 
| 
      
 27 
     | 
    
         
            +
            begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))
         
     | 
| 
      
 28 
     | 
    
         
            +
            },m=[_,l,s,a,e.C_BLOCK_COMMENT_MODE,o,c],f={variants:[{begin:/=/,end:/;/},{
         
     | 
| 
      
 29 
     | 
    
         
            +
            begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
         
     | 
| 
      
 30 
     | 
    
         
            +
            keywords:p,contains:m.concat([{begin:/\(/,end:/\)/,keywords:p,
         
     | 
| 
      
 31 
     | 
    
         
            +
            contains:m.concat(["self"]),relevance:0}]),relevance:0},g={className:"function",
         
     | 
| 
      
 32 
     | 
    
         
            +
            begin:"("+i+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
         
     | 
| 
      
 33 
     | 
    
         
            +
            keywords:p,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:n,keywords:p,relevance:0},{
         
     | 
| 
      
 34 
     | 
    
         
            +
            begin:d,returnBegin:!0,contains:[u],relevance:0},{begin:/::/,relevance:0},{
         
     | 
| 
      
 35 
     | 
    
         
            +
            begin:/:/,endsWithParent:!0,contains:[c,o]},{relevance:0,match:/,/},{
         
     | 
| 
      
 36 
     | 
    
         
            +
            className:"params",begin:/\(/,end:/\)/,keywords:p,relevance:0,
         
     | 
| 
      
 37 
     | 
    
         
            +
            contains:[a,e.C_BLOCK_COMMENT_MODE,c,o,s,{begin:/\(/,end:/\)/,keywords:p,
         
     | 
| 
      
 38 
     | 
    
         
            +
            relevance:0,contains:["self",a,e.C_BLOCK_COMMENT_MODE,c,o,s]}]
         
     | 
| 
      
 39 
     | 
    
         
            +
            },s,a,e.C_BLOCK_COMMENT_MODE,l]};return{name:"C++",
         
     | 
| 
      
 40 
     | 
    
         
            +
            aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:p,illegal:"</",
         
     | 
| 
      
 41 
     | 
    
         
            +
            classNameAliases:{"function.dispatch":"built_in"},
         
     | 
| 
      
 42 
     | 
    
         
            +
            contains:[].concat(f,g,_,m,[l,{
         
     | 
| 
      
 43 
     | 
    
         
            +
            begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",
         
     | 
| 
      
 44 
     | 
    
         
            +
            end:">",keywords:p,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:p},{
         
     | 
| 
      
 45 
     | 
    
         
            +
            match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],
         
     | 
| 
      
 46 
     | 
    
         
            +
            className:{1:"keyword",3:"title.class"}}])}}})();hljs.registerLanguage("cpp",e)
         
     | 
| 
      
 47 
     | 
    
         
            +
            })();
         
     | 
    
        tinygrad/viz/assets/cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/languages/python.min.js
    ADDED
    
    | 
         @@ -0,0 +1,42 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /*! `python` grammar compiled for Highlight.js 11.10.0 */
         
     | 
| 
      
 2 
     | 
    
         
            +
            (()=>{var e=(()=>{"use strict";return e=>{
         
     | 
| 
      
 3 
     | 
    
         
            +
            const n=e.regex,a=/[\p{XID_Start}_]\p{XID_Continue}*/u,s=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],t={
         
     | 
| 
      
 4 
     | 
    
         
            +
            $pattern:/[A-Za-z]\w+|__\w+__/,keyword:s,
         
     | 
| 
      
 5 
     | 
    
         
            +
            built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],
         
     | 
| 
      
 6 
     | 
    
         
            +
            literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],
         
     | 
| 
      
 7 
     | 
    
         
            +
            type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]
         
     | 
| 
      
 8 
     | 
    
         
            +
            },i={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/,
         
     | 
| 
      
 9 
     | 
    
         
            +
            end:/\}/,keywords:t,illegal:/#/},l={begin:/\{\{/,relevance:0},o={
         
     | 
| 
      
 10 
     | 
    
         
            +
            className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{
         
     | 
| 
      
 11 
     | 
    
         
            +
            begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,
         
     | 
| 
      
 12 
     | 
    
         
            +
            contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{
         
     | 
| 
      
 13 
     | 
    
         
            +
            begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,
         
     | 
| 
      
 14 
     | 
    
         
            +
            contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{
         
     | 
| 
      
 15 
     | 
    
         
            +
            begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,
         
     | 
| 
      
 16 
     | 
    
         
            +
            contains:[e.BACKSLASH_ESCAPE,i,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,
         
     | 
| 
      
 17 
     | 
    
         
            +
            end:/"""/,contains:[e.BACKSLASH_ESCAPE,i,l,r]},{begin:/([uU]|[rR])'/,end:/'/,
         
     | 
| 
      
 18 
     | 
    
         
            +
            relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{
         
     | 
| 
      
 19 
     | 
    
         
            +
            begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,
         
     | 
| 
      
 20 
     | 
    
         
            +
            end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,
         
     | 
| 
      
 21 
     | 
    
         
            +
            contains:[e.BACKSLASH_ESCAPE,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,
         
     | 
| 
      
 22 
     | 
    
         
            +
            contains:[e.BACKSLASH_ESCAPE,l,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
         
     | 
| 
      
 23 
     | 
    
         
            +
            },b="[0-9](_?[0-9])*",c=`(\\b(${b}))?\\.(${b})|\\b(${b})\\.`,d="\\b|"+s.join("|"),g={
         
     | 
| 
      
 24 
     | 
    
         
            +
            className:"number",relevance:0,variants:[{
         
     | 
| 
      
 25 
     | 
    
         
            +
            begin:`(\\b(${b})|(${c}))[eE][+-]?(${b})[jJ]?(?=${d})`},{begin:`(${c})[jJ]?`},{
         
     | 
| 
      
 26 
     | 
    
         
            +
            begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{
         
     | 
| 
      
 27 
     | 
    
         
            +
            begin:`\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${d})`
         
     | 
| 
      
 28 
     | 
    
         
            +
            },{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\b(${b})[jJ](?=${d})`
         
     | 
| 
      
 29 
     | 
    
         
            +
            }]},p={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:t,
         
     | 
| 
      
 30 
     | 
    
         
            +
            contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={
         
     | 
| 
      
 31 
     | 
    
         
            +
            className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,
         
     | 
| 
      
 32 
     | 
    
         
            +
            end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,
         
     | 
| 
      
 33 
     | 
    
         
            +
            contains:["self",i,g,o,e.HASH_COMMENT_MODE]}]};return r.contains=[o,g,i],{
         
     | 
| 
      
 34 
     | 
    
         
            +
            name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:t,
         
     | 
| 
      
 35 
     | 
    
         
            +
            illegal:/(<\/|\?)|=>/,contains:[i,g,{scope:"variable.language",match:/\bself\b/
         
     | 
| 
      
 36 
     | 
    
         
            +
            },{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"
         
     | 
| 
      
 37 
     | 
    
         
            +
            },o,p,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,a],scope:{1:"keyword",
         
     | 
| 
      
 38 
     | 
    
         
            +
            3:"title.function"},contains:[m]},{variants:[{
         
     | 
| 
      
 39 
     | 
    
         
            +
            match:[/\bclass/,/\s+/,a,/\s*/,/\(\s*/,a,/\s*\)/]},{match:[/\bclass/,/\s+/,a]}],
         
     | 
| 
      
 40 
     | 
    
         
            +
            scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{
         
     | 
| 
      
 41 
     | 
    
         
            +
            className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[g,m,o]}]}}})()
         
     | 
| 
      
 42 
     | 
    
         
            +
            ;hljs.registerLanguage("python",e)})();
         
     | 
    
        tinygrad/viz/assets/cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/styles/default.min.css
    ADDED
    
    | 
         @@ -0,0 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /*!
         
     | 
| 
      
 2 
     | 
    
         
            +
              Theme: Default
         
     | 
| 
      
 3 
     | 
    
         
            +
              Description: Original highlight.js style
         
     | 
| 
      
 4 
     | 
    
         
            +
              Author: (c) Ivan Sagalaev <maniac@softwaremaniacs.org>
         
     | 
| 
      
 5 
     | 
    
         
            +
              Maintainer: @highlightjs/core-team
         
     | 
| 
      
 6 
     | 
    
         
            +
              Website: https://highlightjs.org/
         
     | 
| 
      
 7 
     | 
    
         
            +
              License: see project LICENSE
         
     | 
| 
      
 8 
     | 
    
         
            +
              Touched: 2021
         
     | 
| 
      
 9 
     | 
    
         
            +
            */pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#f3f3f3;color:#444}.hljs-comment{color:#697070}.hljs-punctuation,.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:#695}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}
         
     |