Re: Two different packages can not Need[] the same utility package?
- To: mathgroup at smc.vnet.net
- Subject: [mg79881] Re: Two different packages can not Need[] the same utility package?
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Wed, 8 Aug 2007 04:43:46 -0400 (EDT)
- Organization: Uni Leipzig
- References: <f990v1$c32$1@smc.vnet.net>
- Reply-to: kuska at informatik.uni-leipzig.de
Hi, you need a shared package for MyDistributionFunction, i.e. Package 1------------------------------------------------ BeginPackage["myoption`"] MyDistributionFunction::usage = "An option for the usefull function."; EndPackage[]; End------------------------------------------------------- Package 2------------------------------------------------- BeginPackage["ff`", {"myoption`", "Statistics`ContinuousDistributions`"}] func::usage = "A usefull function."; Begin["`Private`"] Options[func] = {MyDistributionFunction -> (NormalDistribution[#, 0.2 #] &)} func[x_, opts___] := Random[(MyDistributionFunction /. {opts} /. Options[func])[x]] End[] EndPackage[] End---------------------------------------------------------- and Package 3---------------------------------------------------- BeginPackage["gg`", {"myoption`", "Statistics`ContinuousDistributions`"}] gunc::usage = "An other usefull function." Begin["`Private`"] Options[gunc] = {MyDistributionFunction -> (NormalDistribution[#, 0.2 #] &)}; gunc[x_, opts___] := Random[(MyDistributionFunction /. {opts} /. Options[gunc])[x]] End[] EndPackage[] End---------------------------------------------------------- Regards Jens benedek.kovacs.mr at gmail.com wrote: > Hi > > Here is a problem a I face with: > I define two packages. Both needs the same > Statistics`ContinuousDistibutions` package. However, the second one > can not use it. Why? And how to resolve this problem? > > To make it more exact, in the following example I will define two > packages: ff and gg with the corresponding f and g functions both > using NormalDistribution. The first one evaluated works while the > second does not. the problem is even more disappointing if we Get[] > one packege twice and then are unable to use the function. More > complicated verisions can appear using the Sytem` functions or using > built-in packages where we does not even know what other packages are > invited. > > Does anyone have a solution for this problem? > > Kind Regards > Bence > > In[1]:=BeginPackage["ff`"] > Out[1]=ff` > In[2]:=Unprotect[f] > Out[2]={} > In[3]:=Begin["`Private`"] > Out[3]=ff`Private` > In[4]:=Needs["Statistics`ContinuousDistributions`"] > In[5]:=Options[f]:={MyDistributionFunction\[Rule](NormalDistribution[#, > 0.2 #]&)} > f[x_,opts___]:=Random[(MyDistributionFunction/.{opts}/.Options[f])[x]] > In[7]:=End[] > Out[7]=ff`Private` > In[8]:=Protect[f] > Out[8]={f} > In[9]:=EndPackage[] > > In[10]:=f[3] > Out[10]=2.16487 > In[11]:=ff`f[3] > Out[11]=4.16217 > > In[12]:=BeginPackage["gg`"] > Out[12]=gg` > In[13]:=Unprotect[g] > Out[13]={} > In[14]:=Begin["`Private`"] > Out[14]=gg`Private` > In[15]:=Needs["Statistics`ContinuousDistributions`"] > In[16]:=Options[g]:={MyDistributionFunction\[Rule] > (NormalDistribution[#,0.2 #]&)} > g[x_,opts___]:=Random[(MyDistributionFunction/.{opts}/.Options[f])[x]] > In[18]:=End[] > Out[18]=gg`Private` > In[19]:=Protect[g] > Out[19]={g} > In[20]:=EndPackage[] > > In[21]:=f[3] > Out[21]=2.88763 > In[22]:=ff`f[3] > Out[22]=3.09767 > > In[23]:=g[3] >>From In[23]:=\!\(\* > RowBox[{\(Random::"randt"\), \(\(:\)\(\ \)\), "\<\"Type > specification \\!\\( > gg`Private`MyDistributionFunction[3]\\) in \ > \\!\\(Random[\\(\\(gg`Private`MyDistributionFunction[3]\\)\\)]\\) > should be \ > Real, Integer, or Complex. \\!\\(\\*ButtonBox[\\\"More...\\\", \ > ButtonStyle->\\\"RefGuideLinkText\\\", ButtonFrame->None, \ > ButtonData:>\\\"Random::randt\\\"]\\)\"\>"}]\) > Out[23]=Random[gg`Private`MyDistributionFunction[3]] > In[24]:=gg`g[3] >>From In[24]:=\!\(\* > RowBox[{\(Random::"randt"\), \(\(:\)\(\ \)\), "\<\"Type > specification \\!\\( > gg`Private`MyDistributionFunction[3]\\) in \ > \\!\\(Random[\\(\\(gg`Private`MyDistributionFunction[3]\\)\\)]\\) > should be \ > Real, Integer, or Complex. \\!\\(\\*ButtonBox[\\\"More...\\\", \ > ButtonStyle->\\\"RefGuideLinkText\\\", ButtonFrame->None, \ > ButtonData:>\\\"Random::randt\\\"]\\)\"\>"}]\) > Out[24]=Random[gg`Private`MyDistributionFunction[3]] > >