There's a lot of similarity between the matrix generation logic.
It's possible that they should all be in the same module, as a sibling to Pitch, Degree and Pozition.
It would be good if those 3 modules could all subscribe to an interface of exported functions for getting ordered lists of pitches, degrees and pozitions. Then it would be clear that they are all partner contributers to the matrix generation functions.
While we're at it, those listing functions could be in OrderedPitch, OrderedDegree and OrderedPozition modules, perhaps.
There's a lot of similarity between the matrix generation logic.
It's possible that they should all be in the same module, as a sibling to Pitch, Degree and Pozition.
It would be good if those 3 modules could all subscribe to an interface of exported functions for getting ordered lists of pitches, degrees and pozitions. Then it would be clear that they are all partner contributers to the matrix generation functions.
While we're at it, those listing functions could be in OrderedPitch, OrderedDegree and OrderedPozition modules, perhaps.