MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Package writing

  • To: mathgroup at
  • Subject: [mg67256] Re: Package writing
  • From: albert <awnl at>
  • Date: Wed, 14 Jun 2006 06:29:35 -0400 (EDT)
  • References: <e6lhqr$nfs$>
  • Sender: owner-wri-mathgroup at

Hi marek,

> I have the following problem. I used Template.nb to create a package.

how exactly are you creating the package from Template.nb? Via the
autocreate-package functionality or by an explicit 'save as' -> 'Package
file' or ...?

> During the whole process I had some problems trying to get it to work
> although the same commands in a different (fresh/new notebook) produced
> desired results. Right now the sutuation is as follows. I can use my
> poackage if I load it into any notebook but it does not work in the
> original notebook I used to write it. 

a blind guess is that maybe you are (automatically) executing the
initialization cells in the original notebook and this makes problems. Do
you get a dialog when starting a new kernel which asks you whether or not
to evaluate the initialization cells? what is your answer to that? It
should be 'no' for the process you describe...

> I have that notebook and the 
> associated m file in /home/marek/Mathematica/Packages. Here are first 4
> command I execute in the original notebook
> 1. SetDirectory["/home/marek/Mathematica/Packages"]
> This sets my working directory to the directory in which my package is
> located.

This is not really necessary for the Needs to succeed, _if_ you do 2. (which
is the thing I would recommend).

> 2. AppendTo[$Path, "/home/marek/Mathematica/Packages"];
> Here I append this very same directory to my search path so that I can
> load that package in the same notebook for testing purposes.

looks reasonable, something that I do all the time. Maybe to make sure to
import this very package you might want to use PrependTo instead of
AppendTo, though. Just make sure no conflicts with other package files in
that directory arise...

> 3. Needs["DataAnalysis`"]
> This line loads that package. When I execute that line I get no
> complaints form Mathematica that it cannot open something or anything
> like that
> After those there is a bunch of cells with the implementation of my
> ppackage all of which are set to be an Initialization cells.
> After them I have few cells which are using functions from my package
> but they do not work. The symbols/functions defined in that package
> seems to be recognized because Ctrl=k combination does the
> autocomplition but nothing happens when I execute a cell with a funcion
> defined in my package.

Check the context and definitions of these symbols with:

 This will give you the right pointers, I'm pretty sure...

> On the other hand I can copy my package to
> /home/marek/.Mathematica/AutoLoad directory (and I do it changing the
> name of that m file) and it works fine from there after I open new
> notebook and load it with Needs["DD`"] (I chnaged the name of that file
> to DD.m)

without editing? Do you use something like BeginPackage[] for your Package?
If not, I wonder why you don't get error messages from your Needs[]...

> In a fresh notebook I can execute that AppendTo command from above and
> then load my package from the original development directory (it has
> different name there so I know that it is that version which is being
> loaded not the one from /home/marek/.Mathematica/AutoLoad) and it will
> work fine.

Wrong guess: the package in AutoLoad will be loaded, even without an
explicit Needs for it whenever a new kernel is started. That's the purpose
of the AutoLoad-directory after all and the name should be a hint for that.
For the purpose you are (miss)using AutoLoad you should better use the
directory ~/.Mathematica/Applications, which is designed (AFAIK) to store
personally installed (third-party) packages, where third party can of
course be yourself.

> So why I cannot use my package from the original notebook I wrote it
> in?

I don't know, can you construct a minimal example and post it? Without that,
understanding the problem is nearly impossible. As supposed above, you
should use ??symbolname for all symbols in your package to check for
context, definition etc. and try to understand what's wrong with that
information. Other than that I can just assure you that I am doing exactly
what you try all the times and it works perfectly, so it definitly is
possible and if you have more details I might be able to help...

> Any suggestiones greatly appreciated



  • Prev by Date: RE: Resolve/Reduce is taking forever
  • Next by Date: Re: Determining continuity of regions/curves from inequalities
  • Previous by thread: Re: Package writing
  • Next by thread: Re: Package writing