Possible Duplicate:
What is the most convenient way to read definitions of in-memory symbols when we don’t have the source files?
I would like to look at the code that implements FillingTransform. Does Mathematica provide any way to do this?
Possible Duplicate:
What is the most convenient way to read definitions of in-memory symbols when we don’t have the source files?
I would like to look at the code that implements FillingTransform. Does Mathematica provide any way to do this?
In general, @Jacob Akkerboom is correct: one cannot usually view the source code for arbitrary Mathematica functions. In this particular case, however, we find an exception.
By doing:
FillingTransform (* trigger auto-load *)
ClearAttributes[FillingTransform, ReadProtected]
Begin["Image`MorphologicalOperationsDump`"]
Information[FillingTransform]
we observe a call to iFillingTransform (i.e. the implementation of FillingTransform; this naming convention is commonly encountered among recently added functions). Thereafter,
Information[iFillingTransform]
reveals a number of checks on the arguments and setup for a call to oFillingTransform. If one does
Information[oFillingTransform]
then the complete implementation becomes visible. Although I won't reproduce that here for obvious reasons, the basic idea is a combination of GeodesicErosion and GeodesicDilation with some image arithmetic to mask off each hole in turn.
Spelunk yielded interesting information ? Mapping it like here Spelunk /@ ToExpression@Names["System*"]` is not a good idea.
– Artes
Jan 03 '13 at 20:47
Spelunk[TensorExpand] while definitely not found anything here Spelunk[FrobeniusSolve]. The latter is a quite generic behaviour.
– Artes
Jan 03 '13 at 21:55
Spelunk recursively...
– Simon Woods
Jan 03 '13 at 23:37
oFillingTransform? Perhaps overload, operator, or object, in the context of a Function Object? Assuming the 'i' in iFillingTransform is short for implementation, as you mentioned, then I'm curious if this naming convention implies some design pattern considerations which WRI staff tend to utilize for writing packages. I would appreciate any additional thoughts anyone may have on this issue? Would it be worth opening a question on this topic?
– rfrasier
Mar 04 '16 at 03:40
ReadProtectedis mainly implemented in Mathematica code and you can access its source by removing the attribute (as in Oleks' answer). There are of course those readprotected functions that simply call another function that is fully concealed. There is little hope that someone is able to reverse-engineer these functions just by observing their behaviour. – István Zachar Jan 03 '13 at 17:07