Is it possible to convert a NumPy 1 pickle file into a generic pickle
file that works in both NumPy 1 and 2? As far as I understand, pickle
is Turing complete, so I imagine it should be theoretically possible,
but I don't know how easy it would be to actually do this or how it
would affect the pickle file size.

Aaron Meurer

On Fri, Oct 6, 2023 at 10:17 AM Nathan <nathan.goldb...@gmail.com> wrote:
>
> Hi all,
>
> As part of the ongoing work on NEP 52 we are getting close to merging the 
> pull request that changes numpy.core to numpy._core.
>
> While working on this we realized that numpy pickle files include paths to 
> np.core in the pickle data. If we do nothing, switching np.core to np._core 
> will generate deprecation warnings when loading pickle files generated by 
> Numpy 1.x in Numpy 2.x and Numpy 1.x will be unable to read Numpy 2.x pickle 
> files. Eventually, when Numpy 2.x completely removes the stub np.core module, 
> loading old pickle files will break.
>
> The fix we have come up with is to add a new public NumpyUnpickler class to 
> both the main branch and the Numpy 1.26 maintenance branch. This allows 
> loading pickle files that were generated by Numpy 1.x and 2.x in either 
> version without any warnings or errors. Users who are loading old pickle 
> files will need to update their code to use NumpyUnpickler or create new 
> pickle files and users who generate pickles with numpy 2.x will need to use 
> NumpyUnpickler to read the files in numpy 1.x.
>
> We are using NumpyUnpickler internally for loading files in the npy file 
> format. Users with pickle data saved in npy files won't see warnings. Only 
> users who are storing data in pickle files directly and who want pickle files 
> written in one numpy version to load correctly in another numpy version will 
> run into trouble. The I/O docs already explicitly discourage using pickles to 
> share data files between people and organizations like this.
>
> An alternate approach which would require less work for users would be to 
> leave a limited subset of functionality in `np.core` needed for loading 
> pickle files undeprecated. We would prefer to avoid doing this both because 
> it would leave behind a publicly visible `np.core` module in NumPy's public 
> API and because we're not sure if we can come up with a complete set of 
> imports that should be allowed without warning from `np.core` without missing 
> some corner cases and users will see deprecation warnings when loading 
> pickles anyway.
>
> See https://github.com/numpy/numpy/pull/24866, 
> https://github.com/numpy/numpy/issues/24844, and the discussion in 
> https://github.com/numpy/numpy/pull/24634 for more context.
>
> -Nathan
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: asmeu...@gmail.com
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to