docs: def tracers(tracersfile):
      """Extract tracers data.
  
      Args:
          tracersfile (:class:`pathlib.Path`): path of the binary tracers file.
  
      Returns:
          dict of list of numpy.array:
              Tracers data organized by attribute and block.
      """
      if not tracersfile.is_file():
          return None
      tra = {}
      with tracersfile.open('rb') as fid:
          readbin = partial(_readbin, fid)
          magic = readbin()
          if magic > 8000:  # 64 bits
              magic -= 8000
              readbin()
              readbin = partial(readbin, file64=True)
          if magic < 100:
              raise ParsingError(tracersfile,
                                 'magic > 100 expected to get tracervar info')
          nblk = magic % 100
          readbin('f', 2)  # aspect ratio
          readbin()  # istep
          readbin('f')  # time
          ninfo = readbin()
          ntra = readbin(nwords=nblk, unpack=False)
          readbin('f')  # tracer ideal mass
          curv = readbin()
          if curv:
              readbin('f')  # r_cmb
          infos = []  # list of info names
          for _ in range(ninfo):
              infos.append(b''.join(readbin('b', 16)).strip().decode())
              tra[infos[-1]] = []
          if magic > 200:
              ntrace_elt = readbin()
              if ntrace_elt > 0:
                  readbin('f', ntrace_elt)  # outgassed
          for ntrab in ntra:  # blocks
              data = readbin('f', ntrab * ninfo)
              for idx, info in enumerate(infos):
                  tra[info].append(data[idx::ninfo])
      return tra