<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Imports and configuration
We set the path to the config.cfg file using the environment variable 'PYPMJ_CONFIG_FILE'. If you do not have a configuration file yet, please look into the Setting up a configuration file example.
Step1:  Now we can import pypmj and numpy. Since the parent directory, which contains the pypmj module, is not automatically in our path, we need to append it before.
Step2:  Load the materials extension.
Step3:  What this extension is for
The materials extension provides access to tabulated and formula-based optical material property data. It can load such data from different data bases, extract additional information such as citations, as well as automatically interpolate, extrapolate and plot the data.
Usage
The functionality is provided by the class MaterialData.
Step4:  Note
Step5:  We show the abilities using the gallium arsenide data set.
Step6:  Get some metadata
Step7:  The default for unitOfLength is 1., which defaults to meter. We can get refractive index data (here called $n$-$k$-data, where $n$ is the real and $k$ the imaginary part of the complex refractive index) for specific wavelengths like this
Step8:  Or for multiple wavelengths values
Step9:  Or we can get the permittivity.
Step10:  We can also plot the complete known data to get an overview of the data set.
Step11:  Or we can plot data in a specific wavelength range, thistime also showing the known (tabulated) points to show case the interpolation.
<ASSISTANT_TASK:>
Python Code:
import os
os.environ['PYPMJ_CONFIG_FILE'] = '/path/to/your/config.cfg'
Explanation: Imports and configuration
We set the path to the config.cfg file using the environment variable 'PYPMJ_CONFIG_FILE'. If you do not have a configuration file yet, please look into the Setting up a configuration file example.
End of explanation
import sys
sys.path.append('..')
import pypmj as jpy
import numpy as np
Explanation: Now we can import pypmj and numpy. Since the parent directory, which contains the pypmj module, is not automatically in our path, we need to append it before.
End of explanation
jpy.load_extension('materials')
Explanation: Load the materials extension.
End of explanation
jpy.MaterialData?
Explanation: What this extension is for
The materials extension provides access to tabulated and formula-based optical material property data. It can load such data from different data bases, extract additional information such as citations, as well as automatically interpolate, extrapolate and plot the data.
Usage
The functionality is provided by the class MaterialData.
End of explanation
jpy.MaterialData.materials.keys()
Explanation: Note: The current implementation is a bit inflexible/incomplete and will probably be changed/completed in a future version. 
There is currently only access to the following materials, although adding more materials is easily done by extending this dict in the materials.py file:
End of explanation
GaAs = jpy.MaterialData(material = 'gallium_arsenide')
Explanation: We show the abilities using the gallium arsenide data set.
End of explanation
GaAs.getAllInfo()
Explanation: Get some metadata:
End of explanation
wvl = 600.e-9 # = 600nm
GaAs.getNKdata(wvl)
Explanation: The default for unitOfLength is 1., which defaults to meter. We can get refractive index data (here called $n$-$k$-data, where $n$ is the real and $k$ the imaginary part of the complex refractive index) for specific wavelengths like this
End of explanation
wvls = np.linspace(600.e-9, 1000.e-9, 6) # = 600nm to 1000nm
GaAs.getNKdata(wvls)
Explanation: Or for multiple wavelengths values
End of explanation
GaAs.getPermittivity(wvls)
Explanation: Or we can get the permittivity.
End of explanation
%matplotlib inline
import matplotlib.pyplot as plt
plt.figure(figsize=(8,6))
GaAs.plotData()
Explanation: We can also plot the complete known data to get an overview of the data set.
End of explanation
plt.figure(figsize=(8,6))
GaAs.plotData(wvlRange=(200.e-9, 1000.e-9), plotKnownValues=True)
Explanation: Or we can plot data in a specific wavelength range, thistime also showing the known (tabulated) points to show case the interpolation.
End of explanation
<END_TASK>