Hi Ralf,
Now your example would require the matrix of change of basis to be rational whereas in the current implementation it can only be integral.
The change_of_basis_op class has both rational rotation and rational translation parts, with a common r_den for the 9 rotation matrix elements, and a common t_den for the 3 translation vector elements.
The "r_den" is fixed at 1 only for the space_group class. Since space_group_type operates only on space_group objects, the limitation applies here too, but the resulting change-of-basis rotation parts certainly don't have to be integral (that would be a terrible limitation).
I see. Thank you very much for expounding yet another misunderstanding of mine. So now I know that I had better putting questions to this mailing list instead of trying to figure it out by myself from the documentation and the code ;-)
At least as far as I understand, from the code and your comments. Thus, the only place where rational numbers would be necessary is in those matrices of change of basis, isn't it? Now, would it be possible to define a new class space_group_irrational_setting which would provide services very similar to space_group_type but accepting non-integral matrices for the change of basis?
You are correct. […]. However, I don't think it is worth redoing the entire space_group_type implementation to accommodate rational rotation parts.
That was precisely my point.
[…] Construct a standard space_group object with the transformed symmetry operations and feed it into space_group_type. Multiply the "initial" change-of-basis with the output of space_group_type, done. […]
Yes, that was exactly what I wished to achieve with that class I named space_group_irrational_setting, except that I did not realise that space_group_type does already provide the necessary services. Thank you very much for your patience and thorough answers, Ralf, Cheers, Luc