class_docstr: Blurs the image by setting each pixel to the average value of the pixels
  in a square box extending radius pixels in each direction.
  Supports float radius of arbitrary size. Uses an optimized implementation
  which runs in linear time relative to the size of the image
  for any radius value.
  
  :param radius: Size of the box in a direction. Either a sequence of two numbers for
                 x and y, or a single number for both.
  
                 Radius 0 does not blur, returns an identical image.
                 Radius 1 takes 1 pixel in each direction, i.e. 9 pixels in total.
class_docstr_tok: ["Blurs","the","image","by","setting","each","pixel","to","the","average","value","of","the","pixels","in","a","square","box","extending","radius","pixels","in","each","direction",".","Supports","float","radius","of","arbitrary","size",".","Uses","an","optimized","implementation","which","runs","in","linear","time","relative","to","the","size","of","the","image","for","any","radius","value",".",":","param","radius",":","Size","of","the","box","in","a","direction",".","Either","a","sequence","of","two","numbers","for","x","and","y",",","or","a","single","number","for","both",".","Radius","0","does","not","blur",",","returns","an","identical","image",".","Radius","1","takes","1","pixel","in","each","direction",",","i.e",".","9","pixels","in","total","."]
code: def filter(self, image):
      xy = self.radius
      if not isinstance(xy, (tuple, list)):
          xy = (xy, xy)
      if xy == (0, 0):
          return image.copy()
      return image.box_blur(xy)
  
imports: from __future__ import annotations
  import functools
label_desc: Use image node_id 2 for calling the BoxBlur obj's underlying member method code with example usage: obj.filter(image) and returns: image, image