quarchpy 2.2.6__py2.py3-none-any.whl → 2.2.7.dev1__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- quarchpy/.idea/.gitignore +3 -0
- quarchpy/.idea/inspectionProfiles/Project_Default.xml +12 -0
- quarchpy/.idea/inspectionProfiles/profiles_settings.xml +6 -0
- quarchpy/.idea/misc.xml +7 -0
- quarchpy/.idea/modules.xml +8 -0
- quarchpy/.idea/quarchpy.iml +12 -0
- quarchpy/.idea/workspace.xml +75 -0
- quarchpy/_version.py +1 -1
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/usb4java-1.3.1.jar +0 -0
- quarchpy/device/quarchPPM.py +1 -1
- quarchpy/fio/FIO_interface.py +255 -1
- quarchpy/qps/qpsFuncs.py +1 -1
- {quarchpy-2.2.6.dist-info → quarchpy-2.2.7.dev1.dist-info}/METADATA +1 -1
- {quarchpy-2.2.6.dist-info → quarchpy-2.2.7.dev1.dist-info}/RECORD +16 -9
- {quarchpy-2.2.6.dist-info → quarchpy-2.2.7.dev1.dist-info}/WHEEL +0 -0
- {quarchpy-2.2.6.dist-info → quarchpy-2.2.7.dev1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
<component name="InspectionProjectProfileManager">
|
2
|
+
<profile version="1.0">
|
3
|
+
<option name="myName" value="Project Default" />
|
4
|
+
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
5
|
+
<option name="ignoredIdentifiers">
|
6
|
+
<list>
|
7
|
+
<option value="user_interface.user_interface.raw_input" />
|
8
|
+
</list>
|
9
|
+
</option>
|
10
|
+
</inspection_tool>
|
11
|
+
</profile>
|
12
|
+
</component>
|
quarchpy/.idea/misc.xml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project version="4">
|
3
|
+
<component name="Black">
|
4
|
+
<option name="sdkName" value="Python 2.7 (quarchpy)" />
|
5
|
+
</component>
|
6
|
+
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13" project-jdk-type="Python SDK" />
|
7
|
+
</project>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<module type="PYTHON_MODULE" version="4">
|
3
|
+
<component name="NewModuleRootManager">
|
4
|
+
<content url="file://$MODULE_DIR$" />
|
5
|
+
<orderEntry type="jdk" jdkName="Python 3.13" jdkType="Python SDK" />
|
6
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
7
|
+
</component>
|
8
|
+
<component name="PyDocumentationSettings">
|
9
|
+
<option name="format" value="PLAIN" />
|
10
|
+
<option name="myDocStringFormat" value="Plain" />
|
11
|
+
</component>
|
12
|
+
</module>
|
@@ -0,0 +1,75 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project version="4">
|
3
|
+
<component name="AutoImportSettings">
|
4
|
+
<option name="autoReloadType" value="SELECTIVE" />
|
5
|
+
</component>
|
6
|
+
<component name="ChangeListManager">
|
7
|
+
<list default="true" id="5dcd7b04-9694-4e54-bb12-84d5f5e7a0cf" name="Changes" comment="" />
|
8
|
+
<option name="SHOW_DIALOG" value="false" />
|
9
|
+
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
10
|
+
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
11
|
+
<option name="LAST_RESOLUTION" value="IGNORE" />
|
12
|
+
</component>
|
13
|
+
<component name="ProjectColorInfo"><![CDATA[{
|
14
|
+
"customColor": "",
|
15
|
+
"associatedIndex": 5
|
16
|
+
}]]></component>
|
17
|
+
<component name="ProjectId" id="2sOq2y2hEq2l9HCfwXokB5wOoky" />
|
18
|
+
<component name="ProjectViewState">
|
19
|
+
<option name="hideEmptyMiddlePackages" value="true" />
|
20
|
+
<option name="showLibraryContents" value="true" />
|
21
|
+
</component>
|
22
|
+
<component name="PropertiesComponent"><![CDATA[{
|
23
|
+
"keyToString": {
|
24
|
+
"Python.keithleyTerminal.executor": "Debug",
|
25
|
+
"RunOnceActivity.ShowReadmeOnStart": "true"
|
26
|
+
}
|
27
|
+
}]]></component>
|
28
|
+
<component name="RunManager">
|
29
|
+
<configuration name="keithleyTerminal" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
30
|
+
<module name="quarchpy" />
|
31
|
+
<option name="ENV_FILES" value="" />
|
32
|
+
<option name="INTERPRETER_OPTIONS" value="" />
|
33
|
+
<option name="PARENT_ENVS" value="true" />
|
34
|
+
<envs>
|
35
|
+
<env name="PYTHONUNBUFFERED" value="1" />
|
36
|
+
</envs>
|
37
|
+
<option name="SDK_HOME" value="" />
|
38
|
+
<option name="WORKING_DIRECTORY" value="$USER_HOME$/Desktop/BoonCave/Quarch/Python Scripts/Terminal Programs" />
|
39
|
+
<option name="IS_MODULE_SDK" value="false" />
|
40
|
+
<option name="ADD_CONTENT_ROOTS" value="true" />
|
41
|
+
<option name="ADD_SOURCE_ROOTS" value="true" />
|
42
|
+
<option name="SCRIPT_NAME" value="$USER_HOME$/Desktop/BoonCave/Quarch/Python Scripts/Terminal Programs/keithleyTerminal.py" />
|
43
|
+
<option name="PARAMETERS" value="" />
|
44
|
+
<option name="SHOW_COMMAND_LINE" value="false" />
|
45
|
+
<option name="EMULATE_TERMINAL" value="false" />
|
46
|
+
<option name="MODULE_MODE" value="false" />
|
47
|
+
<option name="REDIRECT_INPUT" value="false" />
|
48
|
+
<option name="INPUT_FILE" value="" />
|
49
|
+
<method v="2" />
|
50
|
+
</configuration>
|
51
|
+
<recent_temporary>
|
52
|
+
<list>
|
53
|
+
<item itemvalue="Python.keithleyTerminal" />
|
54
|
+
</list>
|
55
|
+
</recent_temporary>
|
56
|
+
</component>
|
57
|
+
<component name="SharedIndexes">
|
58
|
+
<attachedChunks>
|
59
|
+
<set>
|
60
|
+
<option value="bundled-python-sdk-1b1018131e27-aa17d162503b-com.jetbrains.pycharm.community.sharedIndexes.bundled-PC-243.22562.180" />
|
61
|
+
</set>
|
62
|
+
</attachedChunks>
|
63
|
+
</component>
|
64
|
+
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
65
|
+
<component name="TaskManager">
|
66
|
+
<task active="true" id="Default" summary="Default task">
|
67
|
+
<changelist id="5dcd7b04-9694-4e54-bb12-84d5f5e7a0cf" name="Changes" comment="" />
|
68
|
+
<created>1738336765628</created>
|
69
|
+
<option name="number" value="Default" />
|
70
|
+
<option name="presentableId" value="Default" />
|
71
|
+
<updated>1738336765628</updated>
|
72
|
+
</task>
|
73
|
+
<servers />
|
74
|
+
</component>
|
75
|
+
</project>
|
quarchpy/_version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "2.2.
|
1
|
+
__version__ = "2.2.7.dev1"
|
Binary file
|
quarchpy/device/quarchPPM.py
CHANGED
@@ -15,7 +15,7 @@ class quarchPPM(quarchDevice):
|
|
15
15
|
numb_colons = self.ConString.count(":")
|
16
16
|
if numb_colons == 1:
|
17
17
|
self.ConString = self.ConString.replace(':', '::')
|
18
|
-
if not skipDefaultSyntheticChannels and self.ConType[:3].upper() == "QIS":
|
18
|
+
if not skipDefaultSyntheticChannels and self.ConType[:3].upper() == "QIS" and "FAIL:" not in self.fixture_definition:
|
19
19
|
self.create_default_synthetic_channels()
|
20
20
|
|
21
21
|
def startStream(self, fileName='streamData.txt', fileMaxMB=200000, streamName ='Stream With No Name', streamDuration = None, streamAverage = None, releaseOnData = False, separator=",", inMemoryData = None):
|
quarchpy/fio/FIO_interface.py
CHANGED
@@ -3,6 +3,12 @@ import time
|
|
3
3
|
import json
|
4
4
|
from datetime import datetime
|
5
5
|
import subprocess
|
6
|
+
import json
|
7
|
+
import csv
|
8
|
+
import logging
|
9
|
+
import time
|
10
|
+
import os
|
11
|
+
from bisect import bisect_left
|
6
12
|
|
7
13
|
all_outputs={"terse_version_3":"0",
|
8
14
|
"fio_version":"1",
|
@@ -313,4 +319,252 @@ def runFIO(myStream, mode, fioCallbacks, user_data, arguments="", file_name=""):
|
|
313
319
|
os.remove("pipe")
|
314
320
|
|
315
321
|
if isinstance(arguments, dict):
|
316
|
-
break
|
322
|
+
break
|
323
|
+
|
324
|
+
|
325
|
+
|
326
|
+
### FIO postprocessing for QIS ###
|
327
|
+
|
328
|
+
|
329
|
+
def merge_fio_qis_stream(qis_stream_file, fio_output_file, unix_stream_start_time, output_file=None, rounding_option="round"):
|
330
|
+
"""
|
331
|
+
Merge FIO and QIS data into a single CSV file.
|
332
|
+
|
333
|
+
For each FIO entry:
|
334
|
+
- If timestamps match, append FIO data to the corresponding QIS row.
|
335
|
+
- If no match, handle based on `rounding_option`:
|
336
|
+
- "round": Find the nearest QIS time and add FIO data to that row.
|
337
|
+
- "insert": Add a new row with blank QIS data and only FIO data.
|
338
|
+
|
339
|
+
Parameters:
|
340
|
+
qis_stream_file (str): Path to the QIS CSV file (converted to Unix time).
|
341
|
+
fio_output_file (str): Path to the FIO output file (in JSON format).
|
342
|
+
unix_stream_start_time (str): Starting Unix timestamp for the QIS stream.
|
343
|
+
output_file (str, optional): Output file path for the merged CSV. If not provided, the file is saved
|
344
|
+
with "_merged" appended to the QIS file name.
|
345
|
+
rounding_option (str): Determines how to handle mismatched times ("round" or "insert").
|
346
|
+
|
347
|
+
Returns:
|
348
|
+
str: Path to the merged CSV file.
|
349
|
+
"""
|
350
|
+
# Convert QIS timestamps to Unix time
|
351
|
+
qis_converted_file = convert_qis_stream_to_unix_time(qis_stream_file, unix_stream_start_time)
|
352
|
+
|
353
|
+
# Parse QIS data
|
354
|
+
qis_data = []
|
355
|
+
with open(qis_converted_file, 'r') as qis_file:
|
356
|
+
reader = csv.reader(qis_file)
|
357
|
+
qis_headers = next(reader) #read header row
|
358
|
+
if qis_headers[-1]=="": qis_headers=qis_headers[:-1]
|
359
|
+
for row in reader:
|
360
|
+
qis_data.append(row)
|
361
|
+
|
362
|
+
# Parse FIO data
|
363
|
+
fio_data = fio_json_to_csv (fio_output_file)
|
364
|
+
|
365
|
+
# Extend QIS headers with FIO headers
|
366
|
+
fio_headers = ["block_size", "job_name", "read_iops", "write_iops"]
|
367
|
+
merged_headers = qis_headers + fio_headers
|
368
|
+
|
369
|
+
# Extract QIS times into a separate list for binary search
|
370
|
+
qis_times = [int(row[0]) for row in qis_data] # Assuming the first column is the timestamp
|
371
|
+
|
372
|
+
# Prepare merged data
|
373
|
+
merged_data = qis_data.copy()
|
374
|
+
for row in merged_data:
|
375
|
+
row.extend([""] * len(fio_headers))
|
376
|
+
|
377
|
+
# Merge FIO and QIS data
|
378
|
+
for fio_entry in fio_data:
|
379
|
+
fio_time = fio_entry["timestamp_us"]
|
380
|
+
|
381
|
+
# Binary search to find the closest QIS time
|
382
|
+
idx = bisect_left(qis_times, fio_time)
|
383
|
+
exact_match = None
|
384
|
+
if idx < len(qis_times) and qis_times[idx] == fio_time:
|
385
|
+
# Exact match found
|
386
|
+
exact_match = idx
|
387
|
+
elif idx > 0 and (idx == len(qis_times) or abs(qis_times[idx - 1] - fio_time) < abs(qis_times[idx] - fio_time)):
|
388
|
+
exact_match = idx - 1
|
389
|
+
|
390
|
+
if exact_match is not None and qis_times[exact_match] == fio_time:
|
391
|
+
# Append FIO data to the matching QIS row
|
392
|
+
qis_data[exact_match].extend([fio_entry.get(header, "") for header in fio_headers])
|
393
|
+
else:
|
394
|
+
# Log the two QIS times between which the FIO timestamp falls
|
395
|
+
lower_bound = qis_times[idx - 1] if idx > 0 else None
|
396
|
+
upper_bound = qis_times[idx] if idx < len(qis_times) else None
|
397
|
+
logging.debug(f"FIO timestamp {fio_time} falls between QIS times {lower_bound} and {upper_bound} at array position {idx - 1} and {idx}")
|
398
|
+
|
399
|
+
if rounding_option == "round":
|
400
|
+
# Find the nearest QIS time to the FIO time
|
401
|
+
nearest_idx = idx - 1 if idx > 0 and (idx == len(qis_times) or abs(qis_times[idx - 1] - fio_time) < abs(
|
402
|
+
qis_times[idx] - fio_time)) else idx
|
403
|
+
merged_data[nearest_idx] = merged_data[nearest_idx][:-4]
|
404
|
+
merged_data[nearest_idx].extend([fio_entry.get(header, "") for header in fio_headers])
|
405
|
+
elif rounding_option == "insert":
|
406
|
+
# Add a new row with blank QIS data and only FIO data at the end
|
407
|
+
blank_qis_data = [""] * len(qis_headers)
|
408
|
+
blank_qis_data[0]=fio_time
|
409
|
+
new_row = blank_qis_data + [fio_entry.get(header, "") for header in fio_headers]
|
410
|
+
merged_data.insert(idx, new_row)
|
411
|
+
|
412
|
+
# Write the merged data to a new file
|
413
|
+
if output_file is None:
|
414
|
+
output_file = qis_stream_file.replace(".csv", f"_merged_{rounding_option}.csv")
|
415
|
+
with open(output_file, 'w', newline='') as output_file_out:
|
416
|
+
writer = csv.writer(output_file_out)
|
417
|
+
writer.writerow(merged_headers)
|
418
|
+
writer.writerows(merged_data)
|
419
|
+
|
420
|
+
logging.debug(f"Merged data written to {output_file}")
|
421
|
+
os.remove(qis_converted_file) # remove the intermidiary file
|
422
|
+
return output_file
|
423
|
+
|
424
|
+
def convert_qis_stream_to_unix_time(qis_stream_file, unix_stream_start_time):
|
425
|
+
"""
|
426
|
+
Converts a QIS stream CSV file to Unix time by adding the unixStreamStartTime to the first column
|
427
|
+
in each row, taking into account the time units provided in both the CSV header and the start time.
|
428
|
+
|
429
|
+
Parameters:
|
430
|
+
qis_stream_file (str): The path to the QIS stream CSV file.
|
431
|
+
unix_stream_start_time (str): The starting Unix time with units (e.g., "1737374310S", "1737374310000mS").
|
432
|
+
|
433
|
+
Returns:
|
434
|
+
str: Path to the converted CSV file.
|
435
|
+
"""
|
436
|
+
# Extract the numeric value and unit from unixStreamStartTime
|
437
|
+
import re
|
438
|
+
match = re.match(r"(\d+)([a-zA-Z]+)", unix_stream_start_time)
|
439
|
+
if not match:
|
440
|
+
logging.warning("Invalid unix_stream_start_time format. Use format like '1737374310S' or '1737374310000mS'.")
|
441
|
+
return
|
442
|
+
|
443
|
+
unix_start_value = int(match.group(1))
|
444
|
+
unix_start_unit = match.group(2).lower() # Normalize to lowercase
|
445
|
+
|
446
|
+
# Unit multipliers
|
447
|
+
unit_multipliers = {'s': 1, 'ms': 1e-3, 'us': 1e-6, 'ns': 1e-9}
|
448
|
+
if unix_start_unit not in unit_multipliers:
|
449
|
+
raise ValueError(f"Unsupported time unit: {unix_start_unit}")
|
450
|
+
|
451
|
+
unix_start_in_seconds = unix_start_value * unit_multipliers[unix_start_unit]
|
452
|
+
|
453
|
+
# Determine the output file name
|
454
|
+
output_file = qis_stream_file.replace('.csv', '_converted.csv')
|
455
|
+
|
456
|
+
try:
|
457
|
+
with open(qis_stream_file, 'r') as infile, open(output_file, 'w', newline='') as outfile:
|
458
|
+
reader = csv.reader(infile)
|
459
|
+
writer = csv.writer(outfile)
|
460
|
+
|
461
|
+
# Read the header to determine the time column unit
|
462
|
+
header = next(reader)
|
463
|
+
writer.writerow(header) # Write the header to the output file
|
464
|
+
|
465
|
+
# Identify the time unit in the header (e.g., "Time uS")
|
466
|
+
time_unit = None
|
467
|
+
for col in header:
|
468
|
+
if "time" in col.lower():
|
469
|
+
time_unit_match = re.search(r"time\s+([a-zA-Z]+)", col, re.IGNORECASE)
|
470
|
+
if time_unit_match:
|
471
|
+
time_unit = time_unit_match.group(1).lower()
|
472
|
+
break
|
473
|
+
|
474
|
+
if not time_unit or time_unit not in unit_multipliers:
|
475
|
+
logging.warning(f"Unsupported or missing time unit in the header: {time_unit}")
|
476
|
+
return
|
477
|
+
|
478
|
+
# Convert time units in the CSV to seconds
|
479
|
+
time_unit_multiplier = unit_multipliers[time_unit]
|
480
|
+
|
481
|
+
# Process each row and update the first column
|
482
|
+
for row in reader:
|
483
|
+
if row and row[0].isdigit(): # Ensure the first cell is numeric
|
484
|
+
elapsed_time_in_seconds = int(row[0]) * time_unit_multiplier
|
485
|
+
new_time_in_seconds = elapsed_time_in_seconds + unix_start_in_seconds
|
486
|
+
# Convert back to the original unit for consistency
|
487
|
+
row[0] = str(int(new_time_in_seconds / time_unit_multiplier))
|
488
|
+
writer.writerow(row)
|
489
|
+
|
490
|
+
logging.debug(f"File successfully converted and saved as: {output_file}")
|
491
|
+
return output_file
|
492
|
+
|
493
|
+
except FileNotFoundError:
|
494
|
+
logging.error(f"Error: File '{qis_stream_file}' not found.")
|
495
|
+
except Exception as e:
|
496
|
+
logging.error(f"An error occurred: {e}")
|
497
|
+
#1737376756
|
498
|
+
#convertQISStreamToUnixTime("Stream1.csv", "1737376756S")
|
499
|
+
|
500
|
+
|
501
|
+
|
502
|
+
def fio_json_to_csv(output_file):
|
503
|
+
retVal=[]
|
504
|
+
isThreaded = True
|
505
|
+
#checking to see if the first line of file needs to be skipped = Windows only
|
506
|
+
if os.name == "nt":
|
507
|
+
isThreaded = False
|
508
|
+
logfile = open(output_file,"r")
|
509
|
+
#variables for parsing json
|
510
|
+
iterator = 0
|
511
|
+
jobCount = 0
|
512
|
+
jsonLines = ""
|
513
|
+
openBracketCount = 0
|
514
|
+
closeBracketCount = 0
|
515
|
+
# Init the job end time to the current start time
|
516
|
+
jobEndTime = int(round(time.time() * 1000))
|
517
|
+
for line in logfile:
|
518
|
+
if (isThreaded == False):
|
519
|
+
# skip the very first line -- (title line) --
|
520
|
+
if iterator == 0:
|
521
|
+
iterator = iterator + 1
|
522
|
+
# marking threaded as true for remainder of read > Efficiency
|
523
|
+
isThreaded = True
|
524
|
+
continue
|
525
|
+
# add to iterator - not needed, may be useful later
|
526
|
+
iterator = iterator + 1
|
527
|
+
# concat strings
|
528
|
+
jsonLines += line
|
529
|
+
# finding brackets withing json
|
530
|
+
if '{' in line:
|
531
|
+
openBracketCount = openBracketCount + 1
|
532
|
+
if '}' in line:
|
533
|
+
closeBracketCount = closeBracketCount + 1
|
534
|
+
# an equal amount of brackets denotes the end of a json object
|
535
|
+
if openBracketCount == closeBracketCount and openBracketCount != 0:
|
536
|
+
try:
|
537
|
+
# format into a json parsable string
|
538
|
+
TempJsonObject = jsonLines[0: jsonLines.rindex('}') + 1]
|
539
|
+
# parse json
|
540
|
+
jsonobject = json.loads(TempJsonObject)
|
541
|
+
# checking for first job
|
542
|
+
if (jobCount == 0):
|
543
|
+
# getting start time of job
|
544
|
+
startTime = (jsonobject['timestamp_ms'] - jsonobject['jobs'][0]['read']['runtime'])
|
545
|
+
#comment = str(arguments).replace(",", "\n").replace("}", "").replace("{", "")
|
546
|
+
jobName = str(jsonobject['jobs'][0]['jobname'])
|
547
|
+
# adding start annotation
|
548
|
+
#fioCallbacks["TEST_START"](myStream, str(startTime), jobName, comment)
|
549
|
+
logging.debug(f"first job name: {jobName} start time {startTime} ")
|
550
|
+
# pass specific data
|
551
|
+
readDataValue = jsonobject['jobs'][0]['read']['iops']
|
552
|
+
writeDataValue = jsonobject['jobs'][0]['write']['iops']
|
553
|
+
blockSize = jsonobject['global options']['bs']
|
554
|
+
# converted to ditionary - easy script use
|
555
|
+
dataValues = {"read_iops": readDataValue, "write_iops": writeDataValue, "block_size": blockSize}
|
556
|
+
jobEndTime = str(jsonobject['timestamp_ms'])
|
557
|
+
dataValues['timestamp_us']=int(jobEndTime)*1000
|
558
|
+
dataValues['job_name'] = jobName
|
559
|
+
logging.debug(str(dataValues))
|
560
|
+
|
561
|
+
retVal.append(dataValues)
|
562
|
+
# jsonLines variable is now all characters after last job + any new that come in
|
563
|
+
jsonLines = jsonLines[jsonLines.rindex('}') + 1:]
|
564
|
+
# add 1 to the job count
|
565
|
+
jobCount += 1
|
566
|
+
except Exception as e:
|
567
|
+
# exception caused by not being able to find substring -- Last json object --
|
568
|
+
logging.warning("Exception Caught\n"+ str(e))
|
569
|
+
pass
|
570
|
+
return retVal
|
quarchpy/qps/qpsFuncs.py
CHANGED
@@ -77,7 +77,7 @@ def startLocalQps(keepQisRunning=False, args=[], timeout=30, startQPSMinimised=T
|
|
77
77
|
temp =" "
|
78
78
|
args = temp.join(args)
|
79
79
|
if startQPSMinimised == True: #TODO add to release for QPS 1.38
|
80
|
-
if "-ccs
|
80
|
+
if "-ccs" not in args.lower():
|
81
81
|
args +=" -ccs=MIN"
|
82
82
|
|
83
83
|
# Record current working directory
|
@@ -2,10 +2,17 @@ quarchpy/LICENSE.rst,sha256=SmYK6o5Xs2xRaUwYT-HqNDRu9eygu6y9QwweXNttiRc,3690
|
|
2
2
|
quarchpy/QuarchPy Function Listing.xlsx,sha256=NE68cZPn7b9P3wcnCsnQr3H6yBkt6D5S6dH6457X520,31245
|
3
3
|
quarchpy/README.txt,sha256=-LbrJ5rCPGSxoBmvr9CxJVokQUDwZSjoHa43eN8bWck,980
|
4
4
|
quarchpy/__init__.py,sha256=3S7z8QFWgGo1YD9gGIMJx_4QwfJIjtcD310ChOIwklQ,3019
|
5
|
-
quarchpy/_version.py,sha256=
|
5
|
+
quarchpy/_version.py,sha256=M2nQGMNhFk1gPwIk9Xqwnuwt4HhV7Udk51NF2idw7oI,26
|
6
6
|
quarchpy/_version.py.bak,sha256=LNx1G4tDk0nZjrTLRLPujRY2NKVFwG7OTwukVjYIh0U,26
|
7
7
|
quarchpy/connection.py,sha256=9lPIUP4LCWkFAedc8CWorDY-3ujdAA-cyeNkSBdIv9E,2226
|
8
8
|
quarchpy/run.py,sha256=N9Z1qwagWzbLKhqoXB7w_9hpcVNmHa4OxuZG0CaBjmQ,10084
|
9
|
+
quarchpy/.idea/.gitignore,sha256=4uN-1gxQ2OQcQqqfNQVkKl8WieZ_trx_6KBtqwmg-pY,50
|
10
|
+
quarchpy/.idea/misc.xml,sha256=XrwvQPnbzYaSrn_bNlZEM-83f1dMApMrSBwPDmhMBXo,294
|
11
|
+
quarchpy/.idea/modules.xml,sha256=TTXzr8QnINr-lZDmXF3gQlG0oenMb17VnIIQzD30w_M,275
|
12
|
+
quarchpy/.idea/quarchpy.iml,sha256=06E7vq5PDtXJiNniCqMae19xq7MIdjaftfbidLLJTSU,486
|
13
|
+
quarchpy/.idea/workspace.xml,sha256=Tjsc1V9TkNpLm35S3VDrw3mhv3i-eiHJ5WDHA3RcY4I,3370
|
14
|
+
quarchpy/.idea/inspectionProfiles/Project_Default.xml,sha256=BSA0eRoacPIWYbbH-R7Qzlmvka_4beGL4WZRbW3WTG8,455
|
15
|
+
quarchpy/.idea/inspectionProfiles/profiles_settings.xml,sha256=YXLFmX7rPNGcnKK1uX1uKYPN0fpgskYNe7t0BV7cqkY,174
|
9
16
|
quarchpy/config_files/__init__.py,sha256=bP9FM5hjP0r7s8qmWqcsVjAfHM0B4XY7cz5sTpe2HDA,290
|
10
17
|
quarchpy/config_files/quarch_config_parser.py,sha256=mjP-uO58hVlHm25ZAFjX9Zwhn8z0np4vveLNHtx8Bt4,28891
|
11
18
|
quarchpy/config_files/Cable_Modules/QTL1253-01 - Mini SAS Module Config v3.5 c1.3.qfg,sha256=hJnFfjsqiNZXYWHx2kn43Gnr2xqmJth4GGVd8VKU5_k,4923
|
@@ -476,7 +483,7 @@ quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/kotlin-stdlib-1.9.21.jar,
|
|
476
483
|
quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/netty-all-4.1.43.Final.jar,sha256=teU2opErKkjWrDqO_vizT3vS33wMBrFzEaViaQW6hus,4087848
|
477
484
|
quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/slf4j-api-2.0.9.jar,sha256=CBiTDcjX3rtAMgRhFpHaWOSdQsULb_z9zgLa23w8K2w,64579
|
478
485
|
quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/slf4j-simple-2.0.9.jar,sha256=cfnG3m267C0QyqMD-vCMXnSb5TskKJbGTJa3xrttYtw,16073
|
479
|
-
quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/usb4java-1.3.1.jar,sha256=
|
486
|
+
quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/usb4java-1.3.1.jar,sha256=COhOoAhWogkBg8Fgn90HZ5z8eCkiHRsQbCWnnO_mXlU,1070575
|
480
487
|
quarchpy/connection_specific/QPS/win-amd64/qis/resources/QuarchIcon_128x128.png,sha256=KvyOdn9Zq2qnyiG5i0T1Y9eywCEVcZLmApcRZGpITGw,6568
|
481
488
|
quarchpy/connection_specific/QPS/win-amd64/qis/resources/QuarchIcon_16x16.png,sha256=wQkMTYg9Wo4J0TDaFgN8D6Dqk66IWGWigLiztvwsuS0,846
|
482
489
|
quarchpy/connection_specific/QPS/win-amd64/qis/resources/QuarchIcon_256x256.png,sha256=-pNkCdwBX7lJc_s6cZ2dL9_Wm7fxcx3eKsGTmtkG73Y,7302
|
@@ -1432,7 +1439,7 @@ quarchpy/debug/__pycache__/versionCompare.cpython-313.pyc,sha256=0t7SWa2-Dt_uBOT
|
|
1432
1439
|
quarchpy/device/__init__.py,sha256=quGTPdm5o0RsLBCwPLWA_LWMQjCgdkbh1MCcX89-rGU,559
|
1433
1440
|
quarchpy/device/device.py,sha256=HEMhdfoDqyg3SUYKK2uuZeFB6VKjerld4J7f1SGk3CU,25461
|
1434
1441
|
quarchpy/device/quarchArray.py,sha256=_8z6P1wCtIs2kkkAzNRc1YrT-NmGRvzd3btqa-Yl3Hc,2816
|
1435
|
-
quarchpy/device/quarchPPM.py,sha256=
|
1442
|
+
quarchpy/device/quarchPPM.py,sha256=YdHXJ0c8ZtqV3ltXvlNbn136VowNpyVaS5an0_1u0hw,9277
|
1436
1443
|
quarchpy/device/quarchQPS.py,sha256=pfv2aJz1cfE6wyC5HutMOuEcQj_rLfd-pIAQO_gM34E,18490
|
1437
1444
|
quarchpy/device/quarchQPS.py.bak,sha256=VOtuZHHzRPGQN7Bx2MHNwadxbEbeHAHBlssBGDDrRZo,18782
|
1438
1445
|
quarchpy/device/scanDevices.py,sha256=JZRTUm_1-TaPiY35lK2NUw-4YTKQ6ZZw-vPPwNmwfMk,29907
|
@@ -1570,7 +1577,7 @@ quarchpy/docs/source/quarchpy.rst,sha256=JjPJPFbMeuDI78l0Wbr10jtmOotav_6mVU14Qk2
|
|
1570
1577
|
quarchpy/docs/source/quarchpy.user_interface.rst,sha256=M-1w2ZpFw4ETUVSv7qiVA6POWctdg-bXbrDh-Cfattg,447
|
1571
1578
|
quarchpy/docs/source/quarchpy.utilities.rst,sha256=RDAzV7z424k8vtTRmJSmncaMh_2y0ieXZM4dikk80NE,399
|
1572
1579
|
quarchpy/docs/source/readme.rst,sha256=zLMDuWm1w4zLuemejpdMkAv7ME7opzIYOdNKjegYdgM,26
|
1573
|
-
quarchpy/fio/FIO_interface.py,sha256=
|
1580
|
+
quarchpy/fio/FIO_interface.py,sha256=PCLuoVoOl98Beqh8g9vQLI9iYeXGZxa2D1CaGUpWrk8,22399
|
1574
1581
|
quarchpy/fio/FIO_interface.py.bak,sha256=mY3HzGfnA_m82Tru8U2_NadS3ymcgjWaxLb6MRl04pg,10899
|
1575
1582
|
quarchpy/fio/__init__.py,sha256=keB7UPgsLZ8PNdnM5UKdAVPW3PBMTz6vT0AfQaigGZ0,61
|
1576
1583
|
quarchpy/fio/fioDiskFinder.py,sha256=BfQMvIVDJzhuvmu8hmjO0xOecZ1KkCAiL98FQTcQXqQ,2965
|
@@ -1602,7 +1609,7 @@ quarchpy/qis/__pycache__/__init__.cpython-313.pyc,sha256=JSm9fD2m7iIaXgD9L_tHpzU
|
|
1602
1609
|
quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc,sha256=cx3Lkcd69akWea7kCVc7mtGslvk_Vdlz63heaD2YG4Q,16456
|
1603
1610
|
quarchpy/qis/__pycache__/qisFuncs.cpython-313.pyc,sha256=W5lQ3o_2HbIpuPPhtIQhB0iniliRdOjXz6vGr2JarGE,14675
|
1604
1611
|
quarchpy/qps/__init__.py,sha256=Kq5Ae1hy6c0nw26OwY1X31e72-wZ4C8RraTku6pvEfw,270
|
1605
|
-
quarchpy/qps/qpsFuncs.py,sha256=
|
1612
|
+
quarchpy/qps/qpsFuncs.py,sha256=XKABtZJ9frOfeNHFmA76WOhIjuvoZ_nFMjwOamYDX-Q,13382
|
1606
1613
|
quarchpy/qps/__pycache__/__init__.cpython-311.pyc,sha256=tPzR1aFh1sqvYb7pQt-CYvC8Gxc9-UAlRgJCPAZzC0E,498
|
1607
1614
|
quarchpy/qps/__pycache__/__init__.cpython-313.pyc,sha256=ooo2SYsrnG1yUnW6Exonz5JngklBk-uBIRzpZPxW2Sk,439
|
1608
1615
|
quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc,sha256=pAOLXqJFv-yN-sKcQeWq36gXlO0fkMWdOcIMQGEEufU,16416
|
@@ -1626,7 +1633,7 @@ quarchpy/utilities/__pycache__/Version.cpython-311.pyc,sha256=BGX4D9dOYQcp-Qb0ap
|
|
1626
1633
|
quarchpy/utilities/__pycache__/Version.cpython-313.pyc,sha256=mWeB9FHXwrgBVDCm-FdYXH-fNG0Du6vuAuHkwuF1Q5A,2362
|
1627
1634
|
quarchpy/utilities/__pycache__/__init__.cpython-311.pyc,sha256=DCBrDu0JR0U55lrn61Nho4Jqz7aMmJFrIsgloDlXWss,182
|
1628
1635
|
quarchpy/utilities/__pycache__/__init__.cpython-313.pyc,sha256=pRDgI4M74_DNAFg_cNrQA6uNwnIP-HHXmHlhNV39rjk,161
|
1629
|
-
quarchpy-2.2.
|
1630
|
-
quarchpy-2.2.
|
1631
|
-
quarchpy-2.2.
|
1632
|
-
quarchpy-2.2.
|
1636
|
+
quarchpy-2.2.7.dev1.dist-info/METADATA,sha256=LFIvbGnY_5HdwOqoAETTvwmUSbOd5K1rbJ71Jj9dgms,10688
|
1637
|
+
quarchpy-2.2.7.dev1.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
|
1638
|
+
quarchpy-2.2.7.dev1.dist-info/top_level.txt,sha256=Vc7qsvkVax7oeBaBy_e7kvJvqb_VAAJcW_MuDMmi5W8,9
|
1639
|
+
quarchpy-2.2.7.dev1.dist-info/RECORD,,
|
File without changes
|
File without changes
|