Re: Loading packages within packages

*To*: mathgroup at smc.vnet.net*Subject*: [mg30295] Re: Loading packages within packages*From*: "Allan Hayes" <hay at haystack.demon.co.uk>*Date*: Sun, 5 Aug 2001 16:18:39 -0400 (EDT)*References*: <9kdbv0$f4u$1@smc.vnet.net> <9ki2p7$kde$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Oliver, First the explanation then the solution, EXPLANATION Note that in the package Statistics`NormalDistribution` we have BeginPackage["Statistics`NormalDistribution`", "Statistics`DescriptiveStatistics`", "Statistics`Common`DistributionsCommon`"] and after <<Statistics`NormalDistribution` we get Context[PDF] Statistics`Common`DistributionsCommon` So PDF comes from loading the package Statistics`Common`DistributionsCommon` as helper package. However in your package TzmSignalTheory when the line BeginPackage["TzmSignalTheory`",{"Statistics`NormalDistribution`"}] is loaded, although the packages "Statistics`DescriptiveStatistics`" , "Statistics`Common`DistributionsCommon`" are loaded as helpers for "Statistics`NormalDistribution`" the final result is that the *only* contexts that are added to are "TzmSignalTheory`" and "Statistics`NormalDistribution`" --- so "Statistics`DescriptiveStatistics`" , "Statistics`Common`DistributionsCommon`" are not active ( I know that this seems odd, but that's the way it is). This means that when the line DiscreteGaussExcitement[f_,width_,var_:w]:= PDF[NormalDistribution[f,width],var] is evaluated, Statistics`Common`DistributionsCommon` is not found and PDF is translated as TzmSignalTheory`Private`PDF. This is what you are seeing. SOLUTION: Modify your package line BeginPackage[...] to BeginPackage["TzmSignalTheory`", {"Statistics`NormalDistribution`", "Statistics`DescriptiveStatistics`", "Statistics`Common`DistributionsCommon`"} ] ( you can miss out the list brackets if you want) Now we get <<TzmSignalTheory` DiscreteGaussExcitement[a,b,c] 1/(E^((-a + c)^2/(2*b^2))*(b*Sqrt[2*Pi])) -- Allan --------------------- Allan Hayes Mathematica Training and Consulting Leicester UK www.haystack.demon.co.uk hay at haystack.demon.co.uk Voice: +44 (0)116 271 4198 Fax: +44 (0)870 164 0565 "Oliver Friedrich" <oli.fri at gmx.de> wrote in message news:9ki2p7$kde$1 at smc.vnet.net... > Hallo again, > > thanks for your help, my second question (how to write and save a package?) > seems to be answered. > But there is still my problem with the unevaluated ExternalFunction A. > My abstract MyPackage package doesn't seem to reflect the error that I made, > because none of you experts did find anything. So I give a real example (and > that is almost the thing my packet should do, even the names). > > BeginPackage["TzmSignalTheory`",{"Statistics`NormalDistribution`"}] > > DiscreteGaussExcitement::usage:= > "blabla" > > Begin["`Private`"] > > DiscreteGaussExcitement[f_,width_,var_:w]:= > PDF[NormalDistribution[f,width],var]] > > End[] > > EndPackage[] > > So, that's my pain in the neck. If I call this package in application.nb I > get > > In[1]= > <<TzmSignalTheory` > > In[2]= > DiscreteGaussExcitement[a,b,c] > > Out[2]= > TzmSignalTheory`Private`PDF[NormalDistribution[a,b],c] > > Why doesn't it find the definitions for PDF and NormalDistribution ? They > sure are in this package Statistics`NormalDistribution`, cause it works when > I load that package in application.nb and work directly with PDF and Norm... > > My second thought was: OK, can't work if PDF appears in > TzmSignalTheory`context(whatever the reason, it does at all) so my second > approach was > > BeginPackage["TzmSignalTheory`",{"Statistics`NormalDistribution`"}] > > DiscreteGaussExcitement::usage:= > "blabla" > > Begin["`Private`"] > > DiscreteGaussExcitement[f_,width_,var_:w]:= > Statistics`NormalDistribution`PDF[Statistics`NormalDistribution`NormalDistri > bution[f,width],var]] > > End[] > > EndPackage[] > > When I load this package (after quit the kernel and reload, I'm really > carefully with that topic), the following happens: > > > In[1]= > <<TzmSignalTheory` > > PDF::"shdw": > "Symbol \!\(\"PDF\"\) appears in multiple contexts \ > \!\({\"Statistics`NormalDistribution`\", \(\"St\" \\[Ellipsis] \"on`\"\)}\); > \ > definitions in context \!\(\"Statistics`NormalDistribution`\"\) may shadow > or \ > be shadowed by other definitions." > > In[2]= > DiscreteGaussExcitement[a,b,c] > > Out[2]= > PDF[NormalDistribution[a,b],c] > > First that warning after loading the package, but the line Out[2] looks > nicer to me, but still it is unevaluated, Mathematica can't find that > bleeding definitions. > But if I load the Statistics`NormalDistribution`into my application.nb... > > > DiscreteGaussExcitement[a,b,c] > > \!\(E\^\(-\(\((\(-a\) + c)\)\^2\/\(2\ b\^2\)\)\)\/\(b\ \@\(2\ \[Pi]\)\)\) > > Now it comes along with the correct answer. Loading my Statistics into > application.nb could be a workaround, but that's an awful solution. > > By the way: Thanks for the advice with that AutogeneratedPackage option. But > to me it wasn't easy to find. It isn't documented in the online help, is it? > > Oliver > >