You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A bridged model is a linear composition — bridging_method builds a LinearEnergyModel whose atomic model is a LinearEnergyAtomicModel over [learned, InnerPotential]. But it is spelled as a flag on a non-composite model type, so the type you request is not the type you get:
linear_ener is already the composition axis and takes exactly the right shape — a repeated models: list of full sub-model specs plus weights ("sum" supported). What is missing is the child: InnerPotential has no config-level model type. It exists only as InnerPotentialAtomicModel, so it cannot be named in models:. The flag is the workaround for that gap.
What the workaround costs
Type confusion — a standard (or dpa4) request silently returns a LinearEnergyModel.
Implicit coupling — the radii are pushed into the sibling descriptor's InnerClamp/BridgingSwitch behind the user's back.
Duplicated owners — every builder that accepts the flag must re-implement the composition, and they have already drifted: see Deprecate descriptor-scoped exclude_types in favour of the model-level build-seam owner #5947, where one builder promotes descriptor.exclude_types to model-level pair_exclude_types and the other does not, changing the energy of a 0.9 A Ni-O dimer by 79.97 eV (max force component 318.48 eV/A).
Register inner_potential as a model type so it can be named as a linear_ener child.
Have the composition derive the sibling descriptor's InnerClamp/BridgingSwitch from the inner_potential child at build time. Bridging is not a pure sum — the switch must reach inside the learned child (it drives the SFPG gate, see DPA4/SeZM zone-bridging (SFPG) gate is incomplete under domain decomposition; blocks ZBL and spin+ZBL multi-rank #5906) — so this coupling has to be expressed somewhere; deriving it keeps a single source of truth instead of asking the user to write the radii twice and hoping they agree.
Keep bridging_method as sugar that expands to the canonical form through ONE normalizer (not per-builder), or deprecate it once the examples are migrated.
Land pt and pt_expt together; argcheck is shared, so a schema that accepts a spelling one backend ignores is the same silent-divergence bug in a new place.
A bridged model is a linear composition —
bridging_methodbuilds aLinearEnergyModelwhose atomic model is aLinearEnergyAtomicModelover[learned, InnerPotential]. But it is spelled as a flag on a non-composite model type, so the type you request is not the type you get:Why the flag exists
linear_eneris already the composition axis and takes exactly the right shape — a repeatedmodels:list of full sub-model specs plusweights("sum"supported). What is missing is the child:InnerPotentialhas no config-level model type. It exists only asInnerPotentialAtomicModel, so it cannot be named inmodels:. The flag is the workaround for that gap.What the workaround costs
standard(ordpa4) request silently returns aLinearEnergyModel.InnerClamp/BridgingSwitchbehind the user's back.descriptor.exclude_typesto model-levelpair_exclude_typesand the other does not, changing the energy of a 0.9 A Ni-O dimer by 79.97 eV (max force component 318.48 eV/A).Proposed shape
Tasks:
inner_potentialas a model type so it can be named as alinear_enerchild.InnerClamp/BridgingSwitchfrom theinner_potentialchild at build time. Bridging is not a pure sum — the switch must reach inside the learned child (it drives the SFPG gate, see DPA4/SeZM zone-bridging (SFPG) gate is incomplete under domain decomposition; blocks ZBL and spin+ZBL multi-rank #5906) — so this coupling has to be expressed somewhere; deriving it keeps a single source of truth instead of asking the user to write the radii twice and hoping they agree.pair_exclude_typesbelongs to the linear model and governs both children by construction. The promotion in Deprecate descriptor-scoped exclude_types in favour of the model-level build-seam owner #5947 then has nothing left to do and can be deleted rather than deprecated.bridging_methodas sugar that expands to the canonical form through ONE normalizer (not per-builder), or deprecate it once the examples are migrated.argcheckis shared, so a schema that accepts a spelling one backend ignores is the same silent-divergence bug in a new place.Related
bridging_methodundertype: "standard"in pt_expt rather than composing behind the type, so there is exactly one bridging owner per backend until this lands.