title: 'numpy.float64' object cannot be interpreted as an integer, but I can't identify where it asks for an integer
body: <p>I encounter this error message <code>'numpy.float64' object cannot be interpreted as an integer</code>when running the following code:</p>
  
  <pre><code>from scipy.integrate import nquad
  from numpy import sqrt, sin, cos, pi, arcsin, maximum, log, log10, exp
  from matplotlib.pyplot import xscale, yscale, plot, show, savefig
  
  #define constants
  msun=1500
  m1=30*msun
  m2=30*msun
  M=m1+m2
  eta=m1*m2/M**2
  mSMBH=4.2*10**6*msun
  v=5/10**4
  pc=3.09*10**16
  r0=1.005*10**21              #nfw parameter#
  rho0=1.27/10**49             #nfw parameter#
  pmtpy=3*10**8*365*24*3600    #rate from per-meter to per-yr
  rhoc=1.35*10**(-53)
  cm=2.16
  
  #define functions
  def g(x):
      return log(1+x)-x/(1+x)
  def y(x):
      return 1.43*10**12*1500/x
  def sig(x):
      return 13.216*y(x)**0.41/(1+1.102*y(x)**0.2+6.22*y(x)**0.333)
  def c(x):
      return 2.881*(1+(sig(x)/1.257)**1.022)*exp(0.06/sig(x)**2)
  def r0(x):
      return (3*x/(800*c(x)**3*rhoc*pi))**(1/3)
  def rho0(x):
      return 200*rhoc*c(x)**3/3/g(c(x))
  def sigma(x):
      return sqrt(4*pi*rho0(x)*r0(x)**2*g(cm)/cm)
  def mSMBH(x):
      return 1500*10**(8.15+4.38*log10(1500*sigma(x)))
  def rcap(x):
      return 8*mSMBH(x)
  
  def Rsp(x):
      return 0.122*sqrt(mSMBH(x)/rho0(x)/r0(x))
  def rhosp(r,x):
      return 3*rho0(x)*r0(x)*Rsp(x)**(4/3)*(1-rcap(x)/r)**3/r**(7/3)
  
  #x,y,z are to be integrated, and m is the x-axis parameter to be searched through using while loop
  def v(z,m):
      return sqrt(mSMBH(m)/z)
  def vrel(y,z,m):
      return 2*v(z,m)*sin(y/2)
  def vcm(y,z,m):
      return 2*v(z,m)*cos(y/2)
  def bmin(y,z,m):
      return 2*M/vrel(y,z,m)
  def bmax(y,z,m):
      return maximum(bmin(y,z,m), M*(340*eta/(3*cos(1)*vrel(y,z,m)**9))**(1/7))
  def a(x,y,z,m):
      if bmax(y,z,m)&gt;bmin(y,z,m):
          return M/(vrel(y,z,m)**2*((bmax(y,z,m)/x)**7-1))
      else:
          return 0
  def rt(x,y,z,m):
      return a(x,y,z,m)*(mSMBH(m)/M)**(1/3)
  def rd(x,y,z,m):
      return maximum(rcap(m),rt(x,y,z,m))
  def rz(x,y,z,m):
      return rd(x,y,z,m)*(sqrt(1+8*mSMBH(m)/(rd(x,y,z,m)*vcm(y,z,m)**2))-1)/2
  def thetal(x,y,z,m):
      if rd(x,y,z,m)&lt;z and rz(x,y,z,m)&lt;z:
          return arcsin(rd(x,y,z,m)*sqrt(2*(vcm(y,z,m)**2/2-mSMBH(m)/z+mSMBH(m)/rd(x,y,z,m)))/(vcm(y,z,m)*z))
      else:
          return pi/2
  
  #prepare looping tools    
  m=10**9*msun
  M=[]           #x value array
  Rate=[]        #result estimation array
  RateUp=[]      #result upper bound array
  RateDown=[]    #result lower bound array
  options={'limit':200}
  
  while m&lt;10**14*msun:
      def zbound():
          return [rcap(m),Rsp(m)]
      def ybound(z_foo):
          return [10**(-10),pi-10**(-10)]
      def xbound(y,z):
          return [bmin(y,z,m)-10**(-6),bmax(y,z,m)-10**(-6)]
      def f(x,y,z):
          return pmtpy*8*pi**2*v(z,m)/m1**2*rhosp(z,m)**2*z**2*sin(y/2)**2*cos(y/2)*x*cos(thetal(x,y,z,m))
      ans=nquad(f, [xbound,ybound,zbound],opts=[options,options,options])   
      M.append(m)
      Rate.append(ans[0])
      RateUp.append(ans[0]+ans[1])
      RateDown.append(ans[0]-ans[1])
      m+=10**15
  
  xscale('log')
  yscale('log')
  plot(M,Rate,M,RateUp,M,RateDown)
  show() 
  </code></pre>
  
  <p>Basically I am trying to evaluate a triple integral dependent on the parameter m. The error occurs specifically at </p>
  
  <pre><code>    File "C:/Users/user/.spyder-py3/temp.py", line 83, in xbound
          return [bmin(y,z,m)-10**(-6),bmax(y,z,m)-10**(-6)]
      File "C:/Users/user/.spyder-py3/temp.py", line 52, in bmax
          return maximum(bmin(y,z,m), M*(340*eta/(3*cos(1)*vrel(y,z,m)**9))**(1/7))
  
  TypeError: 'numpy.float64' object cannot be interpreted as an integer
  </code></pre>
  
  <p>But I really cannot tell why an integer is in need anywhere in 'bmax' in my code. Any idea what might be the problem? Really appreciate your help!</p>