What is the context or history of having both inplace and copy args everywhere?

First off, thanks for this wonderful tool! I left open science back in 2008, took a round-about tour into tech, and am now coming back. I’m feeling very energized while exploring it :slight_smile:

I’m trying to extend scanpy, and am not sure the missing context here.

  • Is one a historical legacy that is being deprecated?
  • Is it somehow important to working in file-backed processes?

I’m sure I’m not the only developer who’s wondered this, so I’d be happy to submit a pull request to the docs, once I know what’s what :slight_smile:

EDIT: This is the only context I can find, but it doesn’t explain much in my reading: Usage Principles — scanpy .

To facilitate writing memory-efficient pipelines, by default, Scanpy tools operate inplace on adata and return None – this also allows to easily transition to out-of-memory pipelines. If you want to return a copy of the AnnData object and leave the passed adata unchanged, pass copy=True or inplace=False.

Ah hey, I found my answer in the codebase when I was doing some other digging…!

Would the section of “Usage Principles” I linked above be the best place to make this clarification in docs?