Cameron Pulsford wrote:
Hey everyone, I am extremely stumped on this. I have 2 functions..

def _determinant(m):
   return m[0][0] * m[1][1] - m[1][0] * m[0][1]

def cofactor(self):
   """Returns the cofactor of a matrix."""
   newmatrix = []
   for i, minor in enumerate(self.minors()):
       newmatrix.append(_determinant(minor.matrix) * ((i%2) * -1))
   return newmatrix

And I get the following error when I try to run a.cofactor()...

"NameError: global name '_determinant' is not defined"

When I put the _determinant function nested within the cofactor function it works fine. Normally I would do this, but a lot of other methods use the _determinant method. They are both in the same class, and they are at the same level, they are even in that order so I know it should be able to see it. I have a lot of functions that call other functions in this class and everything is fine. [Also for the picky, I know my cofactor method isn't mathematically correct yet ;-) ] Am I missing something obvious here? Also if it helps the rest of the code is herehttp://github.com/dlocpuwons/pymath/blob/d1997329e4473f8f6b5c7f11635dbd719d4a14fa/matrix.py though it is not the latest.

Maybe someone has already answered...

Looks like cofactor is in a class, so I'm assuming _determinant is in that class as well.

3 solutions:
- declare _determinant outside of the class, making it a private module function
- declare _determinant as method of the instance : def _determinant(self)
- if you want to keep _determinant as part of your class, it's up to you but you have to declare it as staticmethod (goolge it for details)

For isntance :
class MyClass
 def _determant()m:
    ...
 _determant = staticmethod(_determinant)

 def cofactor(self):
     ...
x = MyClass._determinant(y) # this is how you call static Class method, but rarely these methods are set private (_ prefix)


Jean-Michel
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to