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
>
>