[Numpy-discussion] f2py with int8
Paul Anton Letnes
paul.anton.letnes@gmail....
Wed Apr 18 05:56:53 CDT 2012
Hi,
1, 2, 3 are integer literals.
1.0, 3.0e2, -42.0 are real (float) literals
'hello world' is a string literal.
As far as I remember, f2py requires a literal variable for the kind.
The solution I have landed on is to write a pure fortran module (using int8, or whatever), and then wrap this module either with an f2py compatible fortran module or an interface file.
If you want to know what int8 corresponds to, run the following (pure fortran) program through your compiler of choice:
program kind_values
use iso_fortran_env
implicit none
print *, 'int8 kind value:', int8
print *, 'int16 kind value:', int16
end program kind_values
Paul
On 17. apr. 2012, at 19:47, John Mitchell wrote:
> Thanks Paul.
>
> I suppose this is now going slightly out of bounds for f2py. What I am looking for is the fortran kind type for a byte. I thought that this was int8. I guess the question is how to identify the kind type. Although I have verified that integer(1) seems to work for me, I would really like to know why and your answer alludes to that.
>
> Please excuse my ignorance on this topic. Can you perhaps educate me a little on 'literal kind values'? I take you to mean that
> 'int8' is not a literal kind value while 1 and 8 are examples of literal kind values.
>
> Thanks,
> John
>
>
>
> On Tue, Apr 17, 2012 at 10:12 AM, Paul Anton Letnes <paul.anton.letnes@gmail.com> wrote:
> Ah, come to think of it, I think that f2py only supports literal kind values. Maybe that's your problem.
>
> Paul
>
> On 17. apr. 2012, at 07:58, Sameer Grover wrote:
>
> > On Tuesday 17 April 2012 11:02 AM, John Mitchell wrote:
> >> Hi,
> >>
> >> I am using f2py to pass a numpy array of type numpy.int8 to fortran. It seems like I am misunderstanding something because I just can't make it work.
> >>
> >> Here is what I am doing.
> >>
> >> PYTHON
> >> b=numpy.array(numpy.zeros(shape=(10,),dtype=numpy.int8),order='F')
> >> b[0]=1
> >> b[2]=1
> >> b[3]=1
> >> b
> >> array([1, 0, 1, 1, 0, 0, 0, 0, 0, 0], dtype=int8)
> >>
> >>
> >>
> >> FORTRAN
> >> subroutine print_bit_array(bits,n)
> >> use iso_fortran_env
> >> integer,intent(in)::n
> >> integer(kind=int8),intent(in),dimension(n)::bits
> >> print*,'bits = ',bits
> >> end subroutine print_bit_array
> >>
> >>
> >> RESULT when calling fortran from python
> >> bits = 1 0 0 0 0 0 0 0 1 0
> >>
> >> Any Ideas?
> >> thanks,
> >> John
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> NumPy-Discussion mailing list
> >>
> >> NumPy-Discussion@scipy.org
> >> http://mail.scipy.org/mailman/listinfo/numpy-discussion
> > It seems to work if "integer(kind=int8)" is replaced with "integer(8)" or "integer(1)". Don't know why, though.
> >
> > Sameer
> > _______________________________________________
> > NumPy-Discussion mailing list
> > NumPy-Discussion@scipy.org
> > http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
More information about the NumPy-Discussion
mailing list