def nquad(func, ranges, args=None, opts=None, full_output=False):
 depth = len(ranges)
 ranges = [(rng if callable(rng) else _RangeFunc(rng)) for rng in ranges]
 if (args is None):
  args = ()
 if (opts is None):
  opts = ([dict([])] * depth)
 if isinstance(opts, dict):
  opts = ([_OptFunc(opts)] * depth)
 else:
  opts = [(opt if callable(opt) else _OptFunc(opt)) for opt in opts]
 return _NQuad(func, ranges, opts, full_output).integrate(*args)

def nquad ( func , ranges , args = None , opts = None , full_output = False ) : depth = len ( ranges ) ranges = [ ( rng if callable ( rng ) else _RangeFunc ( rng ) ) for rng in ranges ] if ( args is None ) : args = ( ) if ( opts is None ) : opts = ( [ dict ( [ ] ) ] * depth ) if isinstance ( opts , dict ) : opts = ( [ _OptFunc ( opts ) ] * depth ) else : opts = [ ( opt if callable ( opt ) else _OptFunc ( opt ) ) for opt in opts ] return _NQuad ( func , ranges , opts , full_output ) . integrate ( * args )
integration over multiple variables .