I think this is more of what you want:
def getPoints(geo):
sel = om.MSelectionList()
dagNode = om.MDagPath()
sel.add(geo)
sel.getDagPath(0,dagNode)
dagNode.extendToShape()
fnMesh = om.MFnMesh(dagNode.node())
vts=om.MPointArray()
fnMesh.getPoints(vts, om.MSpace.kObject)
return dagNode, vts
def findDiff(vtsA, vtsB):
numVerts = vtsB.length()
diff = om.MVectorArray(numVerts)
for i in xrange(numVerts):
diff[i] = vtsB[i] - vtsA[i]
return diff
def setPoints(dagNode, deltas):
dagNode.extendToShape()
fnMesh = om.MFnMesh(dagNode.node())
pts = om.MPointArray()
fnMesh.getPoints(pts, om.MSpace.kObject)
for i in xrange(pts.length()):
pts[i] += deltas[i]
fnMesh.setPoints(pts, om.MSpace.kObject)
but it's not going to give you a great result, since those deltas are being applied as world space, and not surface relative.
however, you could very easily just use the muscular male as a blendshape target for the neutral male. delete the connection. Then just plug the outMesh of the female neutral into the inMesh of the male neutral. delete the connection. Then turn on the blendshape to 1. You will have the muscular female shape you're looking for.
goodluck!