Saravanan666/pypi-org huggingface dataset:
Package: pyqtgraph-extensions
READMEVarious extensions forpyqtgraph.Installingpyqtgraph_extensionscreates two namespaces:pyqtgraph_extensions- various classes and functions providing some of extra functionality for pyqtgraphpyqtgraph_extended- a namespace merging pyqtgraph_extensions with the original pyqtgraphIn principle, it should be possible to importpyqtgraph_extendedinstead ofpyqtgraphand have the same behaviour but with new functionality available. So the two options for using this repository are:import pyqtgraph as pg
import pyqtgraph_extensions as pgxorimport pyqtgraph_extended as pgInstallationTo get latest release from PyPi:pip install pyqtgraph_extensions.Or install from GitHub:pip install git+https://github.com/draustin/pyqtgraph_extensions.pyqtgraph_extensions is packaged usingPoetry.Python 3.6 or later is required.FeaturesSeepyqtgraph_extensions/examplesfor some examples.Axis alignment across multiple plot itemsTheAlignedPlotItemis so-called because it uses its parent's graphics layout object for holding its constituent items (view box, axis items and title) rather than creating one internally. Its constituents can therefore be aligned with those of other items in the parent's graphics layout, including the constituent items of otherAlignedPlotItemobjects. Here's anexample.More axis controlsAxisItemis reimplemented with its own buttons for autoranging at the upper and lower limits.Traditional interactive color barpyqtgraph_extensionsadds a MATLAB-styleColorBarItemwhich can be linked to multiple ImageItems.OtherSimplified exporting with theexportfunctionEasy adding of a second vertical axis on the right hand side (with linked x axis), likewise for a second horizontal axis on the top. Seeexample.MoreGLGraphicsItems- see theunit tests.TestingI usepytestwithpytest-qtduring development work andtoxto test installation & dependencies.Plan / outlookI developed the various features as needed and will continue on the same basis. When I began writingpyqtgraph_extensionsI was just starting out with Python, Git/GitHub, and open source tools in general (I'm a convert from MATLAB).I'd be happy for any/all features to be moved intopyqtgraphproper. Feel free toreach out.TODOAdd switch for user interactivity on color bar example.Documentation
Package: pyqtgraph-for-dubble-bubble
PyQtGraph is a pure-python graphics and GUI library built on PyQt4/PySide and
numpy.It is intended for use in mathematics / scientific / engineering applications.
Despite being written entirely in python, the library is very fast due to its
heavy leverage of numpy for number crunching, Qt’s GraphicsView framework for
2D display, and OpenGL for 3D display.
Package: pyqtgraph_karl
Temporary fork of Luke’s great ‘pyqtgraph’.
It is intended to merge most of it as some time in the future.
—
PyQtGraph is a pure-python graphics and GUI library built on PyQt4/PySide and
numpy.It is intended for use in mathematics / scientific / engineering applications.
Despite being written entirely in python, the library is very fast due to its
heavy leverage of numpy for number crunching, Qt’s GraphicsView framework for
2D display, and OpenGL for 3D display.
Package: pyqtgraph-qo
PyQtGraph is a pure-python graphics and GUI library built on PyQt4/PyQt5/PySide/PySide2 and
numpy.It is intended for use in mathematics / scientific / engineering applications.
Despite being written entirely in python, the library is very fast due to its
heavy leverage of numpy for number crunching, Qt’s GraphicsView framework for
2D display, and OpenGL for 3D display.
Package: pyqtgraph-qp
PyQtGraph is a pure-python graphics and GUI library built on PyQt4/PyQt5/PySide/PySide2 and
numpy.It is intended for use in mathematics / scientific / engineering applications.
Despite being written entirely in python, the library is very fast due to its
heavy leverage of numpy for number crunching, Qt’s GraphicsView framework for
2D display, and OpenGL for 3D display.This version of pyqtgraph is a temporary fork of the main repository to
enable the release of a PySide2 compatible package specifically for
Quantiphyse.
Package: pyqt-hbounding-box
pyqt-hbounding-boxPyQt QGraphicsView with bounding box. User can move vertical border of the box horizontally.RequirementsPyQt5 >= 5.8Setuppython -m pip install pyqt-hbounding-boxFeatureBeing able to drag and drop vertical border horizontallyPressing mouse cursor to place more adjacent border on the spot.Right click to release the focus of the boxYou can set the background out of the box darker withsetDarkerOutOfBox(f: bool).ExampleCode SamplefromPyQt5.QtWidgetsimportQWidget,QGridLayout,QApplication,QPushButton,QFileDialogfrompyqt_hbounding_box.hboundingBoximportHBoundingBoxclassHBoundingBoxExample(QWidget):def__init__(self):super().__init__()self.__initUi()def__initUi(self):addImageBtn=QPushButton('Add image')addImageBtn.clicked.connect(self.__addImage)self.__view=HBoundingBox()lay=QGridLayout()lay.addWidget(addImageBtn)lay.addWidget(self.__view)self.setLayout(lay)def__addImage(self):filename=QFileDialog.getOpenFileName(self,'Open','','Image Files (*.png *.jpg *.bmp)')iffilename[0]:filename=filename[0]self.__view.setFile(filename)if__name__=="__main__":importsysapp=QApplication(sys.argv)ex=HBoundingBoxExample()ex.show()sys.exit(app.exec_())Resulthttps://user-images.githubusercontent.com/55078043/147186296-fa9083d0-67c6-4d7e-b139-7845ee38ddf9.mp4See Alsopyqt-vbounding-box- vertical waypyqt-bounding-box- horizontal/vertical ways
Package: pyqt-highlight-completer
pyqt-highlight-completerPyQt highlight completerRequirementsPyQt5 >= 5.8Setuppython -m pip install pyqt-highlight-completerNoteThis package mainly consist of QLineEdit and QTableWidget. QCompleter is not even used.ExampleCode SamplefromPyQt5.QtWidgetsimportQApplicationfrompyqt_highlight_completerimportHighlightCompleterif__name__=="__main__":importsysapp=QApplication(sys.argv)mainWindow=HighlightCompleter()mainWindow.show()mainWindow.addTexts('Alberic Litte,Angalmo,Antus Odiil,Ariela Doran,Arriana Valga,Athragar,Bittneld the Curse-Bringer,Carmen Litte,Casta Scribonia,Chanel,Chorrol Jailor,Chorrol Soldier,City Watch,Dar-Ma,Earana,Emfrid,Estelle Renoit,Eugal Belette,Fighters Guild Porter,Francois Motierre,Gaturn gro-Gonk,Glistel,Gureryne Selvilo,Honditar,Jirolin Doran,Kurz gro-Baroth,Laythe Wavrick,Lazy Kaslowyn,Lum gro-Baroth,Malintus Ancrus,Modryn Oreyn,Nardhil,Nermus the Mooch,Orag gra-Bargol,Orgnolf Hairy-Legs,Orok gro-Ghoth,Otius Loran,Rallus Odiil,Rasheda,Rena Bruiant,Reynald Jemane,Rimalus Bruiant,Seed-Neeus,Talasma,Teekeeus,Valus Odiil,Vilena Donton,Wallace'.split(','))app.exec_()Result
Package: pyqt-image-file-explorer-table-widget
pyqt-image-file-explorer-table-widgetPyQt QTableWidget for image file explorerRequirementsPyQt5 >= 5.8Setuppython -m pip install pyqt-image-file-explorer-table-widgetIncluded Packagespyqt-resource-helperFeatureBeing able to set column count withsetColumnCount(columns: int)Being able to remove selected cells withremoveSelectedCells()Set cell padding withsetCellPadding(padding: int). No padding by defeault.Set cell margin (set space between cells) withsetCellMargin(margin: int)- This doesn't give the space between cells, just looks like it. I will figure it out how to set the space between cells properly. No margin by default.Resize friendlyIf you want to add grid(no grid by default), usesetShowGrid(f: bool)even though this is provided byQTableWidgetoriginally.showTinyImageBigger(f: bool)to expand image which is so small that it's hard to seeExampleimportosfrompyqt_image_file_explorer_table_widget.imageFileExplorerTableWidgetimportImageFileExplorerTableWidgetfromPyQt5.QtWidgetsimportQWidget,QPushButton,QHBoxLayout,QGridLayout,QFileDialog,QApplicationclassImageFileExplorerExample(QWidget):def__init__(self):super().__init__()self.__initUi()def__initUi(self):self.__tableWidget=ImageFileExplorerTableWidget()addBtn=QPushButton('Add')addBtn.clicked.connect(self.__add)delBtn=QPushButton('Remove')delBtn.clicked.connect(self.__delete)lay=QHBoxLayout()lay.addWidget(addBtn)lay.addWidget(delBtn)lay.setContentsMargins(0,0,0,0)btns=QWidget()btns.setLayout(lay)self.__tableWidget.setColumnCount(6)lay=QGridLayout()lay.addWidget(btns)lay.addWidget(self.__tableWidget)lay.setContentsMargins(0,0,0,0)self.setLayout(lay)def__add(self):dirname=QFileDialog.getExistingDirectory(self,'Open directory','')ifdirname:filenames=[os.path.join(dirname,filename)forfilenameinos.listdir(dirname)]filenames=list(filter(lambdax:os.path.splitext(x)[-1]in['.png'],[filenameforfilenameinfilenames]))# In this example, png onlyself.__tableWidget.addCells(filenames)def__delete(self):self.__tableWidget.removeSelectedCells()if__name__=="__main__":importsysapp=QApplication(sys.argv)imageFileExplorerExample=ImageFileExplorerExample()imageFileExplorerExample.show()app.exec_()ResultAfter select add.png, addTab.png, bold.png and remove all of them
Package: pyqt-instant-search-bar
pyqt-instant-search-barPyQt(+PySide) instant search bar.RequirementsPyQt5 >= 5.8Setuppython -m pip install pyqt-instant-search-barIncluded Packagespyqt-resource-helperpyqt-svg-labelMethods/Signal OverviewsetLabel(visibility: bool = True, text=None)Set the visibility of search icon. You can set the text with this function too.setSearchIcon(icon_filename: str)Set the icon. icon should be svg file.setPlaceHolder(text: str)getSearchBar()getSearchLabel()searched(text: str)signal to get the text which is written in the search bar. See the example below.PreviewCode SamplefromPyQt5.QtWidgetsimportQApplicationfrompyqt_instant_search_barimportInstantSearchBarif__name__=="__main__":importsysapp=QApplication(sys.argv)searchBar=InstantSearchBar()searchBar.searched.connect(print)# print the written textsearchBar.show()app.exec_()ResultSee Alsopyqt-search-bar-menu- QMenu which has search bar as a first item to help you search the menu items.pyqt-search-bar- This supports search button. (click to search, not instant search)pyqt-database-example- Search the sql database table(using QSqlTableModel) with instant search bar.
Package: pyqtkeybind
OverviewCross platform global keybindings for PyQt5Installation / UsageTo install use pip:$ pip install pyqtkeybindOr clone the repo:$ git clone https://github.com/codito/pyqtkeybind.git
$ python setup.py installExampleSeehttps://github.com/codito/pyqtkeybind/blob/master/sample/hotkey.pyContributingPull requests are most welcome.
Package: pyqt-label-slider
pyqt-label-sliderPyQt QSlider with QLabel(QLabel is on the left side, QSlider is on the right side, horizontal direction only) QLabel's value synchronizes with QSlider's value.RequirementsPyQt5 >= 5.8Setuppython pip -m install pyqt-label-sliderUsagegetSlider()to get QSlider.getLabel()to get QLabel.NoteTick interval is set at 10.ExampleCode SamplefromPyQt5.QtWidgetsimportQApplication,QMainWindowfrompyqt_label_slider.labelSliderimportLabelSliderclassExample(QMainWindow):def__init__(self):super().__init__()self.__initUi()def__initUi(self):widget=LabelSlider()slider=widget.getSlider()slider.setMaximumWidth(150)slider.setRange(10,200)self.setCentralWidget(widget)if__name__=="__main__":importsysapp=QApplication(sys.argv)ex=Example()ex.show()sys.exit(app.exec_())Resulthttps://user-images.githubusercontent.com/55078043/148164060-30f842f1-a64e-4553-abba-f37c7d0f8365.mp4
Package: pyqt-led
pyqt_ledSimple LED widget for PyQt5.Table of ContentsInstallationUsageLicenseInstallationpip$ pip install pyqt-ledsetup.py$ python setup.py installUsageThe following example is also provided in the package, and will result in the screenshots shown above.fromPyQt5.QtCoreimportQtfromPyQt5.QtWidgetsimportQApplicationfromPyQt5.QtWidgetsimportQGridLayoutfromPyQt5.QtWidgetsimportQWidgetfrompyqt_ledimportLedimportnumpyasnpimportsysclassDemo(QWidget):def__init__(self,parent=None):QWidget.__init__(self,parent)self._shape=np.array(['capsule','circle','rectangle'])self._color=np.array(['blue','green','orange','purple','red','yellow'])self._layout=QGridLayout(self)self._create_leds()self._arrange_leds()defkeyPressEvent(self,e):ife.key()==Qt.Key_Escape:self.close()def_create_leds(self):forsinself._shape:forcinself._color:exec('self._{}_{}= Led(self, on_color=Led.{}, shape=Led.{})'.format(s,c,c,s))exec('self._{}_{}.setFocusPolicy(Qt.NoFocus)'.format(s,c))def_arrange_leds(self):forrinrange(3):forcinrange(6):exec('self._layout.addWidget(self._{}_{},{},{}, 1, 1,\Qt.AlignCenter)'.format(self._shape[r],self._color[c],r,c))c+=1r+=1app=QApplication(sys.argv)demo=Demo()demo.show()sys.exit(app.exec_())LicenseMIT License. Copyright (c) 2018 Jihang Li.
Package: pyqt-left-right-text-completer
pyqt-left-right-text-completerPyQt Left text, right text completer. Left text is major target of search.Detailed DescriptionQCompleter's popup widget is gridless QTableView. Right text is gray colored.You can add a new pair of text to search withaddText(text1, text2).Text1 is left text, text2 is right text.This completer is case insensitive as default.RequirementsPyQt5 >= 5.8Setuppython -m pip install pyqt-left-right-text-completerExampleCode ExamplefromPyQt5.QtWidgetsimportQMainWindow,QLineEdit,QApplicationfrompyqt_left_right_text_completerimportLeftRightTextCompleterclassMainWindow(QMainWindow):def__init__(self):super().__init__()self.__initUi()def__initUi(self):searchBar=QLineEdit()completer=LeftRightTextCompleter()foriinrange(1,128):completer.addText(chr(i),f'{i}')# chr(i) is left text, f'{i} is right text.searchBar.setCompleter(completer)self.setCentralWidget(searchBar)if__name__=="__main__":importsysapp=QApplication(sys.argv)mainWindow=MainWindow()mainWindow.show()sys.exit(app.exec_())Result
Package: pyqtlet2
pyqtlet2pyqtlet is a Leaflet map wrapper for Qt bindings. In construction and design, it mimics theofficial leaflet apias much as possible.AboutThis is a fork of the repository pyqtlet from @skylarkdrones. Since the original repository is not further maintained. Since I find this package very useful for a map implementation in the QT environment, I want to further develop this package. If you want to extend this package feel free to get in contact with me or create an Issue/Pull Request with a change!InstallationYou as a user need to specify the Qt package you want to use. Please checkqtpyto find out which Qt bindings can be used.pip3install"pyqtlet2[PyQt5]"# orpip3install"pyqtlet2[PySide6]"If you have multiple Qt bindings installed in your environment, please specify the necessary environment variable inside your code.importosos.environ['QT_API']='pyqt5'fromqtpyimportQtGuiCheck if the installation was successful:# To test whether it is successfully workingpython3>>>frompyqtletimportL,MapWidget
>>># No errorsUsageimportosimportsysos.environ['QT_API']='pyqt5'fromqtpy.QtWidgetsimportQApplication,QVBoxLayout,QWidgetfrompyqtlet2importL,MapWidgetclassMapWindow(QWidget):def__init__(self):# Setting up the widgets and layoutsuper().__init__()self.mapWidget=MapWidget()self.layout=QVBoxLayout()self.layout.addWidget(self.mapWidget)self.setLayout(self.layout)# Working with the maps with pyqtletself.map=L.map(self.mapWidget)self.map.setView([12.97,77.59],10)L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png').addTo(self.map)self.marker=L.marker([12.934056,77.610029])self.marker.bindPopup('Maps are a treasure.')self.map.addLayer(self.marker)self.show()if__name__=='__main__':app=QApplication(sys.argv)widget=MapWindow()sys.exit(app.exec_())Additional Leaflet PackagesLeaflet.draw (Version 0.4.14) -https://github.com/Leaflet/Leaflet.drawLeaflet.RotatedMarker (Version 0.2.0) -https://github.com/bbecquet/Leaflet.RotatedMarkerUsing Unimplemented Leaflet FeaturesAt this time, there is none actively adding features to pyqtlet. This means that there
are a lot of Leaflet features that are not implemented in pyqtlet. However, there is still
a way to access these features via therunJavaScriptapi. This allows arbitrary code to
be run within the map window.For example, if we want to change the marker icon in the above example, add the following
2 lines of code after theself.map.addLayer(self.marker)statement.# Create a icon called markerIcon in the js runtime.self.map.runJavaScript('var markerIcon = L.icon({iconUrl: "https://leafletjs.com/examples/custom-icons/leaf-red.png"});')# Edit the existing python object by accessing it's jsName propertyself.map.runJavaScript(f'{self.marker.jsName}.setIcon(markerIcon);')This technique will allow users to use all the features available in leaflet.ContributorsA big thank you, goes to all the contributors of this project!ContributingIn terms of contributing, there is a lot of work that still needs to be done.
Specifically, there are a lot of leaflet features that need to be ported into pyqtlet. All contributions welcome.
Package: pyqtlineeditprogressbar
PyQtLineEditProgressBarA custom PyQt widget that creates a configurable progress bar as the background color of a QLineEdit widget.IntroductionThis widget sub-classes theQLineEditwidget to add a progress bar as its background color.Read theUser Manual.DependenciesPyQtLineEditProgressBar depends on the following third-party packages:PyQt5colourInstallationVia Python's package installer:pip install pyqtlineeditprogressbarTestingOnce installed thedemo.pymodule can be executed to demonstrate usage:from pyqtlineeditprogressbar import demo
demo.main()The results of executing this file should look similar to the animation below.LicensePyQtLineEditProgressBaris GPLv3 licensed. SeeLICENSEfile for details.AttributionsThis code is based off of a discussion atStackOverflow.UsageInspect thedemo.pycode for examples of how to use ** PyQtLineEditProgressBar**
and read theuser manual documentation.CaveatThis package uses Qt Palettes and LinearGradients to implement the progressbar in the background color of the LineEdit widget.If you spend anytime whatsoever reading the Qt documentation on Palettes, it clearly states multiple times that the use of Palettes and Qt Style Sheets should not be mixed.So its highly likely that if this package is used as part of an application that changes color themes via Qt Style Sheets there might be compatibility issues.I would like to understand and solve this issue in the future, if possible. But at the moment it is not clear to me how to implement something like this only using Qt's style sheets.
Package: pyqt-line-number-widget
pyqt-line-number-widgetShow line numbers next to QTextBrowser or QTextEditRequirementsPyQt5 >= 5.8Setuppython -m pip install pyqt-line-number-widgetExampleCode SamplefromPyQt5.QtWidgetsimportQApplication,QHBoxLayout,QTextEdit,QWidgetfrompyqt_line_number_widgetimportLineNumberWidgetclassMainWindow(QWidget):def__init__(self):super().__init__()self.__initUi()def__initUi(self):self.__te=QTextEdit()self.__te.textChanged.connect(self.__line_widget_line_count_changed)self.__lineWidget=LineNumberWidget(self.__te)lay=QHBoxLayout()lay.addWidget(self.__lineWidget)lay.addWidget(self.__te)self.setLayout(lay)def__line_widget_line_count_changed(self):ifself.__lineWidget:n=int(self.__te.document().lineCount())self.__lineWidget.changeLineCount(n)if__name__=="__main__":importsysapp=QApplication(sys.argv)mainWindow=MainWindow()mainWindow.show()app.exec()Resulthttps://user-images.githubusercontent.com/55078043/174435483-d6e8b57c-5b26-48fd-a5a7-454841e11d69.mp4
Package: pyqt-llamaindex
pyqt-llamaindexExample of use llama-index in Python desktop applicationWith combination of llama-index and openai, you can pretty much make your personal chatbot, by your input.Currently this package is only supporting txt files(i don't know about other file type such as .doc works) in the directory. If you want to feed the chatbot to respond what you want to get answer, put txt file inside the "example" directory in this repo and read the instruction below("How to Run" section) to use it. Of course, you can use your own directory other than the directory i mentioned earlier.Remember, the directory has to contain at least one text file.By default, example folder contains yjg30737.txt and pyqt-openai.txt. It was used for testing so feel free to remove it if you want.RequirementsPyQt5 >= 5.14openaillama-indexHow to Rungit clone ~cd pyqt-llamaindexpip install -r requirements.txtcd pyqt_llamaindexpython main.pywrite your openai api key to the top of the screen and clicking "use" buttonpressing "set directory" button to import directory which contains text fileschat with your personal chatbotPreviewSee Alsopyqt-openai
Package: pyqt-loading-progressbar
pyqt-loading-progressbarPyQt animated progress bar used for loadingThere are two types of animation - dynamic, fade.Animation is set to dynamic by default.You can set it withsetAnimationType(type: str). You can give 'dynamic' or 'fade' totypeargument.RequirementsPyQt5 >= 5.8Setuppython -m pip install pyqt-loading-progressbarExampleCode SamplefromPyQt5.QtWidgetsimportQMainWindow,QApplication,QVBoxLayout,QLabel,QWidgetfrompyqt_loading_progressbar.loadingProgressBarimportLoadingProgressBarclassMainWindow(QMainWindow):def__init__(self):super().__init__()self.__initUi()def__initUi(self):bar=LoadingProgressBar()# bar.setAnimationType('fade') - if you want to set animation type to fadelay=QVBoxLayout()lay.addWidget(QLabel('Loading...'))lay.addWidget(bar)mainWidget=QWidget()mainWidget.setLayout(lay)self.setCentralWidget(mainWidget)if__name__=="__main__":importsysapp=QApplication(sys.argv)w=MainWindow()w.show()app.exec_()ResultDynamichttps://user-images.githubusercontent.com/55078043/171343160-88a38bbf-cc7a-4d83-b2b1-66d7291999ef.mp4Fadehttps://user-images.githubusercontent.com/55078043/171527713-ef74326d-a84f-499f-a79f-1efc17e4ab76.mp4
Package: pyqt-mac-buttons-widget
pyqt-mac-buttons-widgetPyQt macOS style of titlebar buttons (e.g. min/max/close) widgetRequirementsPyQt5 >= 5.8Setuppython -m pip install pyqt-mac-buttons-widgetIncluded Packagepyqt-titlebar-buttons-widget- Parent widgetMethod OverviewMacButtonsWidget(base_widget=None, hint=['min', 'max', 'close']))- Constructor.getMinimizedBtn(),getMaximizedBtn(),getCloseBtn(). I belive these three methods are quite self-explanatory.This module is used forpyqt-custom-titlebar-window's macOS style button. You can see the example of this module's usage on the documentation at the link above.. later.ExampleThis example is just to show how it looks.fromPyQt5.QtWidgetsimportQApplicationfrompyqt_mac_buttons_widgetimportMacButtonsWidgetif__name__=="__main__":importsysapp=QApplication(sys.argv)widget=MacButtonsWidget()widget.show()app.exec_()Result
Package: pyqtmd
pyqtmdA very simple markdown viewer made with python and qt. ripped out of my lyberry-qt app.InstallationFirstinstall a recent version of Python 3.Then install the package with pip:pip install pyqtmdGet more info from Python about installing packages:https://packaging.python.org/en/latest/tutorials/installing-packages/Usagepyqtmd ( FILENAME | FILE_URL )HelpJoin my space on matrix! I am happy to help you getting started, and I welcome feedback and discussion.General Matrix Space:#bean-machine:tristans.cloudContributingSharing my project is the best way to support it! If you can contribute code too, that would be awesome!Otherwise, I would greatly appreciate any donations with Monero (XMR), a secure and private currency for the internet:openalias: tristans.cloud87uvs847voZW4QzLqCb3prfSeTjVgxo8PKCAGmeYQTKYd58yU7FD9PJY2eoDXW7y4jNozfHW3bq6SC6MZaB6Qgcz9Cib1DSYou can also support my channel on LBRY, where I sometimes post updates:lbry://@MyBeansAreBaked:bI put more frequent low effort updates onlbry://@MyBeansAreBaking#3LicenseCopyright (C) 2022 MyBeansAreBakedThis program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.You should have received a copy of the GNU General Public License
along with this program.  If not, seehttps://www.gnu.org/licenses/.