MathGroup Archive 2007

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

Search the Archive

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



  • Prev by Date: Re: Version 6 "Mathematica Book" - updated and expanded
  • Next by Date: Re: NMinimize a function of NMaximize
  • Previous by thread: Re: Two different packages can not Need[] the same utility package?
  • Next by thread: Re: Two different packages can not Need[] the same utility package?