Re: Two different packages can not Need[] the same utility
- To: mathgroup at smc.vnet.net
- Subject: [mg79979] Re: [mg79867] Two different packages can not Need[] the same utility
- From: Carl Woll <carlw at wolfram.com>
- Date: Fri, 10 Aug 2007 01:42:54 -0400 (EDT)
- References: <200708070532.BAA12076@smc.vnet.net>
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 > > I'll respond to the reason your code below generates error messages for g[3]. Basically, you have: g[x_,opts___]:=Random[(MyDistributionFunction/.{opts}/.Options[f])[x]] Now, the fully qualified form of MyDistributionFunction here is gg`Private`MyDistributionFunction However, in Options[f]: Options[f]:={MyDistributionFunction -> (NormalDistribution[#, 0.2 #]&)} the fully qualified form of MyDistributionFunction is ff`Private`MyDistributionFunction. Hence, Options[f] will not replace anything, and you get an error message. One solution to this problem is to use a string instead of a symbol. As for the problem you describe above dealing with the Statistics`ContinuousDistributions` package, a nonworking example would be helpful. Carl Woll Wolfram Research >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]] > > >
- References:
- Two different packages can not Need[] the same utility package?
- From: "benedek.kovacs.mr@gmail.com" <benedek.kovacs.mr@gmail.com>
- Two different packages can not Need[] the same utility package?