Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable tutorial creation for Windows #181

Merged
merged 10 commits into from
Dec 13, 2021
Merged

Enable tutorial creation for Windows #181

merged 10 commits into from
Dec 13, 2021

Conversation

rozyczko
Copy link
Member

Timing on UI operations has been extended and this (combined with assuring that the calculators are included) seems to have helped.
https://github.com/easyScience/easyDiffractionApp/runs/4236278195

@rozyczko rozyczko mentioned this pull request Nov 17, 2021
@AndrewSazonov
Copy link
Member

  • Confirmed that test video creation works correctly on Windows
  • Screen resolution of 1920x1080 works correctly on Windows
  • PyInstaller 4.5.1 is selected because 4.6 and 4.7 don't work on Ubuntu
  • Python version 3.8 is selected instead of 3.7

@rozyczko
Copy link
Member Author

This needs to be merged, otherwise windows builds don't work

@rozyczko rozyczko merged commit 2952ca9 into develop Dec 13, 2021
@rozyczko rozyczko deleted the windows_tutorials2 branch January 19, 2022 08:15
rozyczko added a commit that referenced this pull request Jul 28, 2022
* Fix user tutorial 3

* Try to show `action failure` on non-zero exit status

* Fix the formatting of the licence name in config.xml

* Fixed experiment removal on project reset.

* Explicitly and quickly remove background points on state reset.

* Remove the point only when there are points to be removed.

* Remove constraints on state reset.
Note that the constraint parameter comboboxes don't reset.

* Reinstantiate the fitter object after calculator change

* Fix fitting

This commit fixes crysFML and GSAS-II fitting by introducing a minimal step change in parameters.

So, now we have `diff_step = 1e-5`.

* Keep only least-squares minimization methods

* Add missing points to the measured data

* Set least_squares as a default minimization method

* Temporarily disable automatic code signing on Windows

* Update readme with TOF, constraints, etc.

* Update the release notes

* Update project config

* Install easyDiffractionLib from our custom PyPi server

* Rename package to easyDiffractionApp

* Fix app name

* Fix app name in build script

* Fix date

* Fix app name

* Update changelog

* Cross platform date without leading 0

* Fix app name in build script

* Online installer for `master`or `hot_fixes`branches only

* Update readme

* Install toml before calling utils.py

* Install pip package

* PyInstaller can't find pip? Import pip inside extraDict()...

* Manually add pip and toml to pyinstaller

* Try pyinstaller 4.5.1 instead of 5.0.dev

* Auto generate date for installer

* Fixed typo

* Distinguish between master and non-master branches for GitHub releases

* Update RELEASE.md

Just a few suggestions for the release notes

* Update build.yml

* Minor fixes to the 0.8.2 release for issues found during release
testing.

* Remove duplicates

* Fixed project save.

* Explicitly copy GSASII.libs and CFML.libs on Windows. #149

* getsitepackages() weirdness

* Develop branch updated with necessary fixes

* enabled tutorials on windows

* Initial tests - added convenience method to get the components from
calculator, show single phase profile on phase change as exp profile

* updated the lib branch

* More proper implementation with separate 3rd grey line for current
phase.

* Point to the right branch of easyApp

* check if get-DisplayResolution is working

* Allow multiple phase adds and modified button caption accordingly.

* Add return code to copyFile() for debugging purposes

* Try pyinstaller 4.5.1 instead of 4.7

* Try pyinstaller 4.6 instead of 4.7

* Fix pyinstaller to be 4.5.1 as 4.6-4.7 failed on Ubuntu

* Use python 3.8 instead of 3.7

* Refactor addedData()

* Add code signing on macOS. Remove on Windows

* Run all steps in sign macos

* Fix identity variable

* Add 'verify app signatures' step

* Update release notes

* Add notarization and stapling steps

* DOn't trust the calculator to contain anything

* Split sign app command into multiple lines

* Fix App Store notarization variables

* Use same names for app and zip in notarization

* Delete submitted zip of notarized app installer

* Fix zipped installer path in notarize step

* Removing a phase triggers unwanted index update on clicked row. Guard
against such cases.

* Handle lag on Apple server before stapling

* Increase delay after notarization to 2 minutes

* Enable code signing for master branch only

* Remove copying maintenancetool on Windows

* Fix phase scaling issues

* Enable multi-phase change

* Fix scale in examples

* Add multiphase example: Si3N4

* Display all phases on the analysis chart

* Update multi-phase example

* Add support for the multiple HKL sets

* Enable tutorial creation for Windows (#181)

* Develop branch updated with necessary fixes

* enabled tutorials on windows

* check if get-DisplayResolution is working

* Add return code to copyFile() for debugging purposes

* Try pyinstaller 4.5.1 instead of 4.7

* Try pyinstaller 4.6 instead of 4.7

* Fix pyinstaller to be 4.5.1 as 4.6-4.7 failed on Ubuntu

* Use python 3.8 instead of 3.7

* Refactor addedData()

* Update RELEASE.md

Co-authored-by: Andrew Sazonov <AndrewSazonov@users.noreply.github.com>

* Don't calculate the profile twice on project load. That's a bit silly.

* State reset removes all the phases now. #189

* slight performance improvement for project loads.
this avoids yet another profile recalculation.

* Avoid profile calculation on project reset. This was a "byproduct" of
updating the parameters after constraints changed.

* Assign interface before phases are added. This avoids recalculation of
space groups

* Merge atom_symbol_case, solving #184

* Fix for getting HKL's

* Use easyCrystallography

* Update branch name.

* Fixed the multiphase example project.
Updated README and toml with new release info.

* Add the missing crystallography content

* CHange module name after refactoring in core

* Fix the scipy interpolation errors for backgrounds

* The data recalculation is required for undo/redo.
The effect on project load is minuscule, considering all other, more
expensive operations happening.

* Added Si3N4 multiphase project example

* multiphase -> develop dependency for the lib

* Updated copyright year

* Take 'develop' branch of the library - testing

* Switch to master branches for App and Lib

* Update build-in examples

* Update repo examples

* Increase number of visible rows in examples

* Test signing

* Back to signing on master branch only

* Added radio buttons to choose spin combination
Minor logic update

* fixed easyApp dependency for this branch

* Added experiment, project and parameter logic for radial buttons.
Added polarized example from the old ED

* move spin logic to experiment

* Made spin controls proxy methods agnostic

* Added Diffraction radiation control

* Added Refinement groupbox and corresponding logic

* Added Msp groupbox
Added two polarized examples

* Added polarized example project
Updated remaning non-pol examples

* standardize naming

* synchronize radio groups in analysis and experiment
disable plot reload when checked button is clicked

* Updates after changes in the lib

* build off of 'polarized' branch of the lib

* switch to polarizedV2 for the library

* missed Base -> ObjectClasses case

* Fix poetry dependencies

* Added initial version of msp display

* Fix ADP and MSP table columns width

* Added polarization control combobox.
Added more polarization related modifications.

* Temporarily disable ADPs in default phase

* Add experimental data in CIF format

* Add GUI filter for CIF-based experimental files

* Initial support of experimental CIF

* minor fixes for polarized
modified two example projects so they can be now loaded

* Removed debug cruft, causing fitting problems.

* Get some pattern and instrumental parameters from CIF

* Temporarily fix all experimental parameters

Remove () brackets

* Add Up and Down to polarized refinement options.
Enable refinement options to be used for fitting.
Fixed adding default phase and adding atoms.

* Modified argument passing for profile calcs
Fixed refinement passing

* Proper display and handling of beam polarization parameters.

* Show the isotropic MSP components

* Make Ciso default
Add Ciso/Cani updates

* fixes for display and behaviour of polarization-related controls

* Fixed variable names typo

* Fixed example projects

* Correct conditionals for loading certain sidebar groups for polarized
cases

* Fix state dump for unpolarized

* Some more conditionals for undefined properties

* Updated premade project examples: PbSO4 and Fe3O4

* A few updated examples in both Examples and Gui/Resources locations

* Show correct intensities when switched back to the sum component.

* Rename `addPoint` to `addDefaultPoint`

* Add `addPoint` with custom `x` and `y` for background obj

* Read background from CIF

* Read phase labels and scales from CIF

* Update multi-phase example with experiment CIF file

* Update Co2SiO4 example

* Hide/show sidebar groups depends on experiment type

* Display the difference plots properly

* Background should be added after measured data has been applied.
Replaced walrus assignments for compatibility

* Don't show indices for Ciso param display

* Enable parameter update in all views.
Assure default parameters are fixed when read in from file

* Capitalize app name

* Add tooltips to project examples

* Increase width of the ADP and MSP label columns

* Only subtract bkg when matching bkg available

* Show the MSP section only when msp data read in or experiment is
polarized

* Implement experiment type and diffraction radiation parameters reading

* Update examples and add some experiment CIF files

* Fix MSP display

* Update Fe3O4 experiment and add Rhochi files

* Add magnetic field

* Add magnetic field to GUI - Experiment - Instrument setup

* Fixed  passing of kwargs

* Remove normalisation of the sum

* Fixed initial display of measured data

* Don't recalculate profile on spin case change

* Hide the refinement group until it actually works

* added debug info

* change case of app_name

* added hidden import of gemmi

* a more direct way of assuring gemmi is copied

* added direct dependency on gemmi

* gemmi no longer needed as explicit data in pyinstaller setup

* Disable tutorial to test locally

* Corrected loading of experimental background for various cases

* See local dir after tutorial run

* Remove debug printout

* Polar fitting (#204)

* Component fitting for the current spin case

* make sure unpolarized case always works

* Fix/modify the polarized sample project. It is now fitted for scale and
bkg for the Up+Down component, which is the default view

* update toml dependency

* Fix for experiment-less case and switching spin case charts

* Updated the TOF example.

* Fix switching interfaces issue

* Capitalised app name and fixed ubuntu tutorials (#205)

* Fix atom color if valency is present

* Update MSPS table

* Test ubuntu only (without video tutorials)

* Bump pyinstaller to 5.2 and QtInstallerFramework to 4.4.1

* Fix QtInstallerFramework online repository file path

* Freeze PyInstaller version to 5.2

* Bump pefile to 2022.5.30

* Debug QtIFW path on ubuntu

* More debug

* More debug

* Add install libxcb-shape0 on ubuntu

* Clean up MakeInstaller script after debug

* Bump opencv and ffmpeg

* Capitalize `Easy` in `EasyDiffraction`

* Fix package name

* Fix .desktop file name

* Some debug

* Enable all platforms

* Back to pyinstaller 4.5.1

* Actually get back to pyinstaller 4.5.1

* Enable test videos on Ubuntu

* Update README.md

* Bragg peaks display fix in EasyDiffLib

* Decrease sleep time and trigger build with new EDL

* Modify layout of the experiment group

Co-authored-by: Andrew Sazonov <andrew.sazonov@esss.eu>

* Reset the calculator on state reset

* Modify the spacegroup setting value for the default phase, so profiles
from all calculators match.

* Update polarized example Ho2Ti2O7

* Normalise background for polarised experiment

* Fix state of the last group on experiment tab

* Read magnetic field from CIF

* Fixed generation of difference chart on spin case change.
Fixed edge case where 0-background is sent to interpolation.

* Minor cleanup

* Project load needs to update the calculator combobox.

* Update all examples

* Modify default phase and experimental parameters

* Some more fixes of examples

* Set setting for default phase

* Update user tutorial 2

* Updated accessing polarized pattern params.
Fixed signalling on space group change.

* Set default value for magnetic field

* Get rid of some qml warnings

* Fix radiation parameter display

* Update background query

* Enable refinement options

* Clumsily adjusted calculated profile.
Fixed a typo in fitting.

* Activate the save button only if the project has already been created

* Move refinement components group to analysis tab

* Aded read_only flag for projects. This helps keeping example projects
non-modifiable

* hacky fix for background display when doing diff fitting first then switching to
sum.

* Fixed fitting so pattern/instr parameters are actually fittable

* Update version to 0.8.4-beta
Update easyApp reference to master

* Update EDL reference

* Updated release information

* Standardize background treatment. Now, the default is the single
component bg. Combined bg for up+down is just a double bg.

* More updates to the release info

* Update Fe3O4 example

* Update Ho2Ti2O7 example

* Make non-built-in example projects writable

* Update release information

* Assure the background is correctly set when loading polarized exp

* Improve project reset for case where
- a polarized experiment is loaded
- state reset
- sample without experiment loaded
- experiment set to polarized

* Renamed installer names to show they are all 64 bit.
Modified RELEASE and CHANGELOG accordingly.

Co-authored-by: Andrew Sazonov <AndrewSazonov@users.noreply.github.com>
Co-authored-by: Simon Ward <2798086+wardsimon@users.noreply.github.com>
Co-authored-by: Andrew Sazonov <Andrew.Sazonov@icloud.com>
Co-authored-by: Andrew Sazonov <andrew.sazonov@esss.eu>
rozyczko added a commit that referenced this pull request Mar 30, 2023
* Disable phase scale as it's not needed right now

* Avoid duplication of model recalculation at certain points.

* Update structure view on project loaded

* Update PbSO4 example

* Extend description of the PbSO4 example

* Update Co2SiO4 example

* Update Dy3Al5O12 example

* Add CeCuAl3 TOF example

* Add Na2Ca3Al2F14 TOF example

* Update short description of the project examples

* Fix iconified names to follow new API

* Structure viewer should be updated on phase change

* Fixed typo with parameter name translation

* Fix vertical spacing in the 'Fitting constraints' group

* enforce the state change on save

* Fix `Error` column width on the `Analysis` page

* Disable second `scale` parameter for Na2Ca3Al2F14 example

* Added parametersChanged to the main proxy to facilitate connections from
other proxies

* Errors set to zero on fitting finished

* Call reset errors before fit finished emitted; refactoring

* Load proper experiment groups on project loaded

* Disable all `instrument and exp type` elements on exp data loaded

* Fixed signalling for direct cif edit events.

* Disable individual cells instead of the whole table during fitting

* Disable slider on analysis page during fitting

* Keep 'Start fitting' button text during fitting

* Undo/redo macros for reset errors. Update undo/redo text

* update parameters on undo

* Fix analysis chart height on summary report page

* Disable Lorentzian coefficients

* Fix left margin on summary report page

* Update all project examples

* Fix user tutorial 3

* Try to show `action failure` on non-zero exit status

* Fix the formatting of the licence name in config.xml

* Fixed experiment removal on project reset.

* Explicitly and quickly remove background points on state reset.

* Remove the point only when there are points to be removed.

* Remove constraints on state reset.
Note that the constraint parameter comboboxes don't reset.

* Reinstantiate the fitter object after calculator change

* Fix fitting

This commit fixes crysFML and GSAS-II fitting by introducing a minimal step change in parameters.

So, now we have `diff_step = 1e-5`.

* Keep only least-squares minimization methods

* Add missing points to the measured data

* Set least_squares as a default minimization method

* Temporarily disable automatic code signing on Windows

* Update readme with TOF, constraints, etc.

* Update the release notes

* Update project config

* Install easyDiffractionLib from our custom PyPi server

* Rename package to easyDiffractionApp

* Fix app name

* Fix app name in build script

* Fix date

* Fix app name

* Update changelog

* Cross platform date without leading 0

* Fix app name in build script

* Online installer for `master`or `hot_fixes`branches only

* Update readme

* Install toml before calling utils.py

* Install pip package

* PyInstaller can't find pip? Import pip inside extraDict()...

* Manually add pip and toml to pyinstaller

* Try pyinstaller 4.5.1 instead of 5.0.dev

* Auto generate date for installer

* Fixed typo

* Distinguish between master and non-master branches for GitHub releases

* Update RELEASE.md

Just a few suggestions for the release notes

* Update build.yml

* Minor fixes to the 0.8.2 release for issues found during release
testing.

* Remove duplicates

* Fixed project save.

* Explicitly copy GSASII.libs and CFML.libs on Windows. #149

* getsitepackages() weirdness

* Develop branch updated with necessary fixes

* enabled tutorials on windows

* Initial tests - added convenience method to get the components from
calculator, show single phase profile on phase change as exp profile

* updated the lib branch

* More proper implementation with separate 3rd grey line for current
phase.

* Point to the right branch of easyApp

* check if get-DisplayResolution is working

* Allow multiple phase adds and modified button caption accordingly.

* Add return code to copyFile() for debugging purposes

* Try pyinstaller 4.5.1 instead of 4.7

* Try pyinstaller 4.6 instead of 4.7

* Fix pyinstaller to be 4.5.1 as 4.6-4.7 failed on Ubuntu

* Use python 3.8 instead of 3.7

* Refactor addedData()

* Add code signing on macOS. Remove on Windows

* Run all steps in sign macos

* Fix identity variable

* Add 'verify app signatures' step

* Update release notes

* Add notarization and stapling steps

* DOn't trust the calculator to contain anything

* Split sign app command into multiple lines

* Fix App Store notarization variables

* Use same names for app and zip in notarization

* Delete submitted zip of notarized app installer

* Fix zipped installer path in notarize step

* Removing a phase triggers unwanted index update on clicked row. Guard
against such cases.

* Handle lag on Apple server before stapling

* Increase delay after notarization to 2 minutes

* Enable code signing for master branch only

* Remove copying maintenancetool on Windows

* Fix phase scaling issues

* Enable multi-phase change

* Fix scale in examples

* Add multiphase example: Si3N4

* Display all phases on the analysis chart

* Update multi-phase example

* Add support for the multiple HKL sets

* Enable tutorial creation for Windows (#181)

* Develop branch updated with necessary fixes

* enabled tutorials on windows

* check if get-DisplayResolution is working

* Add return code to copyFile() for debugging purposes

* Try pyinstaller 4.5.1 instead of 4.7

* Try pyinstaller 4.6 instead of 4.7

* Fix pyinstaller to be 4.5.1 as 4.6-4.7 failed on Ubuntu

* Use python 3.8 instead of 3.7

* Refactor addedData()

* Update RELEASE.md

Co-authored-by: Andrew Sazonov <AndrewSazonov@users.noreply.github.com>

* Don't calculate the profile twice on project load. That's a bit silly.

* State reset removes all the phases now. #189

* slight performance improvement for project loads.
this avoids yet another profile recalculation.

* Avoid profile calculation on project reset. This was a "byproduct" of
updating the parameters after constraints changed.

* Assign interface before phases are added. This avoids recalculation of
space groups

* Merge atom_symbol_case, solving #184

* Fix for getting HKL's

* Use easyCrystallography

* Update branch name.

* Fixed the multiphase example project.
Updated README and toml with new release info.

* Add the missing crystallography content

* CHange module name after refactoring in core

* Fix the scipy interpolation errors for backgrounds

* The data recalculation is required for undo/redo.
The effect on project load is minuscule, considering all other, more
expensive operations happening.

* Added Si3N4 multiphase project example

* multiphase -> develop dependency for the lib

* Updated copyright year

* Take 'develop' branch of the library - testing

* Switch to master branches for App and Lib

* Update build-in examples

* Update repo examples

* Increase number of visible rows in examples

* Test signing

* Back to signing on master branch only

* try macos-11 (#215)

* add visual studio redistributable to the windows installer (#217)

* Add vcredist section to the qtinstaller script

* Fixed function location. Also, just upload the installer without
testing.

* Fixed overzealous delete. Removed content of RELEASE.md to not pollute
GH

* Added vc installer. Added debug stuff

* more debug statements

* Modified path to the vc package

* remove debug msgboxes

* Vc fix (#218)

* added steps removed when debugging

* This fixes a bug where loaded example project would not show phase
related info in the side bar

* Peak asymmetries from CrysPy (#223)

* Implement peak asymmetries

* Add P1D example with peak asymmetries

* Force to use `refl_asymm` branch of EDL

* Use `develop` branch of EDL

* Install extras: CFML and GSASII calculation engines

Co-authored-by: Andrew Sazonov <andrew.sazonov@esss.eu>

* Logic cleanup (#225)

* Cleaned up project load

* Refactored fitting

* Refactored most of the experiment logic

* Finished with Experiment logic refactoring

* Refactored Phase

* Explicit dependency added

* Refactored parameters and phase

* Started with signals in Experiment

* Cleaned up a few proxies

* More cleanup and unnecessary signal removals

* More signals removed, more streamlined flow

* Postpone resetting polarized component until everything else is reset

* simplify proxy signalling

* fixed typo

* Logic state now has a flag telling the profile updater whether it should
run

* Removed multiple profile updates for parameter change.
Removed profile update in state reset.

* Uninstaller shortcut. (#228)

* Add maintenace tool shortcut to the installer.

* limit the build to windows

* modified link name

* typo

* Renamed the shortcut

* back to all platforms

* Modify the main folder name

* Added missing reference

* Initial commit for the app working on
lib: experiment_cif_reader
core: io_serialization
cryst: io_rework

* Update toml with correct branch of Lib

* Wrap lists in a dict to work around a bug in current xml converter
implementation in core.

* Remaining dicttoxml -> XMLSerializer cleanup.

* More fixes for xml access path.
Restored overwritten sample cifs

* rely on io_serialize in easyApp

* XML structure slightly changed for the id field

* Updates to xml data items after fix in core

* Repeat dependency on lazy-import.

* removed dependency on lazy-import

* disable test installation so the installer is generated for local
testing.

* Try to lock scipy version

* Enable test mode run

* fixed typos

* Avoid bg update on no bg defined

* goodness_of_fit is no longer defined on the results object

* Delayed reporting - added button to generate html/charts on the report tab (#234)

* Delayed reporting - added button to generate html/charts.

* try without pyobjc

* try with version  >=9.0

* test >8.5

* is this a python 3.8 issue?

* update the workflow for 3.9

* temporarily skip the gui test

* python 3.8 with pyobjc=3.7

* go back to 7.0.1 with universal2 binaries

* try building pyobjc locally

* explicit version for pyobjc

* Use macos only and bump the versions

* switch on all platforms

* enable tutorials, clean up

* back to the original code for PR merge

* add no-binary pyobjc installation

* Set proper package name

* Bump some packages

* Try with the latest version of PyInstaller 5.7.0

* Go back to 7.0.1?

* Remove poetry from build script

* Try to include missing modules to main.py

* very initial version. Here be dragons

* Make the pyproject.toml look pretty

* yarray is an xarray -> convert for plotting.
use proper EDL branch

* fixes for serialization of the job object

* Create snapcraft image

* Fixes

* Create snapcraft.yml

* Update main.py

* fix startup

* Fix env vars

`core20` has python 3.8 built in,  as well as `gnome-3-38`. We have to coerce the paths.

* Update snapcraft.yaml

* Fix for undo/redo
Fix multiple calculations on project load

* added fixes for polarized, ToF and multiphase

* Use library-based exp cif reader and redo job properly

* Improve handling of reset, ToF and xyz loads for subsequent jobs

* Updated Examples 1-5

* Updated examples 6-8

* Update examples in standalone examples directory

* Update snapcraft

* Update snapcraft.yml

* Add snap verseion

WARNING , THIS WILL PROBABLY NOT WORK

* Update examples with proper names and readonly status.
Fix job interface update

* Updated example files with correct strings.
Fixed issue of experiment not updating correctly on cif experiment load

* Don't write empty experiment on project save

* Update snapcraft.yml

* Added the LaBaCoO3 example

* remove merge artifact

* remove merge snafu

* Another merge typo fixed

* modified new atom creation.

* Update toml with pdffit dependency and EDL release branch

* msp values are already passed through chi_xx arguments

* Nope. we don't need pdffit in the app yet.

* Update premade examples for CrysPyV2 -> CrysPy

* More fixes for issues found by AS

* update interface on calculator change

* Bumped version
Updated CHANGELOG

* Updated copyright to 2023

* try forked build

* Revert "try forked build" as it was meant for the forked repo

This reverts commit 5671f24.

* Workaround for GH runtime test failure

* Update changelog and release info

* test with released EDL before merging

* Remove dependencies defined in other packages

* Temporary fix of `from_cif` in parameter name

* Remove GSAS from dependencies

* Remove GSAS-II and update project info

* update the status bar info

* Fix data explorer display

* Fix `fitting in progress` label

* Remove temp files

* Temporary fix of build-in fitting tutorial

---------

Co-authored-by: Simon Ward <2798086+wardsimon@users.noreply.github.com>
Co-authored-by: Andrew Sazonov <AndrewSazonov@users.noreply.github.com>
Co-authored-by: Andrew Sazonov <Andrew.Sazonov@icloud.com>
Co-authored-by: Andrew Sazonov <andrew.sazonov@esss.eu>
Co-authored-by: Andrew Sazonov <andrew.sazonov@ess.eu>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants