parameters: (
          self, addrs: typing.Union[int, range]
      )
return_statement: return itertools.chain.from_iterable(
              s.byte_blocks_on(addrs) for s in self.sections
          )
docstring: Finds all the byte blocks that overlap an address or range of
          addresses.
  
          :param addrs: Either a ``range`` object or a single address.
docstring_summary: Finds all the byte blocks that overlap an address or range of
          addresses.
docstring_tokens: Finds all the byte blocks that overlap an address or range of addresses .
function: def byte_blocks_on(
          self, addrs: typing.Union[int, range]
      ) -> typing.Iterable[ByteBlock]:
          """Finds all the byte blocks that overlap an address or range of
          addresses.
  
          :param addrs: Either a ``range`` object or a single address.
          """
  
          return itertools.chain.from_iterable(
              s.byte_blocks_on(addrs) for s in self.sections
          )
function_tokens: def byte_blocks_on ( self , addrs : typing . Union [ int , range ] ) -> typing . Iterable [ ByteBlock ] : return itertools . chain . from_iterable ( s . byte_blocks_on ( addrs ) for s in self . sections )