From 0a2e8134f300e99c126e55b5593842b321093dcf Mon Sep 17 00:00:00 2001 From: Franck Thollard <franck.thollard@univ-grenoble-alpes.fr> Date: Thu, 23 May 2024 15:10:46 +0200 Subject: [PATCH] setup env --- AUTHORS.rst | 30 +++++++ doc/changes.rst | 71 +++++++++++++++ doc/conf.py | 176 +++++++++++++++++++++++++++++++++++++ doc/contacts.rst | 13 +++ doc/funding.rst | 7 ++ doc/index.rst | 20 +++++ doc/installation.rst | 81 +++++++++++++++++ doc/modules.rst | 6 ++ doc/supported.rst | 10 +++ doc/test.rst | 19 ++++ images/logo-uga.png | Bin 0 -> 8306 bytes images/logo_cnrs_small.png | Bin 0 -> 7279 bytes rringg/version.py | 1 + 13 files changed, 434 insertions(+) create mode 100644 AUTHORS.rst create mode 100644 doc/changes.rst create mode 100644 doc/conf.py create mode 100644 doc/contacts.rst create mode 100644 doc/funding.rst create mode 100644 doc/index.rst create mode 100755 doc/installation.rst create mode 100644 doc/modules.rst create mode 100644 doc/supported.rst create mode 100644 doc/test.rst create mode 100644 images/logo-uga.png create mode 100644 images/logo_cnrs_small.png create mode 100644 rringg/version.py diff --git a/AUTHORS.rst b/AUTHORS.rst new file mode 100644 index 0000000..1c445c1 --- /dev/null +++ b/AUTHORS.rst @@ -0,0 +1,30 @@ +Contributors +============ + +Here are a list of people that work, or have worked, on RRIINGG + +* UGA stands for University Grenoble Alpes (https://www.univ-grenoble-alpes.fr/). +* ISTerre stands for Institut des Sciences de la Terre (https://www.isterre.fr). + +Current contributors +-------------------- + +Alphabetic order of last name : + +* Aubin Bleriot Tsapong Tsague (ISTERRE/UGA), aubin-bleriot.tsapong-tsague@univ-grenoble-alpes.fr +* Marie-Pierre Doin (ISTERRE/CNRS) marie-pierre.doin@univ-grenoble-alpes.fr +* Gaƫl Janex (ISTERRE/CNRS) gael.janex@univ-grenoble-alpes.fr +* Erwan Pathier (ISTERRE/UGA) erwan.pathier@univ-grenoble-alpes.fr +* Anne Socquet (ISTERRE/UGA) anne.socquet@univ-grenoble-alpes.fr +* Franck Thollard (ISTERRE/CNRS) franck.thollard@univ-grenoble-alpes.fr + +Former contributors +------------------- + +Nop + +Contact +------- + +Anne Socquet (ISTERRE/UGA) anne.socquet@univ-grenoble-alpes.fr + diff --git a/doc/changes.rst b/doc/changes.rst new file mode 100644 index 0000000..a6f8732 --- /dev/null +++ b/doc/changes.rst @@ -0,0 +1,71 @@ +============= +Release Notes +============= + +1.0.4 (2023-03-13) +------------------ + +New +``` + +- new colour gradients (from Crameri et al., see Doc) +- Clear Reference button +- keyboard shortcuts + tooltips on profiling tools +- autorange histogram to 5/95th percentiles (button in toolbar and in context menu) +- Map toolbar with 2 buttons: + * Flip Map Vertically feature + * Save Map to export map view + assoc. colorbar to image files (multiple formats available) ('#75 <https://gricad-gitlab.univ-grenoble-alpes.fr/deformvis/insarviz/-/issues/75>) + +- Menu entry to save all figures to repository (multiple formats available) ('#75 <https://gricad-gitlab.univ-grenoble-alpes.fr/deformvis/insarviz/-/issues/75>) +- support VRT (GDAL Virtual Format) loading ('#73 <https://gricad-gitlab.univ-grenoble-alpes.fr/deformvis/insarviz/-/issues/73>) + VRT building script (see Doc) +- pypi packaging + + +Fixed +````` +- colour display bug on Linux/Windows (discretisation) +- reference display on Linux/Windows ('#70 <https://gricad-gitlab.univ-grenoble-alpes.fr/deformvis/insarviz/-/issues/70>) +- plot ranges remain when clicking points +- jump to image 99 upon first loading, now remains on middle image +- handle nodata absent from header +- plot bug when switching between tools +- date slider/spinbox discrepancy +- colour palette also applied to general view + + +Changed +``````` +- boundaries eased up on versions of required packages +- plot titles/descriptions outside of figures +- plot background icon +- Reference now only through Reference tool (no check button in plot window anymore) +- geotiff not flipped automatically upon loading +- LOS symbol disabled for now, needs rethinking +- Documentation updated + + + + + + +1.0.3 (2022-09-16) +------------------ + +New +``` + +- Profile tool now links two points selected by the user, and draws plots for a selection of points (regular spacing) on this profile line (`!55 <https://gricad-gitlab.univ-grenoble-alpes.fr/deformvis/insarviz/-/merge_requests/55>`_) +- Points tool now allows user to select individual points whose data are to be plotted (`!55 <https://gricad-gitlab.univ-grenoble-alpes.fr/deformvis/insarviz/-/merge_requests/55>`_) +- Reference tool: once data is plotted from Profile or Points tool, a reference point or zone (rectangle) can be selected on the Map by the user, plots will be adjusted to the reference (`!55 <https://gricad-gitlab.univ-grenoble-alpes.fr/deformvis/insarviz/-/merge_requests/55>`_) + + +Fixed +````` +- lock axes button on plots did not work on Linux (`#56 <https://gricad-gitlab.univ-grenoble-alpes.fr/deformvis/insarviz/-/issues/56>`_) +- export to csv was faulty when more than one curve on plot ('#66 <https://gricad-gitlab.univ-grenoble-alpes.fr/deformvis/insarviz/-/issues/66>) + + +Changed +``````` +- Profile tool renamed Points (see New section) +- Documentation updated \ No newline at end of file diff --git a/doc/conf.py b/doc/conf.py new file mode 100644 index 0000000..8e188ab --- /dev/null +++ b/doc/conf.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +from shutil import copyfile +import os +import rringg + +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# 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. +# +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +# copy Author file to the right place +mydir = os.path.dirname(os.path.realpath(__file__)) +copyfile(mydir + "/../AUTHORS.rst", "authors.rst") + +# -- Project information ----------------------------------------------------- +project = 'RRINGG' +# Author list +author = "ISTERRE / CNRS / UGA" +copyright = '2024 ' + author + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +release = rringg.__version__ +# The short X.Y version (keep semantic versioning) +version = release + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +needs_sphinx = '1.1' + +# 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.intersphinx', + 'sphinx.ext.coverage', + 'sphinx.ext.mathjax', + 'sphinx.ext.viewcode', + 'sphinx_rtd_theme' +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ['.rst', '.md'] + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = 'en' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = [u'_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_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_logo = "images/logo_rringg.png" + +# 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'] + + +# Add the custom.css (https://docs.readthedocs.io/en/latest/guides/adding-custom-css.html) +def setup(app): + # app.add_stylesheet('./custom.css') + app.add_css_file('./custom.css') +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'RRINGG_Documentation' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + 'papersize': 'a4paper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'rringg_rst.tex', u'RRINGG Documentation', + author, 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'rringg', u'RRINGG Documentation', + [author], 1) +] + + +# -- Extension configuration ------------------------------------------------- +# Add __init__ and class description to the doc +autoclass_content = "both" + +# -- Options for intersphinx extension --------------------------------------- + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'python': ('https://docs.python.org/', None), + 'numpy': ('http://docs.scipy.org/doc/numpy/', None), + 'scipy': ('http://docs.scipy.org/doc/scipy/reference', None)} diff --git a/doc/contacts.rst b/doc/contacts.rst new file mode 100644 index 0000000..fc81a83 --- /dev/null +++ b/doc/contacts.rst @@ -0,0 +1,13 @@ +Contacts & bug reports +====================== + +In case of problem or if you have any requests, you can contact the +the developers using the following mailing list : insarviz-sos@univ-grenoble-alpes.fr + +If you want to stay tuned you can register to the insarviz-info mailing list +by sending an email to insarviz-notification@univ-grenoble-alpes.fr with the subject + +"subscribe insarviz-notification@univ-grenoble-alpes.fr FIRST_NAME LAST_NAME" + +The traffic of this mailing list is very low (few emails per year) but let you know when new +releases are made. diff --git a/doc/funding.rst b/doc/funding.rst new file mode 100644 index 0000000..69fac03 --- /dev/null +++ b/doc/funding.rst @@ -0,0 +1,7 @@ +Funding +======= + +The InsarViz project is funded by: + +* CNES: APR CNES (https://apr.cnes.fr/) +* CNRS, in particular via the MITI section on inter-disciplinarity diff --git a/doc/index.rst b/doc/index.rst new file mode 100644 index 0000000..9bc4509 --- /dev/null +++ b/doc/index.rst @@ -0,0 +1,20 @@ +.. image:: images/logo-uga.png + :width: 30pt + +.. image:: images/logo_cnrs_small.png + :width: 30pt + +InsarViz +******** + +.. toctree:: + :maxdepth: 2 + :caption: Documentation + + installation + test + contacts + authors + funding + changes + modules diff --git a/doc/installation.rst b/doc/installation.rst new file mode 100755 index 0000000..d370539 --- /dev/null +++ b/doc/installation.rst @@ -0,0 +1,81 @@ +############ +Installation +############ + + +Recommended Python distribution +------------------------------- + +In order to run RRINGG code you will need a python distribution. We recommend the `Anaconda distribution <https://www.anaconda.com/products/individual>`_ (version 3.6 or higher). + + +Code download +------------- + +First, download the source code, typically using git: + +.. code-block :: bash + + git clone git@gricad-gitlab.univ-grenoble-alpes.fr:isterre-cycle/rringg.git + +Environment setup +----------------- + +* **With Anaconda** + +We recommend you install the RRINGG tool in a virtual environment. If you have installed the `Anaconda distribution <https://www.anaconda.com/products/individual>`_, navigate to within the top-level rringg folder and create a conda environment with the required dependencies using : + +.. code-block :: bash + + conda env create -f environment.yaml + + +And activate it: + +.. code-block :: bash + + conda activate rringg-env + +* **Without Anaconda** + +Without Anaconda, create an virtual environment, activate it and install the required packages using the following commands: + +.. code-block :: bash + + python3 -m venv venv + source venv/bin/activate + pip install -r requirements.txt + + + +Installation type +------------------ +Finally, install the rringg module within your virtual environment. If you do **not** want to modify the source code, follow the **Regular installation** instructions. If you would like to be able to **modify the code**, follow the **Developper install instructions**. + +* **Regular installation** + +Installing rringg in a virtual environment, or system-wide, is just a one-line command: + +.. code-block :: bash + + pip install . + +* **Developper installation** + +If you intend to change the source code, you should install the tool in a *editable* mode: + +.. code-block :: bash + + pip install -e . + +Test your installation +---------------------- + +You can check your installation by doing: + +.. code-block :: bash + + CODE TO RUN + +This should print the help message. If not, your install failed. + diff --git a/doc/modules.rst b/doc/modules.rst new file mode 100644 index 0000000..89c19c8 --- /dev/null +++ b/doc/modules.rst @@ -0,0 +1,6 @@ +API Reference +============= + +.. toctree:: + :maxdepth: 4 + diff --git a/doc/supported.rst b/doc/supported.rst new file mode 100644 index 0000000..36ea8fc --- /dev/null +++ b/doc/supported.rst @@ -0,0 +1,10 @@ +Supported data formats +====================== + +As of InsarViz 1.0.0, supported input data format include all `GDAL <https://gdal.org/index.html>`_ types such as: + +* NSBAS-type time series (depl_cumule and associated files) +* GeoTiffs +* VRT (Virtual Datasets): this GDAL format is a vritual dataset composed of other GDAL datasets with repositioning, and algorithms potentially applied as well as various kinds of metadata altered or added (see `documentation <https://gdal.org/drivers/raster/vrt.html>`_). For instance, you can make a VRT composed of individual displacement map files or interferograms. We provide a `script here <https://gricad-gitlab.univ-grenoble-alpes.fr/deformvis/insarviz/-/snippets/266>`_ to create a VRT. + +We are developing on a mechanism to allow users to provide a **plug-in-type loader to load other types of data**. Stay tuned! diff --git a/doc/test.rst b/doc/test.rst new file mode 100644 index 0000000..8b897d5 --- /dev/null +++ b/doc/test.rst @@ -0,0 +1,19 @@ +Running all the tests +--------------------- + +Testing can be done classically using *unittest*: + + +.. code-block :: bash + + python setup.py test + + +Another way of running test is by running *pytest*. Navigate to the main insarviz folder, and run the test with the following command: + +.. code-block :: bash + + pytest + + + diff --git a/images/logo-uga.png b/images/logo-uga.png new file mode 100644 index 0000000000000000000000000000000000000000..18789ac5e88c0a7c5057a7688859f073c10f60c5 GIT binary patch literal 8306 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 Iol`;+05Rj_xc~qF literal 0 HcmV?d00001 diff --git a/images/logo_cnrs_small.png b/images/logo_cnrs_small.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b01986cfa70df598b2448d92ccae415de71125 GIT binary patch literal 7279 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 literal 0 HcmV?d00001 diff --git a/rringg/version.py b/rringg/version.py new file mode 100644 index 0000000..f102a9c --- /dev/null +++ b/rringg/version.py @@ -0,0 +1 @@ +__version__ = "0.0.1" -- GitLab