class_docstr: Tile sizes parameterizing SplashAttention kernels.
  
  Those parameters have negligible effect on numerics, but affect performance
  greatly.
  
  Note that changing the layouts only influences the physical layout that the
  kernel will enforce. The logical interface to splash attention always takes
  the head dimension as the minormost one.
class_docstr_tok: ["Tile","sizes","parameterizing","SplashAttention","kernels",".","Those","parameters","have","negligible","effect","on","numerics",",","but","affect","performance","greatly",".","Note","that","changing","the","layouts","only","influences","the","physical","layout","that","the","kernel","will","enforce",".","The","logical","interface","to","splash","attention","always","takes","the","head","dimension","as","the","minormost","one","."]
code: def has_backward_blocks(self) -> bool:
      backward_blocks = (
          self.block_q_dkv,
          self.block_kv_dkv,
          self.block_kv_dkv_compute,
      )
      if not self.use_fused_bwd_kernel:
          backward_blocks += (self.block_q_dq, self.block_kv_dq)
      return all(b is not None for b in backward_blocks)
  
imports: from __future__ import annotations
  import dataclasses
  import enum
  import functools
  from typing import Any, Callable, Literal, NamedTuple, Union, Optional, overload
  import jax
  from jax import ad_checkpoint
  from jax import lax
  from jax import tree_util
  from jax.experimental import pallas
  from jax.experimental.pallas import tpu
  from jax.experimental.pallas.ops.tpu.splash_attention import splash_attention_mask
  from jax.experimental.pallas.ops.tpu.splash_attention import splash_attention_mask_info
  import jax.numpy
  import numpy
label_desc: Use image node_id 2 for calling the BlockSizes obj's underlying member method code with example usage: obj.has_backward_blocks() and returns: all