.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "getting_started/get_started.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_getting_started_get_started.py: Getting Started =============== .. GENERATED FROM PYTHON SOURCE LINES 8-17 .. code-block:: python3 # Importing GemPy import gempy as gp # Importing aux libraries import numpy as np import matplotlib.pyplot as plt import matplotlib.image as mpimg .. GENERATED FROM PYTHON SOURCE LINES 18-31 Initializing the model: ~~~~~~~~~~~~~~~~~~~~~~~ The first step to create a GemPy model is create a gempy.Model object that will contain all the other data structures and necessary functionality. In addition for this example we will define a regular grid since the beginning. This is the grid where we will interpolate the 3D geological model. GemPy comes with an array of different grids for different pourposes as we will see below. For visualization usually a regular grid is the one that makes more sense. .. GENERATED FROM PYTHON SOURCE LINES 33-36 .. code-block:: python3 geo_model = gp.create_model('Model1') geo_model = gp.init_data(geo_model, extent=[0, 791, 0, 200, -582, 0], resolution=[100, 10, 100]) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /home/miguel/miniconda3/envs/gempy/lib/python3.8/site-packages/theano/gpuarray/dnn.py:192: UserWarning: Your cuDNN version is more recent than Theano. If you encounter problems, try updating Theano or downgrading cuDNN to a version >= v5 and <= v7. warnings.warn( Active grids: ['regular'] .. GENERATED FROM PYTHON SOURCE LINES 37-44 GemPy core code is written in Python. However for efficiency (and other reasons) most of heavy computations happend in optimize compile code, either C or CUDA for GPU. To do so, GemPy rely on the library theano. To guarantee maximum optimization theano requires to compile the code for every Python kernel. The compilation is done by calling the following line at any point (before computing the model): .. GENERATED FROM PYTHON SOURCE LINES 46-48 .. code-block:: python3 gp.set_interpolator(geo_model, theano_optimizer='fast_compile', verbose=[]) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Setting kriging parameters to their default values. Compiling theano function... Level of Optimization: fast_compile Device: cpu Precision: float64 Number of faults: 0 Compilation Done! Kriging values: values range 1002.20008 $C_o$ 23914.404762 drift equations [3] .. GENERATED FROM PYTHON SOURCE LINES 49-62 Creating figure: ~~~~~~~~~~~~~~~~ GemPy uses matplotlib and pyvista-vtk libraries for 2d and 3d visualization of the model respectively. One of the design decisions of GemPy is to allow real time construction of the model. What this means is that you can start adding input data and see in real time how the 3D surfaces evolve. Lets initialize the visualization windows. The first one is the 2d figure. Just place the window where you can see it (maybe move the jupyter notebook to half screen and use the other half for the renderers). .. GENERATED FROM PYTHON SOURCE LINES 64-65 %matplotlib qt5 .. GENERATED FROM PYTHON SOURCE LINES 65-67 .. code-block:: python3 p2d = gp.plot_2d(geo_model) .. image:: /getting_started/images/sphx_glr_get_started_001.png :alt: Cell Number: mid Direction: y :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 68-75 Add model section ^^^^^^^^^^^^^^^^^ In the 2d renderer we can add several cross section of the model. In this case, for simplicity sake we are just adding one perpendicular to y. .. GENERATED FROM PYTHON SOURCE LINES 78-85 Loading cross-section image: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Remember that gempy is simply using matplotlib and therofe the ax object created above is a standard matplotlib axes. This allow to manipulate it freely. Lets load an image with the information of couple of boreholes .. GENERATED FROM PYTHON SOURCE LINES 87-88 Reading image .. GENERATED FROM PYTHON SOURCE LINES 88-94 .. code-block:: python3 img = mpimg.imread('wells.png') # Plotting it inplace p2d = gp.plot_2d(geo_model, show=False) p2d.axes[0].imshow(img, origin='upper', alpha=.8, extent=(0, 791, -582, 0)) plt.show() .. image:: /getting_started/images/sphx_glr_get_started_002.png :alt: Cell Number: mid Direction: y :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 95-97 We can do the same in 3D through pyvista and vtk rendering: .. GENERATED FROM PYTHON SOURCE LINES 99-101 .. code-block:: python3 p3d = gp.plot_3d(geo_model) .. image:: /getting_started/images/sphx_glr_get_started_003.png :alt: get started :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 102-115 Building the model ------------------ Now that we have everything initialize we can start the construction of the geological model. Surfaces ~~~~~~~~ GemPy is a surface based interpolator. This means that all the input data we add has to be refered to a surface. The surfaces always mark the bottom of a unit. By default GemPy surfaces are empty: .. GENERATED FROM PYTHON SOURCE LINES 117-119 .. code-block:: python3 geo_model.surfaces .. raw:: html
surface series order_surfaces color id


.. GENERATED FROM PYTHON SOURCE LINES 120-123 If we do not care about the names and we just want to interpolate a surface we can use: .. GENERATED FROM PYTHON SOURCE LINES 125-126 Default surfaces: .. GENERATED FROM PYTHON SOURCE LINES 126-128 .. code-block:: python3 geo_model.set_default_surfaces() .. raw:: html
surface series order_surfaces color id
0 surface1 Default series 1 #015482 1
1 surface2 Default series 2 #9f0052 2


.. GENERATED FROM PYTHON SOURCE LINES 129-134 Now we can start adding data. GemPy input data consist on surface points and orientations (perpendicular to the layers). The 2D plot gives you the X and Z coordinates when hovering the mouse over. We can add a surface point as follows: .. GENERATED FROM PYTHON SOURCE LINES 136-137 Add a point .. GENERATED FROM PYTHON SOURCE LINES 137-145 .. code-block:: python3 geo_model.add_surface_points(X=223, Y=0.01, Z=-94, surface='surface1') # Plot in 2D gp.plot_2d(geo_model, cell_number=11) # Plot in 3D gp.plot_3d(geo_model) .. image:: /getting_started/images/sphx_glr_get_started_004.png :alt: get started :class: sphx-glr-single-img .. image:: /getting_started/images/sphx_glr_get_started_005.png :alt: Cell Number: 11 Direction: y :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /WorkSSD/PythonProjects/gempy/gempy/core/data_modules/geometric_data.py:1368: RuntimeWarning: divide by zero encountered in true_divide new_grid_extent = (grid_extent - np.repeat(centers, 2)) / rescaling_factor + 0.5001 /WorkSSD/PythonProjects/gempy/gempy/core/data_modules/geometric_data.py:1369: RuntimeWarning: divide by zero encountered in true_divide new_grid_values = (grid_values - centers) / rescaling_factor + 0.5001 /WorkSSD/PythonProjects/gempy/gempy/core/interpolator.py:152: RuntimeWarning: divide by zero encountered in double_scalars range_res = range_val / self.additional_data.rescaling_data.df.loc[ /WorkSSD/PythonProjects/gempy/gempy/core/interpolator.py:175: RuntimeWarning: divide by zero encountered in double_scalars cov_res = cov_val / self.additional_data.rescaling_data.df.loc[ .. GENERATED FROM PYTHON SOURCE LINES 146-148 Now we can add the other two points of the layer: .. GENERATED FROM PYTHON SOURCE LINES 150-151 Add points .. GENERATED FROM PYTHON SOURCE LINES 151-158 .. code-block:: python3 geo_model.add_surface_points(X=458, Y=0, Z=-107, surface='surface1') geo_model.add_surface_points(X=612, Y=0, Z=-14, surface='surface1') # Plotting gp.plot_2d(geo_model, cell_number=11) gp.plot_3d(geo_model) .. image:: /getting_started/images/sphx_glr_get_started_006.png :alt: get started :class: sphx-glr-single-img .. image:: /getting_started/images/sphx_glr_get_started_007.png :alt: Cell Number: 11 Direction: y :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 159-164 The minimum amount of data to interpolate anything in gempy is: a) 2 surface points per surface b) One orientation per series. Lets add an orientation anywhere in space: .. GENERATED FROM PYTHON SOURCE LINES 166-167 Adding orientation .. GENERATED FROM PYTHON SOURCE LINES 167-171 .. code-block:: python3 geo_model.add_orientations(X=350, Y=0, Z=-300, surface='surface1', pole_vector=(0, 0, 1)) gp.plot_2d(geo_model, cell_number=5) gp.plot_3d(geo_model) .. image:: /getting_started/images/sphx_glr_get_started_008.png :alt: get started :class: sphx-glr-single-img .. image:: /getting_started/images/sphx_glr_get_started_009.png :alt: Cell Number: 5 Direction: y :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 172-174 Now we have enough data for finally interpolate! .. GENERATED FROM PYTHON SOURCE LINES 176-178 .. code-block:: python3 gp.compute_model(geo_model) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Lithology ids [2. 2. 2. ... 2. 2. 2.] .. GENERATED FROM PYTHON SOURCE LINES 179-181 .. code-block:: python3 geo_model.additional_data.kriging_data .. raw:: html
values
range 1002.20008
$C_o$ 23914.404762
drift equations [3]


.. GENERATED FROM PYTHON SOURCE LINES 182-184 .. code-block:: python3 geo_model.additional_data.rescaling_data .. raw:: html
values
rescaling factor 778.0
centers [417.5, 0.005, -157.0]


.. GENERATED FROM PYTHON SOURCE LINES 185-187 That is, we have interpolated the 3D surface. We can visualize: .. GENERATED FROM PYTHON SOURCE LINES 189-190 In 2D .. GENERATED FROM PYTHON SOURCE LINES 190-195 .. code-block:: python3 gp.plot_2d(geo_model, cell_number=[5]) # In 3D gp.plot_3d(geo_model, show_surfaces=True) .. image:: /getting_started/images/sphx_glr_get_started_010.png :alt: get started :class: sphx-glr-single-img .. image:: /getting_started/images/sphx_glr_get_started_011.png :alt: Cell Number: 5 Direction: y :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 196-202 Adding more layers: ~~~~~~~~~~~~~~~~~~~ So far we only need 2 units defined. The cross-section image that we load have 4 however. Lets add two layers more: .. GENERATED FROM PYTHON SOURCE LINES 204-206 .. code-block:: python3 geo_model.surfaces .. raw:: html
surface series order_surfaces color id
0 surface1 Default series 1 #015482 1
1 surface2 Default series 2 #9f0052 2


.. GENERATED FROM PYTHON SOURCE LINES 207-209 .. code-block:: python3 geo_model.series .. raw:: html
order_series BottomRelation isActive isFault isFinite
Default series 1 Erosion True False False


.. GENERATED FROM PYTHON SOURCE LINES 210-212 .. code-block:: python3 geo_model.add_surfaces(['surface3', 'basement']) .. raw:: html
surface series order_surfaces color id
0 surface1 Default series 1 #015482 1
1 surface2 Default series 2 #9f0052 2
2 surface3 Default series 3 #ffbe00 3
3 basement Default series 4 #728f02 4


.. GENERATED FROM PYTHON SOURCE LINES 213-218 Layer 2 ~~~~~~~ Add the layer next layers: .. GENERATED FROM PYTHON SOURCE LINES 220-221 Your code here: .. GENERATED FROM PYTHON SOURCE LINES 221-226 .. code-block:: python3 geo_model.add_surface_points(X=225, Y=0, Z=-269, surface='surface2') geo_model.add_surface_points(X=459, Y=0, Z=-279, surface='surface2') # -------------------- .. raw:: html
X Y Z smooth surface
0 223.0 0.01 -94.0 0.000001 surface1
1 458.0 0.00 -107.0 0.000001 surface1
2 612.0 0.00 -14.0 0.000001 surface1
3 225.0 0.00 -269.0 0.000001 surface2
4 459.0 0.00 -279.0 0.000001 surface2


.. GENERATED FROM PYTHON SOURCE LINES 227-228 Compute model .. GENERATED FROM PYTHON SOURCE LINES 228-230 .. code-block:: python3 gp.compute_model(geo_model) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Lithology ids [4. 4. 4. ... 2. 2. 2.] .. GENERATED FROM PYTHON SOURCE LINES 231-234 .. code-block:: python3 gp.plot_2d(geo_model, cell_number=5, legend='force') gp.plot_3d(geo_model) .. image:: /getting_started/images/sphx_glr_get_started_012.png :alt: get started :class: sphx-glr-single-img .. image:: /getting_started/images/sphx_glr_get_started_013.png :alt: Cell Number: 5 Direction: y :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 235-238 Layer 3 ~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 240-241 Your code here: .. GENERATED FROM PYTHON SOURCE LINES 241-247 .. code-block:: python3 geo_model.add_surface_points(X=225, Y=0, Z=-439, surface='surface3') geo_model.add_surface_points(X=464, Y=0, Z=-456, surface='surface3') geo_model.add_surface_points(X=619, Y=0, Z=-433, surface='surface3') # ------------------ .. raw:: html
X Y Z smooth surface
0 223.0 0.01 -94.0 0.000001 surface1
1 458.0 0.00 -107.0 0.000001 surface1
2 612.0 0.00 -14.0 0.000001 surface1
3 225.0 0.00 -269.0 0.000001 surface2
4 459.0 0.00 -279.0 0.000001 surface2
5 225.0 0.00 -439.0 0.000001 surface3
6 464.0 0.00 -456.0 0.000001 surface3
7 619.0 0.00 -433.0 0.000001 surface3


.. GENERATED FROM PYTHON SOURCE LINES 248-249 Computing and plotting 3D .. GENERATED FROM PYTHON SOURCE LINES 249-254 .. code-block:: python3 gp.compute_model(geo_model) gp.plot_2d(geo_model, cell_number=5, legend='force') gp.plot_3d(geo_model, kwargs_plot_structured_grid={'opacity': .2}) .. image:: /getting_started/images/sphx_glr_get_started_014.png :alt: get started :class: sphx-glr-single-img .. image:: /getting_started/images/sphx_glr_get_started_015.png :alt: Cell Number: 5 Direction: y :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 255-270 Adding a Fault -------------- So far the model is simply a depositional unit. GemPy allows for unconformities and faults to build complex models. This input is given by categorical data. In general: input data (surface points/ orientations)
order_series BottomRelation isActive isFault isFinite
Default series 1 Erosion True False False
Fault1 2 Erosion False False False


.. GENERATED FROM PYTHON SOURCE LINES 275-277 .. code-block:: python3 geo_model.reorder_features(['Fault1', 'Default series']) .. raw:: html
order_series BottomRelation isActive isFault isFinite
Fault1 1 Erosion False False False
Default series 2 Erosion True False False


.. GENERATED FROM PYTHON SOURCE LINES 278-280 Then define that is a fault: .. GENERATED FROM PYTHON SOURCE LINES 282-284 .. code-block:: python3 geo_model.set_is_fault('Fault1') .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Fault colors changed. If you do not like this behavior, set change_color to False. .. raw:: html
order_series BottomRelation isActive isFault isFinite
Fault1 1 Fault False True False
Default series 2 Erosion True False False


.. GENERATED FROM PYTHON SOURCE LINES 285-287 But we also need to add a new surface: .. GENERATED FROM PYTHON SOURCE LINES 289-291 .. code-block:: python3 geo_model.add_surfaces('fault1') .. raw:: html
surface series order_surfaces color id
0 surface1 Default series 1 #015482 1
1 surface2 Default series 2 #9f0052 2
2 surface3 Default series 3 #ffbe00 3
3 basement Default series 4 #728f02 4
4 fault1 Default series 5 #443988 5


.. GENERATED FROM PYTHON SOURCE LINES 292-294 And finally assign the new surface to the new series/fault .. GENERATED FROM PYTHON SOURCE LINES 296-298 .. code-block:: python3 gp.map_stack_to_surfaces(geo_model, {'Fault1': 'fault1'}) .. raw:: html
surface series order_surfaces color id
4 fault1 Fault1 1 #443988 1
0 surface1 Default series 1 #015482 2
1 surface2 Default series 2 #9f0052 3
2 surface3 Default series 3 #ffbe00 4
3 basement Default series 4 #728f02 5


.. GENERATED FROM PYTHON SOURCE LINES 299-302 Now we can just add input data as before (remember the minimum amount of input data to compute a model): .. GENERATED FROM PYTHON SOURCE LINES 304-305 Add input data of the fault .. GENERATED FROM PYTHON SOURCE LINES 305-312 .. code-block:: python3 geo_model.add_surface_points(X=550, Y=0, Z=-30, surface='fault1') geo_model.add_surface_points(X=650, Y=0, Z=-200, surface='fault1') geo_model.add_orientations(X=600, Y=0, Z=-100, surface='fault1', pole_vector=(.3, 0, .3)) # Plotting Inpute data gp.plot_2d(geo_model, show_solutions=False) .. image:: /getting_started/images/sphx_glr_get_started_016.png :alt: Cell Number: mid Direction: y :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 313-315 And now is computing as before: .. GENERATED FROM PYTHON SOURCE LINES 317-318 Compute .. GENERATED FROM PYTHON SOURCE LINES 318-324 .. code-block:: python3 gp.compute_model(geo_model) # Plot gp.plot_2d(geo_model, cell_number=5, legend='force') gp.plot_3d(geo_model, kwargs_plot_structured_grid={'opacity': .2}) .. image:: /getting_started/images/sphx_glr_get_started_017.png :alt: get started :class: sphx-glr-single-img .. image:: /getting_started/images/sphx_glr_get_started_018.png :alt: Cell Number: 5 Direction: y :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 325-328 As you can see now instead of having folding layers we have a sharp jump. Building on this you can pretty much any model you can imagine. .. GENERATED FROM PYTHON SOURCE LINES 331-344 Additional features: ==================== Over the years we have built a bunch of assets integrate with gempy. Here we will show some of them: Topography ---------- GemPy has a built-in capabilities to read and manipulate topographic data (through gdal). To show an example we can just create a random topography: .. GENERATED FROM PYTHON SOURCE LINES 346-347 Adding random topography .. GENERATED FROM PYTHON SOURCE LINES 347-350 .. code-block:: python3 geo_model.set_topography(source='random', fd=1.9, d_z=np.array([-150, 0]), resolution=np.array([200, 200])) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Active grids: ['regular' 'topography'] Grid Object. Values: array([[ 3.955 , 10. , -579.09 ], [ 3.955 , 10. , -573.27 ], [ 3.955 , 10. , -567.45 ], ..., [ 791. , 197.98994975, -117.32042406], [ 791. , 198.99497487, -115.02473356], [ 791. , 200. , -114.7005127 ]]) .. GENERATED FROM PYTHON SOURCE LINES 351-353 The topography can we visualize in both renderers: .. GENERATED FROM PYTHON SOURCE LINES 355-358 .. code-block:: python3 gp.plot_2d(geo_model, cell_number=5, legend='force') gp.plot_3d(geo_model, kwargs_plot_structured_grid={'opacity':.2}) .. image:: /getting_started/images/sphx_glr_get_started_019.png :alt: get started :class: sphx-glr-single-img .. image:: /getting_started/images/sphx_glr_get_started_020.png :alt: Cell Number: 5 Direction: y :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 359-361 But also allows us to compute the geological map of an area: .. GENERATED FROM PYTHON SOURCE LINES 363-368 .. code-block:: python3 gp.compute_model(geo_model) # sphinx_gallery_thumbnail_number = 16 gp.plot_3d(geo_model, show_topography=True) .. image:: /getting_started/images/sphx_glr_get_started_021.png :alt: get started :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /WorkSSD/PythonProjects/gempy/gempy/core/solution.py:173: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray. self.geological_map = np.array( .. GENERATED FROM PYTHON SOURCE LINES 369-377 Gravity inversion ----------------- GemPy also allows for inversions (in production only gravity so far). We can see a small demo how this works. The first thing to do is to assign densities to each of the units: .. GENERATED FROM PYTHON SOURCE LINES 379-381 .. code-block:: python3 geo_model.add_surface_values([0, 2.6, 2.4, 3.2, 3.6], ['density']) .. raw:: html
surface series order_surfaces color id density
4 fault1 Fault1 1 #443988 1 0.000000
0 surface1 Default series 1 #015482 2 2.600000
1 surface2 Default series 2 #9f0052 3 2.400000
2 surface3 Default series 3 #ffbe00 4 3.200000
3 basement Default series 4 #728f02 5 3.600000


.. GENERATED FROM PYTHON SOURCE LINES 382-384 Also we can create a centered grid around a device for precision: .. GENERATED FROM PYTHON SOURCE LINES 386-388 .. code-block:: python3 geo_model.set_centered_grid(centers=[[400, 0, 0]], resolution=[10, 10, 100], radius=800) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Active grids: ['regular' 'topography' 'centered'] Grid Object. Values: array([[ 3.955 , 10. , -579.09 ], [ 3.955 , 10. , -573.27 ], [ 3.955 , 10. , -567.45 ], ..., [ 1200. , 800. , -922.71624587], [ 1200. , 800. , -964.3665184 ], [ 1200. , 800. , -1008. ]]) .. GENERATED FROM PYTHON SOURCE LINES 389-391 We need to modify the compile code: .. GENERATED FROM PYTHON SOURCE LINES 393-395 .. code-block:: python3 gp.set_interpolator(geo_model, output=['gravity'], theano_optimizer='fast_run') .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Setting kriging parameters to their default values. Compiling theano function... Level of Optimization: fast_run Device: cpu Precision: float64 Number of faults: 1 Compilation Done! Kriging values: values range 1002.20008 $C_o$ 23914.404762 drift equations [3, 3] .. GENERATED FROM PYTHON SOURCE LINES 396-399 But now additionally to the interpolation we also compute the forward gravity of the model (at the point XYZ = 400, 0, 0) .. GENERATED FROM PYTHON SOURCE LINES 401-403 .. code-block:: python3 gp.compute_model(geo_model) geo_model.solutions.fw_gravity .. rst-class:: sphx-glr-script-out Out: .. code-block:: none array([-80.36323225]) .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 44.872 seconds) .. _sphx_glr_download_getting_started_get_started.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: get_started.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: get_started.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_