<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Accessing and Plotting Meshes
Setup
Let's first make sure we have the latest version of PHOEBE 2.1 installed. (You can comment out this line if you don't use pip for your installation or don't want to update to the latest release).
Step1:  As always, let's do imports and initialize a logger and a new Bundle.  See Building a System for more details.
Step2:  The 'Mesh' Dataset
NOTE
Step3:  Note that we can no manually set the times of the mesh AND/OR reference the times for existing non-mesh datasets (such as the light curve we just added) as well as any of the various t0s in the system.
Step4:  By default, the mesh only exposes the geometric columns of the triangles
Step5:  But we can also specify other columns to be included (by setting the columns parameter before calling run_compute)
Step6:  Any of the exposed columns are then available for plotting the mesh, via b.plot.
<ASSISTANT_TASK:>
Python Code:
!pip install -I "phoebe>=2.1,<2.2"
Explanation: Accessing and Plotting Meshes
Setup
Let's first make sure we have the latest version of PHOEBE 2.1 installed. (You can comment out this line if you don't use pip for your installation or don't want to update to the latest release).
End of explanation
%matplotlib inline
import phoebe
from phoebe import u # units
import numpy as np
import matplotlib.pyplot as plt
logger = phoebe.logger()
b = phoebe.default_binary()
Explanation: As always, let's do imports and initialize a logger and a new Bundle.  See Building a System for more details.
End of explanation
b.add_dataset('lc', times=np.linspace(0,1,6))
b.add_dataset('mesh')
print b['times@mesh']
print b['include_times@mesh']
Explanation: The 'Mesh' Dataset
NOTE: the "pbmesh" and "protomesh" have been removed as of PHOEBE 2.1+.
You must create a mesh dataset and specify the times and columns which you'd like exposed.  For more information, see the tutorial on the MESH dataset.
The mesh will be exposed at the times specified by the 'times' Parameter, as well as any times referenced by the 'include_times' SelectParameter.
So let's add a LC and MESH dataset.
End of explanation
b['times@mesh'] = [10]
b['include_times@mesh'] = ['lc01']
b.run_compute()
print b['mesh@model'].times
Explanation: Note that we can no manually set the times of the mesh AND/OR reference the times for existing non-mesh datasets (such as the light curve we just added) as well as any of the various t0s in the system.
End of explanation
print b['mesh@model'].qualifiers
Explanation: By default, the mesh only exposes the geometric columns of the triangles
End of explanation
print b['columns@mesh']
b['columns@mesh'] = ['teffs']
b.run_compute()
print b['mesh@model'].qualifiers
print b.get_value('teffs', time=0.0, component='primary')
Explanation: But we can also specify other columns to be included (by setting the columns parameter before calling run_compute)
End of explanation
afig, mplfig = b['mesh@model'].plot(time=0.2, fc='teffs', ec='none', show=True)
Explanation: Any of the exposed columns are then available for plotting the mesh, via b.plot.
End of explanation
<END_TASK>