Re: Trouble Loading Packages...
- To: mathgroup at smc.vnet.net
- Subject: [mg128327] Re: Trouble Loading Packages...
- From: Murray Eisenberg <murray at math.umass.edu>
- Date: Sun, 7 Oct 2012 01:31:35 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <12366398.1246.1349420243702.JavaMail.root@m06> <20121006054751.F1EBB685F@smc.vnet.net>
One little addendum to David's excellent explanation of user-created package placement. Suppose you have just one package file, myApp.m, to go into $UserBaseDirectory/Applications subfolder myApp. And suppose that package begins with: BeginPackage["MyApp`"]; Then instead of using an init.m within a Kernel subfolder of the myApp folder, you may load the package with <<myApp`myApp` or the equivalent Needs statement. On Oct 6, 2012, at 1:47 AM, djmpark <djmpark at comcast.net> wrote: > Because so many people don't know where to put packages, or don't want to > put them in the place designed for them. > > Evaluate $UserBaseDirectory in a Mathematica session. In that directory you > will find a pre-established Applications folder. Put your work there. This > is your private Applications folder. > > Say you are doing extended work on TopicX. Create a TopicX folder in your > private Applications folder. You can create subsidiary folders that contain > your work and organize your notebooks on this topic. > > Now make the BeginPackage statement in your package (which has the name > cellNeighbours.m and is placed in the TopicX folder): > > BeginPackage["TopicX`cellNeighbours`"] > > Now you can load the package from anywhere by using: > > << TopicX`cellNeighbours` > > You could have more than one package in the TopicX folder. > > WRI has implemented a feature such that if you load the package with the > following statement (omitting the package context) > > << TopicX` > > then Mathematica looks for an init.m file within a Kernel folder within the > TopicX folder and evaluates all the Initiation cells in the file. So if you > had a second package, say Package2, you could include the statements: > > Get["TopicX`cellNeighbours`"] > Get["TopicX`Package2`"] > > in the init.m file. > > You could also create FrontEnd/Palettes and FrontEnd/StyleSheets folders > within TopicX and then any palettes or style sheets associated with the > project would appear on your Mathematica menus. If you had more than one > palette or style sheet you could create the structure > FrontEnd/Palettes/TopicX/palettes... Then all the palettes associated with > TopicX would be grouped together within one entry on the Mathematica > Palettes menu. > > And now your packages will load from anywhere because Mathematica > automatically looks in the private Applications folders for packages, > palettes, style sheets and documentation (if you create that.) > > > David Park > djmpark at comcast.net > http://home.comcast.net/~djmpark/index.html > > > > From: Richard Palmer [mailto:rhpalmer at gmail.com] > > > ...using the latest version of Mathematica on a 64 bit windows machine. > > Here is the relevant code > > > In[1]:= Directory[] > Out[1]= "C:\\Users\\Richard\\Documents" > > FileNames[{"*.m"}] > {"cellNeighbours.m", "myS.m"} > > FileExistsQ["cellNeighbours.m"] > True > > In[5]:= FindFile["cellNeighbours.m"] > Out[5]= "C:\\Users\\Richard\\Documents\\cellNeighbours.m" > In[6]:= << cellNeighbours` > In[7]:= ?cellNeighbours > During evaluation of In[7]:= Information::notfound: Symbol cellNeighbours > not found. >> > > Needs["cellNeighbours`"] > Needs::nocont: Context cellNeighbours` was not created when Needs was > evaluated. >> > > > Same thing happens with the myS package. Why can't if find and load the > package? > > -------------------------------------------------------------------------- > > This is the cellNeighbours Package > > BeginPackage["cellNeighbours`"]; > > cellNeighbours::usage = > "cellNeighbours[r,c] sets up a function to quickly return a list of the n > \ nearest neighbours of a given cell in an r\[ScriptX]c matrix. By deafult, > a \ toroidal distance matrix is assumed."; neighbourhoodList::usage "neighbourhoodList[rI,cI,k] returns a list of the k nearest cells to \ > \!\(\*SubscriptBox[\(cell\), \(r1, c1\)]\) in an r\[ScriptX]c matrix. By \ > deafult, a toroidal distance matrix is assumed"; > > toroidalDistance::usage > "teroidalDistance[{r1,c1},{r2.c2}] returns a \!\(\* > StyleBox[\"wrap\",\nFontSlant->\"Italic\"]\)\!\(\* > StyleBox[\" \",\nFontSlant->\"Italic\"]\)\!\(\* > StyleBox[\"around\",\nFontSlant->\"Italic\"]\)\!\(\* > StyleBox[\" \",\nFontSlant->\"Italic\"]\)distance between two points"; > > distancefn::usage = "distance[a,b,len] computes a \!\(\* > StyleBox[\"wrap\",\nFontSlant->\"Italic\"]\)\!\(\* > StyleBox[\" \",\nFontSlant->\"Italic\"]\)\!\(\* > StyleBox[\"around\",\nFontSlant->\"Italic\"]\) distance from a to b > between \ two cells on the same row or column. \!\(\* > StyleBox[\"len\",\nFontSlant->\"Italic\"]\) is the length of the \ > row/column."; > > > Begin["Private`"]; > rows = -1; > cols = -1; > cellNeighbourhood = -1; > cellIndices = -1; > cellNeighbours[r_Integer, c_Integer] := Module[{}, > rows = r; > cols = c; > cellIndices = Table[{i, j}, {i, 1, r}, {j, 1, c}]; > cellNeighbourhood = Nearest[Flatten[cellIndices, 1] > DistanceFunction -> toroidalDistance]] /; r > 1 && c > 1; = distancefn > = > Compile[{{a, _Integer}, {b, _Integer}, {len, _Integer}}, > Module[{mn, mx, result}, > If[a == b, Return[0]]; > mx = Max[a, b]; > mn = Min[a, b]; > result = Min[mx - mn, mn + len - mx]; > If[result < 0, Print[{"distance error", a, b, len, result}]]; > Return[result]]]; > toroidalDistance[p1_, p2_] := > Module[{r, c}, r = distancefn[First[p1], First[p2], rows]; > c = distancefn[Last[p1], Last[p2], cols]; r^2 + c^2]; > neighbourhoodList[r_, c_, n_] := > cellNeighbourhood[{r, c}, n]; > End[]; > EndPackage[]; > > -- > Richard Palmer > > Home 941 412 8828 > Cell 508 982-7266 > > --- Murray Eisenberg = murray at math.umass.edu Mathematics & Statistics Dept. Lederle Graduate Research Tower phone 413 549-1020 (H) University of Massachusetts 413 545-2859 (W) 710 North Pleasant Street fax 413 545-1801 Amherst, MA 01003-9305
- References:
- Re: Trouble Loading Packages...
- From: "djmpark" <djmpark@comcast.net>
- Re: Trouble Loading Packages...