summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/source/Tutorials/Image.ipynb52
-rw-r--r--doc/source/Tutorials/Sift/sift.ipynb66
-rw-r--r--doc/source/Tutorials/array_widget.rst4
-rw-r--r--doc/source/Tutorials/codec/Bitshuffle-LZ4.ipynb317
-rw-r--r--doc/source/Tutorials/fit.rst6
-rw-r--r--doc/source/Tutorials/fitconfig.rst4
-rw-r--r--doc/source/Tutorials/io.rst74
-rw-r--r--doc/source/Tutorials/writing_NXdata.rst8
-rw-r--r--doc/source/_static/navbar_icons/pypi.svg705
-rw-r--r--doc/source/_templates/version.html2
-rw-r--r--doc/source/applications/compare.rst40
-rw-r--r--doc/source/applications/img/silx-compare.pngbin0 -> 424032 bytes
-rw-r--r--doc/source/applications/index.rst6
-rw-r--r--doc/source/applications/view.rst54
-rw-r--r--doc/source/conf.py128
-rw-r--r--doc/source/ext/snapshotqt_directive.py107
-rw-r--r--doc/source/ext/sphinxext-archive.py54
-rw-r--r--doc/source/img/silx-view.gifbin0 -> 4939183 bytes
-rw-r--r--doc/source/index.rst165
-rw-r--r--doc/source/install.rst133
-rw-r--r--doc/source/license.rst12
-rw-r--r--doc/source/modules/gui/data/img/ArrayTableWidget.pngbin41977 -> 48408 bytes
-rw-r--r--doc/source/modules/gui/data/img/DataViewer.pngbin37500 -> 42376 bytes
-rw-r--r--doc/source/modules/gui/dialog/img/abstractdatafiledialog.svg1958
-rw-r--r--doc/source/modules/gui/icons.rst400
-rw-r--r--doc/source/modules/gui/plot/getting_started.rst6
-rw-r--r--doc/source/modules/gui/plot/img/BasicGridStatsWidget.pngbin20668 -> 13381 bytes
-rw-r--r--doc/source/modules/gui/plot/img/BasicStatsWidget.pngbin8699 -> 9452 bytes
-rw-r--r--doc/source/modules/gui/plot/img/LimitsToolBar.pngbin21679 -> 21920 bytes
-rw-r--r--doc/source/modules/gui/plot/img/ROIStatsWidget.pngbin9659 -> 7176 bytes
-rw-r--r--doc/source/modules/gui/plot/img/logColorbar.pngbin12390 -> 7855 bytes
-rw-r--r--doc/source/modules/gui/plot/items.rst31
-rw-r--r--doc/source/modules/gui/plot/plotsignal.rst1
-rw-r--r--doc/source/modules/gui/plot/plotwidget.rst1
-rw-r--r--doc/source/modules/gui/plot3d/img/SceneWidget.pngbin73947 -> 74504 bytes
-rw-r--r--doc/source/modules/gui/plot3d/items.rst23
-rw-r--r--doc/source/modules/gui/widgets/img/FrameBrowser.pngbin4538 -> 3379 bytes
-rw-r--r--doc/source/modules/gui/widgets/img/HorizontalSliderWithBrowser.pngbin2884 -> 2987 bytes
-rw-r--r--doc/source/modules/gui/widgets/img/PeriodicCombo.pngbin3124 -> 2912 bytes
-rw-r--r--doc/source/modules/gui/widgets/img/PeriodicList.pngbin38615 -> 27993 bytes
-rw-r--r--doc/source/modules/gui/widgets/img/PeriodicTable.pngbin61338 -> 35882 bytes
-rw-r--r--doc/source/modules/gui/widgets/img/RangeSlider.pngbin1028 -> 1024 bytes
-rw-r--r--doc/source/modules/gui/widgets/img/TableWidget.pngbin3624 -> 3824 bytes
-rw-r--r--doc/source/modules/gui/widgets/img/ThreadPoolPushButton.pngbin2566 -> 2383 bytes
-rw-r--r--doc/source/modules/gui/widgets/img/WaitingPushButton.pngbin1187 -> 1148 bytes
-rw-r--r--doc/source/modules/gui/widgets/printpreview.rst4
-rw-r--r--doc/source/modules/index.rst2
-rw-r--r--doc/source/modules/io/commonh5.rst28
-rw-r--r--doc/source/modules/io/fioh5.rst27
-rw-r--r--doc/source/modules/io/h5py_utils.rst8
-rw-r--r--doc/source/modules/io/index.rst5
-rw-r--r--doc/source/modules/io/spech5.rst8
-rw-r--r--doc/source/modules/math/fit/functions.rst1
-rw-r--r--doc/source/modules/utils/html.rst7
-rw-r--r--doc/source/modules/utils/index.rst2
-rw-r--r--doc/source/modules/utils/retry.rst7
-rw-r--r--doc/source/overview.rst21
-rw-r--r--doc/source/sample_code/img/compareBackends.pngbin0 -> 63046 bytes
-rw-r--r--doc/source/sample_code/img/compositeline.pngbin23150 -> 0 bytes
-rw-r--r--doc/source/sample_code/img/floatedit.pngbin0 -> 4511 bytes
-rw-r--r--doc/source/sample_code/img/plotUpdateImageFromGevent.pngbin0 -> 50938 bytes
-rw-r--r--doc/source/sample_code/img/stackedprogressbar.pngbin0 -> 6508 bytes
-rw-r--r--doc/source/sample_code/img/waiterOverlay.pngbin0 -> 41574 bytes
-rw-r--r--doc/source/sample_code/index.rst34
-rw-r--r--doc/source/tutorials.rst5
-rw-r--r--doc/source/user_guide.rst87
-rw-r--r--doc/source/virtualenv.rst8
67 files changed, 4062 insertions, 549 deletions
diff --git a/doc/source/Tutorials/Image.ipynb b/doc/source/Tutorials/Image.ipynb
index 5ddab38..cea6c31 100644
--- a/doc/source/Tutorials/Image.ipynb
+++ b/doc/source/Tutorials/Image.ipynb
@@ -52,14 +52,20 @@
],
"source": [
"import time, os\n",
+ "\n",
"start_time = time.time()\n",
"import silx\n",
- "print(\"Using silx version \",silx.version)\n",
+ "\n",
+ "print(\"Using silx version \", silx.version)\n",
"from silx.resources import ExternalResources\n",
- "downloader = ExternalResources(\"pyFAI\", \"http://www.silx.org/pub/pyFAI/testimages\", \"PYFAI_DATA\")\n",
+ "\n",
+ "downloader = ExternalResources(\n",
+ " \"pyFAI\", \"http://www.silx.org/pub/pyFAI/testimages\", \"PYFAI_DATA\"\n",
+ ")\n",
"fname = downloader.getfile(\"powder_200_2_0001.cbf\")\n",
"print(\"filename\", os.path.basename(fname))\n",
"import fabio\n",
+ "\n",
"nbins = 1000"
]
},
@@ -80,9 +86,9 @@
"source": [
"%%time\n",
"\n",
- "#Display an image and the histogram of values (in log scale)\n",
+ "# Display an image and the histogram of values (in log scale)\n",
"img = fabio.open(fname).data\n",
- "log_img = numpy.arcsinh(img) # arcsinh is well behaved log-like function\n",
+ "log_img = numpy.arcsinh(img) # arcsinh is well behaved log-like function\n",
"his, edges = numpy.histogram(log_img, nbins)"
]
},
@@ -895,10 +901,13 @@
}
],
"source": [
- "fig, ax = subplots(1,2,)\n",
- "center = (edges[1:] + edges[:-1])/2.0 # this is the center of the bins \n",
+ "fig, ax = subplots(\n",
+ " 1,\n",
+ " 2,\n",
+ ")\n",
+ "center = (edges[1:] + edges[:-1]) / 2.0 # this is the center of the bins\n",
"ax[1].imshow(log_img, cmap=\"inferno\")\n",
- "ax[0].plot(center,his)"
+ "ax[0].plot(center, his)"
]
},
{
@@ -924,17 +933,20 @@
"metadata": {},
"outputs": [],
"source": [
- "#switch this to \"CPU\" to have a fail safe \n",
+ "# switch this to \"CPU\" to have a fail safe\n",
"devicetype = \"GPU\"\n",
"from silx.opencl.codec.byte_offset import ByteOffset\n",
"from silx.opencl.image import ImageProcessing\n",
"import pyopencl, pyopencl.array, pyopencl.elementwise\n",
+ "\n",
"cbf = fabio.cbfimage.CbfImage()\n",
"bo = ByteOffset(os.path.getsize(fname), img.size, devicetype=devicetype)\n",
- "ash = pyopencl.elementwise.ElementwiseKernel(bo.ctx, \n",
- " arguments=\"float* data, float* res\", \n",
- " operation=\"res[i] = asinh(data[i])\", \n",
- " name='arcsinh_kernel')\n",
+ "ash = pyopencl.elementwise.ElementwiseKernel(\n",
+ " bo.ctx,\n",
+ " arguments=\"float* data, float* res\",\n",
+ " operation=\"res[i] = asinh(data[i])\",\n",
+ " name=\"arcsinh_kernel\",\n",
+ ")\n",
"ip = ImageProcessing(template=img, ctx=bo.ctx)\n",
"res = pyopencl.array.empty(bo.queue, img.shape, dtype=float32)"
]
@@ -954,11 +966,11 @@
}
],
"source": [
- "%%time \n",
+ "%%time\n",
"raw = cbf.read(fname, only_raw=True)\n",
"dec = bo(raw, as_float=True)\n",
"ash(dec, res)\n",
- "his, edges = ip.histogram(res, nbins, copy=False)\n",
+ "his, edges = ip.histogram(res, nbins, copy=False)\n",
"log_img = res.get()"
]
},
@@ -1771,10 +1783,13 @@
}
],
"source": [
- "fig, ax = subplots(1,2,)\n",
- "center = (edges[1:] + edges[:-1])/2.0 # this is the center of the bins \n",
+ "fig, ax = subplots(\n",
+ " 1,\n",
+ " 2,\n",
+ ")\n",
+ "center = (edges[1:] + edges[:-1]) / 2.0 # this is the center of the bins\n",
"ax[1].imshow(log_img, cmap=\"inferno\")\n",
- "ax[0].plot(center,his)"
+ "ax[0].plot(center, his)"
]
},
{
@@ -1826,9 +1841,10 @@
"raw = cbf.read(fname, only_raw=True)\n",
"dec = bo(raw, as_float=True)\n",
"ash(dec, res)\n",
- "his, edges = ip.histogram(res, nbins, copy=False)\n",
+ "his, edges = ip.histogram(res, nbins, copy=False)\n",
"log_img = res.get()\n",
"import os\n",
+ "\n",
"print(os.linesep.join(bo.log_profile()))\n",
"print(os.linesep.join(ip.log_profile()))"
]
diff --git a/doc/source/Tutorials/Sift/sift.ipynb b/doc/source/Tutorials/Sift/sift.ipynb
index 4b96aad..af880d4 100644
--- a/doc/source/Tutorials/Sift/sift.ipynb
+++ b/doc/source/Tutorials/Sift/sift.ipynb
@@ -43,6 +43,7 @@
],
"source": [
"import time\n",
+ "\n",
"start_time = time.time()\n",
"%pylab nbagg"
]
@@ -865,10 +866,12 @@
"source": [
"# display test image\n",
"import silx\n",
- "print(\"Silx version %s\"%silx.version)\n",
+ "\n",
+ "print(\"Silx version %s\" % silx.version)\n",
"\n",
"from PIL import Image\n",
"from silx.test.utils import utilstest\n",
+ "\n",
"path = utilstest.getfile(\"lena.png\")\n",
"image = numpy.asarray(Image.open(path))\n",
"fig, ax = subplots()\n",
@@ -891,15 +894,16 @@
}
],
"source": [
- "#Initialization of the sift object is time consuming: it compiles all the code.\n",
- "import os \n",
- "#set to 1 to see the compilation going on\n",
- "os.environ[\"PYOPENCL_COMPILER_OUTPUT\"] = \"0\" \n",
- "#switch to \"GPU\" to \"CPU\" to enable fail-save version.\n",
- "devicetype=\"GPU\"\n",
+ "# Initialization of the sift object is time consuming: it compiles all the code.\n",
+ "import os\n",
+ "\n",
+ "# set to 1 to see the compilation going on\n",
+ "os.environ[\"PYOPENCL_COMPILER_OUTPUT\"] = \"0\"\n",
+ "# switch to \"GPU\" to \"CPU\" to enable fail-save version.\n",
+ "devicetype = \"GPU\"\n",
"from silx.image import sift\n",
"\n",
- "%time sift_ocl = sift.SiftPlan(template=image, devicetype=devicetype) \n",
+ "%time sift_ocl = sift.SiftPlan(template=image, devicetype=devicetype)\n",
"\n",
"print(\"Device used for calculation: \", sift_ocl.ctx.devices[0].name)"
]
@@ -933,13 +937,15 @@
}
],
"source": [
- "print(\"Time for calculating the keypoints on one image of size %sx%s\"%image.shape[:2])\n",
+ "print(\"Time for calculating the keypoints on one image of size %sx%s\" % image.shape[:2])\n",
"%time keypoints = sift_ocl(image)\n",
- "print(\"Number of keypoints: %s\"%len(keypoints))\n",
+ "print(\"Number of keypoints: %s\" % len(keypoints))\n",
"print(\"Keypoint content:\")\n",
"print(keypoints.dtype)\n",
- "print(\"x: %.3f \\t y: %.3f \\t sigma: %.3f \\t angle: %.3f\" % \n",
- " (keypoints[-1].x,keypoints[-1].y,keypoints[-1].scale,keypoints[-1].angle))\n",
+ "print(\n",
+ " \"x: %.3f \\t y: %.3f \\t sigma: %.3f \\t angle: %.3f\"\n",
+ " % (keypoints[-1].x, keypoints[-1].y, keypoints[-1].scale, keypoints[-1].angle)\n",
+ ")\n",
"print(\"descriptor:\")\n",
"print(keypoints[-1].desc)"
]
@@ -1753,10 +1759,10 @@
}
],
"source": [
- "#Overlay keypoints on the image:\n",
+ "# Overlay keypoints on the image:\n",
"fig, ax = subplots()\n",
"ax.imshow(image)\n",
- "ax.plot(keypoints[:].x, keypoints[:].y,\".g\")"
+ "ax.plot(keypoints[:].x, keypoints[:].y, \".g\")"
]
},
{
@@ -2568,7 +2574,7 @@
}
],
"source": [
- "#Diplaying keypoints by scale:\n",
+ "# Diplaying keypoints by scale:\n",
"fig, ax = subplots()\n",
"ax.hist(keypoints[:].scale, 100)\n",
"ax.set_xlabel(\"scale\")"
@@ -3383,18 +3389,18 @@
}
],
"source": [
- "#One can see 3 groups of keypoints, boundaries at: 8 and 20. Let's display them using colors.\n",
+ "# One can see 3 groups of keypoints, boundaries at: 8 and 20. Let's display them using colors.\n",
"S = 8\n",
"L = 20\n",
- "tiny = keypoints[keypoints[:].scale<S]\n",
- "small = keypoints[numpy.logical_and(keypoints[:].scale<L,keypoints[:].scale>=S)]\n",
- "bigger = keypoints[keypoints[:].scale>=L]\n",
+ "tiny = keypoints[keypoints[:].scale < S]\n",
+ "small = keypoints[numpy.logical_and(keypoints[:].scale < L, keypoints[:].scale >= S)]\n",
+ "bigger = keypoints[keypoints[:].scale >= L]\n",
"\n",
"fig, ax = subplots()\n",
"ax.imshow(image, cmap=\"gray\")\n",
- "ax.plot(tiny[:].x, tiny[:].y,\",g\", label=\"tiny\")\n",
- "ax.plot(small[:].x, small[:].y,\".b\", label=\"small\")\n",
- "ax.plot(bigger[:].x, bigger[:].y,\"or\", label=\"large\")\n",
+ "ax.plot(tiny[:].x, tiny[:].y, \",g\", label=\"tiny\")\n",
+ "ax.plot(small[:].x, small[:].y, \".b\", label=\"small\")\n",
+ "ax.plot(bigger[:].x, bigger[:].y, \"or\", label=\"large\")\n",
"ax.legend()"
]
},
@@ -3417,7 +3423,7 @@
"outputs": [],
"source": [
"shifted = numpy.zeros_like(image)\n",
- "shifted[5:,8:] = image[:-5, :-8]\n",
+ "shifted[5:, 8:] = image[:-5, :-8]\n",
"shifted_points = sift_ocl(shifted)"
]
},
@@ -3442,9 +3448,16 @@
"source": [
"%time mp = sift.MatchPlan()\n",
"%time match = mp(keypoints, shifted_points)\n",
- "print(\"Number of Keypoints with for image 1 : %i, For image 2 : %i, Matching keypoints: %i\" % (keypoints.size, shifted_points.size, match.shape[0]))\n",
+ "print(\n",
+ " \"Number of Keypoints with for image 1 : %i, For image 2 : %i, Matching keypoints: %i\"\n",
+ " % (keypoints.size, shifted_points.size, match.shape[0])\n",
+ ")\n",
"from numpy import median\n",
- "print(\"Measured offsets dx: %.3f, dy: %.3f\"%(median(match[:,1].x-match[:,0].x),median(match[:,1].y-match[:,0].y)))"
+ "\n",
+ "print(\n",
+ " \"Measured offsets dx: %.3f, dy: %.3f\"\n",
+ " % (median(match[:, 1].x - match[:, 0].x), median(match[:, 1].y - match[:, 0].y))\n",
+ ")"
]
},
{
@@ -4258,9 +4271,10 @@
"source": [
"# Example of usage of the automatic alignment:\n",
"import scipy.ndimage\n",
+ "\n",
"rotated = scipy.ndimage.rotate(image, 20, reshape=False)\n",
"sa = sift.LinearAlign(image, devicetype=devicetype)\n",
- "fig,ax = subplots(1, 3, figsize=(9,3))\n",
+ "fig, ax = subplots(1, 3, figsize=(9, 3))\n",
"ax[0].imshow(image)\n",
"ax[0].set_title(\"original\")\n",
"ax[1].imshow(rotated)\n",
diff --git a/doc/source/Tutorials/array_widget.rst b/doc/source/Tutorials/array_widget.rst
index c6a32e3..b0bc890 100644
--- a/doc/source/Tutorials/array_widget.rst
+++ b/doc/source/Tutorials/array_widget.rst
@@ -23,7 +23,7 @@ Let's look at a simple usage example:
w = ArrayTableWidget()
w.setArrayData(array, labels=True)
w.show()
- app.exec_()
+ app.exec()
.. |imgArray0| image:: img/arraywidget3D_0.png
@@ -242,6 +242,6 @@ of RGB colors.
fgcolors=fcolors)
atw.show()
- app.exec_()
+ app.exec()
diff --git a/doc/source/Tutorials/codec/Bitshuffle-LZ4.ipynb b/doc/source/Tutorials/codec/Bitshuffle-LZ4.ipynb
new file mode 100644
index 0000000..f5ece05
--- /dev/null
+++ b/doc/source/Tutorials/codec/Bitshuffle-LZ4.ipynb
@@ -0,0 +1,317 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "ba432c39-a7a0-4c75-93f9-dcbd879ff5f5",
+ "metadata": {},
+ "source": [
+ "# Bitshuffle-LZ decompression on GPU\n",
+ "\n",
+ "This tutorial explains:\n",
+ "\n",
+ "* how to read a HDF5 dataset chunk-by-chunk using the direct-chunk-read feature \n",
+ "* how to perform the bitshuffle-LZ4 decompression on the GPU using OpenCL.\n",
+ "\n",
+ "It uses a stack of 100 frames collected at the ESRF BM29 beamline with a Pilatus 2M, during a HPLC experiment."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "529014bd-2265-4057-8538-1f2a810f7661",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "fdbaea8e-f713-4f89-8d93-586e8fd2fdac",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Version of silx used (should be 1.2): 1.2.0-a0\n"
+ ]
+ }
+ ],
+ "source": [
+ "# some imports\n",
+ "import time\n",
+ "import h5py\n",
+ "import hdf5plugin\n",
+ "import numpy\n",
+ "from matplotlib.pyplot import subplots\n",
+ "from matplotlib.colors import LogNorm\n",
+ "import silx\n",
+ "from silx.resources import ExternalResources\n",
+ "from silx.opencl.codec.bitshuffle_lz4 import BitshuffleLz4\n",
+ "\n",
+ "start_time = time.perf_counter()\n",
+ "print(f\"Version of silx used (should be 1.2): {silx.version}\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "a9337c85-cc22-4dd7-9a95-66634ec27432",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Download some data from internet:\n",
+ "filename = ExternalResources(\"silx\", \"http://www.silx.org/pub/silx\").getfile(\"hplc.h5\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "92a1f29a-4501-49e5-97ec-ad6067202492",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "dataset of shape (100, 1679, 1475) and dtype int32. Images look like:\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Display one frame:\n",
+ "fig, ax = subplots()\n",
+ "h = h5py.File(filename)\n",
+ "ds = h[\"/entry_0000/measurement/data\"]\n",
+ "ax.imshow(ds[0], norm=LogNorm())\n",
+ "print(f\"dataset of shape {ds.shape} and dtype {ds.dtype}. Images look like:\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "3a923d74-d164-4dc1-ab2b-2ba1fae6b027",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "696 ms ± 14.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# How long does it take to read all frames ?\n",
+ "%timeit for frame in ds: pass"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "6bf7abcb-87d8-4d52-9063-19ed2c0939b3",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "29.3 ms ± 343 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "(0, 1358315)"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# How long does it take to read the raw data (uncompresed) ?\n",
+ "filter_mask, chunk = ds.id.read_direct_chunk(ds.id.get_chunk_info(0).chunk_offset)\n",
+ "%timeit for i in range(ds.id.get_num_chunks()): filter_mask, chunk = ds.id.read_direct_chunk(ds.id.get_chunk_info(i).chunk_offset)\n",
+ "filter_mask, len(chunk)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "d572e453-67e1-4cd5-9faf-aed1ef6ddbbe",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "cl.Array([14, 10, 13, ..., 2, 3, 2], dtype=int32)"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Setup the decompressor on the GPU:\n",
+ "gpu_lz = BitshuffleLz4(len(chunk), numpy.prod(ds.shape[1:]), ds.dtype)\n",
+ "gpu_lz.decompress(chunk)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "cc985465-78e3-43e9-a76d-a0c1452ede1e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig, ax = subplots()\n",
+ "frame = gpu_lz.decompress(chunk).get().reshape(ds.shape[1:])\n",
+ "ax.imshow(gpu_lz.decompress(chunk).get().reshape(ds.shape[1:]), norm=LogNorm())\n",
+ "# Validate the decompression on the GPU gives actually the proper result\n",
+ "numpy.all(frame == ds[0])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "fe78c750-5e4a-45f9-848d-387050aef0bd",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "112 ms ± 343 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%timeit\n",
+ "for i in range(ds.id.get_num_chunks()):\n",
+ " filter_mask, chunk = ds.id.read_direct_chunk(ds.id.get_chunk_info(i).chunk_offset)\n",
+ " gpu_lz.decompress(chunk, wg=128)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "66816e9d-d974-485f-9768-1f2f14661fb7",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "OpenCL kernel profiling statistics in milliseconds for: BitshuffleLz4\n",
+ " Kernel name (count): min median max mean std\n",
+ " copy raw H -> D ( 100): 0.117 0.118 0.128 0.118 0.002\n",
+ " LZ4 unblock ( 100): 0.289 0.293 0.304 0.293 0.003\n",
+ " LZ4 decompress ( 100): 0.144 0.146 0.150 0.146 0.001\n",
+ "________________________________________________________________________________\n",
+ " Total OpenCL execution time : 55.774ms\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Some profiling information:\n",
+ "gpu_lz.set_profiling(True)\n",
+ "for i in range(ds.id.get_num_chunks()):\n",
+ " filter_mask, chunk = ds.id.read_direct_chunk(ds.id.get_chunk_info(i).chunk_offset)\n",
+ " gpu_lz.decompress(chunk, wg=128)\n",
+ "print(\"\\n\".join(gpu_lz.log_profile(stats=True)))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "495d6274-fd39-41f9-aaac-c5c8cd8cba40",
+ "metadata": {},
+ "source": [
+ "## Conclusion\n",
+ "\n",
+ "A speed-up factor 6 has been observed which is mainly due to the (slow) parsing of the input to find the start of the LZ4 blocks. \n",
+ "The decompression and bit-unshuffling is comparatively fast !\n",
+ "This procedure is mainly worth when subsequent analysis takes place on the GPU, since it saves the time to send the decompressed array."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "b4ff76c0-c176-459a-9178-bb5448a102e1",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Total run-time for the notebook 18.307s\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(f\"Total run-time for the notebook {time.perf_counter()-start_time:.3f}s\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/doc/source/Tutorials/fit.rst b/doc/source/Tutorials/fit.rst
index d9671f4..c0eafc5 100644
--- a/doc/source/Tutorials/fit.rst
+++ b/doc/source/Tutorials/fit.rst
@@ -450,7 +450,7 @@ The following example illustrates the strip background removal process:
app = qt.QApplication([])
plot(x, y, x, actual_bg, x, strip_bg)
plot(x, y, x, (y - strip_bg))
- app.exec_()
+ app.exec()
.. |imgStrip1| image:: img/stripbg_plot1.png
:height: 300px
@@ -545,7 +545,7 @@ Simple usage
w.setData(x=x, y=y)
w.show()
- a.exec_()
+ a.exec()
.. |imgFitWidget1| image:: img/fitwidget1.png
:width: 300px
@@ -638,7 +638,7 @@ The :class:`FitWidget` can be initialised with a non-standard
fw = FitWidget(fitmngr=myfitmngr)
fw.show()
- a.exec_()
+ a.exec()
In our previous example, we didn't load a customised :class:`FitManager`,
therefore, the fit widget automatically initialised the default fit manager and
diff --git a/doc/source/Tutorials/fitconfig.rst b/doc/source/Tutorials/fitconfig.rst
index 225ef8f..0d7538c 100644
--- a/doc/source/Tutorials/fitconfig.rst
+++ b/doc/source/Tutorials/fitconfig.rst
@@ -52,7 +52,7 @@ dialog by FitWidget:
- :meth:`show`: should cause the widget to become visible to the
user)
- - :meth:`exec_`: should run while the user is interacting with the
+ - :meth:`exec`: should run while the user is interacting with the
widget, interrupting the rest of the program. It should
typically end (*return*) when the user clicks an *OK*
or a *Cancel* button.
@@ -175,7 +175,7 @@ used by our fit function to scale the *y* values.
fw.associateConfigDialog("scaled linear", CustomConfigWidget())
fw.show()
- app.exec_()
+ app.exec()
.. |img0| image:: img/custom_config_scale1.0.png
:height: 300px
diff --git a/doc/source/Tutorials/io.rst b/doc/source/Tutorials/io.rst
index 8b70e83..4c54bba 100644
--- a/doc/source/Tutorials/io.rst
+++ b/doc/source/Tutorials/io.rst
@@ -72,6 +72,19 @@ It exposes an HDF5 group as a python object that resembles a python
dictionary and an HDF5 dataset or attribute as an object that resembles a
numpy array.
+
+silx.io.h5py_utils
+++++++++++++++++++
+
+The *h5py* library does not support concurrent HDF5 reading and writing in
+different processes in a convenient way. SWMR does not allow adding groups,
+datasets and attributes during writing. In addition SWMR does not work on
+network file systems.
+
+The module :mod:`silx.io.h5py_utils` provides utility methods for reading
+an HDF5 file that is being modified by another process without SWMR.
+
+
API description
---------------
@@ -279,6 +292,67 @@ inside its context manager:
maxPhi = sf["2.1/measurement/Phi"][...].max()
+Concurrent HDF5
++++++++++++++++
+
+When reading an HDF5 file that is being written to, exceptions
+can be raised when opening the file or reading data. The only
+solution is to retry opening and reading until it succeeds.
+
+For example to process all top-level groups of an HDF5 file:
+
+.. code-block:: python
+
+ import silx.io.h5py_utils
+
+ @silx.io.h5py_utils.retry()
+ def process_scan(filename, name):
+ """The method will be executed again if
+ any HDF5 IO fails.
+ """
+ with silx.io.h5py_utils.File(filename) as h5file:
+ scan = h5file[name]
+ I0 = scan["measurement/I0"][()]
+ It = scan["measurement/It"][()]
+ return It/I0
+
+ scans = silx.io.h5py_utils.safe_top_level_names("myfile.h5")
+
+ for name in scans:
+ result = process_scan("myfile.h5", name)
+
+Note that the method with the `retry` decorator has to be idempotent
+as it can be executed several times for one call.
+
+An equivalent decorator exists for context managers
+
+.. code-block:: python
+
+ import silx.io.h5py_utils
+
+ @silx.io.h5py_utils.retry_contextmanager()
+ def measurement_context(filename, name):
+ """The method will be entered again if
+ any HDF5 IO fails.
+ """
+ with silx.io.h5py_utils.File(filename) as h5file:
+ yield h5file[name]["measurement"]
+
+Generator functions need to have a `start_index` parameter
+
+.. code-block:: python
+
+ import silx.io.h5py_utils
+
+ @silx.io.h5py_utils.retry()
+ def iter_measurement(filename, names, start_index=0):
+ """The method will be iterated again if any HDF5
+ IO fails, possibly with a different start index.
+ """
+ with silx.io.h5py_utils.File(filename) as h5file:
+ for name in names[start_index:]:
+ yield h5file[name]["measurement"]
+
Additional resources
--------------------
diff --git a/doc/source/Tutorials/writing_NXdata.rst b/doc/source/Tutorials/writing_NXdata.rst
index 1c65199..e59eb36 100644
--- a/doc/source/Tutorials/writing_NXdata.rst
+++ b/doc/source/Tutorials/writing_NXdata.rst
@@ -154,8 +154,7 @@ a *frame number*.
.. note::
- This additional attribute is not mentionned in the official NXdata
- specification.
+ This attribute is documented in the official NeXus `description <https://manual.nexusformat.org/nxdl_desc.html>`_
Writing NXdata with h5py
@@ -175,10 +174,7 @@ the *h5py* library.
import sys
# this is needed for writing arrays of utf-8 strings with h5py
- if sys.version_info < (3,):
- text_dtype = h5py.special_dtype(vlen=unicode)
- else:
- text_dtype = h5py.special_dtype(vlen=str)
+ text_dtype = h5py.special_dtype(vlen=str)
filename = "./myfile.h5"
h5f = h5py.File(filename, "w")
diff --git a/doc/source/_static/navbar_icons/pypi.svg b/doc/source/_static/navbar_icons/pypi.svg
new file mode 100644
index 0000000..095a3f9
--- /dev/null
+++ b/doc/source/_static/navbar_icons/pypi.svg
@@ -0,0 +1,705 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="65.812"
+ height="58"
+ version="1.1"
+ id="svg276"
+ sodipodi:docname="pypi.svg"
+ inkscape:export-filename="pypi.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs280" />
+ <sodipodi:namedview
+ id="namedview278"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="4.0689655"
+ inkscape:cx="14.377119"
+ inkscape:cy="29"
+ inkscape:window-width="1920"
+ inkscape:window-height="1131"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg276" />
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g14">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(564.377 -156.012) scale(2.92733)"
+ id="path2" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(564.377 -156.012) scale(2.92733)"
+ id="path4" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(564.377 -156.012) scale(2.92733)"
+ id="path6" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(564.377 -156.012) scale(2.92733)"
+ id="path8" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(564.377 -156.012) scale(2.92733)"
+ id="path10" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(564.377 -156.012) scale(2.92733)"
+ id="path12" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g28">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -163.673) scale(2.92733)"
+ id="path16" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -163.673) scale(2.92733)"
+ id="path18" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -163.673) scale(2.92733)"
+ id="path20" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -163.673) scale(2.92733)"
+ id="path22" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -163.673) scale(2.92733)"
+ id="path24" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -163.673) scale(2.92733)"
+ id="path26" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g42">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(555.014 -141.542) scale(2.92733)"
+ id="path30" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(555.014 -141.542) scale(2.92733)"
+ id="path32" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(555.014 -141.542) scale(2.92733)"
+ id="path34" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(555.014 -141.542) scale(2.92733)"
+ id="path36" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(555.014 -141.542) scale(2.92733)"
+ id="path38" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(555.014 -141.542) scale(2.92733)"
+ id="path40" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g56">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(564.377 -138.137) scale(2.92733)"
+ id="path44" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(564.377 -138.137) scale(2.92733)"
+ id="path46" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(564.377 -138.137) scale(2.92733)"
+ id="path48" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(564.377 -138.137) scale(2.92733)"
+ id="path50" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(564.377 -138.137) scale(2.92733)"
+ id="path52" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(564.377 -138.137) scale(2.92733)"
+ id="path54" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g70">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(564.377 -149.203) scale(2.92733)"
+ id="path58" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(564.377 -149.203) scale(2.92733)"
+ id="path60" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(564.377 -149.203) scale(2.92733)"
+ id="path62" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(564.377 -149.203) scale(2.92733)"
+ id="path64" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(564.377 -149.203) scale(2.92733)"
+ id="path66" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(564.377 -149.203) scale(2.92733)"
+ id="path68" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g84">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(601.83 -144.947) scale(2.92733)"
+ id="path72" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(601.83 -144.947) scale(2.92733)"
+ id="path74" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(601.83 -144.947) scale(2.92733)"
+ id="path76" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(601.83 -144.947) scale(2.92733)"
+ id="path78" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(601.83 -144.947) scale(2.92733)"
+ id="path80" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(601.83 -144.947) scale(2.92733)"
+ id="path82" />
+ </g>
+ <g
+ transform="translate(-1683.66 -513.275) scale(.65177)"
+ id="g102">
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g98">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(3492.218 570.342) scale(4.49135)"
+ id="path86" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(3492.218 570.342) scale(4.49135)"
+ id="path88" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(3492.218 570.342) scale(4.49135)"
+ id="path90" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(3492.218 570.342) scale(4.49135)"
+ id="path92" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(3492.218 570.342) scale(4.49135)"
+ id="path94" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(3492.218 570.342) scale(4.49135)"
+ id="path96" />
+ </g>
+ <circle
+ cx="2835.218"
+ cy="1823.899"
+ r="2.967"
+ style="fill:#fff;fill-opacity:1"
+ transform="skewY(-20) scale(.9397 1)"
+ id="circle100" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g116">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(583.104 -138.137) scale(2.92733)"
+ id="path104" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(583.104 -138.137) scale(2.92733)"
+ id="path106" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(583.104 -138.137) scale(2.92733)"
+ id="path108" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(583.104 -138.137) scale(2.92733)"
+ id="path110" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(583.104 -138.137) scale(2.92733)"
+ id="path112" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(583.104 -138.137) scale(2.92733)"
+ id="path114" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g130">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -134.732) scale(2.92733)"
+ id="path118" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -134.732) scale(2.92733)"
+ id="path120" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -134.732) scale(2.92733)"
+ id="path122" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -134.732) scale(2.92733)"
+ id="path124" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -134.732) scale(2.92733)"
+ id="path126" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -134.732) scale(2.92733)"
+ id="path128" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g144">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(601.83 -156.012) scale(2.92733)"
+ id="path132" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(601.83 -156.012) scale(2.92733)"
+ id="path134" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(601.83 -156.012) scale(2.92733)"
+ id="path136" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(601.83 -156.012) scale(2.92733)"
+ id="path138" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(601.83 -156.012) scale(2.92733)"
+ id="path140" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(601.83 -156.012) scale(2.92733)"
+ id="path142" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g158">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(601.83 -167.078) scale(2.92733)"
+ id="path146" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(601.83 -167.078) scale(2.92733)"
+ id="path148" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(601.83 -167.078) scale(2.92733)"
+ id="path150" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#ffc91d;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(601.83 -167.078) scale(2.92733)"
+ id="path152" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(601.83 -167.078) scale(2.92733)"
+ id="path154" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(601.83 -167.078) scale(2.92733)"
+ id="path156" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g172">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(592.467 -152.608) scale(2.92733)"
+ id="path160" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(592.467 -152.608) scale(2.92733)"
+ id="path162" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(592.467 -152.608) scale(2.92733)"
+ id="path164" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(592.467 -152.608) scale(2.92733)"
+ id="path166" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(592.467 -152.608) scale(2.92733)"
+ id="path168" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(592.467 -152.608) scale(2.92733)"
+ id="path170" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g186">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(592.467 -163.673) scale(2.92733)"
+ id="path174" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(592.467 -163.673) scale(2.92733)"
+ id="path176" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(592.467 -163.673) scale(2.92733)"
+ id="path178" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(592.467 -163.673) scale(2.92733)"
+ id="path180" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(592.467 -163.673) scale(2.92733)"
+ id="path182" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(592.467 -163.673) scale(2.92733)"
+ id="path184" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g200">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(592.467 -174.739) scale(2.92733)"
+ id="path188" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(592.467 -174.739) scale(2.92733)"
+ id="path190" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(592.467 -174.739) scale(2.92733)"
+ id="path192" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(592.467 -174.739) scale(2.92733)"
+ id="path194" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(592.467 -174.739) scale(2.92733)"
+ id="path196" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(592.467 -174.739) scale(2.92733)"
+ id="path198" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g214">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(583.104 -149.203) scale(2.92733)"
+ id="path202" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(583.104 -149.203) scale(2.92733)"
+ id="path204" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(583.104 -149.203) scale(2.92733)"
+ id="path206" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(583.104 -149.203) scale(2.92733)"
+ id="path208" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(583.104 -149.203) scale(2.92733)"
+ id="path210" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(583.104 -149.203) scale(2.92733)"
+ id="path212" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g228">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(583.104 -160.268) scale(2.92733)"
+ id="path216" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(583.104 -160.268) scale(2.92733)"
+ id="path218" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(583.104 -160.268) scale(2.92733)"
+ id="path220" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(583.104 -160.268) scale(2.92733)"
+ id="path222" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(583.104 -160.268) scale(2.92733)"
+ id="path224" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(583.104 -160.268) scale(2.92733)"
+ id="path226" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g242">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -145.798) scale(2.92733)"
+ id="path230" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -145.798) scale(2.92733)"
+ id="path232" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -145.798) scale(2.92733)"
+ id="path234" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -145.798) scale(2.92733)"
+ id="path236" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -145.798) scale(2.92733)"
+ id="path238" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -145.798) scale(2.92733)"
+ id="path240" />
+ </g>
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g256">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -156.864) scale(2.92733)"
+ id="path244" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -156.864) scale(2.92733)"
+ id="path246" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(573.74 -156.864) scale(2.92733)"
+ id="path248" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -156.864) scale(2.92733)"
+ id="path250" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -156.864) scale(2.92733)"
+ id="path252" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(573.74 -156.864) scale(2.92733)"
+ id="path254" />
+ </g>
+ <g
+ transform="translate(-1683.66 -513.275) scale(.65177)"
+ id="g274">
+ <g
+ style="fill:#a29d86;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g270">
+ <path
+ d="m-186.329 59.726 3.185 1.16v3.742l-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#e9e9ff;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(3477.852 524.633) scale(4.49135)"
+ id="path258" />
+ <path
+ d="M-189.56 60.903v3.743l3.231-1.177v-3.743z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#353564;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(3477.852 524.633) scale(4.49135)"
+ id="path260" />
+ <path
+ d="m-189.56 64.646 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#afafde;fill-opacity:1;fill-rule:nonzero;stroke:#ccc;stroke-width:.07269443;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="translate(3477.852 524.633) scale(4.49135)"
+ id="path262" />
+ <path
+ d="m-189.56 60.903 3.184 1.159 3.232-1.177-3.185-1.159z"
+ style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(3477.852 524.633) scale(4.49135)"
+ id="path264" />
+ <path
+ d="M-186.376 62.062v3.743l3.232-1.177v-3.743z"
+ style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(3477.852 524.633) scale(4.49135)"
+ id="path266" />
+ <path
+ d="m-189.56 60.903 3.184 1.159v3.743l-3.185-1.16z"
+ style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.07269443;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(3477.852 524.633) scale(4.49135)"
+ id="path268" />
+ </g>
+ <circle
+ cx="2816.017"
+ cy="1772.922"
+ r="2.967"
+ style="fill:#fff;fill-opacity:1"
+ transform="skewY(-20) scale(.9397 1)"
+ id="circle272" />
+ </g>
+</svg>
diff --git a/doc/source/_templates/version.html b/doc/source/_templates/version.html
new file mode 100644
index 0000000..1b7d33f
--- /dev/null
+++ b/doc/source/_templates/version.html
@@ -0,0 +1,2 @@
+<!-- This will display the version of the docs -->
+{{ version }} \ No newline at end of file
diff --git a/doc/source/applications/compare.rst b/doc/source/applications/compare.rst
new file mode 100644
index 0000000..4175eae
--- /dev/null
+++ b/doc/source/applications/compare.rst
@@ -0,0 +1,40 @@
+.. _silx compare:
+
+silx compare
+============
+
+Purpose
+-------
+
+The *silx compare* command provides a graphical user interface to compare 2D data from files.
+
+It displays a list of datasets, and allows to open multiple datasets.
+This list can be updated with drag and drop from silx view.
+
+
+.. |imgViewImg| image:: img/silx-compare.png
+ :height: 300px
+ :align: middle
+
+
+Usage
+-----
+
+::
+
+ silx compare [-h] [--debug] [--use-opengl-plot] [files [files ...]]
+
+
+Options
+-------
+
+ -h, --help show this help message and exit
+ --debug Set logging system in debug mode
+ --use-opengl-plot Use OpenGL for plots (instead of matplotlib)
+
+Examples of usage
+-----------------
+
+::
+
+ silx compare "silx://ID16B_diatomee.h5?path=/scan1/instrument/data&slice=0" "silx://ID16B_diatomee.h5?path=/scan1/instrument/data&slice=1"
diff --git a/doc/source/applications/img/silx-compare.png b/doc/source/applications/img/silx-compare.png
new file mode 100644
index 0000000..bbd2117
--- /dev/null
+++ b/doc/source/applications/img/silx-compare.png
Binary files differ
diff --git a/doc/source/applications/index.rst b/doc/source/applications/index.rst
index 2601e2c..fd3552a 100644
--- a/doc/source/applications/index.rst
+++ b/doc/source/applications/index.rst
@@ -1,6 +1,7 @@
+.. _Applications:
-Applications documentation
-==========================
+Applications
+============
While *silx* is first and foremost a Python library to be used by developers,
a set of command line applications is provided to use some key features of
@@ -15,3 +16,4 @@ To see the list of all available commands, type the following command in a termi
view
convert
+ compare
diff --git a/doc/source/applications/view.rst b/doc/source/applications/view.rst
index d4145c2..05e38b9 100644
--- a/doc/source/applications/view.rst
+++ b/doc/source/applications/view.rst
@@ -1,7 +1,11 @@
+.. _silx view:
silx view
=========
+.. figure:: http://www.silx.org/doc/silx/img/silx-view-v1-0.gif
+ :align: center
+
Purpose
-------
@@ -37,25 +41,59 @@ and to view this data in plot widgets or in simple table views.
Usage
-----
-::
+.. code-block:: none
- silx view [-h] [--debug] [--use-opengl-plot] [files [files ...]]
+ silx view [-h] [--slices SLICES [SLICES ...]] [--debug] [--use-opengl-plot] [-f] [--hdf5-file-locking] [files ...]
Options
-------
- -h, --help Show this help message and exit
- --debug Set logging system in debug mode
- --use-opengl-plot Use OpenGL for plots (instead of matplotlib)
- -f, --fresh Start the application using new fresh user preferences
- --hdf5-file-locking Start the application with HDF5 file locking enabled (it is disabled by default)
+.. code-block:: none
+
+ -h, --help show this help message and exit
+ --slices SLICES [SLICES ...]
+ List of slice indices to open (Only for dataset)
+ --debug Set logging system in debug mode
+ --use-opengl-plot Use OpenGL for plots (instead of matplotlib)
+ -f, --fresh Start the application using new fresh user preferences
+ --hdf5-file-locking Start the application with HDF5 file locking enabled (it is disabled by
+ default)
Examples of usage
-----------------
-::
+Open file(s)
+............
+
+.. code-block:: none
silx view 31oct98.dat
silx view *.edf
silx view myfile.h5
+
+
+Open HDF5 dataset(s)
+....................
+
+Using the HDF5 path to the dataset:
+
+.. code-block:: none
+
+ silx view my_hdf5_file.h5::entry/instrument/detector/data
+
+Using wildcard:
+
+.. code-block:: none
+
+ silx view my_hdf5_file.h5::entry/*/data
+
+
+Open HDF5 dataset slices
+........................
+
+Open first and last slices of datasets:
+
+.. code-block:: none
+
+ silx view my_hdf5_file.h5::entry/*/data --slices 0 -1
diff --git a/doc/source/conf.py b/doc/source/conf.py
index 86e7bfa..1f421fe 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -1,6 +1,5 @@
-# -*- coding: utf-8 -*-
# /*##########################################################################
-# Copyright (C) 2015-2019 European Synchrotron Radiation Facility
+# Copyright (C) 2015-2023 European Synchrotron Radiation Facility
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -32,35 +31,27 @@ autogenerated file.
All configuration values have a default; values that are commented out
serve to show the default."""
-import sys
+import importlib
import os
-import os.path
-import glob
-import subprocess
+import sys
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
# sys.path.insert(0, os.path.abspath('.'))
-project = u'silx'
-try:
- import silx
- project_dir = os.path.abspath(os.path.join(__file__, "..", "..", ".."))
- build_dir = os.path.abspath(silx.__file__)
- if not build_dir.startswith(project_dir):
- raise RuntimeError("%s looks to come from the system. Fix your PYTHONPATH and restart sphinx." % project)
-except ImportError:
- raise RuntimeError("%s is not on the path. Fix your PYTHONPATH and restart sphinx." % project)
+project = "silx"
+import silx
# Disable deprecation warnings:
# It avoid to spam documentation logs with deprecation warnings.
# If we want to generate the documentation of deprecated features it should
# not make the logs durty.
from silx.utils.deprecation import depreclog
+
depreclog.disabled = 1
# Add local sphinx extension directory
-sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'ext'))
+sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "ext"))
# -- General configuration -----------------------------------------------------
@@ -70,36 +61,45 @@ sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'ext'))
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = [
- 'sphinx.ext.autodoc',
- 'sphinx.ext.coverage',
- 'sphinx.ext.mathjax',
- 'sphinx.ext.viewcode',
- 'sphinx.ext.doctest',
- 'sphinx.ext.inheritance_diagram',
- 'sphinxext-archive',
- 'snapshotqt_directive',
- 'nbsphinx'
-
+ "sphinx.ext.autodoc",
+ "sphinx.ext.coverage",
+ "sphinx.ext.mathjax",
+ "sphinx.ext.viewcode",
+ "sphinx.ext.doctest",
+ "sphinx.ext.inheritance_diagram",
+ "sphinx_panels",
+ "sphinxext-archive",
+ "snapshotqt_directive",
+ "nbsphinx",
]
-autodoc_member_order = 'bysource'
+if importlib.util.find_spec("sphinx_autodoc_typehints"):
+ extensions.append("sphinx_autodoc_typehints")
+
+ always_document_param_types = True
+
+autodoc_member_order = "bysource"
# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
+templates_path = ["_templates"]
# The suffix of source filenames.
-source_suffix = '.rst'
+source_suffix = ".rst"
# The encoding of source files.
# source_encoding = 'utf-8-sig'
# The master toctree document.
-master_doc = 'index'
+master_doc = "index"
# General information about the project.
from silx._version import strictversion, version, __date__ as _date
+
year = _date.split("/")[-1]
-copyright = u'2015-%s, Data analysis unit, European Synchrotron Radiation Facility, Grenoble' % year
+copyright = (
+ "2015-%s, Data analysis unit, European Synchrotron Radiation Facility, Grenoble"
+ % year
+)
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -110,6 +110,16 @@ copyright = u'2015-%s, Data analysis unit, European Synchrotron Radiation Facili
# The full version, including alpha/beta/rc tags.
release = strictversion
+# Substitutions defined for all pages
+rst_prolog = f"""
+.. |silx_installer_btn| replace::
+ .. link-button:: https://github.com/silx-kit/silx/releases/download/v{release}/silx-{release}-windows-installer-x86_64.exe
+ :classes: btn-success
+ :text: Download Windows installer
+
+.. |silx_archive| replace:: :download:`silx ZIP archive <https://github.com/silx-kit/silx/releases/download/v{release}/silx-{release}-windows-application.zip>`
+"""
+
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
# language = None
@@ -139,7 +149,7 @@ add_module_names = False
# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
+pygments_style = "sphinx"
# A list of ignored prefixes for module index sorting.
# modindex_common_prefix = []
@@ -154,12 +164,33 @@ mathjax_path = 'file:///usr/share/javascript/mathjax/MathJax.js?config=TeX-AMS-M
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
-html_theme = 'default'
+html_theme = "pydata_sphinx_theme"
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
-# html_theme_options = {}
+html_theme_options = {
+ "icon_links": [
+ {
+ "name": "GitHub",
+ "url": "https://github.com/silx-kit/silx",
+ "icon": "fa-brands fa-github",
+ },
+ {
+ "name": "PyPI",
+ "url": "https://pypi.org/project/silx",
+ "icon": "_static/navbar_icons/pypi.svg",
+ "type": "local",
+ },
+ ],
+ "show_toc_level": 1,
+ "navbar_align": "left",
+ "show_version_warning_banner": True,
+ "navbar_start": ["navbar-logo", "version"],
+ "navbar_center": ["navbar-nav"],
+ "footer_start": ["copyright"],
+ "footer_center": ["sphinx-version"],
+}
# Add any paths that contain custom themes here, relative to this directory.
# html_theme_path = []
@@ -183,7 +214,7 @@ html_favicon = "img/silx.ico"
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
-# html_static_path = []
+html_static_path = ["_static"]
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
@@ -227,19 +258,17 @@ html_favicon = "img/silx.ico"
# html_file_suffix = None
# Output file base name for HTML help builder.
-htmlhelp_basename = 'silxdoc'
+htmlhelp_basename = "silxdoc"
# -- Options for LaTeX output --------------------------------------------------
-latex_elements = {'papersize': 'a4paper',
- 'pointsize': '10pt'}
+latex_elements = {"papersize": "a4paper", "pointsize": "10pt"}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
- ('index', 'silx.tex', u'silx Documentation',
- u'Data analysis unit', 'manual'),
+ ("index", "silx.tex", "silx Documentation", "Data analysis unit", "manual"),
]
# The name of an image file (relative to this directory) to place at the top of
@@ -267,10 +296,7 @@ latex_logo = "img/silx_large.png"
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
-man_pages = [
- ('index', 'silx', u'silx Documentation',
- [u'Data analysis unit'], 1)
-]
+man_pages = [("index", "silx", "silx Documentation", ["Data analysis unit"], 1)]
# If true, show URL addresses after external links.
# man_show_urls = False
@@ -282,9 +308,15 @@ man_pages = [
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
- ('index', 'silx', u'silx Documentation',
- u'Data analysis unit', 'silx', 'One line description of project.',
- 'Miscellaneous'),
+ (
+ "index",
+ "silx",
+ "silx Documentation",
+ "Data analysis unit",
+ "silx",
+ "One line description of project.",
+ "Miscellaneous",
+ ),
]
# Documents to append as an appendix to all manuals.
@@ -297,4 +329,4 @@ texinfo_documents = [
# texinfo_show_urls = 'footnote'
# Do not test code in >>> by default
-doctest_test_doctest_blocks = ''
+doctest_test_doctest_blocks = ""
diff --git a/doc/source/ext/snapshotqt_directive.py b/doc/source/ext/snapshotqt_directive.py
index 582b934..ab7ae1b 100644
--- a/doc/source/ext/snapshotqt_directive.py
+++ b/doc/source/ext/snapshotqt_directive.py
@@ -1,4 +1,3 @@
-# coding: utf-8
# /*##########################################################################
#
# Copyright (c) 2004-2019 European Synchrotron Radiation Facility
@@ -31,7 +30,6 @@ Configuration variable in conf.py:
the documentation source directory (i.e., the directory of conf.py)
(default: '..').
"""
-from __future__ import absolute_import
__authors__ = ["H. Payno", "T. Vincent"]
__license__ = "MIT"
@@ -46,34 +44,37 @@ from docutils.parsers.rst import directives
# from docutils.par
# note: conf.py is patching the PATH so this will be the 'current' qt version
-home = os.path.abspath(os.path.join(__file__, "..", "..", "..", '..'))
+home = os.path.abspath(os.path.join(__file__, "..", "..", "..", ".."))
-if not os.environ.get('DIRECTIVE_SNAPSHOT_QT') == 'True':
+if not os.environ.get("DIRECTIVE_SNAPSHOT_QT") == "True":
"""
In case we don't wan't to regenerate screenshot, simply apply Figure
directive
"""
+
class SnapshotQtDirective(Image):
option_spec = Image.option_spec.copy()
- option_spec['script'] = directives.unchanged
+ option_spec["script"] = directives.unchanged
has_content = True
def run(self):
- self.options['figwidth'] = 'image'
+ self.options["figwidth"] = "image"
self.content = []
# Create an image filename from arguments
return Image.run(self)
def makescreenshot(*args, **kwargs):
- raise RuntimeError('not defined without env variable SILX_GENERATE_SCREENSHOT set to True')
+ raise RuntimeError(
+ "not defined without env variable SILX_GENERATE_SCREENSHOT set to True"
+ )
def setup(app):
- app.add_config_value('snapshotqt_image_type', 'png', 'env')
- app.add_config_value('snapshotqt_script_dir', '..', 'env')
- app.add_directive('snapshotqt', SnapshotQtDirective)
- return {'version': '0.1'}
+ app.add_config_value("snapshotqt_image_type", "png", "env")
+ app.add_config_value("snapshotqt_script_dir", "..", "env")
+ app.add_directive("snapshotqt", SnapshotQtDirective)
+ return {"version": "0.1"}
else:
from silx.gui import qt
@@ -117,73 +118,84 @@ else:
:height: 5cm
:script: myscript.py
"""
+
option_spec = Image.option_spec.copy()
- option_spec['script'] = directives.unchanged
+ option_spec["script"] = directives.unchanged
has_content = True
def run(self):
assert len(self.arguments) > 0
# Run script stored in arguments and replace by snapshot filename
- script = self.options.pop('script', None)
+ script = self.options.pop("script", None)
env = self.state.document.settings.env
image_ext = env.config.snapshotqt_image_type.lower()
- script_name = self.arguments[0].replace(image_ext, 'py')
+ script_name = self.arguments[0].replace(image_ext, "py")
output_script = os.path.join(env.app.outdir, script_name)
image_file_source_path = env.relfn2path(self.arguments[0])[0]
- image_file_source_path = os.path.join(home, env.srcdir, image_file_source_path)
+ image_file_source_path = os.path.join(
+ home, env.srcdir, image_file_source_path
+ )
def createNeededDirs(_dir):
parentDir = os.path.dirname(_dir)
- if parentDir not in ('', os.sep):
+ if parentDir not in ("", os.sep):
createNeededDirs(parentDir)
if os.path.exists(_dir) is False:
os.mkdir(_dir)
createNeededDirs(os.path.dirname(output_script))
- has_source_code = not (self.content is None or len(self.content) is 0)
+ has_source_code = not (self.content is None or len(self.content) == 0)
if has_source_code:
- with open(output_script, 'w') as _file:
+ with open(output_script, "w") as _file:
_file.write("# from silx.gui import qt\n")
_file.write("# app = qt.QApplication([])\n")
for _line in self.content:
- _towrite = _line.lstrip(' ')
- if not _towrite.startswith(':'):
- _file.write(_towrite + '\n')
- _file.write("app.exec_()")
+ _towrite = _line.lstrip(" ")
+ if not _towrite.startswith(":"):
+ _file.write(_towrite + "\n")
+ _file.write("app.exec()")
self.content = []
if script is not None:
- _logger.warning('Cannot specify a script if source code (content) is given.'
- 'Ignore script option')
- makescreenshot(script_or_module=output_script,
- filename=image_file_source_path)
+ _logger.warning(
+ "Cannot specify a script if source code (content) is given."
+ "Ignore script option"
+ )
+ makescreenshot(
+ script_or_module=output_script, filename=image_file_source_path
+ )
else:
# script
if script is None:
- _logger.warning('no source code or script defined in the snapshot'
- 'directive, fail to generate a screenshot')
+ _logger.warning(
+ "no source code or script defined in the snapshot"
+ "directive, fail to generate a screenshot"
+ )
else:
script_path = os.path.join(home, script)
- makescreenshot(script_or_module=script_path,
- filename=image_file_source_path)
+ makescreenshot(
+ script_or_module=script_path, filename=image_file_source_path
+ )
#
# Use created image as in Figure
return super(SnapshotQtDirective, self).run()
def setup(app):
- app.add_config_value('snapshotqt_image_type', 'png', 'env')
- app.add_config_value('snapshotqt_script_dir', '..', 'env')
- app.add_directive('snapshotqt', SnapshotQtDirective)
- return {'version': '0.1'}
+ app.add_config_value("snapshotqt_image_type", "png", "env")
+ app.add_config_value("snapshotqt_script_dir", "..", "env")
+ app.add_directive("snapshotqt", SnapshotQtDirective)
+ return {"version": "0.1"}
# screensImageFileDialogH5.hot function ########################################################
def makescreenshot(script_or_module, filename):
- _logger.info('generate screenshot for %s from %s, binding is %s'
- '' % (filename, script_or_module, qt.BINDING))
+ _logger.info(
+ "generate screenshot for %s from %s, binding is %s"
+ "" % (filename, script_or_module, qt.BINDING)
+ )
def grabWindow(winID):
screen = qt.QApplication.primaryScreen()
@@ -192,9 +204,9 @@ else:
global _count
_count = 15
global _TIMEOUT
- _TIMEOUT = 1000. # in ms
+ _TIMEOUT = 1000.0 # in ms
app = qt.QApplication.instance() or qt.QApplication([])
- _logger.debug('Using Qt bindings: %s', qt)
+ _logger.debug("Using Qt bindings: %s", qt)
def _grabActiveWindowAndClose():
global _count
@@ -202,33 +214,32 @@ else:
if activeWindow is not None:
if activeWindow.isVisible():
# hot fix since issue with pySide2 API
- if qt.BINDING == 'PySide2':
+ if qt.BINDING == "PySide2":
pixmap = activeWindow.grab()
else:
pixmap = grabWindow(activeWindow.winId())
saveOK = pixmap.save(filename)
if not saveOK:
- _logger.error(
- 'Cannot save snapshot to %s', filename)
+ _logger.error("Cannot save snapshot to %s", filename)
else:
- _logger.error('activeWindow is not visible.')
+ _logger.error("activeWindow is not visible.")
app.quit()
else:
_count -= 1
if _count > 0:
# Only restart a timer if everything is OK
- qt.QTimer.singleShot(_TIMEOUT,
- _grabActiveWindowAndClose)
+ qt.QTimer.singleShot(_TIMEOUT, _grabActiveWindowAndClose)
else:
app.quit()
raise TimeoutError(
- 'Aborted: It took too long to have an active window.')
+ "Aborted: It took too long to have an active window."
+ )
+
script_or_module = os.path.abspath(script_or_module)
sys.argv = [script_or_module]
- sys.path.append(
- os.path.abspath(os.path.dirname(script_or_module)))
+ sys.path.append(os.path.abspath(os.path.dirname(script_or_module)))
qt.QTimer.singleShot(_TIMEOUT, _grabActiveWindowAndClose)
with open(script_or_module) as f:
- code = compile(f.read(), script_or_module, 'exec')
+ code = compile(f.read(), script_or_module, "exec")
exec(code, globals(), locals())
diff --git a/doc/source/ext/sphinxext-archive.py b/doc/source/ext/sphinxext-archive.py
index dc1c2c8..68d9637 100644
--- a/doc/source/ext/sphinxext-archive.py
+++ b/doc/source/ext/sphinxext-archive.py
@@ -1,4 +1,3 @@
-# coding: utf-8
# /*##########################################################################
#
# Copyright (c) 2017 European Synchrotron Radiation Facility
@@ -73,6 +72,7 @@ _logger = logging.getLogger(__name__)
# docutils directive
+
class ArchiveDirective(Directive):
"""Add a link to download an archive
@@ -84,40 +84,44 @@ class ArchiveDirective(Directive):
optional_arguments = 0
final_argument_whitespace = False
option_spec = {
- 'filename': directives.unchanged,
- 'filter': directives.unchanged,
- 'basedir': directives.unchanged,
+ "filename": directives.unchanged,
+ "filter": directives.unchanged,
+ "basedir": directives.unchanged,
}
def run(self):
- node = archive('')
+ node = archive("")
# Get rst source file containing this directive
source_file = self.state_machine.get_source_and_line()[0]
if source_file is None:
- raise RuntimeError('Cannot get rst source file path')
+ raise RuntimeError("Cannot get rst source file path")
# Build input path from rst source file and directive argument
input_path = self.arguments[0]
- if not input_path.startswith('/'): # Argument is a relative path
+ if not input_path.startswith("/"): # Argument is a relative path
input_path = os.path.abspath(
- os.path.join(os.path.dirname(source_file), input_path))
- node['input_path'] = input_path
+ os.path.join(os.path.dirname(source_file), input_path)
+ )
+ node["input_path"] = input_path
default_basedir = os.path.basename(input_path)
- node['basedir'] = self.options.get('basedir', default_basedir)
- node['filename'] = self.options.get('filename',
- '.'.join((default_basedir, 'zip')))
+ node["basedir"] = self.options.get("basedir", default_basedir)
+ node["filename"] = self.options.get(
+ "filename", ".".join((default_basedir, "zip"))
+ )
- node['filter'] = self.options.get('filter', '*.*')
+ node["filter"] = self.options.get("filter", "*.*")
return [node]
# archive doctuils node
+
class archive(docutils.nodes.General, docutils.nodes.Element, docutils.nodes.Inline):
"""archive node created by :class:`ArchiveDirective`"""
+
pass
@@ -128,17 +132,17 @@ def visit_archive_html(self, node):
:param node: The :class:`archive` node to translate to HTML
:raise: SkipNode as depart is not implemented
"""
- filename = node['filename']
- input_path = node['input_path']
+ filename = node["filename"]
+ input_path = node["input_path"]
# Create a temporary folder to create archive content
tmp_dir = tempfile.mkdtemp()
# Copy selected content to temporary folder
- base_dir = os.path.join(tmp_dir, node['basedir'])
+ base_dir = os.path.join(tmp_dir, node["basedir"])
def ignore(src, names):
- patterns = node['filter'].split()
+ patterns = node["filter"].split()
ignored_names = []
for name in names:
for pattern in patterns:
@@ -151,11 +155,10 @@ def visit_archive_html(self, node):
shutil.copytree(input_path, base_dir, ignore=ignore)
# Compress temporary folder to zip
- output_filename = os.path.join(
- self.builder.outdir, '_downloads', filename)
+ output_filename = os.path.join(self.builder.outdir, "_downloads", filename)
root, ext = os.path.splitext(output_filename)
- assert ext == '.zip'
- shutil.make_archive(root, 'zip', tmp_dir, node['basedir'])
+ assert ext == ".zip"
+ shutil.make_archive(root, "zip", tmp_dir, node["basedir"])
# Clean-up temporary folder
shutil.rmtree(tmp_dir)
@@ -173,12 +176,11 @@ def visit_skip(self, node):
# Extension setup
+
def setup(app):
"""Sphinx extension registration"""
- app.add_node(archive,
- html=(visit_archive_html, None),
- latex=(visit_skip, None))
+ app.add_node(archive, html=(visit_archive_html, None), latex=(visit_skip, None))
- app.add_directive('archive', ArchiveDirective)
+ app.add_directive("archive", ArchiveDirective)
- return {'version': '0.1'}
+ return {"version": "0.1"}
diff --git a/doc/source/img/silx-view.gif b/doc/source/img/silx-view.gif
new file mode 100644
index 0000000..f622c04
--- /dev/null
+++ b/doc/source/img/silx-view.gif
Binary files differ
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 1c4ad72..d7e99cd 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -1,84 +1,133 @@
silx |version|
==============
-The silx project aims to provide a collection of Python packages to support the
+.. toctree::
+ :hidden:
+
+ user_guide.rst
+ applications/index.rst
+ tutorials.rst
+ modules/index.rst
+ changelog.rst
+
+silx provides applications and Python modules to support the
development of data assessment, reduction and analysis at synchrotron radiation
facilities.
-It intends to provide reading/writing tools for different file formats, data
+It provides reading/writing tools for different file formats, data
reduction routines and a set of Qt widgets to browse and visualise data.
-Silx can be cited by its DOIs referenced on
-`Zenodo <https://doi.org/10.5281/zenodo.591709>`_.
-The current version (v\ |version|) caters for:
+:ref:`Installation`
+-------------------
-* Supporting `HDF5 <https://www.hdfgroup.org/HDF5/>`_,
- `SPEC <https://certif.com/spec.html>`_ and
- `FabIO <http://www.silx.org/doc/fabio/dev/getting_started.html#list-of-file-formats-that-fabio-can-read-and-write>`_
- images file formats.
-* OpenCL-based data processing: image alignment (SIFT),
- image processing (median filter, histogram),
- filtered backprojection for tomography
-* Data reduction: histogramming, fitting, median filter
-* A set of Qt widgets, including:
+You can install **silx** via `pip <https://pypi.org/project/pip>`_, `conda <https://docs.conda.io>`_ or on Linux with the following commands:
- * 1D and 2D visualization widgets with a set of associated tools using multiple backends (matplotlib or OpenGL)
- * OpenGL-based widgets to visualize data in 3D (scalar field with isosurface and cut plane, scatter plot)
- * a unified browser for HDF5, SPEC and image file formats supporting inspection and
- visualization of n-dimensional datasets.
+.. tabbed:: pip
-* a set of applications:
+ .. code-block:: bash
- * a unified viewer (*silx view filename*) for HDF5, SPEC and image file formats
- * a unified converter to HDF5 format (*silx convert filename*)
+ pip install silx[full]
+.. tabbed:: conda
-.. toctree::
- :hidden:
+ .. code-block:: bash
- overview.rst
- install.rst
- description/index.rst
- tutorials.rst
- modules/index.rst
- applications/index.rst
- changelog.rst
- license.rst
- virtualenv.rst
- troubleshooting.rst
+ conda install -c conda-forge silx
+
+.. tabbed:: Debian & Ubuntu
+
+ .. code-block:: bash
+
+ sudo apt-get install silx
+
+|silx_installer_btn| or decompress the |silx_archive|.
+
+:ref:`Applications`
+-------------------
+
+.. panels::
+
+ :column: col-lg-12
+ :body: text-center
+
+ **silx view**
+ ^^^^^^^^^^^^^
+
+ .. image:: img/silx-view.gif
+
+ .. link-button:: applications/view
+ :type: ref
+ :text: Unified viewer supporting HDF5, SPEC and image file formats
+ :classes: stretched-link
+
+ ---
+
+ **silx compare**
+ ^^^^^^^^^^^^^^^^
+
+ .. image:: applications/img/silx-compare.png
+
+ .. link-button:: applications/compare
+ :type: ref
+ :text: User interface to compare 2D data from files
+ :classes: stretched-link
+
+ ---
+
+ **silx convert**
+ ^^^^^^^^^^^^^^^^
+
+ .. link-button:: applications/convert
+ :type: ref
+ :text: Converter of legacy file formats into HDF5 file
+ :classes: stretched-link
+
+:ref:`Python modules<API Reference>`
+------------------------------------
+
+.. panels::
+
+ **silx.gui**
+ ^^^^^^^^^^^^
-:doc:`overview`
- Releases, repository, issue tracker, mailing list, ...
+ .. link-button:: modules/gui/index
+ :type: ref
+ :text: Qt widgets:
+ :classes: stretched-link
-:doc:`install`
- How to install *silx* on Linux, Windows and MacOS X
+ * 1D and 2D visualization widgets and associated tools
+ * OpenGL-based 3D visualization widgets
+ * a unified HDF5, SPEC and image data file browser and n-dimensional dataset viewer
-:doc:`description/index`
- Description of the different algorithms and their implementation
+ ---
-:doc:`tutorials`
- Tutorials and sample code
+ **silx.opencl**
+ ^^^^^^^^^^^^^^^
-:doc:`modules/index`
- Documentation of the packages included in *silx*
+ .. link-button:: modules/opencl/index
+ :type: ref
+ :text: OpenCL-based data processing:
+ :classes: stretched-link
-:doc:`applications/index`
- Documentation of the applications provided by *silx*
+ * Image alignment (SIFT)
+ * Image processing (median filter, histogram)
+ * Filtered backprojection for tomography
-:doc:`modules/gui/gallery`
- Widgets gallery and screenshots
+ ---
-:doc:`changelog`
- List of changes between releases
+ **silx.io**
+ ^^^^^^^^^^^
-:doc:`license`
- License and copyright information
+ .. link-button:: modules/io/index
+ :type: ref
+ :text: Supporting HDF5, SPEC and FabIO images file formats
+ :classes: stretched-link
-:doc:`troubleshooting`
- When things do not work as expected
+ ---
-Indices
-=======
+ **silx.math**
+ ^^^^^^^^^^^^^
-* :ref:`modindex`
-* :ref:`search`
-* :ref:`genindex`
+ .. link-button:: modules/math/index
+ :type: ref
+ :text: Data reduction: histogramming, fitting, median filter
+ :classes: stretched-link
diff --git a/doc/source/install.rst b/doc/source/install.rst
index 8ed5136..a551b18 100644
--- a/doc/source/install.rst
+++ b/doc/source/install.rst
@@ -1,21 +1,22 @@
+.. _Installation:
-Installation steps
-==================
+Installation
+============
*silx* supports most operating systems and different versions of the Python
programming language.
This table summarizes the support matrix of silx:
-+------------+--------------+---------------------+
-| System | Python vers. | Qt and its bindings |
-+------------+--------------+---------------------+
-| `Windows`_ | 3.5-3.8 | PyQt5.6+, PySide2 |
-+------------+--------------+---------------------+
-| `MacOS`_ | 3.5-3.8 | PyQt5.6+, PySide2 |
-+------------+--------------+---------------------+
-| `Linux`_ | 3.5-3.8 | PyQt5.3+, PySide2 |
-+------------+--------------+---------------------+
++------------+--------------+--------------------------------+
+| System | Python vers. | Qt and its bindings |
++------------+--------------+--------------------------------+
+| `Windows`_ | 3.7-3.10 | PyQt5.9+, PySide6.4+, PyQt6.3+ |
++------------+--------------+--------------------------------+
+| `MacOS`_ | 3.7-3.10 | PyQt5.9+, PySide6.4+, PyQt6.3+ |
++------------+--------------+--------------------------------+
+| `Linux`_ | 3.7-3.10 | PyQt5.9+, PySide6.4+, PyQt6.3+ |
++------------+--------------+--------------------------------+
For the description of *silx* dependencies, see the Dependencies_ section.
@@ -66,42 +67,32 @@ The mandatory dependencies are:
The GUI widgets depend on the following extra packages:
* A Qt binding: either `PyQt5 <https://riverbankcomputing.com/software/pyqt/intro>`_,
- or `PySide2 <https://wiki.qt.io/Qt_for_Python>`_
+ `PySide6 <https://pypi.org/project/PySide6/>`_ or
+ `PyQt6 <https://pypi.org/project/PyQt6/>`_
* `matplotlib <http://matplotlib.org/>`_
* `PyOpenGL <http://pyopengl.sourceforge.net/>`_
-* `qt_console <https://pypi.python.org/pypi/qtconsole>`_
+* `qt_console <https://pypi.org/project/qtconsole>`_
for the ``silx.gui.console`` widget.
* `dateutil <https://pypi.org/project/python-dateutil/>`_
-Tools for reading and writing files depend on the following packages:
-
-* `h5py <http://docs.h5py.org/en/latest/build.html>`_ for HDF5 files
-* `fabio <https://github.com/silx-kit/fabio>`_ for multiple image formats
-
*silx.opencl* further depends on OpenCL and the following packages too :
* `pyopencl <https://mathema.tician.de/software/pyopencl/>`_
* `Mako <http://www.makotemplates.org/>`_
The complete list of dependencies with the minimal version is described in the
-`requirement.txt <https://github.com/silx-kit/silx/blob/0.8/requirements.txt>`_
+`requirement.txt <https://github.com/silx-kit/silx/blob/master/requirements.txt>`_
at the top level of the source package.
Build dependencies
++++++++++++++++++
In addition to run-time dependencies, building *silx* requires a C/C++ compiler,
-`numpy <http://www.numpy.org/>`_ and `cython <http://cython.org>`_ (optional).
-
-On Windows it is recommended to use Python 3.5, because with previous versions
-of Python, it might be difficult to compile extensions (i.e. binary modules).
-
-This project uses Cython (version > 0.21) to generate C files.
-Cython is mandatory to build *silx* from the development branch.
+`numpy <http://www.numpy.org/>`_ and `cython <http://cython.org>`_.
The complete list of dependencies for building the package, including its
documentation, is described in the
-`requirement-dev.txt <https://github.com/silx-kit/silx/blob/0.8/requirements-dev.txt>`_
+`requirement-dev.txt <https://github.com/silx-kit/silx/blob/master/requirements-dev.txt>`_
at the top level of the source package.
@@ -110,7 +101,7 @@ Linux
Packages are available for a few distributions:
-- Debian 9: see `Installing a Debian package`_.
+- Debian/Ubuntu: see `Installing a Debian package`_.
- `CentOS 7 RPM packages <http://pubrepo.maxiv.lu.se/rpm/el7/x86_64/>`_ provided by the Max IV institute at Lund, Sweden.
- `Fedora 23 rpm packages <http://pubrepo.maxiv.lu.se/rpm/fc23/x86_64/>`_ provided by the Max IV institute at Lund, Sweden.
- `Arch Linux (AUR) package <https://aur.archlinux.org/packages/python-silx>`_ provided by Leonid Bloch.
@@ -125,35 +116,24 @@ You can also follow one of those installation procedures:
Installing a Debian package
+++++++++++++++++++++++++++
-Debian 9 (Stretch) packages are available on http://www.silx.org/pub/debian/ for amd64 computers.
-To install it, you need to download this file :
+silx is officially packaged in `Debian <https://packages.debian.org/search?searchon=names&keywords=silx>`_
+and `Ubuntu <https://packages.ubuntu.com/search?keywords=silx&searchon=names&suite=all&section=all>`_.
-.. code-block:: bash
-
- http://www.silx.org/pub/debian/silx.list
-
-and copy it into the /etc/apt/sources.list.d folder.
-Then run ``apt-get update`` and ``apt-get install python-silx``
-
-.. code-block:: bash
+To install it, run `apt-get install silx` as root.
+The `python3-silx` package provides the library, while the `silx` package provides the executable (`silx view`, `silx convert`, ...).
- wget http://www.silx.org/pub/debian/silx.list
- sudo cp silx.list /etc/apt/sources.list.d
- sudo apt-get update
- sudo apt-get install python-silx python3-silx silx
-
-The `python-silx` and `python3-silx` packages provide the library,
-while the `silx` package provides the executable (`silx view`, `silx convert` ...).
+Unofficial (possibly more recent) packages are available for Debian 10 (Buster, amd64) and Ubuntu 20.04 (Focal, amd64 and ppc64le) in this repository: http://www.silx.org/pub/linux-repo/.
+See information on `how-to use this repository <http://www.silx.org/pub/linux-repo/>`_ before running `apt-get install silx`.
.. note::
- The packages are built automatically, hence not signed.
- You have to accept the installation of non-signed packages.
+ Those packages are built automatically, hence not signed.
+ You have to accept the installation of non-signed packages.
If the packages are not installed, it might be due to the priority list.
-You can display the priority list using `apt-cache policy python-silx`.
-If the Pin-number of silx.org is too low compared to other sources:
-download http://www.silx.org/pub/debian/silx.pref into /etc/apt/preferences.d
+You can display the priority list using `apt-cache policy silx`.
+If the Pin-number of silx.org is too low compared to other sources,
+see the "Information/Troubleshooting" section `here <http://www.silx.org/pub/linux-repo/>`_,
and start the update/install procedure again.
@@ -184,9 +164,6 @@ binary wheel for it.
This means that you would have to install *silx* from its sources, which requires
you to install a C compiler first.
-We also encourage you to use Python 3.5 or newer as former versions are no longer
-officially supported.
-
Configure Python as explained on
`docs.python.org <https://docs.python.org/3/using/windows.html#configuring-python>`_
to add the python installation directory to your PATH environment variable.
@@ -211,8 +188,7 @@ prompt.
MacOS
-----
-Apple ships Python 2.7 by default on their operating systems.
-You must install Python 3.5 or newer to install silx.
+Make sure to use python3 to install silx (you might need to install python3).
Then, install *silx* with ``pip``, see `Installing with pip`_::
@@ -271,14 +247,14 @@ installed using:
.. code-block:: bash
- pip install -r https://github.com/silx-kit/silx/raw/0.8/requirements-dev.txt
+ pip install -r https://github.com/silx-kit/silx/raw/master/requirements-dev.txt
Building from source
++++++++++++++++++++
Source package of *silx* releases can be downloaded from
-`the pypi project page <https://pypi.python.org/pypi/silx>`_.
+`the pypi project page <https://pypi.org/project/silx>`_.
After downloading the `silx-x.y.z.tar.gz` archive, extract its content::
@@ -314,32 +290,51 @@ To set the environment variables, type on the command line:
Advanced build options
++++++++++++++++++++++
-In case you want more control over the build procedure, the build command is:
-
-.. code-block:: bash
+Advanced options can be set through the following environment variables:
- python setup.py build
+.. list-table::
+ :widths: 1 4
+ :header-rows: 1
-There are few advanced options to ``setup.py build``:
+ * - Environment variable
+ - Description
+ * - ``SILX_WITH_OPENMP``
+ - Whether or not to compile Cython code with OpenMP support (default: ``True`` except on macOS where it is ``False``)
+ * - ``SILX_FORCE_CYTHON``
+ - Whether or not to force re-generating the C/C++ source code from Cython files (default: ``False``).
+ * - ``SPECFILE_USE_GNU_SOURCE``
+ - Whether or not to use a cleaner locale independent implementation of :mod:`silx.io.specfile` by using `_GNU_SOURCE=1`
+ (default: ``False``; POSIX operating system only).
+ * - ``SILX_FULL_INSTALL_REQUIRES``
+ - Set it to put all dependencies as ``install_requires`` (For packaging purpose).
+ * - ``SILX_INSTALL_REQUIRES_STRIP``
+ - Comma-separated list of package names to remove from ``install_requires`` (For packaging purpose).
+.. note:: Boolean options are passed as ``True`` or ``False``.
-* ``--no-cython``: Prevent Cython (even if installed) from re-generating the C source code.
- Use the one provided by the development team.
-* ``--no-openmp``: Recompiles the Cython code without OpenMP support (default for MacOSX).
-* ``--openmp``: Recompiles the Cython code with OpenMP support (default for Windows and Linux).
-Package the build into a wheel and install it:
+Package the build into a wheel and install it (this requires to install the `build <https://pypa-build.readthedocs.io>`_ package):
.. code-block:: bash
- python setup.py bdist_wheel
+ python -m build --wheel
pip install dist/silx*.whl
To build the documentation, using `Sphinx <http://www.sphinx-doc.org/>`_:
.. code-block:: bash
- python setup.py build build_doc
+ pip install . # Make sure to install the same version as the source
+ sphinx-build doc/source/ build/html
+
+.. note::
+
+ To re-generate the example script screenshots, build the documentation with the
+ environment variable ``DIRECTIVE_SNAPSHOT_QT`` set to ``True``.
+
+Formatting
+++++++++++
+To format the code, use `black <https://black.readthedocs.io>`_.
Testing
+++++++
diff --git a/doc/source/license.rst b/doc/source/license.rst
index 760be91..4adcbcf 100644
--- a/doc/source/license.rst
+++ b/doc/source/license.rst
@@ -4,6 +4,18 @@ License
The source code of *silx* is licensed under the `MIT <https://opensource.org/licenses/MIT>`_ license:
.. include:: ../../LICENSE
+ :literal:
+
+Note:
+ The silx toolkit is a software library and one of its goals is not to impose any license to the end user.
+
+ silx follows the permissive MIT license although it may include contributions following other licenses not interfering with the previous goal.
+ Detailed information can be found in the copyright file.
+
+ silx uses the Qt library for its graphical user interfaces.
+ A word of caution is to be provided.
+ If users develop and distribute software using modules accessing Qt by means of Riverbank Computing Qt bindings PyQt4 or PyQt5, those users will be conditioned by the license of their PyQt4/5 software (GPL or commercial).
+ If the end user does not own a commercial license of PyQt4 or PyQt5 and wishes to be free of any distribution condition, (s)he should be able to use PySide6 because it uses the LGPL license.
The following list provides the copyright and license of the different source files of the project:
diff --git a/doc/source/modules/gui/data/img/ArrayTableWidget.png b/doc/source/modules/gui/data/img/ArrayTableWidget.png
index e7bb2a9..138d189 100644
--- a/doc/source/modules/gui/data/img/ArrayTableWidget.png
+++ b/doc/source/modules/gui/data/img/ArrayTableWidget.png
Binary files differ
diff --git a/doc/source/modules/gui/data/img/DataViewer.png b/doc/source/modules/gui/data/img/DataViewer.png
index 7980de9..6d0da71 100644
--- a/doc/source/modules/gui/data/img/DataViewer.png
+++ b/doc/source/modules/gui/data/img/DataViewer.png
Binary files differ
diff --git a/doc/source/modules/gui/dialog/img/abstractdatafiledialog.svg b/doc/source/modules/gui/dialog/img/abstractdatafiledialog.svg
new file mode 100644
index 0000000..f545c12
--- /dev/null
+++ b/doc/source/modules/gui/dialog/img/abstractdatafiledialog.svg
@@ -0,0 +1,1958 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="660"
+ height="500"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.5 r10040"
+ sodipodi:docname="abstract_file_dialog.svg"
+ inkscape:export-filename="abstract_file_dialog.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <filter
+ inkscape:label="Wax print"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Wax print on tissue texture"
+ height="1.4"
+ y="-0.2"
+ width="1.4"
+ x="-0.2"
+ color-interpolation-filters="sRGB"
+ id="filter3755">
+ <feGaussianBlur
+ result="result1"
+ in="SourceGraphic"
+ stdDeviation="2"
+ id="feGaussianBlur3757" />
+ <feTurbulence
+ result="result0"
+ numOctaves="5"
+ baseFrequency="0.05"
+ type="fractalNoise"
+ id="feTurbulence3759" />
+ <feDisplacementMap
+ result="result2"
+ scale="10"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in="result1"
+ in2="result0"
+ id="feDisplacementMap3761" />
+ <feColorMatrix
+ values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 10 0 "
+ result="result3"
+ id="feColorMatrix3763" />
+ <feBlend
+ mode="multiply"
+ in="result2"
+ result="result5"
+ in2="result3"
+ id="feBlend3765" />
+ <feGaussianBlur
+ result="result4"
+ in="result3"
+ stdDeviation="5"
+ id="feGaussianBlur3767" />
+ <feComposite
+ k1="0.5"
+ k3="1.5"
+ k2="0.15"
+ in="result4"
+ in2="result5"
+ operator="arithmetic"
+ result="result6"
+ id="feComposite3769"
+ k4="0" />
+ <feComposite
+ operator="in"
+ in="result6"
+ in2="result4"
+ id="feComposite3771" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6728">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6730" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6732">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6734" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6736">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6738" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6740"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6742"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6744" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6746" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6748">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6750" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6752">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6754" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6756">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6758" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6760"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6762"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6764" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6766" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6768">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6770" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6772">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6774" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6776">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6778" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6780"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6782"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6784" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6786" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6788">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6790" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6792">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6794" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6796">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6798" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6800"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6802"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6804" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6806" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6808">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6810" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6812">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6814" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6816">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6818" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6820"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6822"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6824" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6826" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6828">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6830" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6832">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6834" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6836">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6838" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6840"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6842"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6844" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6846" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6848">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6850" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6852">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6854" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6856">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6858" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6860"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6862"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6864" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6866" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6868">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6870" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6872">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6874" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6876">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6878" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6880"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6882"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6884" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6886" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6888">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6890" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6892">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6894" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6896">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6898" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6900"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6902"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6904" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6906" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6908">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6910" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6912">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6914" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6916">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6918" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6920"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6922"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6924" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6926" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6928">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6930" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6932">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6934" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6936">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6938" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6940"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6942"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6944" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6946" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6948">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6950" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6952">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6954" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6956">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6958" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6960"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6962"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6964" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6966" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6968">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6970" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6972">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6974" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6976">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6978" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6980"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6982"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6984" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6986" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6988">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6990" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6992">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6994" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6996">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6998" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite7000"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite7002"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite7004" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap7006" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter7008">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence7010" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting7012">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight7014" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting7016">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight7018" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite7020"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite7022"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite7024" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap7026" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter7028">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence7030" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting7032">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight7034" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting7036">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight7038" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite7040"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite7042"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite7044" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap7046" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter7048">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence7050" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting7052">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight7054" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting7056">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight7058" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite7060"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite7062"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite7064" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap7066" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter7068">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence7070" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting7072">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight7074" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting7076">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight7078" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite7080"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite7082"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite7084" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap7086" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter7088">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence7090" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting7092">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight7094" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting7096">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight7098" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite7100"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite7102"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite7104" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap7106" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter7108">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence7110" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting7112">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight7114" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting7116">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight7118" />
+ </feSpecularLighting>
+ <feComposite
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite7120"
+ k2="0"
+ k3="0"
+ k4="0" />
+ <feComposite
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite7122"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite7124" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap7126" />
+ </filter>
+ <filter
+ inkscape:label="Rough and glossy"
+ inkscape:menu="Textures"
+ inkscape:menu-tooltip="Crumpled glossy paper effect which can be used for pictures as for objects"
+ color-interpolation-filters="sRGB"
+ id="filter6768-5">
+ <feTurbulence
+ type="fractalNoise"
+ numOctaves="7"
+ baseFrequency="0.02"
+ seed="55"
+ result="result0"
+ id="feTurbulence6770-9" />
+ <feDiffuseLighting
+ surfaceScale="4"
+ diffuseConstant="1"
+ kernelUnitLength="1"
+ result="result1"
+ in="result0"
+ id="feDiffuseLighting6772-2">
+ <feDistantLight
+ azimuth="235"
+ elevation="60"
+ id="feDistantLight6774-2" />
+ </feDiffuseLighting>
+ <feSpecularLighting
+ in="result0"
+ surfaceScale="3"
+ specularConstant="1"
+ specularExponent="25"
+ kernelUnitLength="1"
+ result="result3"
+ id="feSpecularLighting6776-8">
+ <feDistantLight
+ azimuth="235"
+ elevation="55"
+ id="feDistantLight6778-9" />
+ </feSpecularLighting>
+ <feComposite
+ k4="0"
+ k3="0"
+ k2="0"
+ in="result1"
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ result="result2"
+ id="feComposite6780-7" />
+ <feComposite
+ k4="0"
+ k1="0"
+ in="result2"
+ in2="result3"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result4"
+ id="feComposite6782-3" />
+ <feComposite
+ in2="SourceAlpha"
+ operator="in"
+ in="result4"
+ result="fbSourceGraphic"
+ id="feComposite6784-6" />
+ <feDisplacementMap
+ scale="7"
+ yChannelSelector="G"
+ xChannelSelector="R"
+ in2="result0"
+ id="feDisplacementMap6786-1" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.98994949"
+ inkscape:cx="349.21157"
+ inkscape:cy="238.52147"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1722"
+ inkscape:window-height="981"
+ inkscape:window-x="168"
+ inkscape:window-y="219"
+ inkscape:window-maximized="0"
+ inkscape:snap-global="false"
+ showguides="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3887"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ originx="-5.4px"
+ originy="-443.4px" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-5.4,-108.9622)">
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7108);enable-background:accumulate"
+ id="rect3773"
+ width="420.22345"
+ height="206.07112"
+ x="34.009075"
+ y="175.08205" />
+ <rect
+ style="color:#000000;fill:none;stroke:#757575;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7088);enable-background:accumulate"
+ id="rect3786"
+ width="120"
+ height="400"
+ x="23.543495"
+ y="155.5638" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7068);enable-background:accumulate"
+ id="rect3788"
+ width="240"
+ height="30"
+ x="173.54349"
+ y="165.5638" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7048);enable-background:accumulate"
+ id="rect3790"
+ width="180"
+ height="30"
+ x="453.54352"
+ y="165.5638" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7028);enable-background:accumulate"
+ id="rect3792"
+ width="180"
+ height="210"
+ x="453.54352"
+ y="205.5638" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7008);enable-background:accumulate"
+ id="rect3794"
+ width="180"
+ height="120"
+ x="453.54352"
+ y="425.56378" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6988);enable-background:accumulate"
+ id="rect3796"
+ width="440"
+ height="30"
+ x="23.543495"
+ y="565.56384" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6968);enable-background:accumulate"
+ id="rect3798"
+ width="240"
+ height="30"
+ x="173.54349"
+ y="515.56384" />
+ <rect
+ style="color:#000000;fill:none;stroke:#757575;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6948);enable-background:accumulate"
+ id="rect3800"
+ width="260"
+ height="400"
+ x="163.54349"
+ y="155.5638" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6928);enable-background:accumulate"
+ id="rect3802"
+ width="80"
+ height="30"
+ x="473.54352"
+ y="565.56384" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6908);enable-background:accumulate"
+ id="rect3804"
+ width="80"
+ height="30"
+ x="563.54346"
+ y="565.56384"
+ ry="0" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6888);enable-background:accumulate"
+ id="rect3806"
+ width="640"
+ height="460"
+ x="13.543495"
+ y="145.5638" />
+ <g
+ id="g3853"
+ transform="translate(-220.10121,39.2414)"
+ style="filter:url(#filter6868)">
+ <path
+ transform="matrix(0.23457511,0,0,0.23457511,323.28913,226.51496)"
+ d="m 214.28572,295.93362 a 6.4285712,6.4285712 0 1 1 -12.85714,0 6.4285712,6.4285712 0 1 1 12.85714,0 z"
+ sodipodi:ry="6.4285712"
+ sodipodi:rx="6.4285712"
+ sodipodi:cy="295.93362"
+ sodipodi:cx="207.85715"
+ id="path3808"
+ style="color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.23457511,0,0,0.23457511,323.28913,234.76086)"
+ d="m 214.28572,295.93362 a 6.4285712,6.4285712 0 1 1 -12.85714,0 6.4285712,6.4285712 0 1 1 12.85714,0 z"
+ sodipodi:ry="6.4285712"
+ sodipodi:rx="6.4285712"
+ sodipodi:cy="295.93362"
+ sodipodi:cx="207.85715"
+ id="path3808-6"
+ style="color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.23457511,0,0,0.23457511,323.28913,243.00678)"
+ d="m 214.28572,295.93362 a 6.4285712,6.4285712 0 1 1 -12.85714,0 6.4285712,6.4285712 0 1 1 12.85714,0 z"
+ sodipodi:ry="6.4285712"
+ sodipodi:rx="6.4285712"
+ sodipodi:cy="295.93362"
+ sodipodi:cx="207.85715"
+ id="path3808-7"
+ style="color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ </g>
+ <g
+ id="g3853-5"
+ transform="translate(60.781967,39.2414)"
+ style="filter:url(#filter6848)">
+ <path
+ transform="matrix(0.23457511,0,0,0.23457511,323.28913,226.51496)"
+ d="m 214.28572,295.93362 a 6.4285712,6.4285712 0 1 1 -12.85714,0 6.4285712,6.4285712 0 1 1 12.85714,0 z"
+ sodipodi:ry="6.4285712"
+ sodipodi:rx="6.4285712"
+ sodipodi:cy="295.93362"
+ sodipodi:cx="207.85715"
+ id="path3808-35"
+ style="color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.23457511,0,0,0.23457511,323.28913,234.76086)"
+ d="m 214.28572,295.93362 a 6.4285712,6.4285712 0 1 1 -12.85714,0 6.4285712,6.4285712 0 1 1 12.85714,0 z"
+ sodipodi:ry="6.4285712"
+ sodipodi:rx="6.4285712"
+ sodipodi:cy="295.93362"
+ sodipodi:cx="207.85715"
+ id="path3808-6-6"
+ style="color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.23457511,0,0,0.23457511,323.28913,243.00678)"
+ d="m 214.28572,295.93362 a 6.4285712,6.4285712 0 1 1 -12.85714,0 6.4285712,6.4285712 0 1 1 12.85714,0 z"
+ sodipodi:ry="6.4285712"
+ sodipodi:rx="6.4285712"
+ sodipodi:cy="295.93362"
+ sodipodi:cx="207.85715"
+ id="path3808-7-2"
+ style="color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ </g>
+ <rect
+ style="color:#000000;fill:none;stroke:#757575;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6828);enable-background:accumulate"
+ id="rect3891"
+ width="200"
+ height="400"
+ x="443.54352"
+ y="155.5638" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6808);enable-background:accumulate"
+ id="rect3893"
+ width="240"
+ height="300"
+ x="173.54349"
+ y="205.5638" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6788);enable-background:accumulate"
+ id="rect3788-9"
+ width="640"
+ height="30"
+ x="13.543495"
+ y="115.56378" />
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6768);enable-background:accumulate"
+ id="rect3913"
+ width="100"
+ height="300"
+ x="33.543499"
+ y="205.5638" />
+ <text
+ xml:space="preserve"
+ style="font-size:18.27440071px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="39.028339"
+ y="247.82175"
+ id="text3915"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3917"
+ x="39.028339"
+ y="247.82175">Shortcuts</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="208.54349"
+ y="264.56378"
+ id="text3915-1"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="74.912109"
+ inkscape:transform-center-y="103.96484"><tspan
+ sodipodi:role="line"
+ id="tspan3917-2"
+ x="208.54349"
+ y="264.56378">Browser</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:17.64155769px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="223.45605"
+ y="185.64771"
+ id="text3915-1-7"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="33.039158"
+ inkscape:transform-center-y="45.852548"><tspan
+ sodipodi:role="line"
+ id="tspan3917-2-0"
+ x="223.45605"
+ y="185.64771">Browser Toolbar</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:17.64155769px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="582.13245"
+ y="586.1618"
+ id="text3915-1-7-9"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="33.039175"
+ inkscape:transform-center-y="45.852541"><tspan
+ sodipodi:role="line"
+ id="tspan3917-2-0-3"
+ x="582.13245"
+ y="586.1618">Open</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:17.64155769px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="483.3667"
+ y="584.45728"
+ id="text3915-1-7-9-6"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="33.039149"
+ inkscape:transform-center-y="45.852549"><tspan
+ sodipodi:role="line"
+ id="tspan3917-2-0-3-0"
+ x="483.3667"
+ y="584.45728">Cancel</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:22.65561676px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="33.543499"
+ y="587.56384"
+ id="text3915-1-7-9-6-6"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="42.429502"
+ inkscape:transform-center-y="58.884695"><tspan
+ sodipodi:role="line"
+ id="tspan3917-2-0-3-0-2"
+ x="33.543499"
+ y="587.56384">URL</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:17.64155769px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="193.05695"
+ y="536.06213"
+ id="text3915-1-7-9-6-6-6"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="33.03916"
+ inkscape:transform-center-y="45.852561"><tspan
+ sodipodi:role="line"
+ id="tspan3917-2-0-3-0-2-1"
+ x="193.05695"
+ y="536.06213">File format selector</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:17.64155769px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="469.60443"
+ y="185.5638"
+ id="text3915-1-7-8"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="33.039162"
+ inkscape:transform-center-y="45.852549"><tspan
+ sodipodi:role="line"
+ id="tspan3917-2-0-7"
+ x="469.60443"
+ y="185.5638">Preview Toolbar</tspan></text>
+ <rect
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6748);enable-background:accumulate"
+ id="rect3798-9"
+ width="30"
+ height="30"
+ x="383.54352"
+ y="515.56384" />
+ <path
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6728);enable-background:accumulate"
+ d="m 388.5435,520.5638 10,20 10,-20 z"
+ id="path4084"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="538.62158"
+ y="263.56378"
+ id="text3915-1-0"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="74.912109"
+ inkscape:transform-center-y="103.96484"><tspan
+ sodipodi:role="line"
+ id="tspan3917-2-2"
+ x="538.62158"
+ y="263.56378">Data</tspan><tspan
+ sodipodi:role="line"
+ x="538.62158"
+ y="313.56378"
+ id="tspan4145">Preview</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="544.39307"
+ y="475.56378"
+ id="text3915-1-0-3"
+ sodipodi:linespacing="125%"
+ inkscape:transform-center-x="74.912109"
+ inkscape:transform-center-y="103.96484"><tspan
+ sodipodi:role="line"
+ id="tspan3917-2-2-7"
+ x="544.39307"
+ y="475.56378">Data</tspan><tspan
+ sodipodi:role="line"
+ x="544.39307"
+ y="525.56378"
+ id="tspan4147">Selector</tspan></text>
+ </g>
+</svg>
diff --git a/doc/source/modules/gui/icons.rst b/doc/source/modules/gui/icons.rst
index 67235c2..efa0264 100644
--- a/doc/source/modules/gui/icons.rst
+++ b/doc/source/modules/gui/icons.rst
@@ -49,12 +49,16 @@ Available icons
- add-shape-polygon
* - |add-shape-rectangle|
- add-shape-rectangle
+ * - |add-shape-rotated-rectangle|
+ - add-shape-rotated-rectangle
* - |add-shape-unknown|
- add-shape-unknown
* - |add-shape-vertical|
- add-shape-vertical
* - |add|
- add
+ * - |aggregation-mode|
+ - aggregation-mode
* - |arrow-keys|
- arrow-keys
* - |axis|
@@ -313,6 +317,12 @@ Available icons
- rotate-3d
* - |rudder|
- rudder
+ * - |ruler|
+ - ruler
+ * - |scale-auto|
+ - scale-auto
+ * - |scale-fixed|
+ - scale-fixed
* - |selected|
- selected
* - |shape-circle-solid|
@@ -339,6 +349,8 @@ Available icons
- shape-square
* - |shape-vertical|
- shape-vertical
+ * - |side-histograms|
+ - side-histograms
* - |silx|
- silx
* - |slice-cross|
@@ -402,194 +414,200 @@ Available icons
* - |zoom|
- zoom
-.. |3d-plane-normal-x| image:: ../../../../silx/resources/gui/icons/3d-plane-normal-x.png
-.. |3d-plane-normal-y| image:: ../../../../silx/resources/gui/icons/3d-plane-normal-y.png
-.. |3d-plane-normal-z| image:: ../../../../silx/resources/gui/icons/3d-plane-normal-z.png
-.. |3d-plane-pan| image:: ../../../../silx/resources/gui/icons/3d-plane-pan.png
-.. |3d-plane| image:: ../../../../silx/resources/gui/icons/3d-plane.png
-.. |add-range-horizontal| image:: ../../../../silx/resources/gui/icons/add-range-horizontal.png
-.. |add-shape-arc| image:: ../../../../silx/resources/gui/icons/add-shape-arc.png
-.. |add-shape-circle| image:: ../../../../silx/resources/gui/icons/add-shape-circle.png
-.. |add-shape-cross| image:: ../../../../silx/resources/gui/icons/add-shape-cross.png
-.. |add-shape-diagonal| image:: ../../../../silx/resources/gui/icons/add-shape-diagonal.png
-.. |add-shape-ellipse| image:: ../../../../silx/resources/gui/icons/add-shape-ellipse.png
-.. |add-shape-horizontal| image:: ../../../../silx/resources/gui/icons/add-shape-horizontal.png
-.. |add-shape-point| image:: ../../../../silx/resources/gui/icons/add-shape-point.png
-.. |add-shape-polygon| image:: ../../../../silx/resources/gui/icons/add-shape-polygon.png
-.. |add-shape-rectangle| image:: ../../../../silx/resources/gui/icons/add-shape-rectangle.png
-.. |add-shape-unknown| image:: ../../../../silx/resources/gui/icons/add-shape-unknown.png
-.. |add-shape-vertical| image:: ../../../../silx/resources/gui/icons/add-shape-vertical.png
-.. |add| image:: ../../../../silx/resources/gui/icons/add.png
-.. |arrow-keys| image:: ../../../../silx/resources/gui/icons/arrow-keys.png
-.. |axis| image:: ../../../../silx/resources/gui/icons/axis.png
-.. |backend-opengl| image:: ../../../../silx/resources/gui/icons/backend-opengl.png
-.. |camera| image:: ../../../../silx/resources/gui/icons/camera.png
-.. |clipboard| image:: ../../../../silx/resources/gui/icons/clipboard.png
-.. |close| image:: ../../../../silx/resources/gui/icons/close.png
-.. |colorbar| image:: ../../../../silx/resources/gui/icons/colorbar.png
-.. |colormap-histogram| image:: ../../../../silx/resources/gui/icons/colormap-histogram.png
-.. |colormap-none| image:: ../../../../silx/resources/gui/icons/colormap-none.png
-.. |colormap-norm-arcsinh| image:: ../../../../silx/resources/gui/icons/colormap-norm-arcsinh.png
-.. |colormap-norm-gamma| image:: ../../../../silx/resources/gui/icons/colormap-norm-gamma.png
-.. |colormap-norm-linear| image:: ../../../../silx/resources/gui/icons/colormap-norm-linear.png
-.. |colormap-norm-log| image:: ../../../../silx/resources/gui/icons/colormap-norm-log.png
-.. |colormap-norm-sqrt| image:: ../../../../silx/resources/gui/icons/colormap-norm-sqrt.png
-.. |colormap-range| image:: ../../../../silx/resources/gui/icons/colormap-range.png
-.. |colormap| image:: ../../../../silx/resources/gui/icons/colormap.png
-.. |compare-align-auto| image:: ../../../../silx/resources/gui/icons/compare-align-auto.png
-.. |compare-align-center| image:: ../../../../silx/resources/gui/icons/compare-align-center.png
-.. |compare-align-origin| image:: ../../../../silx/resources/gui/icons/compare-align-origin.png
-.. |compare-align-stretch| image:: ../../../../silx/resources/gui/icons/compare-align-stretch.png
-.. |compare-keypoints| image:: ../../../../silx/resources/gui/icons/compare-keypoints.png
-.. |compare-mode-a-minus-b| image:: ../../../../silx/resources/gui/icons/compare-mode-a-minus-b.png
-.. |compare-mode-a| image:: ../../../../silx/resources/gui/icons/compare-mode-a.png
-.. |compare-mode-b| image:: ../../../../silx/resources/gui/icons/compare-mode-b.png
-.. |compare-mode-hline| image:: ../../../../silx/resources/gui/icons/compare-mode-hline.png
-.. |compare-mode-rb-channel| image:: ../../../../silx/resources/gui/icons/compare-mode-rb-channel.png
-.. |compare-mode-rbneg-channel| image:: ../../../../silx/resources/gui/icons/compare-mode-rbneg-channel.png
-.. |compare-mode-vline| image:: ../../../../silx/resources/gui/icons/compare-mode-vline.png
-.. |crop| image:: ../../../../silx/resources/gui/icons/crop.png
-.. |crosshair| image:: ../../../../silx/resources/gui/icons/crosshair.png
-.. |cube-back| image:: ../../../../silx/resources/gui/icons/cube-back.png
-.. |cube-bottom| image:: ../../../../silx/resources/gui/icons/cube-bottom.png
-.. |cube-front| image:: ../../../../silx/resources/gui/icons/cube-front.png
-.. |cube-left| image:: ../../../../silx/resources/gui/icons/cube-left.png
-.. |cube-right| image:: ../../../../silx/resources/gui/icons/cube-right.png
-.. |cube-rotate| image:: ../../../../silx/resources/gui/icons/cube-rotate.png
-.. |cube-top| image:: ../../../../silx/resources/gui/icons/cube-top.png
-.. |cube| image:: ../../../../silx/resources/gui/icons/cube.png
-.. |description-description| image:: ../../../../silx/resources/gui/icons/description-description.png
-.. |description-error| image:: ../../../../silx/resources/gui/icons/description-error.png
-.. |description-name| image:: ../../../../silx/resources/gui/icons/description-name.png
-.. |description-program| image:: ../../../../silx/resources/gui/icons/description-program.png
-.. |description-title| image:: ../../../../silx/resources/gui/icons/description-title.png
-.. |description-value| image:: ../../../../silx/resources/gui/icons/description-value.png
-.. |document-open| image:: ../../../../silx/resources/gui/icons/document-open.png
-.. |document-print| image:: ../../../../silx/resources/gui/icons/document-print.png
-.. |document-save| image:: ../../../../silx/resources/gui/icons/document-save.png
-.. |draw-brush| image:: ../../../../silx/resources/gui/icons/draw-brush.png
-.. |draw-pencil| image:: ../../../../silx/resources/gui/icons/draw-pencil.png
-.. |draw-rubber| image:: ../../../../silx/resources/gui/icons/draw-rubber.png
-.. |edit-copy| image:: ../../../../silx/resources/gui/icons/edit-copy.png
-.. |eye| image:: ../../../../silx/resources/gui/icons/eye.png
-.. |first| image:: ../../../../silx/resources/gui/icons/first.png
-.. |folder| image:: ../../../../silx/resources/gui/icons/folder.png
-.. |image-mask| image:: ../../../../silx/resources/gui/icons/image-mask.png
-.. |image-select-add| image:: ../../../../silx/resources/gui/icons/image-select-add.png
-.. |image-select-box| image:: ../../../../silx/resources/gui/icons/image-select-box.png
-.. |image-select-brush| image:: ../../../../silx/resources/gui/icons/image-select-brush.png
-.. |image-select-erase-rubber| image:: ../../../../silx/resources/gui/icons/image-select-erase-rubber.png
-.. |image-select-erase| image:: ../../../../silx/resources/gui/icons/image-select-erase.png
-.. |image| image:: ../../../../silx/resources/gui/icons/image.png
-.. |item-0dim| image:: ../../../../silx/resources/gui/icons/item-0dim.png
-.. |item-1dim| image:: ../../../../silx/resources/gui/icons/item-1dim.png
-.. |item-2dim| image:: ../../../../silx/resources/gui/icons/item-2dim.png
-.. |item-3dim| image:: ../../../../silx/resources/gui/icons/item-3dim.png
-.. |item-ndim| image:: ../../../../silx/resources/gui/icons/item-ndim.png
-.. |item-none| image:: ../../../../silx/resources/gui/icons/item-none.png
-.. |item-object| image:: ../../../../silx/resources/gui/icons/item-object.png
-.. |last| image:: ../../../../silx/resources/gui/icons/last.png
-.. |layer-nx| image:: ../../../../silx/resources/gui/icons/layer-nx.png
-.. |mask-clear-all| image:: ../../../../silx/resources/gui/icons/mask-clear-all.png
-.. |mask-clear| image:: ../../../../silx/resources/gui/icons/mask-clear.png
-.. |mask-invert| image:: ../../../../silx/resources/gui/icons/mask-invert.png
-.. |math-amplitude| image:: ../../../../silx/resources/gui/icons/math-amplitude.png
-.. |math-average| image:: ../../../../silx/resources/gui/icons/math-average.png
-.. |math-derive| image:: ../../../../silx/resources/gui/icons/math-derive.png
-.. |math-energy| image:: ../../../../silx/resources/gui/icons/math-energy.png
-.. |math-fit| image:: ../../../../silx/resources/gui/icons/math-fit.png
-.. |math-imaginary| image:: ../../../../silx/resources/gui/icons/math-imaginary.png
-.. |math-mean| image:: ../../../../silx/resources/gui/icons/math-mean.png
-.. |math-normalize| image:: ../../../../silx/resources/gui/icons/math-normalize.png
-.. |math-peak-reset| image:: ../../../../silx/resources/gui/icons/math-peak-reset.png
-.. |math-peak-search| image:: ../../../../silx/resources/gui/icons/math-peak-search.png
-.. |math-peak| image:: ../../../../silx/resources/gui/icons/math-peak.png
-.. |math-phase-color-log| image:: ../../../../silx/resources/gui/icons/math-phase-color-log.png
-.. |math-phase-color| image:: ../../../../silx/resources/gui/icons/math-phase-color.png
-.. |math-phase| image:: ../../../../silx/resources/gui/icons/math-phase.png
-.. |math-real| image:: ../../../../silx/resources/gui/icons/math-real.png
-.. |math-sigma| image:: ../../../../silx/resources/gui/icons/math-sigma.png
-.. |math-smooth| image:: ../../../../silx/resources/gui/icons/math-smooth.png
-.. |math-square-amplitude| image:: ../../../../silx/resources/gui/icons/math-square-amplitude.png
-.. |math-substract| image:: ../../../../silx/resources/gui/icons/math-substract.png
-.. |math-swap-sign| image:: ../../../../silx/resources/gui/icons/math-swap-sign.png
-.. |math-ymin-to-zero| image:: ../../../../silx/resources/gui/icons/math-ymin-to-zero.png
-.. |median-filter| image:: ../../../../silx/resources/gui/icons/median-filter.png
-.. |next| image:: ../../../../silx/resources/gui/icons/next.png
-.. |normal| image:: ../../../../silx/resources/gui/icons/normal.png
-.. |nxdata-axis-add| image:: ../../../../silx/resources/gui/icons/nxdata-axis-add.png
-.. |nxdata-axis-remove| image:: ../../../../silx/resources/gui/icons/nxdata-axis-remove.png
-.. |nxdata-create| image:: ../../../../silx/resources/gui/icons/nxdata-create.png
-.. |nxdata-remove| image:: ../../../../silx/resources/gui/icons/nxdata-remove.png
-.. |pan| image:: ../../../../silx/resources/gui/icons/pan.png
-.. |pixel-intensities| image:: ../../../../silx/resources/gui/icons/pixel-intensities.png
-.. |plot-grid| image:: ../../../../silx/resources/gui/icons/plot-grid.png
-.. |plot-roi-above| image:: ../../../../silx/resources/gui/icons/plot-roi-above.png
-.. |plot-roi-below| image:: ../../../../silx/resources/gui/icons/plot-roi-below.png
-.. |plot-roi-between| image:: ../../../../silx/resources/gui/icons/plot-roi-between.png
-.. |plot-roi-reset| image:: ../../../../silx/resources/gui/icons/plot-roi-reset.png
-.. |plot-roi| image:: ../../../../silx/resources/gui/icons/plot-roi.png
-.. |plot-symbols| image:: ../../../../silx/resources/gui/icons/plot-symbols.png
-.. |plot-toggle-points| image:: ../../../../silx/resources/gui/icons/plot-toggle-points.png
-.. |plot-widget| image:: ../../../../silx/resources/gui/icons/plot-widget.png
-.. |plot-window-image| image:: ../../../../silx/resources/gui/icons/plot-window-image.png
-.. |plot-window| image:: ../../../../silx/resources/gui/icons/plot-window.png
-.. |plot-xauto| image:: ../../../../silx/resources/gui/icons/plot-xauto.png
-.. |plot-xlog| image:: ../../../../silx/resources/gui/icons/plot-xlog.png
-.. |plot-yauto| image:: ../../../../silx/resources/gui/icons/plot-yauto.png
-.. |plot-ydown| image:: ../../../../silx/resources/gui/icons/plot-ydown.png
-.. |plot-ylog| image:: ../../../../silx/resources/gui/icons/plot-ylog.png
-.. |plot-yup| image:: ../../../../silx/resources/gui/icons/plot-yup.png
-.. |pointing-hand| image:: ../../../../silx/resources/gui/icons/pointing-hand.png
-.. |previous| image:: ../../../../silx/resources/gui/icons/previous.png
-.. |profile-clear| image:: ../../../../silx/resources/gui/icons/profile-clear.png
-.. |profile1D| image:: ../../../../silx/resources/gui/icons/profile1D.png
-.. |profile2D| image:: ../../../../silx/resources/gui/icons/profile2D.png
-.. |remove| image:: ../../../../silx/resources/gui/icons/remove.png
-.. |rm| image:: ../../../../silx/resources/gui/icons/rm.png
-.. |rotate-3d| image:: ../../../../silx/resources/gui/icons/rotate-3d.png
-.. |rudder| image:: ../../../../silx/resources/gui/icons/rudder.png
-.. |selected| image:: ../../../../silx/resources/gui/icons/selected.png
-.. |shape-circle-solid| image:: ../../../../silx/resources/gui/icons/shape-circle-solid.png
-.. |shape-circle| image:: ../../../../silx/resources/gui/icons/shape-circle.png
-.. |shape-cross| image:: ../../../../silx/resources/gui/icons/shape-cross.png
-.. |shape-diagonal-directed| image:: ../../../../silx/resources/gui/icons/shape-diagonal-directed.png
-.. |shape-diagonal| image:: ../../../../silx/resources/gui/icons/shape-diagonal.png
-.. |shape-ellipse-solid| image:: ../../../../silx/resources/gui/icons/shape-ellipse-solid.png
-.. |shape-ellipse| image:: ../../../../silx/resources/gui/icons/shape-ellipse.png
-.. |shape-horizontal| image:: ../../../../silx/resources/gui/icons/shape-horizontal.png
-.. |shape-polygon| image:: ../../../../silx/resources/gui/icons/shape-polygon.png
-.. |shape-rectangle| image:: ../../../../silx/resources/gui/icons/shape-rectangle.png
-.. |shape-square| image:: ../../../../silx/resources/gui/icons/shape-square.png
-.. |shape-vertical| image:: ../../../../silx/resources/gui/icons/shape-vertical.png
-.. |silx| image:: ../../../../silx/resources/gui/icons/silx.png
-.. |slice-cross| image:: ../../../../silx/resources/gui/icons/slice-cross.png
-.. |slice-horizontal| image:: ../../../../silx/resources/gui/icons/slice-horizontal.png
-.. |slice-vertical| image:: ../../../../silx/resources/gui/icons/slice-vertical.png
-.. |sliders-off| image:: ../../../../silx/resources/gui/icons/sliders-off.png
-.. |sliders-on| image:: ../../../../silx/resources/gui/icons/sliders-on.png
-.. |spec| image:: ../../../../silx/resources/gui/icons/spec.png
-.. |stats-active-items| image:: ../../../../silx/resources/gui/icons/stats-active-items.png
-.. |stats-visible-data| image:: ../../../../silx/resources/gui/icons/stats-visible-data.png
-.. |stats-whole-data| image:: ../../../../silx/resources/gui/icons/stats-whole-data.png
-.. |stats-whole-items| image:: ../../../../silx/resources/gui/icons/stats-whole-items.png
-.. |tree-collapse-all| image:: ../../../../silx/resources/gui/icons/tree-collapse-all.png
-.. |tree-expand-all| image:: ../../../../silx/resources/gui/icons/tree-expand-all.png
-.. |tree-sort| image:: ../../../../silx/resources/gui/icons/tree-sort.png
-.. |view-1d| image:: ../../../../silx/resources/gui/icons/view-1d.png
-.. |view-2d-stack| image:: ../../../../silx/resources/gui/icons/view-2d-stack.png
-.. |view-2d| image:: ../../../../silx/resources/gui/icons/view-2d.png
-.. |view-3d| image:: ../../../../silx/resources/gui/icons/view-3d.png
-.. |view-fullscreen| image:: ../../../../silx/resources/gui/icons/view-fullscreen.png
-.. |view-hdf5| image:: ../../../../silx/resources/gui/icons/view-hdf5.png
-.. |view-nexus| image:: ../../../../silx/resources/gui/icons/view-nexus.png
-.. |view-nofullscreen| image:: ../../../../silx/resources/gui/icons/view-nofullscreen.png
-.. |view-raw| image:: ../../../../silx/resources/gui/icons/view-raw.png
-.. |view-refresh| image:: ../../../../silx/resources/gui/icons/view-refresh.png
-.. |view-text| image:: ../../../../silx/resources/gui/icons/view-text.png
-.. |window-new| image:: ../../../../silx/resources/gui/icons/window-new.png
-.. |zoom-back| image:: ../../../../silx/resources/gui/icons/zoom-back.png
-.. |zoom-in| image:: ../../../../silx/resources/gui/icons/zoom-in.png
-.. |zoom-original| image:: ../../../../silx/resources/gui/icons/zoom-original.png
-.. |zoom-out| image:: ../../../../silx/resources/gui/icons/zoom-out.png
-.. |zoom| image:: ../../../../silx/resources/gui/icons/zoom.png
+.. |3d-plane-normal-x| image:: ../../../../src/silx/resources/gui/icons/3d-plane-normal-x.png
+.. |3d-plane-normal-y| image:: ../../../../src/silx/resources/gui/icons/3d-plane-normal-y.png
+.. |3d-plane-normal-z| image:: ../../../../src/silx/resources/gui/icons/3d-plane-normal-z.png
+.. |3d-plane-pan| image:: ../../../../src/silx/resources/gui/icons/3d-plane-pan.png
+.. |3d-plane| image:: ../../../../src/silx/resources/gui/icons/3d-plane.png
+.. |add-range-horizontal| image:: ../../../../src/silx/resources/gui/icons/add-range-horizontal.png
+.. |add-shape-arc| image:: ../../../../src/silx/resources/gui/icons/add-shape-arc.png
+.. |add-shape-circle| image:: ../../../../src/silx/resources/gui/icons/add-shape-circle.png
+.. |add-shape-cross| image:: ../../../../src/silx/resources/gui/icons/add-shape-cross.png
+.. |add-shape-diagonal| image:: ../../../../src/silx/resources/gui/icons/add-shape-diagonal.png
+.. |add-shape-ellipse| image:: ../../../../src/silx/resources/gui/icons/add-shape-ellipse.png
+.. |add-shape-horizontal| image:: ../../../../src/silx/resources/gui/icons/add-shape-horizontal.png
+.. |add-shape-point| image:: ../../../../src/silx/resources/gui/icons/add-shape-point.png
+.. |add-shape-polygon| image:: ../../../../src/silx/resources/gui/icons/add-shape-polygon.png
+.. |add-shape-rectangle| image:: ../../../../src/silx/resources/gui/icons/add-shape-rectangle.png
+.. |add-shape-rotated-rectangle| image:: ../../../../src/silx/resources/gui/icons/add-shape-rotated-rectangle.png
+.. |add-shape-unknown| image:: ../../../../src/silx/resources/gui/icons/add-shape-unknown.png
+.. |add-shape-vertical| image:: ../../../../src/silx/resources/gui/icons/add-shape-vertical.png
+.. |add| image:: ../../../../src/silx/resources/gui/icons/add.png
+.. |aggregation-mode| image:: ../../../../src/silx/resources/gui/icons/aggregation-mode.png
+.. |arrow-keys| image:: ../../../../src/silx/resources/gui/icons/arrow-keys.png
+.. |axis| image:: ../../../../src/silx/resources/gui/icons/axis.png
+.. |backend-opengl| image:: ../../../../src/silx/resources/gui/icons/backend-opengl.png
+.. |camera| image:: ../../../../src/silx/resources/gui/icons/camera.png
+.. |clipboard| image:: ../../../../src/silx/resources/gui/icons/clipboard.png
+.. |close| image:: ../../../../src/silx/resources/gui/icons/close.png
+.. |colorbar| image:: ../../../../src/silx/resources/gui/icons/colorbar.png
+.. |colormap-histogram| image:: ../../../../src/silx/resources/gui/icons/colormap-histogram.png
+.. |colormap-none| image:: ../../../../src/silx/resources/gui/icons/colormap-none.png
+.. |colormap-norm-arcsinh| image:: ../../../../src/silx/resources/gui/icons/colormap-norm-arcsinh.png
+.. |colormap-norm-gamma| image:: ../../../../src/silx/resources/gui/icons/colormap-norm-gamma.png
+.. |colormap-norm-linear| image:: ../../../../src/silx/resources/gui/icons/colormap-norm-linear.png
+.. |colormap-norm-log| image:: ../../../../src/silx/resources/gui/icons/colormap-norm-log.png
+.. |colormap-norm-sqrt| image:: ../../../../src/silx/resources/gui/icons/colormap-norm-sqrt.png
+.. |colormap-range| image:: ../../../../src/silx/resources/gui/icons/colormap-range.png
+.. |colormap| image:: ../../../../src/silx/resources/gui/icons/colormap.png
+.. |compare-align-auto| image:: ../../../../src/silx/resources/gui/icons/compare-align-auto.png
+.. |compare-align-center| image:: ../../../../src/silx/resources/gui/icons/compare-align-center.png
+.. |compare-align-origin| image:: ../../../../src/silx/resources/gui/icons/compare-align-origin.png
+.. |compare-align-stretch| image:: ../../../../src/silx/resources/gui/icons/compare-align-stretch.png
+.. |compare-keypoints| image:: ../../../../src/silx/resources/gui/icons/compare-keypoints.png
+.. |compare-mode-a-minus-b| image:: ../../../../src/silx/resources/gui/icons/compare-mode-a-minus-b.png
+.. |compare-mode-a| image:: ../../../../src/silx/resources/gui/icons/compare-mode-a.png
+.. |compare-mode-b| image:: ../../../../src/silx/resources/gui/icons/compare-mode-b.png
+.. |compare-mode-hline| image:: ../../../../src/silx/resources/gui/icons/compare-mode-hline.png
+.. |compare-mode-rb-channel| image:: ../../../../src/silx/resources/gui/icons/compare-mode-rb-channel.png
+.. |compare-mode-rbneg-channel| image:: ../../../../src/silx/resources/gui/icons/compare-mode-rbneg-channel.png
+.. |compare-mode-vline| image:: ../../../../src/silx/resources/gui/icons/compare-mode-vline.png
+.. |crop| image:: ../../../../src/silx/resources/gui/icons/crop.png
+.. |crosshair| image:: ../../../../src/silx/resources/gui/icons/crosshair.png
+.. |cube-back| image:: ../../../../src/silx/resources/gui/icons/cube-back.png
+.. |cube-bottom| image:: ../../../../src/silx/resources/gui/icons/cube-bottom.png
+.. |cube-front| image:: ../../../../src/silx/resources/gui/icons/cube-front.png
+.. |cube-left| image:: ../../../../src/silx/resources/gui/icons/cube-left.png
+.. |cube-right| image:: ../../../../src/silx/resources/gui/icons/cube-right.png
+.. |cube-rotate| image:: ../../../../src/silx/resources/gui/icons/cube-rotate.png
+.. |cube-top| image:: ../../../../src/silx/resources/gui/icons/cube-top.png
+.. |cube| image:: ../../../../src/silx/resources/gui/icons/cube.png
+.. |description-description| image:: ../../../../src/silx/resources/gui/icons/description-description.png
+.. |description-error| image:: ../../../../src/silx/resources/gui/icons/description-error.png
+.. |description-name| image:: ../../../../src/silx/resources/gui/icons/description-name.png
+.. |description-program| image:: ../../../../src/silx/resources/gui/icons/description-program.png
+.. |description-title| image:: ../../../../src/silx/resources/gui/icons/description-title.png
+.. |description-value| image:: ../../../../src/silx/resources/gui/icons/description-value.png
+.. |document-open| image:: ../../../../src/silx/resources/gui/icons/document-open.png
+.. |document-print| image:: ../../../../src/silx/resources/gui/icons/document-print.png
+.. |document-save| image:: ../../../../src/silx/resources/gui/icons/document-save.png
+.. |draw-brush| image:: ../../../../src/silx/resources/gui/icons/draw-brush.png
+.. |draw-pencil| image:: ../../../../src/silx/resources/gui/icons/draw-pencil.png
+.. |draw-rubber| image:: ../../../../src/silx/resources/gui/icons/draw-rubber.png
+.. |edit-copy| image:: ../../../../src/silx/resources/gui/icons/edit-copy.png
+.. |eye| image:: ../../../../src/silx/resources/gui/icons/eye.png
+.. |first| image:: ../../../../src/silx/resources/gui/icons/first.png
+.. |folder| image:: ../../../../src/silx/resources/gui/icons/folder.png
+.. |image-mask| image:: ../../../../src/silx/resources/gui/icons/image-mask.png
+.. |image-select-add| image:: ../../../../src/silx/resources/gui/icons/image-select-add.png
+.. |image-select-box| image:: ../../../../src/silx/resources/gui/icons/image-select-box.png
+.. |image-select-brush| image:: ../../../../src/silx/resources/gui/icons/image-select-brush.png
+.. |image-select-erase-rubber| image:: ../../../../src/silx/resources/gui/icons/image-select-erase-rubber.png
+.. |image-select-erase| image:: ../../../../src/silx/resources/gui/icons/image-select-erase.png
+.. |image| image:: ../../../../src/silx/resources/gui/icons/image.png
+.. |item-0dim| image:: ../../../../src/silx/resources/gui/icons/item-0dim.png
+.. |item-1dim| image:: ../../../../src/silx/resources/gui/icons/item-1dim.png
+.. |item-2dim| image:: ../../../../src/silx/resources/gui/icons/item-2dim.png
+.. |item-3dim| image:: ../../../../src/silx/resources/gui/icons/item-3dim.png
+.. |item-ndim| image:: ../../../../src/silx/resources/gui/icons/item-ndim.png
+.. |item-none| image:: ../../../../src/silx/resources/gui/icons/item-none.png
+.. |item-object| image:: ../../../../src/silx/resources/gui/icons/item-object.png
+.. |last| image:: ../../../../src/silx/resources/gui/icons/last.png
+.. |layer-nx| image:: ../../../../src/silx/resources/gui/icons/layer-nx.png
+.. |mask-clear-all| image:: ../../../../src/silx/resources/gui/icons/mask-clear-all.png
+.. |mask-clear| image:: ../../../../src/silx/resources/gui/icons/mask-clear.png
+.. |mask-invert| image:: ../../../../src/silx/resources/gui/icons/mask-invert.png
+.. |math-amplitude| image:: ../../../../src/silx/resources/gui/icons/math-amplitude.png
+.. |math-average| image:: ../../../../src/silx/resources/gui/icons/math-average.png
+.. |math-derive| image:: ../../../../src/silx/resources/gui/icons/math-derive.png
+.. |math-energy| image:: ../../../../src/silx/resources/gui/icons/math-energy.png
+.. |math-fit| image:: ../../../../src/silx/resources/gui/icons/math-fit.png
+.. |math-imaginary| image:: ../../../../src/silx/resources/gui/icons/math-imaginary.png
+.. |math-mean| image:: ../../../../src/silx/resources/gui/icons/math-mean.png
+.. |math-normalize| image:: ../../../../src/silx/resources/gui/icons/math-normalize.png
+.. |math-peak-reset| image:: ../../../../src/silx/resources/gui/icons/math-peak-reset.png
+.. |math-peak-search| image:: ../../../../src/silx/resources/gui/icons/math-peak-search.png
+.. |math-peak| image:: ../../../../src/silx/resources/gui/icons/math-peak.png
+.. |math-phase-color-log| image:: ../../../../src/silx/resources/gui/icons/math-phase-color-log.png
+.. |math-phase-color| image:: ../../../../src/silx/resources/gui/icons/math-phase-color.png
+.. |math-phase| image:: ../../../../src/silx/resources/gui/icons/math-phase.png
+.. |math-real| image:: ../../../../src/silx/resources/gui/icons/math-real.png
+.. |math-sigma| image:: ../../../../src/silx/resources/gui/icons/math-sigma.png
+.. |math-smooth| image:: ../../../../src/silx/resources/gui/icons/math-smooth.png
+.. |math-square-amplitude| image:: ../../../../src/silx/resources/gui/icons/math-square-amplitude.png
+.. |math-substract| image:: ../../../../src/silx/resources/gui/icons/math-substract.png
+.. |math-swap-sign| image:: ../../../../src/silx/resources/gui/icons/math-swap-sign.png
+.. |math-ymin-to-zero| image:: ../../../../src/silx/resources/gui/icons/math-ymin-to-zero.png
+.. |median-filter| image:: ../../../../src/silx/resources/gui/icons/median-filter.png
+.. |next| image:: ../../../../src/silx/resources/gui/icons/next.png
+.. |normal| image:: ../../../../src/silx/resources/gui/icons/normal.png
+.. |nxdata-axis-add| image:: ../../../../src/silx/resources/gui/icons/nxdata-axis-add.png
+.. |nxdata-axis-remove| image:: ../../../../src/silx/resources/gui/icons/nxdata-axis-remove.png
+.. |nxdata-create| image:: ../../../../src/silx/resources/gui/icons/nxdata-create.png
+.. |nxdata-remove| image:: ../../../../src/silx/resources/gui/icons/nxdata-remove.png
+.. |pan| image:: ../../../../src/silx/resources/gui/icons/pan.png
+.. |pixel-intensities| image:: ../../../../src/silx/resources/gui/icons/pixel-intensities.png
+.. |plot-grid| image:: ../../../../src/silx/resources/gui/icons/plot-grid.png
+.. |plot-roi-above| image:: ../../../../src/silx/resources/gui/icons/plot-roi-above.png
+.. |plot-roi-below| image:: ../../../../src/silx/resources/gui/icons/plot-roi-below.png
+.. |plot-roi-between| image:: ../../../../src/silx/resources/gui/icons/plot-roi-between.png
+.. |plot-roi-reset| image:: ../../../../src/silx/resources/gui/icons/plot-roi-reset.png
+.. |plot-roi| image:: ../../../../src/silx/resources/gui/icons/plot-roi.png
+.. |plot-symbols| image:: ../../../../src/silx/resources/gui/icons/plot-symbols.png
+.. |plot-toggle-points| image:: ../../../../src/silx/resources/gui/icons/plot-toggle-points.png
+.. |plot-widget| image:: ../../../../src/silx/resources/gui/icons/plot-widget.png
+.. |plot-window-image| image:: ../../../../src/silx/resources/gui/icons/plot-window-image.png
+.. |plot-window| image:: ../../../../src/silx/resources/gui/icons/plot-window.png
+.. |plot-xauto| image:: ../../../../src/silx/resources/gui/icons/plot-xauto.png
+.. |plot-xlog| image:: ../../../../src/silx/resources/gui/icons/plot-xlog.png
+.. |plot-yauto| image:: ../../../../src/silx/resources/gui/icons/plot-yauto.png
+.. |plot-ydown| image:: ../../../../src/silx/resources/gui/icons/plot-ydown.png
+.. |plot-ylog| image:: ../../../../src/silx/resources/gui/icons/plot-ylog.png
+.. |plot-yup| image:: ../../../../src/silx/resources/gui/icons/plot-yup.png
+.. |pointing-hand| image:: ../../../../src/silx/resources/gui/icons/pointing-hand.png
+.. |previous| image:: ../../../../src/silx/resources/gui/icons/previous.png
+.. |profile-clear| image:: ../../../../src/silx/resources/gui/icons/profile-clear.png
+.. |profile1D| image:: ../../../../src/silx/resources/gui/icons/profile1D.png
+.. |profile2D| image:: ../../../../src/silx/resources/gui/icons/profile2D.png
+.. |remove| image:: ../../../../src/silx/resources/gui/icons/remove.png
+.. |rm| image:: ../../../../src/silx/resources/gui/icons/rm.png
+.. |rotate-3d| image:: ../../../../src/silx/resources/gui/icons/rotate-3d.png
+.. |rudder| image:: ../../../../src/silx/resources/gui/icons/rudder.png
+.. |ruler| image:: ../../../../src/silx/resources/gui/icons/ruler.png
+.. |scale-auto| image:: ../../../../src/silx/resources/gui/icons/scale-auto.png
+.. |scale-fixed| image:: ../../../../src/silx/resources/gui/icons/scale-fixed.png
+.. |selected| image:: ../../../../src/silx/resources/gui/icons/selected.png
+.. |shape-circle-solid| image:: ../../../../src/silx/resources/gui/icons/shape-circle-solid.png
+.. |shape-circle| image:: ../../../../src/silx/resources/gui/icons/shape-circle.png
+.. |shape-cross| image:: ../../../../src/silx/resources/gui/icons/shape-cross.png
+.. |shape-diagonal-directed| image:: ../../../../src/silx/resources/gui/icons/shape-diagonal-directed.png
+.. |shape-diagonal| image:: ../../../../src/silx/resources/gui/icons/shape-diagonal.png
+.. |shape-ellipse-solid| image:: ../../../../src/silx/resources/gui/icons/shape-ellipse-solid.png
+.. |shape-ellipse| image:: ../../../../src/silx/resources/gui/icons/shape-ellipse.png
+.. |shape-horizontal| image:: ../../../../src/silx/resources/gui/icons/shape-horizontal.png
+.. |shape-polygon| image:: ../../../../src/silx/resources/gui/icons/shape-polygon.png
+.. |shape-rectangle| image:: ../../../../src/silx/resources/gui/icons/shape-rectangle.png
+.. |shape-square| image:: ../../../../src/silx/resources/gui/icons/shape-square.png
+.. |shape-vertical| image:: ../../../../src/silx/resources/gui/icons/shape-vertical.png
+.. |side-histograms| image:: ../../../../src/silx/resources/gui/icons/side-histograms.png
+.. |silx| image:: ../../../../src/silx/resources/gui/icons/silx.png
+.. |slice-cross| image:: ../../../../src/silx/resources/gui/icons/slice-cross.png
+.. |slice-horizontal| image:: ../../../../src/silx/resources/gui/icons/slice-horizontal.png
+.. |slice-vertical| image:: ../../../../src/silx/resources/gui/icons/slice-vertical.png
+.. |sliders-off| image:: ../../../../src/silx/resources/gui/icons/sliders-off.png
+.. |sliders-on| image:: ../../../../src/silx/resources/gui/icons/sliders-on.png
+.. |spec| image:: ../../../../src/silx/resources/gui/icons/spec.png
+.. |stats-active-items| image:: ../../../../src/silx/resources/gui/icons/stats-active-items.png
+.. |stats-visible-data| image:: ../../../../src/silx/resources/gui/icons/stats-visible-data.png
+.. |stats-whole-data| image:: ../../../../src/silx/resources/gui/icons/stats-whole-data.png
+.. |stats-whole-items| image:: ../../../../src/silx/resources/gui/icons/stats-whole-items.png
+.. |tree-collapse-all| image:: ../../../../src/silx/resources/gui/icons/tree-collapse-all.png
+.. |tree-expand-all| image:: ../../../../src/silx/resources/gui/icons/tree-expand-all.png
+.. |tree-sort| image:: ../../../../src/silx/resources/gui/icons/tree-sort.png
+.. |view-1d| image:: ../../../../src/silx/resources/gui/icons/view-1d.png
+.. |view-2d-stack| image:: ../../../../src/silx/resources/gui/icons/view-2d-stack.png
+.. |view-2d| image:: ../../../../src/silx/resources/gui/icons/view-2d.png
+.. |view-3d| image:: ../../../../src/silx/resources/gui/icons/view-3d.png
+.. |view-fullscreen| image:: ../../../../src/silx/resources/gui/icons/view-fullscreen.png
+.. |view-hdf5| image:: ../../../../src/silx/resources/gui/icons/view-hdf5.png
+.. |view-nexus| image:: ../../../../src/silx/resources/gui/icons/view-nexus.png
+.. |view-nofullscreen| image:: ../../../../src/silx/resources/gui/icons/view-nofullscreen.png
+.. |view-raw| image:: ../../../../src/silx/resources/gui/icons/view-raw.png
+.. |view-refresh| image:: ../../../../src/silx/resources/gui/icons/view-refresh.png
+.. |view-text| image:: ../../../../src/silx/resources/gui/icons/view-text.png
+.. |window-new| image:: ../../../../src/silx/resources/gui/icons/window-new.png
+.. |zoom-back| image:: ../../../../src/silx/resources/gui/icons/zoom-back.png
+.. |zoom-in| image:: ../../../../src/silx/resources/gui/icons/zoom-in.png
+.. |zoom-original| image:: ../../../../src/silx/resources/gui/icons/zoom-original.png
+.. |zoom-out| image:: ../../../../src/silx/resources/gui/icons/zoom-out.png
+.. |zoom| image:: ../../../../src/silx/resources/gui/icons/zoom.png
diff --git a/doc/source/modules/gui/plot/getting_started.rst b/doc/source/modules/gui/plot/getting_started.rst
index c105395..ead9e43 100644
--- a/doc/source/modules/gui/plot/getting_started.rst
+++ b/doc/source/modules/gui/plot/getting_started.rst
@@ -20,8 +20,6 @@ For a complete description of the API, see :mod:`silx.gui.plot`.
Use :mod:`silx.gui.plot` from (I)Python console
-----------------------------------------------
-We recommend to use (I)Python >=3.5 and PyQt5.
-
From a Python or IPython interpreter, the simplest way is to import the :mod:`silx.sx` module:
>>> from silx import sx
@@ -87,9 +85,9 @@ A Qt GUI script must have a QApplication initialised before creating widgets:
if __name__ == '__main__':
[...]
- qapp.exec_()
+ qapp.exec()
-Unless a Qt binding has already been loaded, :mod:`silx.gui.qt` uses one of the supported Qt bindings (PyQt5, PyQt4, PySide2).
+Unless a Qt binding has already been loaded, :mod:`silx.gui.qt` uses one of the supported Qt bindings (PyQt5, PySide6, PyQt6).
If you prefer to choose the Qt binding yourself, import it before importing
a module from :mod:`silx.gui`:
diff --git a/doc/source/modules/gui/plot/img/BasicGridStatsWidget.png b/doc/source/modules/gui/plot/img/BasicGridStatsWidget.png
index 261909a..a468cc1 100644
--- a/doc/source/modules/gui/plot/img/BasicGridStatsWidget.png
+++ b/doc/source/modules/gui/plot/img/BasicGridStatsWidget.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/BasicStatsWidget.png b/doc/source/modules/gui/plot/img/BasicStatsWidget.png
index b0d815d..6dbdd30 100644
--- a/doc/source/modules/gui/plot/img/BasicStatsWidget.png
+++ b/doc/source/modules/gui/plot/img/BasicStatsWidget.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/LimitsToolBar.png b/doc/source/modules/gui/plot/img/LimitsToolBar.png
index b360fe0..2d96458 100644
--- a/doc/source/modules/gui/plot/img/LimitsToolBar.png
+++ b/doc/source/modules/gui/plot/img/LimitsToolBar.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/ROIStatsWidget.png b/doc/source/modules/gui/plot/img/ROIStatsWidget.png
index 7a634fe..fae9d62 100644
--- a/doc/source/modules/gui/plot/img/ROIStatsWidget.png
+++ b/doc/source/modules/gui/plot/img/ROIStatsWidget.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/img/logColorbar.png b/doc/source/modules/gui/plot/img/logColorbar.png
index 49282e7..31594e0 100644
--- a/doc/source/modules/gui/plot/img/logColorbar.png
+++ b/doc/source/modules/gui/plot/img/logColorbar.png
Binary files differ
diff --git a/doc/source/modules/gui/plot/items.rst b/doc/source/modules/gui/plot/items.rst
index 43eb77e..2b2985b 100644
--- a/doc/source/modules/gui/plot/items.rst
+++ b/doc/source/modules/gui/plot/items.rst
@@ -118,3 +118,34 @@ Axis
.. automodule:: silx.gui.plot.items.roi
:members:
+ :show-inheritance:
+
+ .. autoclass:: silx.gui.plot.items.roi.ArcROI
+ :members:
+ :show-inheritance:
+
+ .. autoclass:: silx.gui.plot.items.roi.BandROI
+ :members:
+ :show-inheritance:
+
+
+Base class for regions of interest
+++++++++++++++++++++++++++++++++++
+
+.. autoclass:: silx.gui.plot.items._roi_base._RegionOfInterestBase
+ :members:
+ :show-inheritance:
+
+.. autoclass:: silx.gui.plot.items.roi.RegionOfInterest
+ :members:
+ :show-inheritance:
+
+.. autoclass:: silx.gui.plot.items.roi.HandleBasedROI
+ :members:
+ :show-inheritance:
+
+.. autoclass:: silx.gui.plot.items.roi.InteractionModeMixIn
+ :members:
+
+.. autoclass:: silx.gui.plot.items.roi.RoiInteractionMode
+ :members:
diff --git a/doc/source/modules/gui/plot/plotsignal.rst b/doc/source/modules/gui/plot/plotsignal.rst
index 091f481..641b0ef 100644
--- a/doc/source/modules/gui/plot/plotsignal.rst
+++ b/doc/source/modules/gui/plot/plotsignal.rst
@@ -91,6 +91,7 @@ Both share the following keys:
- 'event': 'curveClicked' or 'imageClicked'
- 'button': the mouse button that was pressed in 'left', 'middle', 'right'
+- 'item': The plot item object that was clicked
- 'label': The legend associated with the clicked image or curve
- 'type': The type of item in 'curve', 'image'
- 'x' and 'y': The clicked position in data coordinates
diff --git a/doc/source/modules/gui/plot/plotwidget.rst b/doc/source/modules/gui/plot/plotwidget.rst
index d16c4ab..05dd77c 100644
--- a/doc/source/modules/gui/plot/plotwidget.rst
+++ b/doc/source/modules/gui/plot/plotwidget.rst
@@ -115,6 +115,7 @@ Interaction
Those methods allow to change the interaction mode (e.g., drawing mode)
of the plot and to toggle the use of a crosshair cursor:
+.. automethod:: PlotWidget.interaction
.. automethod:: PlotWidget.getInteractiveMode
.. automethod:: PlotWidget.setInteractiveMode
diff --git a/doc/source/modules/gui/plot3d/img/SceneWidget.png b/doc/source/modules/gui/plot3d/img/SceneWidget.png
index 4ddc0a8..7ad6de4 100644
--- a/doc/source/modules/gui/plot3d/img/SceneWidget.png
+++ b/doc/source/modules/gui/plot3d/img/SceneWidget.png
Binary files differ
diff --git a/doc/source/modules/gui/plot3d/items.rst b/doc/source/modules/gui/plot3d/items.rst
index 5c4884f..ba39336 100644
--- a/doc/source/modules/gui/plot3d/items.rst
+++ b/doc/source/modules/gui/plot3d/items.rst
@@ -112,6 +112,29 @@ The following classes allows to configure :class:`ScalarField3D` visualization:
getParameters, setParameters,
getDisplayValuesBelowMin, setDisplayValuesBelowMin
+Height map
+----------
+
+.. currentmodule:: silx.gui.plot3d.items.image
+
+:class:`HeightMapData`
+++++++++++++++++++++++
+
+:class:`HeightMapData` inherits from :class:`.DataItem3D` and also provides its API.
+
+.. autoclass:: HeightMapData
+ :members: getData, setData,
+ getColormappedData, setColormappedData
+
+:class:`HeightMapRGBA`
+++++++++++++++++++++++
+
+:class:`HeightMapRGBA` inherits from :class:`.DataItem3D` and also provides its API.
+
+.. autoclass:: HeightMapRGBA
+ :members: getData, setData,
+ getColorData, setColorData
+
Clipping plane
--------------
diff --git a/doc/source/modules/gui/widgets/img/FrameBrowser.png b/doc/source/modules/gui/widgets/img/FrameBrowser.png
index 1d4ebcf..6f46631 100644
--- a/doc/source/modules/gui/widgets/img/FrameBrowser.png
+++ b/doc/source/modules/gui/widgets/img/FrameBrowser.png
Binary files differ
diff --git a/doc/source/modules/gui/widgets/img/HorizontalSliderWithBrowser.png b/doc/source/modules/gui/widgets/img/HorizontalSliderWithBrowser.png
index 96edd3c..13a4ddf 100644
--- a/doc/source/modules/gui/widgets/img/HorizontalSliderWithBrowser.png
+++ b/doc/source/modules/gui/widgets/img/HorizontalSliderWithBrowser.png
Binary files differ
diff --git a/doc/source/modules/gui/widgets/img/PeriodicCombo.png b/doc/source/modules/gui/widgets/img/PeriodicCombo.png
index 7534805..bec3a78 100644
--- a/doc/source/modules/gui/widgets/img/PeriodicCombo.png
+++ b/doc/source/modules/gui/widgets/img/PeriodicCombo.png
Binary files differ
diff --git a/doc/source/modules/gui/widgets/img/PeriodicList.png b/doc/source/modules/gui/widgets/img/PeriodicList.png
index 74ce7d6..a695525 100644
--- a/doc/source/modules/gui/widgets/img/PeriodicList.png
+++ b/doc/source/modules/gui/widgets/img/PeriodicList.png
Binary files differ
diff --git a/doc/source/modules/gui/widgets/img/PeriodicTable.png b/doc/source/modules/gui/widgets/img/PeriodicTable.png
index bada39a..70039ab 100644
--- a/doc/source/modules/gui/widgets/img/PeriodicTable.png
+++ b/doc/source/modules/gui/widgets/img/PeriodicTable.png
Binary files differ
diff --git a/doc/source/modules/gui/widgets/img/RangeSlider.png b/doc/source/modules/gui/widgets/img/RangeSlider.png
index e7a1011..f552fb3 100644
--- a/doc/source/modules/gui/widgets/img/RangeSlider.png
+++ b/doc/source/modules/gui/widgets/img/RangeSlider.png
Binary files differ
diff --git a/doc/source/modules/gui/widgets/img/TableWidget.png b/doc/source/modules/gui/widgets/img/TableWidget.png
index a614ae7..959af57 100644
--- a/doc/source/modules/gui/widgets/img/TableWidget.png
+++ b/doc/source/modules/gui/widgets/img/TableWidget.png
Binary files differ
diff --git a/doc/source/modules/gui/widgets/img/ThreadPoolPushButton.png b/doc/source/modules/gui/widgets/img/ThreadPoolPushButton.png
index eb55b14..5d1af4c 100644
--- a/doc/source/modules/gui/widgets/img/ThreadPoolPushButton.png
+++ b/doc/source/modules/gui/widgets/img/ThreadPoolPushButton.png
Binary files differ
diff --git a/doc/source/modules/gui/widgets/img/WaitingPushButton.png b/doc/source/modules/gui/widgets/img/WaitingPushButton.png
index 97bd14a..5bfcdb8 100644
--- a/doc/source/modules/gui/widgets/img/WaitingPushButton.png
+++ b/doc/source/modules/gui/widgets/img/WaitingPushButton.png
Binary files differ
diff --git a/doc/source/modules/gui/widgets/printpreview.rst b/doc/source/modules/gui/widgets/printpreview.rst
index d0b7999..bff2381 100644
--- a/doc/source/modules/gui/widgets/printpreview.rst
+++ b/doc/source/modules/gui/widgets/printpreview.rst
@@ -56,5 +56,5 @@ Example
commentPosition="CENTER")
w.addImage(qt.QImage(filename), comment=comment, commentPosition="LEFT")
- w.exec_()
- a.exec_()
+ w.exec()
+ a.exec()
diff --git a/doc/source/modules/index.rst b/doc/source/modules/index.rst
index b6e0036..2845d3f 100644
--- a/doc/source/modules/index.rst
+++ b/doc/source/modules/index.rst
@@ -1,3 +1,5 @@
+.. _API Reference:
+
API Reference
=============
diff --git a/doc/source/modules/io/commonh5.rst b/doc/source/modules/io/commonh5.rst
new file mode 100644
index 0000000..9e62ccd
--- /dev/null
+++ b/doc/source/modules/io/commonh5.rst
@@ -0,0 +1,28 @@
+. currentmodule:: silx.io
+
+:mod:`commonh5`: Helpers for writing h5py-like API
+--------------------------------------------------
+
+.. automodule:: silx.io.commonh5
+
+Classes
++++++++
+
+.. autoclass:: Node
+ :members:
+
+.. autoclass:: File
+ :show-inheritance:
+ :members:
+
+.. autoclass:: Group
+ :show-inheritance:
+ :undoc-members:
+ :members: name, basename, file, attrs, h5py_class, parent,
+ get, keys, values, items, visit, visititems
+ :special-members: __getitem__, __len__, __contains__, __iter__
+ :exclude-members: add_node
+
+.. autoclass:: Dataset
+ :show-inheritance:
+ :members:
diff --git a/doc/source/modules/io/fioh5.rst b/doc/source/modules/io/fioh5.rst
new file mode 100644
index 0000000..99498de
--- /dev/null
+++ b/doc/source/modules/io/fioh5.rst
@@ -0,0 +1,27 @@
+
+.. currentmodule:: silx.io
+
+:mod:`fioh5`: h5py-like API to FIO file
+----------------------------------------
+
+.. automodule:: silx.io.fioh5
+
+
+Classes
++++++++
+
+- :class:`FioH5`
+- :class:`FioFile`
+
+.. autoclass:: FioH5
+ :members:
+ :show-inheritance:
+ :undoc-members:
+ :inherited-members: name, basename, attrs, h5py_class, parent,
+ get, keys, values, items,
+ :special-members: __getitem__, __len__, __contains__, __enter__, __exit__, __iter__
+ :exclude-members: add_node
+
+.. autoclass:: FioFile
+
+.. autofunction:: is_fiofile \ No newline at end of file
diff --git a/doc/source/modules/io/h5py_utils.rst b/doc/source/modules/io/h5py_utils.rst
new file mode 100644
index 0000000..b6461b1
--- /dev/null
+++ b/doc/source/modules/io/h5py_utils.rst
@@ -0,0 +1,8 @@
+
+.. currentmodule:: silx.io
+
+:mod:`h5py_utils`: HDF5 I/O utilities
+-------------------------------------
+
+.. automodule:: silx.io.h5py_utils
+ :members:
diff --git a/doc/source/modules/io/index.rst b/doc/source/modules/io/index.rst
index b504695..b69a760 100644
--- a/doc/source/modules/io/index.rst
+++ b/doc/source/modules/io/index.rst
@@ -7,7 +7,8 @@
.. toctree::
:maxdepth: 1
-
+
+ commonh5.rst
configdict.rst
convert.rst
dictdump.rst
@@ -16,8 +17,10 @@
specfile.rst
specfilewrapper.rst
spech5.rst
+ fioh5.rst
url.rst
utils.rst
+ h5py_utils.rst
Top-level functions
-------------------
diff --git a/doc/source/modules/io/spech5.rst b/doc/source/modules/io/spech5.rst
index 61e0083..a9b8456 100644
--- a/doc/source/modules/io/spech5.rst
+++ b/doc/source/modules/io/spech5.rst
@@ -26,14 +26,6 @@ Classes
.. autoclass:: SpecH5Group
:show-inheritance:
-.. autoclass:: silx.io.commonh5.Group
- :show-inheritance:
- :undoc-members:
- :members: name, basename, file, attrs, h5py_class, parent,
- get, keys, values, items, visit, visititems
- :special-members: __getitem__, __len__, __contains__, __iter__
- :exclude-members: add_node
-
.. autoclass:: SpecH5Dataset
:show-inheritance:
diff --git a/doc/source/modules/math/fit/functions.rst b/doc/source/modules/math/fit/functions.rst
index f354964..9f0f092 100644
--- a/doc/source/modules/math/fit/functions.rst
+++ b/doc/source/modules/math/fit/functions.rst
@@ -21,6 +21,7 @@ Fit functions
.. autofunction:: silx.math.fit.sum_splitgauss
.. autofunction:: silx.math.fit.sum_splitlorentz
.. autofunction:: silx.math.fit.sum_splitpvoigt
+.. autofunction:: silx.math.fit.sum_splitpvoigt2
.. autofunction:: silx.math.fit.sum_stepdown
.. autofunction:: silx.math.fit.sum_stepup
diff --git a/doc/source/modules/utils/html.rst b/doc/source/modules/utils/html.rst
deleted file mode 100644
index 1e590f4..0000000
--- a/doc/source/modules/utils/html.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-.. currentmodule:: silx.utils
-
-:mod:`html`
------------
-
-.. automodule:: silx.utils.html
- :members:
diff --git a/doc/source/modules/utils/index.rst b/doc/source/modules/utils/index.rst
index 7dd10dd..ae07deb 100644
--- a/doc/source/modules/utils/index.rst
+++ b/doc/source/modules/utils/index.rst
@@ -6,6 +6,6 @@
array_like.rst
decorators.rst
- html.rst
testutils.rst
weakref.rst
+ retry.rst
diff --git a/doc/source/modules/utils/retry.rst b/doc/source/modules/utils/retry.rst
new file mode 100644
index 0000000..e176bc0
--- /dev/null
+++ b/doc/source/modules/utils/retry.rst
@@ -0,0 +1,7 @@
+.. currentmodule:: silx.utils
+
+:mod:`weakref`
+---------------
+
+.. automodule:: silx.utils.retry
+ :members: \ No newline at end of file
diff --git a/doc/source/overview.rst b/doc/source/overview.rst
index 93db23a..729bdec 100644
--- a/doc/source/overview.rst
+++ b/doc/source/overview.rst
@@ -5,21 +5,24 @@ Releases
--------
Source code, pre-built binaries (aka Python wheels) for Windows, MacOS and
-ManyLinux1.
-Debian packages of released versions are made available in the following places:
+ManyLinux, Debian/Ubuntu packages of released versions are made available in the following places:
-- `Wheels and source code on PyPi <https://pypi.python.org/pypi/silx>`_
-- `Debian 9 packages <http://www.silx.org/pub/debian/>`_
+- `Wheels and source code on PyPi <https://pypi.org/project/silx/>`_
+- `Conda package on conda-forge channel <https://anaconda.org/conda-forge/silx>`_
+- Windows application installer `on github release page <https://github.com/silx-kit/silx/releases/latest/>`_ (available in the `Assets` at the bottom).
- `Documentation on silx.org <http://www.silx.org/doc/silx/latest/>`_
+- `Unofficial Debian/Ubuntu packages <https://github.com/silx-kit/silx/releases/latest>`_
- :doc:`changelog`
+|release| |version|
+
Nightly builds
--------------
-Debian 9 packages and documentation are automatically generated from the tip of
-the project's repository on a daily basis:
+Linux packages and documentation are automatically generated from the tip of the project's repository on a regular basis:
-- `Debian 9 packages <http://www.silx.org/pub/debian/>`_
+- `Debian 10 and Ubuntu20.04 packages <http://www.silx.org/pub/linux-repo/>`_
+- `Wheels and Windows application <https://silx.gitlab-pages.esrf.fr/bob/silx/>`_
- `Documentation <http://www.silx.org/doc/silx/dev/>`_
Project
@@ -36,12 +39,12 @@ Project
- Continuous integration: *silx* is continuously tested on all three major
operating systems:
- - Linux and MacOS X: `Travis <https://travis-ci.org/silx-kit/silx>`_
+ - Linux, MacOS, Windows: `GitHub Actions <https://github.com/silx-kit/silx/actions>`_
- Windows: `AppVeyor <https://ci.appveyor.com/project/ESRF/silx>`_
Additional Material
-------------------
-- Code Camp Talks. *silx* follows a quarterly release cycle. Prior to each release, a code camp takes place in which the novelties are presented and interested users make use of the development version in order to spot bugs or missing features. The `PDFs of the talks are available for download <http://ftp.esrf.fr/pub/scisoft/silx/talks/>`_
+- Code Camp held before releases: `The PDFs of the talks are available for download <http://ftp.esrf.fr/pub/scisoft/silx/talks/>`_
diff --git a/doc/source/sample_code/img/compareBackends.png b/doc/source/sample_code/img/compareBackends.png
new file mode 100644
index 0000000..93dd6b4
--- /dev/null
+++ b/doc/source/sample_code/img/compareBackends.png
Binary files differ
diff --git a/doc/source/sample_code/img/compositeline.png b/doc/source/sample_code/img/compositeline.png
deleted file mode 100644
index 8950286..0000000
--- a/doc/source/sample_code/img/compositeline.png
+++ /dev/null
Binary files differ
diff --git a/doc/source/sample_code/img/floatedit.png b/doc/source/sample_code/img/floatedit.png
new file mode 100644
index 0000000..075c4a0
--- /dev/null
+++ b/doc/source/sample_code/img/floatedit.png
Binary files differ
diff --git a/doc/source/sample_code/img/plotUpdateImageFromGevent.png b/doc/source/sample_code/img/plotUpdateImageFromGevent.png
new file mode 100644
index 0000000..c0caec3
--- /dev/null
+++ b/doc/source/sample_code/img/plotUpdateImageFromGevent.png
Binary files differ
diff --git a/doc/source/sample_code/img/stackedprogressbar.png b/doc/source/sample_code/img/stackedprogressbar.png
new file mode 100644
index 0000000..cc88cfe
--- /dev/null
+++ b/doc/source/sample_code/img/stackedprogressbar.png
Binary files differ
diff --git a/doc/source/sample_code/img/waiterOverlay.png b/doc/source/sample_code/img/waiterOverlay.png
new file mode 100644
index 0000000..2166246
--- /dev/null
+++ b/doc/source/sample_code/img/waiterOverlay.png
Binary files differ
diff --git a/doc/source/sample_code/index.rst b/doc/source/sample_code/index.rst
index 0aade4c..2bbfc29 100644
--- a/doc/source/sample_code/index.rst
+++ b/doc/source/sample_code/index.rst
@@ -343,6 +343,10 @@ Sample code that illustrates some functionalities of :class:`~silx.gui.plot.Plot
In this example a thread calls submitToQtMainThread to update the curve
of a plot.
+ * - :download:`plotUpdateImageFromGevent.py <../../../examples/plotUpdateImageFromGevent.py>`
+ - .. image:: img/plotUpdateImageFromGevent.png
+ :width: 150px
+ - This script illustrates the update of a :class:`~silx.gui.plot.Plot2D` widget from a gevent coroutine.
* - :download:`plotUpdateImageFromThread.py <../../../examples/plotUpdateImageFromThread.py>`
- .. image:: img/plotUpdateImageFromThread.png
:width: 150px
@@ -361,10 +365,6 @@ Sample code that illustrates some functionalities of :class:`~silx.gui.plot.Plot
:width: 150px
- This script is an example to illustrate how to use axis synchronization
tool.
- * - :download:`compositeline.py <../../../examples/compositeline.py>`
- - .. image:: img/compositeline.png
- :width: 150px
- - Example to show the use of markers to draw head and tail of lines.
* - :download:`dropZones.py <../../../examples/dropZones.py>`
- .. image:: img/dropZones.png
:width: 150px
@@ -382,6 +382,10 @@ Sample code that illustrates some functionalities of :class:`~silx.gui.plot.Plot
:width: 150px
- This script is an example to illustrate how to use axis synchronization
tool.
+ * - :download:`compareBackends.py <../../../examples/compareBackends.py>`
+ - .. image:: img/compareBackends.png
+ :width: 150px
+ - This script compares the rendering of PlotWidget's matplotlib and OpenGL backends.
.. _plot3d-sample-code:
@@ -445,6 +449,28 @@ Sample code that illustrates some functionalities of :class:`~silx.gui.plot.Plot
an interactive cutting plane.
It can also be started without providing a file.
+:mod:`silx.gui.widgets` sample code
++++++++++++++++++++++++++++++++++++
+
+.. list-table::
+ :widths: 1 1 4
+ :header-rows: 1
+
+ * - Source
+ - Screenshot
+ - Description
+ * - :download:`floatedit.py <../../../examples/floatedit.py>`
+ - .. image:: img/floatedit.png
+ :width: 150px
+ - This script illustrates the use of :class:`silx.gui.widgets.FloatEdit.FloatEdit`.
+ * - :download:`stackedprogressbar.py <../../../examples/stackedprogressbar.py>`
+ - .. image:: img/stackedprogressbar.png
+ :width: 150px
+ - This script illustrates the use of :class:`silx.gui.widgets.StackedProgressBar.StackedProgressBar`.
+ * - :download:`waiterOverlay.py <../../../examples/waiterOverlay.py>`
+ - .. image:: img/waiterOverlay.png
+ :width: 150px
+ - Demonstration window that displays a wait icon until the plot is updated.
:mod:`silx.io` sample code
++++++++++++++++++++++++++
diff --git a/doc/source/tutorials.rst b/doc/source/tutorials.rst
index cda7855..17d5eb0 100644
--- a/doc/source/tutorials.rst
+++ b/doc/source/tutorials.rst
@@ -1,5 +1,5 @@
-Tutorials and sample code
-=========================
+Tutorials & Sample Code
+=======================
Tutorials and cookbooks:
@@ -11,6 +11,7 @@ Tutorials and cookbooks:
modules/gui/designer.rst
Tutorials/Image
Tutorials/Sift/sift
+ Tutorials/codec/Bitshuffle-LZ4.ipynb
Tutorials/io.rst
Tutorials/convert.rst
Tutorials/specfile_to_hdf5.rst
diff --git a/doc/source/user_guide.rst b/doc/source/user_guide.rst
new file mode 100644
index 0000000..3cb91b7
--- /dev/null
+++ b/doc/source/user_guide.rst
@@ -0,0 +1,87 @@
+User Guide
+==========
+
+
+.. |silxView| image:: http://www.silx.org/doc/silx/img/silx-view-v1-0.gif
+ :height: 80px
+
+The silx project aims to provide a collection of Python packages to support the
+development of data assessment, reduction and analysis at synchrotron radiation
+facilities.
+It intends to provide reading/writing tools for different file formats, data
+reduction routines and a set of Qt widgets to browse and visualise data.
+Silx can be cited by its DOIs referenced on
+`Zenodo <https://doi.org/10.5281/zenodo.591709>`_.
+
+The current version (v\ |version|) caters for:
+
+* Supporting `HDF5 <https://www.hdfgroup.org/HDF5/>`_,
+ `SPEC <https://certif.com/spec.html>`_ and
+ `FabIO <http://www.silx.org/doc/fabio/dev/getting_started.html#list-of-file-formats-that-fabio-can-read-and-write>`_
+ images file formats.
+* OpenCL-based data processing: image alignment (SIFT),
+ image processing (median filter, histogram),
+ filtered backprojection for tomography
+* Data reduction: histogramming, fitting, median filter
+* A set of Qt widgets, including:
+
+ * 1D and 2D visualization widgets with a set of associated tools using multiple backends (matplotlib or OpenGL)
+ * OpenGL-based widgets to visualize data in 3D (scalar field with isosurface and cut plane, scatter plot)
+ * a unified browser for HDF5, SPEC and image file formats supporting inspection and
+ visualization of n-dimensional datasets.
+
+* a set of applications:
+
+ * a unified viewer (:ref:`silx view` *filename*) for HDF5, SPEC and image file formats
+
+ |silxView|
+
+ * a unified converter to HDF5 format (*silx convert filename*)
+
+
+.. toctree::
+ :hidden:
+
+ overview.rst
+ install.rst
+ description/index.rst
+ license.rst
+ virtualenv.rst
+ troubleshooting.rst
+
+:doc:`overview`
+ Releases, repository, issue tracker, mailing list, ...
+
+:doc:`install`
+ How to install *silx* on Linux, Windows and MacOS X
+
+:doc:`description/index`
+ Description of the different algorithms and their implementation
+
+:doc:`tutorials`
+ Tutorials and sample code
+
+:doc:`modules/index`
+ Documentation of the packages included in *silx*
+
+:doc:`applications/index`
+ Documentation of the applications provided by *silx*
+
+:doc:`modules/gui/gallery`
+ Widgets gallery and screenshots
+
+:doc:`changelog`
+ List of changes between releases
+
+:doc:`license`
+ License and copyright information
+
+:doc:`troubleshooting`
+ When things do not work as expected
+
+
+Indices
+=======
+
+* :ref:`modindex`
+* :ref:`genindex`
diff --git a/doc/source/virtualenv.rst b/doc/source/virtualenv.rst
index ccdd9b6..6f64d5b 100644
--- a/doc/source/virtualenv.rst
+++ b/doc/source/virtualenv.rst
@@ -12,7 +12,7 @@ Prerequisites
This guide assumes that your system meets the following requirements:
- - a version of python compatible with *silx* is installed (Python >= 3.5)
+ - a version of python compatible with *silx* is installed
- the *pip* installer for python packages is installed
Installation procedure
@@ -54,11 +54,11 @@ Virtual environments are created using a builtin standard library, ``venv`` (Pyt
``--system-site-packages``
To use a different python interpreter, use it to create the virtual environment.
-For example, to use python 3.5:
+For example, to use python 3.10:
.. code-block:: bash
- /usr/bin/python3.5 -m venv silx_venv
+ /usr/bin/python3.10 -m venv silx_venv
Activate a virtualenv
@@ -132,7 +132,7 @@ To test *silx*, open an interactive python console:
python
-If you don't have PyQt5 or PySide2, run:
+If you don't have PyQt5, PySide6 or PyQt6, run:
.. code-block:: bash