diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/NanoVNASaver/About.py b/NanoVNASaver/About.py new file mode 100644 index 0000000..f454478 --- /dev/null +++ b/NanoVNASaver/About.py @@ -0,0 +1,37 @@ +# NanoVNASaver +# +# A python program to view and export Touchstone data from a NanoVNA +# Copyright (C) 2019, 2020 Rune B. Broberg +# Copyright (C) 2020 NanoVNA-Saver Authors +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +VERSION = "0.3.0" +VERSION_URL = ( + "https://raw.githubusercontent.com/" + "NanoVNA-Saver/nanovna-saver/master/NanoVNASaver/About.py") + +INFO_URL="https://github.com/NanoVNA-Saver/nanovna-saver" +INFO = f"""NanoVNASaver {VERSION} + +Copyright (C) 2019, 2020 Rune B. Broberg +Copyright (C) 2020 NanoVNA-Saver Authors + +This program comes with ABSOLUTELY NO WARRANTY +This program is licensed under the GNU General Public License version 3 + +See {INFO_URL} for further details. +""" + +RELEASE_URL="https://github.com/NanoVNA-Saver/nanovna-saver" diff --git a/NanoVNASaver/Hardware/VNA.py b/NanoVNASaver/Hardware/VNA.py index 2544c9f..887dc89 100644 --- a/NanoVNASaver/Hardware/VNA.py +++ b/NanoVNASaver/Hardware/VNA.py @@ -1,6 +1,8 @@ # NanoVNASaver +# # A python program to view and export Touchstone data from a NanoVNA -# Copyright (C) 2019. Rune B. Broberg +# Copyright (C) 2019, 2020 Rune B. Broberg +# Copyright (C) 2020 NanoVNA-Saver Authors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,13 +17,14 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . import logging -import re from time import sleep from typing import List import serial from PyQt5 import QtWidgets, QtGui +from NanoVNASaver.Settings import Version + logger = logging.getLogger(__name__) @@ -35,7 +38,7 @@ class VNA: self.version: Version = Version("0.0.0") self.features = set() self.validateInput = True - self.datapoints = self._datapoints[0] + self.datapoints = VNA._datapoints[0] def readFeatures(self) -> List[str]: raw_help = self.readFromCommand("help") @@ -184,9 +187,6 @@ class InvalidVNA(VNA): name = "Invalid" _datapoints = (0, ) - def __init__(self, app: QtWidgets.QWidget, serial_port: serial.Serial): - super().__init__(app, serial_port) - def setSweep(self, start, stop): return @@ -207,58 +207,3 @@ class InvalidVNA(VNA): def flushSerialBuffers(self): return - - -# TODO: should go to Settings.py and be generalized -class Version: - major = 0 - minor = 0 - revision = 0 - note = "" - version_string = "" - - def __init__(self, version_string): - self.version_string = version_string - results = re.match( - r"(.*\s+)?(\d+)\.(\d+)\.(\d+)(.*)", - version_string) - if results: - self.major = int(results.group(2)) - self.minor = int(results.group(3)) - self.revision = int(results.group(4)) - self.note = results.group(5) - logger.debug( - "Parsed version as \"%d.%d.%d%s\"", - self.major, self.minor, self.revision, self.note) - - def __gt__(self, other: "Version") -> bool: - if self.major > other.major: - return True - if self.major < other.major: - return False - if self.minor > other.minor: - return True - if self.minor < other.minor: - return False - if self.revision > other.revision: - return True - return False - - def __lt__(self, other: "Version") -> bool: - return other > self - - def __ge__(self, other: "Version") -> bool: - return self > other or self == other - - def __le__(self, other: "Version") -> bool: - return self < other or self == other - - def __eq__(self, other: "Version") -> bool: - return ( - self.major == other.major and - self.minor == other.minor and - self.revision == other.revision and - self.note == other.note) - - def __str__(self) -> str: - return f"{self.major}.{self.minor}.{self.revision}{self.note}" diff --git a/NanoVNASaver/NanoVNASaver.py b/NanoVNASaver/NanoVNASaver.py index 263e66b..e7db1b0 100644 --- a/NanoVNASaver/NanoVNASaver.py +++ b/NanoVNASaver/NanoVNASaver.py @@ -1,6 +1,8 @@ # NanoVNASaver +# # A python program to view and export Touchstone data from a NanoVNA -# Copyright (C) 2019. Rune B. Broberg +# Copyright (C) 2019, 2020 Rune B. Broberg +# Copyright (C) 2020 NanoVNA-Saver Authors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -51,7 +53,7 @@ from .Marker import Marker from .SweepWorker import SweepWorker from .Settings import BandsModel from .Touchstone import Touchstone -from .about import version as ver +from .About import VERSION as ver from NanoVNASaver.RFTools import corrAttData logger = logging.getLogger(__name__) diff --git a/NanoVNASaver/Settings.py b/NanoVNASaver/Settings.py index 2c35731..4baa6b8 100644 --- a/NanoVNASaver/Settings.py +++ b/NanoVNASaver/Settings.py @@ -1,6 +1,8 @@ # NanoVNASaver +# # A python program to view and export Touchstone data from a NanoVNA -# Copyright (C) 2019. Rune B. Broberg +# Copyright (C) 2019, 2020 Rune B. Broberg +# Copyright (C) 2020 NanoVNA-Saver Authors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . import logging +import re import typing from typing import List, Tuple @@ -149,3 +152,56 @@ class BandsModel(QtCore.QAbstractTableModel): def setColor(self, color): self.color = color + + +class Version: + RXP = re.compile(r"(.*\s+)?(\d+)\.(\d+)\.(\d+)(.*)") + + def __init__(self, version_string: str): + self.major = 0 + self.minor = 0 + self.revision = 0 + self.note = "" + self.version_string = version_string + + results = Version.RXP.match(version_string) + if results: + self.major = int(results.group(2)) + self.minor = int(results.group(3)) + self.revision = int(results.group(4)) + self.note = results.group(5) + logger.debug( + "Parsed version as \"%d.%d.%d%s\"", + self.major, self.minor, self.revision, self.note) + + def __gt__(self, other: "Version") -> bool: + if self.major > other.major: + return True + if self.major < other.major: + return False + if self.minor > other.minor: + return True + if self.minor < other.minor: + return False + if self.revision > other.revision: + return True + return False + + def __lt__(self, other: "Version") -> bool: + return other > self + + def __ge__(self, other: "Version") -> bool: + return self > other or self == other + + def __le__(self, other: "Version") -> bool: + return self < other or self == other + + def __eq__(self, other: "Version") -> bool: + return ( + self.major == other.major and + self.minor == other.minor and + self.revision == other.revision and + self.note == other.note) + + def __str__(self) -> str: + return f"{self.major}.{self.minor}.{self.revision}{self.note}" diff --git a/NanoVNASaver/Windows/About.py b/NanoVNASaver/Windows/About.py index 572f0cf..b121164 100644 --- a/NanoVNASaver/Windows/About.py +++ b/NanoVNASaver/Windows/About.py @@ -1,6 +1,8 @@ # NanoVNASaver +# # A python program to view and export Touchstone data from a NanoVNA -# Copyright (C) 2019. Rune B. Broberg +# Copyright (C) 2019, 2020 Rune B. Broberg +# Copyright (C) 2020 NanoVNA-Saver Authors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,7 +23,8 @@ from urllib import request, error from PyQt5 import QtWidgets, QtCore -from NanoVNASaver.Hardware import Version +from NanoVNASaver.About import VERSION_URL, INFO_URL +from NanoVNASaver.Settings import Version logger = logging.getLogger(__name__) @@ -51,20 +54,24 @@ class AboutWindow(QtWidgets.QWidget): f"NanoVNASaver version {self.app.version}")) layout.addWidget(QtWidgets.QLabel("")) layout.addWidget(QtWidgets.QLabel( - "\N{COPYRIGHT SIGN} Copyright 2019 Rune B. Broberg")) + "\N{COPYRIGHT SIGN} Copyright 2019, 2020 Rune B. Broberg" + "\N{COPYRIGHT SIGN} Copyright 2020 NanoVNA-Saver Authors" + )) layout.addWidget(QtWidgets.QLabel( "This program comes with ABSOLUTELY NO WARRANTY")) layout.addWidget(QtWidgets.QLabel( - "This program is licensed under the GNU General Public License version 3")) + "This program is licensed under the" + " GNU General Public License version 3")) layout.addWidget(QtWidgets.QLabel("")) link_label = QtWidgets.QLabel( - "For further details, see: " - "https://mihtjel.github.io/nanovna-saver/") + f'For further details, see: ' + f"{INFO_URL}") link_label.setOpenExternalLinks(True) layout.addWidget(link_label) layout.addWidget(QtWidgets.QLabel("")) - self.versionLabel = QtWidgets.QLabel("NanoVNA Firmware Version: Not connected.") + self.versionLabel = QtWidgets.QLabel( + "NanoVNA Firmware Version: Not connected.") layout.addWidget(self.versionLabel) layout.addStretch() @@ -73,11 +80,13 @@ class AboutWindow(QtWidgets.QWidget): btn_check_version.clicked.connect(self.findUpdates) self.updateLabel = QtWidgets.QLabel("Last checked: ") - self.updateCheckBox = QtWidgets.QCheckBox("Check for updates on startup") + self.updateCheckBox = QtWidgets.QCheckBox( + "Check for updates on startup") self.updateCheckBox.toggled.connect(self.updateSettings) - check_for_updates = self.app.settings.value("CheckForUpdates", "Ask") + check_for_updates = self.app.settings.value( + "CheckForUpdates", "Ask") if check_for_updates == "Yes": self.updateCheckBox.setChecked(True) self.findUpdates(automatic=True) @@ -125,7 +134,8 @@ class AboutWindow(QtWidgets.QWidget): selection = QtWidgets.QMessageBox.question( self.app, "Enable checking for updates?", - "Would you like NanoVNA-Saver to check for updates automatically?") + "Would you like NanoVNA-Saver to" + " check for updates automatically?") if selection == QtWidgets.QMessageBox.Yes: self.updateCheckBox.setChecked(True) self.app.settings.setValue("CheckForUpdates", "Yes") @@ -136,24 +146,27 @@ class AboutWindow(QtWidgets.QWidget): QtWidgets.QMessageBox.information( self.app, "Checking for updates disabled", - "You can check for updates using the \"About\" window.") + 'You can check for updates using the "About" window.') else: self.app.settings.setValue("CheckForUpdates", "Ask") def findUpdates(self, automatic=False): - update_url = "http://mihtjel.dk/nanovna-saver/latest.json" - + latest_version = Version("") + latest_url = "" try: - req = request.Request(update_url) + req = request.Request(VERSION_URL) req.add_header('User-Agent', "NanoVNA-Saver/" + self.app.version) - updates = json.load(request.urlopen(req, timeout=3)) - latest_version = Version(updates['version']) - latest_url = updates['url'] + for line in request.urlopen(req, timeout=3): + line = line.decode("utf-8") + if line.startswith("VERSION ="): + latest_version = Version(line[8:].strip(" \"'")) + if line.startswith("RELEASE_URL ="): + latest_url = line[13:].strip(" \"'") except error.HTTPError as e: logger.exception("Checking for updates produced an HTTP exception: %s", e) self.updateLabel.setText("Connection error.") return - except json.JSONDecodeError as e: + except TypeError as e: logger.exception("Checking for updates provided an unparseable file: %s", e) self.updateLabel.setText("Data error reading versions.") return @@ -186,5 +199,6 @@ class AboutWindow(QtWidgets.QWidget): # Maybe consider showing it if not an automatic update. # self.updateLabel.setText( - f"Last checked: {strftime('%Y-%m-%d %H:%M:%S', localtime())}") + f"Last checked: " + f"{strftime('%Y-%m-%d %H:%M:%S', localtime())}") return diff --git a/NanoVNASaver/__main__.py b/NanoVNASaver/__main__.py index 63c554b..35eb682 100644 --- a/NanoVNASaver/__main__.py +++ b/NanoVNASaver/__main__.py @@ -1,7 +1,10 @@ #! /bin/env python - -# NanoVNASaver - a python program to view and export Touchstone data from a NanoVNA -# Copyright (C) 2019. Rune B. Broberg +# +# NanoVNASaver +# +# A python program to view and export Touchstone data from a NanoVNA +# Copyright (C) 2019, 2020 Rune B. Broberg +# Copyright (C) 2020 NanoVNA-Saver Authors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,60 +18,64 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . +""" +NanoVNASaver + +A multiplatform tool to save Touchstone files from the +NanoVNA, sweep frequency spans in segments to gain more +data points, and generally display and analyze the +resulting data. +""" +import argparse import logging import sys from PyQt5 import QtWidgets, QtCore -from .NanoVNASaver import NanoVNASaver -from .about import debug +from NanoVNASaver.About import VERSION, INFO +from NanoVNASaver.NanoVNASaver import NanoVNASaver def main(): - print("NanoVNASaver " + NanoVNASaver.version) - print("Copyright (C) 2019 Rune B. Broberg") - print("This program comes with ABSOLUTELY NO WARRANTY") - print("This program is licensed under the GNU General Public License version 3") - print("") - print("See https://github.com/mihtjel/nanovna-saver for further details") - # Main code goes here + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument("-d", "--debug", action="store_true", + help="Set loglevel to debug") + parser.add_argument("-D", "--debug-file", + help="File to write debug logging output to") + parser.add_argument("--version", action="version", + version=f"NanoVNASaver {VERSION}") + args = parser.parse_args() + console_log_level = logging.WARNING file_log_level = logging.DEBUG - log_file = "" - for i in range(len(sys.argv)): - if sys.argv[i] == "-d": - console_log_level = logging.DEBUG - elif sys.argv[i] == "-D" and i < len(sys.argv) - 1: - log_file = sys.argv[i+1] - elif sys.argv[i] == "-D": - print("You must enter a file name when using -D") - return + print(INFO) - if debug: + if args.debug: console_log_level = logging.DEBUG logger = logging.getLogger("NanoVNASaver") logger.setLevel(logging.DEBUG) + ch = logging.StreamHandler() ch.setLevel(console_log_level) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + formatter = logging.Formatter( + '%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch.setFormatter(formatter) logger.addHandler(ch) - if log_file != "": - try: - fh = logging.FileHandler(log_file) - except Exception as e: - logger.exception("Error opening log file: %s", e) - return + if args.debug_file: + fh = logging.FileHandler(args.debug_file) fh.setLevel(file_log_level) fh.setFormatter(formatter) logger.addHandler(fh) logger.info("Startup...") - QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True) + QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, + True) app = QtWidgets.QApplication(sys.argv) window = NanoVNASaver() window.show() diff --git a/NanoVNASaver/about.py b/NanoVNASaver/about.py deleted file mode 100644 index ddfefc8..0000000 --- a/NanoVNASaver/about.py +++ /dev/null @@ -1,19 +0,0 @@ -# NanoVNASaver - a python program to view and export Touchstone data from a NanoVNA -# Copyright (C) 2019. Rune B. Broberg -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -version = '0.2.3-dg5gbh' -# debug = False -debug = True diff --git a/README.md b/README.md index cfb272b..ca147c7 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,10 @@ [![GitHub Releases](https://img.shields.io/github/downloads/mihtjel/nanovna-saver/latest/total)](https://github.com/mihtjel/nanovna-saver/releases/latest) [![Donate](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=T8KTGVDQF5K6E&item_name=NanoVNASaver+Development¤cy_code=EUR&source=url) -NanoVNASaver ============ A multiplatform tool to save Touchstone files from +NanoVNASaver +============ + +A multiplatform tool to save Touchstone files from the NanoVNA, sweep frequency spans in segments to gain more than 101 data points, and generally display and analyze the resulting data. diff --git a/setup.cfg b/setup.cfg index 224a779..f2a8d32 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,12 @@ [metadata] -description-file = README.md \ No newline at end of file +name = NanoVNASaver +author = Rune B. Broberg +license = GNU GPL V3 +license_file = LICENSE +description = A multiplatform tool to save Touchstone files from the + NanoVNA, sweep frequency spans in segments to gain more + data points, and generally display and analyze the + resulting data. +long_description = file: README.md +url = https://github.com/NanoVNA-Saver/nanovna-saver +version = attr: NanoVNASaver.About.VERSION diff --git a/setup.py b/setup.py index bb84c8e..c9a4bd8 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,8 @@ -# NanoVNASaver - a python program to view and export Touchstone data from a NanoVNA -# Copyright (C) 2019. Rune B. Broberg +# NanoVNASaver +# +# A python program to view and export Touchstone data from a NanoVNA +# Copyright (C) 2019, 2020 Rune B. Broberg +# Copyright (C) 2020 NanoVNA-Saver Authors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,9 +16,7 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . - import sys -from NanoVNASaver.about import version if sys.version_info < (3, 7): print("You need at least Python 3.7 for this application!") @@ -30,19 +31,8 @@ except ImportError: print("Try installing them with pip install setuptools") sys.exit(1) -with open("README.md", "r") as fh: - long_description = fh.read() - setup( - name='NanoVNASaver', - url='https://github.com/mihtjel/nanovna-saver', - version=version, - author='Rune B. Broberg', - author_email='', packages=find_packages(exclude=["test", ]), - long_description=long_description, - long_description_content_type="text/markdown", - license='LICENSE.txt', entry_points={ 'console_scripts': [ 'NanoVNASaver = NanoVNASaver.__main__:main' diff --git a/test/__init__.py b/test/__init__.py index 77f8568..f9173b2 100644 --- a/test/__init__.py +++ b/test/__init__.py @@ -1,5 +1,8 @@ -# NanoVNASaver - a python program to view and export Touchstone data from a NanoVNA -# Copyright (C) 2019. Rune B. Broberg +# NanoVNASaver +# +# A python program to view and export Touchstone data from a NanoVNA +# Copyright (C) 2019, 2020 Rune B. Broberg +# Copyright (C) 2020 NanoVNA-Saver Authors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,4 +16,3 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . - diff --git a/test/data/sol_27_30.cal b/test/data/sol_27_30.cal new file mode 100644 index 0000000..022d7f1 --- /dev/null +++ b/test/data/sol_27_30.cal @@ -0,0 +1,105 @@ +# Calibration data for NanoVNA-Saver +! SOL Calibration +! 27-30Mhz 101 Points +# Hz ShortR ShortI OpenR OpenI LoadR LoadI ThroughR ThroughI IsolationR IsolationI +27000000 0.948987136 -0.423713696 -0.862881088 0.584374208 -0.584138048 0.409614848 +27030000 0.95050944 -0.421384544 -0.86482624 0.58150208 -0.58608 0.407054528 +27060000 0.952427776 -0.419021984 -0.866214592 0.578889728 -0.587020096 0.405044192 +27090000 0.95315168 -0.416525824 -0.86789984 0.575553728 -0.588066944 0.402468256 +27120000 0.954115392 -0.414095328 -0.86989632 0.573364288 -0.58962624 0.401025856 +27150000 0.95504704 -0.411861216 -0.872223616 0.569549888 -0.591408192 0.398595584 +27180000 0.955773696 -0.409258784 -0.874107136 0.56708832 -0.592301184 0.396703296 +27210000 0.956872256 -0.406567712 -0.875931072 0.5642784 -0.593603072 0.394556448 +27240000 0.957776 -0.403988512 -0.877644416 0.5612624 -0.594146624 0.392148736 +27270000 0.958846272 -0.400933792 -0.879104256 0.558358848 -0.59524544 0.390533024 +27300000 0.960017088 -0.39894032 -0.880146176 0.556461952 -0.59603776 0.388433696 +27330000 0.960659328 -0.396177984 -0.881991552 0.553667776 -0.596761344 0.386510336 +27360000 0.961335296 -0.393679168 -0.883669632 0.550464832 -0.597680512 0.38412048 +27390000 0.962341568 -0.391430784 -0.886132736 0.547397952 -0.599497152 0.381873504 +27420000 0.963019328 -0.38918864 -0.88806848 0.544113728 -0.60069568 0.37968576 +27450000 0.96392928 -0.386622592 -0.890202624 0.54090464 -0.602022208 0.377377504 +27480000 0.96498208 -0.384330752 -0.891681088 0.538224576 -0.603046144 0.375168032 +27510000 0.965441728 -0.382015392 -0.894158976 0.535033888 -0.604517632 0.373071744 +27540000 0.966786496 -0.3796384 -0.89598112 0.532064928 -0.605699584 0.37094736 +27570000 0.967063872 -0.377387936 -0.898582464 0.52843584 -0.60726112 0.368700224 +27600000 0.9681776 -0.374776096 -0.899971584 0.525092192 -0.608177472 0.366646976 +27630000 0.969066432 -0.37252944 -0.902685376 0.522223168 -0.61013184 0.364436032 +27660000 0.969935488 -0.370256288 -0.90459104 0.518845152 -0.611461568 0.362501888 +27690000 0.97048352 -0.368154432 -0.906611008 0.515923904 -0.61279904 0.360061984 +27720000 0.971097344 -0.365651424 -0.90905056 0.512404256 -0.613699584 0.357652512 +27750000 0.972812224 -0.362664192 -0.91001824 0.510228448 -0.614435584 0.355953344 +27780000 0.974040768 -0.359744928 -0.910935424 0.507888448 -0.614687744 0.353831008 +27810000 0.974645184 -0.3575968 -0.913249472 0.504501408 -0.616165696 0.351348512 +27840000 0.97518336 -0.355629824 -0.915046464 0.501332032 -0.617387584 0.349504256 +27870000 0.975675136 -0.35366368 -0.917392256 0.497429568 -0.619331264 0.347105536 +27900000 0.97625056 -0.35130048 -0.919599232 0.494114016 -0.620401088 0.344320096 +27930000 0.977126336 -0.348989632 -0.921426624 0.490970752 -0.621715328 0.342202432 +27960000 0.978229632 -0.346312736 -0.922814272 0.4877968 -0.62263136 0.340220736 +27990000 0.97886816 -0.34338128 -0.924974144 0.484398592 -0.623512448 0.33740736 +28020000 0.979865984 -0.341380928 -0.92634528 0.481098208 -0.624648448 0.335359104 +28050000 0.980396608 -0.339280672 -0.9280656 0.477906944 -0.625906816 0.333542272 +28080000 0.981227264 -0.336904096 -0.930516608 0.475222368 -0.627196864 0.331399616 +28110000 0.98195552 -0.3347112 -0.932093376 0.471777312 -0.628217472 0.329184992 +28140000 0.9824928 -0.332363136 -0.933943872 0.468074272 -0.62950784 0.326703616 +28170000 0.983105408 -0.330165152 -0.936182528 0.464740992 -0.63120672 0.323923424 +28200000 0.983818752 -0.328010016 -0.937621888 0.4620392 -0.632120064 0.322682816 +28230000 0.984366528 -0.325650688 -0.939489984 0.458033952 -0.633403392 0.319377792 +28260000 0.985162624 -0.323433408 -0.9409312 0.454128992 -0.634202304 0.317079232 +28290000 0.985848896 -0.32110576 -0.943584704 0.45104256 -0.635659904 0.314846848 +28320000 0.986699456 -0.31893024 -0.945056768 0.448032416 -0.637109888 0.312710752 +28350000 0.987251264 -0.31661984 -0.947041472 0.444217856 -0.6382784 0.310466432 +28380000 0.988070784 -0.314645856 -0.948345472 0.44082944 -0.639443264 0.308024352 +28410000 0.988805696 -0.312004 -0.950325248 0.4370912 -0.640787264 0.305608064 +28440000 0.989152768 -0.310032192 -0.9525232 0.4332696 -0.64214176 0.303219712 +28470000 0.990052288 -0.307630016 -0.953933824 0.429828736 -0.643087616 0.300872992 +28500000 0.990495808 -0.305488672 -0.956173696 0.426323072 -0.644532352 0.298788384 +28530000 0.99100128 -0.303345088 -0.957806592 0.422572896 -0.645822848 0.295616352 +28560000 0.991346624 -0.300756736 -0.959882496 0.419539872 -0.647109824 0.294288032 +28590000 0.991954368 -0.298686528 -0.960835392 0.416210208 -0.648238464 0.29173744 +28620000 0.992485504 -0.295947904 -0.962957312 0.412563328 -0.649165184 0.289264384 +28650000 0.993508672 -0.2939904 -0.964553216 0.40887792 -0.649955648 0.286765664 +28680000 0.994255936 -0.292131616 -0.96638176 0.405625536 -0.651601984 0.28434656 +28710000 0.994989888 -0.289638304 -0.96800704 0.401801984 -0.65269952 0.282433664 +28740000 0.995769216 -0.28719056 -0.969230784 0.398162464 -0.653692928 0.279596224 +28770000 0.996364864 -0.28510752 -0.971080512 0.394552128 -0.6546864 0.277294048 +28800000 0.996750144 -0.28292528 -0.972598592 0.3913688 -0.655550592 0.275392192 +28830000 0.997286528 -0.28035296 -0.974633024 0.387517568 -0.656656256 0.272570272 +28860000 0.99808224 -0.27805792 -0.975680256 0.384404128 -0.657997504 0.270125792 +28890000 0.99870016 -0.275851392 -0.977529664 0.380696544 -0.659110144 0.267971664 +28920000 0.999114304 -0.27358176 -0.97861952 0.377251488 -0.659504256 0.26565856 +28950000 0.999476288 -0.271538048 -0.97993376 0.373766848 -0.660833536 0.262928224 +28980000 1.000067592 -0.268709824 -0.982122624 0.369605184 -0.662082304 0.260106352 +29010000 1.000342608 -0.266516688 -0.98337856 0.366011168 -0.663216768 0.257802848 +29040000 1.000953674 -0.264141792 -0.984649792 0.362327104 -0.663888256 0.255352736 +29070000 1.001338959 -0.261663136 -0.986499712 0.358416064 -0.664952448 0.253022288 +29100000 1.0017519 -0.259500864 -0.987964928 0.355694432 -0.665872768 0.250677024 +29130000 1.002074122 -0.257144176 -0.98868416 0.350873792 -0.666659264 0.24796968 +29160000 1.002476931 -0.254702304 -0.991141056 0.34779312 -0.668592384 0.245694592 +29190000 1.003062129 -0.252434992 -0.992317824 0.343730912 -0.668956096 0.24336128 +29220000 1.003616572 -0.25030008 -0.99331072 0.341336288 -0.66970336 0.241371616 +29250000 1.003933311 -0.248015632 -0.994555264 0.33720608 -0.6710288 0.238487488 +29280000 1.004480124 -0.24580616 -0.996240448 0.332931584 -0.671889984 0.23601832 +29310000 1.004703164 -0.243375296 -0.998089984 0.328630912 -0.6725728 0.232820832 +29340000 1.005357147 -0.241261072 -0.999104576 0.325578528 -0.67354688 0.231154768 +29370000 1.005747199 -0.238677088 -1.000756383 0.322126368 -0.67503072 0.22828984 +29400000 1.006140471 -0.236480432 -1.001840234 0.318506112 -0.675381888 0.22616648 +29430000 1.006922007 -0.234071648 -1.003144026 0.314677888 -0.676456704 0.223794336 +29460000 1.007256627 -0.231721776 -1.004606605 0.311028768 -0.676953856 0.22091112 +29490000 1.007521272 -0.22926528 -1.00576675 0.307237344 -0.678220608 0.218699024 +29520000 1.008116961 -0.226956016 -1.007364869 0.303805632 -0.679164096 0.216409296 +29550000 1.008707762 -0.224925824 -1.008327723 0.299587456 -0.679750336 0.213655536 +29580000 1.009231329 -0.222584192 -1.009743571 0.296297984 -0.680929984 0.211361968 +29610000 1.00965476 -0.220301616 -1.010500193 0.29303728 -0.681532928 0.208997504 +29640000 1.010305047 -0.218069984 -1.011721492 0.289086208 -0.68224288 0.206247696 +29670000 1.010891199 -0.215450368 -1.012751698 0.28537776 -0.682848192 0.203642896 +29700000 1.01103127 -0.213219712 -1.0141747 0.281102912 -0.68405824 0.201171472 +29730000 1.011636138 -0.210853856 -1.015708208 0.277221856 -0.684534912 0.19880968 +29760000 1.012027979 -0.208552464 -1.01672411 0.273859456 -0.685095488 0.196016704 +29790000 1.01219964 -0.206031312 -1.018087744 0.270658912 -0.686424128 0.193608704 +29820000 1.012816548 -0.203961648 -1.018956304 0.266596048 -0.686890944 0.191319568 +29850000 1.013238668 -0.201269984 -1.01978004 0.262994624 -0.687488832 0.188913776 +29880000 1.013535738 -0.199082544 -1.02097702 0.258907168 -0.68843776 0.185808224 +29910000 1.013984799 -0.196870128 -1.0222435 0.255366144 -0.689094016 0.183188208 +29940000 1.014475346 -0.194648592 -1.02290833 0.251412992 -0.689804096 0.18098144 +29970000 1.014780045 -0.192069232 -1.023776532 0.24757736 -0.69045856 0.178902112 +30000000 1.015207529 -0.189862144 -1.024984718 0.243840416 -0.691583296 0.175935632 diff --git a/test_master.py b/test_master.py deleted file mode 100644 index b071326..0000000 --- a/test_master.py +++ /dev/null @@ -1,38 +0,0 @@ -# NanoVNASaver - a python program to view and export Touchstone data from a NanoVNA -# Copyright (C) 2019. Rune B. Broberg -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import sys -import unittest - - -############################################################################### -# -# Executing this file initiates the discovery and execution of all unittests -# in the "test" directory, with filenames starting with "test" that have a -# TestCases(unittest.TestCase) Class, which has class functions starting with -# "test_". This provides a simple test framework that is easily expandable by -# simply adding new "test_xxx.py" files into the test directory. -# -############################################################################### - -if __name__ == '__main__': - sys.path.append('.') - loader = unittest.TestLoader() - tests = loader.discover('./test') - testRunner = unittest.runner.TextTestRunner( - failfast=False, - verbosity=2) - testRunner.run(tests)