Re: Get["file.mx"] doesn't work
- To: mathgroup at smc.vnet.net
- Subject: [mg119074] Re: Get["file.mx"] doesn't work
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Sat, 21 May 2011 06:47:12 -0400 (EDT)
- References: <iqtnbm$io4$1@smc.vnet.net> <ir09p4$20l$1@smc.vnet.net> <ir2vr9$h50$1@smc.vnet.net> <ir5hov$9n$1@smc.vnet.net>
Hi,
>
> soory to say, Albert, but Ex- and Import is not an easy to handle
> alternative to DumpSave:
>
> In[1]:= f[x_]:=x+1
> In[2]:= SetDirectory["C:\\Users\\Peter"];
> In[3]:= DumpSave["f.mx",f];
> In[4]:= Remove[f];
> In[5]:=<<"f.mx"
> In[6]:= f[a]
> Out[6]= 1+a
>
> this should work with an alternative. But:
>
> In[7]:= Export["f.wdx",f];
> In[8]:= Remove@f
> In[9]:= Import["f.wdx"]
> Out[9]= f
> In[10]:= f[b]
> Out[10]= f[b]
>
> and of course the following leads to a real mess:
>
> In[11]:= f:=Import["f.wdx"]
> In[12]:= f[c]
> During evaluation of In[12]:= $RecursionLimit::reclim: Recursion depth
> of 256 exceeded.>>
> During evaluation of In[12]:= $RecursionLimit::reclim: Recursion depth
> of 256 exceeded.>>
> During evaluation of In[12]:= $RecursionLimit::reclim: Recursion depth
> of 256 exceeded.>>
> During evaluation of In[12]:= General::stop: Further output of
> $RecursionLimit::reclim will be suppressed during this calculation.>>
> Out[12]= $Aborted
What you say is of course all true, I meant that wdx is capable of doing
what an Import[filename,data,"MX"] can do, which means it can handle
arbitrary mathematica expressions, it does not require data to be of a
certain type, as most other binary export formats do. I should emphasize
that Davids suggestion to write a Compressed binary representation of an
expression does fulfill this requirement just as well, which is thanks
to the power of Compress to handle expressions of any kind. I was lead
to the assumption that that was what the OP wanted since he was talking
about MX format, not DumpSave. Sorry if that was not clear from my
previous post.
> One would have to find a way to save all (d)ownvalues, upvalues (and
> possibly "inbetweenvalues" ;-) ) and to restore them. Not too trivial,
> is it?
What you can do is to use Save, which works like DumpSave in that
respect, it looks up all definitions that the expression you want to
save potentially depend on. The drawback is of course that it is not a
binary format, so it will much more space and time consuming to save and
reload the definitions, but it will be portable.
Obviously there is no holy grail in that respect, namely a DumpSave to a
portable format.
On the other hand my impression is that it should be relatively simple
to create something that works as DumpSave but stores to WDX instead of
MX for WRI, maybe someone listens and realizes that there might be a
need for it. Or maybe the functionality is there but we have not found
how to use it. If you'd want to program this yourself, you would have to
rewrite some nontrivial code that already exists (not a motivating
situation :-)) or get ahold of these internal functionalities in one way
or the other. That is not something I would try without very urgent need...
I think that this does not come up more frequently is that most serious
users of Mathematica have learned how to depart definitions (=code) from
data, where former can best be stored to .m files (and be version
controlled!) and the latter could e.g. be saved in .wdx files in a
portable way or more often saved to more specific other file formats. Of
course I know that the nature of Mathematica makes no clear distinctions
between the two, but I rarely have seen real world examples where these
concepts could not easily be distinguished. If in doubt I guess you can
get away with: if it's large ("megabytes"), its data, if not it's ok to
be treated "like" code and can go to a .m (text)file...
cheers,
albert