The reuse of the single open file doesn't feel quite right to me. It means that if I create an iterator, and partway through the iteration, call dynd_arr() or create another iterator, the state becomes corrupted. Maybe the data descriptor needs to hold a filename instead of an open file handle?