I want to scale an Object along its local Axis and the return it to its initial scale using the global Axis
import bpy

bpy.ops.transform.resize(value=(1, 2, 1), orient_type='LOCAL')
obj = bpy.context.selected_pose_bones[0]
mat = obj.matrix.to_3x3()
print(mat)
bpy.ops.transform.resize(value=(1, .5, 1), orient_type='GLOBAL', orient_matrix=mat)

This works and I am going to try and explain this. I am sort of newb here so bear with me, and by all means correct me in the comments if I am wrong.
Each translated, scaled or rotated object has a matrix that describes its relation to its original or &quot;initial&quot; coordinates in 3d space.
The way matrices work is they take each vertex's 'initial&quot; coordinates and multiply them by a matrix, giving the vertices new coordinates. Before the any movement of the object happens the object simply has its original or &quot;initial&quot; coordinates located around the origin, Like how when you add a new object it always appears straight up and down and is usually in the center. If you transform rotate or scale the object, then that objects vertices will now be calculated using matrices, until of course, you apply (ctrl A) the scale rotation or position, which will change the &quot;initial&quot; coordinates of the object. Before that the matrices which are being used to describe the objects scale, location and rotation are stored in the object and are available to through the python API.
So what is happening here, is I am getting the bones rotational matrix and applying it to the scale command. So I am scaling in the direction specified by the rotation matrix, which describes the objects rotation from its &quot;initial&quot; coordinates.
But because of the way the matrices are stored, meaning that they include not only the rotational information but also the translation information, I have to use the .to_3x3() to isolate the the rotational part of the transformation.