def nquad(func, ranges, args=None, opts=None):
    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).integrate(*args)
Integration over multiple variables.
dataset/ETHPy150Open scipy/scipy/scipy/integrate/quadpack.py/nquad