[{"data":1,"prerenderedAt":634},["ShallowReactive",2],{"navigation":3,"api-navigation":184,"\u002Fresources\u002Flaco-vs-hydra-zen":206,"docyard:crossref-index":633},[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":171,"body":208,"description":218,"extension":628,"meta":629,"navigation":630,"path":172,"seo":631,"stem":173,"__hash__":632},"content\u002F3.resources\u002F3.laco-vs-hydra-zen.md",{"type":209,"value":210,"toc":621},"minimark",[211,215,219,488,493,552,556],[212,213,171],"h1",{"id":214},"laco-vs-hydra-zen",[216,217,218],"p",{},"Quick mapping of hydra-zen APIs to their Laco counterparts.",[220,221,222,238],"table",{},[223,224,225],"thead",{},[226,227,228,232,235],"tr",{},[229,230,231],"th",{},"hydra-zen",[229,233,234],{},"Laco",[229,236,237],{},"Notes",[239,240,241,266,289,304,332,350,369,384,402,425,451,471],"tbody",{},[226,242,243,250,255],{},[244,245,246],"td",{},[247,248,249],"code",{},"builds(Cls, **kw)",[244,251,252],{},[247,253,254],{},"L.call(Cls)(**kw)",[244,256,257,258,261,262,265],{},"Both produce ",[247,259,260],{},"DictConfig{_target_: …}",". Laco validates kwargs against the signature by default (",[247,263,264],{},"strict=True",").",[226,267,268,273,278],{},[244,269,270],{},[247,271,272],{},"partial(builds(fn, **kw))",[244,274,275],{},[247,276,277],{},"L.partial(fn)(**kw)",[244,279,280,281,284,285,288],{},"Emits ",[247,282,283],{},"_partial_: true",". Laco returns ",[247,286,287],{},"functools.partial[R]"," statically.",[226,290,291,296,301],{},[244,292,293],{},[247,294,295],{},"just(obj)",[244,297,298],{},[247,299,300],{},"L.just(obj)",[244,302,303],{},"Wrap a non-instantiable value. Both emit an identity node.",[226,305,306,311,316],{},[244,307,308],{},[247,309,310],{},"MISSING",[244,312,313],{},[247,314,315],{},"L.required[T]()",[244,317,318,321,322,325,326,321,328,331],{},[247,319,320],{},"L.required[float]()"," types as ",[247,323,324],{},"float","; ",[247,327,310],{},[247,329,330],{},"str",".",[226,333,334,339,344],{},[244,335,336],{},[247,337,338],{},"make_config(a=1, b=2)",[244,340,341],{},[247,342,343],{},"@L.config class S: a: int = 1; b: int = 2",[244,345,346,349],{},[247,347,348],{},"@L.config"," is a dataclass; pyright gives accurate field types.",[226,351,352,361,366],{},[244,353,354,357,358],{},[247,355,356],{},"ZenStore"," \u002F ",[247,359,360],{},"store(Cls)",[244,362,363],{},[247,364,365],{},"class G(L.Group[T])",[244,367,368],{},"Entries are class attributes; typos caught at edit time.",[226,370,371,376,381],{},[244,372,373],{},[247,374,375],{},"zen(fn)",[244,377,378],{},[247,379,380],{},"@L.task",[244,382,383],{},"Instantiates only requested config fields; leaves defaults untouched.",[226,385,386,391,396],{},[244,387,388],{},[247,389,390],{},"@hydra.main",[244,392,393],{},[247,394,395],{},"@laco.main(config_name=…)",[244,397,398,399,401],{},"Thin wrapper; applies ",[247,400,380],{}," implicitly if the function is not yet wrapped.",[226,403,404,409,414],{},[244,405,406],{},[247,407,408],{},"instantiate(cfg)",[244,410,411],{},[247,412,413],{},"laco.instantiate(cfg)",[244,415,416,417,420,421,424],{},"Delegates to ",[247,418,419],{},"hydra.utils.instantiate","; passes through ",[247,422,423],{},"_PASSTHROUGH_TYPES"," unchanged.",[226,426,427,432,437],{},[244,428,429],{},[247,430,431],{},"to_yaml(cfg)",[244,433,434],{},[247,435,436],{},"laco.dump(cfg)",[244,438,439,440,182,443,446,447,450],{},"Strips ",[247,441,442],{},"name",[247,444,445],{},"version"," meta keys; adds ",[247,448,449],{},"_laco_: 1"," version marker.",[226,452,453,458,461],{},[244,454,455],{},[247,456,457],{},"store.add_to_hydra_store()",[244,459,460],{},"implicit on class declaration",[244,462,463,466,467,470],{},[247,464,465],{},"Group.__init_subclass__"," registers to ",[247,468,469],{},"ConfigStore"," on class creation.",[226,472,473,481,485],{},[244,474,475,477,478],{},[247,476,390],{}," + ",[247,479,480],{},"ZenStore.add_to_hydra_store()",[244,482,483],{},[247,484,395],{},[244,486,487],{},"Full app loop: compose + override + instantiate + call.",[489,490,492],"h2",{"id":491},"key-differences","Key differences",[494,495,496,527,533,543],"ol",{},[497,498,499,503,504,507,508,511,512,515,516,518,519,522,523,526],"li",{},[500,501,502],"strong",{},"Lie-typing contract."," Laco's ",[247,505,506],{},"L.call(T)(**kw)"," statically types as ",[247,509,510],{},"T"," (not ",[247,513,514],{},"DictConfig",") so nested composition stays type-safe. hydra-zen returns ",[247,517,514],{}," everywhere and relies on ",[247,520,521],{},"builds","'s ",[247,524,525],{},"populate_full_signature"," for validation.",[497,528,529,532],{},[500,530,531],{},"No magic strings."," Group names, entry names, packages, and interpolation paths are Python identities validated by pyright. hydra-zen still uses string keys in several places.",[497,534,535,538,539,542],{},[500,536,537],{},"Tracing."," ",[247,540,541],{},"L.trace(lambda: Model(encoder=Encoder(depth=24)))"," records a config tree from ordinary Python. hydra-zen has no direct equivalent.",[497,544,545,538,548,551],{},[500,546,547],{},"CLI.",[247,549,550],{},"laco compose \u002F run \u002F show"," are built-in. hydra-zen defers entirely to Hydra's CLI.",[489,553,555],{"id":554},"examples-referenced-in-this-table","Examples referenced in this table",[557,558,559,574,587,599,611],"ul",{},[497,560,561,357,564,567,568],{},[247,562,563],{},"L.call",[247,565,566],{},"L.partial",": ",[569,570,572],"a",{"href":571},"examples\u002Flinear_regression.py",[247,573,571],{},[497,575,576,357,579,567,582],{},[247,577,578],{},"L.just",[247,580,581],{},"L.required",[569,583,585],{"href":584},"examples\u002Ftext_classifier.py",[247,586,584],{},[497,588,589,357,592,567,594],{},[247,590,591],{},"L.Group",[247,593,348],{},[569,595,597],{"href":596},"examples\u002Ftyped\u002Fmlp.py",[247,598,596],{},[497,600,601,357,603,567,606],{},[247,602,380],{},[247,604,605],{},"@laco.main",[569,607,609],{"href":608},"examples\u002Fpipelines\u002Fmnist_train.py",[247,610,608],{},[497,612,613,616,617,620],{},[247,614,615],{},"L.trace",": see ",[247,618,619],{},"tests\u002Ftest_trace.py"," and the language module docstring",{"title":622,"searchDepth":623,"depth":623,"links":624},"",3,[625,627],{"id":491,"depth":626,"text":492},2,{"id":554,"depth":626,"text":555},"md",{},true,{"title":171,"description":218},"BCSZL6yOAe_qCCNpXAdG6TpIvQa2BFT6KGJurebHHA0",{},1785687295440]