# Contexts and Packages

A typical package written in *Mathematica* introduces several new symbols intended for use outside the package. These symbols may correspond for example to new functions or new objects defined in the package.

There is a general convention that all new symbols introduced in a particular package are put into a context whose name is related to the name of the package. When you read in the package, it adds this context at the beginning of your context search path $ContextPath.

This reads in a package for proving primality.

Out[2]= | |

The symbol

is in the context set up by the package.

Out[3]= | |

You can refer to the symbol using its short name.

Out[4]= | |

The full names of symbols defined in packages are often quite long. In most cases, however, you will only need to use their short names. The reason for this is that after you have read in a package, its context is added to $ContextPath, so the context is automatically searched whenever you type in a short name.

There is a complication, however, when two symbols with the same short name appear in two different packages. In such a case, *Mathematica* will warn you when you read in the second package. It will tell you which symbols will be "shadowed" by the new symbols that are being introduced.

The symbol

in the context

is shadowed by the symbol with the same short name in the new package.

You can access the shadowed symbol by giving its full name.

Out[6]= | |

Conflicts can occur not only between symbols in different packages, but also between symbols in packages and symbols that you introduce directly in your *Mathematica* session. If you define a symbol in your current context, then this symbol may become shadowed by another symbol with the same short name in packages that you read in. The reason for this is that *Mathematica* searches for symbols in contexts on the context search path before looking in the current context.

This defines a function in the current context.

Out[7]= | |

The

Div function in your current context will be shadowed by the one in the package.

This sets up the coordinate system for vector analysis.

Out[9]= | |

The

Div from the package is used.

Out[10]= | |

If you get into the situation where unwanted symbols are shadowing the symbols you want, the best thing to do is usually to get rid of the unwanted symbols using Remove[s]. An alternative that is sometimes appropriate is to rearrange the entries in $ContextPath and to reset the value of $Context so as to make the contexts that contain the symbols you want be the ones that are searched first.

$Packages | a list of the contexts corresponding to all packages loaded into your *Mathematica* session |

Getting a list of packages.