code: def pytype_to_deps_hpp(t):
      
      if isinstance(t, List):
          return {'list.hpp'}.union(pytype_to_deps_hpp(t.__args__[0]))
      elif isinstance(t, Set):
          return {'set.hpp'}.union(pytype_to_deps_hpp(t.__args__[0]))
      elif isinstance(t, Dict):
          tkey, tvalue = t.__args__
          return {'dict.hpp'}.union(pytype_to_deps_hpp(tkey),
                                    pytype_to_deps_hpp(tvalue))
      elif isinstance(t, Tuple):
          return {'tuple.hpp'}.union(*[pytype_to_deps_hpp(elt)
                                       for elt in t.__args__])
      elif isinstance(t, NDArray):
          out = {'ndarray.hpp'}
          # it's a transpose!
          if t.__args__[1].start == -1:
              out.add('numpy_texpr.hpp')
          return out.union(pytype_to_deps_hpp(t.__args__[0]))
      elif isinstance(t, Pointer):
          return {'pointer.hpp'}.union(pytype_to_deps_hpp(t.__args__[0]))
      elif isinstance(t, Fun):
          return {'cfun.hpp'}.union(*[pytype_to_deps_hpp(a) for a in t.__args__])
      elif t in PYTYPE_TO_CTYPE_TABLE:
          return {'{}.hpp'.format(t.__name__)}
      else:
          raise NotImplementedError("{0}:{1}".format(type(t), t))
docs: python -> pythonic type hpp filename.