fill the matrix from Euler angles in radians in 312 convention

def from_euler312(self, roll, pitch, yaw):
        '''fill the matrix from Euler angles in radians in 312 convention'''
        c3 = cos(pitch)
        s3 = sin(pitch)
        s2 = sin(roll)
        c2 = cos(roll)
        s1 = sin(yaw)
        c1 = cos(yaw)

        self.a.x = c1 * c3 - s1 * s2 * s3
        self.b.y = c1 * c2
        self.c.z = c3 * c2
        self.a.y = -c2*s1
        self.a.z = s3*c1 + c3*s2*s1
        self.b.x = c3*s1 + s3*s2*c1
        self.b.z = s1*s3 - s2*c1*c3
        self.c.x = -s3*c2
        self.c.y = s2