(f, device=torch.device('cpu'), normalize=True, flip_filter=False, gain=1, separable=None)
return f
r"""Convenience function to setup 2D FIR filter for `upfirdn2d()`.

    Args:
        f:           Torch tensor, numpy array, or python list of the shape
                     `[filter_height, filter_width]` (non-separable),
                     `[filter_taps]` (separable),
                     `[]` (impulse), or
                     `None` (identity).
        device:      Result device (default: cpu).
        normalize:   Normalize the filter so that it retains the magnitude
                     for constant input signal (DC)? (default: True).
        flip_filter: Flip the filter? (default: False).
        gain:        Overall scaling factor for signal magnitude (default: 1).
        separable:   Return a separable filter? (default: select automatically).

    Returns:
        Float32 tensor of the shape
        `[filter_height, filter_width]` (non-separable) or
        `[filter_taps]` (separable).
r"""Convenience function to setup 2D FIR filter for `upfirdn2d()`.
r Convenience function to setup 2D FIR filter for upfirdn2d () .
def setup_filter(f, device=torch.device('cpu'), normalize=True, flip_filter=False, gain=1, separable=None):
    r"""Convenience function to setup 2D FIR filter for `upfirdn2d()`.

    Args:
        f:           Torch tensor, numpy array, or python list of the shape
                     `[filter_height, filter_width]` (non-separable),
                     `[filter_taps]` (separable),
                     `[]` (impulse), or
                     `None` (identity).
        device:      Result device (default: cpu).
        normalize:   Normalize the filter so that it retains the magnitude
                     for constant input signal (DC)? (default: True).
        flip_filter: Flip the filter? (default: False).
        gain:        Overall scaling factor for signal magnitude (default: 1).
        separable:   Return a separable filter? (default: select automatically).

    Returns:
        Float32 tensor of the shape
        `[filter_height, filter_width]` (non-separable) or
        `[filter_taps]` (separable).
    """
    # Validate.
    if f is None:
        f = 1
    f = torch.as_tensor(f, dtype=torch.float32)
    assert f.ndim in [0, 1, 2]
    assert f.numel() > 0
    if f.ndim == 0:
        f = f[np.newaxis]

    # Separable?
    if separable is None:
        separable = (f.ndim == 1 and f.numel() >= 8)
    if f.ndim == 1 and not separable:
        f = f.ger(f)
    assert f.ndim == (1 if separable else 2)

    # Apply normalize, flip, gain, and device.
    if normalize:
        f /= f.sum()
    if flip_filter:
        f = f.flip(list(range(f.ndim)))
    f = f * (gain ** (f.ndim / 2))
    f = f.to(device=device)
    return f
def setup_filter ( f , device = torch . device ( 'cpu' ) , normalize = True , flip_filter = False , gain = 1 , separable = None ) : # Validate. if f is None : f = 1 f = torch . as_tensor ( f , dtype = torch . float32 ) assert f . ndim in [ 0 , 1 , 2 ] assert f . numel ( ) > 0 if f . ndim == 0 : f = f [ np . newaxis ] # Separable? if separable is None : separable = ( f . ndim == 1 and f . numel ( ) >= 8 ) if f . ndim == 1 and not separable : f = f . ger ( f ) assert f . ndim == ( 1 if separable else 2 ) # Apply normalize, flip, gain, and device. if normalize : f /= f . sum ( ) if flip_filter : f = f . flip ( list ( range ( f . ndim ) ) ) f = f * ( gain ** ( f . ndim / 2 ) ) f = f . to ( device = device ) return f