|
2 | 2 | import os |
3 | 3 | from ast import literal_eval |
4 | 4 | import sys |
| 5 | +import numpy as np # Added for numpy type conversion |
5 | 6 |
|
6 | 7 | #if windows, create script to kill this process |
7 | 8 | # because batch files don't provide easy way to know pid of last command |
|
11 | 12 | with open("concorekill.bat","w") as fpid: |
12 | 13 | fpid.write("taskkill /F /PID "+str(os.getpid())+"\n") |
13 | 14 |
|
| 15 | +# NumPy Type Conversion Helper |
| 16 | +def convert_numpy_to_python(obj): |
| 17 | + #Recursively convert numpy types to native Python types. |
| 18 | + #This is necessary because literal_eval cannot parse numpy representations |
| 19 | + #like np.float64(1.0), but can parse native Python types like 1.0. |
| 20 | + if isinstance(obj, np.generic): |
| 21 | + # Convert numpy scalar types to Python native types |
| 22 | + return obj.item() |
| 23 | + elif isinstance(obj, list): |
| 24 | + return [convert_numpy_to_python(item) for item in obj] |
| 25 | + elif isinstance(obj, tuple): |
| 26 | + return tuple(convert_numpy_to_python(item) for item in obj) |
| 27 | + elif isinstance(obj, dict): |
| 28 | + return {key: convert_numpy_to_python(value) for key, value in obj.items()} |
| 29 | + else: |
| 30 | + return obj |
| 31 | + |
| 32 | + |
14 | 33 | try: |
15 | 34 | iport = literal_eval(open("concore.iport").read()) |
16 | 35 | except: |
@@ -74,8 +93,10 @@ def write(port, name, val, delta=0): |
74 | 93 | try: |
75 | 94 | with open(outpath+str(port)+"/"+name,"w") as outfile: |
76 | 95 | if isinstance(val,list): |
77 | | - outfile.write(str([simtime+delta]+val)) |
78 | | - simtime += delta |
| 96 | + val_converted = convert_numpy_to_python(val) |
| 97 | + data_to_write = [simtime + delta] + val_converted |
| 98 | + outfile.write(str(data_to_write)) |
| 99 | + simtime += delta |
79 | 100 | else: |
80 | 101 | outfile.write(val) |
81 | 102 | except: |
|
0 commit comments