I have a python com object which contains a method to inverse an array
in vb 6 the definition of the class is :
class Fop:
_public_methods_ = [ 'SqVal' ]
def SqVal(self,*val):
#vol=(val[0][0],val[0][1])
#mat1=mat((vol))
#up=linalg.inv(mat1)
return str(val)#up
_reg_verprogid_ = "Python.Fop.3"
_reg_progid_ = "Python.Fop"
_reg_desc_ = "Python Fop"
_reg_clsid_ = "{30BD3490-2632-11cf-AD5B-524153480001}"
I pass to this method an array of variant which is the matrix to
invert like that:
vb6 code :
Set obj = CreateObject("Python.Fop")
Dim ty(1, 1) As Variant
ty(0, 0) = 1
ty(1, 0) = 2
ty(0, 1) = 3
ty(1, 1) = 4
toto = obj.SqVal(ty)
when I dispaly toto as str(val) I obtain the following tuple "(((1,
3), (2, 4)),)" which is not usable ....
Do you have an idea to explain this strange behaviour ?
thank you ! 5 3851
En Thu, 03 May 2007 04:54:43 -0300, vml <vi***********@gmail.comescribió:
I have a python com object which contains a method to inverse an array
in vb 6 the definition of the class is :
class Fop:
_public_methods_ = [ 'SqVal' ]
def SqVal(self,*val):
#vol=(val[0][0],val[0][1])
#mat1=mat((vol))
#up=linalg.inv(mat1)
return str(val)#up
_reg_verprogid_ = "Python.Fop.3"
_reg_progid_ = "Python.Fop"
_reg_desc_ = "Python Fop"
_reg_clsid_ = "{30BD3490-2632-11cf-AD5B-524153480001}"
I pass to this method an array of variant which is the matrix to
invert like that:
vb6 code :
Set obj = CreateObject("Python.Fop")
Dim ty(1, 1) As Variant
ty(0, 0) = 1
ty(1, 0) = 2
ty(0, 1) = 3
ty(1, 1) = 4
toto = obj.SqVal(ty)
when I dispaly toto as str(val) I obtain the following tuple "(((1,
3), (2, 4)),)" which is not usable ....
Do you have an idea to explain this strange behaviour ?
This is the expected behaviour. Writing it completely in Python:
pydef SqVal(*val):
.... return str(val)
....
pyty=((1,3),(2,4))
pySqVal(ty)
'(((1, 3), (2, 4)),)'
The *val parameter receives a tuple, whose elements are the positional
arguments used when calling the function. As you call the function with a
single argument, val receives a tuple with a single element.
Perhaps you want to write it as:
pydef SqVal(val):
.... print val[0][0]
.... print val[0][1]
.... print val[1][0]
.... print val[1][1]
....
pySqVal(ty)
1
3
2
4
(Of course, if used as a Fop method, dont forget the "self" parameter)
--
Gabriel Genellina
On 3 mai, 14:20, "Gabriel Genellina" <gagsl-...@yahoo.com.arwrote:
En Thu, 03 May 2007 04:54:43 -0300, vml <victor.leb...@gmail.comescribió:
I have a python com object which contains a method to inverse an array
in vb 6 the definition of the class is :
class Fop:
_public_methods_ = [ 'SqVal' ]
def SqVal(self,*val):
#vol=(val[0][0],val[0][1])
#mat1=mat((vol))
#up=linalg.inv(mat1)
return str(val)#up
_reg_verprogid_ = "Python.Fop.3"
_reg_progid_ = "Python.Fop"
_reg_desc_ = "Python Fop"
_reg_clsid_ = "{30BD3490-2632-11cf-AD5B-524153480001}"
I pass to this method an array of variant which is the matrix to
invert like that:
vb6 code :
Set obj = CreateObject("Python.Fop")
Dim ty(1, 1) As Variant
ty(0, 0) = 1
ty(1, 0) = 2
ty(0, 1) = 3
ty(1, 1) = 4
toto = obj.SqVal(ty)
when I dispaly toto as str(val) I obtain the following tuple "(((1,
3), (2, 4)),)" which is not usable ....
Do you have an idea to explain this strange behaviour ?
This is the expected behaviour. Writing it completely in Python:
pydef SqVal(*val):
... return str(val)
...
pyty=((1,3),(2,4))
pySqVal(ty)
'(((1, 3), (2, 4)),)'
The *val parameter receives a tuple, whose elements are the positional
arguments used when calling the function. As you call the function with a
single argument, val receives a tuple with a single element.
Perhaps you want to write it as:
pydef SqVal(val):
... print val[0][0]
... print val[0][1]
... print val[1][0]
... print val[1][1]
...
pySqVal(ty)
1
3
2
4
(Of course, if used as a Fop method, dont forget the "self" parameter)
--
Gabriel Genellina
I just tried to replace the *val by SqVal(self,val) and call the
method in vb but it crashes down :
"when refilling safe array the sequence must have the same number of
dimension as the existing array"
my python code is now :
def SqVal(self,val):
## volr=[val[0][0][i] for i in range(size(val,2))]
## voli=[val[0][1][i] for i in range(size(val,2))]
## mat1=mat(volr)+1j*mat(voli)
## up=linalg.pinv(mat1)
## out=up.real.tolist()
## out.extend(up.imag.tolist())
return val
By the way Do you have any idea to debug the com server script ? ( I
would like to know if a can access the value in the function while
calling it from vb 6)
tahnks a lot !
vml wrote:
On 3 mai, 14:20, "Gabriel Genellina" <gagsl-...@yahoo.com.arwrote:
>En Thu, 03 May 2007 04:54:43 -0300, vml <victor.leb...@gmail.comescribió:
>>I have a python com object which contains a method to inverse an array in vb 6 the definition of the class is : class Fop: _public_methods_ = [ 'SqVal' ] def SqVal(self,*val): #vol=(val[0][0],val[0][1]) #mat1=mat((vol)) #up=linalg.inv(mat1) return str(val)#up _reg_verprogid_ = "Python.Fop.3" _reg_progid_ = "Python.Fop" _reg_desc_ = "Python Fop" _reg_clsid_ = "{30BD3490-2632-11cf-AD5B-524153480001}" I pass to this method an array of variant which is the matrix to invert like that: vb6 code : Set obj = CreateObject("Python.Fop") Dim ty(1, 1) As Variant ty(0, 0) = 1 ty(1, 0) = 2 ty(0, 1) = 3 ty(1, 1) = 4 toto = obj.SqVal(ty) when I dispaly toto as str(val) I obtain the following tuple "(((1, 3), (2, 4)),)" which is not usable .... Do you have an idea to explain this strange behaviour ?
This is the expected behaviour. Writing it completely in Python:
pydef SqVal(*val): ... return str(val) ... pyty=((1,3),(2,4)) pySqVal(ty) '(((1, 3), (2, 4)),)'
The *val parameter receives a tuple, whose elements are the positional arguments used when calling the function. As you call the function with a single argument, val receives a tuple with a single element. Perhaps you want to write it as:
pydef SqVal(val): ... print val[0][0] ... print val[0][1] ... print val[1][0] ... print val[1][1] ... pySqVal(ty) 1 3 2 4
(Of course, if used as a Fop method, dont forget the "self" parameter)
-- Gabriel Genellina
I just tried to replace the *val by SqVal(self,val) and call the
method in vb but it crashes down :
"when refilling safe array the sequence must have the same number of
dimension as the existing array"
my python code is now :
def SqVal(self,val):
## volr=[val[0][0][i] for i in range(size(val,2))]
## voli=[val[0][1][i] for i in range(size(val,2))]
## mat1=mat(volr)+1j*mat(voli)
## up=linalg.pinv(mat1)
## out=up.real.tolist()
## out.extend(up.imag.tolist())
return val
By the way Do you have any idea to debug the com server script ? ( I
would like to know if a can access the value in the function while
calling it from vb 6)
tahnks a lot !
Debugging COM objects is best done using logging module or at least
writing to a file during processing. You can review the log file
to see what was going on.
-Larry
En Thu, 03 May 2007 09:41:57 -0300, vml <vi***********@gmail.comescribió:
On 3 mai, 14:20, "Gabriel Genellina" <gagsl-...@yahoo.com.arwrote:
>En Thu, 03 May 2007 04:54:43 -0300, vml <victor.leb...@gmail.com> escribió:
I have a python com object which contains a method to inverse an array
in vb 6 the definition of the class is :
I just tried to replace the *val by SqVal(self,val) and call the
method in vb but it crashes down :
"when refilling safe array the sequence must have the same number of
dimension as the existing array"
That can't happen with your Python code below, so it must be on the
caller. Maybe you wrote something like: xx=something.SqVal(yy) and xx,yy
are declared of different sizes.
def SqVal(self,val):
## ...
return val
By the way Do you have any idea to debug the com server script ? ( I
would like to know if a can access the value in the function while
calling it from vb 6)
Write a log file as suggested, or use OutputDebugString with the DebugView
program from www.sysinternals.com
--
Gabriel Genellina
On 4 mai, 06:56, "Gabriel Genellina" <gagsl-...@yahoo.com.arwrote:
En Thu, 03 May 2007 09:41:57 -0300,vml<victor.leb...@gmail.comescribió:
On 3 mai, 14:20, "Gabriel Genellina" <gagsl-...@yahoo.com.arwrote:
En Thu, 03 May 2007 04:54:43 -0300,vml<victor.leb...@gmail.com>
escribió:
I have a python com object which contains a method to inverse an array
in vb 6 the definition of the class is :
I just tried to replace the *val by SqVal(self,val) and call the
method in vb but it crashes down :
"when refilling safe array the sequence must have the same number of
dimension as the existing array"
That can't happen with your Python code below, so it must be on the
caller. Maybe you wrote something like: xx=something.SqVal(yy) and xx,yy
are declared of different sizes.
It is true that I call the python routine like that in vb :
toto = obj.SqVal(ty)
If I am understanding well I need to pass an array of 2x2 and I should
retireve an array of variant of 2x2 ....
I tried to do that :
vb6 :
Dim obj As Object
Dim toto(1, 1, 2) As Variant
Set obj = CreateObject("Python.Fop")
Dim ty(1, 1, 2) As Variant
ty(0, 0, 0) = 1
ty(0, 1, 0) = 2
ty(0, 0, 1) = 3
ty(0, 0, 2) = 7
ty(0, 1, 1) = 4
ty(0, 1, 2) = 45
ty(1, 0, 0) = 1
ty(1, 1, 0) = 2
ty(1, 0, 1) = 3
ty(1, 0, 2) = 7
ty(1, 1, 1) = 4
ty(1, 1, 2) = 45
toto = obj.SqVal(ty)
but it is saying that the compiler can not assign the array toto at
the line toto=obj.SqVal().... hum strange .....
any ideas ?
Thank you for your help !
def SqVal(self,val):
## ...
return val
By the way Do you have any idea to debug the com server script ? ( I
would like to know if a can access the value in the function while
calling it from vb 6)
Write a log file as suggested, or use OutputDebugString with the DebugView
program fromwww.sysinternals.com
--
Gabriel Genellina
This discussion thread is closed Replies have been disabled for this discussion. Similar topics
5 posts
views
Thread by Matt Smith |
last post: by
|
reply
views
Thread by Dave |
last post: by
|
3 posts
views
Thread by Annie |
last post: by
|
2 posts
views
Thread by Raoul |
last post: by
|
reply
views
Thread by mb3242 |
last post: by
|
2 posts
views
Thread by Ken Layton |
last post: by
|
3 posts
views
Thread by Mark |
last post: by
|
reply
views
Thread by dwinson |
last post: by
|
6 posts
views
Thread by Rafe |
last post: by
| | | | | | | | | | |