def free_shake(self, x):
self.lock[:] = False<EOL>normals, values, error = self._compute_equations(x)[:-<NUM_LIT:1>]<EOL>counter = <NUM_LIT:0><EOL>while True:<EOL><INDENT>if error <= self.threshold:<EOL><INDENT>break<EOL><DEDENT>result = self._fast_shake(x, normals, values, error)<EOL>counter += <NUM_LIT:1><EOL>if result is not None:<EOL><INDENT>x, normals, values, error = result<EOL><DEDENT>else:<EOL><INDENT>x, normals, values, error = self._rough_shake(x, normals, values, error)<EOL>counter += <NUM_LIT:1><EOL><DEDENT>if counter > self.max_iter:<EOL><INDENT>raise ConstraintError('<STR_LIT>')<EOL><DEDENT><DEDENT>return x, counter, len(values)<EOL>
Brings unknowns to the constraints.

           Arguments:
            | ``x`` -- The unknowns.