Constraints and restraints¶
A constraint removes a parameter. The tied one is no longer free, and its value
follows its sources exactly. Constraining parameters to each other is the
reference for the three verbs (Refinement.tie, Refinement.tie_equal and
Refinement.untie), the affine form they share, the fnmatch globs they take,
the four refusals each can raise, and how a tied row reads in the parameter
listing.
A restraint keeps a parameter. It adds a row to the residual pulling a bond length or an angle towards a target, and the fit is free to disagree with it at a cost. Restraining a distance or an angle is that reference. Use a constraint for a relation you are sure of and a restraint for one you are only mostly sure of.
A constraint does not have to name a model parameter as its master.
Naming a variable of your own is the reference for Refinement.add_variable and
Refinement.remove_variable, which declare a quantity of your own for other
parameters to follow, and for the multi-source form of Refinement.tie that
lets one such variable be written in terms of others.
The parameter paths both take, and the one grammatical trap in them, are in
The parameter table. The symmetry constraints you never declare (a cell edge following
another, a coordinate confined to its site-symmetry direction) are created for
you and read the same way, with TieSpec.user false.