Files
mlx/docs/build/doctrees/usage/saving_and_loading.doctree

39 lines
16 KiB
Plaintext
Raw Normal View History

2024-01-17 17:15:29 -08:00
<EFBFBD><05><>@<00>sphinx.addnodes<65><73>document<6E><74><EFBFBD>)<29><>}<7D>(<28> rawsource<63><65><00><>children<65>]<5D>(<28>docutils.nodes<65><73>target<65><74><EFBFBD>)<29><>}<7D>(h<05>.. _saving_and_loading:<3A>h]<5D><>
attributes<EFBFBD>}<7D>(<28>ids<64>]<5D><>classes<65>]<5D><>names<65>]<5D><>dupnames<65>]<5D><>backrefs<66>]<5D><>refid<69><64>saving-and-loading<6E>u<EFBFBD>tagname<6D>h
<EFBFBD>line<6E>K<01>parent<6E>h<03> _document<6E>h<03>source<63><65>A/Users/awnihannun/repos/mlx/docs/src/usage/saving_and_loading.rst<73>ubh <09>section<6F><6E><EFBFBD>)<29><>}<7D>(hhh]<5D>(h <09>title<6C><65><EFBFBD>)<29><>}<7D>(h<05>Saving and Loading Arrays<79>h]<5D>h <09>Text<78><74><EFBFBD><EFBFBD>Saving and Loading Arrays<79><73><EFBFBD><EFBFBD><EFBFBD>}<7D>(h h+h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh)h h&h!hh"h#hKubh <09> paragraph<70><68><EFBFBD>)<29><>}<7D>(h<05>2MLX supports multiple array serialization formats.<2E>h]<5D>h0<68>2MLX supports multiple array serialization formats.<2E><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h h=h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh h&h!hubh <09>table<6C><65><EFBFBD>)<29><>}<7D>(hhh]<5D>(h*)<29><>}<7D>(h<05>Serialization Formats<74>h]<5D>h0<68>Serialization Formats<74><73><EFBFBD><EFBFBD><EFBFBD>}<7D>(h hPh!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh)h"h#hK
h hMubh <09>tgroup<75><70><EFBFBD>)<29><>}<7D>(hhh]<5D>(h <09>colspec<65><63><EFBFBD>)<29><>}<7D>(hhh]<5D>h}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>colwidth<74>Kuhhch h`ubhd)<29><>}<7D>(hhh]<5D>h}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>hnKuhhch h`ubhd)<29><>}<7D>(hhh]<5D>h}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>hnKuhhch h`ubhd)<29><>}<7D>(hhh]<5D>h}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>hnKuhhch h`ubh <09>thead<61><64><EFBFBD>)<29><>}<7D>(hhh]<5D>h <09>row<6F><77><EFBFBD>)<29><>}<7D>(hhh]<5D>(h <09>entry<72><79><EFBFBD>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>Format<61>h]<5D>h0<68>Format<61><74><EFBFBD><EFBFBD><EFBFBD>}<7D>(h h<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh h<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h h<>ubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05> Extension<6F>h]<5D>h0<68> Extension<6F><6E><EFBFBD><EFBFBD><EFBFBD>}<7D>(h h<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh h<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h h<>ubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>Function<6F>h]<5D>h0<68>Function<6F><6E><EFBFBD><EFBFBD><EFBFBD>}<7D>(h h<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh h<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h h<>ubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>Notes<65>h]<5D>h0<68>Notes<65><73><EFBFBD><EFBFBD><EFBFBD>}<7D>(h h<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh h<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h h<>ubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h h<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h h`ubh <09>tbody<64><79><EFBFBD>)<29><>}<7D>(hhh]<5D>(h<>)<29><>}<7D>(hhh]<5D>(h<>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>NumPy<50>h]<5D>h0<68>NumPy<50><79><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh jubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h jubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>``.npy``<60>h]<5D>h <09>literal<61><6C><EFBFBD>)<29><>}<7D>(hj"h]<5D>h0<68>.npy<70><79><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j&h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhj$h j ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh jubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h jubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05> :func:`save`<60>h]<5D>h<00> pending_xref<65><66><EFBFBD>)<29><>}<7D>(hjDh]<5D>j%)<29><>}<7D>(hjDh]<5D>h0<68>save()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jKh!hh"NhNubah}<7D>(h]<5D>h]<5D>(<28>xref<65><66>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h jHubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F><63>usage/saving_and_loading<6E><67> refdomain<69>jV<00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E><EFBFBD> py:module<6C><65>mlx.core<72><65>py:class<73>N<EFBFBD> reftarget<65><74>save<76>uhjFh"h#hKh jBubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh j?ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h jubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>Single arrays only<6C>h]<5D>h0<68>Single arrays only<6C><79><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j|h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh jyubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h jubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h jubh<62>)<29><>}<7D>(hhh]<5D>(h<>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05> NumPy archive<76>h]<5D>h0<68> NumPy archive<76><65><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh j<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h j<>ubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>``.npz``<60>h]<5D>j%)<29><>}<7D>(hj<>h]<5D>h0<68>.npz<70><7A><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhj$h j<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh j<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h j<>ubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>*:func:`savez` and :func:`savez_compressed`<60>h]<5D>(jG)<29><>}<7D>(h<05> :func:`savez`<60>h]<5D>j%)<29><>}<7D>(hj<>h]<5D>h0<68>savez()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h j<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j<EFBFBD><00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00>savez<65>uhjFh"h#hKh j<>ubh0<68> and <20><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubjG)<29><>}<7D>(h<05>:func:`savez_compressed`<60>h]<5D>j%)<29><>}<7D>(hj<>h]<5D>h0<68>savez_compressed()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h j<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j <00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00>savez_compressed<65>uhjFh"h#hKh j<>ubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh j<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h j<>ubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>Multiple arrays<79>h]<5D>h0<68>Multiple arrays<79><73><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j*h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh j'ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h j<>ubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h jubh<62>)<29><>}<7D>(hhh]<5D>(h<>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05> Safetensors<72>h]<5D>h0<68> Safetensors<72><73><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jJh!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKh jGubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h jDubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>``.safetensors``<60>h]<5D>j%)<29><>}<7D>(hjch]<5D>h0<68> .safetensors<72><73><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jeh!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhj$h jaubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h
ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hK h jubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h j<>ubh<62>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(h<05>Multiple arrays<79>h]<5D>h0<68>Multiple arrays<79><73><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hK!h j9ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h j<>ubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h jubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh<>h h`ubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>cols<6C>Kuhh^h hMubeh}<7D>(h]<5D><>id1<64>ah]<5D><>colwidths-given<65>ah]<5D>h]<5D>h]<5D>uhhKh h&h!hh"NhNubh<)<29><>}<7D>(h<05><>The :func:`load` function will load any of the supported serialization
formats. It determines the format from the extensions. The output of
:func:`load` depends on the format.<2E>h]<5D>(h0<68>The <20><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jkh!hh"NhNubjG)<29><>}<7D>(h<05> :func:`load`<60>h]<5D>j%)<29><>}<7D>(hjuh]<5D>h0<68>load()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jwh!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h jsubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j<EFBFBD><00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00>load<61>uhjFh"h#hK#h jkubh0<68>| function will load any of the supported serialization
formats. It determines the format from the extensions. The output of
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jkh!hh"NhNubjG)<29><>}<7D>(h<05> :func:`load`<60>h]<5D>j%)<29><>}<7D>(hj<>h]<5D>h0<68>load()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h j<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j<EFBFBD><00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00>load<61>uhjFh"h#hK#h jkubh0<68> depends on the format.<2E><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jkh!hh"NhNubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hK#h h&h!hubh<)<29><>}<7D>(h<05>5Here's an example of saving a single array to a file:<3A>h]<5D>h0<68>7Heres an example of saving a single array to a file:<3A><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hK'h h&h!hubh <09> literal_block<63><6B><EFBFBD>)<29><>}<7D>(h<05>/>>> a = mx.array([1.0])
>>> mx.save("array", a)<29>h]<5D>h0<68>/>>> a = mx.array([1.0])
>>> mx.save("array", a)<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>h j<>sbah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><> xml:space<63><65>preserve<76><65>force<63><65><EFBFBD>language<67><65>shell<6C><6C>highlight_args<67>}<7D>uhj<>h"h#hK)h h&h!hubh<)<29><>}<7D>(h<05><>The array ``a`` will be saved in the file ``array.npy`` (notice the extension
is automatically added). Including the extension is optional; if it is missing
it will be added. You can load the array with:<3A>h]<5D>(h0<68>
The array <20><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubj%)<29><>}<7D>(h<05>``a``<60>h]<5D>h0<68>a<><61><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhj$h j<>ubh0<68> will be saved in the file <20><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubj%)<29><>}<7D>(h<05> ``array.npy``<60>h]<5D>h0<68> array.npy<70><79><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jh!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhj$h j<>ubh0<68><30> (notice the extension
is automatically added). Including the extension is optional; if it is missing
it will be added. You can load the array with:<3A><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hK.h h&h!hubj<62>)<29><>}<7D>(h<05>5>>> mx.load("array.npy", a)
array([1], dtype=float32)<29>h]<5D>h0<68>5>>> mx.load("array.npy", a)
array([1], dtype=float32)<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>h jsbah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>j<EFBFBD>j<>j<><00>j<EFBFBD><00>shell<6C>j<EFBFBD>}<7D>uhj<>h"h#hK2h h&h!hubh<)<29><>}<7D>(h<05><Here's an example of saving several arrays to a single file:<3A>h]<5D>h0<68>>Heres an example of saving several arrays to a single file:<3A><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j(h!hh"NhNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hK7h h&h!hubj<62>)<29><>}<7D>(h<05>N>>> a = mx.array([1.0])
>>> b = mx.array([2.0])
>>> mx.savez("arrays", a, b=b)<29>h]<5D>h0<68>N>>> a = mx.array([1.0])
>>> b = mx.array([2.0])
>>> mx.savez("arrays", a, b=b)<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>h j6sbah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>j<EFBFBD>j<>j<><00>j<EFBFBD><00>shell<6C>j<EFBFBD>}<7D>uhj<>h"h#hK9h h&h!hubh<)<29><>}<7D>(h<05><>For compatibility with :func:`numpy.savez` the MLX :func:`savez` takes arrays
as arguments. If the keywords are missing, then default names will be
provided. This can be loaded with:<3A>h]<5D>(h0<68>For compatibility with <20><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jFh!hh"NhNubjG)<29><>}<7D>(h<05>:func:`numpy.savez`<60>h]<5D>j%)<29><>}<7D>(hjPh]<5D>h0<68> numpy.savez()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jRh!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h jNubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j\<00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00> numpy.savez<65>uhjFh"h#hK?h jFubh0<68> the MLX <20><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jFh!hh"NhNubjG)<29><>}<7D>(h<05> :func:`savez`<60>h]<5D>j%)<29><>}<7D>(hjth]<5D>h0<68>savez()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jvh!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h jrubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j<EFBFBD><00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00>savez<65>uhjFh"h#hK?h jFubh0<68>v takes arrays
as arguments. If the keywords are missing, then default names will be
provided. This can be loaded with:<3A><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jFh!hh"NhNubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hK?h h&h!hubj<62>)<29><>}<7D>(h<05>^>>> mx.load("arrays.npz")
{'b': array([2], dtype=float32), 'arr_0': array([1], dtype=float32)}<7D>h]<5D>h0<68>^>>> mx.load("arrays.npz")
{'b': array([2], dtype=float32), 'arr_0': array([1], dtype=float32)}<7D><><EFBFBD><EFBFBD><EFBFBD>}<7D>h j<>sbah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>j<EFBFBD>j<>j<><00>j<EFBFBD><00>shell<6C>j<EFBFBD>}<7D>uhj<>h"h#hKCh h&h!hubh<)<29><>}<7D>(h<05>BIn this case :func:`load` returns a dictionary of names to arrays.<2E>h]<5D>(h0<68> In this case <20><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubjG)<29><>}<7D>(h<05> :func:`load`<60>h]<5D>j%)<29><>}<7D>(hj<>h]<5D>h0<68>load()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h j<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j<EFBFBD><00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00>load<61>uhjFh"h#hKHh j<>ubh0<68>) returns a dictionary of names to arrays.<2E><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKHh h&h!hubh<)<29><>}<7D>(h<05><>The functions :func:`save_safetensors` and :func:`save_gguf` are similar to
:func:`savez`, but they take as input a :obj:`dict` of string names to arrays:<3A>h]<5D>(h0<68>The functions <20><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubjG)<29><>}<7D>(h<05>:func:`save_safetensors`<60>h]<5D>j%)<29><>}<7D>(hj<>h]<5D>h0<68>save_safetensors()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h j<>ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j<EFBFBD><00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00>save_safetensors<72>uhjFh"h#hKJh j<>ubh0<68> and <20><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubjG)<29><>}<7D>(h<05>:func:`save_gguf`<60>h]<5D>j%)<29><>}<7D>(hj h]<5D>h0<68> save_gguf()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jh!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h j
ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j<00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00> save_gguf<75>uhjFh"h#hKJh j<>ubh0<68> are similar to
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubjG)<29><>}<7D>(h<05> :func:`savez`<60>h]<5D>j%)<29><>}<7D>(hj0h]<5D>h0<68>savez()<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j2h!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-func<6E>eh]<5D>h]<5D>h]<5D>uhj$h j.ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j<<00>reftype<70><65>func<6E><63> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00>savez<65>uhjFh"h#hKJh j<>ubh0<68>, but they take as input a <20><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubjG)<29><>}<7D>(h<05> :obj:`dict`<60>h]<5D>j%)<29><>}<7D>(hjTh]<5D>h0<68>dict<63><74><EFBFBD><EFBFBD><EFBFBD>}<7D>(h jVh!hh"NhNubah}<7D>(h]<5D>h]<5D>(jU<00>py<70><79>py-obj<62>eh]<5D>h]<5D>h]<5D>uhj$h jRubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>refdoc<6F>jb<00> refdomain<69>j`<00>reftype<70><65>obj<62><6A> refexplicit<69><74><EFBFBD>refwarn<72><6E>jhjijjNjk<00>dict<63>uhjFh"h#hKJh j<>ubh0<68> of string names to arrays:<3A><><EFBFBD><EFBFBD><EFBFBD>}<7D>(h j<>h!hh"NhNubeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h"h#hKJh h&h!hubj<62>)<29><>}<7D>(h<05>c>>> a = mx.array([1.0])
>>> b = mx.array([2.0])
>>> mx.save_safetensors("arrays", {"a": a, "b": b})<29>h]<5D>h0<68>c>>> a = mx.array([1.0])
>>> b = mx.array([2.0])
>>> mx.save_safetensors("arrays", {"a": a, "b": b})<29><><EFBFBD><EFBFBD><EFBFBD>}<7D>h j|sbah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>j<EFBFBD>j<>j<><00>j<EFBFBD><00>shell<6C>j<EFBFBD>}<7D>uhj<>h"h#hKMh h&h!hubeh}<7D>(h]<5D>(<28>saving-and-loading-arrays<79>heh]<5D>h]<5D>(<28>saving and loading arrays<79><73>saving_and_loading<6E>eh]<5D>h]<5D>uhh$h hh!hh"h#hK<04>expect_referenced_by_name<6D>}<7D>j<EFBFBD>h s<>expect_referenced_by_id<69>}<7D>hh subeh}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>source<63>h#uhh<01>current_source<63>N<EFBFBD> current_line<6E>N<EFBFBD>settings<67><73>docutils.frontend<6E><64>Values<65><73><EFBFBD>)<29><>}<7D>(h)N<> generator<6F>N<EFBFBD> datestamp<6D>N<EFBFBD> source_link<6E>N<EFBFBD>
source_url<EFBFBD>N<EFBFBD> toc_backlinks<6B>h<EFBFBD><68>footnote_backlinks<6B>K<01> sectnum_xform<72>K<01>strip_comments<74>N<EFBFBD>strip_elements_with_classes<65>N<EFBFBD> strip_classes<65>N<EFBFBD> report_level<65>K<02>
halt_level<EFBFBD>K<05>exit_status_level<65>K<05>debug<75>N<EFBFBD>warning_stream<61>N<EFBFBD> traceback<63><6B><EFBFBD>input_encoding<6E><67> utf-8-sig<69><67>input_encoding_error_handler<65><72>strict<63><74>output_encoding<6E><67>utf-8<><38>output_encoding_error_handler<65>j<EFBFBD><00>error_encoding<6E><67>utf-8<><38>error_encoding_error_handler<65><72>backslashreplace<63><65> language_code<64><65>en<65><6E>record_dependencies<65>N<EFBFBD>config<69>N<EFBFBD> id_prefix<69>h<06>auto_id_prefix<69><78>id<69><64> dump_settings<67>N<EFBFBD>dump_internals<6C>N<EFBFBD>dump_transforms<6D>N<EFBFBD>dump_pseudo_xml<6D>N<EFBFBD>expose_internals<6C>N<EFBFBD>strict_visitor<6F>N<EFBFBD>_disable_config<69>N<EFBFBD>_source<63>h#<23> _destination<6F>N<EFBFBD> _config_files<65>]<5D><>file_insertion_enabled<65><64><EFBFBD> raw_enabled<65>K<01>line_length_limit<69>M'<27>pep_references<65>N<EFBFBD> pep_base_url<72><6C>https://peps.python.org/<2F><>pep_file_url_template<74><65>pep-%04d<34><64>rfc_references<65>N<EFBFBD> rfc_base_url<72><6C>&https://datatracker.ietf.org/doc/html/<2F><> tab_width<74>K<08>trim_footnote_reference_space<63><65><EFBFBD>syntax_highlight<68><74>long<6E><67> smart_quotes<65><73><EFBFBD>smartquotes_locales<65>]<5D><>character_level_inline_markup<75><70><EFBFBD>doctitle_xform<72><6D><EFBFBD> docinfo_xform<72>K<01>sectsubtitle_xform<72><6D><EFBFBD> image_loading<6E><67>link<6E><6B>embed_stylesheet<65><74><EFBFBD>cloak_email_addresses<65><73><EFBFBD>section_self_link<6E><6B><EFBFBD>env<6E>Nub<75>reporter<65>N<EFBFBD>indirect_targets<74>]<5D><>substitution_defs<66>}<7D><>substitution_names<65>}<7D><>refnames<65>}<7D><>refids<64>}<7D>h]<5D>h as<61>nameids<64>}<7D>(j<>hj<>j<>u<> nametypes<65>}<7D>(j<><00>j<EFBFBD><00>uh}<7D>(hh&j<>h&jehMu<4D> footnote_refs<66>}<7D><> citation_refs<66>}<7D><> autofootnotes<65>]<5D><>autofootnote_refs<66>]<5D><>symbol_footnotes<65>]<5D><>symbol_footnote_refs<66>]<5D><> footnotes<65>]<5D><> citations<6E>]<5D><>autofootnote_start<72>K<01>symbol_footnote_start<72>K<00>
id_counter<EFBFBD><EFBFBD> collections<6E><73>Counter<65><72><EFBFBD>}<7D>j<EFBFBD>Ks<><73>R<EFBFBD><52>parse_messages<65>]<5D><>transform_messages<65>]<5D>h <09>system_message<67><65><EFBFBD>)<29><>}<7D>(hhh]<5D>h<)<29><>}<7D>(hhh]<5D>h0<68>8Hyperlink target "saving-and-loading" is not referenced.<2E><><EFBFBD><EFBFBD><EFBFBD>}<7D>h j$sbah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D>uhh;h j!ubah}<7D>(h]<5D>h]<5D>h]<5D>h]<5D>h]<5D><>level<65>K<01>type<70><65>INFO<46><4F>source<63>h#<23>line<6E>Kuhjuba<62> transformer<65>N<EFBFBD> include_log<6F>]<5D><>
decoration<EFBFBD>Nh!hub.