diff --git a/.github/workflows/gui-release.yml b/.github/workflows/gui-release.yml index 2073ee7..49aa363 100644 --- a/.github/workflows/gui-release.yml +++ b/.github/workflows/gui-release.yml @@ -1,137 +1,145 @@ -name: Build GUI +name: Create Release on: push: branches-ignore: - '**' tags: - - 'v[0-9]+.[0-9]+.[0-9]+' - - 'v[0-9]+.[0-9]+.[0-9]+rc[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+rc[0-9]+' jobs: + build-binaries: + defaults: + run: + shell: bash -l {0} - Linux: - name: Build Linux - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Get tag - id: tag - run: | - echo ::set-output name=tag::${GITHUB_REF#refs/tags/} - - name: Set up Python 3.9 - uses: actions/setup-python@v2 - with: - python-version: 3.9 - - name: Setup Poetry - uses: abatilo/actions-poetry@v2.0.0 - with: - poetry-version: 1.1.13 - - name: Install dependencies - run: | - poetry update - poetry run pip install --upgrade setuptools - - name: Building GUI - run: | - poetry run pyinstaller --name=LAS-TRX-${{ steps.tag.outputs.tag }} --onefile --icon='las_trx/resources/las-trx.ico' --add-data='las_trx/resources/las-trx.ico:resources' las_trx/__main__.py - - name: Gzip release - run: | - tar -czvf dist/LAS-TRX-${{ steps.tag.outputs.tag }}-linux.tar.gz -C dist LAS-TRX-${{ steps.tag.outputs.tag }} - - name: Upload Gzip artifact - uses: actions/upload-artifact@v1 - with: - name: LAS-TRX-${{ steps.tag.outputs.tag }}-linux.tar.gz - path: dist/LAS-TRX-${{ steps.tag.outputs.tag }}-linux.tar.gz + strategy: + matrix: + os: [ windows-latest, ubuntu-latest ] + + runs-on: ${{ matrix.os }} - Windows: - name: Build Windows - runs-on: windows-latest steps: - uses: actions/checkout@v2 - - name: Get tag - id: tag - shell: bash - run: | - echo ::set-output name=tag::${GITHUB_REF#refs/tags/} + - name: Set up Python 3.9 - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: "3.9" + - name: Setup Poetry uses: abatilo/actions-poetry@v2.0.0 with: - poetry-version: 1.1.13 + poetry-version: 1.2.2 + + - name: Get version tag + run: echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV + + - name: Install Linux dependencies + if: ${{ runner.os == 'Linux' }} + run: > + sudo apt-get install + '^libxcb.*-dev' + libx11-xcb-dev + libglu1-mesa-dev + libxrender-dev + libxi-dev + libxkbcommon-dev + libxkbcommon-x11-dev + - name: Install dependencies run: | - poetry update - poetry run pip install --upgrade setuptools - - name: Building GUI - run: | - poetry run pyinstaller --name=LAS-TRX-${{ steps.tag.outputs.tag }} --onefile --windowed --icon='las_trx\resources\las-trx.ico' --add-data='las_trx\resources\las-trx.ico;resources' las_trx\__main__.py - - name: Zip release - run: | - cd dist - 7z a LAS-TRX-${{ steps.tag.outputs.tag }}-win64.zip LAS-TRX-${{ steps.tag.outputs.tag }}.exe - cd - - - name: Upload Zip artifact - uses: actions/upload-artifact@v1 + poetry version ${{ env.tag }} + sed -i "s/0.0.0/${{ env.tag }}/g" las_trx/__init__.py + poetry run pip install --upgrade pip setuptools + poetry install + + - name: Build Linux GUI Executable + if: ${{ runner.os == 'Linux' }} + run: > + poetry run pyinstaller + --onefile + --icon="las_trx/resources/las-trx.ico" + --add-data="las_trx/resources/las-trx.ico:resources" + --add-data="las_trx/resources/*.ui:resources" + las_trx/__main__.py + + - name: Build Windows GUI Executable + if: ${{ runner.os == 'Windows' }} + run: > + poetry run pyinstaller + --onefile + --windowed + --icon="las_trx\resources\las-trx.ico" + --add-data="las_trx\resources\las-trx.ico;resources" + --add-data="las_trx\resources\*.ui;resources" + las_trx/__main__.py + + - name: Archive release artifacts + uses: actions/upload-artifact@v3 with: - name: LAS-TRX-${{ steps.tag.outputs.tag }}-win64.zip - path: dist/LAS-TRX-${{ steps.tag.outputs.tag }}-win64.zip + name: ${{ matrix.os }}-dist + path: dist - Release: - needs: [ Linux, Windows ] + create-release: + needs: build-binaries runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v2 + - uses: actions/checkout@v2 + - name: Get tag id: tag - run: | - echo ::set-output name=tag::${GITHUB_REF#refs/tags/} + run: echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV + - name: Detect prerelease id: prerelease run: | - if echo ${{ steps.tag.outputs.tag }} | grep -qe '?*.*.*rc*'; then - echo ::set-output name=prerelease::true + if echo ${{ env.tag }} | grep -qe '?*.*.*rc*'; then + echo "prerelease=true" >> $GITHUB_ENV else - echo ::set-output name=prerelease::false + echo "prerelease=false" >> $GITHUB_ENV fi - - name: Download Linux gzip release file - uses: actions/download-artifact@master + + - name: Download Windows artifacts + uses: actions/download-artifact@v2 with: - name: LAS-TRX-${{ steps.tag.outputs.tag }}-linux.tar.gz - path: dist/LAS-TRX-${{ steps.tag.outputs.tag }}-linux.tar.gz - - name: Download Windows zip release file - uses: actions/download-artifact@master + name: windows-latest-dist + path: win64-dist + + - name: Download Ubuntu artifacts + uses: actions/download-artifact@v2 with: - name: LAS-TRX-${{ steps.tag.outputs.tag }}-win64.zip - path: dist/LAS-TRX-${{ steps.tag.outputs.tag }}-win64.zip + name: ubuntu-latest-dist + path: linux-dist + - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tag_name: ${{ steps.tag.outputs.tag }} - release_name: ${{ steps.tag.outputs.tag }} - draft: false - prerelease: ${{ steps.prerelease.outputs.prerelease }} - - name: Upload Linux gzip release file asset - uses: actions/upload-release-asset@v1.0.1 + tag_name: ${{ env.tag }} + release_name: v${{ env.tag }} + draft: true + prerelease: ${{ env.prerelease }} + + - name: Upload Windows GUI assets + uses: actions/upload-release-asset@v1.0.2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: dist/LAS-TRX-${{ steps.tag.outputs.tag }}-linux.tar.gz/LAS-TRX-${{ steps.tag.outputs.tag }}-linux.tar.gz - asset_name: LAS-TRX-${{ steps.tag.outputs.tag }}-linux.tar.gz - asset_content_type: application/gzip - - name: Upload Windows zip release file asset - uses: actions/upload-release-asset@v1.0.1 + asset_path: win64-dist/__main__.exe + asset_name: LAS-TRX-v${{ env.tag }}-win64.exe + asset_content_type: application/octet-stream + + - name: Upload Ubuntu GUI assets + uses: actions/upload-release-asset@v1.0.2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: dist/LAS-TRX-${{ steps.tag.outputs.tag }}-win64.zip/LAS-TRX-${{ steps.tag.outputs.tag }}-win64.zip - asset_name: LAS-TRX-${{ steps.tag.outputs.tag }}-win64.zip - asset_content_type: application/zip + asset_path: linux-dist/__main__ + asset_name: LAS-TRX-v${{ env.tag }}-linux + asset_content_type: application/octet-stream diff --git a/las_trx/__init__.py b/las_trx/__init__.py index e69de29..6c8e6b9 100644 --- a/las_trx/__init__.py +++ b/las_trx/__init__.py @@ -0,0 +1 @@ +__version__ = "0.0.0" diff --git a/las_trx/__main__.py b/las_trx/__main__.py index 1fcb8ae..264b124 100755 --- a/las_trx/__main__.py +++ b/las_trx/__main__.py @@ -1,52 +1,46 @@ import logging import os.path import queue -import sys from datetime import date from multiprocessing import freeze_support from pathlib import Path from queue import Queue -from PySide2.QtCore import QSize, QThread, Signal -from PySide2.QtGui import QIcon, QTextCursor -from PySide2.QtWidgets import ( +import sys +from PyQt6 import uic +from PyQt6.QtCore import QThread, pyqtSignal as Signal +from PyQt6.QtGui import QIcon, QTextCursor +from PyQt6.QtWidgets import ( QApplication, QErrorMessage, QFileDialog, - QMainWindow, QMessageBox, + QWidget, ) from csrspy.enums import CoordType, Reference, VerticalDatum +from las_trx import __version__ from las_trx.config import TransformConfig -from las_trx.ui_mainwindow import Ui_MainWindow from las_trx.utils import ( REFERENCE_LOOKUP, VD_LOOKUP, sync_missing_grid_files, utm_zone_to_coord_type, + resource_path, ) from las_trx.worker import TransformWorker logger = logging.getLogger(__name__) -def resource_path(relative_path: str): - """Get absolute path to resource, works for dev and for PyInstaller""" - base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__))) - return os.path.join(base_path, relative_path) - - -class MainWindow(QMainWindow): +class MainWindow(QWidget): def __init__(self): - super(MainWindow, self).__init__() - self.ui = Ui_MainWindow() - self.ui.setupUi(self) - icon = QIcon() - icon.addFile( - resource_path("resources/las-trx.ico"), QSize(), QIcon.Normal, QIcon.Off - ) - self.setWindowIcon(icon) + super().__init__() + uic.loadUi(resource_path("resources/mainwindow.ui"), self) + + # Setup window + self.setWindowIcon(QIcon(resource_path("resources/las-trx.ico"))) + self.setWindowTitle(f"LAS TRX v{__version__}") self.done_msg_box = QMessageBox(self) self.done_msg_box.setText("File(s) converted successfully") @@ -62,24 +56,24 @@ def __init__(self): ) self.help_msg_box.setWindowTitle("Help") - self.ui.toolButton_input_file.clicked.connect(self.handle_select_input_file) - self.ui.toolButton_output_file.clicked.connect(self.handle_select_output_file) - self.ui.checkBox_epoch_trans.clicked.connect(self.enable_epoch_trans) - self.ui.pushButton_convert.clicked.connect(self.convert) - self.ui.comboBox_input_reference.currentTextChanged.connect( + self.toolButton_input_file.clicked.connect(self.handle_select_input_file) + self.toolButton_output_file.clicked.connect(self.handle_select_output_file) + self.checkBox_epoch_trans.clicked.connect(self.enable_epoch_trans) + self.pushButton_convert.clicked.connect(self.convert) + self.comboBox_input_reference.currentTextChanged.connect( self.update_input_vd_options ) - self.ui.comboBox_output_reference.currentTextChanged.connect( + self.comboBox_output_reference.currentTextChanged.connect( self.update_output_vd_options ) - self.ui.dateEdit_input_epoch.dateChanged.connect(self.maybe_update_output_epoch) - self.ui.comboBox_output_coordinates.currentTextChanged.connect( + self.dateEdit_input_epoch.dateChanged.connect(self.maybe_update_output_epoch) + self.comboBox_output_coordinates.currentTextChanged.connect( self.activate_output_utm_zone_picker ) - self.ui.comboBox_input_coordinates.currentTextChanged.connect( + self.comboBox_input_coordinates.currentTextChanged.connect( self.activate_input_utm_zone_picker ) - self.ui.toolButton_help.clicked.connect(self.help_msg_box.exec_) + self.toolButton_help.clicked.connect(self.help_msg_box.exec) self.dialog_directory = os.path.expanduser("~") @@ -88,85 +82,85 @@ def __init__(self): sync_missing_grid_files() def maybe_update_output_epoch(self, new_date: date): - if not self.ui.checkBox_epoch_trans.isChecked(): - self.ui.dateEdit_output_epoch.setDate(new_date) + if not self.checkBox_epoch_trans.isChecked(): + self.dateEdit_output_epoch.setDate(new_date) def handle_select_input_file(self): path, _ = QFileDialog.getOpenFileName( self, "Select input LAS file", - dir=self.dialog_directory, + directory=self.dialog_directory, filter="LAS Files (*.las *.laz)", ) if path: - self.ui.lineEdit_input_file.setText(path) + self.lineEdit_input_file.setText(path) self.dialog_directory = os.path.dirname(path) def handle_select_output_file(self): path, _ = QFileDialog.getSaveFileName( self, "Select output LAS file", - dir=self.dialog_directory, + directory=self.dialog_directory, filter="LAS Files (*.las *.laz)", ) if path: - self.ui.lineEdit_output_file.setText(path) + self.lineEdit_output_file.setText(path) self.dialog_directory = os.path.dirname(path) def enable_epoch_trans(self, checked): - self.ui.dateEdit_output_epoch.setEnabled(checked) + self.dateEdit_output_epoch.setEnabled(checked) if not checked: - self.ui.dateEdit_output_epoch.setDate(self.ui.dateEdit_input_epoch.date()) + self.dateEdit_output_epoch.setDate(self.dateEdit_input_epoch.date()) def activate_input_utm_zone_picker(self, text): - self.ui.spinBox_input_utm_zone.setEnabled(text == "UTM") + self.spinBox_input_utm_zone.setEnabled(text == "UTM") def activate_output_utm_zone_picker(self, text): - self.ui.spinBox_output_utm_zone.setEnabled(text == "UTM") + self.spinBox_output_utm_zone.setEnabled(text == "UTM") - def update_input_vd_options(self, text): - self.ui.comboBox_input_vertical_reference.clear() + @staticmethod + def update_vd_options(text, combo_box): + combo_box.clear() if text == "NAD83(CSRS)": - self.ui.comboBox_input_vertical_reference.addItems( + combo_box.addItems( ["GRS80", "CGVD2013/CGG2013a", "CGVD2013/CGG2013", "CGVD28/HT2_2010v70"] ) + elif text == "WGS84": + combo_box.addItems(["WGS84"]) else: - self.ui.comboBox_input_vertical_reference.addItems(["GRS80"]) + combo_box.addItems(["GRS80"]) + + def update_input_vd_options(self, text): + self.update_vd_options(text, self.comboBox_input_vertical_reference) def update_output_vd_options(self, text): - self.ui.comboBox_output_vertical_reference.clear() - if text == "NAD83(CSRS)": - self.ui.comboBox_output_vertical_reference.addItems( - ["GRS80", "CGVD2013/CGG2013a", "CGVD2013/CGG2013", "CGVD28/HT2_2010v70"] - ) - else: - self.ui.comboBox_output_vertical_reference.addItems(["GRS80"]) + self.update_vd_options(text, self.comboBox_output_vertical_reference) @property def s_ref_frame(self) -> Reference: - return REFERENCE_LOOKUP[self.ui.comboBox_input_reference.currentText()] + return REFERENCE_LOOKUP[self.comboBox_input_reference.currentText()] @property def t_ref_frame(self) -> Reference: - return REFERENCE_LOOKUP[self.ui.comboBox_output_reference.currentText()] + return REFERENCE_LOOKUP[self.comboBox_output_reference.currentText()] @property def s_epoch(self) -> date: - return self.ui.dateEdit_input_epoch.date().toPython() + return self.dateEdit_input_epoch.date().toPyDate() @property def t_epoch(self) -> date: - if self.ui.checkBox_epoch_trans.isChecked(): - return self.ui.dateEdit_output_epoch.date().toPython() + if self.checkBox_epoch_trans.isChecked(): + return self.dateEdit_output_epoch.date().toPyDate() else: return self.s_epoch @property def s_coords(self) -> CoordType: - out_type = self.ui.comboBox_input_coordinates.currentText() + out_type = self.comboBox_input_coordinates.currentText() if out_type == "UTM": - return utm_zone_to_coord_type(self.ui.spinBox_output_utm_zone.value()) + return utm_zone_to_coord_type(self.spinBox_output_utm_zone.value()) elif out_type == "Cartesian": return CoordType.CART else: @@ -174,9 +168,9 @@ def s_coords(self) -> CoordType: @property def t_coords(self) -> CoordType: - out_type = self.ui.comboBox_output_coordinates.currentText() + out_type = self.comboBox_output_coordinates.currentText() if out_type == "UTM": - return utm_zone_to_coord_type(self.ui.spinBox_output_utm_zone.value()) + return utm_zone_to_coord_type(self.spinBox_output_utm_zone.value()) elif out_type == "Cartesian": return CoordType.CART else: @@ -184,11 +178,11 @@ def t_coords(self) -> CoordType: @property def s_vd(self) -> VerticalDatum: - return VD_LOOKUP[self.ui.comboBox_input_vertical_reference.currentText()] + return VD_LOOKUP[self.comboBox_input_vertical_reference.currentText()] @property def t_vd(self) -> VerticalDatum: - return VD_LOOKUP[self.ui.comboBox_output_vertical_reference.currentText()] + return VD_LOOKUP[self.comboBox_output_vertical_reference.currentText()] @property def transform_config(self) -> TransformConfig: @@ -205,17 +199,17 @@ def transform_config(self) -> TransformConfig: @property def input_files(self) -> list[Path]: - p = Path(self.ui.lineEdit_input_file.text()) + p = Path(self.lineEdit_input_file.text()) return [f for f in p.parent.glob(p.name) if f.is_file()] @property def output_files(self) -> list[Path]: - out_path = self.ui.lineEdit_output_file.text() + out_path = self.lineEdit_output_file.text() return [Path(out_path.format(f.stem)) for f in self.input_files] def append_text(self, text): - self.ui.textBrowser_log_output.moveCursor(QTextCursor.End) - self.ui.textBrowser_log_output.insertPlainText(text) + self.textBrowser_log_output.moveCursor(QTextCursor.MoveOperation.End) + self.textBrowser_log_output.insertPlainText(text) def on_process_success(self): logger.info("Processing complete") @@ -233,24 +227,20 @@ def convert(self): self.transform_config, self.input_files, self.output_files ) - self.thread.progress.connect(self.ui.progressBar.setValue) + self.thread.progress.connect(self.progressBar.setValue) self.thread.success.connect(self.on_process_success) self.thread.error.connect(self.on_process_error) - self.thread.started.connect( - lambda: self.ui.pushButton_convert.setEnabled(False) - ) - self.thread.finished.connect( - lambda: self.ui.pushButton_convert.setEnabled(True) - ) - self.thread.finished.connect(lambda: self.ui.progressBar.setValue(0)) + self.thread.started.connect(lambda: self.pushButton_convert.setEnabled(False)) + self.thread.finished.connect(lambda: self.pushButton_convert.setEnabled(True)) + self.thread.finished.connect(lambda: self.progressBar.setValue(0)) self.thread.start() class LogWriteStream(object): - def __init__(self, queue): + def __init__(self, queue_): super().__init__() - self.queue = queue + self.queue = queue_ def write(self, text): self.queue.put(text) @@ -259,9 +249,9 @@ def write(self, text): class LogDisplayThread(QThread): on_msg = Signal(str) - def __init__(self, queue: Queue, *args, **kwargs): + def __init__(self, queue_: Queue, *args, **kwargs): super().__init__(*args, **kwargs) - self.queue = queue + self.queue = queue_ def run(self): while not self.isInterruptionRequested(): @@ -287,10 +277,12 @@ def run(self): window.show() # When a new message is written to the log_queue via the log_write_stream, log_thread emits a signal that causes the main + # When a new message is written to the log_queue via the log_write_stream, + # log_thread emits a signal that causes the main # window to display that msg in the textBrowser log_thread = LogDisplayThread(log_msg_queue) log_thread.on_msg.connect(window.append_text) app.aboutToQuit.connect(log_thread.requestInterruption) log_thread.start() - sys.exit(app.exec_()) + sys.exit(app.exec()) diff --git a/las_trx/config.py b/las_trx/config.py index 3c01a09..ad24c15 100644 --- a/las_trx/config.py +++ b/las_trx/config.py @@ -1,7 +1,6 @@ from datetime import date from typing import Union -from csrspy import enums from pydantic import BaseModel, validator from pyproj.crs import ( CRS, @@ -14,6 +13,7 @@ from pyproj.crs.coordinate_operation import UTMConversion from pyproj.crs.coordinate_system import Cartesian2DCS +from csrspy import enums from las_trx.utils import date_to_decimal_year, get_utm_zone, is_utm_coord_type @@ -61,6 +61,8 @@ def t_crs(self) -> CRS: geodetic_crs = GeographicCRS.from_epsg(8989) elif self.t_ref_frame == enums.Reference.ITRF88: geodetic_crs = GeographicCRS.from_epsg(8988) + elif self.t_ref_frame == enums.Reference.WGS84: + geodetic_crs = GeographicCRS.from_epsg(4326) else: raise KeyError(f"No implementation found for {self.t_ref_frame}") diff --git a/las_trx/resources/mainwindow.ui b/las_trx/resources/mainwindow.ui index 55673fc..61824fd 100644 --- a/las_trx/resources/mainwindow.ui +++ b/las_trx/resources/mainwindow.ui @@ -1,736 +1,753 @@ MainWindow - + 0 0 - 576 + 611 789 LAS TRX - - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - 0 - 0 - + + + 9 + + + 9 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + 0 + 0 + + + + + 12 + 75 + true + + + + Origin + + + + + + + Qt::Horizontal + + + + + + + + 0 - - - 12 - 75 - true - + + 0 - - Origin + + + + Input File + + + lineEdit_input_file + + + + + + + + + + ... + + + + + + + + + + + 0 - - - - - - Qt::Horizontal + + 0 - - - - - - - 0 - - - 0 - - - - - Input File - - - lineEdit_input_file - - - - - - - - - - ... - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::LeftToRight - - - false - - - Batch Mode? - - - Qt::ToolButtonTextOnly - - - true - - - - - - - - - - - 0 - - - 0 - - - - - true - - - 7 - - - 22 - - - 10 - - - - - - - 2 - - - - Geographic - - - - - Cartesian - - - - - UTM - - - - - - - - 1 - - - - NAD83(CSRS) - - - - - ITRF2014 - - - - - ITRF2008 - - - - - ITRF2005 - - - - - ITRF2000 - - - - - ITRF97 - - - - - ITRF96 - - - - - ITRF94 - - - - - ITRF93 - - - - - ITRF92 - - - - - ITRF91 - - - - - ITRF90 - - - - - ITRF89 - - - - - ITRF88 - - - - - - - - - - - - 7 - 59 - 59 - 9998 - 1 - 9 - - - - yyyy-MM-dd - - - true - - - Qt::UTC - - - - 2010 - 1 - 1 - - - - - - - - Reference Frame - - - comboBox_input_reference - - - - - - - UTM Zone - - - spinBox_input_utm_zone - - - - - - - Coordinates - - - comboBox_input_coordinates - - - - - - - Epoch (YYYY-MM-DD) - - - dateEdit_input_epoch - - - - - - - Vertical Reference - - - comboBox_input_vertical_reference - - - - - - - - GRS80 - - - - - - - - - - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - 0 - 0 - + + 0 - - - 12 - 75 - true - + + 0 - - Destination + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::LeftToRight + + + false + + + Batch Mode? + + + Qt::ToolButtonTextOnly + + + true + + + + + + + + + + + 0 - - - - - - Qt::Horizontal + + 0 - - - - - - - 0 - - - 0 - - - - - Output file - - - lineEdit_output_file - - - - - - - - - - ... - - - - - - - - - - - 0 - - - 0 - - - 6 - - - - - Vertical Reference - - - comboBox_output_vertical_reference - - - - - - - true - - - - NAD83(CSRS) - - - - - ITRF2014 - - - - - ITRF2008 - - - - - ITRF2005 - - - - - ITRF2000 - - - - - ITRF97 - - - - - ITRF96 - - - - - ITRF94 - - - - - ITRF93 - - - - - ITRF92 - - - - - ITRF91 - - - - - ITRF90 - - - - - ITRF89 - - - - - ITRF88 - - - - - - - - Coordinates - - - comboBox_output_coordinates - - - - - - - Reference Frame - - - comboBox_output_reference - - - - - - - Epoch (YYYY-MM-DD) - - - dateEdit_output_epoch - - - - - - - true - - - 7 - - - 22 - - - 10 - - - 10 - - - - - - - false - - - - - - yyyy-MM-dd - - - true - - - Qt::UTC - - - - 2010 - 1 - 1 - - - - - - - - 2 - - - - Geographic - - - - - Cartesian - - - - - UTM - - - - - - - - UTM Zone - - - spinBox_output_utm_zone - - - - - - - true - - - - GRS80 - - - - - CGVD2013/CGG2013a - - - - - CGVD2013/CGG2013 - - - - - CGVD28/HT2_2010v70 - - - - - - - - Qt::LeftToRight - - - Epoch Transformation - - - - - - - - - - - - - Log Output - - - - - - - QFrame::Sunken - - - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - - + + + + true + + + 7 + + + 22 + + + 10 + + + + + + + 2 + + + + Geographic + + + + + Cartesian + + + + + UTM + + + + + + + + WGS84 + + + 1 + + + + NAD83(CSRS) + + + + + WGS84 + + + + + ITRF2014 + + + + + ITRF2008 + + + + + ITRF2005 + + + + + ITRF2000 + + + + + ITRF97 + + + + + ITRF96 + + + + + ITRF94 + + + + + ITRF93 + + + + + ITRF92 + + + + + ITRF91 + + + + + ITRF90 + + + + + ITRF89 + + + + + ITRF88 + + + + + + + + + + + + 7 + 59 + 59 + 9998 + 1 + 14 + + + + yyyy-MM-dd + + + true + + + Qt::UTC + + + + 2010 + 1 + 1 + + + + + + + + Reference Frame + + + comboBox_input_reference + + + + + + + UTM Zone + + + spinBox_input_utm_zone + + + + + + + Coordinates + + + comboBox_input_coordinates + + + + + + + Epoch (YYYY-MM-DD) + + + dateEdit_input_epoch + + + + + + + Vertical Reference + + + comboBox_input_vertical_reference + + + + + + + + WGS84 + + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + 0 + 0 + + + + + 12 + 75 + true + + + + Destination + + + + + + + Qt::Horizontal + + + + + + + 0 - - true + + 0 - - - - - - Convert + + + + Output file + + + lineEdit_output_file + + + + + + + + + + ... + + + + + + + + + + + 0 - - - - - - - + + 0 + + + 6 + + + + + Vertical Reference + + + comboBox_output_vertical_reference + + + + + + + true + + + + NAD83(CSRS) + + + + + WGS84 + + + + + ITRF2014 + + + + + ITRF2008 + + + + + ITRF2005 + + + + + ITRF2000 + + + + + ITRF97 + + + + + ITRF96 + + + + + ITRF94 + + + + + ITRF93 + + + + + ITRF92 + + + + + ITRF91 + + + + + ITRF90 + + + + + ITRF89 + + + + + ITRF88 + + + + + + + + Coordinates + + + comboBox_output_coordinates + + + + + + + Reference Frame + + + comboBox_output_reference + + + + + + + Epoch (YYYY-MM-DD) + + + dateEdit_output_epoch + + + + + + + true + + + 7 + + + 22 + + + 10 + + + 10 + + + + + + + false + + + + + + yyyy-MM-dd + + + true + + + Qt::UTC + + + + 2010 + 1 + 1 + + + + + + + + 2 + + + + Geographic + + + + + Cartesian + + + + + UTM + + + + + + + + UTM Zone + + + spinBox_output_utm_zone + + + + + + + true + + + + GRS80 + + + + + CGVD2013/CGG2013a + + + + + CGVD2013/CGG2013 + + + + + CGVD28/HT2_2010v70 + + + + + + + + Qt::LeftToRight + + + Epoch Transformation + + + + + + + + + + + + + Log Output + + + + + + + QFrame::Sunken + + + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + + + 0 + + + true + + + + + + + Convert + + + + + + + lineEdit_input_file diff --git a/las_trx/ui_mainwindow.py b/las_trx/ui_mainwindow.py deleted file mode 100644 index f94150d..0000000 --- a/las_trx/ui_mainwindow.py +++ /dev/null @@ -1,473 +0,0 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'mainwindow.ui' -## -## Created by: Qt User Interface Compiler version 5.15.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide2.QtCore import * -from PySide2.QtGui import * -from PySide2.QtWidgets import * - - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - if not MainWindow.objectName(): - MainWindow.setObjectName(u"MainWindow") - MainWindow.resize(576, 789) - self.centralwidget = QWidget(MainWindow) - self.centralwidget.setObjectName(u"centralwidget") - self.verticalLayout = QVBoxLayout(self.centralwidget) - self.verticalLayout.setObjectName(u"verticalLayout") - self.frame_input = QFrame(self.centralwidget) - self.frame_input.setObjectName(u"frame_input") - self.frame_input.setFrameShape(QFrame.StyledPanel) - self.frame_input.setFrameShadow(QFrame.Raised) - self.verticalLayout_5 = QVBoxLayout(self.frame_input) - self.verticalLayout_5.setObjectName(u"verticalLayout_5") - self.label_input = QLabel(self.frame_input) - self.label_input.setObjectName(u"label_input") - sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.label_input.sizePolicy().hasHeightForWidth()) - self.label_input.setSizePolicy(sizePolicy) - font = QFont() - font.setPointSize(12) - font.setBold(True) - font.setWeight(75) - self.label_input.setFont(font) - - self.verticalLayout_5.addWidget(self.label_input) - - self.line_input = QFrame(self.frame_input) - self.line_input.setObjectName(u"line_input") - self.line_input.setFrameShape(QFrame.HLine) - self.line_input.setFrameShadow(QFrame.Sunken) - - self.verticalLayout_5.addWidget(self.line_input) - - self.widget_input_file = QWidget(self.frame_input) - self.widget_input_file.setObjectName(u"widget_input_file") - self.horizontalLayout = QHBoxLayout(self.widget_input_file) - self.horizontalLayout.setObjectName(u"horizontalLayout") - self.horizontalLayout.setContentsMargins(0, -1, 0, -1) - self.label_input_file = QLabel(self.widget_input_file) - self.label_input_file.setObjectName(u"label_input_file") - - self.horizontalLayout.addWidget(self.label_input_file) - - self.lineEdit_input_file = QLineEdit(self.widget_input_file) - self.lineEdit_input_file.setObjectName(u"lineEdit_input_file") - - self.horizontalLayout.addWidget(self.lineEdit_input_file) - - self.toolButton_input_file = QToolButton(self.widget_input_file) - self.toolButton_input_file.setObjectName(u"toolButton_input_file") - - self.horizontalLayout.addWidget(self.toolButton_input_file) - - - self.verticalLayout_5.addWidget(self.widget_input_file) - - self.widget = QWidget(self.frame_input) - self.widget.setObjectName(u"widget") - self.horizontalLayout_3 = QHBoxLayout(self.widget) - self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") - self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) - self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) - - self.horizontalLayout_3.addItem(self.horizontalSpacer) - - self.toolButton_help = QToolButton(self.widget) - self.toolButton_help.setObjectName(u"toolButton_help") - self.toolButton_help.setLayoutDirection(Qt.LeftToRight) - self.toolButton_help.setAutoFillBackground(False) - self.toolButton_help.setToolButtonStyle(Qt.ToolButtonTextOnly) - self.toolButton_help.setAutoRaise(True) - - self.horizontalLayout_3.addWidget(self.toolButton_help) - - - self.verticalLayout_5.addWidget(self.widget) - - self.widget_input_options = QWidget(self.frame_input) - self.widget_input_options.setObjectName(u"widget_input_options") - self.gridLayout = QGridLayout(self.widget_input_options) - self.gridLayout.setObjectName(u"gridLayout") - self.gridLayout.setContentsMargins(0, -1, 0, -1) - self.spinBox_input_utm_zone = QSpinBox(self.widget_input_options) - self.spinBox_input_utm_zone.setObjectName(u"spinBox_input_utm_zone") - self.spinBox_input_utm_zone.setEnabled(True) - self.spinBox_input_utm_zone.setMinimum(7) - self.spinBox_input_utm_zone.setMaximum(22) - self.spinBox_input_utm_zone.setValue(10) - - self.gridLayout.addWidget(self.spinBox_input_utm_zone, 5, 1, 1, 1) - - self.comboBox_input_coordinates = QComboBox(self.widget_input_options) - self.comboBox_input_coordinates.addItem("") - self.comboBox_input_coordinates.addItem("") - self.comboBox_input_coordinates.addItem("") - self.comboBox_input_coordinates.setObjectName(u"comboBox_input_coordinates") - - self.gridLayout.addWidget(self.comboBox_input_coordinates, 5, 0, 1, 1) - - self.comboBox_input_reference = QComboBox(self.widget_input_options) - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.addItem("") - self.comboBox_input_reference.setObjectName(u"comboBox_input_reference") - - self.gridLayout.addWidget(self.comboBox_input_reference, 1, 0, 1, 1) - - self.dateEdit_input_epoch = QDateEdit(self.widget_input_options) - self.dateEdit_input_epoch.setObjectName(u"dateEdit_input_epoch") - self.dateEdit_input_epoch.setTime(QTime(8, 0, 0)) - self.dateEdit_input_epoch.setMaximumDateTime(QDateTime(QDate(9998, 1, 9), QTime(7, 59, 59))) - self.dateEdit_input_epoch.setDisplayFormat(u"yyyy-MM-dd") - self.dateEdit_input_epoch.setCalendarPopup(True) - self.dateEdit_input_epoch.setTimeSpec(Qt.UTC) - self.dateEdit_input_epoch.setDate(QDate(2010, 1, 1)) - - self.gridLayout.addWidget(self.dateEdit_input_epoch, 1, 1, 1, 1) - - self.label_input_reference = QLabel(self.widget_input_options) - self.label_input_reference.setObjectName(u"label_input_reference") - - self.gridLayout.addWidget(self.label_input_reference, 0, 0, 1, 1) - - self.label_input_utm_zone = QLabel(self.widget_input_options) - self.label_input_utm_zone.setObjectName(u"label_input_utm_zone") - - self.gridLayout.addWidget(self.label_input_utm_zone, 3, 1, 1, 1) - - self.label_input_coordinates = QLabel(self.widget_input_options) - self.label_input_coordinates.setObjectName(u"label_input_coordinates") - - self.gridLayout.addWidget(self.label_input_coordinates, 3, 0, 1, 1) - - self.label_input_epoch = QLabel(self.widget_input_options) - self.label_input_epoch.setObjectName(u"label_input_epoch") - - self.gridLayout.addWidget(self.label_input_epoch, 0, 1, 1, 1) - - self.label_input_vertical_reference = QLabel(self.widget_input_options) - self.label_input_vertical_reference.setObjectName(u"label_input_vertical_reference") - - self.gridLayout.addWidget(self.label_input_vertical_reference, 6, 0, 1, 1) - - self.comboBox_input_vertical_reference = QComboBox(self.widget_input_options) - self.comboBox_input_vertical_reference.addItem("") - self.comboBox_input_vertical_reference.setObjectName(u"comboBox_input_vertical_reference") - - self.gridLayout.addWidget(self.comboBox_input_vertical_reference, 7, 0, 1, 1) - - - self.verticalLayout_5.addWidget(self.widget_input_options) - - - self.verticalLayout.addWidget(self.frame_input) - - self.frame_output = QFrame(self.centralwidget) - self.frame_output.setObjectName(u"frame_output") - self.frame_output.setFrameShape(QFrame.StyledPanel) - self.frame_output.setFrameShadow(QFrame.Raised) - self.verticalLayout_6 = QVBoxLayout(self.frame_output) - self.verticalLayout_6.setObjectName(u"verticalLayout_6") - self.label_output = QLabel(self.frame_output) - self.label_output.setObjectName(u"label_output") - sizePolicy.setHeightForWidth(self.label_output.sizePolicy().hasHeightForWidth()) - self.label_output.setSizePolicy(sizePolicy) - self.label_output.setFont(font) - - self.verticalLayout_6.addWidget(self.label_output) - - self.line_output = QFrame(self.frame_output) - self.line_output.setObjectName(u"line_output") - self.line_output.setFrameShape(QFrame.HLine) - self.line_output.setFrameShadow(QFrame.Sunken) - - self.verticalLayout_6.addWidget(self.line_output) - - self.widget_output_file = QWidget(self.frame_output) - self.widget_output_file.setObjectName(u"widget_output_file") - self.horizontalLayout_2 = QHBoxLayout(self.widget_output_file) - self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") - self.horizontalLayout_2.setContentsMargins(0, -1, 0, -1) - self.label_output_file = QLabel(self.widget_output_file) - self.label_output_file.setObjectName(u"label_output_file") - - self.horizontalLayout_2.addWidget(self.label_output_file) - - self.lineEdit_output_file = QLineEdit(self.widget_output_file) - self.lineEdit_output_file.setObjectName(u"lineEdit_output_file") - - self.horizontalLayout_2.addWidget(self.lineEdit_output_file) - - self.toolButton_output_file = QToolButton(self.widget_output_file) - self.toolButton_output_file.setObjectName(u"toolButton_output_file") - - self.horizontalLayout_2.addWidget(self.toolButton_output_file) - - - self.verticalLayout_6.addWidget(self.widget_output_file) - - self.widget_output_options = QWidget(self.frame_output) - self.widget_output_options.setObjectName(u"widget_output_options") - self.gridLayout_2 = QGridLayout(self.widget_output_options) - self.gridLayout_2.setObjectName(u"gridLayout_2") - self.gridLayout_2.setVerticalSpacing(6) - self.gridLayout_2.setContentsMargins(0, -1, 0, -1) - self.label_output_vertical_reference = QLabel(self.widget_output_options) - self.label_output_vertical_reference.setObjectName(u"label_output_vertical_reference") - - self.gridLayout_2.addWidget(self.label_output_vertical_reference, 7, 0, 1, 1) - - self.comboBox_output_reference = QComboBox(self.widget_output_options) - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.addItem("") - self.comboBox_output_reference.setObjectName(u"comboBox_output_reference") - self.comboBox_output_reference.setEnabled(True) - - self.gridLayout_2.addWidget(self.comboBox_output_reference, 3, 0, 1, 1) - - self.label_output_coordinates = QLabel(self.widget_output_options) - self.label_output_coordinates.setObjectName(u"label_output_coordinates") - - self.gridLayout_2.addWidget(self.label_output_coordinates, 4, 0, 1, 1) - - self.label_output_reference = QLabel(self.widget_output_options) - self.label_output_reference.setObjectName(u"label_output_reference") - - self.gridLayout_2.addWidget(self.label_output_reference, 1, 0, 1, 1) - - self.label_output_epoch = QLabel(self.widget_output_options) - self.label_output_epoch.setObjectName(u"label_output_epoch") - - self.gridLayout_2.addWidget(self.label_output_epoch, 1, 1, 1, 1) - - self.spinBox_output_utm_zone = QSpinBox(self.widget_output_options) - self.spinBox_output_utm_zone.setObjectName(u"spinBox_output_utm_zone") - self.spinBox_output_utm_zone.setEnabled(True) - self.spinBox_output_utm_zone.setMinimum(7) - self.spinBox_output_utm_zone.setMaximum(22) - self.spinBox_output_utm_zone.setValue(10) - self.spinBox_output_utm_zone.setDisplayIntegerBase(10) - - self.gridLayout_2.addWidget(self.spinBox_output_utm_zone, 5, 1, 1, 1) - - self.dateEdit_output_epoch = QDateEdit(self.widget_output_options) - self.dateEdit_output_epoch.setObjectName(u"dateEdit_output_epoch") - self.dateEdit_output_epoch.setEnabled(False) - self.dateEdit_output_epoch.setTime(QTime(8, 0, 0)) - self.dateEdit_output_epoch.setDisplayFormat(u"yyyy-MM-dd") - self.dateEdit_output_epoch.setCalendarPopup(True) - self.dateEdit_output_epoch.setTimeSpec(Qt.UTC) - self.dateEdit_output_epoch.setDate(QDate(2010, 1, 1)) - - self.gridLayout_2.addWidget(self.dateEdit_output_epoch, 3, 1, 1, 1) - - self.comboBox_output_coordinates = QComboBox(self.widget_output_options) - self.comboBox_output_coordinates.addItem("") - self.comboBox_output_coordinates.addItem("") - self.comboBox_output_coordinates.addItem("") - self.comboBox_output_coordinates.setObjectName(u"comboBox_output_coordinates") - - self.gridLayout_2.addWidget(self.comboBox_output_coordinates, 5, 0, 1, 1) - - self.label_output_utm_zone = QLabel(self.widget_output_options) - self.label_output_utm_zone.setObjectName(u"label_output_utm_zone") - - self.gridLayout_2.addWidget(self.label_output_utm_zone, 4, 1, 1, 1) - - self.comboBox_output_vertical_reference = QComboBox(self.widget_output_options) - self.comboBox_output_vertical_reference.addItem("") - self.comboBox_output_vertical_reference.addItem("") - self.comboBox_output_vertical_reference.addItem("") - self.comboBox_output_vertical_reference.addItem("") - self.comboBox_output_vertical_reference.setObjectName(u"comboBox_output_vertical_reference") - self.comboBox_output_vertical_reference.setEnabled(True) - - self.gridLayout_2.addWidget(self.comboBox_output_vertical_reference, 8, 0, 1, 1) - - self.checkBox_epoch_trans = QCheckBox(self.widget_output_options) - self.checkBox_epoch_trans.setObjectName(u"checkBox_epoch_trans") - self.checkBox_epoch_trans.setLayoutDirection(Qt.LeftToRight) - - self.gridLayout_2.addWidget(self.checkBox_epoch_trans, 0, 1, 1, 1) - - - self.verticalLayout_6.addWidget(self.widget_output_options) - - - self.verticalLayout.addWidget(self.frame_output) - - self.label_log_output = QLabel(self.centralwidget) - self.label_log_output.setObjectName(u"label_log_output") - - self.verticalLayout.addWidget(self.label_log_output) - - self.textBrowser_log_output = QTextBrowser(self.centralwidget) - self.textBrowser_log_output.setObjectName(u"textBrowser_log_output") - self.textBrowser_log_output.setFrameShadow(QFrame.Sunken) - - self.verticalLayout.addWidget(self.textBrowser_log_output) - - self.widget_actions = QWidget(self.centralwidget) - self.widget_actions.setObjectName(u"widget_actions") - sizePolicy.setHeightForWidth(self.widget_actions.sizePolicy().hasHeightForWidth()) - self.widget_actions.setSizePolicy(sizePolicy) - self.horizontalLayout_4 = QHBoxLayout(self.widget_actions) - self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") - self.horizontalLayout_4.setContentsMargins(0, -1, 0, -1) - self.progressBar = QProgressBar(self.widget_actions) - self.progressBar.setObjectName(u"progressBar") - self.progressBar.setValue(0) - self.progressBar.setTextVisible(True) - - self.horizontalLayout_4.addWidget(self.progressBar) - - self.pushButton_convert = QPushButton(self.widget_actions) - self.pushButton_convert.setObjectName(u"pushButton_convert") - - self.horizontalLayout_4.addWidget(self.pushButton_convert) - - - self.verticalLayout.addWidget(self.widget_actions) - - MainWindow.setCentralWidget(self.centralwidget) -#if QT_CONFIG(shortcut) - self.label_input_file.setBuddy(self.lineEdit_input_file) - self.label_input_reference.setBuddy(self.comboBox_input_reference) - self.label_input_utm_zone.setBuddy(self.spinBox_input_utm_zone) - self.label_input_coordinates.setBuddy(self.comboBox_input_coordinates) - self.label_input_epoch.setBuddy(self.dateEdit_input_epoch) - self.label_input_vertical_reference.setBuddy(self.comboBox_input_vertical_reference) - self.label_output_file.setBuddy(self.lineEdit_output_file) - self.label_output_vertical_reference.setBuddy(self.comboBox_output_vertical_reference) - self.label_output_coordinates.setBuddy(self.comboBox_output_coordinates) - self.label_output_reference.setBuddy(self.comboBox_output_reference) - self.label_output_epoch.setBuddy(self.dateEdit_output_epoch) - self.label_output_utm_zone.setBuddy(self.spinBox_output_utm_zone) -#endif // QT_CONFIG(shortcut) - QWidget.setTabOrder(self.lineEdit_input_file, self.toolButton_input_file) - QWidget.setTabOrder(self.toolButton_input_file, self.comboBox_input_reference) - QWidget.setTabOrder(self.comboBox_input_reference, self.dateEdit_input_epoch) - QWidget.setTabOrder(self.dateEdit_input_epoch, self.comboBox_input_coordinates) - QWidget.setTabOrder(self.comboBox_input_coordinates, self.spinBox_input_utm_zone) - QWidget.setTabOrder(self.spinBox_input_utm_zone, self.comboBox_input_vertical_reference) - QWidget.setTabOrder(self.comboBox_input_vertical_reference, self.lineEdit_output_file) - QWidget.setTabOrder(self.lineEdit_output_file, self.toolButton_output_file) - QWidget.setTabOrder(self.toolButton_output_file, self.comboBox_output_reference) - QWidget.setTabOrder(self.comboBox_output_reference, self.dateEdit_output_epoch) - QWidget.setTabOrder(self.dateEdit_output_epoch, self.comboBox_output_coordinates) - QWidget.setTabOrder(self.comboBox_output_coordinates, self.spinBox_output_utm_zone) - QWidget.setTabOrder(self.spinBox_output_utm_zone, self.comboBox_output_vertical_reference) - QWidget.setTabOrder(self.comboBox_output_vertical_reference, self.pushButton_convert) - - self.retranslateUi(MainWindow) - - self.comboBox_input_coordinates.setCurrentIndex(2) - self.comboBox_input_reference.setCurrentIndex(1) - self.comboBox_output_coordinates.setCurrentIndex(2) - - - QMetaObject.connectSlotsByName(MainWindow) - # setupUi - - def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"LAS TRX", None)) - self.label_input.setText(QCoreApplication.translate("MainWindow", u"Origin", None)) - self.label_input_file.setText(QCoreApplication.translate("MainWindow", u"Input File", None)) - self.toolButton_input_file.setText(QCoreApplication.translate("MainWindow", u"...", None)) - self.toolButton_help.setText(QCoreApplication.translate("MainWindow", u"Batch Mode?", None)) - self.comboBox_input_coordinates.setItemText(0, QCoreApplication.translate("MainWindow", u"Geographic", None)) - self.comboBox_input_coordinates.setItemText(1, QCoreApplication.translate("MainWindow", u"Cartesian", None)) - self.comboBox_input_coordinates.setItemText(2, QCoreApplication.translate("MainWindow", u"UTM", None)) - - self.comboBox_input_reference.setItemText(0, QCoreApplication.translate("MainWindow", u"NAD83(CSRS)", None)) - self.comboBox_input_reference.setItemText(1, QCoreApplication.translate("MainWindow", u"ITRF2014", None)) - self.comboBox_input_reference.setItemText(2, QCoreApplication.translate("MainWindow", u"ITRF2008", None)) - self.comboBox_input_reference.setItemText(3, QCoreApplication.translate("MainWindow", u"ITRF2005", None)) - self.comboBox_input_reference.setItemText(4, QCoreApplication.translate("MainWindow", u"ITRF2000", None)) - self.comboBox_input_reference.setItemText(5, QCoreApplication.translate("MainWindow", u"ITRF97", None)) - self.comboBox_input_reference.setItemText(6, QCoreApplication.translate("MainWindow", u"ITRF96", None)) - self.comboBox_input_reference.setItemText(7, QCoreApplication.translate("MainWindow", u"ITRF94", None)) - self.comboBox_input_reference.setItemText(8, QCoreApplication.translate("MainWindow", u"ITRF93", None)) - self.comboBox_input_reference.setItemText(9, QCoreApplication.translate("MainWindow", u"ITRF92", None)) - self.comboBox_input_reference.setItemText(10, QCoreApplication.translate("MainWindow", u"ITRF91", None)) - self.comboBox_input_reference.setItemText(11, QCoreApplication.translate("MainWindow", u"ITRF90", None)) - self.comboBox_input_reference.setItemText(12, QCoreApplication.translate("MainWindow", u"ITRF89", None)) - self.comboBox_input_reference.setItemText(13, QCoreApplication.translate("MainWindow", u"ITRF88", None)) - - self.label_input_reference.setText(QCoreApplication.translate("MainWindow", u"Reference Frame", None)) - self.label_input_utm_zone.setText(QCoreApplication.translate("MainWindow", u"UTM Zone", None)) - self.label_input_coordinates.setText(QCoreApplication.translate("MainWindow", u"Coordinates", None)) - self.label_input_epoch.setText(QCoreApplication.translate("MainWindow", u"Epoch (YYYY-MM-DD)", None)) - self.label_input_vertical_reference.setText(QCoreApplication.translate("MainWindow", u"Vertical Reference", None)) - self.comboBox_input_vertical_reference.setItemText(0, QCoreApplication.translate("MainWindow", u"GRS80", None)) - - self.label_output.setText(QCoreApplication.translate("MainWindow", u"Destination", None)) - self.label_output_file.setText(QCoreApplication.translate("MainWindow", u"Output file", None)) - self.toolButton_output_file.setText(QCoreApplication.translate("MainWindow", u"...", None)) - self.label_output_vertical_reference.setText(QCoreApplication.translate("MainWindow", u"Vertical Reference", None)) - self.comboBox_output_reference.setItemText(0, QCoreApplication.translate("MainWindow", u"NAD83(CSRS)", None)) - self.comboBox_output_reference.setItemText(1, QCoreApplication.translate("MainWindow", u"ITRF2014", None)) - self.comboBox_output_reference.setItemText(2, QCoreApplication.translate("MainWindow", u"ITRF2008", None)) - self.comboBox_output_reference.setItemText(3, QCoreApplication.translate("MainWindow", u"ITRF2005", None)) - self.comboBox_output_reference.setItemText(4, QCoreApplication.translate("MainWindow", u"ITRF2000", None)) - self.comboBox_output_reference.setItemText(5, QCoreApplication.translate("MainWindow", u"ITRF97", None)) - self.comboBox_output_reference.setItemText(6, QCoreApplication.translate("MainWindow", u"ITRF96", None)) - self.comboBox_output_reference.setItemText(7, QCoreApplication.translate("MainWindow", u"ITRF94", None)) - self.comboBox_output_reference.setItemText(8, QCoreApplication.translate("MainWindow", u"ITRF93", None)) - self.comboBox_output_reference.setItemText(9, QCoreApplication.translate("MainWindow", u"ITRF92", None)) - self.comboBox_output_reference.setItemText(10, QCoreApplication.translate("MainWindow", u"ITRF91", None)) - self.comboBox_output_reference.setItemText(11, QCoreApplication.translate("MainWindow", u"ITRF90", None)) - self.comboBox_output_reference.setItemText(12, QCoreApplication.translate("MainWindow", u"ITRF89", None)) - self.comboBox_output_reference.setItemText(13, QCoreApplication.translate("MainWindow", u"ITRF88", None)) - - self.label_output_coordinates.setText(QCoreApplication.translate("MainWindow", u"Coordinates", None)) - self.label_output_reference.setText(QCoreApplication.translate("MainWindow", u"Reference Frame", None)) - self.label_output_epoch.setText(QCoreApplication.translate("MainWindow", u"Epoch (YYYY-MM-DD)", None)) - self.comboBox_output_coordinates.setItemText(0, QCoreApplication.translate("MainWindow", u"Geographic", None)) - self.comboBox_output_coordinates.setItemText(1, QCoreApplication.translate("MainWindow", u"Cartesian", None)) - self.comboBox_output_coordinates.setItemText(2, QCoreApplication.translate("MainWindow", u"UTM", None)) - - self.label_output_utm_zone.setText(QCoreApplication.translate("MainWindow", u"UTM Zone", None)) - self.comboBox_output_vertical_reference.setItemText(0, QCoreApplication.translate("MainWindow", u"GRS80", None)) - self.comboBox_output_vertical_reference.setItemText(1, QCoreApplication.translate("MainWindow", u"CGVD2013/CGG2013a", None)) - self.comboBox_output_vertical_reference.setItemText(2, QCoreApplication.translate("MainWindow", u"CGVD2013/CGG2013", None)) - self.comboBox_output_vertical_reference.setItemText(3, QCoreApplication.translate("MainWindow", u"CGVD28/HT2_2010v70", None)) - - self.checkBox_epoch_trans.setText(QCoreApplication.translate("MainWindow", u"Epoch Transformation", None)) - self.label_log_output.setText(QCoreApplication.translate("MainWindow", u"Log Output", None)) - self.pushButton_convert.setText(QCoreApplication.translate("MainWindow", u"Convert", None)) - # retranslateUi - diff --git a/las_trx/utils.py b/las_trx/utils.py index 33abb82..685026b 100644 --- a/las_trx/utils.py +++ b/las_trx/utils.py @@ -1,8 +1,10 @@ import logging from datetime import date +from os import path from typing import TypeVar, overload import pyproj.sync +import sys from csrspy.enums import CoordType, Reference, VerticalDatum @@ -25,6 +27,7 @@ def date_to_decimal_year(d: T) -> T: VD_LOOKUP = { + "WGS84": VerticalDatum.WGS84, "GRS80": VerticalDatum.GRS80, "CGVD2013/CGG2013a": VerticalDatum.CGG2013A, "CGVD2013/CGG2013": VerticalDatum.CGG2013, @@ -32,6 +35,7 @@ def date_to_decimal_year(d: T) -> T: } REFERENCE_LOOKUP = { "NAD83(CSRS)": Reference.NAD83CSRS, + "WGS84": Reference.WGS84, "ITRF2014": Reference.ITRF14, "ITRF2008": Reference.ITRF08, "ITRF2005": Reference.ITRF05, @@ -123,3 +127,9 @@ def utm_zone_to_coord_type(zone: int) -> CoordType: def get_utm_zone(coord_type: CoordType) -> int: return int(coord_type.value[3:]) + + +def resource_path(relative_path): + """Get absolute path to resource, works for dev and for PyInstaller""" + base_path = getattr(sys, "_MEIPASS", path.dirname(__file__)) + return path.abspath(path.join(base_path, relative_path)) diff --git a/las_trx/worker.py b/las_trx/worker.py index c7df36c..c0835d9 100755 --- a/las_trx/worker.py +++ b/las_trx/worker.py @@ -4,14 +4,14 @@ import os from concurrent import futures from pathlib import Path -from time import sleep import laspy import math import numpy as np -from PySide2.QtCore import QThread, Signal +from PyQt6.QtCore import QThread, pyqtSignal as Signal from laspy import LasHeader from pyproj import CRS +from time import sleep from csrspy import CSRSTransformer from las_trx.config import TransformConfig @@ -30,7 +30,7 @@ class TransformWorker(QThread): error = Signal(BaseException) def __init__( - self, config: TransformConfig, input_files: list[Path], output_files: list[Path] + self, config: TransformConfig, input_files: list[Path], output_files: list[Path] ): super().__init__(parent=None) self.config = config @@ -45,7 +45,7 @@ def __init__( self.total_iters = 0 for input_file in self.input_files: - with laspy.open(input_file) as in_las: + with laspy.open(str(input_file)) as in_las: self.total_iters += math.ceil(in_las.header.point_count / CHUNK_SIZE) logger.info(f"Total iterations until complete: {self.total_iters}") @@ -114,16 +114,16 @@ def run(self): def transform( - config: dict, - input_file: Path, - output_file: Path, - lock: multiprocessing.RLock, - cur: multiprocessing.Value, + config: dict, + input_file: Path, + output_file: Path, + lock: multiprocessing.RLock, + cur: multiprocessing.Value, ): transformer = CSRSTransformer(**config) config = TransformConfig(**config) - with laspy.open(input_file) as in_las: + with laspy.open(str(input_file)) as in_las: new_header = copy.deepcopy(in_las.header) new_header = clear_header_geokeys(new_header) new_header = write_header_geokeys_from_crs(new_header, config.t_crs) @@ -134,7 +134,7 @@ def transform( logger.debug(f"{laz_backend=}") with laspy.open( - output_file, mode="w", header=new_header, laz_backend=laz_backend + str(output_file), mode="w", header=new_header, laz_backend=laz_backend ) as out_las: for points in in_las.chunk_iterator(CHUNK_SIZE): # Convert the coordinates @@ -155,9 +155,9 @@ def transform( def write_header_offsets( - header: "LasHeader", input_file: Path, transformer: "CSRSTransformer" + header: "LasHeader", input_file: Path, transformer: "CSRSTransformer" ) -> "LasHeader": - with laspy.open(input_file) as in_las: + with laspy.open(str(input_file)) as in_las: points = next(in_las.chunk_iterator(CHUNK_SIZE)) data = stack_dims(points) @@ -174,10 +174,10 @@ def clear_header_geokeys(header: "LasHeader") -> "LasHeader": # Update GeoKeyDirectoryVLR # check and remove any existing crs vlrs for crs_vlr_name in ( - "WktCoordinateSystemVlr", - "GeoKeyDirectoryVlr", - "GeoAsciiParamsVlr", - "GeoDoubleParamsVlr", + "WktCoordinateSystemVlr", + "GeoKeyDirectoryVlr", + "GeoAsciiParamsVlr", + "GeoDoubleParamsVlr", ): try: header.vlrs.extract(crs_vlr_name) diff --git a/poetry.lock b/poetry.lock index ee0cdac..a79596d 100755 --- a/poetry.lock +++ b/poetry.lock @@ -1,19 +1,11 @@ [[package]] name = "altgraph" -version = "0.17.2" +version = "0.17.3" description = "Python graph (network) package" category = "dev" optional = false python-versions = "*" -[[package]] -name = "atomicwrites" -version = "1.4.1" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - [[package]] name = "attrs" version = "22.1.0" @@ -23,18 +15,18 @@ optional = false python-versions = ">=3.5" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] +dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] +docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] +tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] +tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] [[package]] name = "black" -version = "22.6.0" +version = "22.10.0" description = "The uncompromising code formatter." category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7" [package.dependencies] click = ">=8.0.0" @@ -52,7 +44,7 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2022.6.15" +version = "2022.9.24" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -71,22 +63,33 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "colorama" -version = "0.4.5" +version = "0.4.6" description = "Cross-platform colored terminal text." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" [[package]] name = "csrspy" -version = "0.2.4" +version = "0.3.1" description = "ITRF/NAD83CSRS coordinate transforms in Python" category = "main" optional = false python-versions = ">=3.8,<4.0" [package.dependencies] -pyproj = ">=3.3.0,<4.0.0" +pyproj = ">=3.4.0,<4.0.0" + +[[package]] +name = "exceptiongroup" +version = "1.0.4" +description = "Backport of PEP 654 (exception groups)" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +test = ["pytest (>=6)"] [[package]] name = "future" @@ -106,7 +109,7 @@ python-versions = "*" [[package]] name = "laspy" -version = "2.2.0" +version = "2.3.0" description = "Native Python ASPRS LAS read/write library" category = "main" optional = false @@ -116,7 +119,7 @@ python-versions = ">=3.7" numpy = "*" [package.extras] -dev = ["pytest", "sphinx", "sphinx-rtd-theme", "nox", "black (==22.3.0)", "pytest-benchmark", "m2r2"] +dev = ["black (==22.3.0)", "m2r2", "nox", "pytest", "pytest-benchmark", "sphinx", "sphinx-rtd-theme"] laszip = ["laszip (>=0.1.0,<0.2.0)"] lazrs = ["lazrs (>=0.4.3,<0.5.0)"] pyproj = ["pyproj"] @@ -131,14 +134,14 @@ python-versions = "*" [[package]] name = "macholib" -version = "1.16" +version = "1.16.2" description = "Mach-O header analysis and editing" category = "dev" optional = false python-versions = "*" [package.dependencies] -altgraph = ">=0.15" +altgraph = ">=0.17" [[package]] name = "mypy-extensions" @@ -150,7 +153,7 @@ python-versions = "*" [[package]] name = "numpy" -version = "1.23.2" +version = "1.23.5" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false @@ -169,11 +172,11 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pathspec" -version = "0.9.0" +version = "0.10.2" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.7" [[package]] name = "pefile" @@ -188,15 +191,15 @@ future = "*" [[package]] name = "platformdirs" -version = "2.5.2" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "2.5.4" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] +test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -210,24 +213,16 @@ python-versions = ">=3.6" dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - [[package]] name = "pydantic" -version = "1.9.2" +version = "1.10.2" description = "Data validation and settings management using python type hints" category = "main" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" [package.dependencies] -typing-extensions = ">=3.7.4.3" +typing-extensions = ">=4.1.0" [package.extras] dotenv = ["python-dotenv (>=0.10.4)"] @@ -235,11 +230,11 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pyinstaller" -version = "5.3" +version = "5.7.0" description = "PyInstaller bundles a Python application and all its dependencies into a single package." category = "dev" optional = false -python-versions = "<3.11,>=3.7" +python-versions = "<3.12,>=3.7" [package.dependencies] altgraph = "*" @@ -247,14 +242,15 @@ macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""} pefile = {version = ">=2022.5.30", markers = "sys_platform == \"win32\""} pyinstaller-hooks-contrib = ">=2021.4" pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} +setuptools = ">=42.0.0" [package.extras] encryption = ["tinyaes (>=1.0.0)"] -hook_testing = ["pytest (>=2.7.3)", "execnet (>=1.5.0)", "psutil"] +hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"] [[package]] name = "pyinstaller-hooks-contrib" -version = "2022.8" +version = "2022.14" description = "Community maintained hooks for PyInstaller" category = "dev" optional = false @@ -269,11 +265,11 @@ optional = false python-versions = ">=3.6.8" [package.extras] -diagrams = ["railroad-diagrams", "jinja2"] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyproj" -version = "3.3.1" +version = "3.4.0" description = "Python interface to PROJ (cartographic projections and coordinate transformations library)" category = "main" optional = false @@ -283,33 +279,49 @@ python-versions = ">=3.8" certifi = "*" [[package]] -name = "pyside2" -version = "5.15.2.1" -description = "Python bindings for the Qt cross-platform application and UI framework" +name = "pyqt6" +version = "6.4.0" +description = "Python bindings for the Qt cross platform application toolkit" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.11" +python-versions = ">=3.6.1" [package.dependencies] -shiboken2 = "5.15.2.1" +PyQt6-Qt6 = ">=6.4.0" +PyQt6-sip = ">=13.4,<14" + +[[package]] +name = "pyqt6-qt6" +version = "6.4.1" +description = "The subset of a Qt installation needed by PyQt6." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pyqt6-sip" +version = "13.4.0" +description = "The sip module support for PyQt6" +category = "main" +optional = false +python-versions = ">=3.7" [[package]] name = "pytest" -version = "7.1.2" +version = "7.2.0" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -tomli = ">=1.0.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] @@ -323,12 +335,17 @@ optional = false python-versions = "*" [[package]] -name = "shiboken2" -version = "5.15.2.1" -description = "Python / C++ bindings helper module" -category = "main" +name = "setuptools" +version = "65.6.3" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.11" +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "tomli" @@ -340,7 +357,7 @@ python-versions = ">=3.7" [[package]] name = "typing-extensions" -version = "4.3.0" +version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false @@ -349,20 +366,60 @@ python-versions = ">=3.7" [metadata] lock-version = "1.1" python-versions = "^3.9,<3.11" -content-hash = "857c1810be5d5b79eda2d08bd908e03bad1f3436b9850539ac946351b6fb93c1" +content-hash = "77234ce2c05610a42ff6a0d0a2b8ffbbd004aa182e9ec7155b0aa4b8021d5d97" [metadata.files] altgraph = [ - {file = "altgraph-0.17.2-py2.py3-none-any.whl", hash = "sha256:743628f2ac6a7c26f5d9223c91ed8ecbba535f506f4b6f558885a8a56a105857"}, - {file = "altgraph-0.17.2.tar.gz", hash = "sha256:ebf2269361b47d97b3b88e696439f6e4cbc607c17c51feb1754f90fb79839158"}, -] -atomicwrites = [] -attrs = [] -black = [] -certifi = [] -click = [] -colorama = [] -csrspy = [] + {file = "altgraph-0.17.3-py2.py3-none-any.whl", hash = "sha256:c8ac1ca6772207179ed8003ce7687757c04b0b71536f81e2ac5755c6226458fe"}, + {file = "altgraph-0.17.3.tar.gz", hash = "sha256:ad33358114df7c9416cdb8fa1eaa5852166c505118717021c6a8c7c7abbd03dd"}, +] +attrs = [ + {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, + {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, +] +black = [ + {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, + {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"}, + {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"}, + {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"}, + {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"}, + {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"}, + {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"}, + {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"}, + {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"}, + {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"}, + {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"}, + {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"}, + {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"}, + {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"}, + {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"}, + {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"}, + {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"}, + {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"}, + {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"}, + {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"}, + {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, +] +certifi = [ + {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, + {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +csrspy = [ + {file = "csrspy-0.3.1-py3-none-any.whl", hash = "sha256:4a33f53726ff143b006764db7735af22d8ec5b06e23443dd65ab6511b8c14f6a"}, + {file = "csrspy-0.3.1.tar.gz", hash = "sha256:d0e1e030a64c22dca79e5e41ff34f9e1179a9a53a43a10da82d00a25bd168bfc"}, +] +exceptiongroup = [ + {file = "exceptiongroup-1.0.4-py3-none-any.whl", hash = "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828"}, + {file = "exceptiongroup-1.0.4.tar.gz", hash = "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec"}, +] future = [ {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, ] @@ -370,11 +427,16 @@ iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] -laspy = [] +laspy = [ + {file = "laspy-2.3.0.tar.gz", hash = "sha256:59d6e9ea48ee664261fa9a7d39573376c44d827e35fd376dee7185bdec1c435c"}, +] laszip = [ {file = "laszip-0.1.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:d1c5a9d61f4351abe41a8570aabdf0579f1abac8ba8b147ccaa9b24ba18633ad"}, {file = "laszip-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24758b1fca4ac56a33b0859902d7c8d756d50f69102b882fe41dc3934998c5ae"}, {file = "laszip-0.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0b4af64abf8494199c4268e189d2d5cf0e412450f7e7e0a6e80ee2586eefbbe0"}, + {file = "laszip-0.1.0-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:3a17e3dc4a67b487e08bf4581d1ba678537b841b5a9422d13b78b94c6b340eab"}, + {file = "laszip-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d75f29b2eda44994a2a78638ce81f33183072ed1caa753c27b564e0ef61a50e"}, + {file = "laszip-0.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:88d2a369b372a560297f7ded48fb0afc1892c1e9f544386f8d92217f52a0c580"}, {file = "laszip-0.1.0-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:797fb58416af25048630083a961a98f8a11697ebc9f84dad1b1b9d85bf54fc4b"}, {file = "laszip-0.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c35eb359104244727e2c93889ff4150e9aefc63bf43c80d06aaa72a657f28896"}, {file = "laszip-0.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e59dc09260bc73c6e12ae369181a3a08090dc126dc37e6ae2e6035fe8c04a6ac"}, @@ -390,60 +452,201 @@ laszip = [ {file = "laszip-0.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d7cb0ae943edebadc995dfea67bffbba4c2b12da9d2cf219c22b6e41b144b3f"}, ] macholib = [ - {file = "macholib-1.16-py2.py3-none-any.whl", hash = "sha256:5a0742b587e6e57bfade1ab90651d4877185bf66fd4a176a488116de36878229"}, - {file = "macholib-1.16.tar.gz", hash = "sha256:001bf281279b986a66d7821790d734e61150d52f40c080899df8fefae056e9f7"}, + {file = "macholib-1.16.2-py2.py3-none-any.whl", hash = "sha256:44c40f2cd7d6726af8fa6fe22549178d3a4dfecc35a9cd15ea916d9c83a688e0"}, + {file = "macholib-1.16.2.tar.gz", hash = "sha256:557bbfa1bb255c20e9abafe7ed6cd8046b48d9525db2f9b77d3122a63a2a8bf8"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] -numpy = [] +numpy = [ + {file = "numpy-1.23.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63"}, + {file = "numpy-1.23.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d"}, + {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43"}, + {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1"}, + {file = "numpy-1.23.5-cp310-cp310-win32.whl", hash = "sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280"}, + {file = "numpy-1.23.5-cp310-cp310-win_amd64.whl", hash = "sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6"}, + {file = "numpy-1.23.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96"}, + {file = "numpy-1.23.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa"}, + {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2"}, + {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387"}, + {file = "numpy-1.23.5-cp311-cp311-win32.whl", hash = "sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0"}, + {file = "numpy-1.23.5-cp311-cp311-win_amd64.whl", hash = "sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d"}, + {file = "numpy-1.23.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a"}, + {file = "numpy-1.23.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9"}, + {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398"}, + {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb"}, + {file = "numpy-1.23.5-cp38-cp38-win32.whl", hash = "sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07"}, + {file = "numpy-1.23.5-cp38-cp38-win_amd64.whl", hash = "sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e"}, + {file = "numpy-1.23.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f"}, + {file = "numpy-1.23.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de"}, + {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d"}, + {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719"}, + {file = "numpy-1.23.5-cp39-cp39-win32.whl", hash = "sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481"}, + {file = "numpy-1.23.5-cp39-cp39-win_amd64.whl", hash = "sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df"}, + {file = "numpy-1.23.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8"}, + {file = "numpy-1.23.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135"}, + {file = "numpy-1.23.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d"}, + {file = "numpy-1.23.5.tar.gz", hash = "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a"}, +] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, + {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, + {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, +] +pefile = [ + {file = "pefile-2022.5.30.tar.gz", hash = "sha256:a5488a3dd1fd021ce33f969780b88fe0f7eebb76eb20996d7318f307612a045b"}, +] +platformdirs = [ + {file = "platformdirs-2.5.4-py3-none-any.whl", hash = "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10"}, + {file = "platformdirs-2.5.4.tar.gz", hash = "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7"}, ] -pefile = [] -platformdirs = [] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pydantic = [] -pyinstaller = [] -pyinstaller-hooks-contrib = [] -pyparsing = [] -pyproj = [] -pyside2 = [ - {file = "PySide2-5.15.2.1-5.15.2-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:b5e1d92f26b0bbaefff67727ccbb2e1b577f2c0164b349b3d6e80febb4c5bde2"}, - {file = "PySide2-5.15.2.1-5.15.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:235240b6ec8206d9fdf0232472c6ef3241783d480425e5b54796f06e39ed23da"}, - {file = "PySide2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-abi3-macosx_10_13_intel.whl", hash = "sha256:a9e2e6bbcb5d2ebb421e46e72244a0f4fe0943b2288115f80a863aacc1de1f06"}, - {file = "PySide2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-abi3-manylinux1_x86_64.whl", hash = "sha256:23886c6391ebd916e835fa1b5ae66938048504fd3a2934ae3189a96cd5ac0b46"}, - {file = "PySide2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win32.whl", hash = "sha256:439509e53cfe05abbf9a99422a2cbad086408b0f9bf5e6f642ff1b13b1f8b055"}, - {file = "PySide2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win_amd64.whl", hash = "sha256:af6b263fe63ba6dea7eaebae80aa7b291491fe66f4f0057c0aafe780cc83da9d"}, -] -pytest = [] +pydantic = [ + {file = "pydantic-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb6ad4489af1bac6955d38ebcb95079a836af31e4c4f74aba1ca05bb9f6027bd"}, + {file = "pydantic-1.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1f5a63a6dfe19d719b1b6e6106561869d2efaca6167f84f5ab9347887d78b98"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352aedb1d71b8b0736c6d56ad2bd34c6982720644b0624462059ab29bd6e5912"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19b3b9ccf97af2b7519c42032441a891a5e05c68368f40865a90eb88833c2559"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9069e1b01525a96e6ff49e25876d90d5a563bc31c658289a8772ae186552236"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:355639d9afc76bcb9b0c3000ddcd08472ae75318a6eb67a15866b87e2efa168c"}, + {file = "pydantic-1.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae544c47bec47a86bc7d350f965d8b15540e27e5aa4f55170ac6a75e5f73b644"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4c805731c33a8db4b6ace45ce440c4ef5336e712508b4d9e1aafa617dc9907f"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d49f3db871575e0426b12e2f32fdb25e579dea16486a26e5a0474af87cb1ab0a"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c90345ec7dd2f1bcef82ce49b6235b40f282b94d3eec47e801baf864d15525"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b5ba54d026c2bd2cb769d3468885f23f43710f651688e91f5fb1edcf0ee9283"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05e00dbebbe810b33c7a7362f231893183bcc4251f3f2ff991c31d5c08240c42"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2d0567e60eb01bccda3a4df01df677adf6b437958d35c12a3ac3e0f078b0ee52"}, + {file = "pydantic-1.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6f981882aea41e021f72779ce2a4e87267458cc4d39ea990729e21ef18f0f8c"}, + {file = "pydantic-1.10.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4aac8e7103bf598373208f6299fa9a5cfd1fc571f2d40bf1dd1955a63d6eeb5"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bedf309630209e78582ffacda64a21f96f3ed2e51fbf3962d4d488e503420254"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9300fcbebf85f6339a02c6994b2eb3ff1b9c8c14f502058b5bf349d42447dcf5"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:216f3bcbf19c726b1cc22b099dd409aa371f55c08800bcea4c44c8f74b73478d"}, + {file = "pydantic-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:dd3f9a40c16daf323cf913593083698caee97df2804aa36c4b3175d5ac1b92a2"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b97890e56a694486f772d36efd2ba31612739bc6f3caeee50e9e7e3ebd2fdd13"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9cabf4a7f05a776e7793e72793cd92cc865ea0e83a819f9ae4ecccb1b8aa6116"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06094d18dd5e6f2bbf93efa54991c3240964bb663b87729ac340eb5014310624"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc78cc83110d2f275ec1970e7a831f4e371ee92405332ebfe9860a715f8336e1"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c2abc4393dea97a4ccbb4ec7d8658d4e22c4765b7b9b9445588f16c71ad9965"}, + {file = "pydantic-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:0b959f4d8211fc964772b595ebb25f7652da3f22322c007b6fed26846a40685e"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c33602f93bfb67779f9c507e4d69451664524389546bacfe1bee13cae6dc7488"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5760e164b807a48a8f25f8aa1a6d857e6ce62e7ec83ea5d5c5a802eac81bad41"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eb843dcc411b6a2237a694f5e1d649fc66c6064d02b204a7e9d194dff81eb4b"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b8795290deaae348c4eba0cebb196e1c6b98bdbe7f50b2d0d9a4a99716342fe"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0bedafe4bc165ad0a56ac0bd7695df25c50f76961da29c050712596cf092d6d"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e05aed07fa02231dbf03d0adb1be1d79cabb09025dd45aa094aa8b4e7b9dcda"}, + {file = "pydantic-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:c1ba1afb396148bbc70e9eaa8c06c1716fdddabaf86e7027c5988bae2a829ab6"}, + {file = "pydantic-1.10.2-py3-none-any.whl", hash = "sha256:1b6ee725bd6e83ec78b1aa32c5b1fa67a3a65badddde3976bca5fe4568f27709"}, + {file = "pydantic-1.10.2.tar.gz", hash = "sha256:91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410"}, +] +pyinstaller = [ + {file = "pyinstaller-5.7.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:b967ae71ab7b05e18608dbb4518da5afa54f0835927cb7a5ce52ab8fffed03b6"}, + {file = "pyinstaller-5.7.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:3180b9bf22263380adc5e2ee051b7c21463292877215bbe70c9155dc76f4b966"}, + {file = "pyinstaller-5.7.0-py3-none-manylinux2014_i686.whl", hash = "sha256:0f80e2403e76630ad3392c71f09c1a4284e8d8a8a99fb55ff3a0aba0e06300ed"}, + {file = "pyinstaller-5.7.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:2c1dd9d11cfc48bab61eeb06de69a3d1ad742bbb2ef14716965ca0333dd43a5b"}, + {file = "pyinstaller-5.7.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:dfc12e92fe10ae645dd0dd1fcfa4cd7677b2e96119e3cd4980d742e09bb78925"}, + {file = "pyinstaller-5.7.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f35f06d48faea0ad738429c009941059beebaa306e9d9ead95f1df4b441de2aa"}, + {file = "pyinstaller-5.7.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:28a8a0da656493aa32d9665e2f6f84775da0f23174859ed8facaa4226fe77a17"}, + {file = "pyinstaller-5.7.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:1ac3f09b838710c43e34b0a7ad003bd168a754b0b786c561b47baf1af9104354"}, + {file = "pyinstaller-5.7.0-py3-none-win32.whl", hash = "sha256:9cdb8ee8622ee8d2c6cd67f001b610019d4371a8bf3f7850562640ce786894d7"}, + {file = "pyinstaller-5.7.0-py3-none-win_amd64.whl", hash = "sha256:9b47c10fbefac6f6493266f8b1689109b2b14efa9142dbd2cd7549226a4568b7"}, + {file = "pyinstaller-5.7.0-py3-none-win_arm64.whl", hash = "sha256:3e51e18a16dec0414079762843cf892a5d70749ad56ca7b3c7b5f8367dc50b1e"}, + {file = "pyinstaller-5.7.0.tar.gz", hash = "sha256:0e5953937d35f0b37543cc6915dacaf3239bcbdf3fd3ecbb7866645468a16775"}, +] +pyinstaller-hooks-contrib = [ + {file = "pyinstaller-hooks-contrib-2022.14.tar.gz", hash = "sha256:5ae8da3a92cf20e37b3e00604d0c3468896e7d746e5c1449473597a724331b0b"}, + {file = "pyinstaller_hooks_contrib-2022.14-py2.py3-none-any.whl", hash = "sha256:1a125838a22d7b35a18993c6e56d3c5cc3ad7da00954f95bc5606523939203f2"}, +] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] +pyproj = [ + {file = "pyproj-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f343725566267a296b09ee7e591894f1fdc90f84f8ad5ec476aeb53bd4479c07"}, + {file = "pyproj-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5816807ca0bdc7256558770c6206a6783a3f02bcf844f94ee245f197bb5f7285"}, + {file = "pyproj-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7e609903572a56cca758bbaee5c1663c3e829ddce5eec4f368e68277e37022b"}, + {file = "pyproj-3.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4fd425ee8b6781c249c7adb7daa2e6c41ce573afabe4f380f5eecd913b56a3be"}, + {file = "pyproj-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:954b068136518b3174d0a99448056e97af62b63392a95c420894f7de2229dae6"}, + {file = "pyproj-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:4a23d84c5ffc383c7d9f0bde3a06fc1f6697b1b96725597f8f01e7b4bef0a2b5"}, + {file = "pyproj-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1f9c100fd0fd80edbc7e4daa303600a8cbef6f0de43d005617acb38276b88dc0"}, + {file = "pyproj-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa5171f700f174777a9e9ed8f4655583243967c0f9cf2c90e3f54e54ff740134"}, + {file = "pyproj-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a496d9057b2128db9d733e66b206f2d5954bbae6b800d412f562d780561478c"}, + {file = "pyproj-3.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52e54796e2d9554a5eb8f11df4748af1fbbc47f76aa234d6faf09216a84554c5"}, + {file = "pyproj-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a454a7c4423faa2a14e939d08ef293ee347fa529c9df79022b0585a6e1d8310c"}, + {file = "pyproj-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:25a36e297f3e0524694d40259e3e895edc1a47492a0e30608268ffc1328e3f5d"}, + {file = "pyproj-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:77d5f519f3cdb94b026ecca626f78db4f041afe201cf082079c8c0092a30b087"}, + {file = "pyproj-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccb4b70ad25218027f77e0c8934d10f9b7cdf91d5e64080147743d58fddbc3c0"}, + {file = "pyproj-3.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e161114bc92701647a83c4bbce79489984f12d980cabb365516e953d1450885"}, + {file = "pyproj-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f80adda8c54b84271a93829477a01aa57bc178c834362e9f74e1de1b5033c74c"}, + {file = "pyproj-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:221d8939685e0c43ee594c9f04b6a73a10e8e1cc0e85f28be0b4eb2f1bc8777d"}, + {file = "pyproj-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d94afed99f31673d3d19fe750283621e193e2a53ca9e0443bf9d092c3905833b"}, + {file = "pyproj-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0fff9c3a991508f16027be27d153f6c5583d03799443639d13c681e60f49e2d7"}, + {file = "pyproj-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b85acf09e5a9e35cd9ee72989793adb7089b4e611be02a43d3d0bda50ad116b"}, + {file = "pyproj-3.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:45554f47d1a12a84b0620e4abc08a2a1b5d9f273a4759eaef75e74788ec7162a"}, + {file = "pyproj-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12f62c20656ac9b6076ebb213e9a635d52f4f01fef95310121d337e62e910cb6"}, + {file = "pyproj-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:65a0bcdbad95b3c00b419e5d75b1f7e450ec17349b5ea16bf7438ac1d50a12a2"}, + {file = "pyproj-3.4.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:14ad113b5753c6057f9b2f3c85a6497cef7fa237c4328f2943c0223e98c1dde6"}, + {file = "pyproj-3.4.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4688b4cd62cbd86b5e855f9e27d90fbb53f2b4c2ea1cd394a46919e1a4151b89"}, + {file = "pyproj-3.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47ad53452ae1dc8b0bf1df920a210bb5616989085aa646592f8681f1d741a754"}, + {file = "pyproj-3.4.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:48787962232109bad8b72e27949037a9b03591228a6955f25dbe451233e8648a"}, + {file = "pyproj-3.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2cb8592259ea54e7557523b079d3f2304081680bdb48bfbf0fd879ee6156129c"}, + {file = "pyproj-3.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82200b4569d68b421c079d2973475b58d5959306fe758b43366e79fe96facfe5"}, + {file = "pyproj-3.4.0.tar.gz", hash = "sha256:a708445927ace9857f52c3ba67d2915da7b41a8fdcd9b8f99a4c9ed60a75eb33"}, +] +pyqt6 = [ + {file = "PyQt6-6.4.0-cp37-abi3-macosx_10_14_universal2.whl", hash = "sha256:8e614cc4b95dec8bec8ba3c3eaf821058b45862e66d69a8c4fb5576123f2be98"}, + {file = "PyQt6-6.4.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:79d093ce97010eac92e83a4e8efe231328af9ec757ba78c77e46ca1e007eca0d"}, + {file = "PyQt6-6.4.0-cp37-abi3-win_amd64.whl", hash = "sha256:37e399420866fff5c5bd49f56710dffd3a7a126afc6612b877d666f381bd554f"}, + {file = "PyQt6-6.4.0.tar.gz", hash = "sha256:91392469be1f491905fa9e78fa4e4059a89ab616ddf2ecfd525bc1d65c26bb93"}, +] +pyqt6-qt6 = [ + {file = "PyQt6_Qt6-6.4.1-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:b47087932f10cc39dab63cd0d2d23d7e3e204547c5e6559adfe58d665fa8ee4f"}, + {file = "PyQt6_Qt6-6.4.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:0de4aebdc469c61a36d43b868f4b45d89bb94aaf13779ed5c0080da4b416997c"}, + {file = "PyQt6_Qt6-6.4.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:791e9f0115bdc9ff22bf807b573393f2b9f7e2d1f07fc2d8351350ca141ebaf1"}, + {file = "PyQt6_Qt6-6.4.1-py3-none-win_amd64.whl", hash = "sha256:31a4557fed53e96feedae46624e420bafd261c0c01d92a1a1aad2c1646144f56"}, +] +pyqt6-sip = [ + {file = "PyQt6_sip-13.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ac7e0800180202dcc0c7035ff88c2a6f4a0f5acb20c4a19f71d807d0f7857b7"}, + {file = "PyQt6_sip-13.4.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:bb4f2e2fdcf3a8dafe4256750bbedd9e7107c4fd8afa9c25be28423c36bb12b8"}, + {file = "PyQt6_sip-13.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:de601187055d684b36ebe6e800a5deacaa55b69d71ad43312b76422cfeae0e12"}, + {file = "PyQt6_sip-13.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e3b17308ca729bcb6d25c01144c6b2e17d40812231c3ef9caaa72a78db2b1069"}, + {file = "PyQt6_sip-13.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d51704d50b82713fd7c928b7deb31e17be239ddac74fc2fd708e52bd21ecea3a"}, + {file = "PyQt6_sip-13.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:77af9c7e3f50414ec5af9b1534aaf2ba25115ae65aa5ed735111c8ef0884b862"}, + {file = "PyQt6_sip-13.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:83b446d247a92d119d507dbc94fc1f47389d8118a5b6232a2859951157319a30"}, + {file = "PyQt6_sip-13.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:802b0cfed19900183220c46895c2635f0dd062f2d275a25506423f911ef74db4"}, + {file = "PyQt6_sip-13.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2694ae67811cefb6ea3ee0e9995755b45e4952f4dcadec8c04300fd828f91c75"}, + {file = "PyQt6_sip-13.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e03c780846fd5d71c06e33322fd11a05713d9cd410e3571d069ac9a84077647"}, + {file = "PyQt6_sip-13.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9c5231536e6153071b22175e46e368045fd08d772a90d772a0977d1166c7822c"}, + {file = "PyQt6_sip-13.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:cfdcd43e123bd55c155cfe7a33895033e6d25de90a48ed9c25a0ddd0196a810e"}, + {file = "PyQt6_sip-13.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3de18c4a32f717a351d560a39f528af24077f5135aacfa8890a2f2d79f0633da"}, + {file = "PyQt6_sip-13.4.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:fd2df2a9479b8ac858117bd55dc0ec0bd1ce6c8f3486b0cc5e860c0540a8bba0"}, + {file = "PyQt6_sip-13.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3486914137f5336cff6e10a5e9d52c1e60ff883473938b45f267f794daeacb2f"}, + {file = "PyQt6_sip-13.4.0.tar.gz", hash = "sha256:6d87a3ee5872d7511b76957d68a32109352caf3b7a42a01d9ee20032b350d979"}, +] +pytest = [ + {file = "pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71"}, + {file = "pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"}, +] pywin32-ctypes = [ {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, ] -shiboken2 = [ - {file = "shiboken2-5.15.2.1-5.15.2-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:f890f5611ab8f48b88cfecb716da2ac55aef99e2923198cefcf781842888ea65"}, - {file = "shiboken2-5.15.2.1-5.15.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87079c07587859a525b9800d60b1be971338ce9b371d6ead81f15ee5a46d448b"}, - {file = "shiboken2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-abi3-macosx_10_13_intel.whl", hash = "sha256:ffd3d0ec3d508e592d7ee3885d27fee1f279a49989f734eb130f46d9501273a9"}, - {file = "shiboken2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-abi3-manylinux1_x86_64.whl", hash = "sha256:63debfcc531b6a2b4985aa9b71433d2ad3bac542acffc729cc0ecaa3854390c0"}, - {file = "shiboken2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win32.whl", hash = "sha256:eb0da44b6fa60c6bd317b8f219e500595e94e0322b33ec5b4e9f406bedaee555"}, - {file = "shiboken2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win_amd64.whl", hash = "sha256:a0d0fdeb12b72c8af349b9642ccc67afd783dca449309f45e78cda50272fd6b7"}, +setuptools = [ + {file = "setuptools-65.6.3-py3-none-any.whl", hash = "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54"}, + {file = "setuptools-65.6.3.tar.gz", hash = "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75"}, ] tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -typing-extensions = [] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] diff --git a/pyproject.toml b/pyproject.toml index 4b304bf..9f5da32 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,23 +1,23 @@ [tool.poetry] name = "las-trx" -version = "0.3.1" +version = "0.0.0" description = "Convert lidar .las/.laz file coordinates between various ITRF realizations and NAD83 CSRS." authors = ["Taylor Denouden "] repository = "https://github.com/HakaiInstitute/LAS-TRX" [tool.poetry.dependencies] python = "^3.9,<3.11" -csrspy = "^0.2.3" +laspy = "^2.3.0" laszip = "^0.1.0" -pydantic = "^1.9.0" -PySide2 = "^5.15.2" -pyproj = "^3.3.0" -laspy = "^2.1.2" +pydantic = "^1.10.2" +pyproj = "^3.4.0" +csrspy = "^0.3.1" +pyqt6 = "^6.4.0" [tool.poetry.dev-dependencies] -pyinstaller = "^5.3" -pytest = "^7.1.1" -black = "^22.3.0" +black = "^22.10.0" +pyinstaller = "^5.6.2" +pytest = "^7.2.0" [build-system] requires = ["poetry-core>=1.0.0"]