Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
21b9d25a19 |
No files matched your search
@@ -1,12 +0,0 @@
|
|||||||
# Pamhyr .editorconfig
|
|
||||||
|
|
||||||
root = true
|
|
||||||
|
|
||||||
[*.py]
|
|
||||||
charset = utf-8
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 4
|
|
||||||
tab_width = 8
|
|
||||||
end_of_line = lf
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
insert_final_newline = true
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
### CUSTOM ###
|
### CUSTOM ###
|
||||||
|
|
||||||
*.exe
|
*.exe
|
||||||
*.msi
|
|
||||||
*.tar.xz
|
*.tar.xz
|
||||||
*.zip
|
*.zip
|
||||||
*.spec
|
*.spec
|
||||||
@@ -9,47 +8,16 @@
|
|||||||
*.class
|
*.class
|
||||||
|
|
||||||
tmp
|
tmp
|
||||||
mage8
|
|
||||||
adists
|
|
||||||
|
|
||||||
*.tar
|
|
||||||
*.tar.*
|
*.tar.*
|
||||||
*.tgz
|
|
||||||
*.zip
|
*.zip
|
||||||
|
|
||||||
*.html
|
|
||||||
*.pdf
|
|
||||||
*.odt
|
|
||||||
|
|
||||||
!doc/**/*.pdf
|
|
||||||
|
|
||||||
doc/dev/images/auto_*
|
|
||||||
doc/dev/documentation.*
|
|
||||||
!doc/dev/*.org
|
|
||||||
|
|
||||||
doc/dev/images/auto_*
|
|
||||||
doc/users/documentation.*
|
|
||||||
!doc/users/*.org
|
|
||||||
|
|
||||||
TAGS
|
|
||||||
|
|
||||||
pamhyrBuild
|
pamhyrBuild
|
||||||
wine-pamhyr-build*
|
wine-pamhyr-build*
|
||||||
|
|
||||||
_PAMHYR_
|
_PAMHYR_
|
||||||
__old__
|
__old__
|
||||||
|
|
||||||
*-venv
|
|
||||||
|
|
||||||
mage8/
|
|
||||||
adists/
|
|
||||||
rubarbe/
|
|
||||||
|
|
||||||
linux/
|
|
||||||
windows/
|
|
||||||
|
|
||||||
install/
|
|
||||||
|
|
||||||
### END CUSTOM ###
|
### END CUSTOM ###
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/python
|
# Created by https://www.toptal.com/developers/gitignore/api/python
|
||||||
@@ -281,7 +249,6 @@ flycheck_*.el
|
|||||||
|
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/emacs
|
# End of https://www.toptal.com/developers/gitignore/api/emacs
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/qt
|
# Created by https://www.toptal.com/developers/gitignore/api/qt
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=qt
|
# Edit at https://www.toptal.com/developers/gitignore?templates=qt
|
||||||
|
|
||||||
@@ -342,548 +309,3 @@ compile_commands.json
|
|||||||
*_qmlcache.qrc
|
*_qmlcache.qrc
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/qt
|
# End of https://www.toptal.com/developers/gitignore/api/qt
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/latex
|
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=latex
|
|
||||||
|
|
||||||
### LaTeX ###
|
|
||||||
## Core latex/pdflatex auxiliary files:
|
|
||||||
*.aux
|
|
||||||
*.lof
|
|
||||||
*.log
|
|
||||||
*.lot
|
|
||||||
*.fls
|
|
||||||
*.out
|
|
||||||
*.toc
|
|
||||||
*.fmt
|
|
||||||
*.fot
|
|
||||||
*.cb
|
|
||||||
*.cb2
|
|
||||||
.*.lb
|
|
||||||
|
|
||||||
## Intermediate documents:
|
|
||||||
*.dvi
|
|
||||||
*.xdv
|
|
||||||
*-converted-to.*
|
|
||||||
# these rules might exclude image files for figures etc.
|
|
||||||
# *.ps
|
|
||||||
# *.eps
|
|
||||||
# *.pdf
|
|
||||||
|
|
||||||
## Generated if empty string is given at "Please type another file name for output:"
|
|
||||||
.pdf
|
|
||||||
|
|
||||||
## Bibliography auxiliary files (bibtex/biblatex/biber):
|
|
||||||
*.bbl
|
|
||||||
*.bcf
|
|
||||||
*.blg
|
|
||||||
*-blx.aux
|
|
||||||
*-blx.bib
|
|
||||||
*.run.xml
|
|
||||||
|
|
||||||
## Build tool auxiliary files:
|
|
||||||
*.fdb_latexmk
|
|
||||||
*.synctex
|
|
||||||
*.synctex(busy)
|
|
||||||
*.synctex.gz
|
|
||||||
*.synctex.gz(busy)
|
|
||||||
*.pdfsync
|
|
||||||
|
|
||||||
## Build tool directories for auxiliary files
|
|
||||||
# latexrun
|
|
||||||
latex.out/
|
|
||||||
|
|
||||||
## Auxiliary and intermediate files from other packages:
|
|
||||||
# algorithms
|
|
||||||
*.alg
|
|
||||||
*.loa
|
|
||||||
|
|
||||||
# achemso
|
|
||||||
acs-*.bib
|
|
||||||
|
|
||||||
# amsthm
|
|
||||||
*.thm
|
|
||||||
|
|
||||||
# beamer
|
|
||||||
*.nav
|
|
||||||
*.pre
|
|
||||||
*.snm
|
|
||||||
*.vrb
|
|
||||||
|
|
||||||
# changes
|
|
||||||
*.soc
|
|
||||||
|
|
||||||
# comment
|
|
||||||
*.cut
|
|
||||||
|
|
||||||
# cprotect
|
|
||||||
*.cpt
|
|
||||||
|
|
||||||
# elsarticle (documentclass of Elsevier journals)
|
|
||||||
*.spl
|
|
||||||
|
|
||||||
# endnotes
|
|
||||||
*.ent
|
|
||||||
|
|
||||||
# fixme
|
|
||||||
*.lox
|
|
||||||
|
|
||||||
# feynmf/feynmp
|
|
||||||
*.mf
|
|
||||||
*.mp
|
|
||||||
*.t[1-9]
|
|
||||||
*.t[1-9][0-9]
|
|
||||||
*.tfm
|
|
||||||
|
|
||||||
#(r)(e)ledmac/(r)(e)ledpar
|
|
||||||
*.end
|
|
||||||
*.?end
|
|
||||||
*.[1-9]
|
|
||||||
*.[1-9][0-9]
|
|
||||||
*.[1-9][0-9][0-9]
|
|
||||||
*.[1-9]R
|
|
||||||
*.[1-9][0-9]R
|
|
||||||
*.[1-9][0-9][0-9]R
|
|
||||||
*.eledsec[1-9]
|
|
||||||
*.eledsec[1-9]R
|
|
||||||
*.eledsec[1-9][0-9]
|
|
||||||
*.eledsec[1-9][0-9]R
|
|
||||||
*.eledsec[1-9][0-9][0-9]
|
|
||||||
*.eledsec[1-9][0-9][0-9]R
|
|
||||||
|
|
||||||
# glossaries
|
|
||||||
*.acn
|
|
||||||
*.acr
|
|
||||||
*.glg
|
|
||||||
*.glo
|
|
||||||
*.gls
|
|
||||||
*.glsdefs
|
|
||||||
*.lzo
|
|
||||||
*.lzs
|
|
||||||
*.slg
|
|
||||||
*.slo
|
|
||||||
*.sls
|
|
||||||
|
|
||||||
# uncomment this for glossaries-extra (will ignore makeindex's style files!)
|
|
||||||
# *.ist
|
|
||||||
|
|
||||||
# gnuplot
|
|
||||||
*.gnuplot
|
|
||||||
*.table
|
|
||||||
|
|
||||||
# gnuplottex
|
|
||||||
*-gnuplottex-*
|
|
||||||
|
|
||||||
# gregoriotex
|
|
||||||
*.gaux
|
|
||||||
*.glog
|
|
||||||
*.gtex
|
|
||||||
|
|
||||||
# htlatex
|
|
||||||
*.4ct
|
|
||||||
*.4tc
|
|
||||||
*.idv
|
|
||||||
*.lg
|
|
||||||
*.trc
|
|
||||||
*.xref
|
|
||||||
|
|
||||||
# hyperref
|
|
||||||
*.brf
|
|
||||||
|
|
||||||
# knitr
|
|
||||||
*-concordance.tex
|
|
||||||
# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files
|
|
||||||
# *.tikz
|
|
||||||
*-tikzDictionary
|
|
||||||
|
|
||||||
# listings
|
|
||||||
*.lol
|
|
||||||
|
|
||||||
# luatexja-ruby
|
|
||||||
*.ltjruby
|
|
||||||
|
|
||||||
# makeidx
|
|
||||||
*.idx
|
|
||||||
*.ilg
|
|
||||||
*.ind
|
|
||||||
|
|
||||||
# minitoc
|
|
||||||
*.maf
|
|
||||||
*.mlf
|
|
||||||
*.mlt
|
|
||||||
*.mtc[0-9]*
|
|
||||||
*.slf[0-9]*
|
|
||||||
*.slt[0-9]*
|
|
||||||
*.stc[0-9]*
|
|
||||||
|
|
||||||
# minted
|
|
||||||
_minted*
|
|
||||||
*.pyg
|
|
||||||
|
|
||||||
# morewrites
|
|
||||||
*.mw
|
|
||||||
|
|
||||||
# newpax
|
|
||||||
*.newpax
|
|
||||||
|
|
||||||
# nomencl
|
|
||||||
*.nlg
|
|
||||||
*.nlo
|
|
||||||
*.nls
|
|
||||||
|
|
||||||
# pax
|
|
||||||
*.pax
|
|
||||||
|
|
||||||
# pdfpcnotes
|
|
||||||
*.pdfpc
|
|
||||||
|
|
||||||
# sagetex
|
|
||||||
*.sagetex.sage
|
|
||||||
*.sagetex.py
|
|
||||||
*.sagetex.scmd
|
|
||||||
|
|
||||||
# scrwfile
|
|
||||||
*.wrt
|
|
||||||
|
|
||||||
# svg
|
|
||||||
svg-inkscape/
|
|
||||||
|
|
||||||
# sympy
|
|
||||||
*.sout
|
|
||||||
*.sympy
|
|
||||||
sympy-plots-for-*.tex/
|
|
||||||
|
|
||||||
# pdfcomment
|
|
||||||
*.upa
|
|
||||||
*.upb
|
|
||||||
|
|
||||||
# pythontex
|
|
||||||
*.pytxcode
|
|
||||||
pythontex-files-*/
|
|
||||||
|
|
||||||
# tcolorbox
|
|
||||||
*.listing
|
|
||||||
|
|
||||||
# thmtools
|
|
||||||
*.loe
|
|
||||||
|
|
||||||
# TikZ & PGF
|
|
||||||
*.dpth
|
|
||||||
*.md5
|
|
||||||
*.auxlock
|
|
||||||
|
|
||||||
# titletoc
|
|
||||||
*.ptc
|
|
||||||
|
|
||||||
# todonotes
|
|
||||||
*.tdo
|
|
||||||
|
|
||||||
# vhistory
|
|
||||||
*.hst
|
|
||||||
*.ver
|
|
||||||
|
|
||||||
# easy-todo
|
|
||||||
*.lod
|
|
||||||
|
|
||||||
# xcolor
|
|
||||||
*.xcp
|
|
||||||
|
|
||||||
# xmpincl
|
|
||||||
*.xmpi
|
|
||||||
|
|
||||||
# xindy
|
|
||||||
*.xdy
|
|
||||||
|
|
||||||
# xypic precompiled matrices and outlines
|
|
||||||
*.xyc
|
|
||||||
*.xyd
|
|
||||||
|
|
||||||
# endfloat
|
|
||||||
*.ttt
|
|
||||||
*.fff
|
|
||||||
|
|
||||||
# Latexian
|
|
||||||
TSWLatexianTemp*
|
|
||||||
|
|
||||||
## Editors:
|
|
||||||
# WinEdt
|
|
||||||
*.bak
|
|
||||||
*.sav
|
|
||||||
|
|
||||||
# Texpad
|
|
||||||
.texpadtmp
|
|
||||||
|
|
||||||
# LyX
|
|
||||||
*.lyx~
|
|
||||||
|
|
||||||
# Kile
|
|
||||||
*.backup
|
|
||||||
|
|
||||||
# gummi
|
|
||||||
.*.swp
|
|
||||||
|
|
||||||
# KBibTeX
|
|
||||||
*~[0-9]*
|
|
||||||
|
|
||||||
# TeXnicCenter
|
|
||||||
*.tps
|
|
||||||
|
|
||||||
# auto folder when using emacs and auctex
|
|
||||||
./auto/*
|
|
||||||
# *.el
|
|
||||||
|
|
||||||
# expex forward references with \gathertags
|
|
||||||
*-tags.tex
|
|
||||||
|
|
||||||
# standalone packages
|
|
||||||
*.sta
|
|
||||||
|
|
||||||
# Makeindex log files
|
|
||||||
*.lpz
|
|
||||||
|
|
||||||
# xwatermark package
|
|
||||||
*.xwm
|
|
||||||
|
|
||||||
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
|
|
||||||
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
|
|
||||||
# Uncomment the next line to have this generated file ignored.
|
|
||||||
#*Notes.bib
|
|
||||||
|
|
||||||
### LaTeX Patch ###
|
|
||||||
# LIPIcs / OASIcs
|
|
||||||
*.vtc
|
|
||||||
|
|
||||||
# glossaries
|
|
||||||
*.glstex
|
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/latex
|
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/intellij
|
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=intellij
|
|
||||||
|
|
||||||
### Intellij ###
|
|
||||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
|
||||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
|
||||||
|
|
||||||
# User-specific stuff
|
|
||||||
.idea/**/workspace.xml
|
|
||||||
.idea/**/tasks.xml
|
|
||||||
.idea/**/usage.statistics.xml
|
|
||||||
.idea/**/dictionaries
|
|
||||||
.idea/**/shelf
|
|
||||||
|
|
||||||
# AWS User-specific
|
|
||||||
.idea/**/aws.xml
|
|
||||||
|
|
||||||
# Generated files
|
|
||||||
.idea/**/contentModel.xml
|
|
||||||
|
|
||||||
# Sensitive or high-churn files
|
|
||||||
.idea/**/dataSources/
|
|
||||||
.idea/**/dataSources.ids
|
|
||||||
.idea/**/dataSources.local.xml
|
|
||||||
.idea/**/sqlDataSources.xml
|
|
||||||
.idea/**/dynamic.xml
|
|
||||||
.idea/**/uiDesigner.xml
|
|
||||||
.idea/**/dbnavigator.xml
|
|
||||||
|
|
||||||
# Gradle
|
|
||||||
.idea/**/gradle.xml
|
|
||||||
.idea/**/libraries
|
|
||||||
|
|
||||||
# Gradle and Maven with auto-import
|
|
||||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
|
||||||
# since they will be recreated, and may cause churn. Uncomment if using
|
|
||||||
# auto-import.
|
|
||||||
# .idea/artifacts
|
|
||||||
# .idea/compiler.xml
|
|
||||||
# .idea/jarRepositories.xml
|
|
||||||
# .idea/modules.xml
|
|
||||||
# .idea/*.iml
|
|
||||||
# .idea/modules
|
|
||||||
# *.iml
|
|
||||||
# *.ipr
|
|
||||||
|
|
||||||
# CMake
|
|
||||||
cmake-build-*/
|
|
||||||
|
|
||||||
# Mongo Explorer plugin
|
|
||||||
.idea/**/mongoSettings.xml
|
|
||||||
|
|
||||||
# File-based project format
|
|
||||||
*.iws
|
|
||||||
|
|
||||||
# IntelliJ
|
|
||||||
out/
|
|
||||||
|
|
||||||
# mpeltonen/sbt-idea plugin
|
|
||||||
.idea_modules/
|
|
||||||
|
|
||||||
# JIRA plugin
|
|
||||||
atlassian-ide-plugin.xml
|
|
||||||
|
|
||||||
# Cursive Clojure plugin
|
|
||||||
.idea/replstate.xml
|
|
||||||
|
|
||||||
# SonarLint plugin
|
|
||||||
.idea/sonarlint/
|
|
||||||
|
|
||||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
|
||||||
com_crashlytics_export_strings.xml
|
|
||||||
crashlytics.properties
|
|
||||||
crashlytics-build.properties
|
|
||||||
fabric.properties
|
|
||||||
|
|
||||||
# Editor-based Rest Client
|
|
||||||
.idea/httpRequests
|
|
||||||
|
|
||||||
# Android studio 3.1+ serialized cache file
|
|
||||||
.idea/caches/build_file_checksums.ser
|
|
||||||
|
|
||||||
### Intellij Patch ###
|
|
||||||
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
|
|
||||||
|
|
||||||
# *.iml
|
|
||||||
# modules.xml
|
|
||||||
# .idea/misc.xml
|
|
||||||
# *.ipr
|
|
||||||
|
|
||||||
# Sonarlint plugin
|
|
||||||
# https://plugins.jetbrains.com/plugin/7973-sonarlint
|
|
||||||
.idea/**/sonarlint/
|
|
||||||
|
|
||||||
# SonarQube Plugin
|
|
||||||
# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
|
|
||||||
.idea/**/sonarIssues.xml
|
|
||||||
|
|
||||||
# Markdown Navigator plugin
|
|
||||||
# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
|
|
||||||
.idea/**/markdown-navigator.xml
|
|
||||||
.idea/**/markdown-navigator-enh.xml
|
|
||||||
.idea/**/markdown-navigator/
|
|
||||||
|
|
||||||
# Cache file creation bug
|
|
||||||
# See https://youtrack.jetbrains.com/issue/JBR-2257
|
|
||||||
.idea/$CACHE_FILE$
|
|
||||||
|
|
||||||
# CodeStream plugin
|
|
||||||
# https://plugins.jetbrains.com/plugin/12206-codestream
|
|
||||||
.idea/codestream.xml
|
|
||||||
|
|
||||||
# Azure Toolkit for IntelliJ plugin
|
|
||||||
# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
|
|
||||||
.idea/**/azureSettings.xml
|
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/intellij
|
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode
|
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode
|
|
||||||
|
|
||||||
### VisualStudioCode ###
|
|
||||||
.vscode/*
|
|
||||||
!.vscode/settings.json
|
|
||||||
!.vscode/tasks.json
|
|
||||||
!.vscode/launch.json
|
|
||||||
!.vscode/extensions.json
|
|
||||||
!.vscode/*.code-snippets
|
|
||||||
|
|
||||||
# Local History for Visual Studio Code
|
|
||||||
.history/
|
|
||||||
|
|
||||||
# Built Visual Studio Code Extensions
|
|
||||||
*.vsix
|
|
||||||
|
|
||||||
### VisualStudioCode Patch ###
|
|
||||||
# Ignore all local history of files
|
|
||||||
.history
|
|
||||||
.ionide
|
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode
|
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/linux
|
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=linux
|
|
||||||
|
|
||||||
### Linux ###
|
|
||||||
*~
|
|
||||||
|
|
||||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
|
||||||
.fuse_hidden*
|
|
||||||
|
|
||||||
# KDE directory preferences
|
|
||||||
.directory
|
|
||||||
|
|
||||||
# Linux trash folder which might appear on any partition or disk
|
|
||||||
.Trash-*
|
|
||||||
|
|
||||||
# .nfs files are created when an open file is removed but is still being accessed
|
|
||||||
.nfs*
|
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/linux
|
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/macos
|
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=macos
|
|
||||||
|
|
||||||
### macOS ###
|
|
||||||
# General
|
|
||||||
.DS_Store
|
|
||||||
.AppleDouble
|
|
||||||
.LSOverride
|
|
||||||
|
|
||||||
# Icon must end with two \r
|
|
||||||
Icon
|
|
||||||
|
|
||||||
# Thumbnails
|
|
||||||
._*
|
|
||||||
|
|
||||||
# Files that might appear in the root of a volume
|
|
||||||
.DocumentRevisions-V100
|
|
||||||
.fseventsd
|
|
||||||
.Spotlight-V100
|
|
||||||
.TemporaryItems
|
|
||||||
.Trashes
|
|
||||||
.VolumeIcon.icns
|
|
||||||
.com.apple.timemachine.donotpresent
|
|
||||||
|
|
||||||
# Directories potentially created on remote AFP share
|
|
||||||
.AppleDB
|
|
||||||
.AppleDesktop
|
|
||||||
Network Trash Folder
|
|
||||||
Temporary Items
|
|
||||||
.apdisk
|
|
||||||
|
|
||||||
### macOS Patch ###
|
|
||||||
# iCloud generated files
|
|
||||||
*.icloud
|
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/macos
|
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/windows
|
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=windows
|
|
||||||
|
|
||||||
### Windows ###
|
|
||||||
# Windows thumbnail cache files
|
|
||||||
Thumbs.db
|
|
||||||
Thumbs.db:encryptable
|
|
||||||
ehthumbs.db
|
|
||||||
ehthumbs_vista.db
|
|
||||||
|
|
||||||
# Dump file
|
|
||||||
*.stackdump
|
|
||||||
|
|
||||||
# Folder config file
|
|
||||||
[Dd]esktop.ini
|
|
||||||
|
|
||||||
# Recycle Bin used on file shares
|
|
||||||
$RECYCLE.BIN/
|
|
||||||
|
|
||||||
# Windows Installer files
|
|
||||||
*.cab
|
|
||||||
*.msi
|
|
||||||
*.msix
|
|
||||||
*.msm
|
|
||||||
*.msp
|
|
||||||
|
|
||||||
# Windows shortcuts
|
|
||||||
*.lnk
|
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/windows
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# .gitlab-ci.yml -- Pamhyr gitlab-ci
|
# .gitlab-ci.yml -- Pamhyr gitlab-ci
|
||||||
# Copyright (C) 2023-2025 INRAE
|
# Copyright (C) 2023 INRAE
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -15,139 +15,97 @@
|
|||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- downloads
|
|
||||||
- configure
|
|
||||||
- test
|
|
||||||
- build
|
- build
|
||||||
|
- test
|
||||||
- package
|
- package
|
||||||
- hash
|
|
||||||
- antivirus
|
|
||||||
- release
|
- release
|
||||||
|
|
||||||
#########################
|
#########
|
||||||
# PYINSTALLER VARIABLES #
|
# BUILD #
|
||||||
#########################
|
#########
|
||||||
|
|
||||||
variables:
|
build-mage-linux:
|
||||||
HIDDEN_IMPORTS: "--hiddenimport rasterio --collect-submodules rasterio"
|
stage: build
|
||||||
|
|
||||||
#############
|
|
||||||
# DOWNLOADS #
|
|
||||||
#############
|
|
||||||
|
|
||||||
variables:
|
|
||||||
MAGE_8_VERSION: "permalink/latest"
|
|
||||||
ADISTS_VERSION: "permalink/latest"
|
|
||||||
RUBAR_VERSION: "permalink/latest"
|
|
||||||
|
|
||||||
dl-mage8-doc:
|
|
||||||
stage: downloads
|
|
||||||
tags:
|
tags:
|
||||||
- linux
|
- linux
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
- if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
||||||
script:
|
script:
|
||||||
- mkdir -p doc
|
- curl -L -o mage.tgz https://gitlab.irstea.fr/jean-baptiste.faure/mage/-/releases/Test5/downloads/packages/mage_linux.tgz
|
||||||
- cd doc
|
- mkdir -p mage
|
||||||
- curl -L -o mage8.pdf https://forge.inrae.fr/river-hydraulics/mage/-/releases/$MAGE_8_VERSION/downloads/documents/Mage-8_Documentation.pdf
|
- cd mage
|
||||||
|
- tar xvf ../mage.tgz
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- doc/mage8.pdf
|
- mage/mage
|
||||||
|
- mage/mage_extraire
|
||||||
|
- mage/mailleurPF
|
||||||
|
|
||||||
dl-mage8-linux:
|
# build-mage-linux:
|
||||||
stage: downloads
|
# stage: build
|
||||||
|
# tags:
|
||||||
|
# - linux
|
||||||
|
# rules:
|
||||||
|
# - if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
||||||
|
# variables:
|
||||||
|
# GIT_SUBMODULE_STRATEGY: recursive
|
||||||
|
# GIT_SUBMODULE_DEPTH: 20
|
||||||
|
# script:
|
||||||
|
# - cd mage/src/
|
||||||
|
# - mkdir -p build
|
||||||
|
# - cd build
|
||||||
|
# - cmake ..
|
||||||
|
# - make
|
||||||
|
# artifacts:
|
||||||
|
# paths:
|
||||||
|
# - mage/src/build/mage
|
||||||
|
# - mage/src/build/mage_extraire
|
||||||
|
# - mage/src/build/mailleurPF
|
||||||
|
|
||||||
|
build-mage-windows:
|
||||||
|
stage: build
|
||||||
tags:
|
tags:
|
||||||
- linux
|
- linux
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
- if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
||||||
script:
|
script:
|
||||||
- curl -L -o mage8.tgz https://forge.inrae.fr/river-hydraulics/mage/-/releases/$MAGE_8_VERSION/downloads/packages/mage_linux.tgz
|
- curl -L -o mage.tgz https://gitlab.irstea.fr/jean-baptiste.faure/mage/-/releases/Test5/downloads/packages/mage_windows.tgz
|
||||||
- mkdir -p mage8-linux
|
- mkdir -p mage
|
||||||
- cd mage8-linux
|
- cd mage
|
||||||
- tar xvf ../mage8.tgz
|
- tar xvf ../mage.tgz
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- mage8-linux/mage
|
- mage/mage.exe
|
||||||
|
- mage/mage_extraire.exe
|
||||||
|
- mage/mailleurPF.exe
|
||||||
|
|
||||||
dl-mage8-windows:
|
# build-mage-windows:
|
||||||
stage: downloads
|
# stage: build
|
||||||
tags:
|
# tags:
|
||||||
- linux
|
# - wine
|
||||||
rules:
|
# rules:
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
# - if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
||||||
script:
|
# variables:
|
||||||
- curl -L -o mage8.tgz https://forge.inrae.fr/river-hydraulics/mage/-/releases/$MAGE_8_VERSION/downloads/packages/mage_windows.tgz
|
# GIT_SUBMODULE_STRATEGY: recursive
|
||||||
- mkdir -p mage8-windows
|
# GIT_SUBMODULE_DEPTH: 20
|
||||||
- cd mage8-windows
|
# script:
|
||||||
- tar xvf ../mage8.tgz
|
# - cd mage/src/
|
||||||
artifacts:
|
# - sed s/add_compile_definitions(win)/add_compile_definitions(windows)/ CMakeLists.txt > __tmp__
|
||||||
paths:
|
# - echo set(CMAKE_Fortran_COMPILER "C:/Program\ Files/gcc/bin/gfortran.exe") > CMakeLists.txt
|
||||||
- mage8-windows/mage.exe
|
# - echo set(CMAKE_MAKE_PROGRAM "C:/Program Files\ \(x86\)/GnuWin32/bin/make.exe") >> CMakeLists.txt
|
||||||
|
# - type __tmp__ >> CMakeLists.txt
|
||||||
|
# - mkdir build
|
||||||
|
# - cd build
|
||||||
|
# - cmake -G "MinGW Makefiles" ..
|
||||||
|
# - make
|
||||||
|
# artifacts:
|
||||||
|
# paths:
|
||||||
|
# - mage/src/build/mage.exe
|
||||||
|
# - mage/src/build/mage_extraire.exe
|
||||||
|
# - mage/src/build/mailleurPF.exe
|
||||||
|
|
||||||
dl-adists-linux:
|
build:
|
||||||
stage: downloads
|
stage: build
|
||||||
tags:
|
|
||||||
- linux
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
|
||||||
script:
|
|
||||||
- mkdir -p adists-linux
|
|
||||||
- cd adists-linux
|
|
||||||
- curl -L -o adists https://forge.inrae.fr/river-hydraulics/adists/-/releases/$ADISTS_VERSION/downloads/executables/adists
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- adists-linux/adists
|
|
||||||
|
|
||||||
dl-adists-windows:
|
|
||||||
stage: downloads
|
|
||||||
tags:
|
|
||||||
- linux
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
|
||||||
script:
|
|
||||||
- mkdir -p adists-windows
|
|
||||||
- cd adists-windows
|
|
||||||
- curl -L -o adists.exe https://forge.inrae.fr/river-hydraulics/adists/-/releases/$ADISTS_VERSION/downloads/executables/adists_win64.exe
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- adists-windows/adists.exe
|
|
||||||
|
|
||||||
dl-rubar-linux:
|
|
||||||
stage: downloads
|
|
||||||
tags:
|
|
||||||
- linux
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
|
||||||
script:
|
|
||||||
- mkdir -p rubar-linux
|
|
||||||
- cd rubar-linux
|
|
||||||
- curl -L -o rubar.tgz https://forge.inrae.fr/river-hydraulics/rubarbe/-/releases/$RUBAR_VERSION/downloads/packages/rubar_linux.tgz
|
|
||||||
- tar xf rubar.tgz
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- rubar-linux/rubarbe
|
|
||||||
|
|
||||||
dl-rubar-windows:
|
|
||||||
stage: downloads
|
|
||||||
tags:
|
|
||||||
- linux
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
|
||||||
script:
|
|
||||||
- mkdir -p rubar-windows
|
|
||||||
- cd rubar-windows
|
|
||||||
- curl -L -o rubar.tgz https://forge.inrae.fr/river-hydraulics/rubarbe/-/releases/$RUBAR_VERSION/downloads/packages/rubar_windows.tgz
|
|
||||||
- tar xf rubar.tgz
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- rubar-windows/rubarbe.exe
|
|
||||||
|
|
||||||
#############
|
|
||||||
# CONFIGURE #
|
|
||||||
#############
|
|
||||||
|
|
||||||
set-version:
|
|
||||||
stage: configure
|
|
||||||
tags:
|
tags:
|
||||||
- linux
|
- linux
|
||||||
script:
|
script:
|
||||||
@@ -158,7 +116,7 @@ set-version:
|
|||||||
- VERSION
|
- VERSION
|
||||||
|
|
||||||
build-lang:
|
build-lang:
|
||||||
stage: configure
|
stage: build
|
||||||
tags:
|
tags:
|
||||||
- linux
|
- linux
|
||||||
script:
|
script:
|
||||||
@@ -172,551 +130,91 @@ build-lang:
|
|||||||
# TESTS #
|
# TESTS #
|
||||||
#########
|
#########
|
||||||
|
|
||||||
unittest:
|
test:
|
||||||
stage: test
|
stage: test
|
||||||
tags:
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: set-version
|
|
||||||
artifacts: true
|
|
||||||
script:
|
script:
|
||||||
- python3.12 -m venv venv
|
- echo "TODO PAMHYR tests"
|
||||||
- . venv/bin/activate
|
|
||||||
- pip3 install -U pip
|
|
||||||
- pip3 install -r ./full-requirements.txt
|
|
||||||
- pip3 install -U -r ./full-requirements.txt
|
|
||||||
- cd src
|
|
||||||
- python3.12 -m unittest discover -t .
|
|
||||||
|
|
||||||
test-pep8:
|
|
||||||
stage: test
|
|
||||||
tags:
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: set-version
|
|
||||||
artifacts: true
|
|
||||||
- job: unittest
|
|
||||||
script:
|
|
||||||
# Setup virtual env
|
|
||||||
- python3.12 -m venv venv
|
|
||||||
- . venv/bin/activate
|
|
||||||
- pip3 install -U pip
|
|
||||||
- pip3 install -r ./requirements.txt
|
|
||||||
- pip3 install -U -r ./requirements.txt
|
|
||||||
- pip3 install pycodestyle
|
|
||||||
- pycodestyle --exclude="*_to_*.py" ./src
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
#########
|
|
||||||
# BUILD #
|
|
||||||
#########
|
|
||||||
|
|
||||||
# build-users-doc:
|
|
||||||
# stage: build
|
|
||||||
# tags:
|
|
||||||
# - linux
|
|
||||||
# needs:
|
|
||||||
# - job: set-version
|
|
||||||
# artifacts: true
|
|
||||||
# script:
|
|
||||||
# - cd ./doc/users/
|
|
||||||
# - ./build.sh
|
|
||||||
# artifacts:
|
|
||||||
# paths:
|
|
||||||
# - doc/users/documentation.pdf
|
|
||||||
# - doc/users/documentation.html
|
|
||||||
# - doc/users/images/
|
|
||||||
# allow_failure: true
|
|
||||||
|
|
||||||
build-td:
|
|
||||||
stage: build
|
|
||||||
tags:
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: set-version
|
|
||||||
artifacts: true
|
|
||||||
script:
|
|
||||||
- cd ./doc/users/TP_Hydraulique_Hogneau/
|
|
||||||
- ./build.sh
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- doc/users/TP_Hydraulique_Hogneau/step-by-step.pdf
|
|
||||||
- doc/users/TP_Hydraulique_Hogneau/pas-a-pas.pdf
|
|
||||||
- doc/users/TP_Hydraulique_Hogneau/Tuto-2-fr.pdf
|
|
||||||
- doc/users/TP_Hydraulique_Hogneau/data/
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
build-td-2:
|
|
||||||
stage: build
|
|
||||||
tags:
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: set-version
|
|
||||||
artifacts: true
|
|
||||||
script:
|
|
||||||
- cd ./doc/users/TP_AdisTS_Vieux_Rhone/
|
|
||||||
- ./build.sh
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- doc/users/TP_AdisTS_Vieux_Rhone/pas-a-pas.pdf
|
|
||||||
- doc/users/TP_AdisTS_Vieux_Rhone/data/
|
|
||||||
- doc/users/TP_AdisTS_Vieux_Rhone/Sujet.pdf
|
|
||||||
- doc/users/TP_AdisTS_Vieux_Rhone/Vieux_Rhone_TP_AdisTS.pamhyr
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
build-developers-doc:
|
|
||||||
stage: build
|
|
||||||
tags:
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: set-version
|
|
||||||
artifacts: true
|
|
||||||
script:
|
|
||||||
- cd ./doc/dev/
|
|
||||||
- ./build.sh
|
|
||||||
# Create html documentation
|
|
||||||
- cd ../../src
|
|
||||||
- python3.12 -m venv doc-venv
|
|
||||||
- . doc-venv/bin/activate
|
|
||||||
- pip3 install -U pip
|
|
||||||
- pip3 install -r ../full-requirements.txt
|
|
||||||
- pip3 install -U -r ../full-requirements.txt
|
|
||||||
- pip3 install pdoc3
|
|
||||||
- pdoc --html .
|
|
||||||
# Create archive
|
|
||||||
- tar cf html.tar ./html
|
|
||||||
- cd ../doc/dev
|
|
||||||
- mv ../../src/html.tar ./
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- doc/dev/documentation.pdf
|
|
||||||
- doc/dev/documentation.html
|
|
||||||
- doc/dev/html.tar
|
|
||||||
- doc/dev/images/
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
build-linux:
|
|
||||||
stage: build
|
|
||||||
tags:
|
|
||||||
- linux
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
|
||||||
needs:
|
|
||||||
- job: dl-adists-linux
|
|
||||||
artifacts: true
|
|
||||||
- job: dl-rubar-linux
|
|
||||||
artifacts: true
|
|
||||||
- job: dl-mage8-linux
|
|
||||||
artifacts: true
|
|
||||||
- job: dl-mage8-doc
|
|
||||||
artifacts: true
|
|
||||||
- job: set-version
|
|
||||||
artifacts: true
|
|
||||||
- job: build-lang
|
|
||||||
artifacts: true
|
|
||||||
- job: build-developers-doc
|
|
||||||
artifacts: true
|
|
||||||
# - job: build-users-doc
|
|
||||||
# artifacts: true
|
|
||||||
- job: build-td
|
|
||||||
artifacts: true
|
|
||||||
- job: build-td-2
|
|
||||||
artifacts: true
|
|
||||||
script:
|
|
||||||
- mkdir -p linux
|
|
||||||
- cd linux
|
|
||||||
# Setup virtual env
|
|
||||||
- python3.12 -m venv linux-venv
|
|
||||||
- . linux-venv/bin/activate
|
|
||||||
- pip3 install -U pip
|
|
||||||
- pip3 install -r ../requirements.txt
|
|
||||||
- pip3 install -U -r ../requirements.txt
|
|
||||||
# Run Pyinstaller
|
|
||||||
- pyinstaller -y $HIDDEN_IMPORTS --paths linux-venv/lib/python3.12/site-packages ../src/pamhyr.py
|
|
||||||
# Create directory
|
|
||||||
- mkdir -p pamhyr
|
|
||||||
- mkdir -p pamhyr/_internal
|
|
||||||
# Copy Pamhyr info
|
|
||||||
- cp -v ../VERSION pamhyr/_internal/
|
|
||||||
- cp -v ../AUTHORS pamhyr/_internal/
|
|
||||||
- cp -v ../LICENSE pamhyr/_internal/
|
|
||||||
- cp -v ../src/motd.txt pamhyr/_internal/
|
|
||||||
# Copy mage
|
|
||||||
- mkdir -p pamhyr/mage8
|
|
||||||
- cp -v ../mage8-linux/* pamhyr/mage8/
|
|
||||||
# Copy adists
|
|
||||||
- mkdir -p pamhyr/adists
|
|
||||||
- cp -v ../adists-linux/* pamhyr/adists/
|
|
||||||
# Copy rubar
|
|
||||||
- mkdir -p pamhyr/rubar
|
|
||||||
- cp -v ../rubar-linux/* pamhyr/rubar/
|
|
||||||
# Copy Pamhyr
|
|
||||||
- cp -r dist/pamhyr/* pamhyr/
|
|
||||||
# Pamhyr script to force x11
|
|
||||||
- echo '#!/usr/bin/env bash' > pamhyr/pamhyr-x11
|
|
||||||
- echo "" >> pamhyr/pamhyr-x11
|
|
||||||
- echo "GDK_BACKEND=x11 ./pamhyr $@" >> pamhyr/pamhyr-x11
|
|
||||||
- chmod +x pamhyr/pamhyr-x11
|
|
||||||
# Copy Pamhyr resources
|
|
||||||
- mkdir -p pamhyr/_internal/View
|
|
||||||
- mkdir -p pamhyr/_internal/View/ui
|
|
||||||
- mkdir -p pamhyr/_internal/View/ui/Widgets
|
|
||||||
- cp -r ../src/View/ui/*.ui pamhyr/_internal/View/ui/
|
|
||||||
- cp -r ../src/View/ui/ressources/ pamhyr/_internal/View/ui
|
|
||||||
- cp -r ../src/View/ui/Widgets/*.ui pamhyr/_internal/View/ui/Widgets
|
|
||||||
# Copy lang
|
|
||||||
- mkdir -p pamhyr/_internal/lang
|
|
||||||
- cp -r ../src/lang/*.qm pamhyr/_internal/lang
|
|
||||||
# Copy tests cases
|
|
||||||
- mkdir -p pamhyr/tests_cases/
|
|
||||||
- mkdir -p pamhyr/tests_cases/Saar
|
|
||||||
- cp ../tests_cases/Saar/Saar.pamhyr pamhyr/tests_cases/Saar/
|
|
||||||
# Copy documentations
|
|
||||||
- mkdir -p pamhyr/doc/
|
|
||||||
- mkdir -p pamhyr/doc/images/
|
|
||||||
- mkdir -p pamhyr/doc/html/
|
|
||||||
# - cp ../doc/users/documentation.pdf pamhyr/doc/Pamhyr2-users.pdf
|
|
||||||
# - cp ../doc/users/documentation.html pamhyr/doc/Pamhyr2-users.html
|
|
||||||
- cp ../doc/mage8.pdf pamhyr/doc/mage8.pdf
|
|
||||||
- cp ../doc/dev/documentation.pdf pamhyr/doc/Pamhyr2-dev.pdf
|
|
||||||
- cp ../doc/dev/documentation.html pamhyr/doc/Pamhyr2-dev.html
|
|
||||||
#- cp ../doc/users/images/* pamhyr/doc/images
|
|
||||||
- cp -r ../doc/dev/images/* pamhyr/doc/images
|
|
||||||
- cp -r ../doc/images/* pamhyr/doc/images
|
|
||||||
# Copy Tuto
|
|
||||||
- mkdir -p pamhyr/doc/TP_Hydraulique_Hogneau/
|
|
||||||
- mkdir -p pamhyr/doc/TP_Hydraulique_Hogneau/data
|
|
||||||
- cp ../doc/users/TP_Hydraulique_Hogneau/Hogneau_Engees2022.pdf pamhyr/doc/TP_Hydraulique_Hogneau/Hogneau_Engees2022.pdf
|
|
||||||
- cp ../doc/users/TP_Hydraulique_Hogneau/step-by-step.pdf pamhyr/doc/TP_Hydraulique_Hogneau/Tuto1-en.pdf
|
|
||||||
- cp ../doc/users/TP_Hydraulique_Hogneau/pas-a-pas.pdf pamhyr/doc/TP_Hydraulique_Hogneau/Tuto1-fr.pdf
|
|
||||||
- cp ../doc/users/TP_Hydraulique_Hogneau/Tuto-2-fr.pdf pamhyr/doc/TP_Hydraulique_Hogneau/Tuto2-fr.pdf
|
|
||||||
- cp ../doc/users/TP_Hydraulique_Hogneau/*.pamhyr pamhyr/doc/TP_Hydraulique_Hogneau/
|
|
||||||
- cp ../doc/users/TP_Hydraulique_Hogneau/data/* pamhyr/doc/TP_Hydraulique_Hogneau/data/
|
|
||||||
- mkdir -p pamhyr/doc/TP_AdisTS_Vieux_Rhone/
|
|
||||||
- mkdir -p pamhyr/doc/TP_AdisTS_Vieux_Rhone/data
|
|
||||||
- cp ../doc/users/TP_AdisTS_Vieux_Rhone/*.pdf pamhyr/doc/TP_AdisTS_Vieux_Rhone/
|
|
||||||
- cp ../doc/users/TP_AdisTS_Vieux_Rhone/data/* pamhyr/doc/TP_AdisTS_Vieux_Rhone/data/
|
|
||||||
- cp ../doc/users/TP_AdisTS_Vieux_Rhone/Vieux_Rhone_TP_AdisTS.pamhyr pamhyr/doc/TP_AdisTS_Vieux_Rhone/Vieux_Rhone_TP_AdisTS.pamhyr
|
|
||||||
# Copy TP charriage
|
|
||||||
- mkdir -p pamhyr/doc/TP_charriage/
|
|
||||||
- cp -r ../doc/users/TP_charriage/* pamhyr/doc/TP_charriage
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- linux/pamhyr
|
|
||||||
|
|
||||||
build-windows:
|
|
||||||
stage: build
|
|
||||||
tags:
|
|
||||||
- wine
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
|
||||||
needs:
|
|
||||||
- job: dl-mage8-windows
|
|
||||||
artifacts: true
|
|
||||||
- job: dl-adists-windows
|
|
||||||
artifacts: true
|
|
||||||
- job: dl-rubar-windows
|
|
||||||
artifacts: true
|
|
||||||
- job: dl-mage8-doc
|
|
||||||
artifacts: true
|
|
||||||
- job: set-version
|
|
||||||
artifacts: true
|
|
||||||
- job: build-lang
|
|
||||||
artifacts: true
|
|
||||||
- job: build-developers-doc
|
|
||||||
artifacts: true
|
|
||||||
# - job: build-users-doc
|
|
||||||
# artifacts: true
|
|
||||||
- job: build-td
|
|
||||||
artifacts: true
|
|
||||||
- job: build-td-2
|
|
||||||
artifacts: true
|
|
||||||
script:
|
|
||||||
- mkdir windows
|
|
||||||
- cd windows
|
|
||||||
# Setup env
|
|
||||||
- python -m pip install -U pip
|
|
||||||
- python -m pip install -r ..\requirements.txt
|
|
||||||
- python -m pip install -U -r ..\requirements.txt
|
|
||||||
# Run Pyinstaller
|
|
||||||
# - pyinstaller --noconsole -y ..\src\pamhyr.py
|
|
||||||
- pyinstaller -i ../src/View/ui/ressources/icon.ico $HIDDEN_IMPORTS --hide-console hide-early -y ..\src\pamhyr.py
|
|
||||||
# Create directory
|
|
||||||
- mkdir pamhyr
|
|
||||||
- dir
|
|
||||||
- copy ..\packages\make-windows-dir.bat .\make-windows-dir.bat
|
|
||||||
- .\make-windows-dir.bat
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- windows/pamhyr
|
|
||||||
|
|
||||||
############
|
############
|
||||||
# PACKAGES #
|
# PACKAGES #
|
||||||
############
|
############
|
||||||
|
|
||||||
linux-package-tar:
|
linux-package:
|
||||||
stage: package
|
stage: package
|
||||||
tags:
|
tags:
|
||||||
- release
|
- release
|
||||||
- linux
|
- linux
|
||||||
needs:
|
needs:
|
||||||
# - job: test-linux
|
- job: build-lang
|
||||||
- job: build-linux
|
artifacts: true
|
||||||
|
- job: build
|
||||||
|
artifacts: true
|
||||||
|
- job: build-mage-linux
|
||||||
artifacts: true
|
artifacts: true
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_TAG
|
- if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- linux/pamhyr-gnulinux.tar.xz
|
- packages/pamhyr-gnulinux-amd64.tar.xz
|
||||||
script:
|
script:
|
||||||
- cd linux
|
- cd packages
|
||||||
- tar --xz -cf pamhyr-gnulinux.tar.xz ./pamhyr --checkpoint=.100
|
- ./linux.sh
|
||||||
|
|
||||||
windows-package-zip:
|
windows-package:
|
||||||
stage: package
|
|
||||||
tags:
|
|
||||||
- release
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
# - job: test-windows
|
|
||||||
- job: build-windows
|
|
||||||
artifacts: true
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_TAG
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- windows/pamhyr-windows.zip
|
|
||||||
script:
|
|
||||||
- cd windows
|
|
||||||
- zip -r pamhyr-windows.zip pamhyr
|
|
||||||
|
|
||||||
windows-package-exe:
|
|
||||||
stage: package
|
stage: package
|
||||||
tags:
|
tags:
|
||||||
- release
|
- release
|
||||||
- wine
|
- wine
|
||||||
needs:
|
needs:
|
||||||
# - job: test-windows
|
- job: build-lang
|
||||||
- job: build-windows
|
artifacts: true
|
||||||
|
- job: build
|
||||||
|
artifacts: true
|
||||||
|
- job: build-mage-windows
|
||||||
artifacts: true
|
artifacts: true
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_TAG
|
- if: $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- windows/pamhyr-windows.exe
|
- packages/pamhyr-win-amd64.exe
|
||||||
script:
|
|
||||||
- cd windows
|
|
||||||
- copy ..\packages\make-windows-exe.bat make-windows-exe.bat
|
|
||||||
- copy ..\packages\pamhyr.nsi pamhyr.nsi
|
|
||||||
- .\make-windows-exe.bat
|
|
||||||
|
|
||||||
########
|
|
||||||
# HASH #
|
|
||||||
########
|
|
||||||
|
|
||||||
linux-build-hash:
|
|
||||||
stage: hash
|
|
||||||
tags:
|
|
||||||
- release
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: build-linux
|
|
||||||
artifacts: true
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
|
||||||
script:
|
|
||||||
- cd linux
|
|
||||||
- sha256sum -b pamhyr/pamhyr > pamhyr/pamhyr.sha256
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- linux/pamhyr/pamhyr.sha256
|
|
||||||
|
|
||||||
windows-build-hash:
|
|
||||||
stage: hash
|
|
||||||
tags:
|
|
||||||
- release
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: build-windows
|
|
||||||
artifacts: true
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
|
||||||
script:
|
|
||||||
- cd windows
|
|
||||||
- sha256sum -b pamhyr/pamhyr.exe > pamhyr/pamhyr.exe.sha256
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- windows/pamhyr/pamhyr.exe.sha256
|
|
||||||
|
|
||||||
pkg-hash:
|
|
||||||
stage: hash
|
|
||||||
tags:
|
|
||||||
- release
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: linux-package-tar
|
|
||||||
artifacts: true
|
|
||||||
- job: windows-package-zip
|
|
||||||
artifacts: true
|
|
||||||
- job: windows-package-exe
|
|
||||||
artifacts: true
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_TAG
|
|
||||||
script:
|
|
||||||
- cd windows
|
|
||||||
- sha256sum -b pamhyr-windows.exe > pamhyr-windows.exe.sha256
|
|
||||||
- sha256sum -b pamhyr-windows.zip > pamhyr-windows.zip.sha256
|
|
||||||
- cd ..
|
|
||||||
- cd linux
|
|
||||||
- sha256sum -b pamhyr-gnulinux.tar.xz > pamhyr-gnulinux.tar.xz.sha256
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- windows/pamhyr-windows.exe.sha256
|
|
||||||
- windows/pamhyr-windows.zip.sha256
|
|
||||||
- linux/pamhyr-gnulinux.tar.xz.sha256
|
|
||||||
|
|
||||||
#############
|
|
||||||
# ANTIVIRUS #
|
|
||||||
#############
|
|
||||||
|
|
||||||
build-check-clamav:
|
|
||||||
stage: antivirus
|
|
||||||
tags:
|
|
||||||
- release
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: build-linux
|
|
||||||
artifacts: true
|
|
||||||
- job: build-windows
|
|
||||||
artifacts: true
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_BRANCH == 'master' || $CI_COMMIT_TAG
|
|
||||||
script:
|
script:
|
||||||
- cd packages
|
- cd packages
|
||||||
- ./clamav-scan.sh builds
|
- ./windows.bat
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
pkg-check-clamav:
|
|
||||||
stage: antivirus
|
|
||||||
tags:
|
|
||||||
- release
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: linux-package-tar
|
|
||||||
artifacts: true
|
|
||||||
- job: windows-package-zip
|
|
||||||
artifacts: true
|
|
||||||
- job: windows-package-exe
|
|
||||||
artifacts: true
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'ci-test' || $CI_COMMIT_TAG
|
|
||||||
script:
|
|
||||||
- cd packages
|
|
||||||
- ./clamav-scan.sh packages
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
###########
|
###########
|
||||||
# RELEASE #
|
# RELEASE #
|
||||||
###########
|
###########
|
||||||
|
|
||||||
shadow-release:
|
|
||||||
stage: release
|
|
||||||
tags:
|
|
||||||
- release
|
|
||||||
- linux
|
|
||||||
needs:
|
|
||||||
- job: linux-package-tar
|
|
||||||
artifacts: true
|
|
||||||
- job: windows-package-zip
|
|
||||||
artifacts: true
|
|
||||||
- job: windows-package-exe
|
|
||||||
artifacts: true
|
|
||||||
# - job: build-users-doc
|
|
||||||
# artifacts: true
|
|
||||||
- job: build-developers-doc
|
|
||||||
artifacts: true
|
|
||||||
- job: pkg-hash
|
|
||||||
artifacts: true
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_TAG && $CI_COMMIT_TAG !~ /^v/
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- linux/pamhyr-gnulinux.tar.xz
|
|
||||||
- windows/pamhyr-windows.zip
|
|
||||||
- windows/pamhyr-windows.exe
|
|
||||||
- linux/pamhyr-gnulinux.tar.xz.sha256
|
|
||||||
- windows/pamhyr-windows.zip.sha256
|
|
||||||
- windows/pamhyr-windows.exe.sha256
|
|
||||||
- doc/dev/documentation.pdf
|
|
||||||
# - doc/users/documentation.pdf
|
|
||||||
script:
|
|
||||||
- cd packages
|
|
||||||
|
|
||||||
|
|
||||||
tag-release:
|
tag-release:
|
||||||
stage: release
|
stage: release
|
||||||
tags:
|
tags:
|
||||||
- release
|
- release
|
||||||
- linux
|
- linux
|
||||||
needs:
|
needs:
|
||||||
- job: linux-package-tar
|
- job: linux-package
|
||||||
artifacts: true
|
artifacts: true
|
||||||
- job: windows-package-zip
|
- job: windows-package
|
||||||
artifacts: true
|
|
||||||
- job: windows-package-exe
|
|
||||||
artifacts: true
|
|
||||||
# - job: build-users-doc
|
|
||||||
# artifacts: true
|
|
||||||
- job: build-developers-doc
|
|
||||||
artifacts: true
|
|
||||||
- job: pkg-hash
|
|
||||||
artifacts: true
|
artifacts: true
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_TAG =~ /^v/
|
- if: $CI_COMMIT_TAG
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- linux/pamhyr-gnulinux.tar.xz
|
- packages/pamhyr-gnulinux-amd64.tar.xz
|
||||||
- windows/pamhyr-windows.zip
|
- packages/pamhyr-win-amd64.exe
|
||||||
- windows/pamhyr-windows.exe
|
|
||||||
- linux/pamhyr-gnulinux.tar.xz.sha256
|
|
||||||
- windows/pamhyr-windows.zip.sha256
|
|
||||||
- windows/pamhyr-windows.exe.sha256
|
|
||||||
- doc/dev/documentation.pdf
|
|
||||||
# - doc/users/documentation.pdf
|
|
||||||
script:
|
script:
|
||||||
- cd packages
|
- cd packages
|
||||||
release:
|
release:
|
||||||
name: '$CI_COMMIT_TAG'
|
name: '$CI_COMMIT_TAG'
|
||||||
description: '$CI_COMMIT_TAG_MESSAGE'
|
description: 'Automatic release from tag $CI_COMMIT_TAG'
|
||||||
tag_name: '$CI_COMMIT_TAG'
|
tag_name: '$CI_COMMIT_TAG'
|
||||||
ref: '$CI_COMMIT_SHA'
|
ref: '$CI_COMMIT_SHA'
|
||||||
assets:
|
assets:
|
||||||
links:
|
links:
|
||||||
- name: 'GNU/Linux CHECKSUM SHA256 (tar.xz)'
|
- name: 'GNU/Linux amd64 (tar.xz)'
|
||||||
url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/linux/pamhyr-gnulinux.tar.xz.sha256'
|
url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/packages/pamhyr-gnulinux-amd64.tar.xz'
|
||||||
filepath: '/linux/pamhyr-gnulinux.tar.xz.sha256'
|
filepath: '/packages/pamhyr-gnulinux-amd64.tar.xz'
|
||||||
link_type: 'package'
|
link_type: 'package'
|
||||||
- name: 'GNU/Linux (tar.xz)'
|
- name: 'Windows amd64 (exe)'
|
||||||
url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/linux/pamhyr-gnulinux.tar.xz'
|
url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/packages/pamhyr-win-amd64.exe'
|
||||||
filepath: '/linux/pamhyr-gnulinux.tar.xz'
|
filepath: '/packages/pamhyr-win-amd64.exe'
|
||||||
link_type: 'package'
|
link_type: 'package'
|
||||||
- name: 'Windows CHECKSUM SHA256 (exe)'
|
|
||||||
url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/windows/pamhyr-windows.exe.sha256'
|
|
||||||
filepath: '/windows/pamhyr-windows.exe.sha256'
|
|
||||||
link_type: 'package'
|
|
||||||
- name: 'Windows (exe)'
|
|
||||||
url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/windows/pamhyr-windows.exe'
|
|
||||||
filepath: '/windows/pamhyr-windows.exe'
|
|
||||||
link_type: 'package'
|
|
||||||
- name: 'Windows CHECKSUM SHA256 (zip)'
|
|
||||||
url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/windows/pamhyr-windows.zip.sha256'
|
|
||||||
filepath: '/windows/pamhyr-windows.zip.sha256'
|
|
||||||
link_type: 'package'
|
|
||||||
- name: 'Windows (zip)'
|
|
||||||
url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/windows/pamhyr-windows.zip'
|
|
||||||
filepath: '/windows/pamhyr-windows.zip'
|
|
||||||
link_type: 'package'
|
|
||||||
- name: 'Dev documentations (pdf)'
|
|
||||||
url: '${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/doc/dev/documentation.pdf'
|
|
||||||
filepath: '/doc/dev/documentation.pdf'
|
|
||||||
link_type: 'other'
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<component name="InspectionProjectProfileManager">
|
|
||||||
<settings>
|
|
||||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
|
||||||
<version value="1.0" />
|
|
||||||
</settings>
|
|
||||||
</component>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="Black">
|
|
||||||
<option name="sdkName" value="Python 3.10 (pamhyr)" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (pamhyr)" project-jdk-type="Python SDK" />
|
|
||||||
</project>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/pamhyr.iml" filepath="$PROJECT_DIR$/.idea/pamhyr.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="PYTHON_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="jdk" jdkName="Python 3.10 (pamhyr)" jdkType="Python SDK" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
<component name="PyDocumentationSettings">
|
|
||||||
<option name="format" value="PLAIN" />
|
|
||||||
<option name="myDocStringFormat" value="Plain" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
Sylvain COULIBALY, INRAE, 2020 - 2022
|
Sylvain COULIBALY, INRAE, 2020 - 2022
|
||||||
Théophile TERRAZ, INRAE, 2022 - 2024
|
Théophile TERRAZ, INRAE, 2022 - 2023
|
||||||
Pierre-Antoine ROUBY, INRAE, 2023 - 2026
|
Pierre-Antoine ROUBY, INRAE, 2023
|
||||||
Dylan JEANNIN, INRAE, 2026
|
|
||||||
@@ -1,41 +1 @@
|
|||||||
# Pamhyr2
|
# PamHyr (Programme d’Aide à la Modélisation en Hydraulique des Rivières)
|
||||||
|
|
||||||
Pamhyr is a free and open source graphical user interface for 1D hydro-sedimentary
|
|
||||||
modelling of rivers.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
+ Define a complex river hydraulics network
|
|
||||||
+ Define the river geometry
|
|
||||||
+ Define boundary conditions
|
|
||||||
+ Define lateral contribution
|
|
||||||
+ Define river friction
|
|
||||||
+ Define reservoirs
|
|
||||||
+ Define hydraulic structures
|
|
||||||
+ Define or generate initial conditions
|
|
||||||
+ Define river sedimentary layers
|
|
||||||
+ Save the study in a unique file
|
|
||||||
+ Run Mage 8 on a study and visualize results
|
|
||||||
+ Create and edit study alternative scenario tree
|
|
||||||
|
|
||||||
Let see the
|
|
||||||
[documentation](https://gitlab.com/pamhyr/pamhyr2/-/wikis/home)
|
|
||||||
([:fr:](https://gitlab.com/pamhyr/pamhyr2/-/wikis/home-fr),
|
|
||||||
[:gb:](https://gitlab.com/pamhyr/pamhyr2/-/wikis/home-en))
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
### GNU/Linux
|
|
||||||
|
|
||||||
See documentation:
|
|
||||||
- [French :fr:](https://gitlab.com/pamhyr/pamhyr2/-/wikis/home/fr/Install%20on%20GNULinux)
|
|
||||||
- [English :gb:](https://gitlab.com/pamhyr/pamhyr2/-/wikis/home/en/Install%20on%20GNULinux)
|
|
||||||
|
|
||||||
### Windows
|
|
||||||
|
|
||||||
See documentation:
|
|
||||||
- [French :fr:](https://gitlab.com/pamhyr/pamhyr2/-/wikis/home/fr/Install%20on%20Windows)
|
|
||||||
- [English :gb:](https://gitlab.com/pamhyr/pamhyr2/-/wikis/home/en/Install%20on%20Windows)
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
|
|
||||||
FILES="documentation.org scenario.org"
|
|
||||||
|
|
||||||
for file in $FILES
|
|
||||||
do
|
|
||||||
echo " PDF $file"
|
|
||||||
emacs -nw --batch \
|
|
||||||
--eval "(require 'org)" \
|
|
||||||
--eval "(require 'ox-latex)" \
|
|
||||||
--eval "(load-file \"../tools/setup.el\")" \
|
|
||||||
--file ./$file \
|
|
||||||
-f org-latex-export-to-pdf \
|
|
||||||
|
|
||||||
echo " HTML $file"
|
|
||||||
emacs -nw --batch \
|
|
||||||
--eval "(require 'org)" \
|
|
||||||
--eval "(require 'ox-latex)" \
|
|
||||||
--eval "(require 'ox-html)" \
|
|
||||||
--eval "(load-file \"../tools/setup.el\")" \
|
|
||||||
--file ./$file \
|
|
||||||
-f org-html-export-to-html
|
|
||||||
done
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
../tools/ref.bib
|
|
||||||
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 224 KiB |
@@ -1,661 +0,0 @@
|
|||||||
# senario.org -- Pamhyr developers documentation
|
|
||||||
# Copyright (C) 2023-2024 INRAE
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
#+STARTUP: indent show2levels
|
|
||||||
|
|
||||||
#+INCLUDE: ../tools/macro.org
|
|
||||||
#+INCLUDE: ../tools/latex.org
|
|
||||||
|
|
||||||
#+TITLE: Scenario implementation in Pamhyr2: \textbf{Preparatory work}
|
|
||||||
#+SUBTITLE: Version: {{{version}}}
|
|
||||||
#+AUTHOR: {{{INRAE}}}
|
|
||||||
|
|
||||||
#+OPTIONS: toc:t
|
|
||||||
#+LANGUAGE: UKenglish
|
|
||||||
|
|
||||||
#+latex: \newpage
|
|
||||||
|
|
||||||
* COMMENT tools
|
|
||||||
|
|
||||||
#+begin_src emacs-lisp :export none
|
|
||||||
(add-to-list 'org-structure-template-alist
|
|
||||||
'("p" "#+begin_src python :python python3 :results output\n\n#+end_src"))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS:
|
|
||||||
#+begin_example
|
|
||||||
((p #+begin_src python :python python3 :results output
|
|
||||||
|
|
||||||
,#+end_src) (d . #+name: graph-XXX
|
|
||||||
,#+header: :results drawer
|
|
||||||
,#+header: :exports results
|
|
||||||
,#+header: :post attr_wrap(width="12cm", data=*this*, name="graph-XXX", caption="Graph XXX", float="t")
|
|
||||||
,#+begin_src dot :file "images/graph-XXX.png" :cache no
|
|
||||||
digraph {
|
|
||||||
bgcolor="transparent";
|
|
||||||
node[colorscheme=set19,shape=box,style="filled",fillcolor=9];
|
|
||||||
}
|
|
||||||
,#+end_src) (p . src python :python python3 :results output :noweb yes
|
|
||||||
|
|
||||||
src) (t . EXPORT latex
|
|
||||||
\begin{table}
|
|
||||||
\centering
|
|
||||||
\resizebox{0.6\linewidth}{!}{
|
|
||||||
|
|
||||||
}
|
|
||||||
%\vspace{0.5pt}
|
|
||||||
%\caption{Number of tests by errors types}
|
|
||||||
\end{table}
|
|
||||||
,#+E) (B . src shell :session *shell* :results output :exports both) (a . export ascii) (c . center) (C . comment) (e . example) (E . export) (h . export html) (l . export latex) (q . quote) (s . src) (v . verse))
|
|
||||||
#+end_example
|
|
||||||
|
|
||||||
#+name: dbg-execute
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
def execute(db, query):
|
|
||||||
print(query)
|
|
||||||
return db.execute(query)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: dbg-execute
|
|
||||||
|
|
||||||
#+name: execute
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
def execute(db, query):
|
|
||||||
return db.execute(query)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: execute
|
|
||||||
|
|
||||||
* Principe
|
|
||||||
|
|
||||||
** Scenario
|
|
||||||
|
|
||||||
A scenario is defined by a name, a description and a parent
|
|
||||||
scenario. If a scenario as no parent, parent value is =None=. So, in
|
|
||||||
Pamhyr2 the list of scenario must by a tree with a root defined by a
|
|
||||||
default scenarios with no parent.
|
|
||||||
|
|
||||||
#+begin_src sql
|
|
||||||
CREATE TABLE scenario(
|
|
||||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL, -- Name of the scenario
|
|
||||||
description TEXT NOT NULL, -- Rich text description
|
|
||||||
parent_id INTEGER REFERENCES scenario(id) -- Recursive references
|
|
||||||
-- for parent scenario
|
|
||||||
)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Data
|
|
||||||
|
|
||||||
Each data is associated with one and only one scenario. This senario
|
|
||||||
is defined by the =id=. So, each data structure who can saved in DB
|
|
||||||
must add the following lines in table définition:
|
|
||||||
|
|
||||||
#+begin_src sql
|
|
||||||
scenario_id INTEGER NOT NULL,
|
|
||||||
FOREIGN KEY(scenario_id) REFERENCES scenario(id)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
To avoid, at least, memory usage exploitation, by default, a scenario
|
|
||||||
must saved only the modified data from its parent. This contrains
|
|
||||||
require to wrap any data modification to update the data scenario id
|
|
||||||
to current scenario id in source code. In addition, we need to modify
|
|
||||||
the data loading méthode to take in considération this recursive
|
|
||||||
dependencies.
|
|
||||||
|
|
||||||
#+CAPTION: Recursive loading method
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
def rec_load(cls, db, current_scenario):
|
|
||||||
# Default case, end of recursion
|
|
||||||
if current_scenario is None:
|
|
||||||
return [] # Default value
|
|
||||||
|
|
||||||
table = db.execute(f"<MY SELECT> WHERE scenario_id = {current_scenario}")
|
|
||||||
|
|
||||||
# If no data for this scenario, recursion
|
|
||||||
if len(table) == 0:
|
|
||||||
parent_id = db.get_parent_id(current_scenario)
|
|
||||||
return cls.rec_load(db, parent_id)
|
|
||||||
|
|
||||||
# Otherelse, parse data and return...
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
With this method, modify a data in parent scenario, modify this data
|
|
||||||
in child scenario too. Unless is value has been previously modified in
|
|
||||||
the child scenario. Deny tree node modification, except for leaf.
|
|
||||||
|
|
||||||
This method work, but it dont allow to delete data un child scenarios,
|
|
||||||
because if we dont found data for this scenario we search for parent
|
|
||||||
scenario. So, we need a condition to stop recursion in case of data
|
|
||||||
deletion in child scenario. To stop the recurtion, we can use a dummy
|
|
||||||
data flag. By default, this flags is =false=, but if this flags is
|
|
||||||
=true= the data is ignored at loading.
|
|
||||||
|
|
||||||
So, we can use this flags for each data structure who can saved in DB:
|
|
||||||
|
|
||||||
#+begin_src sql
|
|
||||||
is_dummy BOOLEAN, -- True if this data as been deleted
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Modify the loading method:
|
|
||||||
|
|
||||||
#+CAPTION: Recursive loading method with possible dummy data
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
def rec_load_2(cls, db, current_scenario):
|
|
||||||
# Default case, end of recursion
|
|
||||||
if current_scenario is None:
|
|
||||||
return [] # Default value
|
|
||||||
|
|
||||||
table = db.execute(f"<MY SELECT> WHERE scenario_id = {current_scenario}")
|
|
||||||
|
|
||||||
# If no data for this scenario, recursion
|
|
||||||
if len(table) == 0:
|
|
||||||
parent_id = db.get_parent_id(current_scenario)
|
|
||||||
return cls.rec_load(db, parent_id)
|
|
||||||
|
|
||||||
for data in table:
|
|
||||||
if is_dummy(data):
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Otherelse, parse data ...
|
|
||||||
|
|
||||||
# return ...
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS:
|
|
||||||
|
|
||||||
And add a data reduction method:
|
|
||||||
|
|
||||||
#+caption: Data reduction method for data subtree
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
def reduce_change(self):
|
|
||||||
# Get the greater scenario
|
|
||||||
scenar = reduce(
|
|
||||||
lambda acc, x: max(acc, x._scenario),
|
|
||||||
self._values,
|
|
||||||
self._scenario
|
|
||||||
)
|
|
||||||
|
|
||||||
# Apply change on this subtree
|
|
||||||
self._scenario = scenar
|
|
||||||
|
|
||||||
if is_dummy(self): # There are no more subtree
|
|
||||||
self.values = []
|
|
||||||
else: # Update data subtree scenario id
|
|
||||||
for value in self._values:
|
|
||||||
value.set_scenario(self._scenario)
|
|
||||||
# Dummy data is no more necessary in this subtree
|
|
||||||
self._values = list(
|
|
||||||
filter(
|
|
||||||
lambda v: not is_dummy(v),
|
|
||||||
self._values
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Keep data id unique for all subtree
|
|
||||||
self.get_new_db_id()
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS:
|
|
||||||
|
|
||||||
#+latex: \newpage
|
|
||||||
|
|
||||||
* Prototype
|
|
||||||
|
|
||||||
** Scenario
|
|
||||||
|
|
||||||
#+name: scenario
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
class Scenario():
|
|
||||||
def __init__(self, id, name, parent):
|
|
||||||
self._id = id
|
|
||||||
self._name = name
|
|
||||||
self._parent = parent
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def create_db(cls, db):
|
|
||||||
execute(
|
|
||||||
db, """
|
|
||||||
CREATE TABLE scenario(
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
parent_id INTEGER REFERENCES scenario(id)
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def load_db(cls, db):
|
|
||||||
cur = execute(
|
|
||||||
db, f"SELECT * FROM scenario"
|
|
||||||
)
|
|
||||||
table = cur.fetchall()
|
|
||||||
|
|
||||||
new = []
|
|
||||||
for values in table:
|
|
||||||
new.append(
|
|
||||||
cls(
|
|
||||||
values[0], values[1], values[2],
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return new
|
|
||||||
|
|
||||||
def save(self, db):
|
|
||||||
sid = 'NULL' if self._parent is None else self._parent
|
|
||||||
|
|
||||||
execute(
|
|
||||||
db,
|
|
||||||
"INSERT INTO scenario (id, name, parent_id) " +
|
|
||||||
f"VALUES ({self._id}, '{self._name}', {sid})"
|
|
||||||
)
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return f"Scenario {{ {self._id}, {self._name}, parent {self._parent} }}"
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f"{self._name}({self._id})"
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: scenario
|
|
||||||
|
|
||||||
** Data
|
|
||||||
|
|
||||||
#+name: data-b
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
class B():
|
|
||||||
def __init__(self, value, scenario):
|
|
||||||
self._value = value
|
|
||||||
self._scenario = scenario
|
|
||||||
self._dummy = False
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def create_db(cls, db):
|
|
||||||
execute(db, """
|
|
||||||
CREATE TABLE b(
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
dummy_data BOOLEAN,
|
|
||||||
x INTEGER,
|
|
||||||
a_id INTEGER NOT NULL,
|
|
||||||
scenario_id INTEGER NOT NULL,
|
|
||||||
FOREIGN KEY(a_id) REFERENCES a(id),
|
|
||||||
FOREIGN KEY(scenario_id) REFERENCES scenario(id)
|
|
||||||
)
|
|
||||||
""")
|
|
||||||
|
|
||||||
def save(self, db, a_id):
|
|
||||||
execute(
|
|
||||||
db,
|
|
||||||
"INSERT INTO b (x, dummy_data, a_id, scenario_id) " +
|
|
||||||
f"VALUES ({self._value}, {self._dummy}, {a_id}, {self._scenario})"
|
|
||||||
)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def load_db(cls, db, a_id, senar):
|
|
||||||
if senar is None:
|
|
||||||
return []
|
|
||||||
|
|
||||||
cur = execute(
|
|
||||||
db,
|
|
||||||
"SELECT x, scenario_id, dummy_data FROM b " +
|
|
||||||
f"WHERE scenario_id = {senar} AND a_id = {a_id}"
|
|
||||||
)
|
|
||||||
table = cur.fetchall()
|
|
||||||
|
|
||||||
if len(table) == 0:
|
|
||||||
parent = execute(
|
|
||||||
db,
|
|
||||||
f"SELECT parent_id FROM scenario WHERE id = {senar}"
|
|
||||||
).fetchone()
|
|
||||||
|
|
||||||
return cls.load_db(db, parent[0])
|
|
||||||
|
|
||||||
new = []
|
|
||||||
for values in table:
|
|
||||||
if values[2]: # Is dummy
|
|
||||||
continue
|
|
||||||
|
|
||||||
new.append(cls(values[0], values[1]))
|
|
||||||
|
|
||||||
return new
|
|
||||||
|
|
||||||
def set_value(self, value, scenario):
|
|
||||||
self._value = value
|
|
||||||
self._scenario = scenario
|
|
||||||
|
|
||||||
def set_dummy(self, scenario):
|
|
||||||
self._scenario = scenario
|
|
||||||
self._dummy = True
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
if self._dummy:
|
|
||||||
return ""
|
|
||||||
return f"{self._value}"
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
if self._dummy:
|
|
||||||
return ""
|
|
||||||
return f"{self._value}"
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: data-b
|
|
||||||
|
|
||||||
#+name: data-a
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
class A():
|
|
||||||
def __init__(self, id, values, scenario):
|
|
||||||
self._id = id
|
|
||||||
self._values = values
|
|
||||||
self._scenario = scenario
|
|
||||||
self._dummy = False
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def create_db(cls, db):
|
|
||||||
execute(db, """
|
|
||||||
CREATE TABLE a(
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
dummy_data BOOLEAN,
|
|
||||||
scenario_id INTEGER,
|
|
||||||
FOREIGN KEY(scenario_id) REFERENCES scenario(id)
|
|
||||||
)
|
|
||||||
""")
|
|
||||||
|
|
||||||
def save(self, db):
|
|
||||||
self.reduce_change()
|
|
||||||
|
|
||||||
execute(db, f"DELETE FROM a WHERE scenario_id = {self._scenario}")
|
|
||||||
execute(
|
|
||||||
db,
|
|
||||||
"INSERT INTO a (id, dummy_data, scenario_id) " +
|
|
||||||
f"VALUES ({self._id}, {self._dummy}, {self._scenario})"
|
|
||||||
)
|
|
||||||
|
|
||||||
execute(
|
|
||||||
db,
|
|
||||||
"DELETE FROM b " +
|
|
||||||
f"WHERE scenario_id = {self._scenario} " +
|
|
||||||
f"AND a_id = {self._id}"
|
|
||||||
)
|
|
||||||
|
|
||||||
for value in self._values:
|
|
||||||
value.save(db, self._id)
|
|
||||||
|
|
||||||
def reduce_change(self):
|
|
||||||
diff_scenar = reduce(
|
|
||||||
lambda acc, x: max(acc, x._scenario),
|
|
||||||
self._values,
|
|
||||||
self._scenario
|
|
||||||
)
|
|
||||||
print(f" ~> Reduce: {self._scenario} to {diff_scenar}")
|
|
||||||
self._scenario = diff_scenar
|
|
||||||
|
|
||||||
# Reduce new scenario value on each value
|
|
||||||
for value in self._values:
|
|
||||||
value._scenario = self._scenario
|
|
||||||
|
|
||||||
# Delete useless dummy data
|
|
||||||
self._values = list(
|
|
||||||
filter(
|
|
||||||
lambda v: not v._dummy,
|
|
||||||
self._values
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# HACK: keep id unique
|
|
||||||
self._id = self._id * 100 + diff_scenar
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def load_db(cls, db, senar):
|
|
||||||
if senar is None:
|
|
||||||
return []
|
|
||||||
|
|
||||||
cur = execute(
|
|
||||||
db,
|
|
||||||
f"SELECT id, scenario_id, dummy_data FROM a WHERE scenario_id = {senar}"
|
|
||||||
)
|
|
||||||
table = cur.fetchall()
|
|
||||||
|
|
||||||
if len(table) == 0:
|
|
||||||
parent = execute(
|
|
||||||
db,
|
|
||||||
f"SELECT parent_id FROM scenario WHERE id = {senar}"
|
|
||||||
).fetchone()
|
|
||||||
|
|
||||||
return cls.load_db(db, parent[0])
|
|
||||||
|
|
||||||
new = []
|
|
||||||
for values in table:
|
|
||||||
if values[2]:
|
|
||||||
continue
|
|
||||||
|
|
||||||
bb = B.load_db(db, values[0], senar)
|
|
||||||
new.append(cls(values[0], bb, values[1]))
|
|
||||||
|
|
||||||
return new
|
|
||||||
|
|
||||||
def set_dummy(self, scenario):
|
|
||||||
self._scenario = scenario
|
|
||||||
self._dummy = True
|
|
||||||
|
|
||||||
def add(self, b):
|
|
||||||
self._values.append(b)
|
|
||||||
|
|
||||||
def delete(self, index, scenario):
|
|
||||||
self._values[index].set_dummy(scenario)
|
|
||||||
self._scenario = scenario
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
if self._dummy:
|
|
||||||
return "{ }"
|
|
||||||
return f"{{ {self._values}, ({self._scenario}) }}"
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
if self._dummy:
|
|
||||||
return "{ }"
|
|
||||||
return f"{{ {list(map(str, self._values))}, ({self._scenario}) }}"
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: data-a
|
|
||||||
|
|
||||||
** Full prototype
|
|
||||||
|
|
||||||
#+begin_src python :python python3 :results output :exports both :noweb yes :cache yes
|
|
||||||
from functools import reduce
|
|
||||||
|
|
||||||
def execute(db, query):
|
|
||||||
# print(query)
|
|
||||||
return db.execute(query)
|
|
||||||
|
|
||||||
def get_tree(db):
|
|
||||||
from treelib import Node, Tree
|
|
||||||
|
|
||||||
tree = Tree()
|
|
||||||
|
|
||||||
for senar in db.execute("SELECT * FROM scenario").fetchall():
|
|
||||||
if senar[1] is None:
|
|
||||||
tree.create_node(
|
|
||||||
str(Scenario(senar[0], senar[1], senar[2])) +
|
|
||||||
" : " + str(A.load_db(db, senar[0])[0]),
|
|
||||||
senar[0]
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
tree.create_node(
|
|
||||||
str(Scenario(senar[0], senar[1], senar[2])) +
|
|
||||||
" : " + str(A.load_db(db, senar[0])[0]),
|
|
||||||
senar[0],
|
|
||||||
parent=senar[2]
|
|
||||||
)
|
|
||||||
|
|
||||||
return tree
|
|
||||||
|
|
||||||
### --- Scenario ---
|
|
||||||
<<scenario>>
|
|
||||||
|
|
||||||
### --- class B ---
|
|
||||||
<<data-b>>
|
|
||||||
|
|
||||||
### --- class A ---
|
|
||||||
<<data-a>>
|
|
||||||
|
|
||||||
### --- Script ---
|
|
||||||
import sqlite3
|
|
||||||
import pprint
|
|
||||||
|
|
||||||
pp = pprint.PrettyPrinter(width=79, compact=True, depth=6)
|
|
||||||
|
|
||||||
with sqlite3.connect(":memory:") as db:
|
|
||||||
cur = db.cursor()
|
|
||||||
|
|
||||||
Scenario.create_db(cur)
|
|
||||||
A.create_db(cur)
|
|
||||||
B.create_db(cur)
|
|
||||||
|
|
||||||
print("--- Default scenario (s0) ---")
|
|
||||||
|
|
||||||
# One scenario
|
|
||||||
|
|
||||||
s0 = Scenario(0, "s0", None)
|
|
||||||
a0 = A(
|
|
||||||
1,
|
|
||||||
[
|
|
||||||
B(0, s0._id),
|
|
||||||
B(1, s0._id),
|
|
||||||
B(2, s0._id),
|
|
||||||
],
|
|
||||||
s0._id
|
|
||||||
)
|
|
||||||
|
|
||||||
s0.save(cur)
|
|
||||||
a0.save(cur)
|
|
||||||
|
|
||||||
print("--- New scenario (s1) -- copy without modification ---")
|
|
||||||
|
|
||||||
# New scenario
|
|
||||||
|
|
||||||
s1 = Scenario(1, "s1", s0._id)
|
|
||||||
s1.save(cur)
|
|
||||||
|
|
||||||
print("--- New scenario (s2) -- data modification ---")
|
|
||||||
|
|
||||||
# New scenario 2 with data
|
|
||||||
|
|
||||||
s2 = Scenario(2, "s2", s0._id)
|
|
||||||
s2.save(cur)
|
|
||||||
|
|
||||||
a2 = a0
|
|
||||||
bb = list(map(
|
|
||||||
lambda b: b.set_value(b._value + 1, s2._id),
|
|
||||||
a2._values
|
|
||||||
))
|
|
||||||
|
|
||||||
a2.save(cur)
|
|
||||||
|
|
||||||
print("--- New scenario (s3) -- delete data ---")
|
|
||||||
|
|
||||||
# New scenario 3 with data
|
|
||||||
|
|
||||||
s3 = Scenario(3, "s3", s0._id)
|
|
||||||
s3.save(cur)
|
|
||||||
|
|
||||||
a3 = A.load_db(cur, s3._id)[0]
|
|
||||||
a3._values[0].set_dummy(s3._id)
|
|
||||||
a3.save(cur)
|
|
||||||
|
|
||||||
print("--- New scenario (s4) -- new data ---")
|
|
||||||
|
|
||||||
s4 = Scenario(4, "s4", s3._id)
|
|
||||||
s4.save(cur)
|
|
||||||
|
|
||||||
a4 = A.load_db(cur, s3._id)[0]
|
|
||||||
a4.add(B(666, s4._id))
|
|
||||||
a4.save(cur)
|
|
||||||
|
|
||||||
print("--- Scenario tree ---")
|
|
||||||
|
|
||||||
tree = get_tree(db)
|
|
||||||
print(tree)
|
|
||||||
|
|
||||||
print("--- Modify s0 data ---")
|
|
||||||
|
|
||||||
aa = A.load_db(db, s0._id)[0]
|
|
||||||
bb = list(map(
|
|
||||||
lambda b: b.set_value(b._value * 100 - 1, s0._id),
|
|
||||||
aa._values
|
|
||||||
))
|
|
||||||
aa.save(db)
|
|
||||||
|
|
||||||
print("--- Scenario tree ---")
|
|
||||||
|
|
||||||
tree = get_tree(db)
|
|
||||||
print(tree)
|
|
||||||
|
|
||||||
print("--- DB ---")
|
|
||||||
|
|
||||||
ss = db.execute("SELECT * FROM scenario").fetchall()
|
|
||||||
print(f"+ scenario ({len(ss)}):")
|
|
||||||
pp.pprint(ss)
|
|
||||||
|
|
||||||
aa = db.execute("SELECT * FROM a").fetchall()
|
|
||||||
print(f"+ a ({len(aa)}):")
|
|
||||||
pp.pprint(aa)
|
|
||||||
|
|
||||||
bb = db.execute("SELECT * FROM b").fetchall()
|
|
||||||
print(f"+ b ({len(bb)}):")
|
|
||||||
pp.pprint(bb)
|
|
||||||
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS[96c84f23be557425ae2822ef7f174175ef69f9b9]:
|
|
||||||
#+begin_example
|
|
||||||
--- Default scenario (s0) ---
|
|
||||||
~> Reduce: 0 to 0
|
|
||||||
--- New scenario (s1) -- copy without modification ---
|
|
||||||
--- New scenario (s2) -- data modification ---
|
|
||||||
~> Reduce: 0 to 2
|
|
||||||
--- New scenario (s3) -- delete data ---
|
|
||||||
~> Reduce: 0 to 3
|
|
||||||
--- New scenario (s4) -- new data ---
|
|
||||||
~> Reduce: 3 to 4
|
|
||||||
--- Scenario tree ---
|
|
||||||
s0(0) : { ['0', '1', '2'], (0) }
|
|
||||||
├── s1(1) : { ['0', '1', '2'], (0) }
|
|
||||||
├── s2(2) : { ['1', '2', '3'], (2) }
|
|
||||||
└── s3(3) : { ['1', '2'], (3) }
|
|
||||||
└── s4(4) : { ['1', '2', '666'], (4) }
|
|
||||||
|
|
||||||
--- Modify s0 data ---
|
|
||||||
~> Reduce: 0 to 0
|
|
||||||
--- Scenario tree ---
|
|
||||||
s0(0) : { ['-1', '99', '199'], (0) }
|
|
||||||
├── s1(1) : { ['-1', '99', '199'], (0) }
|
|
||||||
├── s2(2) : { ['1', '2', '3'], (2) }
|
|
||||||
└── s3(3) : { ['1', '2'], (3) }
|
|
||||||
└── s4(4) : { ['1', '2', '666'], (4) }
|
|
||||||
|
|
||||||
--- DB ---
|
|
||||||
+ scenario (5):
|
|
||||||
[(0, 's0', None), (1, 's1', 0), (2, 's2', 0), (3, 's3', 0), (4, 's4', 3)]
|
|
||||||
+ a (4):
|
|
||||||
[(10000, 0, 0), (10002, 0, 2), (10003, 0, 3), (1000304, 0, 4)]
|
|
||||||
+ b (14):
|
|
||||||
[(1, 0, 0, 100, 0), (2, 0, 1, 100, 0), (3, 0, 2, 100, 0), (4, 0, 1, 10002, 2),
|
|
||||||
(5, 0, 2, 10002, 2), (6, 0, 3, 10002, 2), (7, 0, 1, 10003, 3),
|
|
||||||
(8, 0, 2, 10003, 3), (9, 0, 1, 1000304, 4), (10, 0, 2, 1000304, 4),
|
|
||||||
(11, 0, 666, 1000304, 4), (12, 0, -1, 10000, 0), (13, 0, 99, 10000, 0),
|
|
||||||
(14, 0, 199, 10000, 0)]
|
|
||||||
#+end_example
|
|
||||||
@@ -1,525 +0,0 @@
|
|||||||
# presentation.org -- Pamhyr
|
|
||||||
# Copyright (C) 2023 INRAE
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
#+STARTUP: indent hideblocks content beamer
|
|
||||||
|
|
||||||
#+TITLE: \textbf{Pamhyr2}
|
|
||||||
#+SUBTITLE: Scenarios managements
|
|
||||||
|
|
||||||
# #+AUTHOR: Pierre-Antoine Rouby
|
|
||||||
#+LATEX_HEADER: \author[Pierre-Antoine Rouby]{\textbf{Pierre-Antoine Rouby}}
|
|
||||||
#+EMAIL: pierre-antoine.rouby@inrae.fr
|
|
||||||
#+INSTITUTE: INRAE Lyon-Villerbanne, teams River Hydraulics
|
|
||||||
#+LATEX_HEADER: \institute{INRAE Lyon-Villerbanne, River Hydraulics team}
|
|
||||||
#+DATE: 9th November
|
|
||||||
|
|
||||||
#+KEYWORDS: g ui, hydraulics, sedimentary, hydro-sedimentary, 1D modelling, freesoftware, foss
|
|
||||||
|
|
||||||
#+OPTIONS: H:2 toc:t num:t author:nil
|
|
||||||
#+LATEX_CLASS: beamer
|
|
||||||
#+LATEX_CLASS_OPTIONS: [slideopt,A4,showboxes,svgnames,aspectratio=169]
|
|
||||||
# #+LATEX_CLASS_OPTIONS: [presentation]
|
|
||||||
#+BEAMER_THEME: default
|
|
||||||
#+COLUMNS: %45ITEM %10BEAMER_ENV(Env) %10BEAMER_ACT(Act) %4BEAMER_COL(Col)
|
|
||||||
|
|
||||||
#+LANGUAGE: fr
|
|
||||||
#+LATEX_HEADER: \usepackage[frenchb]{babel}
|
|
||||||
|
|
||||||
#+BEGIN_SRC emacs-lisp :results silent :exports none
|
|
||||||
(setq org-latex-pdf-process (list
|
|
||||||
"latexmk -pdflatex='lualatex -shell-escape -interaction nonstopmode' -pdf -f %f"))
|
|
||||||
|
|
||||||
(add-to-list 'org-latex-packages-alist '("" "minted"))
|
|
||||||
(setq org-latex-listings 'minted)
|
|
||||||
(setq org-src-fontify-natively t)
|
|
||||||
|
|
||||||
(org-add-link-type
|
|
||||||
"cite" 'ebib
|
|
||||||
(lambda (path desc format)
|
|
||||||
(cond
|
|
||||||
((eq format 'html)
|
|
||||||
(format "(<cite>%s</cite>)" path))
|
|
||||||
((eq format 'text)
|
|
||||||
(format "[%s]" path))
|
|
||||||
((eq format 'latex)
|
|
||||||
(if (or (not desc) (equal 0 (search "cite:" desc)))
|
|
||||||
(format "\\cite{%s}" path)
|
|
||||||
(format "\\cite[%s][%s]{%s}"
|
|
||||||
(cadr (split-string desc ";"))
|
|
||||||
(car (split-string desc ";")) path))))))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
# Wrapper
|
|
||||||
#+NAME: attr_wrap
|
|
||||||
#+HEADER: :var width="\\textwidth"
|
|
||||||
#+HEADER: :var caption=""
|
|
||||||
#+HEADER: :var smallcaption=""
|
|
||||||
#+HEADER: :var name=""
|
|
||||||
#+HEADER: :var data=""
|
|
||||||
#+HEADER: :var float="nil"
|
|
||||||
#+BEGIN_SRC sh :results output :exports none
|
|
||||||
echo "#+CAPTION[$smallcaption]: $caption"
|
|
||||||
echo "#+NAME: $name"
|
|
||||||
echo "#+ATTR_LATEX: :width $width :float $float"
|
|
||||||
echo "$data"
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
#+LATEX_HEADER: \setbeamertemplate{footline}[frame number]
|
|
||||||
#+LATEX_HEADER: \setbeamertemplate{headline}{}
|
|
||||||
#+LATEX_HEADER: \usepackage{multirow}
|
|
||||||
#+LATEX_HEADER: \usepackage{fontawesome5}
|
|
||||||
#+LATEX_HEADER: \usepackage{tcolorbox}
|
|
||||||
#+LATEX_HEADER: \usepackage{tikz}
|
|
||||||
|
|
||||||
#+LATEX_HEADER: \logo{\includegraphics[width=.1\textwidth]{../../../src/View/ui/ressources/Logo-INRAE.png}}
|
|
||||||
|
|
||||||
#+LATEX_HEADER: \newcommand{\R}[1]{\rotatebox[origin=c]{90}{#1}}
|
|
||||||
|
|
||||||
# Beamer colors
|
|
||||||
#+LATEX_HEADER: \setbeamersize{text margin left=0.5cm,text margin right=0.5cm}
|
|
||||||
#+LATEX_HEADER: \setbeamerfont{alerted text}{series=\bfseries}
|
|
||||||
#+LATEX_HEADER: \setbeamerfont{example text}{series=\bfseries}
|
|
||||||
|
|
||||||
#+LATEX_HEADER: \definecolor{inrae_1}{RGB}{102,193,191}
|
|
||||||
#+LATEX_HEADER: \definecolor{inrae_2}{RGB}{0,150,152}
|
|
||||||
#+LATEX_HEADER: \definecolor{inrae_3}{RGB}{39,86,98}
|
|
||||||
|
|
||||||
#+LATEX_HEADER: \setbeamercolor{alerted text}{fg=inrae_1}
|
|
||||||
#+LATEX_HEADER: \setbeamercolor{structure}{fg=inrae_2}
|
|
||||||
#+LATEX_HEADER: \setbeamercolor{normal text}{fg=inrae_3}
|
|
||||||
#+LATEX_HEADER: \setbeamercolor*{author}{fg=inrae_3}
|
|
||||||
|
|
||||||
#+LATEX_HEADER: \usepackage[absolute,showboxes,overlay]{textpos}
|
|
||||||
|
|
||||||
#+LATEX_HEADER: \TPshowboxesfalse
|
|
||||||
#+LATEX_HEADER: \textblockorigin{5mm}{0mm}
|
|
||||||
|
|
||||||
# Biblio
|
|
||||||
#+LATEX_HEADER: \usepackage{natbib}
|
|
||||||
# #+LATEX_HEADER: \bibliographystyle{apalike}
|
|
||||||
#+LATEX_HEADER: \setbeamertemplate{bibliography item}{}
|
|
||||||
#+LATEX_HEADER: \renewcommand\bibfont{\scriptsize}
|
|
||||||
#+LATEX_HEADER: \setbeamertemplate{frametitle continuation}[from second]
|
|
||||||
#+LATEX_HEADER: \setbeamercolor*{bibliography entry title}{fg=inrae_3}
|
|
||||||
#+LATEX_HEADER: \setbeamercolor*{bibliography entry author}{fg=inrae_3}
|
|
||||||
#+LATEX_HEADER: \setbeamercolor*{bibliography entry location}{fg=inrae_3}
|
|
||||||
|
|
||||||
#+LATEX_HEADER: \usepackage{bbding}
|
|
||||||
#+LATEX_HEADER: \usepackage{pdfpages}
|
|
||||||
|
|
||||||
# Renew title page
|
|
||||||
#+LATEX_HEADER: \defbeamertemplate*{title page}{customized}[1][]
|
|
||||||
#+LATEX_HEADER: {
|
|
||||||
# #+LATEX_HEADER: {
|
|
||||||
# #+LATEX_HEADER: \usebeamerfont{date}\usebeamercolor[fg]{date}
|
|
||||||
# #+LATEX_HEADER: \tikz[overlay,remember picture]
|
|
||||||
# #+LATEX_HEADER: \node[xshift=-1cm,yshift=-1cm,text width=10cm] at (current page.north east) {
|
|
||||||
# #+LATEX_HEADER: 7$^{th}$ International Conference\\
|
|
||||||
# #+LATEX_HEADER: 8TH-10TH November\\
|
|
||||||
# #+LATEX_HEADER: EDF Lab - CHATOU, FRANCE
|
|
||||||
# #+LATEX_HEADER: }
|
|
||||||
# #+LATEX_HEADER: }
|
|
||||||
#+LATEX_HEADER: {
|
|
||||||
#+LATEX_HEADER: \usebeamerfont{title}\inserttitle\par
|
|
||||||
#+LATEX_HEADER: \usebeamerfont{title}\usebeamercolor[fg]{title}
|
|
||||||
#+LATEX_HEADER: }
|
|
||||||
#+LATEX_HEADER: \bigskip
|
|
||||||
#+LATEX_HEADER: \begin{center}
|
|
||||||
#+LATEX_HEADER: \usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}
|
|
||||||
#+LATEX_HEADER: {
|
|
||||||
#+LATEX_HEADER: \LARGE\insertsubtitle\par
|
|
||||||
#+LATEX_HEADER: }
|
|
||||||
#+LATEX_HEADER: \bigskip
|
|
||||||
#+LATEX_HEADER: \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor\par
|
|
||||||
#+LATEX_HEADER: \bigskip
|
|
||||||
#+LATEX_HEADER: \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute\par
|
|
||||||
#+LATEX_HEADER: \bigskip
|
|
||||||
#+LATEX_HEADER: \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate\par
|
|
||||||
#+LATEX_HEADER: \usebeamercolor[fg]{titlegraphic}\inserttitlegraphic
|
|
||||||
#+LATEX_HEADER: \end{center}
|
|
||||||
#+LATEX_HEADER: }
|
|
||||||
|
|
||||||
# #+LATEX_HEADER: \newcommand{\tred}[1]{\textcolor{rouge_inrae}{#1}}
|
|
||||||
|
|
||||||
#+TODO: TODO WIP TOREVIEW | DONE
|
|
||||||
|
|
||||||
#+MACRO: pamhyr \textsc{PAMHyR}
|
|
||||||
#+MACRO: pamhyr2 \textsc{Pamhyr2}
|
|
||||||
|
|
||||||
#+MACRO: pause \pause
|
|
||||||
#+MACRO: framebreak \framebreak
|
|
||||||
#+MACRO: no
|
|
||||||
# #+MACRO: OK \checkmark
|
|
||||||
#+MACRO: OK \faIcon{check}
|
|
||||||
#+MACRO: bf \textbf{$1}
|
|
||||||
|
|
||||||
# #+latex: \frame{\tocpage}
|
|
||||||
|
|
||||||
* Problématique
|
|
||||||
|
|
||||||
** Problématique
|
|
||||||
|
|
||||||
*** Utilisateur
|
|
||||||
|
|
||||||
- Définire une version modifier de l'étude (changement dans les
|
|
||||||
données)
|
|
||||||
- Comparé des résultats entre une variante et l'étude
|
|
||||||
|
|
||||||
{{{pause}}}
|
|
||||||
|
|
||||||
**** COMMENT Développeur
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 0.5
|
|
||||||
:BEAMER_ENV: block
|
|
||||||
:END:
|
|
||||||
|
|
||||||
- Un unique fichier
|
|
||||||
- Limité la duplication de donnée à sauvegarder
|
|
||||||
- Garder une bonne cohérence entre données et résultats
|
|
||||||
|
|
||||||
{{{pause}}}
|
|
||||||
|
|
||||||
*** Scénarios
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 1
|
|
||||||
:BEAMER_ENV: definition
|
|
||||||
:END:
|
|
||||||
|
|
||||||
Un scénario est une variate d'une étude.
|
|
||||||
|
|
||||||
** Problématique -- Avancer
|
|
||||||
|
|
||||||
*** Utilisateur
|
|
||||||
|
|
||||||
- Définire une version modifier d'un senarios
|
|
||||||
- Comparé des résultats entre plusieurs senarios
|
|
||||||
|
|
||||||
{{{pause}}}
|
|
||||||
|
|
||||||
**** COMMENT Développeur
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 0.5
|
|
||||||
:BEAMER_ENV: block
|
|
||||||
:END:
|
|
||||||
|
|
||||||
- Un unique fichier
|
|
||||||
- Limité la duplication de donnée à sauvegarder
|
|
||||||
- Garder une bonne cohérence entre données et résultats
|
|
||||||
|
|
||||||
{{{pause}}}
|
|
||||||
|
|
||||||
*** Scénarios
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 1
|
|
||||||
:BEAMER_ENV: definition
|
|
||||||
:END:
|
|
||||||
|
|
||||||
Un scénario peut être l'étude ou une variate d'un autre scénario.
|
|
||||||
|
|
||||||
** Problématique -- Encore plus avancer
|
|
||||||
|
|
||||||
*** Utilisateur
|
|
||||||
|
|
||||||
- Définire un ensemble fini de variante correspondant a un ensemble de
|
|
||||||
valeur pour un(des) paramètre(s) et executer un solveur sur
|
|
||||||
l'ensemble des variantes
|
|
||||||
- Pouvoir comparé des metrics sur un ensemble de résultats trop grand
|
|
||||||
pour une comparaisont à la mains
|
|
||||||
|
|
||||||
{{{pause}}}
|
|
||||||
|
|
||||||
**** COMMENT Développeur
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 0.5
|
|
||||||
:BEAMER_ENV: block
|
|
||||||
:END:
|
|
||||||
|
|
||||||
- Un unique fichier
|
|
||||||
- Limité la duplication de donnée à sauvegarder
|
|
||||||
- Garder une bonne cohérence entre données et résultats
|
|
||||||
|
|
||||||
{{{pause}}}
|
|
||||||
|
|
||||||
*** Scénarios
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 1
|
|
||||||
:BEAMER_ENV: definition
|
|
||||||
:END:
|
|
||||||
|
|
||||||
Un scénario peut être l'étude, une variate d'un scénarios ou un
|
|
||||||
ensemble fini de variantes d'un scénarios.
|
|
||||||
|
|
||||||
** Problématique -- Encore plus plus avancer
|
|
||||||
|
|
||||||
*** Utilisateur
|
|
||||||
|
|
||||||
- Définire un ensemble fini de variante correspondant a un ensemble de
|
|
||||||
valeur pour un(des) paramètre(s) et faire un nombre fini de tirage
|
|
||||||
aléatoire dans ces paramètre pour executer un solveur ces paramètres
|
|
||||||
- Pouvoir comparé des metrics sur un ensemble de résultats trop grand
|
|
||||||
pour une comparaisont à la mains
|
|
||||||
|
|
||||||
{{{pause}}}
|
|
||||||
|
|
||||||
*** Scénarios
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 1
|
|
||||||
:BEAMER_ENV: definition
|
|
||||||
:END:
|
|
||||||
|
|
||||||
Un scénario peut être l'étude, une variate d'un scénarios ou un
|
|
||||||
ensemble fini ou un tirage aléatoire dans un ensemble de variantes
|
|
||||||
d'un scénarios.
|
|
||||||
|
|
||||||
** Problématique -- Développeur
|
|
||||||
|
|
||||||
*** Développeur
|
|
||||||
|
|
||||||
- Permetre a l'utilisateur de *garder une bonne cohérence entre
|
|
||||||
données et résultats* de façon claire
|
|
||||||
- Permetre a l'utilisateur de *géré les scénarios* de façon claire
|
|
||||||
(représentation graphique)
|
|
||||||
- Garder *un unique fichier* (=.pamhyr=)
|
|
||||||
- *Limité la duplication* de donnée à sauvegarder
|
|
||||||
- Permetre à l'utilisateur de garder les *résultats pertinant* sans
|
|
||||||
exploser la mémoire de l'ordinateur
|
|
||||||
|
|
||||||
* Proposition
|
|
||||||
|
|
||||||
** Proposition -- Concept
|
|
||||||
|
|
||||||
*** {{{no}}}
|
|
||||||
\vspace{-1.2cm}
|
|
||||||
**** Deux type de scénarios
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 0.5
|
|
||||||
:BEAMER_ENV: block
|
|
||||||
:END:
|
|
||||||
|
|
||||||
- Scénarios simple
|
|
||||||
- Scénarios d'éxecution d'ensemble
|
|
||||||
|
|
||||||
{{{pause}}}
|
|
||||||
|
|
||||||
**** Scénarios simple
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 0.5
|
|
||||||
:BEAMER_ENV: block
|
|
||||||
:END:
|
|
||||||
|
|
||||||
Est composer:
|
|
||||||
- d'un identifiant unique
|
|
||||||
- d'un nom (définie par l'utilisateur)
|
|
||||||
- d'une description (définie par l'utilisateur)
|
|
||||||
- d'un parent (définie par l'utilisateur)
|
|
||||||
|
|
||||||
{{{pause}}}
|
|
||||||
|
|
||||||
\vspace{-0.5cm}
|
|
||||||
|
|
||||||
*** Scénarios d'ensembles
|
|
||||||
|
|
||||||
**** {{{no}}}
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 0.5
|
|
||||||
:BEAMER_ENV: block
|
|
||||||
:END:
|
|
||||||
\vspace{-1cm}
|
|
||||||
Est composer:
|
|
||||||
- d'un identifiant unique
|
|
||||||
- d'un nom (définie par l'utilisateur)
|
|
||||||
- d'une description (définie par l'utilisateur)
|
|
||||||
- d'un parent (définie par l'utilisateur)
|
|
||||||
- d'un ou plusieurs ensemble de valeur
|
|
||||||
|
|
||||||
**** {{{no}}}
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 0.5
|
|
||||||
:BEAMER_ENV: block
|
|
||||||
:END:
|
|
||||||
\vspace{-0.5cm}
|
|
||||||
Un ensemble de valeurs est definie par:
|
|
||||||
- une valeurs de départ
|
|
||||||
- une valeurs de fin
|
|
||||||
- un pas de valeur
|
|
||||||
- un élément d'origine (élément définie dans l'étude)
|
|
||||||
- une fonctions (modification de l'élément à l'aide d'une valeur de
|
|
||||||
l'ensemble)
|
|
||||||
|
|
||||||
** Proposition -- Limitation
|
|
||||||
|
|
||||||
*** Scénarios simple
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 0.5
|
|
||||||
:BEAMER_ENV: block
|
|
||||||
:END:
|
|
||||||
|
|
||||||
Si le scénarios est le *parent d'un autre scénarios*, il ne *peut plus
|
|
||||||
être modifier* sans risquer des comportement difficilement
|
|
||||||
comprehensible pour l'utilisateur.
|
|
||||||
|
|
||||||
{{{pause}}}
|
|
||||||
|
|
||||||
*** Scénarios d'ensembles
|
|
||||||
:PROPERTIES:
|
|
||||||
:BEAMER_COL: 0.5
|
|
||||||
:BEAMER_ENV: block
|
|
||||||
:END:
|
|
||||||
|
|
||||||
- Un scénarios d'ensemble *ne peut pas être parent* d'un autre
|
|
||||||
scénarios
|
|
||||||
- Le nombre d'exécution peut très rapidement grossir
|
|
||||||
|
|
||||||
** Proposition -- Affichage
|
|
||||||
|
|
||||||
#+name: graph-scenarios
|
|
||||||
#+header: :results drawer
|
|
||||||
#+header: :exports results
|
|
||||||
#+header: :post attr_wrap(width="7cm", data=*this*, name="graph-scenarios", caption="Exemple of scenarios graph", float="t")
|
|
||||||
#+begin_src dot :file "images/graph-scenarios.png" :cache no
|
|
||||||
digraph {
|
|
||||||
bgcolor="transparent";
|
|
||||||
node[colorscheme=pastel19,shape=ellipse,style="filled",fillcolor=9];
|
|
||||||
|
|
||||||
b[fillcolor=2];
|
|
||||||
|
|
||||||
aa[shape=box,fillcolor=2];
|
|
||||||
aa2[label="aa'", shape=box, fillcolor=2];
|
|
||||||
ad[shape=box, fillcolor=2];
|
|
||||||
re[shape=box, fillcolor=2];
|
|
||||||
rf[shape=box, fillcolor=2];
|
|
||||||
|
|
||||||
default -> a;
|
|
||||||
default -> b;
|
|
||||||
default -> c;
|
|
||||||
|
|
||||||
a -> aa;
|
|
||||||
a -> aa2;
|
|
||||||
a -> f -> rf;
|
|
||||||
c -> d -> ad;
|
|
||||||
c -> e -> re;
|
|
||||||
}
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS[80ed2484b9cc71143f800ff23c10846fd04697c3]: graph-scenarios
|
|
||||||
:results:
|
|
||||||
#+CAPTION[]: Exemple of scenarios graph
|
|
||||||
#+NAME: graph-scenarios
|
|
||||||
#+ATTR_LATEX: :width 7cm :float t
|
|
||||||
[[file:images/graph-scenarios.png]]
|
|
||||||
:end:
|
|
||||||
|
|
||||||
* Solution technique
|
|
||||||
|
|
||||||
** Technique -- scénarios
|
|
||||||
|
|
||||||
#+begin_src sql
|
|
||||||
CREATE TABLE scenario(
|
|
||||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL, -- Name of the scenario
|
|
||||||
description TEXT NOT NULL, -- Rich text description
|
|
||||||
parent_id INTEGER REFERENCES scenario(id) -- Recursive references
|
|
||||||
-- for parent scenario
|
|
||||||
)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Technique -- Données -- Enregistrement
|
|
||||||
|
|
||||||
#+begin_src sql
|
|
||||||
-- Unique ID (Must be unused, to delete)
|
|
||||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
||||||
-- New ID (not unique)
|
|
||||||
pamhyr_id INTEGER NOT NULL,
|
|
||||||
-- (Optional) Flag for set there is no data in this scenario and
|
|
||||||
-- ignore parent scenario
|
|
||||||
dummy BOOLEAN NOT NULL,
|
|
||||||
-- Corresponding scenario
|
|
||||||
scenario_id INTEGER NOT NULL,
|
|
||||||
PRIMARY KEY(pamhyr_id, scenario_id),
|
|
||||||
FOREIGN KEY(scenario_id) REFERENCES scenario(id),
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Technique -- Données -- Chargement
|
|
||||||
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
def load(cls, db, current_scenario):
|
|
||||||
# Default case, end of recursion
|
|
||||||
if current_scenario is None:
|
|
||||||
return [] # Default value
|
|
||||||
|
|
||||||
table = db.execute(f"<MY SELECT> WHERE scenario_id = {current_scenario}")
|
|
||||||
|
|
||||||
# If no data for this scenario, recursion
|
|
||||||
if len(table) == 0:
|
|
||||||
parent_id = db.get_parent_id(current_scenario)
|
|
||||||
return cls.load(db, parent_id)
|
|
||||||
|
|
||||||
# Otherelse, parse data and return...
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Technique -- Données -- Modification
|
|
||||||
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
def set_modified(self, current_scenario):
|
|
||||||
self.scenario = current_scenario
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src python :python python3 :results output :noweb yes
|
|
||||||
def delete(self, current_scenario):
|
|
||||||
self.deleted = True
|
|
||||||
self.set_modified(current_scenario)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Technique -- Exécution d'ensemble
|
|
||||||
|
|
||||||
#+begin_src sql
|
|
||||||
CREATE TABLE range_set(
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
start REAL NOT NULL, -- Range start
|
|
||||||
end REAL NOT NULL, -- Range end
|
|
||||||
step REAL NOT NULL, -- Range step
|
|
||||||
generator_name TEXT NOT NULL, -- Generator function name (ex:
|
|
||||||
-- 'minor_strickler')
|
|
||||||
original_data_id INTEGER, -- (optional) Ref to data who apply
|
|
||||||
-- this range (ex: a strickler id)
|
|
||||||
scenario_id INTEGER NOT NULL,
|
|
||||||
FOREIGN KEY(scenario_id) REFERENCES scenario(id)
|
|
||||||
)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
* Sauvegarde des résultats
|
|
||||||
|
|
||||||
** Sauvegarde des résultats
|
|
||||||
|
|
||||||
*** Scénarios simple
|
|
||||||
|
|
||||||
Sauvegarde d'un seul résultats complet par scénarios (et par solver).
|
|
||||||
|
|
||||||
*** Scénarios d'ensemble
|
|
||||||
|
|
||||||
Sauvegarde de metrics récupéré sur un ensemble de résultats (pas de
|
|
||||||
sauvegarde de tous les résultats) ou certain résultats particuliers.
|
|
||||||
|
|
||||||
* Question & remarque
|
|
||||||
|
|
||||||
** Question & remarque
|
|
||||||
|
|
||||||
- Solution satisfaisante ?
|
|
||||||
- Cas d'usage intéressent non couvert ?
|
|
||||||
- Contre exemple ?
|
|
||||||
- Meilleur solution ?
|
|
||||||
|
Before Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 196 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 20 KiB |
@@ -1,692 +0,0 @@
|
|||||||
diff --git a/packages/linux.sh b/packages/linux.sh
|
|
||||||
index 215047e..a19bfb6 100755
|
|
||||||
--- a/packages/linux.sh
|
|
||||||
+++ b/packages/linux.sh
|
|
||||||
@@ -76,11 +76,11 @@ mv ../pamhyr-src.tar.gz ./
|
|
||||||
|
|
||||||
echo " *** MAKE BIN PACKAGE"
|
|
||||||
|
|
||||||
-OLD_PWD=$PWD
|
|
||||||
-cd dist/
|
|
||||||
-tar --xz -cf pamhyr-gnulinux-amd64.tar.xz pamhyr --checkpoint=.100
|
|
||||||
-cd $OLD_PWD
|
|
||||||
+# OLD_PWD=$PWD
|
|
||||||
+# cd dist/
|
|
||||||
+# tar --xz -cf pamhyr-gnulinux-amd64.tar.xz pamhyr --checkpoint=.100
|
|
||||||
+# cd $OLD_PWD
|
|
||||||
|
|
||||||
-mv dist/pamhyr-gnulinux-amd64.tar.xz ./
|
|
||||||
+# mv dist/pamhyr-gnulinux-amd64.tar.xz ./
|
|
||||||
|
|
||||||
echo " *** DONE"
|
|
||||||
diff --git a/src/Model/Friction/Friction.py b/src/Model/Friction/Friction.py
|
|
||||||
index 18167a8..5bf2302 100644
|
|
||||||
--- a/src/Model/Friction/Friction.py
|
|
||||||
+++ b/src/Model/Friction/Friction.py
|
|
||||||
@@ -170,6 +170,7 @@ class Friction(SQLSubModel):
|
|
||||||
@begin_strickler.setter
|
|
||||||
def begin_strickler(self, strickler):
|
|
||||||
self._begin_strickler = strickler
|
|
||||||
+ self._end_strickler = strickler # HACK: Only one Strickler
|
|
||||||
self._status.modified()
|
|
||||||
|
|
||||||
@property
|
|
||||||
diff --git a/src/Model/Stricklers/Stricklers.py b/src/Model/Stricklers/Stricklers.py
|
|
||||||
index baa484f..a5670d2 100644
|
|
||||||
--- a/src/Model/Stricklers/Stricklers.py
|
|
||||||
+++ b/src/Model/Stricklers/Stricklers.py
|
|
||||||
@@ -38,7 +38,7 @@ class Stricklers(SQLSubModel):
|
|
||||||
else:
|
|
||||||
self.id = id
|
|
||||||
|
|
||||||
- Stricklers._id_cnt = max(Stricklers._id_cnt + 1, self.id)
|
|
||||||
+ Stricklers._id_cnt = max(Stricklers._id_cnt + 1, id + 1)
|
|
||||||
|
|
||||||
self._name = name
|
|
||||||
self._comment = comment
|
|
||||||
diff --git a/src/View/BoundaryCondition/translate.py b/src/View/BoundaryCondition/translate.py
|
|
||||||
index c4ff8f8..172999a 100644
|
|
||||||
--- a/src/View/BoundaryCondition/translate.py
|
|
||||||
+++ b/src/View/BoundaryCondition/translate.py
|
|
||||||
@@ -29,9 +29,9 @@ _translate = QCoreApplication.translate
|
|
||||||
long_types = {
|
|
||||||
"ND": _translate("BoundaryCondition", "Not defined"),
|
|
||||||
"PC": _translate("BoundaryCondition", "Ponctual contribution"),
|
|
||||||
- "TZ": _translate("BoundaryCondition", "Time over Z"),
|
|
||||||
- "TD": _translate("BoundaryCondition", "Time over Discharge"),
|
|
||||||
- "ZD": _translate("BoundaryCondition", "Z over Discharge"),
|
|
||||||
+ "TZ": _translate("BoundaryCondition", "TimeZ"),
|
|
||||||
+ "TD": _translate("BoundaryCondition", "TimeDischarge"),
|
|
||||||
+ "ZD": _translate("BoundaryCondition", "ZDischarge"),
|
|
||||||
"SL": _translate("BoundaryCondition", "Solid"),
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/View/Frictions/PlotStricklers.py b/src/View/Frictions/PlotStricklers.py
|
|
||||||
index 71ff6e6..b9060bc 100644
|
|
||||||
--- a/src/View/Frictions/PlotStricklers.py
|
|
||||||
+++ b/src/View/Frictions/PlotStricklers.py
|
|
||||||
@@ -106,6 +106,8 @@ class PlotStricklers(APlot):
|
|
||||||
)
|
|
||||||
self.draw_frictions(lst, color="b")
|
|
||||||
|
|
||||||
+ self.canvas.axes.invert_xaxis()
|
|
||||||
+
|
|
||||||
self.canvas.figure.tight_layout()
|
|
||||||
self.canvas.figure.canvas.draw_idle()
|
|
||||||
if self.toolbar is not None:
|
|
||||||
diff --git a/src/View/Frictions/Window.py b/src/View/Frictions/Window.py
|
|
||||||
index 4af3b66..f46fae3 100644
|
|
||||||
--- a/src/View/Frictions/Window.py
|
|
||||||
+++ b/src/View/Frictions/Window.py
|
|
||||||
@@ -112,10 +112,10 @@ class FrictionsWindow(ASubMainWindow, ListedSubWindow):
|
|
||||||
)
|
|
||||||
|
|
||||||
table.setItemDelegateForColumn(
|
|
||||||
- 3, self._delegate_stricklers
|
|
||||||
+ 2, self._delegate_stricklers
|
|
||||||
)
|
|
||||||
table.setItemDelegateForColumn(
|
|
||||||
- 4, self._delegate_stricklers
|
|
||||||
+ 3, self._delegate_stricklers
|
|
||||||
)
|
|
||||||
|
|
||||||
table.setSelectionBehavior(QAbstractItemView.SelectRows)
|
|
||||||
diff --git a/src/View/Frictions/translate.py b/src/View/Frictions/translate.py
|
|
||||||
index 21981ab..82071e9 100644
|
|
||||||
--- a/src/View/Frictions/translate.py
|
|
||||||
+++ b/src/View/Frictions/translate.py
|
|
||||||
@@ -21,10 +21,10 @@ from PyQt5.QtCore import QCoreApplication
|
|
||||||
_translate = QCoreApplication.translate
|
|
||||||
|
|
||||||
table_headers = {
|
|
||||||
- "name": _translate("Frictions", "Name"),
|
|
||||||
+ # "name": _translate("Frictions", "Name"),
|
|
||||||
# "edge": _translate("Frictions", "Reach"),
|
|
||||||
"begin_kp": _translate("Frictions", "Begin kp (m)"),
|
|
||||||
"end_kp": _translate("Frictions", "End kp (m)"),
|
|
||||||
- "begin_strickler": _translate("Frictions", "Begin strickler"),
|
|
||||||
- "end_strickler": _translate("Frictions", "End strickler"),
|
|
||||||
+ "begin_strickler": _translate("Frictions", "Strickler"),
|
|
||||||
+ # "end_strickler": _translate("Frictions", "End strickler"),
|
|
||||||
}
|
|
||||||
diff --git a/src/View/Geometry/PlotAC.py b/src/View/Geometry/PlotAC.py
|
|
||||||
index fe6d933..e43f39e 100644
|
|
||||||
--- a/src/View/Geometry/PlotAC.py
|
|
||||||
+++ b/src/View/Geometry/PlotAC.py
|
|
||||||
@@ -67,18 +67,18 @@ class PlotAC(APlot):
|
|
||||||
gl = self.data.profile(selected_profile).names()
|
|
||||||
|
|
||||||
self.canvas.axes.set_xlabel(
|
|
||||||
- _translate("MainWindow_reach", "Abscisse en travers (m)"),
|
|
||||||
+ _translate("MainWindow_reach", "Transverse abscissa (m)"),
|
|
||||||
color='green', fontsize=12
|
|
||||||
)
|
|
||||||
self.canvas.axes.set_ylabel(
|
|
||||||
- _translate("MainWindow_reach", "Cote (m)"),
|
|
||||||
+ _translate("MainWindow_reach", "Height (m)"),
|
|
||||||
color='green', fontsize=12
|
|
||||||
)
|
|
||||||
self.canvas.figure.tight_layout()
|
|
||||||
|
|
||||||
- label_before_plot_selected = _translate("MainWindow_reach", "Profil précédent")
|
|
||||||
- label_plot_selected = _translate("MainWindow_reach", "Profil sélectionné")
|
|
||||||
- label_after_plot_selected = _translate("MainWindow_reach", "Profil suivant")
|
|
||||||
+ label_before_plot_selected = _translate("MainWindow_reach", "Previous cross-section")
|
|
||||||
+ label_plot_selected = _translate("MainWindow_reach", "Cross-section")
|
|
||||||
+ label_after_plot_selected = _translate("MainWindow_reach", "Next cross-section")
|
|
||||||
color_before_plot_selected = "k" # 'grey'
|
|
||||||
color_plot_selected = 'b'
|
|
||||||
color_after_plot_selected = 'm'
|
|
||||||
diff --git a/src/View/Geometry/PlotKPZ.py b/src/View/Geometry/PlotKPZ.py
|
|
||||||
index eb7d5e2..64057aa 100644
|
|
||||||
--- a/src/View/Geometry/PlotKPZ.py
|
|
||||||
+++ b/src/View/Geometry/PlotKPZ.py
|
|
||||||
@@ -158,6 +158,8 @@ class PlotKPZ(APlot):
|
|
||||||
color='lightgrey'
|
|
||||||
)
|
|
||||||
|
|
||||||
+ self.canvas.axes.invert_xaxis()
|
|
||||||
+
|
|
||||||
self.canvas.figure.tight_layout()
|
|
||||||
self.canvas.figure.canvas.draw_idle()
|
|
||||||
if self.toolbar is not None:
|
|
||||||
diff --git a/src/View/Geometry/Window.py b/src/View/Geometry/Window.py
|
|
||||||
index 7776d73..1c8cb5d 100644
|
|
||||||
--- a/src/View/Geometry/Window.py
|
|
||||||
+++ b/src/View/Geometry/Window.py
|
|
||||||
@@ -111,7 +111,7 @@ class GeometryWindow(ASubMainWindow, ListedSubWindow):
|
|
||||||
self.ui.btn_sort_desc.triggered.connect(self.sort_descending)
|
|
||||||
self.ui.btn_move_up.triggered.connect(self.move_row_up)
|
|
||||||
self.ui.btn_move_down.triggered.connect(self.move_row_down)
|
|
||||||
- self.ui.btn_end_editing.triggered.connect(self.handleSave)
|
|
||||||
+ # self.ui.btn_end_editing.triggered.connect(self.handleSave)
|
|
||||||
self.ui.btn_add.triggered.connect(self.insert_row)
|
|
||||||
self.ui.btn_delete.triggered.connect(self.delete_rows)
|
|
||||||
self.ui.btn_edit.triggered.connect(self.edit_profile)
|
|
||||||
diff --git a/src/View/Geometry/mainwindow_ui_reach.py b/src/View/Geometry/mainwindow_ui_reach.py
|
|
||||||
index 897b698..60bcfa6 100644
|
|
||||||
--- a/src/View/Geometry/mainwindow_ui_reach.py
|
|
||||||
+++ b/src/View/Geometry/mainwindow_ui_reach.py
|
|
||||||
@@ -95,29 +95,29 @@ class Ui_MainWindow(object):
|
|
||||||
self.btn_edit.setIcon(icon_btn_edit)
|
|
||||||
self.toolBar.addAction(self.btn_edit)
|
|
||||||
|
|
||||||
- self.btn_copy_selected_profile = QtWidgets.QAction(self.widget)
|
|
||||||
- self.btn_copy_selected_profile.setObjectName("btn_copy_selected_profile")
|
|
||||||
- icon_btn_copy_selected_profile = QtGui.QIcon()
|
|
||||||
- icon_btn_copy_selected_profile.addPixmap(
|
|
||||||
- QtGui.QPixmap(f"{icon_path}gtk-copy.png"))
|
|
||||||
- self.btn_copy_selected_profile.setIcon(icon_btn_copy_selected_profile)
|
|
||||||
- self.toolBar.addAction(self.btn_copy_selected_profile)
|
|
||||||
-
|
|
||||||
- self.btn_paste_selected_profile = QtWidgets.QAction(self.widget)
|
|
||||||
- self.btn_paste_selected_profile.setObjectName("btn_paste_selected_profile")
|
|
||||||
- icon_btn_paste_selected_profile = QtGui.QIcon()
|
|
||||||
- icon_btn_paste_selected_profile.addPixmap(
|
|
||||||
- QtGui.QPixmap(f"{icon_path}gtk-paste.png"))
|
|
||||||
- self.btn_paste_selected_profile.setIcon(icon_btn_paste_selected_profile)
|
|
||||||
- self.toolBar.addAction(self.btn_paste_selected_profile)
|
|
||||||
-
|
|
||||||
- self.btn_duplicate_selected_profile = QtWidgets.QAction(self.widget)
|
|
||||||
- self.btn_duplicate_selected_profile.setObjectName("btn_duplicate_selected_profile")
|
|
||||||
- icon_btn_duplicate_selected_profile = QtGui.QIcon()
|
|
||||||
- icon_btn_duplicate_selected_profile.addPixmap(
|
|
||||||
- QtGui.QPixmap(f"{icon_path}gtk-dnd-multiple.png"))
|
|
||||||
- self.btn_duplicate_selected_profile.setIcon(icon_btn_duplicate_selected_profile)
|
|
||||||
- self.toolBar.addAction(self.btn_duplicate_selected_profile)
|
|
||||||
+ # self.btn_copy_selected_profile = QtWidgets.QAction(self.widget)
|
|
||||||
+ # self.btn_copy_selected_profile.setObjectName("btn_copy_selected_profile")
|
|
||||||
+ # icon_btn_copy_selected_profile = QtGui.QIcon()
|
|
||||||
+ # icon_btn_copy_selected_profile.addPixmap(
|
|
||||||
+ # QtGui.QPixmap(f"{icon_path}gtk-copy.png"))
|
|
||||||
+ # self.btn_copy_selected_profile.setIcon(icon_btn_copy_selected_profile)
|
|
||||||
+ # self.toolBar.addAction(self.btn_copy_selected_profile)
|
|
||||||
+
|
|
||||||
+ # self.btn_paste_selected_profile = QtWidgets.QAction(self.widget)
|
|
||||||
+ # self.btn_paste_selected_profile.setObjectName("btn_paste_selected_profile")
|
|
||||||
+ # icon_btn_paste_selected_profile = QtGui.QIcon()
|
|
||||||
+ # icon_btn_paste_selected_profile.addPixmap(
|
|
||||||
+ # QtGui.QPixmap(f"{icon_path}gtk-paste.png"))
|
|
||||||
+ # self.btn_paste_selected_profile.setIcon(icon_btn_paste_selected_profile)
|
|
||||||
+ # self.toolBar.addAction(self.btn_paste_selected_profile)
|
|
||||||
+
|
|
||||||
+ # self.btn_duplicate_selected_profile = QtWidgets.QAction(self.widget)
|
|
||||||
+ # self.btn_duplicate_selected_profile.setObjectName("btn_duplicate_selected_profile")
|
|
||||||
+ # icon_btn_duplicate_selected_profile = QtGui.QIcon()
|
|
||||||
+ # icon_btn_duplicate_selected_profile.addPixmap(
|
|
||||||
+ # QtGui.QPixmap(f"{icon_path}gtk-dnd-multiple.png"))
|
|
||||||
+ # self.btn_duplicate_selected_profile.setIcon(icon_btn_duplicate_selected_profile)
|
|
||||||
+ # self.toolBar.addAction(self.btn_duplicate_selected_profile)
|
|
||||||
|
|
||||||
self.btn_sort_asc = QtWidgets.QAction(self.widget)
|
|
||||||
self.btn_sort_asc.setObjectName("btn_sort_asc")
|
|
||||||
@@ -151,13 +151,13 @@ class Ui_MainWindow(object):
|
|
||||||
self.btn_move_down.setIcon(icon_btn_move_down)
|
|
||||||
self.toolBar.addAction(self.btn_move_down)
|
|
||||||
|
|
||||||
- self.btn_end_editing = QtWidgets.QAction(self.widget)
|
|
||||||
- self.btn_end_editing.setObjectName("btn_end_editing")
|
|
||||||
- icon_btn_save = QtGui.QIcon()
|
|
||||||
- icon_btn_save.addPixmap(
|
|
||||||
- QtGui.QPixmap(f"{icon_path}gtk-apply.png"))
|
|
||||||
- self.btn_end_editing.setIcon(icon_btn_save)
|
|
||||||
- self.toolBar.addAction(self.btn_end_editing)
|
|
||||||
+ # self.btn_end_editing = QtWidgets.QAction(self.widget)
|
|
||||||
+ # self.btn_end_editing.setObjectName("btn_end_editing")
|
|
||||||
+ # icon_btn_save = QtGui.QIcon()
|
|
||||||
+ # icon_btn_save.addPixmap(
|
|
||||||
+ # QtGui.QPixmap(f"{icon_path}gtk-apply.png"))
|
|
||||||
+ # self.btn_end_editing.setIcon(icon_btn_save)
|
|
||||||
+ # self.toolBar.addAction(self.btn_end_editing)
|
|
||||||
|
|
||||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
|
||||||
self.tableView = QtWidgets.QTableView(self.widget)
|
|
||||||
@@ -314,30 +314,23 @@ class Ui_MainWindow(object):
|
|
||||||
def retranslateUi(self, MainWindow_reach):
|
|
||||||
_translate = QtCore.QCoreApplication.translate
|
|
||||||
self.name_reach = ""
|
|
||||||
- self.mainwindow_title = _translate("MainWindow_reach", "Jeu de sections du Bief")
|
|
||||||
+ self.mainwindow_title = _translate("MainWindow_reach", "Geometry reach edit")
|
|
||||||
MainWindow_reach.setWindowTitle(self.mainwindow_title + f"{self.name_reach}")
|
|
||||||
- self.text_section_order = _translate("MainWindow_reach", "\nOrdre des sections : "
|
|
||||||
- "Amont --> Aval")
|
|
||||||
# self.label_section_order.setText(f"{self.text_section_order}")
|
|
||||||
self.vertical_slider_value = ""
|
|
||||||
- self.vertical_slider_label.setText(_translate("MainWindow_reach", "Pk = ") + f"{self.vertical_slider_value}")
|
|
||||||
- self.btn_open.setToolTip(_translate("MainWindow_reach", " Importer une géométrie"))
|
|
||||||
- self.btn_add.setToolTip(_translate("MainWindow_reach", " Nouveau profil"))
|
|
||||||
- self.btn_delete.setToolTip(_translate("MainWindow_reach", " Supprimer le profil sélectionné"))
|
|
||||||
- self.btn_edit.setToolTip(_translate("MainWindow_reach", " Éditer le profil sélectionné"))
|
|
||||||
- self.btn_copy_selected_profile.setToolTip(_translate("MainWindow_reach", " Copier le profil sélectionné"))
|
|
||||||
- self.btn_paste_selected_profile.setToolTip(_translate("MainWindow_reach", "Coller le profil en fin de liste ("
|
|
||||||
- "penser à modifier le Pk avant de "
|
|
||||||
- "trier)"))
|
|
||||||
- self.btn_duplicate_selected_profile.setToolTip(
|
|
||||||
- _translate("MainWindow_reach", " Dupliquer la section sélectionnée"))
|
|
||||||
+ self.vertical_slider_label.setText(_translate("MainWindow_reach", "Kp = ") + f"{self.vertical_slider_value}")
|
|
||||||
+ self.btn_open.setToolTip(_translate("MainWindow_reach", " Import geometry"))
|
|
||||||
+ self.btn_add.setToolTip(_translate("MainWindow_reach", " New profile"))
|
|
||||||
+ self.btn_delete.setToolTip(_translate("MainWindow_reach", " Delete selected profile"))
|
|
||||||
+ self.btn_edit.setToolTip(_translate("MainWindow_reach", " Editer selected profile"))
|
|
||||||
+
|
|
||||||
self.btn_sort_asc.setToolTip(_translate("MainWindow_reach", " Trier les profils par ordre croissant des Pk"))
|
|
||||||
self.btn_sort_desc.setToolTip(_translate("MainWindow_reach", " Trier les profils par ordre décroissant des Pk"))
|
|
||||||
self.btn_move_up.setToolTip(_translate("MainWindow_reach", " Changer l'ordre des profils (en décalant le "
|
|
||||||
"profil sélectionné vers le haut)"))
|
|
||||||
self.btn_move_down.setToolTip(_translate("MainWindow_reach", " Changer l'ordre des profils (en décalant le "
|
|
||||||
"profil sélectionné vers le bas)"))
|
|
||||||
- self.btn_end_editing.setToolTip(_translate("MainWindow_reach", " Terminer l'édition"))
|
|
||||||
+ # self.btn_end_editing.setToolTip(_translate("MainWindow_reach", " Terminer l'édition"))
|
|
||||||
self.tableView_header = [_translate("MainWindow_reach", "Name"),
|
|
||||||
_translate("MainWindow_reach", "Kp (m)"),
|
|
||||||
_translate("MainWindow_reach", "Type")]
|
|
||||||
diff --git a/src/View/InitialConditions/PlotDKP.py b/src/View/InitialConditions/PlotDKP.py
|
|
||||||
index 58a8321..445cc08 100644
|
|
||||||
--- a/src/View/InitialConditions/PlotDKP.py
|
|
||||||
+++ b/src/View/InitialConditions/PlotDKP.py
|
|
||||||
@@ -71,6 +71,8 @@ class PlotDKP(APlot):
|
|
||||||
color='b', marker='+', lw=1.
|
|
||||||
)
|
|
||||||
|
|
||||||
+ self.canvas.axes.invert_xaxis()
|
|
||||||
+
|
|
||||||
self.canvas.figure.tight_layout()
|
|
||||||
self.canvas.figure.canvas.draw_idle()
|
|
||||||
if self.toolbar is not None:
|
|
||||||
diff --git a/src/View/InitialConditions/PlotDischarge.py b/src/View/InitialConditions/PlotDischarge.py
|
|
||||||
index 1fe05de..0703c59 100644
|
|
||||||
--- a/src/View/InitialConditions/PlotDischarge.py
|
|
||||||
+++ b/src/View/InitialConditions/PlotDischarge.py
|
|
||||||
@@ -65,6 +65,8 @@ class PlotDischarge(APlot):
|
|
||||||
color='r', lw=1.
|
|
||||||
)
|
|
||||||
|
|
||||||
+ self.canvas.axes.invert_xaxis()
|
|
||||||
+
|
|
||||||
self.canvas.figure.tight_layout()
|
|
||||||
self.canvas.figure.canvas.draw_idle()
|
|
||||||
if self.toolbar is not None:
|
|
||||||
diff --git a/src/View/InitialConditions/translate.py b/src/View/InitialConditions/translate.py
|
|
||||||
index 370d4a2..3fe45f7 100644
|
|
||||||
--- a/src/View/InitialConditions/translate.py
|
|
||||||
+++ b/src/View/InitialConditions/translate.py
|
|
||||||
@@ -21,11 +21,11 @@ from PyQt5.QtCore import QCoreApplication
|
|
||||||
_translate = QCoreApplication.translate
|
|
||||||
|
|
||||||
table_headers = {
|
|
||||||
- "name": _translate("LateralContribution", "Name"),
|
|
||||||
+ # "name": _translate("LateralContribution", "Name"),
|
|
||||||
"kp": _translate("LateralContribution", "KP (m)"),
|
|
||||||
# "speed": _translate("LateralContribution", "Speed (m/s)"),
|
|
||||||
"discharge": _translate("LateralContribution", "Discharge (m³/s)"),
|
|
||||||
"elevation": _translate("LateralContribution", "Elevation (m)"),
|
|
||||||
"height": _translate("LateralContribution", "Height (m)"),
|
|
||||||
- "comment": _translate("LateralContribution", "Comment"),
|
|
||||||
+ # "comment": _translate("LateralContribution", "Comment"),
|
|
||||||
}
|
|
||||||
diff --git a/src/View/SedimentLayers/Edit/translate.py b/src/View/SedimentLayers/Edit/translate.py
|
|
||||||
index fe9e44a..f9f02cb 100644
|
|
||||||
--- a/src/View/SedimentLayers/Edit/translate.py
|
|
||||||
+++ b/src/View/SedimentLayers/Edit/translate.py
|
|
||||||
@@ -6,7 +6,7 @@ _translate = QCoreApplication.translate
|
|
||||||
|
|
||||||
table_headers = {
|
|
||||||
"name": _translate("SedimentLayers", "Name"),
|
|
||||||
- "type": _translate("SedimentLayers", "Type"),
|
|
||||||
+ # "type": _translate("SedimentLayers", "Type"),
|
|
||||||
"height": _translate("Sedimentlayers", "Height"),
|
|
||||||
"d50": _translate("Sedimentlayers", "D50"),
|
|
||||||
"sigma": _translate("Sedimentlayers", "Sigma"),
|
|
||||||
diff --git a/src/View/SedimentLayers/Reach/Plot.py b/src/View/SedimentLayers/Reach/Plot.py
|
|
||||||
index a312a8c..5764abf 100644
|
|
||||||
--- a/src/View/SedimentLayers/Reach/Plot.py
|
|
||||||
+++ b/src/View/SedimentLayers/Reach/Plot.py
|
|
||||||
@@ -78,6 +78,8 @@ class Plot(APlot):
|
|
||||||
color='grey' if i == len(z_sl) - 1 else None
|
|
||||||
)
|
|
||||||
|
|
||||||
+ self.canvas.axes.invert_xaxis()
|
|
||||||
+
|
|
||||||
self.canvas.figure.tight_layout()
|
|
||||||
self.canvas.figure.canvas.draw_idle()
|
|
||||||
if self.toolbar is not None:
|
|
||||||
diff --git a/src/lang/fr.ts b/src/lang/fr.ts
|
|
||||||
index 8034809..031f349 100644
|
|
||||||
--- a/src/lang/fr.ts
|
|
||||||
+++ b/src/lang/fr.ts
|
|
||||||
@@ -60,21 +60,6 @@
|
|
||||||
<source>Ponctual contribution</source>
|
|
||||||
<translation>Contributions ponctuelles</translation>
|
|
||||||
</message>
|
|
||||||
- <message>
|
|
||||||
- <location filename="../View/BoundaryCondition/translate.py" line="32"/>
|
|
||||||
- <source>Time over Z</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message>
|
|
||||||
- <location filename="../View/BoundaryCondition/translate.py" line="33"/>
|
|
||||||
- <source>Time over Discharge</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message>
|
|
||||||
- <location filename="../View/BoundaryCondition/translate.py" line="34"/>
|
|
||||||
- <source>Z over Discharge</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
<message>
|
|
||||||
<location filename="../View/BoundaryCondition/translate.py" line="39"/>
|
|
||||||
<source>Name</source>
|
|
||||||
@@ -110,6 +95,21 @@
|
|
||||||
<source>Solid</source>
|
|
||||||
<translation type="unfinished">Solide</translation>
|
|
||||||
</message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/BoundaryCondition/translate.py" line="32"/>
|
|
||||||
+ <source>TimeZ</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/BoundaryCondition/translate.py" line="33"/>
|
|
||||||
+ <source>TimeDischarge</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/BoundaryCondition/translate.py" line="34"/>
|
|
||||||
+ <source>ZDischarge</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>Checker</name>
|
|
||||||
@@ -533,7 +533,7 @@
|
|
||||||
<message>
|
|
||||||
<location filename="../View/Frictions/translate.py" line="24"/>
|
|
||||||
<source>Name</source>
|
|
||||||
- <translation>Nom</translation>
|
|
||||||
+ <translation type="obsolete">Nom</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../View/Frictions/translate.py" line="26"/>
|
|
||||||
@@ -548,12 +548,17 @@
|
|
||||||
<message>
|
|
||||||
<location filename="../View/Frictions/translate.py" line="28"/>
|
|
||||||
<source>Begin strickler</source>
|
|
||||||
- <translation>strickler de départ</translation>
|
|
||||||
+ <translation type="obsolete">strickler de départ</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../View/Frictions/translate.py" line="29"/>
|
|
||||||
<source>End strickler</source>
|
|
||||||
- <translation>Strickler de fin</translation>
|
|
||||||
+ <translation type="obsolete">Strickler de fin</translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Frictions/translate.py" line="28"/>
|
|
||||||
+ <source>Strickler</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
@@ -587,7 +592,7 @@
|
|
||||||
<context>
|
|
||||||
<name>LateralContribution</name>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/InitialConditions/translate.py" line="24"/>
|
|
||||||
+ <location filename="../View/LateralContribution/translate.py" line="35"/>
|
|
||||||
<source>Name</source>
|
|
||||||
<translation>Nom</translation>
|
|
||||||
</message>
|
|
||||||
@@ -602,7 +607,7 @@
|
|
||||||
<translation>Lit moyen</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/InitialConditions/translate.py" line="30"/>
|
|
||||||
+ <location filename="../View/Stricklers/translate.py" line="31"/>
|
|
||||||
<source>Comment</source>
|
|
||||||
<translation>Commentaire</translation>
|
|
||||||
</message>
|
|
||||||
@@ -1715,7 +1720,7 @@ sur le plan défini par les deux points nommés extrêmes </source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
-<context>
|
|
||||||
+<context encoding="UTF-8">
|
|
||||||
<name>MainWindow_reach</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../View/Frictions/PlotStricklers.py" line="76"/>
|
|
||||||
@@ -1723,7 +1728,7 @@ sur le plan défini par les deux points nommés extrêmes </source>
|
|
||||||
<translation></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="342"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="335"/>
|
|
||||||
<source>Kp (m)</source>
|
|
||||||
<translation>Pk (m)</translation>
|
|
||||||
</message>
|
|
||||||
@@ -1778,68 +1783,47 @@ sur le plan défini par les deux points nommés extrêmes </source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="317"/>
|
|
||||||
- <source>Jeu de sections du Bief</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="319"/>
|
|
||||||
- <source>
|
|
||||||
-Ordre des sections : Amont --> Aval</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="323"/>
|
|
||||||
- <source>Pk = </source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="325"/>
|
|
||||||
- <source> Nouveau profil</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="334"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="327"/>
|
|
||||||
<source> Trier les profils par ordre croissant des Pk</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="341"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="334"/>
|
|
||||||
<source>Name</source>
|
|
||||||
<translation>Nom</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="343"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="336"/>
|
|
||||||
<source>Type</source>
|
|
||||||
<translation>Type</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="345"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="338"/>
|
|
||||||
<source>Alt+Z</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="348"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="341"/>
|
|
||||||
<source>Alt+E</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="351"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="344"/>
|
|
||||||
<source>Alt+R</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="355"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="348"/>
|
|
||||||
<source>Vue globale automatique (Alt+S)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="359"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="352"/>
|
|
||||||
<source>Vue globale automatique (Alt+D)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="363"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="356"/>
|
|
||||||
<source>Vue globale automatique (Alt+F)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
@@ -1889,68 +1873,33 @@ Seuls les 5 premiers seront édités.</source>
|
|
||||||
<source>Profil sélectionné</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
- <message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="324"/>
|
|
||||||
- <source> Importer une géométrie</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="326"/>
|
|
||||||
- <source> Supprimer le profil sélectionné</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="327"/>
|
|
||||||
- <source> Éditer le profil sélectionné</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<location filename="../View/Geometry/mainwindow_ui_reach.py" line="328"/>
|
|
||||||
- <source> Copier le profil sélectionné</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="329"/>
|
|
||||||
- <source>Coller le profil en fin de liste (penser à modifier le Pk avant de trier)</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="332"/>
|
|
||||||
- <source> Dupliquer la section sélectionnée</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="335"/>
|
|
||||||
<source> Trier les profils par ordre décroissant des Pk</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="336"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="329"/>
|
|
||||||
<source> Changer l'ordre des profils (en décalant le profil sélectionné vers le haut)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="338"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="331"/>
|
|
||||||
<source> Changer l'ordre des profils (en décalant le profil sélectionné vers le bas)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="340"/>
|
|
||||||
- <source> Terminer l'édition</source>
|
|
||||||
- <translation type="unfinished"></translation>
|
|
||||||
- </message>
|
|
||||||
- <message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="346"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="339"/>
|
|
||||||
<source>Vue isométrique (Alt+Z)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="349"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="342"/>
|
|
||||||
<source>Vue isométrique (Alt+E)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
- <location filename="../View/Geometry/mainwindow_ui_reach.py" line="352"/>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="345"/>
|
|
||||||
<source>Vue isométrique (Alt+R)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
@@ -1960,7 +1909,7 @@ Seuls les 5 premiers seront édités.</source>
|
|
||||||
<translation type="unfinished">Altitude (m)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
- <location filename="../View/Geometry/PlotKPZ.py" line="66"/>
|
|
||||||
+ <location filename="../View/Geometry/PlotAC.py" line="73"/>
|
|
||||||
<source>Height (m)</source>
|
|
||||||
<translation type="unfinished">Hauteur (m)</translation>
|
|
||||||
</message>
|
|
||||||
@@ -1969,6 +1918,56 @@ Seuls les 5 premiers seront édités.</source>
|
|
||||||
<source>Select destination file</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="317"/>
|
|
||||||
+ <source>Geometry reach edit</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="321"/>
|
|
||||||
+ <source>Kp = </source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="322"/>
|
|
||||||
+ <source> Import geometry</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="323"/>
|
|
||||||
+ <source> New profile</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="324"/>
|
|
||||||
+ <source> Delete selected profile</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Geometry/mainwindow_ui_reach.py" line="325"/>
|
|
||||||
+ <source> Editer selected profile</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Geometry/PlotAC.py" line="69"/>
|
|
||||||
+ <source>Transverse abscissa (m)</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Geometry/PlotAC.py" line="79"/>
|
|
||||||
+ <source>Previous cross-section</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Geometry/PlotAC.py" line="80"/>
|
|
||||||
+ <source>Cross-section</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
+ <message>
|
|
||||||
+ <location filename="../View/Geometry/PlotAC.py" line="81"/>
|
|
||||||
+ <source>Next cross-section</source>
|
|
||||||
+ <translation type="unfinished"></translation>
|
|
||||||
+ </message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>Network</name>
|
|
||||||
@@ -2071,7 +2070,7 @@ Seuls les 5 premiers seront édités.</source>
|
|
||||||
<message>
|
|
||||||
<location filename="../View/SedimentLayers/Edit/translate.py" line="9"/>
|
|
||||||
<source>Type</source>
|
|
||||||
- <translation type="unfinished">Type</translation>
|
|
||||||
+ <translation type="obsolete">Type</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../View/SedimentLayers/Reach/Profile/Window.py" line="68"/>
|
|
||||||
|
Before Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 196 KiB |
|
Before Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 200 KiB |
|
Before Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 90 KiB |