If a simple scalar is given, the same value is used for all coordinates. For instance, it may be preferable to treat rotations and translations differently. Constraints are implemented as classes. The constraints implemented so far work fairly similarly. They use cartesian coordinates as input.
Some constraints pass on cartesian coordinates while others pass on generalized coordinates.
The atoms are free to move without any constraints. The filter passes on unchanged cartesian coordinates. The atoms are fixed. No coordinates are passed on. See, e.g., script initial.py for an example.