[{"data":1,"prerenderedAt":839},["ShallowReactive",2],{"navigation":3,"api-navigation":184,"\u002Flearn\u002Fconcepts\u002Fapp-loop":206,"docyard:crossref-index":838},[4,8,155,174,180],{"title":5,"path":6,"stem":7},"Getting Started","\u002Fgetting-started","1.getting-started",{"title":9,"path":10,"stem":11,"children":12},"Learn","\u002Flearn","2.learn",[13,15,66,99,133],{"title":9,"path":10,"stem":14},"2.learn\u002Findex",{"title":16,"path":17,"stem":18,"children":19},"Tutorials","\u002Flearn\u002Ftutorials","2.learn\u002F1.tutorials\u002Findex",[20,21,26,30,34,38,42,46,50,54,58,62],{"title":16,"path":17,"stem":18},{"title":22,"path":23,"stem":24,"icon":25},"Why Laco?","\u002Flearn\u002Ftutorials\u002Fwhy-laco","2.learn\u002F1.tutorials\u002F01.why-laco","i-lucide-notebook",{"title":27,"path":28,"stem":29,"icon":25},"First Steps with Laco","\u002Flearn\u002Ftutorials\u002Ffirst-steps","2.learn\u002F1.tutorials\u002F02.first-steps",{"title":31,"path":32,"stem":33,"icon":25},"Lazy Call and Partial","\u002Flearn\u002Ftutorials\u002Flazy-call-and-partial","2.learn\u002F1.tutorials\u002F03.lazy-call-and-partial",{"title":35,"path":36,"stem":37,"icon":25},"Hyperparameters and Interpolation","\u002Flearn\u002Ftutorials\u002Fhyperparameters-and-interpolation","2.learn\u002F1.tutorials\u002F04.hyperparameters-and-interpolation",{"title":39,"path":40,"stem":41,"icon":25},"Loading, Saving, and the CLI","\u002Flearn\u002Ftutorials\u002Floading-saving-cli","2.learn\u002F1.tutorials\u002F05.loading-saving-cli",{"title":43,"path":44,"stem":45,"icon":25},"Nested Configs and Containers","\u002Flearn\u002Ftutorials\u002Fnested-configs-and-containers","2.learn\u002F1.tutorials\u002F06.nested-configs-and-containers",{"title":47,"path":48,"stem":49,"icon":25},"Typed Groups and Schemas","\u002Flearn\u002Ftutorials\u002Ftyped-groups-and-schemas","2.learn\u002F1.tutorials\u002F07.typed-groups-and-schemas",{"title":51,"path":52,"stem":53,"icon":25},"Pipeline Configs","\u002Flearn\u002Ftutorials\u002Fpipeline-configs","2.learn\u002F1.tutorials\u002F08.pipeline-configs",{"title":55,"path":56,"stem":57,"icon":25},"Tasks and the App Loop","\u002Flearn\u002Ftutorials\u002Ftasks-and-app-loop","2.learn\u002F1.tutorials\u002F09.tasks-and-app-loop",{"title":59,"path":60,"stem":61,"icon":25},"Tracing","\u002Flearn\u002Ftutorials\u002Ftracing","2.learn\u002F1.tutorials\u002F10.tracing",{"title":63,"path":64,"stem":65,"icon":25},"Production Patterns","\u002Flearn\u002Ftutorials\u002Fproduction-patterns","2.learn\u002F1.tutorials\u002F11.production-patterns",{"title":67,"path":68,"stem":69,"children":70},"Concepts","\u002Flearn\u002Fconcepts","2.learn\u002F2.concepts\u002Findex",[71,72,76,80,84,88,92,95],{"title":67,"path":68,"stem":69},{"title":73,"path":74,"stem":75},"Config as Python","\u002Flearn\u002Fconcepts\u002Fconfig-as-python","2.learn\u002F2.concepts\u002F1.config-as-python",{"title":77,"path":78,"stem":79},"Lazy Construction","\u002Flearn\u002Fconcepts\u002Flazy-construction","2.learn\u002F2.concepts\u002F2.lazy-construction",{"title":81,"path":82,"stem":83},"Lie-Typing","\u002Flearn\u002Fconcepts\u002Flie-typing","2.learn\u002F2.concepts\u002F3.lie-typing",{"title":85,"path":86,"stem":87},"Interpolation","\u002Flearn\u002Fconcepts\u002Finterpolation","2.learn\u002F2.concepts\u002F4.interpolation",{"title":89,"path":90,"stem":91},"Typed Groups","\u002Flearn\u002Fconcepts\u002Ftyped-groups","2.learn\u002F2.concepts\u002F5.typed-groups",{"title":59,"path":93,"stem":94},"\u002Flearn\u002Fconcepts\u002Ftracing","2.learn\u002F2.concepts\u002F6.tracing",{"title":96,"path":97,"stem":98},"App Loop","\u002Flearn\u002Fconcepts\u002Fapp-loop","2.learn\u002F2.concepts\u002F7.app-loop",{"title":100,"path":101,"stem":102,"children":103},"How-To Guides","\u002Flearn\u002Fhow-to","2.learn\u002F3.how-to\u002Findex",[104,105,109,113,117,121,125,129],{"title":100,"path":101,"stem":102},{"title":106,"path":107,"stem":108},"Override Configs","\u002Flearn\u002Fhow-to\u002Foverride-configs","2.learn\u002F3.how-to\u002F1.override-configs",{"title":110,"path":111,"stem":112},"Safe Loading","\u002Flearn\u002Fhow-to\u002Fsafe-loading","2.learn\u002F3.how-to\u002F2.safe-loading",{"title":114,"path":115,"stem":116},"Custom Resolvers","\u002Flearn\u002Fhow-to\u002Fcustom-resolvers","2.learn\u002F3.how-to\u002F3.custom-resolvers",{"title":118,"path":119,"stem":120},"Lint and Strict Mode","\u002Flearn\u002Fhow-to\u002Flint-and-strict","2.learn\u002F3.how-to\u002F4.lint-and-strict",{"title":122,"path":123,"stem":124},"Publishing a reproducible app with laco app","\u002Flearn\u002Fhow-to\u002Flaco-app","2.learn\u002F3.how-to\u002F5.laco-app",{"title":126,"path":127,"stem":128},"Reproduce an Experiment","\u002Flearn\u002Fhow-to\u002Freproduce-experiment","2.learn\u002F3.how-to\u002F6.reproduce-experiment",{"title":130,"path":131,"stem":132},"Migrate from argparse","\u002Flearn\u002Fhow-to\u002Fmigrate-from-argparse","2.learn\u002F3.how-to\u002F7.migrate-from-argparse",{"title":134,"path":135,"stem":136,"children":137},"Examples Curriculum","\u002Flearn\u002Fexamples","2.learn\u002F4.examples\u002Findex",[138,139,143,147,151],{"title":134,"path":135,"stem":136},{"title":140,"path":141,"stem":142},"Foundation Examples","\u002Flearn\u002Fexamples\u002Ffoundations","2.learn\u002F4.examples\u002F1.foundations",{"title":144,"path":145,"stem":146},"Building Blocks","\u002Flearn\u002Fexamples\u002Fbuilding-blocks","2.learn\u002F4.examples\u002F2.building-blocks",{"title":148,"path":149,"stem":150},"Typed-Group Variants","\u002Flearn\u002Fexamples\u002Ftyped-variants","2.learn\u002F4.examples\u002F3.typed-variants",{"title":152,"path":153,"stem":154},"End-to-End Pipelines","\u002Flearn\u002Fexamples\u002Fpipelines","2.learn\u002F4.examples\u002F4.pipelines",{"title":156,"path":157,"stem":158,"children":159},"Resources","\u002Fresources","3.resources",[160,162,166,170],{"title":156,"path":157,"stem":161},"3.resources\u002Findex",{"title":163,"path":164,"stem":165},"Integrations","\u002Fresources\u002Fintegrations","3.resources\u002F1.integrations",{"title":167,"path":168,"stem":169},"Migration guide: Laco 0.x → 1.0","\u002Fresources\u002Fmigration-0.x-to-1.0","3.resources\u002F2.migration-0.x-to-1.0",{"title":171,"path":172,"stem":173},"Laco vs hydra-zen","\u002Fresources\u002Flaco-vs-hydra-zen","3.resources\u002F3.laco-vs-hydra-zen",{"title":175,"path":176,"stem":177,"children":178},"API Reference","\u002Fapi","4.api\u002Findex",[179],{"title":175,"path":176,"stem":177},{"title":181,"path":182,"stem":183},"Lazy Configuration for Python","\u002F","index",[185,188,191,194,197,200,203],{"title":186,"path":187},"cli","\u002Fapi\u002Fcli",{"title":189,"path":190},"compat","\u002Fapi\u002Fcompat",{"title":192,"path":193},"handler","\u002Fapi\u002Fhandler",{"title":195,"path":196},"keys","\u002Fapi\u002Fkeys",{"title":198,"path":199},"language","\u002Fapi\u002Flanguage",{"title":201,"path":202},"ops","\u002Fapi\u002Fops",{"title":204,"path":205},"utils","\u002Fapi\u002Futils",{"id":207,"title":96,"body":208,"description":255,"extension":834,"meta":835,"navigation":476,"path":97,"seo":836,"stem":98,"__hash__":837},"content\u002F2.learn\u002F2.concepts\u002F7.app-loop.md",{"type":209,"value":210,"toc":825},"minimark",[211,215,240,245,256,266,271,403,412,448,454,459,584,597,601,625,632,636,657,666,672,814,821],[212,213,96],"h1",{"id":214},"app-loop",[216,217,218],"blockquote",{},[219,220,221,225,226,230,225,233,236,237],"p",{},[222,223,224],"strong",{},"Tutorial:"," ",[227,228,229],"a",{"href":56},"Task and App Loop",[222,231,232],{},"See also:",[227,234,235],{"href":153},"Examples: Pipelines",", ",[227,238,239],{"href":176},"API: language",[241,242,244],"h2",{"id":243},"the-ml-experiment-lifecycle","The ML Experiment Lifecycle",[246,247,252],"pre",{"className":248,"code":250,"language":251},[249],"language-text","config file\n    ↓  laco.load\nDictConfig\n    ↓  laco.instantiate (per field)\nreal objects (model, optimizer, …)\n    ↓  training loop\nresults\n    ↓  laco.save\narchived config\n","text",[253,254,250],"code",{"__ignoreMap":255},"",[219,257,258,261,262,265],{},[253,259,260],{},"@L.task"," and ",[253,263,264],{},"laco.main"," wire up the middle two steps automatically.",[241,267,269],{"id":268},"ltask",[253,270,260],{},[246,272,276],{"className":273,"code":274,"language":275,"meta":255,"style":255},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","@L.task\ndef run(model: nn.Module, optimizer: torch.optim.Optimizer, num_steps: int = 1000):\n    for step in range(num_steps):\n        ...\n","python",[253,277,278,297,371,396],{"__ignoreMap":255},[279,280,283,287,291,294],"span",{"class":281,"line":282},"line",1,[279,284,286],{"class":285},"stp6e","@",[279,288,290],{"class":289},"sGLFI","L",[279,292,293],{"class":285},".",[279,295,296],{"class":289},"task\n",[279,298,300,304,307,311,315,318,322,324,328,331,334,336,339,341,344,346,349,351,354,356,360,364,368],{"class":281,"line":299},2,[279,301,303],{"class":302},"sbsja","def",[279,305,306],{"class":289}," run",[279,308,310],{"class":309},"sP7_E","(",[279,312,314],{"class":313},"sFwrP","model",[279,316,317],{"class":309},":",[279,319,321],{"class":320},"su5hD"," nn",[279,323,293],{"class":309},[279,325,327],{"class":326},"skxfh","Module",[279,329,330],{"class":309},",",[279,332,333],{"class":313}," optimizer",[279,335,317],{"class":309},[279,337,338],{"class":320}," torch",[279,340,293],{"class":309},[279,342,343],{"class":326},"optim",[279,345,293],{"class":309},[279,347,348],{"class":326},"Optimizer",[279,350,330],{"class":309},[279,352,353],{"class":313}," num_steps",[279,355,317],{"class":309},[279,357,359],{"class":358},"sZMiF"," int",[279,361,363],{"class":362},"smGrS"," =",[279,365,367],{"class":366},"srdBf"," 1000",[279,369,370],{"class":309},"):\n",[279,372,374,378,381,384,388,390,394],{"class":281,"line":373},3,[279,375,377],{"class":376},"sVHd0","    for",[279,379,380],{"class":320}," step ",[279,382,383],{"class":376},"in",[279,385,387],{"class":386},"sptTA"," range",[279,389,310],{"class":309},[279,391,393],{"class":392},"slqww","num_steps",[279,395,370],{"class":309},[279,397,399],{"class":281,"line":398},4,[279,400,402],{"class":401},"s_hVV","        ...\n",[219,404,405,407,408,411],{},[253,406,260],{}," wraps the function so it accepts a ",[253,409,410],{},"DictConfig"," and automatically:",[413,414,415,419,425,435,438,445],"ol",{},[416,417,418],"li",{},"Inspects the function signature.",[416,420,421,422,293],{},"For each parameter, calls ",[253,423,424],{},"OmegaConf.select(cfg, param_name)",[416,426,427,428,430,431,434],{},"If the selected value is a ",[253,429,410],{}," node, calls ",[253,432,433],{},"laco.instantiate"," on it.",[416,436,437],{},"Fills in default values for parameters not present in the config.",[416,439,440,441,444],{},"Raises ",[253,442,443],{},"MissingMandatoryValue"," for required parameters with no default and\nno config value.",[416,446,447],{},"Calls the wrapped function with the resolved arguments.",[219,449,450,453],{},[253,451,452],{},"*args"," (VAR_POSITIONAL) parameters are skipped: they cannot be represented\nin a keyed config.",[241,455,457],{"id":456},"lacomain",[253,458,264],{},[246,460,462],{"className":273,"code":461,"language":275,"meta":255,"style":255},"import laco\n\ndef run(model, optimizer, num_steps=1000):\n    ...\n\nif __name__ == \"__main__\":\n    laco.main(\"train\", config_path=\"configs\")(run)()\n",[253,463,464,472,478,504,509,514,540],{"__ignoreMap":255},[279,465,466,469],{"class":281,"line":282},[279,467,468],{"class":376},"import",[279,470,471],{"class":320}," laco\n",[279,473,474],{"class":281,"line":299},[279,475,477],{"emptyLinePlaceholder":476},true,"\n",[279,479,480,482,484,486,488,490,492,494,496,499,502],{"class":281,"line":373},[279,481,303],{"class":302},[279,483,306],{"class":289},[279,485,310],{"class":309},[279,487,314],{"class":313},[279,489,330],{"class":309},[279,491,333],{"class":313},[279,493,330],{"class":309},[279,495,353],{"class":313},[279,497,498],{"class":362},"=",[279,500,501],{"class":366},"1000",[279,503,370],{"class":309},[279,505,506],{"class":281,"line":398},[279,507,508],{"class":401},"    ...\n",[279,510,512],{"class":281,"line":511},5,[279,513,477],{"emptyLinePlaceholder":476},[279,515,517,520,523,526,530,534,537],{"class":281,"line":516},6,[279,518,519],{"class":376},"if",[279,521,522],{"class":401}," __name__",[279,524,525],{"class":362}," ==",[279,527,529],{"class":528},"sjJ54"," \"",[279,531,533],{"class":532},"s_sjI","__main__",[279,535,536],{"class":528},"\"",[279,538,539],{"class":309},":\n",[279,541,543,546,548,551,553,555,558,560,562,566,568,570,573,575,578,581],{"class":281,"line":542},7,[279,544,545],{"class":320},"    laco",[279,547,293],{"class":309},[279,549,550],{"class":392},"main",[279,552,310],{"class":309},[279,554,536],{"class":528},[279,556,557],{"class":532},"train",[279,559,536],{"class":528},[279,561,330],{"class":309},[279,563,565],{"class":564},"s99_P"," config_path",[279,567,498],{"class":362},[279,569,536],{"class":528},[279,571,572],{"class":532},"configs",[279,574,536],{"class":528},[279,576,577],{"class":309},")(",[279,579,580],{"class":392},"run",[279,582,583],{"class":309},")()\n",[219,585,586,589,590,593,594,596],{},[253,587,588],{},"laco.main(config_name, config_path, version_base)"," wraps ",[253,591,592],{},"@hydra.main",",\napplies an implicit ",[253,595,260],{}," to the wrapped function, and exposes the full\nHydra CLI.",[241,598,600],{"id":599},"hydra-cli-overrides","Hydra CLI Overrides",[246,602,606],{"className":603,"code":604,"language":605,"meta":255,"style":255},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","python train.py model.out_features=512 optimizer.lr=5e-4\n","bash",[253,607,608],{"__ignoreMap":255},[279,609,610,613,616,619,622],{"class":281,"line":282},[279,611,275],{"class":612},"sbgvK",[279,614,615],{"class":532}," train.py",[279,617,618],{"class":532}," model.out_features=",[279,620,621],{"class":366},"512",[279,623,624],{"class":532}," optimizer.lr=5e-4\n",[219,626,627,628,631],{},"Any config key can be overridden from the command line. Hydra validates types\nagainst the schema if ",[253,629,630],{},"@L.config"," is used.",[241,633,635],{"id":634},"multirun","Multirun",[246,637,639],{"className":603,"code":638,"language":605,"meta":255,"style":255},"python train.py -m optimizer=sgd,adam lr=1e-3,1e-4\n",[253,640,641],{"__ignoreMap":255},[279,642,643,645,647,651,654],{"class":281,"line":282},[279,644,275],{"class":612},[279,646,615],{"class":532},[279,648,650],{"class":649},"stzsN"," -m",[279,652,653],{"class":532}," optimizer=sgd,adam",[279,655,656],{"class":532}," lr=1e-3,1e-4\n",[219,658,659,660,662,663,665],{},"Hydra's multirun mode runs the Cartesian product of the sweep. All Hydra\nlaunchers and sweepers (submitit, joblib, Optuna) work out of the box because\n",[253,661,264],{}," delegates to the standard ",[253,664,592],{}," infrastructure.",[241,667,669,671],{"id":668},"__main__-pattern",[253,670,533],{}," Pattern",[246,673,675],{"className":273,"code":674,"language":275,"meta":255,"style":255},"# configs\u002Fpipelines\u002Fmnist_train.py\nimport laco.language as L\n\n@L.task\ndef task(model, optimizer, loader, num_steps=1000):\n    ...\n\nif __name__ == \"__main__\":\n    import laco\n    laco.main(\"mnist_train\", config_path=\".\")(task)()\n",[253,676,677,683,700,704,714,744,748,752,769,777],{"__ignoreMap":255},[279,678,679],{"class":281,"line":282},[279,680,682],{"class":681},"sutJx","# configs\u002Fpipelines\u002Fmnist_train.py\n",[279,684,685,687,690,692,694,697],{"class":281,"line":299},[279,686,468],{"class":376},[279,688,689],{"class":320}," laco",[279,691,293],{"class":309},[279,693,198],{"class":326},[279,695,696],{"class":376}," as",[279,698,699],{"class":320}," L\n",[279,701,702],{"class":281,"line":373},[279,703,477],{"emptyLinePlaceholder":476},[279,705,706,708,710,712],{"class":281,"line":398},[279,707,286],{"class":285},[279,709,290],{"class":289},[279,711,293],{"class":285},[279,713,296],{"class":289},[279,715,716,718,721,723,725,727,729,731,734,736,738,740,742],{"class":281,"line":511},[279,717,303],{"class":302},[279,719,720],{"class":289}," task",[279,722,310],{"class":309},[279,724,314],{"class":313},[279,726,330],{"class":309},[279,728,333],{"class":313},[279,730,330],{"class":309},[279,732,733],{"class":313}," loader",[279,735,330],{"class":309},[279,737,353],{"class":313},[279,739,498],{"class":362},[279,741,501],{"class":366},[279,743,370],{"class":309},[279,745,746],{"class":281,"line":516},[279,747,508],{"class":401},[279,749,750],{"class":281,"line":542},[279,751,477],{"emptyLinePlaceholder":476},[279,753,755,757,759,761,763,765,767],{"class":281,"line":754},8,[279,756,519],{"class":376},[279,758,522],{"class":401},[279,760,525],{"class":362},[279,762,529],{"class":528},[279,764,533],{"class":532},[279,766,536],{"class":528},[279,768,539],{"class":309},[279,770,772,775],{"class":281,"line":771},9,[279,773,774],{"class":376},"    import",[279,776,471],{"class":320},[279,778,780,782,784,786,788,790,793,795,797,799,801,803,805,807,809,812],{"class":281,"line":779},10,[279,781,545],{"class":320},[279,783,293],{"class":309},[279,785,550],{"class":392},[279,787,310],{"class":309},[279,789,536],{"class":528},[279,791,792],{"class":532},"mnist_train",[279,794,536],{"class":528},[279,796,330],{"class":309},[279,798,565],{"class":564},[279,800,498],{"class":362},[279,802,536],{"class":528},[279,804,293],{"class":532},[279,806,536],{"class":528},[279,808,577],{"class":309},[279,810,811],{"class":392},"task",[279,813,583],{"class":309},[219,815,816,817,820],{},"The module is a valid Laco config file (importable via ",[253,818,819],{},"laco.load",") and also a\nrunnable script with Hydra CLI support.",[822,823,824],"style",{},"html pre.shiki code .stp6e, html code.shiki .stp6e{--shiki-light:#39ADB5;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sFwrP, html code.shiki .sFwrP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}",{"title":255,"searchDepth":373,"depth":373,"links":826},[827,828,829,830,831,832],{"id":243,"depth":299,"text":244},{"id":268,"depth":299,"text":260},{"id":456,"depth":299,"text":264},{"id":599,"depth":299,"text":600},{"id":634,"depth":299,"text":635},{"id":668,"depth":299,"text":833},"__main__ Pattern","md",{},{"title":96,"description":255},"cKcqU46ZXDNOxhMlO-L3isqWVZhqdrdm3P2moGnl6DQ",{},1785687300894]