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.