[{"data":1,"prerenderedAt":609},["ShallowReactive",2],{"navigation":3,"api-navigation":184,"index":206,"docyard:crossref-index":608},[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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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":181,"body":208,"description":600,"extension":601,"meta":602,"navigation":605,"path":182,"seo":606,"stem":183,"__hash__":607},"content\u002Findex.md",{"type":209,"value":210,"toc":593},"minimark",[211,215,236,261,264,269,276,413,422,424,428,431,486,488,492,589],[212,213,181],"h1",{"id":214},"lazy-configuration-for-python",[216,217,218,222,223,227,228,231,232,235],"p",{},[219,220,221],"strong",{},"Laco"," is a Python-first configuration system. It is for engineers who want Hydra's config composition, CLI overrides, and multirun sweeps, but with real imports and IDE support instead of magic strings. Config files are ordinary ",[224,225,226],"code",{},".py"," files. Hydra-compatible YAML is the wire format. Type safety comes from lie-typing, a deliberate mismatch between the static and runtime type that makes nested composition safe under both ",[224,229,230],{},"pyright"," and ",[224,233,234],{},"mypy",".",[237,238,243],"pre",{"className":239,"code":240,"language":241,"meta":242,"style":242},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","pip install laco\n","bash","",[224,244,245],{"__ignoreMap":242},[246,247,250,254,258],"span",{"class":248,"line":249},"line",1,[246,251,253],{"class":252},"sbgvK","pip",[246,255,257],{"class":256},"s_sjI"," install",[246,259,260],{"class":256}," laco\n",[262,263],"hr",{},[265,266,268],"h2",{"id":267},"static-types-vs-runtime-values","Static types vs. runtime values",[216,270,271,272,275],{},"Six constructs in Laco declare a static type for the IDE while producing a ",[224,273,274],{},"DictConfig"," at runtime.",[277,278,279,298],"table",{},[280,281,282],"thead",{},[283,284,285,289,292,295],"tr",{},[286,287,288],"th",{},"Construct",[286,290,291],{},"Static type",[286,293,294],{},"Runtime type",[286,296,297],{},"Use case",[299,300,301,321,339,358,376,395],"tbody",{},[283,302,303,309,314,318],{},[304,305,306],"td",{},[224,307,308],{},"L.call(T)(...)",[304,310,311],{},[224,312,313],{},"T",[304,315,316],{},[224,317,274],{},[304,319,320],{},"Lazy class construction",[283,322,323,328,332,336],{},[304,324,325],{},[224,326,327],{},"L.partial(T)(...)",[304,329,330],{},[224,331,313],{},[304,333,334],{},[224,335,274],{},[304,337,338],{},"Deferred partial application",[283,340,341,346,351,355],{},[304,342,343],{},[224,344,345],{},"L.just(v)",[304,347,348],{},[224,349,350],{},"type(v)",[304,352,353],{},[224,354,274],{},[304,356,357],{},"Wrap an existing value",[283,359,360,365,369,373],{},[304,361,362],{},[224,363,364],{},"L.required[T]()",[304,366,367],{},[224,368,313],{},[304,370,371],{},[224,372,274],{},[304,374,375],{},"Mandatory placeholder",[283,377,378,383,388,392],{},[304,379,380],{},[224,381,382],{},"L.slot(G)",[304,384,385],{},[224,386,387],{},"G",[304,389,390],{},[224,391,274],{},[304,393,394],{},"Group placeholder in schema",[283,396,397,402,406,410],{},[304,398,399],{},[224,400,401],{},"L.chosen(G)",[304,403,404],{},[224,405,387],{},[304,407,408],{},[224,409,274],{},[304,411,412],{},"In-body reference to chosen entry",[216,414,415,418,419,421],{},[224,416,417],{},"laco.instantiate(node)"," closes the gap. It returns the genuine ",[224,420,313],{},", both statically and at runtime.",[262,423],{},[265,425,427],{"id":426},"start-here","Start here",[216,429,430],{},"New to Laco? Follow the docs in order:",[432,433,434,443,450,465,473],"ol",{},[435,436,437,442],"li",{},[219,438,439],{},[440,441,5],"a",{"href":6},": install and run a five-minute example.",[435,444,445,449],{},[219,446,447],{},[440,448,16],{"href":17},": an 11-notebook series that builds from first\nsteps to production patterns. The fastest way to learn by doing.",[435,451,452,456,457,231,461,464],{},[219,453,454],{},[440,455,67],{"href":68},": the ",[458,459,460],"em",{},"why",[458,462,463],{},"how"," behind the design, for when\nyou want to understand a mechanism rather than just use it.",[435,466,467,472],{},[219,468,469],{},[440,470,471],{"href":101},"How-To",": task-oriented recipes for specific problems.",[435,474,475,480,481,485],{},[219,476,477],{},[440,478,479],{"href":135},"Examples"," & ",[219,482,483],{},[440,484,175],{"href":176},": annotated source\nwalkthroughs and the full symbol reference for day-to-day work.",[262,487],{},[265,489,491],{"id":490},"all-sections","All sections",[277,493,494,504],{},[280,495,496],{},[283,497,498,501],{},[286,499,500],{},"Section",[286,502,503],{},"Contents",[299,505,506,515,524,533,542,551,560,570,580],{},[283,507,508,512],{},[304,509,510],{},[440,511,5],{"href":6},[304,513,514],{},"Install, five-minute example",[283,516,517,521],{},[304,518,519],{},[440,520,16],{"href":17},[304,522,523],{},"11 Jupyter notebooks, beginner → production",[283,525,526,530],{},[304,527,528],{},[440,529,67],{"href":68},[304,531,532],{},"Why and how Laco works",[283,534,535,539],{},[304,536,537],{},[440,538,471],{"href":101},[304,540,541],{},"Task-oriented recipes",[283,543,544,548],{},[304,545,546],{},[440,547,479],{"href":135},[304,549,550],{},"Annotated source walkthroughs",[283,552,553,557],{},[304,554,555],{},[440,556,163],{"href":164},[304,558,559],{},"Optional extension packages",[283,561,562,567],{},[304,563,564],{},[440,565,566],{"href":172},"vs Hydra-zen",[304,568,569],{},"Side-by-side comparison",[283,571,572,577],{},[304,573,574],{},[440,575,576],{"href":168},"Migration 0.x → 1.0",[304,578,579],{},"Upgrade guide",[283,581,582,586],{},[304,583,584],{},[440,585,175],{"href":176},[304,587,588],{},"Every public symbol",[590,591,592],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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);}",{"title":242,"searchDepth":594,"depth":594,"links":595},3,[596,598,599],{"id":267,"depth":597,"text":268},2,{"id":426,"depth":597,"text":427},{"id":490,"depth":597,"text":491},"Laco is a Python-first configuration system. It is for engineers who want Hydra's config composition, CLI overrides, and multirun sweeps, but with real imports and IDE support instead of magic strings. Config files are ordinary .py files. Hydra-compatible YAML is the wire format. Type safety comes from lie-typing, a deliberate mismatch between the static and runtime type that makes nested composition safe under both pyright and mypy.","md",{"hero":603},{"variant":604},"minimal",true,{"title":181,"description":600},"bqs2jupki54SIqNow0Rwi3v95-iJwf2767clf2p2qbA",{},1785687292930]