UCBerkeleySETI / hyperseti

A SETI / technosignature search code to find intelligent life beyond Earth
https://hyperseti.readthedocs.io
10 stars 4 forks source link

TypeError: spectral_kurtosis() got multiple values for argument 'metadata' #61

Closed texadactyl closed 2 years ago

texadactyl commented 2 years ago

In pytest test/test_kurtosis.py, hyperseti/utils.py:81 experienced a TypeError.

test/test_kurtosis.py:20:

hyperseti/utils.py:175: in inner of _datwrapper

        # OUTPUT MODIFYING
        output = func(*args, **kwargs)

Details from pytest:

args = (<HDF5 dataset "data": shape (16, 1, 1048576), type "<f4">, {'frequency_start': <Quantity 8421.38671875 MHz>, 'frequency_step': <Quantity -2.79396772e-06 MHz>, 'time_step': <Quantity 18.25361101 s>})
kwargs = {'metadata': {'feed_id_start': <Quantity 0.>, 'feed_id_step': <Quantity 0.>, 'frequency_start': <Quantity 8421.38671735 MHz>, 'frequency_step': <Quantity -2.79396772e-06 MHz>, ...}}
new_args = [array([[[4.7153664e+09, 5.0594243e+09, 5.2598994e+09, ...,
         5.5999278e+09, 4.8248212e+09, 5.1364244e+09]],

 ...<Quantity 8421.38671875 MHz>, 'frequency_step': <Quantity -2.79396772e-06 MHz>, 'time_step': <Quantity 18.25361101 s>}], idx = 1
arg = {'frequency_start': <Quantity 8421.38671875 MHz>, 'frequency_step': <Quantity -2.79396772e-06 MHz>, 'time_step': <Quantity 18.25361101 s>}, argname = 'metadata', return_space = None

    @wraps(func)
    def inner(*args, **kwargs):
        new_args = []
        logger.debug(f"{func_name} on_gpu inner, args: {args}")
        for idx, arg in enumerate(args):
            argname = func_params[idx]
            if isinstance(arg, np.ndarray):
                logger.info(f"<{func_name}> Converting ndarray arg {argname} to cupy..")
                if arg.dtype != np.dtype('float32'):
                    logger.warning(f"<{func_name}> Arg {argname} is not float32, could cause issues...")
                arg = cp.asarray(arg)
            elif hasattr(arg, '__array__'):
                # Duck-type numpy array
                logger.info(f"<{func_name}> Converting numpy-like arg {argname} to cupy..")
                if arg.dtype != np.dtype('float32'):
                    warnings.warn(f"<{func_name}> Arg {argname} is not float32, could cause issues...", RuntimeWarning)
                arg = cp.asarray(arg)
            if isinstance(arg, DataArray):
                logger.info(f"<{func_name}> Converting arg {argname}.data to cupy..")
                if arg.data.dtype != np.dtype('float32'):
                    warnings.warn(f"<{func_name}> Arg {argname}.data is not float32, could cause issues...", RuntimeWarning)
                arg.data = cp.asarray(arg.data)
            new_args.append(arg)

        return_space = None
        if 'return_space' in kwargs:
            logger.debug(f"<{func_name}> Return space requested: {kwargs['return_space']}")
            return_space = kwargs.pop('return_space')
            assert return_space in ('cpu', 'gpu')
>       output = func(*new_args, **kwargs)
E       TypeError: spectral_kurtosis() got multiple values for argument 'metadata'
texadactyl commented 2 years ago

Verified fixed!