# Tag Info

13

I can now offer a solution which leverages the full power of the code formatter, in its new, more robust form. Load the formatter: Import["https://raw.github.com/lshifr/CodeFormatter/master/CodeFormatter.m"] Some examples: CodeFormatterSpelunk[RunThrough] CodeFormatterSpelunk[PacletManagerCreatePaclet] In the last example, using MakeBoxes ...

13

It appears since version 3 shadowed variables are given priority, as demonstrated below. In the temp context x is taken as tempx unless Globalx exists. Remove[tempx, Globalx] tempx = 6; Begin["temp"]; {x, Globalx} End[]; {6, x} Remove[tempx, Globalx] tempx = 6; x = 5; Begin["temp"]; {x, Globalx} End[]; {5, 5}

12

Here I offer the safe version of Get that can be used successively to collect all the source files and contexts of packages without polluting the memory (too much). What it does I have practically reverse-engineered all the necessary functions (Get, Needs, BeginPackage, Begin, EndPackage and End) so that I could inject the monitoring code for ...

11

Using Begin and End won't help, because .mx files are lower-level and the way they are loaded is different from normal packages. I was about to say that this isn't possible, but here is a hack which seems to work: ClearAll[loadInContext]; loadInContext[context_String,file_String/;FileExtension[file]==="mx"]:= Module[{tag}, ...

11

This is because of $ContextPath. If the symbol outside the Begin/End is created in a context that is listed in$ContextPath, Mathematica will recognize it as belonging to that context even when called from a different context (even if Begin/End is put in a package file and called via Get): $ContextPath {"DocumentationSearch", "ResourceLocator", ... 11 Not an answer. Just screen shot. I booted up version 2.2 to verify the book result. And it does verify. Something changed since the book was written ! 10 Well, here is a suggestion: you can overload Needs using Villegas-Gayley trick. To do this safely, here is a generator for local environments, where Needs will be overloaded: createTraceEnvironment[context_String]:= Module[{inNeeds}, Function[ code, InternalInheritedBlock[ ... 9 Since nobody has mentioned it yet... V8 introduced the undocumented flag Debug$ExamineCode. When it is set to true, the information functions will display the definitions of ReadProtected symbols: Debug$ExamineCode = True ??BinLists It is sometimes useful to suppress some of the internal package names to make it easier to scan the definitions. Here ... 9 This behaviour has changed since that book was published. I am writing this additional answer to make it clear how Mathematica 9 searches contexts for symbols and that even the current version 9 documentation is incorrect in describing this. How symbol lookup actually works When you enter a symbol name such as x, Mathematica will check if a symbol with ... 9 This is possible in the interactive session with$PreRead. I will adopt my solution to the same problem posted in this Mathgroup thread. To quote my explanation from there, the essence of the present solution is to delay the parsing of the code (body) that must be executed inside a given context until run-time, that is, replace code ...

7

The iterator variable in the package lives in the context that your package sets (in this case, mypackagePrivate), but the call to ParallelTable from inside your package does not distribute the definitions in your package, because the parallel functions only distribute contexts that are listed in $DistributedContexts. This is by default set to$Context, ...

6

As Leonid has explained the problem is that the symbols are created and get their context at parse time, so if you need to avoid generating them in the current (usually "Global") context, using $PreRead as he explained is the only possibility. If you don't care that the symbols you use are created in the current context AND the context you want to evaluate ... 4 I often create styles using CellPrint: Once you have created the style definition go to Format > Edit Stylesheet and past this style definition cell into the private stylesheet: You should then see the docked cell in your notebook: But once you give values to your variables it should work You should probably also remove some unwanted stuff from ... 3 Since it was mr. Leonid Shifrin who provided a proper solution, I feel less guilty of my brute-force, very limited try: it adds the context to the first symbol in every Set and SetDelayed. a =.; b =.; c =. context2a =.; context2b =.; context2c =. InContextSetAndSetDelayed := Function[{context, code}, code /. SetDelayed -> f /. ... 3 Please Try adding AllowShortContext -> False to both InstallService functions. To both: InstallService["http://hpiers.obspm.fr/eop-pc/webservice/server_MATRICE_EOP.php?wsdl", AllowShortContext -> False] and InstallService["http://hpiers.obspm.fr/eop-pc/webservice/server_EOP2.php?wsdl", AllowShortContext -> False] Try the following hard coded ... 2 Not each Cell but each CellGroup has separate context. If you create new cell you will get In[2]: You can confirm this thesis with: nb = Select[Notebooks[], "Help" === ("DocumentType" /. NotebookInformation[#]) &][[1]] Options[#, CellContext] & /@ Cells[nb, GeneratedCell -> False, CellStyle -> "Input"] {{CellContext -> ... 2 This is not a complete answer, but here I will suggest a somewhat different way to extract the dependencies, than in Istvan's answer. I think my method is somewhat more economical. The idea is to load the package of interest in a dynamic environment where$Packages variable is reset to {} initially. This will automatically prompt all packages to be loaded ...

2

My previous answer had heavy shortcomings and errors, so I took a deeper breath and figured out a more robust way. The problem with FindFile["context"] is twofold. First, it can only return the first file in a possibly long list of files adding to the same context. Second, it might not work on a context extracted from a symbol because symbol contexts might ...

1

Just a really quick hack that is nevertheless useful sometimes: LocateFunction[f_]:=(SystemOpen[Context[f]];NotebookFind[SelectedNotebook[],f//ToString]) If applicable, this opens the package relating to the symbol´s context and primes the search (use F3 to search for subsequent locations of the symbol).

1

Problem solved by restarting the Mathematica Kernel - it seems like an old version of the file was cached at some point and wasn't being reread. This appears to be a recurring problem, and restarting the kernel is the only way I've found to fix it. I'll leave this open for the moment, in case someone knows a good fix for this/reason why this occurred.

1

{context1x, context1y, context1z} = {1, 10, 100} f[input_String] := ( input <> "z" <> "=" <> ToString[ ToExpression[input <> "x"] + ToExpression[input <> "y"] ] ) //ToExpression f["context1"] context1`z EDIT: now that we've established that we are trying to define methods on structures, let's create ...

Only top voted, non community-wiki answers of a minimum length are eligible