code: def bwd_filter_algo_supports_dtype_config(
      self, algo, dtype, precision, ndim
  ):
      # NB: Theano does not support float16 precision anymore for backward cuDNN convolutions.
      if is_true_half_config(dtype, precision):
          return False
      algorithms = self.cudnnConvolutionBwdFilterAlgo_t
      algo = algorithms.fromalias(algo)
      if algo == algorithms.CUDNN_CONVOLUTION_BWD_FILTER_ALGO_0:
          return not is_true_half_config(dtype, precision)
      if algo == algorithms.CUDNN_CONVOLUTION_BWD_FILTER_ALGO_1:
          return ndim == 2
      if algo == algorithms.CUDNN_CONVOLUTION_BWD_FILTER_ALGO_FFT:
          return ndim == 2 and (
              is_pseudo_half_config(dtype, precision)
              or is_float_config(dtype, precision)
          )
      if algo == algorithms.CUDNN_CONVOLUTION_BWD_FILTER_ALGO_3:
          return not is_true_half_config(dtype, precision)
      if (
          algo
          == algorithms.CUDNN_CONVOLUTION_BWD_FILTER_ALGO_WINOGRAD_NONFUSED
      ):
          # NB: "If wDesc 's filter (height, width) is (5,5), data type config TRUE_HALF_CONFIG is not supported".
          # We could not check it before being in C code.
          return ndim == 2 and not is_double_config(dtype, precision)
      return False
  
file_path: Theano/theano/gpuarray/cudnn_defs.py
imports: from __future__ import absolute_import, print_function, division
  from theano.gof import CEnumType
label_desc: Use image node_id 3 for calling the CuDNNV51 obj's underlying member method code with example usage: obj.bwd_filter_algo_supports_dtype_config(algo, dtype, precision, ndim) and returns: False, False, unknown, unknown, unknown, unknown, unknown