diff --git a/.gitignore b/.gitignore index 9e1cfdce416b02565059ed376eadf70bc7658eaf..67fe2571efbae9edfe49c0799c919f81e73fc547 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ scripts/__pycache__/ #IDE specific files .idea + +output.csv diff --git a/Data/gen_svg.py b/Data/gen_svg.py index 17478275e83bf7da5210e962df2ecb1af4146157..cc1b6271d0284d2af45dfc3c210cf0e3f53eb1ec 100755 --- a/Data/gen_svg.py +++ b/Data/gen_svg.py @@ -380,7 +380,7 @@ feature_data = [["Name", "Origin", "P2P", "iP2P", "PERS", "COLL", "iCOLL", "TOPO "resleak", "livelock", "datarace"]] directory = "../codes/" for filename in os.listdir(directory): - if filename.endswith(".c"): + if filename.endswith(".c") or filename.endswith(".f90"): row = [0]*len(feature_data[0]) row[0] = filename f = open(os.path.join(directory, filename), 'r') diff --git a/Dockerfile.must b/Dockerfile.must index 40858278e637e4231a8fc9b7c345a90fe64b6e8b..eb4fa87c5647a0eafc57ffbc85b22ff6296438a7 100644 --- a/Dockerfile.must +++ b/Dockerfile.must @@ -17,20 +17,34 @@ ENV MPICH_CC=clang ENV MPICH_CXX=clang++ # Building MUST -RUN apt-get -y install wget cmake git clang-14 clang++-14 clang-format mpich libmpich-dev libdw-dev libxml2-dev binutils-dev && \ - update-alternatives --set mpi /usr/bin/mpicc.mpich && \ - update-alternatives --set mpirun /usr/bin/mpirun.mpich && \ - ln -s /usr/bin/clang-14 /usr/bin/clang && \ - ln -s /usr/bin/clang++-14 /usr/bin/clang++ && \ +RUN apt-get -y install gfortran wget cmake git clang-19 clang++-19 clang-format libdw-dev libxml2-dev binutils-dev libzstd-dev libzstd1 && \ + ln -s /usr/bin/clang-19 /usr/bin/clang && \ + ln -s /usr/bin/clang++-19 /usr/bin/clang++ && \ apt-get clean -y +# Building MPICH +RUN mkdir /tmp/build-mpich +WORKDIR /tmp/build-mpich +RUN wget https://www.mpich.org/static/downloads/4.3.1/mpich-4.3.1.tar.gz +RUN tar xvf mpich-4.3.1.tar.gz +RUN cd mpich-4.3.1 && \ + sed -i "s/'P' + //" maint/local_python/binding_f08.py && \ + sed -i 's/PMPI/MPI/' src/binding/fortran/use_mpi_f08/wrappers_c/comm_spawn_c.c && \ + sed -i 's/PMPI/MPI/' src/binding/fortran/use_mpi_f08/wrappers_c/comm_spawn_multiple_c.c + +RUN cd mpich-4.3.1 && \ + ./configure && \ + make -j install && \ + ldconfig + +# Building MUST RUN mkdir /tmp/build-must WORKDIR /tmp/build-must -RUN wget https://hpc.rwth-aachen.de/must/files/MUST-v1.9.2.tar.gz +RUN wget https://hpc.rwth-aachen.de/must/files/MUST-v1.11.0.tar.gz RUN tar xfz MUST-*.tar.gz RUN mkdir -p /tmp/build-must/build WORKDIR /tmp/build-must/build -RUN CC=clang CXX=clang++ cmake ../MUST-v1.9.2 -DCMAKE_INSTALL_PREFIX=/MBB-builds/MUST192 -DCMAKE_BUILD_TYPE=Release -DENABLE_FORTRAN=OFF -DENABLE_TYPEART=On && \ +RUN CC=clang CXX=clang++ cmake ../MUST-v1.11.0 -DCMAKE_INSTALL_PREFIX=/MBB-builds/MUST1_11_0 -DCMAKE_BUILD_TYPE=Release -DENABLE_FORTRAN=ON -DENABLE_TYPEART=ON -DENABLE_TSAN=ON && \ make -j$(nproc) install VERBOSE=1 && \ make -j$(nproc) install-prebuilds VERBOSE=1 && \ rm -rf /tmp/build-must diff --git a/MBB.py b/MBB.py index debbbdf0e1bbe3ff4ead3d2e7eaaa4a255c22f31..e6b2fe16f9386b09d9aa63ce31e4015aafb212f8 100755 --- a/MBB.py +++ b/MBB.py @@ -68,6 +68,8 @@ tools = {'aislinn': tools.aislinn.Tool(), 'civl': tools.civl.Tool(), 'hermes': t 'isp': tools.isp.Tool(), 'mpisv': tools.mpisv.Tool(), 'itac': tools.itac.Tool() if itac_loaded else None, 'must': tools.must.V18(), # 'must17': tools.must.V17(), # This one is deprecated, and no RC release right now + 'must_c': tools.must.V18(), + 'must_fort': tools.must.V18(), 'simgrid': tools.simgrid.Tool(), 'simgrid-3.27': tools.simgrid.v3_27(), 'simgrid-3.28': tools.simgrid.v3_28(), 'simgrid-3.29': tools.simgrid.v3_29(), 'simgrid-3.30': tools.simgrid.v3_30(), 'simgrid-3.31': tools.simgrid.v3_31(), 'simgrid-3.32': tools.simgrid.v3_32(), @@ -87,13 +89,14 @@ todo = [] def extract_all_todo(batch): + file_ext = "f90" if args.language == "fort" else "c" """Extract the TODOs from all existing files, applying the batching request""" if os.path.exists(f"/MBB/scripts/{args.gencodes}/"): # Docker run - filenames = glob.glob(f"/MBB/scripts/{args.gencodes}/**/*.c") + filenames = glob.glob(f"/MBB/scripts/{args.gencodes}/**/*.{file_ext}") elif os.path.exists(f"{args.gencodes}/"): # Gitlab-ci run - filenames = glob.glob(f"{os.getcwd()}/{args.gencodes}/*.c") # our code expects absolute paths + filenames = glob.glob(f"{os.getcwd()}/{args.gencodes}/**/*.{file_ext}") # our code expects absolute paths elif os.path.exists(f"../../{args.gencodes}/"): # Local runs - filenames = glob.glob(f"{os.getcwd()}/../../{args.gencodes}/*.c") # our code expects absolute paths + filenames = glob.glob(f"{os.getcwd()}/../../{args.gencodes}/*.{file_ext}") # our code expects absolute paths else: subprocess.run("ls ../..", shell=True) raise Exception( @@ -124,11 +127,13 @@ def extract_all_todo_from_logdir(tool, logdir): """Extract the TODOs from the given logdir""" if os.path.exists(logdir): filenames = glob.glob(f"{logdir}/{tool}/*.c") + filenames += glob.glob(f"{logdir}/{tool}/*.f90") else: raise Exception( f"Cannot find the input codes ({logdir}). Did you run the original_MBI_generators before running the tests?") global todo + todo = [] filename = sorted(filenames) for filename in filenames: todo = todo + parse_one_code(filename) @@ -144,7 +149,7 @@ def cmd_gencodes(level): #level = 2 print(f"Generate level {level}") subprocess.run(f'tar -xf real_world_data.csv.tar.gz', shell=True, check=True) - subprocess.run(f'cd scripts && python3 generate.py --generator_dir errors --outpath ../gencodes --level {level} --real_world_data ../output.csv --remove_previous_generation_results', shell=True, check=True) + subprocess.run(f'cd scripts && python3 generate.py --generator_dir errors --outpath ../gencodes --level {level} --language {args.language} --real_world_data ../output.csv --remove_previous_generation_results', shell=True, check=True) else: raise Exception("Cannot find the generators. Please report that bug.") os.chdir(here) @@ -182,7 +187,7 @@ def cmd_run(rootdir, toolname, batchinfo): # build list of test executions for run function work_items = [] for number, test in enumerate(todo): - binary = re.sub(r'\.c', '', os.path.basename(test['filename'])) + binary = re.sub(r"\.c|\.f90", '', os.path.basename(test['filename'])) work_items.append( (test['cmd'], test['filename'], binary, test['id'], number, args.timeout, batchinfo, args.loglevel)) @@ -350,7 +355,7 @@ iframe { outHTML.write(f"</tr>\n") outHTML.write(f" <tr>") - binary = re.sub(r'\.c', '', os.path.basename(test['filename'])) + binary = re.sub(r"\.c|\.f90", '', os.path.basename(test['filename'])) ID = test['id'] test_id = f"{binary}_{ID}" expected = test['expect'] @@ -577,7 +582,7 @@ def read_tool_reports(rootdir, toolname): results = [] for test in todo: - binary = re.sub(r'\.c', '', os.path.basename(test['filename'])) + binary = re.sub(r"\.c|\.f90", '', os.path.basename(test['filename'])) ID = test['id'] test_category = test['category'] test_id = f"{binary}_{ID}" @@ -769,7 +774,7 @@ def cmd_latex(rootdir, toolnames): # Get all data from the caches for test in todo: - binary = re.sub(r'\.c', '', os.path.basename(test['filename'])) + binary = re.sub(r"\.c|\.f90", '', os.path.basename(test['filename'])) ID = test['id'] test_category = test['category'] test_id = f"{binary}_{ID}" @@ -1395,7 +1400,7 @@ def cmd_latex(rootdir, toolnames): reclassified[toolname][e] = [] for test in todo: - binary = re.sub('\\.c', '', os.path.basename(test['filename'])) + binary = re.sub("\\.c|\\.f90", '', os.path.basename(test['filename'])) ID = test['id'] test_id = f"{binary}_{ID}" @@ -1478,7 +1483,59 @@ def get_overview_plot(data, outpath,scrutiny="base"): df_rma.loc[toolname] = df.loc["RMA"] df_p2p.loc[toolname] = df.loc["P2P"] df_total.loc[toolname] = df.loc["ALL"] - + category_set = set(["P2P", "COLL", "RMA", "ALL"]) + df_categories = { + "P2P": df_p2p, + "COLL": df_coll, + "RMA": df_rma, + "ALL": df_total, + } + + must_lang_compare = { + "must_fort": classify_tests(data["must_fort"]), + "must_c": classify_tests(data["must_c"]) + } + aggregate = {} + err_classes_set = set() + for toolname, tool_df in must_lang_compare.items(): + err_classes_idx = [] + for idx, val in tool_df.iterrows(): + err_classes_idx.append(val["test_id"].split("-")[0]) + err_classes_set.add(val["test_id"].split("-")[0]) + category_set.add(val["test_id"].split("-")[0]) + tool_df["error_class"] = err_classes_idx + for err_class in err_classes_set: + tool_aggregate = aggregate_metrics_per_category(tool_df[tool_df.error_class == err_class]) + if err_class not in aggregate: aggregate[err_class] = pd.DataFrame(columns=cols) + aggregate[err_class].loc[toolname] = tool_aggregate.loc["ALL"] + for err_class in err_classes_set: + df_categories[err_class] = aggregate[err_class] + + lang_compare = {} + classisfied_fort = must_lang_compare["must_fort"] + classisfied_c = must_lang_compare["must_c"] + i = 0 + for idx, val in classisfied_fort.iterrows(): + test_id = val["test_id"] + lang_compare[test_id] = {} + if val["TP"]: res_f = "TP" + if val["TN"]: res_f = "TN" + if val["FP"]:res_f = "FP" + if val["FN"]: res_f = "FN" + + val = classisfied_c[classisfied_c["test_id"] == test_id] + if val["TP"].item(): res_c = "TP" + if val["TN"].item(): res_c = "TN" + if val["FP"].item(): res_c = "FP" + if val["FN"].item(): res_c = "FN" + lang_compare[test_id]["must_fort"] = res_f + lang_compare[test_id]["must_c"] = res_c + + for test, tool_res in lang_compare.items(): + if tool_res["must_fort"] != tool_res["must_c"]: + print(test) + print("Fort: " + tool_res["must_fort"]) + print("C: " + tool_res["must_c"]) SMALL_SIZE = 20 MEDIUM_SIZE = 22 @@ -1526,43 +1583,20 @@ def get_overview_plot(data, outpath,scrutiny="base"): plt.tight_layout() plt.savefig(os.path.join(outpath, "overview_per_cat.pdf"), bbox_inches="tight") + plt.close() # split plots in different pdfs - fig, ax = plt.subplots(figsize=(8, 4)) - df_p2p[["TP", "TN", "FP", "FN", "RE", "CE"]].plot.barh(stacked=True, ax=ax, legend=False, color=colors) - ax1.set_title('P2P') - handles, labels = ax.get_legend_handles_labels() - fig.legend(handles, labels, loc='upper center', ncols=1, bbox_to_anchor=(1.065, 0.9), ) - plt.tight_layout() - ax.set_yticklabels([label.get_text().upper() for label in ax.get_yticklabels()]) - plt.savefig(os.path.join(outpath, "overview_P2P.pdf"), bbox_inches="tight") - - fig, ax = plt.subplots(figsize=(8, 4)) - df_coll[["TP", "TN", "FP", "FN", "RE", "CE"]].plot.barh(stacked=True, ax=ax, legend=False, color=colors) - ax1.set_title('COLL') - handles, labels = ax.get_legend_handles_labels() - fig.legend(handles, labels, loc='upper center', ncols=1, bbox_to_anchor=(1.065, 0.9), ) - plt.tight_layout() - ax.set_yticklabels([label.get_text().upper() for label in ax.get_yticklabels()]) - plt.savefig(os.path.join(outpath, "overview_COLL.pdf"), bbox_inches="tight") - - fig, ax = plt.subplots(figsize=(8, 4)) - df_rma[["TP", "TN", "FP", "FN", "RE", "CE"]].plot.barh(stacked=True, ax=ax, legend=False, color=colors) - ax1.set_title('RMA') - handles, labels = ax.get_legend_handles_labels() - fig.legend(handles, labels, loc='upper center', ncols=1, bbox_to_anchor=(1.065, 0.9), ) - plt.tight_layout() - ax.set_yticklabels([label.get_text().upper() for label in ax.get_yticklabels()]) - plt.savefig(os.path.join(outpath, "overview_RMA.pdf"), bbox_inches="tight") - - fig, ax = plt.subplots(figsize=(8, 4)) - df_total[["TP", "TN", "FP", "FN", "RE", "CE"]].plot.barh(stacked=True, ax=ax, legend=False, color=colors) - ax1.set_title('ALL') - handles, labels = ax.get_legend_handles_labels() - fig.legend(handles, labels, loc='upper center', ncols=1, bbox_to_anchor=(1.065, 0.9), ) - plt.tight_layout() - ax.set_yticklabels([label.get_text().upper() for label in ax.get_yticklabels()]) - plt.savefig(os.path.join(outpath, "overview_ALL.pdf"), bbox_inches="tight") + for category in category_set: + df_cat = df_categories[category] + fig, ax = plt.subplots(figsize=(8, 4)) + df_cat[["TP", "TN", "FP", "FN", "RE", "CE"]].plot.barh(stacked=True, ax=ax, legend=False, color=colors) + ax.set_title(category) + handles, labels = ax.get_legend_handles_labels() + fig.legend(handles, labels, loc='upper center', ncols=1, bbox_to_anchor=(1.065, 0.9), ) + plt.tight_layout() + ax.set_yticklabels([label.get_text().upper() for label in ax.get_yticklabels()]) + plt.savefig(os.path.join(outpath, f"overview_{category}.pdf"), bbox_inches="tight") + plt.close() @@ -1579,6 +1613,7 @@ def cmd_plots(rootdir, toolnames, ext="pdf"): collected_data = {} for toolname in toolnames: + extract_all_todo_from_logdir(toolname, args.logs_dir) df = read_tool_reports(rootdir, toolname) plot_helpfulness(df, outpath, toolname) collected_data[toolname]=df @@ -1624,6 +1659,9 @@ parser.add_argument('-g', '--gencodes', metavar='path', default="gencodes", type parser.add_argument('-lev', '--level', metavar='int', default=2, type=int, help='Generation level to generate codes (default: 2)') +parser.add_argument('-lang', '--language', metavar='str', default='c', type=str, choices=["c", "fort", "c_fort_compat"], + help='Language for code generation, \'c\', \'fort\', or \'c_fort_compat\' (default: c)') + parser.add_argument('-b', metavar='batch', default='1/1', help="Limits the test executions to the batch #N out of M batches (Syntax: 'N/M'). To get 3 runners, use 1/3 2/3 3/3") @@ -1663,10 +1701,7 @@ if args.c == 'all': cmd_run(rootdir=rootdir, toolname=args.x, batchinfo=args.b) cmd_html(rootdir, toolnames=arg_tools) elif args.c == 'generate': - if args.level: - cmd_gencodes(level=args.level) - else: - cmd_gencodes(level=2) + cmd_gencodes(level=args.level) elif args.c == 'build': for t in arg_tools: cmd_build(rootdir=rootdir, toolname=t) @@ -1701,7 +1736,6 @@ elif args.c == 'plots': if not plots_loaded: print("[MBB] Error: Dependancies ('numpy' or 'matplotlib') are not available!") exit(-1) - extract_all_todo_from_logdir(arg_tools[0], args.logs_dir) if args.x == 'mpirun': # toolnames=['itac', 'simgrid', 'must', 'aislinn', 'civl', 'isp', 'mpisv', 'parcoach', 'hermes', 'mpi-checker'] toolnames = ['itac', 'must', 'parcoach'] diff --git a/Pipfile b/Pipfile index a892ff290aba8bead4455e17741231c3304fd230..848fd8a7f14829255cec739fd36a24df0beb6d2a 100644 --- a/Pipfile +++ b/Pipfile @@ -4,11 +4,11 @@ verify_ssl = true name = "pypi" [packages] -numpy = "==1.24.2" +numpy = "==2.2.0" matplotlib = "*" scan-build = "*" tqdm = "*" pandas = "*" typing-extensions = "*" setuptools = "*" - +fprettify = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 04eb3c32b009d2b008c71b7124e3cf398dad8039..ebeb14f94c1eca5f3ffb1e6ac3f7784baf25b56f 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "487a31884df0ad536f2549322f30b2ab97a6d7e571d00ae08bc73f4fce067428" + "sha256": "6494b66be17eac31565d2dcf51e668a1921e3cccb72808139a3b73b139695a80" }, "pipfile-spec": 6, "requires": {}, @@ -14,341 +14,496 @@ ] }, "default": { + "configargparse": { + "hashes": [ + "sha256:79c2ddae836a1e5914b71d58e4b9adbd9f7779d4e6351a637b7d2d9b6c46d3d9", + "sha256:8b586a31f9d873abd1ca527ffbe58863c99f36d896e2829779803125e83be4b6" + ], + "markers": "python_version >= '3.6'", + "version": "==1.7.1" + }, "contourpy": { "hashes": [ - "sha256:031154ed61f7328ad7f97662e48660a150ef84ee1bc8876b6472af88bf5a9b98", - "sha256:0f9d350b639db6c2c233d92c7f213d94d2e444d8e8fc5ca44c9706cf72193772", - "sha256:130230b7e49825c98edf0b428b7aa1125503d91732735ef897786fe5452b1ec2", - "sha256:152fd8f730c31fd67fe0ffebe1df38ab6a669403da93df218801a893645c6ccc", - "sha256:1c71fdd8f1c0f84ffd58fca37d00ca4ebaa9e502fb49825484da075ac0b0b803", - "sha256:24847601071f740837aefb730e01bd169fbcaa610209779a78db7ebb6e6a7051", - "sha256:2e9ebb4425fc1b658e13bace354c48a933b842d53c458f02c86f371cecbedecc", - "sha256:30676ca45084ee61e9c3da589042c24a57592e375d4b138bd84d8709893a1ba4", - "sha256:31a55dccc8426e71817e3fe09b37d6d48ae40aae4ecbc8c7ad59d6893569c436", - "sha256:366a0cf0fc079af5204801786ad7a1c007714ee3909e364dbac1729f5b0849e5", - "sha256:38e2e577f0f092b8e6774459317c05a69935a1755ecfb621c0a98f0e3c09c9a5", - "sha256:3c184ad2433635f216645fdf0493011a4667e8d46b34082f5a3de702b6ec42e3", - "sha256:3caea6365b13119626ee996711ab63e0c9d7496f65641f4459c60a009a1f3e80", - "sha256:3e927b3868bd1e12acee7cc8f3747d815b4ab3e445a28d2e5373a7f4a6e76ba1", - "sha256:4ee3ee247f795a69e53cd91d927146fb16c4e803c7ac86c84104940c7d2cabf0", - "sha256:54d43960d809c4c12508a60b66cb936e7ed57d51fb5e30b513934a4a23874fae", - "sha256:57119b0116e3f408acbdccf9eb6ef19d7fe7baf0d1e9aaa5381489bc1aa56556", - "sha256:58569c491e7f7e874f11519ef46737cea1d6eda1b514e4eb5ac7dab6aa864d02", - "sha256:5a011cf354107b47c58ea932d13b04d93c6d1d69b8b6dce885e642531f847566", - "sha256:5caeacc68642e5f19d707471890f037a13007feba8427eb7f2a60811a1fc1350", - "sha256:5dd34c1ae752515318224cba7fc62b53130c45ac6a1040c8b7c1a223c46e8967", - "sha256:60835badb5ed5f4e194a6f21c09283dd6e007664a86101431bf870d9e86266c4", - "sha256:62398c80ef57589bdbe1eb8537127321c1abcfdf8c5f14f479dbbe27d0322e66", - "sha256:6381fa66866b0ea35e15d197fc06ac3840a9b2643a6475c8fff267db8b9f1e69", - "sha256:64757f6460fc55d7e16ed4f1de193f362104285c667c112b50a804d482777edd", - "sha256:69f8ff4db108815addd900a74df665e135dbbd6547a8a69333a68e1f6e368ac2", - "sha256:6c180d89a28787e4b73b07e9b0e2dac7741261dbdca95f2b489c4f8f887dd810", - "sha256:71b0bf0c30d432278793d2141362ac853859e87de0a7dee24a1cea35231f0d50", - "sha256:769eef00437edf115e24d87f8926955f00f7704bede656ce605097584f9966dc", - "sha256:7f6979d20ee5693a1057ab53e043adffa1e7418d734c1532e2d9e915b08d8ec2", - "sha256:87f4d8941a9564cda3f7fa6a6cd9b32ec575830780677932abdec7bcb61717b0", - "sha256:89ba9bb365446a22411f0673abf6ee1fea3b2cf47b37533b970904880ceb72f3", - "sha256:8acf74b5d383414401926c1598ed77825cd530ac7b463ebc2e4f46638f56cce6", - "sha256:9056c5310eb1daa33fc234ef39ebfb8c8e2533f088bbf0bc7350f70a29bde1ac", - "sha256:95c3acddf921944f241b6773b767f1cbce71d03307270e2d769fd584d5d1092d", - "sha256:9e20e5a1908e18aaa60d9077a6d8753090e3f85ca25da6e25d30dc0a9e84c2c6", - "sha256:a1e97b86f73715e8670ef45292d7cc033548266f07d54e2183ecb3c87598888f", - "sha256:a877ada905f7d69b2a31796c4b66e31a8068b37aa9b78832d41c82fc3e056ddd", - "sha256:a9d7587d2fdc820cc9177139b56795c39fb8560f540bba9ceea215f1f66e1566", - "sha256:abf298af1e7ad44eeb93501e40eb5a67abbf93b5d90e468d01fc0c4451971afa", - "sha256:ae90d5a8590e5310c32a7630b4b8618cef7563cebf649011da80874d0aa8f414", - "sha256:b6d0f9e1d39dbfb3977f9dd79f156c86eb03e57a7face96f199e02b18e58d32a", - "sha256:b8d587cc39057d0afd4166083d289bdeff221ac6d3ee5046aef2d480dc4b503c", - "sha256:c5210e5d5117e9aec8c47d9156d1d3835570dd909a899171b9535cb4a3f32693", - "sha256:cc331c13902d0f50845099434cd936d49d7a2ca76cb654b39691974cb1e4812d", - "sha256:ce41676b3d0dd16dbcfabcc1dc46090aaf4688fd6e819ef343dbda5a57ef0161", - "sha256:d8165a088d31798b59e91117d1f5fc3df8168d8b48c4acc10fc0df0d0bdbcc5e", - "sha256:e7281244c99fd7c6f27c1c6bfafba878517b0b62925a09b586d88ce750a016d2", - "sha256:e96a08b62bb8de960d3a6afbc5ed8421bf1a2d9c85cc4ea73f4bc81b4910500f", - "sha256:ed33433fc3820263a6368e532f19ddb4c5990855e4886088ad84fd7c4e561c71", - "sha256:efb8f6d08ca7998cf59eaf50c9d60717f29a1a0a09caa46460d33b2924839dbd", - "sha256:efe99298ba37e37787f6a2ea868265465410822f7bea163edcc1bd3903354ea9", - "sha256:f99e9486bf1bb979d95d5cffed40689cb595abb2b841f2991fc894b3452290e8", - "sha256:fc1464c97579da9f3ab16763c32e5c5d5bb5fa1ec7ce509a4ca6108b61b84fab", - "sha256:fd7dc0e6812b799a34f6d12fcb1000539098c249c8da54f3566c6a6461d0dbad" + "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", + "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", + "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", + "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", + "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f", + "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7", + "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", + "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", + "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", + "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5", + "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", + "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", + "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878", + "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0", + "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab", + "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445", + "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43", + "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", + "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", + "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", + "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", + "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", + "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5", + "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", + "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", + "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", + "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", + "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", + "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", + "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", + "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", + "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", + "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773", + "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934", + "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", + "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", + "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", + "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", + "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", + "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", + "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", + "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", + "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", + "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", + "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1", + "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd", + "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989", + "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", + "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", + "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", + "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", + "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", + "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", + "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83", + "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", + "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", + "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c" ], - "markers": "python_version >= '3.8'", - "version": "==1.0.7" + "markers": "python_version >= '3.10'", + "version": "==1.3.2" }, "cycler": { "hashes": [ - "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3", - "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f" + "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", + "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c" ], - "markers": "python_version >= '3.6'", - "version": "==0.11.0" + "markers": "python_version >= '3.8'", + "version": "==0.12.1" }, "fonttools": { "hashes": [ - "sha256:106caf6167c4597556b31a8d9175a3fdc0356fdcd70ab19973c3b0d4c893c461", - "sha256:dba8d7cdb8e2bac1b3da28c5ed5960de09e59a2fe7e63bb73f5a59e57b0430d2" + "sha256:19c65a88e522c9f1be0c05d73541de20feada99d23d06e9b5354023cc3e517b0", + "sha256:1e1fac0be6be3e4309058e156948cb73196e5fd994268b89b5e3f5a26ee2b582", + "sha256:2e64931258866df187bd597b4e9fff488f059a0bc230fbae434f0f112de3ce46", + "sha256:3aa4fa41e9cb43f78881a5896d6e41b6a0ec54e9d68e7eaaff6d7a1769b17017", + "sha256:3c53c6a720ee70cc25746d511ba88c45c95ec510fd258026ed209b0b9e3ba92f", + "sha256:418927e888e1bcc976b4e190a562f110dc27b0b5cac18033286f805dc137fc66", + "sha256:455cb6adc9f3419273925fadc51a6207046e147ce503797b29895ba6bdf85762", + "sha256:464f790ce681d08d1583df0735776aa9cb1999594bf336ddd0bf962c17b629ac", + "sha256:4a3841b59c67fa1f739542b05211609c453cec5d11d21f863dd2652d5a81ec9b", + "sha256:4cad2c74adf9ee31ae43be6b0b376fdb386d4d50c60979790e32c3548efec051", + "sha256:4db9399ee633855c718fe8bea5eecbdc5bf3fdbed2648e50f67f8946b943ed1c", + "sha256:4ebd423034ac4f74196c1ae29f8ed3b862f820345acbf35600af8596ebf62573", + "sha256:5701fe66a1408c1974d2f78c00f964f8aad17cccbc32bc041e1b81421f31f448", + "sha256:5cf04c4f73d36b30ea1cff091a7a9e65f8d5b08345b950f82679034e9f7573f4", + "sha256:64cc1647bbe83dea57f5496ec878ad19ccdba7185b0dd34955d3e6f03dc789e6", + "sha256:68379d1599fc59569956a97eb7b07e0413f76142ac8513fa24c9f2c03970543a", + "sha256:761ac80efcb7333c71760458c23f728d6fe2dff253b649faf52471fd7aebe584", + "sha256:7ade12485abccb0f6b6a6e2a88c50e587ff0e201e48e0153dd9b2e0ed67a2f38", + "sha256:7c9a0acdefcb8d7ccd7c59202056166c400e797047009ecb299b75ab950c2a9c", + "sha256:7ff2859ca2319454df8c26af6693269b21f2e9c0e46df126be916a4f6d85fc75", + "sha256:8631905657de4f9a7ae1e12186c1ed20ba4d6168c2d593b9e0bd2908061d341b", + "sha256:91335202f19c9edc04f2f6a7d9bb269b0a435d7de771e3f33c3ea9f87f19c8d4", + "sha256:927762f9fe39ea0a4d9116353251f409389a6b58fab58717d3c3377acfc23452", + "sha256:9966e14729669bcfbb56f83b747a2397c4d97c6d4798cb2e2adc28f9388fa008", + "sha256:9b8860f8cd48b345bd1df1d7be650f600f69ee971ffe338c5bd5bcb6bdb3b92c", + "sha256:9dc36f4b4044d95e6fb358da4c3e6a5c07c9b6f4c1e8c396e89bee3b65dae902", + "sha256:a788983d522d02a9b457cc98aa60fc631dabae352fb3b30a56200890cd338ca0", + "sha256:a907007a8b341e8e129d3994d34d1cc85bc8bf38b3a0be65eb14e4668f634a21", + "sha256:aed7f93a9a072f0ce6fb46aad9474824ac6dd9c7c38a72f8295dd14f2215950f", + "sha256:b01bb37006e97703300bfde7a73d1c7038574dd1df9d8d92ca99af151becf2ca", + "sha256:b27d69c97c20c9bca807f7ae7fc7df459eb62994859ff6a2a489e420634deac3", + "sha256:b6823a633bbce29cf3033508ebb54a433c473fb9833eff7f936bfdc5204fd98d", + "sha256:bc4b74d7bb84189fe264d56a544ac5c818f8f1e8141856746768691fe185b229", + "sha256:c8c848a2d5961d277b85ac339480cecea90599059f72a42047ced25431e8b72a", + "sha256:cbc8868e0a29c3e22628dfa1432adf7a104d86d1bc661cecc3e9173070b6ab2d", + "sha256:d629dea240f0fc826d8bb14566e95c663214eece21b5932c9228d3e8907f55aa", + "sha256:db88365d0962cd6f5bce54b190a4669aeed9c9941aa7bd60a5af084d8d9173d6", + "sha256:deef910226f788a4e72aa0fc1c1657fb43fa62a4200b883edffdb1392b03fe86", + "sha256:e2ecea7289061c2c71468723409a8dd6e70d1ecfce6bc7686e5a74b9ce9154fe", + "sha256:e6b0ec2171e811a0d9e467225dc06b0fac39a84b4704f263c2d538c3c67b99b2", + "sha256:ef0b33ff35421a04a638e736823c2dee9d200cdd275cfdb43e875ca745150aae", + "sha256:f56085a65769dc0100822c814069327541db9c3c4f21e599c6138f9dbda75e96" ], - "markers": "python_version >= '3.8'", - "version": "==4.39.4" + "markers": "python_version >= '3.9'", + "version": "==4.58.1" }, - "importlib-resources": { + "fprettify": { "hashes": [ - "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6", - "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a" + "sha256:1488a813f7e60a9e86c56fd0b82bd9df1b75bfb4bf2ee8e433c12f63b7e54057", + "sha256:56f0a64c43dc47134ce32af2e5da8cd7a1584897be29d19289ec5d87510d1daf" ], - "markers": "python_version < '3.10'", - "version": "==5.12.0" + "index": "pypi", + "version": "==0.3.7" }, "kiwisolver": { "hashes": [ - "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b", - "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166", - "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c", - "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c", - "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0", - "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4", - "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9", - "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286", - "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767", - "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c", - "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6", - "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b", - "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004", - "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf", - "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494", - "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac", - "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626", - "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766", - "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514", - "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6", - "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f", - "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d", - "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191", - "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d", - "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51", - "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f", - "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8", - "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454", - "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb", - "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da", - "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8", - "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de", - "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a", - "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9", - "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008", - "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3", - "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32", - "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938", - "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1", - "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9", - "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d", - "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824", - "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b", - "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd", - "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2", - "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5", - "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69", - "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3", - "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae", - "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597", - "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e", - "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955", - "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca", - "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a", - "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea", - "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede", - "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4", - "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6", - "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686", - "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408", - "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871", - "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29", - "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750", - "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897", - "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0", - "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2", - "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09", - "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c" + "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", + "sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c", + "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", + "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", + "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", + "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79", + "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", + "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2", + "sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605", + "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", + "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab", + "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", + "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", + "sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8", + "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", + "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", + "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", + "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", + "sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff", + "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", + "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", + "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0", + "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6", + "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", + "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", + "sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0", + "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", + "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", + "sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d", + "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b", + "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", + "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", + "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", + "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc", + "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", + "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", + "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", + "sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c", + "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", + "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", + "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561", + "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", + "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc", + "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db", + "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", + "sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751", + "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", + "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", + "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", + "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", + "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84", + "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", + "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", + "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25", + "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", + "sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271", + "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", + "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", + "sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e", + "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", + "sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b", + "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7", + "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03", + "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b", + "sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d", + "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", + "sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d", + "sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3", + "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67", + "sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f", + "sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c", + "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", + "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", + "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954", + "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", + "sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a", + "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", + "sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed", + "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34", + "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794" ], - "markers": "python_version >= '3.7'", - "version": "==1.4.4" + "markers": "python_version >= '3.10'", + "version": "==1.4.8" }, "matplotlib": { "hashes": [ - "sha256:08308bae9e91aca1ec6fd6dda66237eef9f6294ddb17f0d0b3c863169bf82353", - "sha256:14645aad967684e92fc349493fa10c08a6da514b3d03a5931a1bac26e6792bd1", - "sha256:21e9cff1a58d42e74d01153360de92b326708fb205250150018a52c70f43c290", - "sha256:28506a03bd7f3fe59cd3cd4ceb2a8d8a2b1db41afede01f66c42561b9be7b4b7", - "sha256:2bf092f9210e105f414a043b92af583c98f50050559616930d884387d0772aba", - "sha256:3032884084f541163f295db8a6536e0abb0db464008fadca6c98aaf84ccf4717", - "sha256:3a2cb34336110e0ed8bb4f650e817eed61fa064acbefeb3591f1b33e3a84fd96", - "sha256:3ba2af245e36990facf67fde840a760128ddd71210b2ab6406e640188d69d136", - "sha256:3d7bc90727351fb841e4d8ae620d2d86d8ed92b50473cd2b42ce9186104ecbba", - "sha256:438196cdf5dc8d39b50a45cb6e3f6274edbcf2254f85fa9b895bf85851c3a613", - "sha256:46a561d23b91f30bccfd25429c3c706afe7d73a5cc64ef2dfaf2b2ac47c1a5dc", - "sha256:4cf327e98ecf08fcbb82685acaf1939d3338548620ab8dfa02828706402c34de", - "sha256:4f99e1b234c30c1e9714610eb0c6d2f11809c9c78c984a613ae539ea2ad2eb4b", - "sha256:544764ba51900da4639c0f983b323d288f94f65f4024dc40ecb1542d74dc0500", - "sha256:56d94989191de3fcc4e002f93f7f1be5da476385dde410ddafbb70686acf00ea", - "sha256:57bfb8c8ea253be947ccb2bc2d1bb3862c2bccc662ad1b4626e1f5e004557042", - "sha256:617f14ae9d53292ece33f45cba8503494ee199a75b44de7717964f70637a36aa", - "sha256:6eb88d87cb2c49af00d3bbc33a003f89fd9f78d318848da029383bfc08ecfbfb", - "sha256:75d4725d70b7c03e082bbb8a34639ede17f333d7247f56caceb3801cb6ff703d", - "sha256:770a205966d641627fd5cf9d3cb4b6280a716522cd36b8b284a8eb1581310f61", - "sha256:7b73305f25eab4541bd7ee0b96d87e53ae9c9f1823be5659b806cd85786fe882", - "sha256:7c9a4b2da6fac77bcc41b1ea95fadb314e92508bf5493ceff058e727e7ecf5b0", - "sha256:81a6b377ea444336538638d31fdb39af6be1a043ca5e343fe18d0f17e098770b", - "sha256:83111e6388dec67822e2534e13b243cc644c7494a4bb60584edbff91585a83c6", - "sha256:8704726d33e9aa8a6d5215044b8d00804561971163563e6e6591f9dcf64340cc", - "sha256:89768d84187f31717349c6bfadc0e0d8c321e8eb34522acec8a67b1236a66332", - "sha256:8bf26ade3ff0f27668989d98c8435ce9327d24cffb7f07d24ef609e33d582439", - "sha256:8c587963b85ce41e0a8af53b9b2de8dddbf5ece4c34553f7bd9d066148dc719c", - "sha256:95cbc13c1fc6844ab8812a525bbc237fa1470863ff3dace7352e910519e194b1", - "sha256:97cc368a7268141afb5690760921765ed34867ffb9655dd325ed207af85c7529", - "sha256:a867bf73a7eb808ef2afbca03bcdb785dae09595fbe550e1bab0cd023eba3de0", - "sha256:b867e2f952ed592237a1828f027d332d8ee219ad722345b79a001f49df0936eb", - "sha256:c0bd19c72ae53e6ab979f0ac6a3fafceb02d2ecafa023c5cca47acd934d10be7", - "sha256:ce463ce590f3825b52e9fe5c19a3c6a69fd7675a39d589e8b5fbe772272b3a24", - "sha256:cf0e4f727534b7b1457898c4f4ae838af1ef87c359b76dcd5330fa31893a3ac7", - "sha256:def58098f96a05f90af7e92fd127d21a287068202aa43b2a93476170ebd99e87", - "sha256:e99bc9e65901bb9a7ce5e7bb24af03675cbd7c70b30ac670aa263240635999a4", - "sha256:eb7d248c34a341cd4c31a06fd34d64306624c8cd8d0def7abb08792a5abfd556", - "sha256:f67bfdb83a8232cb7a92b869f9355d677bce24485c460b19d01970b64b2ed476", - "sha256:f883a22a56a84dba3b588696a2b8a1ab0d2c3d41be53264115c71b0a942d8fdb", - "sha256:fbdeeb58c0cf0595efe89c05c224e0a502d1aa6a8696e68a73c3efc6bc354304" + "sha256:0ab1affc11d1f495ab9e6362b8174a25afc19c081ba5b0775ef00533a4236eea", + "sha256:0ef061f74cd488586f552d0c336b2f078d43bc00dc473d2c3e7bfee2272f3fa8", + "sha256:151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93", + "sha256:213fadd6348d106ca7db99e113f1bea1e65e383c3ba76e8556ba4a3054b65ae7", + "sha256:24853dad5b8c84c8c2390fc31ce4858b6df504156893292ce8092d190ef8151d", + "sha256:2a818d8bdcafa7ed2eed74487fdb071c09c1ae24152d403952adad11fa3c65b4", + "sha256:2f82d2c5bb7ae93aaaa4cd42aca65d76ce6376f83304fa3a630b569aca274df0", + "sha256:3ddbba06a6c126e3301c3d272a99dcbe7f6c24c14024e80307ff03791a5f294e", + "sha256:4f23ffe95c5667ef8a2b56eea9b53db7f43910fa4a2d5472ae0f72b64deab4d5", + "sha256:55e46cbfe1f8586adb34f7587c3e4f7dedc59d5226719faf6cb54fc24f2fd52d", + "sha256:68f7878214d369d7d4215e2a9075fef743be38fa401d32e6020bab2dfabaa566", + "sha256:6c7818292a5cc372a2dc4c795e5c356942eb8350b98ef913f7fda51fe175ac5d", + "sha256:748302b33ae9326995b238f606e9ed840bf5886ebafcb233775d946aa8107a15", + "sha256:748ebc3470c253e770b17d8b0557f0aa85cf8c63fd52f1a61af5b27ec0b7ffee", + "sha256:7c5f0283da91e9522bdba4d6583ed9d5521566f63729ffb68334f86d0bb98049", + "sha256:86ab63d66bbc83fdb6733471d3bff40897c1e9921cba112accd748eee4bce5e4", + "sha256:8c21ae75651c0231b3ba014b6d5e08fb969c40cdb5a011e33e99ed0c9ea86ecb", + "sha256:9f2efccc8dcf2b86fc4ee849eea5dcaecedd0773b30f47980dc0cbeabf26ec84", + "sha256:a48f9c08bf7444b5d2391a83e75edb464ccda3c380384b36532a0962593a1751", + "sha256:a49e39755580b08e30e3620efc659330eac5d6534ab7eae50fa5e31f53ee4e30", + "sha256:a80fcccbef63302c0efd78042ea3c2436104c5b1a4d3ae20f864593696364ac7", + "sha256:c0b9849a17bce080a16ebcb80a7b714b5677d0ec32161a2cc0a8e5a6030ae220", + "sha256:c26dd9834e74d164d06433dc7be5d75a1e9890b926b3e57e74fa446e1a62c3e2", + "sha256:cb73d8aa75a237457988f9765e4dfe1c0d2453c5ca4eabc897d4309672c8e014", + "sha256:cf37d8c6ef1a48829443e8ba5227b44236d7fcaf7647caa3178a4ff9f7a5be05", + "sha256:cf4636203e1190871d3a73664dea03d26fb019b66692cbfd642faafdad6208e8", + "sha256:d3bec61cb8221f0ca6313889308326e7bb303d0d302c5cc9e523b2f2e6c73deb", + "sha256:d96985d14dc5f4a736bbea4b9de9afaa735f8a0fc2ca75be2fa9e96b2097369d", + "sha256:dbed9917b44070e55640bd13419de83b4c918e52d97561544814ba463811cbc7", + "sha256:ed70453fd99733293ace1aec568255bc51c6361cb0da94fa5ebf0649fdb2150a", + "sha256:eef6ed6c03717083bc6d69c2d7ee8624205c29a8e6ea5a31cd3492ecdbaee1e1", + "sha256:f6929fc618cb6db9cb75086f73b3219bbb25920cb24cee2ea7a12b04971a4158", + "sha256:fd5641a9bb9d55f4dd2afe897a53b537c834b9012684c8444cc105895c8c16fd", + "sha256:fdfa07c0ec58035242bc8b2c8aae37037c9a886370eef6850703d7583e19964b" ], "index": "pypi", - "version": "==3.7.1" + "markers": "python_version >= '3.10'", + "version": "==3.10.3" }, "numpy": { "hashes": [ - "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22", - "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f", - "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9", - "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96", - "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0", - "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a", - "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281", - "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04", - "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468", - "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253", - "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756", - "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a", - "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb", - "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d", - "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0", - "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910", - "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978", - "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5", - "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f", - "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a", - "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5", - "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2", - "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d", - "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95", - "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5", - "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d", - "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780", - "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa" + "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608", + "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef", + "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90", + "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae", + "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83", + "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0", + "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73", + "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671", + "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69", + "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa", + "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066", + "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da", + "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9", + "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e", + "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3", + "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a", + "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74", + "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3", + "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410", + "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72", + "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d", + "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4", + "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038", + "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e", + "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13", + "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d", + "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95", + "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31", + "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3", + "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03", + "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6", + "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2", + "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b", + "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7", + "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab", + "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219", + "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571", + "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d", + "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1", + "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca", + "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661", + "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e", + "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e", + "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e", + "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a", + "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3", + "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881", + "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221", + "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742", + "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773", + "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e", + "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529", + "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67", + "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c", + "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367" ], "index": "pypi", - "version": "==1.24.2" + "markers": "python_version >= '3.10'", + "version": "==2.2.0" }, "packaging": { "hashes": [ - "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", - "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" + "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", + "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f" ], - "markers": "python_version >= '3.7'", - "version": "==23.1" + "markers": "python_version >= '3.8'", + "version": "==25.0" + }, + "pandas": { + "hashes": [ + "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", + "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", + "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", + "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", + "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", + "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", + "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea", + "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", + "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", + "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", + "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", + "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", + "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", + "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e", + "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", + "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", + "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", + "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30", + "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", + "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", + "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", + "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", + "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", + "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", + "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", + "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761", + "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", + "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", + "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c", + "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c", + "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", + "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", + "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", + "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", + "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", + "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39", + "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", + "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", + "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", + "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", + "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", + "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.2.3" }, "pillow": { "hashes": [ - "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1", - "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba", - "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a", - "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799", - "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51", - "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb", - "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5", - "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270", - "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6", - "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47", - "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf", - "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e", - "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b", - "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66", - "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865", - "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec", - "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c", - "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1", - "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38", - "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906", - "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705", - "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef", - "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc", - "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f", - "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf", - "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392", - "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d", - "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe", - "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32", - "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5", - "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7", - "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44", - "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d", - "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3", - "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625", - "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e", - "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829", - "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089", - "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3", - "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78", - "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96", - "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964", - "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597", - "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99", - "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a", - "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140", - "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7", - "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16", - "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903", - "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1", - "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296", - "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572", - "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115", - "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a", - "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd", - "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4", - "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1", - "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb", - "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa", - "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a", - "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569", - "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c", - "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf", - "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082", - "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062", - "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579" + "sha256:014ca0050c85003620526b0ac1ac53f56fc93af128f7546623cc8e31875ab928", + "sha256:036e53f4170e270ddb8797d4c590e6dd14d28e15c7da375c18978045f7e6c37b", + "sha256:062b7a42d672c45a70fa1f8b43d1d38ff76b63421cbbe7f88146b39e8a558d91", + "sha256:0c3e6d0f59171dfa2e25d7116217543310908dfa2770aa64b8f87605f8cacc97", + "sha256:0c7b29dbd4281923a2bfe562acb734cee96bbb129e96e6972d315ed9f232bef4", + "sha256:0f5c7eda47bf8e3c8a283762cab94e496ba977a420868cb819159980b6709193", + "sha256:127bf6ac4a5b58b3d32fc8289656f77f80567d65660bc46f72c0d77e6600cc95", + "sha256:14e33b28bf17c7a38eede290f77db7c664e4eb01f7869e37fa98a5aa95978941", + "sha256:14f73f7c291279bd65fda51ee87affd7c1e097709f7fdd0188957a16c264601f", + "sha256:191955c55d8a712fab8934a42bfefbf99dd0b5875078240943f913bb66d46d9f", + "sha256:1d535df14716e7f8776b9e7fee118576d65572b4aad3ed639be9e4fa88a1cad3", + "sha256:208653868d5c9ecc2b327f9b9ef34e0e42a4cdd172c2988fd81d62d2bc9bc044", + "sha256:21e1470ac9e5739ff880c211fc3af01e3ae505859392bf65458c224d0bf283eb", + "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", + "sha256:25a5f306095c6780c52e6bbb6109624b95c5b18e40aab1c3041da3e9e0cd3e2d", + "sha256:2728567e249cdd939f6cc3d1f049595c66e4187f3c34078cbc0a7d21c47482d2", + "sha256:2b490402c96f907a166615e9a5afacf2519e28295f157ec3a2bb9bd57de638cb", + "sha256:312c77b7f07ab2139924d2639860e084ec2a13e72af54d4f08ac843a5fc9c79d", + "sha256:31df6e2d3d8fc99f993fd253e97fae451a8db2e7207acf97859732273e108406", + "sha256:35ca289f712ccfc699508c4658a1d14652e8033e9b69839edf83cbdd0ba39e70", + "sha256:3692b68c87096ac6308296d96354eddd25f98740c9d2ab54e1549d6c8aea9d79", + "sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e", + "sha256:39ad2e0f424394e3aebc40168845fee52df1394a4673a6ee512d840d14ab3013", + "sha256:3e645b020f3209a0181a418bffe7b4a93171eef6c4ef6cc20980b30bebf17b7d", + "sha256:3fe735ced9a607fee4f481423a9c36701a39719252a9bb251679635f99d0f7d2", + "sha256:4b835d89c08a6c2ee7781b8dd0a30209a8012b5f09c0a665b65b0eb3560b6f36", + "sha256:4d375eb838755f2528ac8cbc926c3e31cc49ca4ad0cf79cff48b20e30634a4a7", + "sha256:4eb92eca2711ef8be42fd3f67533765d9fd043b8c80db204f16c8ea62ee1a751", + "sha256:5119225c622403afb4b44bad4c1ca6c1f98eed79db8d3bc6e4e160fc6339d66c", + "sha256:562d11134c97a62fe3af29581f083033179f7ff435f78392565a1ad2d1c2c45c", + "sha256:598174aef4589af795f66f9caab87ba4ff860ce08cd5bb447c6fc553ffee603c", + "sha256:63b5dff3a68f371ea06025a1a6966c9a1e1ee452fc8020c2cd0ea41b83e9037b", + "sha256:6ebce70c3f486acf7591a3d73431fa504a4e18a9b97ff27f5f47b7368e4b9dd1", + "sha256:738db0e0941ca0376804d4de6a782c005245264edaa253ffce24e5a15cbdc7bd", + "sha256:7491cf8a79b8eb867d419648fff2f83cb0b3891c8b36da92cc7f1931d46108c8", + "sha256:74ee3d7ecb3f3c05459ba95eed5efa28d6092d751ce9bf20e3e253a4e497e691", + "sha256:750f96efe0597382660d8b53e90dd1dd44568a8edb51cb7f9d5d918b80d4de14", + "sha256:78092232a4ab376a35d68c4e6d5e00dfd73454bd12b230420025fbe178ee3b0b", + "sha256:78afba22027b4accef10dbd5eed84425930ba41b3ea0a86fa8d20baaf19d807f", + "sha256:7bdb5e09068332578214cadd9c05e3d64d99e0e87591be22a324bdbc18925be0", + "sha256:80f1df8dbe9572b4b7abdfa17eb5d78dd620b1d55d9e25f834efdbee872d3aed", + "sha256:85d27ea4c889342f7e35f6d56e7e1cb345632ad592e8c51b693d7b7556043ce0", + "sha256:8b02d8f9cb83c52578a0b4beadba92e37d83a4ef11570a8688bbf43f4ca50909", + "sha256:8ce2e8411c7aaef53e6bb29fe98f28cd4fbd9a1d9be2eeea434331aac0536b22", + "sha256:8f4f3724c068be008c08257207210c138d5f3731af6c155a81c2b09a9eb3a788", + "sha256:9622e3b6c1d8b551b6e6f21873bdcc55762b4b2126633014cea1803368a9aa16", + "sha256:9b7b0d4fd2635f54ad82785d56bc0d94f147096493a79985d0ab57aedd563156", + "sha256:9bc7ae48b8057a611e5fe9f853baa88093b9a76303937449397899385da06fad", + "sha256:9db98ab6565c69082ec9b0d4e40dd9f6181dab0dd236d26f7a50b8b9bfbd5076", + "sha256:9ee66787e095127116d91dea2143db65c7bb1e232f617aa5957c0d9d2a3f23a7", + "sha256:a0a6709b47019dff32e678bc12c63008311b82b9327613f534e496dacaefb71e", + "sha256:a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6", + "sha256:aa442755e31c64037aa7c1cb186e0b369f8416c567381852c63444dd666fb772", + "sha256:ad275964d52e2243430472fc5d2c2334b4fc3ff9c16cb0a19254e25efa03a155", + "sha256:b0e130705d568e2f43a17bcbe74d90958e8a16263868a12c3e0d9c8162690830", + "sha256:b10428b3416d4f9c61f94b494681280be7686bda15898a3a9e08eb66a6d92d67", + "sha256:b2dbea1012ccb784a65349f57bbc93730b96e85b42e9bf7b01ef40443db720b4", + "sha256:b4ba4be812c7a40280629e55ae0b14a0aafa150dd6451297562e1764808bbe61", + "sha256:b93a07e76d13bff9444f1a029e0af2964e654bfc2e2c2d46bfd080df5ad5f3d8", + "sha256:bf2c33d6791c598142f00c9c4c7d47f6476731c31081331664eb26d6ab583e01", + "sha256:c27476257b2fdcd7872d54cfd119b3a9ce4610fb85c8e32b70b42e3680a29a1e", + "sha256:c8bd62331e5032bc396a93609982a9ab6b411c05078a52f5fe3cc59234a3abd1", + "sha256:c97209e85b5be259994eb5b69ff50c5d20cca0f458ef9abd835e262d9d88b39d", + "sha256:cc1c3bc53befb6096b84165956e886b1729634a799e9d6329a0c512ab651e579", + "sha256:cc5d875d56e49f112b6def6813c4e3d3036d269c008bf8aef72cd08d20ca6df6", + "sha256:d189ba1bebfbc0c0e529159631ec72bb9e9bc041f01ec6d3233d6d82eb823bc1", + "sha256:d4e5c5edee874dce4f653dbe59db7c73a600119fbea8d31f53423586ee2aafd7", + "sha256:d57a75d53922fc20c165016a20d9c44f73305e67c351bbc60d1adaf662e74047", + "sha256:da3104c57bbd72948d75f6a9389e6727d2ab6333c3617f0a89d72d4940aa0443", + "sha256:dd6b20b93b3ccc9c1b597999209e4bc5cf2853f9ee66e3fc9a400a78733ffc9a", + "sha256:e0409af9f829f87a2dfb7e259f78f317a5351f2045158be321fd135973fff7bf", + "sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd", + "sha256:e616e7154c37669fc1dfc14584f11e284e05d1c650e1c0f972f281c4ccc53193", + "sha256:e6def7eed9e7fa90fde255afaf08060dc4b343bbe524a8f69bdd2a2f0018f600", + "sha256:ea926cfbc3957090becbcbbb65ad177161a2ff2ad578b5a6ec9bb1e1cd78753c", + "sha256:f0d3348c95b766f54b76116d53d4cb171b52992a1027e7ca50c81b43b9d9e363", + "sha256:f6b0c664ccb879109ee3ca702a9272d877f4fcd21e5eb63c26422fd6e415365e", + "sha256:f781dcb0bc9929adc77bad571b8621ecb1e4cdef86e940fe2e5b5ee24fd33b35", + "sha256:f91ebf30830a48c825590aede79376cb40f110b387c17ee9bd59932c961044f9", + "sha256:fdec757fea0b793056419bca3e9932eb2b0ceec90ef4813ea4c1e072c389eb28", + "sha256:fe15238d3798788d00716637b3d4e7bb6bde18b26e5d08335a96e88564a36b6b" ], - "markers": "python_version >= '3.7'", - "version": "==9.5.0" + "markers": "python_version >= '3.9'", + "version": "==11.2.1" }, "pyparsing": { "hashes": [ - "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", - "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" + "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", + "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be" ], - "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.9" + "markers": "python_version >= '3.9'", + "version": "==3.2.3" }, "python-dateutil": { "hashes": [ - "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", - "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==2.8.2" + "version": "==2.9.0.post0" + }, + "pytz": { + "hashes": [ + "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", + "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" + ], + "version": "==2025.2" }, "scan-build": { "hashes": [ @@ -356,23 +511,51 @@ "sha256:f61cd6e05269819c8c5fb6d61eabb5cbc3c271ca99b89c096e45f82c454f63ef" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==2.0.20" }, + "setuptools": { + "hashes": [ + "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", + "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==80.9.0" + }, "six": { "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.16.0" + "version": "==1.17.0" + }, + "tqdm": { + "hashes": [ + "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", + "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==4.67.1" + }, + "typing-extensions": { + "hashes": [ + "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", + "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==4.13.2" }, - "zipp": { + "tzdata": { "hashes": [ - "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", - "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556" + "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", + "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" ], - "markers": "python_version < '3.10'", - "version": "==3.15.0" + "markers": "python_version >= '2'", + "version": "==2025.2" } }, "develop": {} diff --git a/scripts/Infrastructure/MPIAPIInfo/GenerateCallFactory.py b/scripts/GenerateCallFactory.py similarity index 80% rename from scripts/Infrastructure/MPIAPIInfo/GenerateCallFactory.py rename to scripts/GenerateCallFactory.py index 502e125cf34662394ae77009432148c7fb8459a8..1f435bb1fd0ff66c96cf36d011b9b00799634541 100644 --- a/scripts/Infrastructure/MPIAPIInfo/GenerateCallFactory.py +++ b/scripts/GenerateCallFactory.py @@ -9,7 +9,7 @@ from Infrastructure.MPIAPIInfo.MPIAPIParameters import get_mpi_version_dict template = """ @staticmethod def @{FUNC_KEY}@(*args): - return MPICall("@{FUNC_NAME}@", OrderedDict(@{PARAM_DICT}@), "@{VERSION}@") + return MPICall("@{FUNC_NAME}@", OrderedDict(@{PARAM_DICT}@), "@{VERSION}@", bigints=@BIGINTS@) """ file_header="""#! /usr/bin/python3 @@ -47,8 +47,8 @@ template_correct = """ def main(): # read in the "official" standards json to get all mpi functions and there params - mpi_api_json_file = "scripts/Infrastructure/MPIAPIInfo/MPI_api.json" - output_file = "scripts/Infrastructure/MPICallFactory.py" + mpi_api_json_file = "Infrastructure/MPIAPIInfo/MPI_api.json" + output_file = "Infrastructure/MPICallFactory.py" with open(mpi_api_json_file, "r") as file: api_specs = json.load(file) @@ -60,6 +60,7 @@ def main(): version_dict = get_mpi_version_dict() for key, api_spec in api_specs.items(): + bigint_dict = {} spec = api_specs[key] name = spec['name'] dict_str = "[" @@ -70,6 +71,10 @@ def main(): if 'c_parameter' not in param['suppress']: dict_str = dict_str + "(\"" + param['name'] + "\", args[" + str(i) + "])," correct_param_str = correct_param_str + "correct_params.get(\""+param['name']+"\")," + if param["kind"] == "WINDOW_SIZE" or param["kind"] == "RMA_DISPLACEMENT_NNI" or param["kind"] == "POLYDTYPE_STRIDE_BYTES": + bigint_dict[param["name"]] = "mpi_address_kind" + if param["kind"] == "XFER_NUM_ELEM_NNI": + bigint_dict[param["name"]] = "mpi_count_kind" i = i + 1 pass dict_str = dict_str + "]" @@ -84,7 +89,8 @@ def main(): function_def_str = (template.replace("@{FUNC_KEY}@", key) .replace("@{FUNC_NAME}@", name) .replace("@{PARAM_DICT}@", dict_str) - .replace("@{VERSION}@", ver)) + .replace("@{VERSION}@", ver) + .replace("@BIGINTS@", str(bigint_dict))) class_str = class_str+ function_def_str correct_function_def_str =(template_correct diff --git a/scripts/Infrastructure/AllocCall.py b/scripts/Infrastructure/AllocCall.py index af095836b00d79c3b0fa0f2f8bdfd0b64592fdc3..d76c02f691341decea11db7b6b12dfd55a1ffdfe 100644 --- a/scripts/Infrastructure/AllocCall.py +++ b/scripts/Infrastructure/AllocCall.py @@ -5,10 +5,20 @@ from typing_extensions import override from Infrastructure.Instruction import Instruction from Infrastructure.Variables import ERROR_MARKER_COMMENT_BEGIN, ERROR_MARKER_COMMENT_END +import Infrastructure.Variables as infvars -alloc_template = """ +alloc_template_c = """ @{TYPE}@* @{NAME}@ = (@{TYPE}@*) @{FUNCTION}@(@{NUM}@ @{SEP}@ sizeof(@{TYPE}@)); """ +dealloc_template_c = """ +free(@NAME@); +""" +alloc_template_fort = """ +allocate(@{NAME}@(0:(@{NUM}@)-1)) +""" +dealloc_template_fort = """ +deallocate(@NAME@) +""" """ Class Overview: @@ -24,6 +34,18 @@ alloc_template = """ - `set_use_malloc(self)`: Use malloc """ +type_adjust_fort = { + "signed int": "integer", + "int": "integer", + "double": "double precision", + "_Bool": "logical", +} +elements_adjust_fort = { + "sizeof(signed int)": "integer_size", + "sizeof(int)": "integer_size", + "sizeof(double)": "double_size", + "sizeof(_Bool)": "logical_size", +} class AllocCall(Instruction): @override @@ -46,22 +68,35 @@ class AllocCall(Instruction): @override def __str__(self): + if infvars.generation_target != "c" and self._type not in type_adjust_fort: + return "! FORTRAN_INCOMPATIBLE" if self._use_malloc: delim = '*' func = "malloc" else: delim = ',' func = "calloc" - - s = (alloc_template + + type = self._type + num_elements = str(self._num_elements) + if infvars.generator_language == "fort": + type = type_adjust_fort.get(self._type, self._type) + for orig, fort_mod in elements_adjust_fort.items(): + if orig in str(self._num_elements): num_elements = num_elements.replace(orig, fort_mod) + + actual_template = alloc_template_fort if infvars.generator_language == "fort" else alloc_template_c + s = (actual_template .replace("@{NAME}@", self._name) - .replace("@{TYPE}@", self._type) + .replace("@{TYPE}@", type) .replace("@{FUNCTION}@", func) - .replace("@{NUM}@", str(self._num_elements)) + .replace("@{NUM}@", str(num_elements)) .replace("@{SEP}@", delim)) if self._has_error: - s = ERROR_MARKER_COMMENT_BEGIN + s + ERROR_MARKER_COMMENT_END + if infvars.generator_language == "c": + s = ERROR_MARKER_COMMENT_BEGIN + s + ERROR_MARKER_COMMENT_END + else: + s = ERROR_MARKER_COMMENT_BEGIN_FORT + s + ERROR_MARKER_COMMENT_END_FORT return s @@ -87,7 +122,7 @@ class AllocCall(Instruction): return self._name def get_type(self) -> str: - return self._type + return type_adjust_fort.get(self._type, self._type) def get_use_malloc(self) -> bool: return self._use_malloc @@ -95,4 +130,7 @@ class AllocCall(Instruction): def get_free(alloc_call: AllocCall) -> Instruction: assert isinstance(alloc_call, AllocCall) - return Instruction("free(" + alloc_call.get_name() + ");") + return get_free_by_name(alloc_call.get_name()) +def get_free_by_name(name: str) -> Instruction: + actual_template = dealloc_template_fort if infvars.generator_language == "fort" else dealloc_template_c + return Instruction(actual_template.replace("@NAME@", name)) diff --git a/scripts/Infrastructure/ArrAsgn.py b/scripts/Infrastructure/ArrAsgn.py new file mode 100644 index 0000000000000000000000000000000000000000..f97530cc7e42465924051a533ec741418a58aecb --- /dev/null +++ b/scripts/Infrastructure/ArrAsgn.py @@ -0,0 +1,65 @@ +#! /usr/bin/python3 +from __future__ import annotations + +from typing_extensions import override +import re + +from Infrastructure.Instruction import Instruction +from Infrastructure.Variables import ERROR_MARKER_COMMENT_BEGIN, ERROR_MARKER_COMMENT_END, ERROR_MARKER_COMMENT_BEGIN_FORT, ERROR_MARKER_COMMENT_END_FORT, adjust_var_language +import Infrastructure.Variables as infvars + +asgn_template_c = "@NAME@[@INDEX@] = @VALUE@;" +asgn_template_fort = "@NAME@(@INDEX@) = @VALUE@" + +""" + Class Overview: + The `ArrAsgn` class is a helper for creationg array assignments + + Methods: + - `__init__(self)`: Initializes a new array assignment + - `__str__(self)`: Converts the assignmet instance to a string, replacing placeholders. +""" + +class ArrAsgn(Instruction): + @override + def __init__(self, arr_name: str, idx: int, value: str, + rank: str | int = 'all', identifier: str = None): + """ + Creates a new array assignment + + Args: + idx: Array index + arr_name: Name of array + value: Value to assign + """ + super().__init__("", rank,identifier) + self._arr_name = arr_name + self._index = idx + self._value = value + + @override + def __str__(self): + actual_template = asgn_template_fort if infvars.generator_language == "fort" else asgn_template_c + actual_value = adjust_var_language(self._value) + + s = (actual_template + .replace("@NAME@", self._arr_name) + .replace("@INDEX@", str(self._index)) + .replace("@VALUE@", actual_value)) + + if self._has_error: + if infvars.generator_language == "c": + s = ERROR_MARKER_COMMENT_BEGIN + s + ERROR_MARKER_COMMENT_END + else: + s = ERROR_MARKER_COMMENT_BEGIN_FORT + s + ERROR_MARKER_COMMENT_END_FORT + + return s + + def get_arr_name(self) -> str: + return self._arr_name + + def get_idx(self) -> str: + return self._idx + + def get_value(self) -> bool: + return self._value diff --git a/scripts/Infrastructure/Branches.py b/scripts/Infrastructure/Branches.py new file mode 100644 index 0000000000000000000000000000000000000000..42268e8ca4f511fdaf702e747ead5097fe605e2c --- /dev/null +++ b/scripts/Infrastructure/Branches.py @@ -0,0 +1,80 @@ +#! /usr/bin/python3 +from __future__ import annotations + +from typing_extensions import override +import re + +from Infrastructure.Instruction import Instruction +from Infrastructure.Variables import ERROR_MARKER_COMMENT_BEGIN, ERROR_MARKER_COMMENT_END, ERROR_MARKER_COMMENT_BEGIN_FORT, ERROR_MARKER_COMMENT_END_FORT, adjust_var_language +import Infrastructure.Variables as infvars + +for_template_c = "for (int i = @START@; i < @END@; ++i) {" +for_template_fort = "do i=@START@, @END@" + +if_template_c = "if (@COND@) {" +if_template_fort = "if (@COND@) then" + +""" + Class Overview: + The `Branch` class is a prototype for the specific IfBranch/ForBranch helpers for creating if/for branches/loops. + It should not be used directly + + Methods: + - `__init__(self)`: Initializes a new branch + - `header(self)`: Returns a string representing the branch header + - `trailer(self)`: Returns a string representing the branch trailer +""" + +class Branch: + @override + def __init__(self): + pass + + def header(self): + return "" + @staticmethod + def trailer(): + return "" + +class IfBranch(Branch): + @override + def __init__(self, cond: str, elseif: bool = False): + self._cond = cond + self._elseif = elseif + + @override + def header(self): + if infvars.generator_language == "c": + res = if_template_c.replace("@COND@", self._cond) + elseif_str = "} else" + else: + res = if_template_fort.replace("@COND@", adjust_var_language(self._cond)).replace("!=", "/=") + elseif_str = "else" + return res if not self._elseif else f"{elseif_str} {res}" + + @override + @staticmethod + def trailer(): + if infvars.generator_language == "c": + return "}" + else: + return "end if" + +class ForLoop(Branch): + @override + def __init__(self, start: str, end: str): + self._start = start + self._end = end + + @override + def header(self): + actual_template = for_template_c if infvars.generator_language == "c" else for_template_fort + return actual_template.replace("@START@", str(self._start)).replace("@END@", str(self._end)) + + @override + @staticmethod + def trailer(): + if infvars.generator_language == "c": + return "}" + else: + return "end do" diff --git a/scripts/Infrastructure/CorrectParameter.py b/scripts/Infrastructure/CorrectParameter.py index 1e8dda1dcf5f0ada903e31956389a87d5135f3ae..0c62d5969359351490f3fe8ef806b141165aa167 100644 --- a/scripts/Infrastructure/CorrectParameter.py +++ b/scripts/Infrastructure/CorrectParameter.py @@ -129,13 +129,15 @@ class CorrectParameterFactory: if param in ["periods"]: return "periods" if param in ["reorder"]: - return "0" + return "false" print("Not Implemented: " + param) assert False, "Param not known" def get_initializer(self, variable_type: str) -> str: - if variable_type == "int": + if variable_type == "int" or variable_type == "MPI_Aint": return "0" + if variable_type == "bool": + return "" if variable_type == "MPI_Request": return "MPI_REQUEST_NULL" if variable_type == "MPI_Comm": @@ -146,6 +148,16 @@ class CorrectParameterFactory: return "MPI_GROUP_NULL" if variable_type == "MPI_Datatype": return "MPI_DATATYPE_NULL" + if variable_type == "MPI_Status": + return "" + if variable_type == "MPI_Win": + return "" + if variable_type == "int*": + return "" + if variable_type == "bool*": + return "" + if variable_type == "c_ptr": + return "" # TODO implement other types print("Not Implemented: " + variable_type) assert False, "Param not known" diff --git a/scripts/Infrastructure/GeneratorManager.py b/scripts/Infrastructure/GeneratorManager.py index abaca4408f37407fde8a4bde8bfa51505c51a69b..7cd80cf686c70167e533d6717309122068e70330 100644 --- a/scripts/Infrastructure/GeneratorManager.py +++ b/scripts/Infrastructure/GeneratorManager.py @@ -14,6 +14,7 @@ import tqdm from Infrastructure.ErrorGenerator import ErrorGenerator from Infrastructure.Template import TemplateManager +import Infrastructure.Variables as infvars from Infrastructure.Variables import * # number of digits to use numbering filenames @@ -33,7 +34,7 @@ def import_module(root, file): class GeneratorManager: - def __init__(self, path, score_table=None, print_discovery=True, skip_invalid=False): + def __init__(self, path, score_table=None, print_discovery=True, skip_invalid=False, lang: str = "c"): """ Instantiates an GeneratorManager and discovers ErrorGenerator classes from Python files in the specified path. @@ -51,6 +52,8 @@ class GeneratorManager: Note: - Discovers the generators in Python files with the '.py' extension in the specified path and its subdirectories. """ + infvars.generation_target = lang + infvars.generator_language = "fort" if lang == "fort" else "c" # c_fort_compat treated as C self.generators = [] self.score_table = score_table self.discover_generators(path, print_discovery, skip_invalid) @@ -58,7 +61,7 @@ class GeneratorManager: # discover all Error Generators pass - def get_filename(self, case_name, suffix=".c"): + def get_filename(self, case_name): """ Private Function: Helps to generate filenames for the generated testcases """ @@ -68,11 +71,13 @@ class GeneratorManager: num = num + 1 self.case_names[case_name] = num + suffix = ".c" if infvars.generator_language == "c" else ".f90" + return case_name + "-" + str(num).zfill(digits_to_use) + suffix def generate(self, outpath: str | Path | os.PathLike[str], filterlist_: typing.Sequence[str] = None, print_progress_bar: bool = True, overwrite: bool = True, generation_level: int = BASIC_TEST_LEVEL, - try_compile: bool = False, max_mpi_version: str = "4.0", use_clang_format: bool = True): + try_compile: bool = False, max_mpi_version: str = "4.0", use_format: bool = True): """ Generates test cases based on the specified parameters. Parameters: @@ -82,7 +87,7 @@ class GeneratorManager: - `overwrite` (bool, optional): Whether to overwrite existing files. Defaults to True. - `generation_level` (int, optional): Level of cases to generate (1,2,3). Defaults to 1, only basic testcases, 2: testcases that should have sufficient coverage, 3: al cases.. - `try_compile` (bool, optional): Whether to try compiling the generated test cases. Defaults to False. - - `use_clang_format` (bool, optional): Whether to format the generated test cases. Defaults to True. + - `use_format` (bool, optional): Whether to format the generated test cases. Uses clang-format for C and fprettify for Fortran. Defaults to True. - `max_mpi_version` (float, optional): The maximum MPI version allowed for generated test cases. Defaults to 4.0. Returns: @@ -134,8 +139,10 @@ class GeneratorManager: assert False and "File Already exists" result_str = str(result_error) - if use_clang_format: - result_str = subprocess.check_output(["clang-format"], text=True, + if infvars.generation_target != "c" and "FORTRAN_INCOMPATIBLE" in result_str: continue + if use_format: + formatter = ["clang-format"] if infvars.generator_language == "c" else ["fprettify", "-i 4", "-l 0"] + result_str = subprocess.check_output(formatter, text=True, input=result_str) with open(full_name, "w") as text_file: diff --git a/scripts/Infrastructure/Instruction.py b/scripts/Infrastructure/Instruction.py index 7d585f5e19ce57745057ec8d7a860c26a2e6c82b..2b1a081035436d7f4c14f5fae13eb06df126b05c 100644 --- a/scripts/Infrastructure/Instruction.py +++ b/scripts/Infrastructure/Instruction.py @@ -1,8 +1,8 @@ #! /usr/bin/python3 from __future__ import annotations -from Infrastructure.Variables import ERROR_MARKER_COMMENT_BEGIN, ERROR_MARKER_COMMENT_END - +from Infrastructure.Variables import ERROR_MARKER_COMMENT_BEGIN, ERROR_MARKER_COMMENT_END, ERROR_MARKER_COMMENT_BEGIN_FORT, ERROR_MARKER_COMMENT_END_FORT +import Infrastructure.Variables as infvars class Instruction(object): """ @@ -10,7 +10,7 @@ class Instruction(object): the identifier is used, in order to reference that instruction in the Template Manager (e.g. to change it). can be None """ - def __init__(self, str_representation: str, rank: str | int = 'all', identifier: str = None): + def __init__(self, str_representation: str, rank: str | int = 'all', identifier: str | None = None): self._str_representation = str_representation self._has_error = False self._identifier = identifier @@ -24,7 +24,7 @@ class Instruction(object): def has_error(self): return self._has_error - def get_identifier(self) -> str: + def get_identifier(self) -> str | None: return self._identifier def set_identifier(self, identifier: str): @@ -40,6 +40,9 @@ class Instruction(object): def __str__(self): if self._has_error: - return ERROR_MARKER_COMMENT_BEGIN + self._str_representation + ERROR_MARKER_COMMENT_END + if infvars.generator_language == "c": + return ERROR_MARKER_COMMENT_BEGIN + self._str_representation + ERROR_MARKER_COMMENT_END + else: + return ERROR_MARKER_COMMENT_BEGIN_FORT + self._str_representation + ERROR_MARKER_COMMENT_END_FORT else: return self._str_representation diff --git a/scripts/Infrastructure/MPICall.py b/scripts/Infrastructure/MPICall.py index 1ddc2001ce7f26f4bfb18dea87975a39bf5f6f51..c7820e9775c3e3a69ee46853476c20089eb7142c 100644 --- a/scripts/Infrastructure/MPICall.py +++ b/scripts/Infrastructure/MPICall.py @@ -2,34 +2,54 @@ from __future__ import annotations import typing +import re from typing_extensions import override from Infrastructure.Instruction import Instruction -from Infrastructure.Variables import ERROR_MARKER_COMMENT_BEGIN, ERROR_MARKER_COMMENT_END +from Infrastructure.Variables import ERROR_MARKER_COMMENT_BEGIN, ERROR_MARKER_COMMENT_END, ERROR_MARKER_COMMENT_BEGIN_FORT, ERROR_MARKER_COMMENT_END_FORT, adjust_var_language +import Infrastructure.Variables as infvars +call_template_fort = "call @FUNC@(@ARGS@)" +call_template_c = "@FUNC@(@ARGS@);" + + +def get_arg_str(args: typing.OrderedDict[str, str], bigint: typing.Dict[str,str] = {}): + s = "" + for k, v in args.items(): + assert v is not None + v = adjust_var_language(v) + if infvars.generator_language == "fort" and k in bigint: + v = f"int({v}, {bigint[k]})" + s += str(v) + s += ", " + s = s[:-2] # remove last ", " + if infvars.generator_language == "fort": s += ", ierr" + return s class MPICall(Instruction): @override def __init__(self, function: str, args: typing.OrderedDict[str, str], version: str, rank: str | int = 'all', - identifier: str = None): + identifier: str | None = None, bigints: typing.Dict[str,str] = {}): super().__init__("", rank, identifier) self._function = function self._args = args self._version = version + self._bigints = bigints @override def __str__(self): - s = self._function + "(" - for k, v in self._args.items(): - assert v is not None - s += str(v) + ", " - s = s[:-2] # remove last , and space - s += ");" - if self._has_error: - s = ERROR_MARKER_COMMENT_BEGIN + s + ERROR_MARKER_COMMENT_END - - return s + if infvars.generator_language == "c": + actual_template = call_template_c + error_begin = ERROR_MARKER_COMMENT_BEGIN + error_end = ERROR_MARKER_COMMENT_END + else: + actual_template = call_template_fort + error_begin = ERROR_MARKER_COMMENT_BEGIN_FORT + error_end = ERROR_MARKER_COMMENT_END_FORT + if self.has_error(): + actual_template = error_begin + actual_template + error_end + return actual_template.replace("@FUNC@", self._function).replace("@ARGS@", get_arg_str(self._args, self._bigints)) def set_arg(self, arg: str, value: str): if not self.has_arg(arg): diff --git a/scripts/Infrastructure/MPICallFactory.py b/scripts/Infrastructure/MPICallFactory.py index 4c1e9b9d64c6a01f3808d78a7b1ae8ae845d831f..c37668a7c1dac19bdde1ef61af11e83f72761dee 100644 --- a/scripts/Infrastructure/MPICallFactory.py +++ b/scripts/Infrastructure/MPICallFactory.py @@ -13,2063 +13,2063 @@ class MPICallFactory: @staticmethod def mpi_abort(*args): - return MPICall("MPI_Abort", OrderedDict([("comm", args[0]), ("errorcode", args[1]), ]), "1.0") + return MPICall("MPI_Abort", OrderedDict([("comm", args[0]),("errorcode", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_accumulate(*args): - return MPICall("MPI_Accumulate", OrderedDict([("origin_addr", args[0]), ("origin_count", args[1]), ("origin_datatype", args[2]), ("target_rank", args[3]), ("target_disp", args[4]), ("target_count", args[5]), ("target_datatype", args[6]), ("op", args[7]), ("win", args[8]), ]), "2.0") + return MPICall("MPI_Accumulate", OrderedDict([("origin_addr", args[0]),("origin_count", args[1]),("origin_datatype", args[2]),("target_rank", args[3]),("target_disp", args[4]),("target_count", args[5]),("target_datatype", args[6]),("op", args[7]),("win", args[8]),]), "2.0", bigints={'target_disp': 'mpi_address_kind'}) @staticmethod def mpi_add_error_class(*args): - return MPICall("MPI_Add_error_class", OrderedDict([("errorclass", args[0]), ]), "2.0") + return MPICall("MPI_Add_error_class", OrderedDict([("errorclass", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_add_error_code(*args): - return MPICall("MPI_Add_error_code", OrderedDict([("errorclass", args[0]), ("errorcode", args[1]), ]), "2.0") + return MPICall("MPI_Add_error_code", OrderedDict([("errorclass", args[0]),("errorcode", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_add_error_string(*args): - return MPICall("MPI_Add_error_string", OrderedDict([("errorcode", args[0]), ("string", args[1]), ]), "2.0") + return MPICall("MPI_Add_error_string", OrderedDict([("errorcode", args[0]),("string", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_aint_add(*args): - return MPICall("MPI_Aint_add", OrderedDict([("base", args[0]), ("disp", args[1]), ]), "3.1") + return MPICall("MPI_Aint_add", OrderedDict([("base", args[0]),("disp", args[1]),]), "3.1", bigints={}) @staticmethod def mpi_aint_diff(*args): - return MPICall("MPI_Aint_diff", OrderedDict([("addr1", args[0]), ("addr2", args[1]), ]), "3.1") + return MPICall("MPI_Aint_diff", OrderedDict([("addr1", args[0]),("addr2", args[1]),]), "3.1", bigints={}) @staticmethod def mpi_allgather(*args): - return MPICall("MPI_Allgather", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ]), "1.0") + return MPICall("MPI_Allgather", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_allgather_init(*args): - return MPICall("MPI_Allgather_init", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ("info", args[7]), ("request", args[8]), ]), "4.0") + return MPICall("MPI_Allgather_init", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),("info", args[7]),("request", args[8]),]), "4.0", bigints={}) @staticmethod def mpi_allgatherv(*args): - return MPICall("MPI_Allgatherv", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcounts", args[4]), ("displs", args[5]), ("recvtype", args[6]), ("comm", args[7]), ]), "1.0") + return MPICall("MPI_Allgatherv", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcounts", args[4]),("displs", args[5]),("recvtype", args[6]),("comm", args[7]),]), "1.0", bigints={}) @staticmethod def mpi_allgatherv_init(*args): - return MPICall("MPI_Allgatherv_init", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcounts", args[4]), ("displs", args[5]), ("recvtype", args[6]), ("comm", args[7]), ("info", args[8]), ("request", args[9]), ]), "4.0") + return MPICall("MPI_Allgatherv_init", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcounts", args[4]),("displs", args[5]),("recvtype", args[6]),("comm", args[7]),("info", args[8]),("request", args[9]),]), "4.0", bigints={}) @staticmethod def mpi_alloc_mem(*args): - return MPICall("MPI_Alloc_mem", OrderedDict([("size", args[0]), ("info", args[1]), ("baseptr", args[2]), ]), "2.0") + return MPICall("MPI_Alloc_mem", OrderedDict([("size", args[0]),("info", args[1]),("baseptr", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_allreduce(*args): - return MPICall("MPI_Allreduce", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ]), "1.0") + return MPICall("MPI_Allreduce", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_allreduce_init(*args): - return MPICall("MPI_Allreduce_init", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ("info", args[6]), ("request", args[7]), ]), "4.0") + return MPICall("MPI_Allreduce_init", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),("info", args[6]),("request", args[7]),]), "4.0", bigints={}) @staticmethod def mpi_alltoall(*args): - return MPICall("MPI_Alltoall", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ]), "1.0") + return MPICall("MPI_Alltoall", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_alltoall_init(*args): - return MPICall("MPI_Alltoall_init", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ("info", args[7]), ("request", args[8]), ]), "4.0") + return MPICall("MPI_Alltoall_init", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),("info", args[7]),("request", args[8]),]), "4.0", bigints={}) @staticmethod def mpi_alltoallv(*args): - return MPICall("MPI_Alltoallv", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtype", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtype", args[7]), ("comm", args[8]), ]), "1.0") + return MPICall("MPI_Alltoallv", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtype", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtype", args[7]),("comm", args[8]),]), "1.0", bigints={}) @staticmethod def mpi_alltoallv_init(*args): - return MPICall("MPI_Alltoallv_init", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtype", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtype", args[7]), ("comm", args[8]), ("info", args[9]), ("request", args[10]), ]), "4.0") + return MPICall("MPI_Alltoallv_init", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtype", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtype", args[7]),("comm", args[8]),("info", args[9]),("request", args[10]),]), "4.0", bigints={}) @staticmethod def mpi_alltoallw(*args): - return MPICall("MPI_Alltoallw", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtypes", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtypes", args[7]), ("comm", args[8]), ]), "2.0") + return MPICall("MPI_Alltoallw", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtypes", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtypes", args[7]),("comm", args[8]),]), "2.0", bigints={}) @staticmethod def mpi_alltoallw_init(*args): - return MPICall("MPI_Alltoallw_init", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtypes", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtypes", args[7]), ("comm", args[8]), ("info", args[9]), ("request", args[10]), ]), "4.0") + return MPICall("MPI_Alltoallw_init", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtypes", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtypes", args[7]),("comm", args[8]),("info", args[9]),("request", args[10]),]), "4.0", bigints={}) @staticmethod def mpi_attr_delete(*args): - return MPICall("MPI_Attr_delete", OrderedDict([("comm", args[0]), ("keyval", args[1]), ]), "1.0") + return MPICall("MPI_Attr_delete", OrderedDict([("comm", args[0]),("keyval", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_attr_get(*args): - return MPICall("MPI_Attr_get", OrderedDict([("comm", args[0]), ("keyval", args[1]), ("attribute_val", args[2]), ("flag", args[3]), ]), "1.0") + return MPICall("MPI_Attr_get", OrderedDict([("comm", args[0]),("keyval", args[1]),("attribute_val", args[2]),("flag", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_attr_put(*args): - return MPICall("MPI_Attr_put", OrderedDict([("comm", args[0]), ("keyval", args[1]), ("attribute_val", args[2]), ]), "1.0") + return MPICall("MPI_Attr_put", OrderedDict([("comm", args[0]),("keyval", args[1]),("attribute_val", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_barrier(*args): - return MPICall("MPI_Barrier", OrderedDict([("comm", args[0]), ]), "1.0") + return MPICall("MPI_Barrier", OrderedDict([("comm", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_barrier_init(*args): - return MPICall("MPI_Barrier_init", OrderedDict([("comm", args[0]), ("info", args[1]), ("request", args[2]), ]), "4.0") + return MPICall("MPI_Barrier_init", OrderedDict([("comm", args[0]),("info", args[1]),("request", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_bcast(*args): - return MPICall("MPI_Bcast", OrderedDict([("buffer", args[0]), ("count", args[1]), ("datatype", args[2]), ("root", args[3]), ("comm", args[4]), ]), "1.0") + return MPICall("MPI_Bcast", OrderedDict([("buffer", args[0]),("count", args[1]),("datatype", args[2]),("root", args[3]),("comm", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_bcast_init(*args): - return MPICall("MPI_Bcast_init", OrderedDict([("buffer", args[0]), ("count", args[1]), ("datatype", args[2]), ("root", args[3]), ("comm", args[4]), ("info", args[5]), ("request", args[6]), ]), "4.0") + return MPICall("MPI_Bcast_init", OrderedDict([("buffer", args[0]),("count", args[1]),("datatype", args[2]),("root", args[3]),("comm", args[4]),("info", args[5]),("request", args[6]),]), "4.0", bigints={}) @staticmethod def mpi_bsend(*args): - return MPICall("MPI_Bsend", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ]), "1.0") + return MPICall("MPI_Bsend", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_bsend_init(*args): - return MPICall("MPI_Bsend_init", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ("request", args[6]), ]), "1.0") + return MPICall("MPI_Bsend_init", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),("request", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_buffer_attach(*args): - return MPICall("MPI_Buffer_attach", OrderedDict([("buffer", args[0]), ("size", args[1]), ]), "1.0") + return MPICall("MPI_Buffer_attach", OrderedDict([("buffer", args[0]),("size", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_buffer_detach(*args): - return MPICall("MPI_Buffer_detach", OrderedDict([("buffer_addr", args[0]), ("size", args[1]), ]), "1.0") + return MPICall("MPI_Buffer_detach", OrderedDict([("buffer_addr", args[0]),("size", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_cancel(*args): - return MPICall("MPI_Cancel", OrderedDict([("request", args[0]), ]), "1.0") + return MPICall("MPI_Cancel", OrderedDict([("request", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_cart_coords(*args): - return MPICall("MPI_Cart_coords", OrderedDict([("comm", args[0]), ("rank", args[1]), ("maxdims", args[2]), ("coords", args[3]), ]), "1.0") + return MPICall("MPI_Cart_coords", OrderedDict([("comm", args[0]),("rank", args[1]),("maxdims", args[2]),("coords", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_cart_create(*args): - return MPICall("MPI_Cart_create", OrderedDict([("comm_old", args[0]), ("ndims", args[1]), ("dims", args[2]), ("periods", args[3]), ("reorder", args[4]), ("comm_cart", args[5]), ]), "1.0") + return MPICall("MPI_Cart_create", OrderedDict([("comm_old", args[0]),("ndims", args[1]),("dims", args[2]),("periods", args[3]),("reorder", args[4]),("comm_cart", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_cart_get(*args): - return MPICall("MPI_Cart_get", OrderedDict([("comm_cart", args[0]), ("maxdims", args[1]), ("dims", args[2]), ("periods", args[3]), ("coords", args[4]), ]), "1.0") + return MPICall("MPI_Cart_get", OrderedDict([("comm", args[0]),("maxdims", args[1]),("dims", args[2]),("periods", args[3]),("coords", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_cart_map(*args): - return MPICall("MPI_Cart_map", OrderedDict([("comm", args[0]), ("ndims", args[1]), ("dims", args[2]), ("periods", args[3]), ("newrank", args[4]), ]), "1.0") + return MPICall("MPI_Cart_map", OrderedDict([("comm", args[0]),("ndims", args[1]),("dims", args[2]),("periods", args[3]),("newrank", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_cart_rank(*args): - return MPICall("MPI_Cart_rank", OrderedDict([("comm", args[0]), ("coords", args[1]), ("rank", args[2]), ]), "1.0") + return MPICall("MPI_Cart_rank", OrderedDict([("comm", args[0]),("coords", args[1]),("rank", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_cart_shift(*args): - return MPICall("MPI_Cart_shift", OrderedDict([("comm", args[0]), ("direction", args[1]), ("disp", args[2]), ("rank_source", args[3]), ("rank_dest", args[4]), ]), "1.0") + return MPICall("MPI_Cart_shift", OrderedDict([("comm", args[0]),("direction", args[1]),("disp", args[2]),("rank_source", args[3]),("rank_dest", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_cart_sub(*args): - return MPICall("MPI_Cart_sub", OrderedDict([("comm", args[0]), ("remain_dims", args[1]), ("newcomm", args[2]), ]), "1.0") + return MPICall("MPI_Cart_sub", OrderedDict([("comm", args[0]),("remain_dims", args[1]),("newcomm", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_cartdim_get(*args): - return MPICall("MPI_Cartdim_get", OrderedDict([("comm", args[0]), ("ndims", args[1]), ]), "1.0") + return MPICall("MPI_Cartdim_get", OrderedDict([("comm", args[0]),("ndims", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_close_port(*args): - return MPICall("MPI_Close_port", OrderedDict([("port_name", args[0]), ]), "2.0") + return MPICall("MPI_Close_port", OrderedDict([("port_name", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_comm_accept(*args): - return MPICall("MPI_Comm_accept", OrderedDict([("port_name", args[0]), ("info", args[1]), ("root", args[2]), ("comm", args[3]), ("newcomm", args[4]), ]), "2.0") + return MPICall("MPI_Comm_accept", OrderedDict([("port_name", args[0]),("info", args[1]),("root", args[2]),("comm", args[3]),("newcomm", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_comm_c2f(*args): - return MPICall("MPI_Comm_c2f", OrderedDict([("comm", args[0]), ]), "2.0") + return MPICall("MPI_Comm_c2f", OrderedDict([("comm", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_comm_call_errhandler(*args): - return MPICall("MPI_Comm_call_errhandler", OrderedDict([("comm", args[0]), ("errorcode", args[1]), ]), "2.0") + return MPICall("MPI_Comm_call_errhandler", OrderedDict([("comm", args[0]),("errorcode", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_comm_compare(*args): - return MPICall("MPI_Comm_compare", OrderedDict([("comm1", args[0]), ("comm2", args[1]), ("result", args[2]), ]), "1.0") + return MPICall("MPI_Comm_compare", OrderedDict([("comm1", args[0]),("comm2", args[1]),("result", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_comm_connect(*args): - return MPICall("MPI_Comm_connect", OrderedDict([("port_name", args[0]), ("info", args[1]), ("root", args[2]), ("comm", args[3]), ("newcomm", args[4]), ]), "2.0") + return MPICall("MPI_Comm_connect", OrderedDict([("port_name", args[0]),("info", args[1]),("root", args[2]),("comm", args[3]),("newcomm", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_comm_copy_attr_function(*args): - return MPICall("MPI_Comm_copy_attr_function", OrderedDict([("oldcomm", args[0]), ("comm_keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "2.0") + return MPICall("MPI_Comm_copy_attr_function", OrderedDict([("oldcomm", args[0]),("comm_keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "2.0", bigints={}) @staticmethod def mpi_comm_create(*args): - return MPICall("MPI_Comm_create", OrderedDict([("comm", args[0]), ("group", args[1]), ("newcomm", args[2]), ]), "1.0") + return MPICall("MPI_Comm_create", OrderedDict([("comm", args[0]),("group", args[1]),("newcomm", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_comm_create_errhandler(*args): - return MPICall("MPI_Comm_create_errhandler", OrderedDict([("comm_errhandler_fn", args[0]), ("errhandler", args[1]), ]), "2.0") + return MPICall("MPI_Comm_create_errhandler", OrderedDict([("comm_errhandler_fn", args[0]),("errhandler", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_comm_create_from_group(*args): - return MPICall("MPI_Comm_create_from_group", OrderedDict([("group", args[0]), ("stringtag", args[1]), ("info", args[2]), ("errhandler", args[3]), ("newcomm", args[4]), ]), "4.0") + return MPICall("MPI_Comm_create_from_group", OrderedDict([("group", args[0]),("stringtag", args[1]),("info", args[2]),("errhandler", args[3]),("newcomm", args[4]),]), "4.0", bigints={}) @staticmethod def mpi_comm_create_group(*args): - return MPICall("MPI_Comm_create_group", OrderedDict([("comm", args[0]), ("group", args[1]), ("tag", args[2]), ("newcomm", args[3]), ]), "3.0") + return MPICall("MPI_Comm_create_group", OrderedDict([("comm", args[0]),("group", args[1]),("tag", args[2]),("newcomm", args[3]),]), "3.0", bigints={}) @staticmethod def mpi_comm_create_keyval(*args): - return MPICall("MPI_Comm_create_keyval", OrderedDict([("comm_copy_attr_fn", args[0]), ("comm_delete_attr_fn", args[1]), ("comm_keyval", args[2]), ("extra_state", args[3]), ]), "2.0") + return MPICall("MPI_Comm_create_keyval", OrderedDict([("comm_copy_attr_fn", args[0]),("comm_delete_attr_fn", args[1]),("comm_keyval", args[2]),("extra_state", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_comm_delete_attr(*args): - return MPICall("MPI_Comm_delete_attr", OrderedDict([("comm", args[0]), ("comm_keyval", args[1]), ]), "2.0") + return MPICall("MPI_Comm_delete_attr", OrderedDict([("comm", args[0]),("comm_keyval", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_comm_delete_attr_function(*args): - return MPICall("MPI_Comm_delete_attr_function", OrderedDict([("comm", args[0]), ("comm_keyval", args[1]), ("attribute_val", args[2]), ("extra_state", args[3]), ]), "2.0") + return MPICall("MPI_Comm_delete_attr_function", OrderedDict([("comm", args[0]),("comm_keyval", args[1]),("attribute_val", args[2]),("extra_state", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_comm_disconnect(*args): - return MPICall("MPI_Comm_disconnect", OrderedDict([("comm", args[0]), ]), "2.0") + return MPICall("MPI_Comm_disconnect", OrderedDict([("comm", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_comm_dup(*args): - return MPICall("MPI_Comm_dup", OrderedDict([("comm", args[0]), ("newcomm", args[1]), ]), "1.0") + return MPICall("MPI_Comm_dup", OrderedDict([("comm", args[0]),("newcomm", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_comm_dup_fn(*args): - return MPICall("MPI_COMM_DUP_FN", OrderedDict([("oldcomm", args[0]), ("comm_keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "4.0") + return MPICall("MPI_COMM_DUP_FN", OrderedDict([("oldcomm", args[0]),("comm_keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_comm_dup_with_info(*args): - return MPICall("MPI_Comm_dup_with_info", OrderedDict([("comm", args[0]), ("info", args[1]), ("newcomm", args[2]), ]), "3.0") + return MPICall("MPI_Comm_dup_with_info", OrderedDict([("comm", args[0]),("info", args[1]),("newcomm", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_comm_errhandler_function(*args): - return MPICall("MPI_Comm_errhandler_function", OrderedDict([("comm", args[0]), ("error_code", args[1]), ("varargs", args[2]), ]), "2.2") + return MPICall("MPI_Comm_errhandler_function", OrderedDict([("comm", args[0]),("error_code", args[1]),("varargs", args[2]),]), "2.2", bigints={}) @staticmethod def mpi_comm_f2c(*args): - return MPICall("MPI_Comm_f2c", OrderedDict([("comm", args[0]), ]), "2.0") + return MPICall("MPI_Comm_f2c", OrderedDict([("comm", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_comm_free(*args): - return MPICall("MPI_Comm_free", OrderedDict([("comm", args[0]), ]), "1.0") + return MPICall("MPI_Comm_free", OrderedDict([("comm", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_comm_free_keyval(*args): - return MPICall("MPI_Comm_free_keyval", OrderedDict([("comm_keyval", args[0]), ]), "2.0") + return MPICall("MPI_Comm_free_keyval", OrderedDict([("comm_keyval", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_comm_get_attr(*args): - return MPICall("MPI_Comm_get_attr", OrderedDict([("comm", args[0]), ("comm_keyval", args[1]), ("attribute_val", args[2]), ("flag", args[3]), ]), "2.0") + return MPICall("MPI_Comm_get_attr", OrderedDict([("comm", args[0]),("comm_keyval", args[1]),("attribute_val", args[2]),("flag", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_comm_get_errhandler(*args): - return MPICall("MPI_Comm_get_errhandler", OrderedDict([("comm", args[0]), ("errhandler", args[1]), ]), "2.0") + return MPICall("MPI_Comm_get_errhandler", OrderedDict([("comm", args[0]),("errhandler", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_comm_get_info(*args): - return MPICall("MPI_Comm_get_info", OrderedDict([("comm", args[0]), ("info_used", args[1]), ]), "3.0") + return MPICall("MPI_Comm_get_info", OrderedDict([("comm", args[0]),("info_used", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_comm_get_name(*args): - return MPICall("MPI_Comm_get_name", OrderedDict([("comm", args[0]), ("comm_name", args[1]), ("resultlen", args[2]), ]), "2.0") + return MPICall("MPI_Comm_get_name", OrderedDict([("comm", args[0]),("comm_name", args[1]),("resultlen", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_comm_get_parent(*args): - return MPICall("MPI_Comm_get_parent", OrderedDict([("parent", args[0]), ]), "2.0") + return MPICall("MPI_Comm_get_parent", OrderedDict([("parent", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_comm_group(*args): - return MPICall("MPI_Comm_group", OrderedDict([("comm", args[0]), ("group", args[1]), ]), "1.0") + return MPICall("MPI_Comm_group", OrderedDict([("comm", args[0]),("group", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_comm_idup(*args): - return MPICall("MPI_Comm_idup", OrderedDict([("comm", args[0]), ("newcomm", args[1]), ("request", args[2]), ]), "3.0") + return MPICall("MPI_Comm_idup", OrderedDict([("comm", args[0]),("newcomm", args[1]),("request", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_comm_idup_with_info(*args): - return MPICall("MPI_Comm_idup_with_info", OrderedDict([("comm", args[0]), ("info", args[1]), ("newcomm", args[2]), ("request", args[3]), ]), "4.0") + return MPICall("MPI_Comm_idup_with_info", OrderedDict([("comm", args[0]),("info", args[1]),("newcomm", args[2]),("request", args[3]),]), "4.0", bigints={}) @staticmethod def mpi_comm_join(*args): - return MPICall("MPI_Comm_join", OrderedDict([("fd", args[0]), ("intercomm", args[1]), ]), "2.0") + return MPICall("MPI_Comm_join", OrderedDict([("fd", args[0]),("intercomm", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_comm_null_copy_fn(*args): - return MPICall("MPI_COMM_NULL_COPY_FN", OrderedDict([("oldcomm", args[0]), ("comm_keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "4.0") + return MPICall("MPI_COMM_NULL_COPY_FN", OrderedDict([("oldcomm", args[0]),("comm_keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_comm_null_delete_fn(*args): - return MPICall("MPI_COMM_NULL_DELETE_FN", OrderedDict([("comm", args[0]), ("comm_keyval", args[1]), ("attribute_val", args[2]), ("extra_state", args[3]), ]), "4.0") + return MPICall("MPI_COMM_NULL_DELETE_FN", OrderedDict([("comm", args[0]),("comm_keyval", args[1]),("attribute_val", args[2]),("extra_state", args[3]),]), "4.0", bigints={}) @staticmethod def mpi_comm_rank(*args): - return MPICall("MPI_Comm_rank", OrderedDict([("comm", args[0]), ("rank", args[1]), ]), "1.0") + return MPICall("MPI_Comm_rank", OrderedDict([("comm", args[0]),("rank", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_comm_remote_group(*args): - return MPICall("MPI_Comm_remote_group", OrderedDict([("comm", args[0]), ("group", args[1]), ]), "1.0") + return MPICall("MPI_Comm_remote_group", OrderedDict([("comm", args[0]),("group", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_comm_remote_size(*args): - return MPICall("MPI_Comm_remote_size", OrderedDict([("comm", args[0]), ("size", args[1]), ]), "1.0") + return MPICall("MPI_Comm_remote_size", OrderedDict([("comm", args[0]),("size", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_comm_set_attr(*args): - return MPICall("MPI_Comm_set_attr", OrderedDict([("comm", args[0]), ("comm_keyval", args[1]), ("attribute_val", args[2]), ]), "2.0") + return MPICall("MPI_Comm_set_attr", OrderedDict([("comm", args[0]),("comm_keyval", args[1]),("attribute_val", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_comm_set_errhandler(*args): - return MPICall("MPI_Comm_set_errhandler", OrderedDict([("comm", args[0]), ("errhandler", args[1]), ]), "2.0") + return MPICall("MPI_Comm_set_errhandler", OrderedDict([("comm", args[0]),("errhandler", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_comm_set_info(*args): - return MPICall("MPI_Comm_set_info", OrderedDict([("comm", args[0]), ("info", args[1]), ]), "3.0") + return MPICall("MPI_Comm_set_info", OrderedDict([("comm", args[0]),("info", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_comm_set_name(*args): - return MPICall("MPI_Comm_set_name", OrderedDict([("comm", args[0]), ("comm_name", args[1]), ]), "2.0") + return MPICall("MPI_Comm_set_name", OrderedDict([("comm", args[0]),("comm_name", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_comm_size(*args): - return MPICall("MPI_Comm_size", OrderedDict([("comm", args[0]), ("size", args[1]), ]), "1.0") + return MPICall("MPI_Comm_size", OrderedDict([("comm", args[0]),("size", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_comm_spawn(*args): - return MPICall("MPI_Comm_spawn", OrderedDict([("command", args[0]), ("argv", args[1]), ("maxprocs", args[2]), ("info", args[3]), ("root", args[4]), ("comm", args[5]), ("intercomm", args[6]), ("array_of_errcodes", args[7]), ]), "2.0") + return MPICall("MPI_Comm_spawn", OrderedDict([("command", args[0]),("argv", args[1]),("maxprocs", args[2]),("info", args[3]),("root", args[4]),("comm", args[5]),("intercomm", args[6]),("array_of_errcodes", args[7]),]), "2.0", bigints={}) @staticmethod def mpi_comm_spawn_multiple(*args): - return MPICall("MPI_Comm_spawn_multiple", OrderedDict([("count", args[0]), ("array_of_commands", args[1]), ("array_of_argv", args[2]), ("array_of_maxprocs", args[3]), ("array_of_info", args[4]), ("root", args[5]), ("comm", args[6]), ("intercomm", args[7]), ("array_of_errcodes", args[8]), ]), "2.0") + return MPICall("MPI_Comm_spawn_multiple", OrderedDict([("count", args[0]),("array_of_commands", args[1]),("array_of_argv", args[2]),("array_of_maxprocs", args[3]),("array_of_info", args[4]),("root", args[5]),("comm", args[6]),("intercomm", args[7]),("array_of_errcodes", args[8]),]), "2.0", bigints={}) @staticmethod def mpi_comm_split(*args): - return MPICall("MPI_Comm_split", OrderedDict([("comm", args[0]), ("color", args[1]), ("key", args[2]), ("newcomm", args[3]), ]), "1.0") + return MPICall("MPI_Comm_split", OrderedDict([("comm", args[0]),("color", args[1]),("key", args[2]),("newcomm", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_comm_split_type(*args): - return MPICall("MPI_Comm_split_type", OrderedDict([("comm", args[0]), ("split_type", args[1]), ("key", args[2]), ("info", args[3]), ("newcomm", args[4]), ]), "3.0") + return MPICall("MPI_Comm_split_type", OrderedDict([("comm", args[0]),("split_type", args[1]),("key", args[2]),("info", args[3]),("newcomm", args[4]),]), "3.0", bigints={}) @staticmethod def mpi_comm_test_inter(*args): - return MPICall("MPI_Comm_test_inter", OrderedDict([("comm", args[0]), ("flag", args[1]), ]), "1.0") + return MPICall("MPI_Comm_test_inter", OrderedDict([("comm", args[0]),("flag", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_compare_and_swap(*args): - return MPICall("MPI_Compare_and_swap", OrderedDict([("origin_addr", args[0]), ("compare_addr", args[1]), ("result_addr", args[2]), ("datatype", args[3]), ("target_rank", args[4]), ("target_disp", args[5]), ("win", args[6]), ]), "3.0") + return MPICall("MPI_Compare_and_swap", OrderedDict([("origin_addr", args[0]),("compare_addr", args[1]),("result_addr", args[2]),("datatype", args[3]),("target_rank", args[4]),("target_disp", args[5]),("win", args[6]),]), "3.0", bigints={'target_disp': 'mpi_address_kind'}) @staticmethod def mpi_conversion_fn_null(*args): - return MPICall("MPI_CONVERSION_FN_NULL", OrderedDict([("userbuf", args[0]), ("datatype", args[1]), ("count", args[2]), ("filebuf", args[3]), ("position", args[4]), ("extra_state", args[5]), ]), "4.0") + return MPICall("MPI_CONVERSION_FN_NULL", OrderedDict([("userbuf", args[0]),("datatype", args[1]),("count", args[2]),("filebuf", args[3]),("position", args[4]),("extra_state", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_copy_function(*args): - return MPICall("MPI_Copy_function", OrderedDict([("oldcomm", args[0]), ("keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "1.0") + return MPICall("MPI_Copy_function", OrderedDict([("oldcomm", args[0]),("keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_datarep_conversion_function(*args): - return MPICall("MPI_Datarep_conversion_function", OrderedDict([("userbuf", args[0]), ("datatype", args[1]), ("count", args[2]), ("filebuf", args[3]), ("position", args[4]), ("extra_state", args[5]), ]), "4.0") + return MPICall("MPI_Datarep_conversion_function", OrderedDict([("userbuf", args[0]),("datatype", args[1]),("count", args[2]),("filebuf", args[3]),("position", args[4]),("extra_state", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_datarep_extent_function(*args): - return MPICall("MPI_Datarep_extent_function", OrderedDict([("datatype", args[0]), ("extent", args[1]), ("extra_state", args[2]), ]), "4.0") + return MPICall("MPI_Datarep_extent_function", OrderedDict([("datatype", args[0]),("extent", args[1]),("extra_state", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_delete_function(*args): - return MPICall("MPI_Delete_function", OrderedDict([("comm", args[0]), ("keyval", args[1]), ("attribute_val", args[2]), ("extra_state", args[3]), ]), "1.0") + return MPICall("MPI_Delete_function", OrderedDict([("comm", args[0]),("keyval", args[1]),("attribute_val", args[2]),("extra_state", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_dims_create(*args): - return MPICall("MPI_Dims_create", OrderedDict([("nnodes", args[0]), ("ndims", args[1]), ("dims", args[2]), ]), "1.0") + return MPICall("MPI_Dims_create", OrderedDict([("nnodes", args[0]),("ndims", args[1]),("dims", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_dist_graph_create(*args): - return MPICall("MPI_Dist_graph_create", OrderedDict([("comm_old", args[0]), ("n", args[1]), ("sources", args[2]), ("degrees", args[3]), ("destinations", args[4]), ("weights", args[5]), ("info", args[6]), ("reorder", args[7]), ("comm_dist_graph", args[8]), ]), "2.2") + return MPICall("MPI_Dist_graph_create", OrderedDict([("comm_old", args[0]),("n", args[1]),("sources", args[2]),("degrees", args[3]),("destinations", args[4]),("weights", args[5]),("info", args[6]),("reorder", args[7]),("comm_dist_graph", args[8]),]), "2.2", bigints={}) @staticmethod def mpi_dist_graph_create_adjacent(*args): - return MPICall("MPI_Dist_graph_create_adjacent", OrderedDict([("comm_old", args[0]), ("indegree", args[1]), ("sources", args[2]), ("sourceweights", args[3]), ("outdegree", args[4]), ("destinations", args[5]), ("destweights", args[6]), ("info", args[7]), ("reorder", args[8]), ("comm_dist_graph", args[9]), ]), "2.2") + return MPICall("MPI_Dist_graph_create_adjacent", OrderedDict([("comm_old", args[0]),("indegree", args[1]),("sources", args[2]),("sourceweights", args[3]),("outdegree", args[4]),("destinations", args[5]),("destweights", args[6]),("info", args[7]),("reorder", args[8]),("comm_dist_graph", args[9]),]), "2.2", bigints={}) @staticmethod def mpi_dist_graph_neighbors(*args): - return MPICall("MPI_Dist_graph_neighbors", OrderedDict([("comm", args[0]), ("maxindegree", args[1]), ("sources", args[2]), ("sourceweights", args[3]), ("maxoutdegree", args[4]), ("destinations", args[5]), ("destweights", args[6]), ]), "2.2") + return MPICall("MPI_Dist_graph_neighbors", OrderedDict([("comm", args[0]),("maxindegree", args[1]),("sources", args[2]),("sourceweights", args[3]),("maxoutdegree", args[4]),("destinations", args[5]),("destweights", args[6]),]), "2.2", bigints={}) @staticmethod def mpi_dist_graph_neighbors_count(*args): - return MPICall("MPI_Dist_graph_neighbors_count", OrderedDict([("comm", args[0]), ("indegree", args[1]), ("outdegree", args[2]), ("weighted", args[3]), ]), "2.2") + return MPICall("MPI_Dist_graph_neighbors_count", OrderedDict([("comm", args[0]),("indegree", args[1]),("outdegree", args[2]),("weighted", args[3]),]), "2.2", bigints={}) @staticmethod def mpi_dup_fn(*args): - return MPICall("MPI_DUP_FN", OrderedDict([("oldcomm", args[0]), ("keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "2.2") + return MPICall("MPI_DUP_FN", OrderedDict([("oldcomm", args[0]),("keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "2.2", bigints={}) @staticmethod def mpi_errhandler_c2f(*args): - return MPICall("MPI_Errhandler_c2f", OrderedDict([("errhandler", args[0]), ]), "4.0") + return MPICall("MPI_Errhandler_c2f", OrderedDict([("errhandler", args[0]),]), "4.0", bigints={}) @staticmethod def mpi_errhandler_f2c(*args): - return MPICall("MPI_Errhandler_f2c", OrderedDict([("errhandler", args[0]), ]), "4.0") + return MPICall("MPI_Errhandler_f2c", OrderedDict([("errhandler", args[0]),]), "4.0", bigints={}) @staticmethod def mpi_errhandler_free(*args): - return MPICall("MPI_Errhandler_free", OrderedDict([("errhandler", args[0]), ]), "1.0") + return MPICall("MPI_Errhandler_free", OrderedDict([("errhandler", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_error_class(*args): - return MPICall("MPI_Error_class", OrderedDict([("errorcode", args[0]), ("errorclass", args[1]), ]), "1.0") + return MPICall("MPI_Error_class", OrderedDict([("errorcode", args[0]),("errorclass", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_error_string(*args): - return MPICall("MPI_Error_string", OrderedDict([("errorcode", args[0]), ("string", args[1]), ("resultlen", args[2]), ]), "1.0") + return MPICall("MPI_Error_string", OrderedDict([("errorcode", args[0]),("string", args[1]),("resultlen", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_exscan(*args): - return MPICall("MPI_Exscan", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ]), "2.0") + return MPICall("MPI_Exscan", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),]), "2.0", bigints={}) @staticmethod def mpi_exscan_init(*args): - return MPICall("MPI_Exscan_init", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ("info", args[6]), ("request", args[7]), ]), "4.0") + return MPICall("MPI_Exscan_init", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),("info", args[6]),("request", args[7]),]), "4.0", bigints={}) @staticmethod def mpi_f_sync_reg(*args): - return MPICall("MPI_F_sync_reg", OrderedDict([("buf", args[0]), ]), "4.0") + return MPICall("MPI_F_sync_reg", OrderedDict([("buf", args[0]),]), "4.0", bigints={}) @staticmethod def mpi_fetch_and_op(*args): - return MPICall("MPI_Fetch_and_op", OrderedDict([("origin_addr", args[0]), ("result_addr", args[1]), ("datatype", args[2]), ("target_rank", args[3]), ("target_disp", args[4]), ("op", args[5]), ("win", args[6]), ]), "3.0") + return MPICall("MPI_Fetch_and_op", OrderedDict([("origin_addr", args[0]),("result_addr", args[1]),("datatype", args[2]),("target_rank", args[3]),("target_disp", args[4]),("op", args[5]),("win", args[6]),]), "3.0", bigints={'target_disp': 'mpi_address_kind'}) @staticmethod def mpi_file_c2f(*args): - return MPICall("MPI_File_c2f", OrderedDict([("file", args[0]), ]), "2.0") + return MPICall("MPI_File_c2f", OrderedDict([("file", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_file_call_errhandler(*args): - return MPICall("MPI_File_call_errhandler", OrderedDict([("fh", args[0]), ("errorcode", args[1]), ]), "2.0") + return MPICall("MPI_File_call_errhandler", OrderedDict([("fh", args[0]),("errorcode", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_close(*args): - return MPICall("MPI_File_close", OrderedDict([("fh", args[0]), ]), "2.0") + return MPICall("MPI_File_close", OrderedDict([("fh", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_file_create_errhandler(*args): - return MPICall("MPI_File_create_errhandler", OrderedDict([("file_errhandler_fn", args[0]), ("errhandler", args[1]), ]), "2.0") + return MPICall("MPI_File_create_errhandler", OrderedDict([("file_errhandler_fn", args[0]),("errhandler", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_delete(*args): - return MPICall("MPI_File_delete", OrderedDict([("filename", args[0]), ("info", args[1]), ]), "2.0") + return MPICall("MPI_File_delete", OrderedDict([("filename", args[0]),("info", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_errhandler_function(*args): - return MPICall("MPI_File_errhandler_function", OrderedDict([("file", args[0]), ("error_code", args[1]), ("varargs", args[2]), ]), "4.0") + return MPICall("MPI_File_errhandler_function", OrderedDict([("file", args[0]),("error_code", args[1]),("varargs", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_file_f2c(*args): - return MPICall("MPI_File_f2c", OrderedDict([("file", args[0]), ]), "2.0") + return MPICall("MPI_File_f2c", OrderedDict([("file", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_amode(*args): - return MPICall("MPI_File_get_amode", OrderedDict([("fh", args[0]), ("amode", args[1]), ]), "2.0") + return MPICall("MPI_File_get_amode", OrderedDict([("fh", args[0]),("amode", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_atomicity(*args): - return MPICall("MPI_File_get_atomicity", OrderedDict([("fh", args[0]), ("flag", args[1]), ]), "2.0") + return MPICall("MPI_File_get_atomicity", OrderedDict([("fh", args[0]),("flag", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_byte_offset(*args): - return MPICall("MPI_File_get_byte_offset", OrderedDict([("fh", args[0]), ("offset", args[1]), ("disp", args[2]), ]), "2.0") + return MPICall("MPI_File_get_byte_offset", OrderedDict([("fh", args[0]),("offset", args[1]),("disp", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_errhandler(*args): - return MPICall("MPI_File_get_errhandler", OrderedDict([("file", args[0]), ("errhandler", args[1]), ]), "2.0") + return MPICall("MPI_File_get_errhandler", OrderedDict([("file", args[0]),("errhandler", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_group(*args): - return MPICall("MPI_File_get_group", OrderedDict([("fh", args[0]), ("group", args[1]), ]), "2.0") + return MPICall("MPI_File_get_group", OrderedDict([("fh", args[0]),("group", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_info(*args): - return MPICall("MPI_File_get_info", OrderedDict([("fh", args[0]), ("info_used", args[1]), ]), "2.0") + return MPICall("MPI_File_get_info", OrderedDict([("fh", args[0]),("info_used", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_position(*args): - return MPICall("MPI_File_get_position", OrderedDict([("fh", args[0]), ("offset", args[1]), ]), "2.0") + return MPICall("MPI_File_get_position", OrderedDict([("fh", args[0]),("offset", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_position_shared(*args): - return MPICall("MPI_File_get_position_shared", OrderedDict([("fh", args[0]), ("offset", args[1]), ]), "2.0") + return MPICall("MPI_File_get_position_shared", OrderedDict([("fh", args[0]),("offset", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_size(*args): - return MPICall("MPI_File_get_size", OrderedDict([("fh", args[0]), ("size", args[1]), ]), "2.0") + return MPICall("MPI_File_get_size", OrderedDict([("fh", args[0]),("size", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_type_extent(*args): - return MPICall("MPI_File_get_type_extent", OrderedDict([("fh", args[0]), ("datatype", args[1]), ("extent", args[2]), ]), "2.0") + return MPICall("MPI_File_get_type_extent", OrderedDict([("fh", args[0]),("datatype", args[1]),("extent", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_file_get_view(*args): - return MPICall("MPI_File_get_view", OrderedDict([("fh", args[0]), ("disp", args[1]), ("etype", args[2]), ("filetype", args[3]), ("datarep", args[4]), ]), "2.0") + return MPICall("MPI_File_get_view", OrderedDict([("fh", args[0]),("disp", args[1]),("etype", args[2]),("filetype", args[3]),("datarep", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_iread(*args): - return MPICall("MPI_File_iread", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("request", args[4]), ]), "2.0") + return MPICall("MPI_File_iread", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("request", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_iread_all(*args): - return MPICall("MPI_File_iread_all", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("request", args[4]), ]), "3.1") + return MPICall("MPI_File_iread_all", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("request", args[4]),]), "3.1", bigints={}) @staticmethod def mpi_file_iread_at(*args): - return MPICall("MPI_File_iread_at", OrderedDict([("fh", args[0]), ("offset", args[1]), ("buf", args[2]), ("count", args[3]), ("datatype", args[4]), ("request", args[5]), ]), "2.0") + return MPICall("MPI_File_iread_at", OrderedDict([("fh", args[0]),("offset", args[1]),("buf", args[2]),("count", args[3]),("datatype", args[4]),("request", args[5]),]), "2.0", bigints={}) @staticmethod def mpi_file_iread_at_all(*args): - return MPICall("MPI_File_iread_at_all", OrderedDict([("fh", args[0]), ("offset", args[1]), ("buf", args[2]), ("count", args[3]), ("datatype", args[4]), ("request", args[5]), ]), "3.1") + return MPICall("MPI_File_iread_at_all", OrderedDict([("fh", args[0]),("offset", args[1]),("buf", args[2]),("count", args[3]),("datatype", args[4]),("request", args[5]),]), "3.1", bigints={}) @staticmethod def mpi_file_iread_shared(*args): - return MPICall("MPI_File_iread_shared", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("request", args[4]), ]), "2.0") + return MPICall("MPI_File_iread_shared", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("request", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_iwrite(*args): - return MPICall("MPI_File_iwrite", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("request", args[4]), ]), "2.0") + return MPICall("MPI_File_iwrite", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("request", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_iwrite_all(*args): - return MPICall("MPI_File_iwrite_all", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("request", args[4]), ]), "3.1") + return MPICall("MPI_File_iwrite_all", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("request", args[4]),]), "3.1", bigints={}) @staticmethod def mpi_file_iwrite_at(*args): - return MPICall("MPI_File_iwrite_at", OrderedDict([("fh", args[0]), ("offset", args[1]), ("buf", args[2]), ("count", args[3]), ("datatype", args[4]), ("request", args[5]), ]), "2.0") + return MPICall("MPI_File_iwrite_at", OrderedDict([("fh", args[0]),("offset", args[1]),("buf", args[2]),("count", args[3]),("datatype", args[4]),("request", args[5]),]), "2.0", bigints={}) @staticmethod def mpi_file_iwrite_at_all(*args): - return MPICall("MPI_File_iwrite_at_all", OrderedDict([("fh", args[0]), ("offset", args[1]), ("buf", args[2]), ("count", args[3]), ("datatype", args[4]), ("request", args[5]), ]), "3.1") + return MPICall("MPI_File_iwrite_at_all", OrderedDict([("fh", args[0]),("offset", args[1]),("buf", args[2]),("count", args[3]),("datatype", args[4]),("request", args[5]),]), "3.1", bigints={}) @staticmethod def mpi_file_iwrite_shared(*args): - return MPICall("MPI_File_iwrite_shared", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("request", args[4]), ]), "2.0") + return MPICall("MPI_File_iwrite_shared", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("request", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_open(*args): - return MPICall("MPI_File_open", OrderedDict([("comm", args[0]), ("filename", args[1]), ("amode", args[2]), ("info", args[3]), ("fh", args[4]), ]), "2.0") + return MPICall("MPI_File_open", OrderedDict([("comm", args[0]),("filename", args[1]),("amode", args[2]),("info", args[3]),("fh", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_preallocate(*args): - return MPICall("MPI_File_preallocate", OrderedDict([("fh", args[0]), ("size", args[1]), ]), "2.0") + return MPICall("MPI_File_preallocate", OrderedDict([("fh", args[0]),("size", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_read(*args): - return MPICall("MPI_File_read", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("status", args[4]), ]), "2.0") + return MPICall("MPI_File_read", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("status", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_all(*args): - return MPICall("MPI_File_read_all", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("status", args[4]), ]), "2.0") + return MPICall("MPI_File_read_all", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("status", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_all_begin(*args): - return MPICall("MPI_File_read_all_begin", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ]), "2.0") + return MPICall("MPI_File_read_all_begin", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_all_end(*args): - return MPICall("MPI_File_read_all_end", OrderedDict([("fh", args[0]), ("buf", args[1]), ("status", args[2]), ]), "2.0") + return MPICall("MPI_File_read_all_end", OrderedDict([("fh", args[0]),("buf", args[1]),("status", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_at(*args): - return MPICall("MPI_File_read_at", OrderedDict([("fh", args[0]), ("offset", args[1]), ("buf", args[2]), ("count", args[3]), ("datatype", args[4]), ("status", args[5]), ]), "2.0") + return MPICall("MPI_File_read_at", OrderedDict([("fh", args[0]),("offset", args[1]),("buf", args[2]),("count", args[3]),("datatype", args[4]),("status", args[5]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_at_all(*args): - return MPICall("MPI_File_read_at_all", OrderedDict([("fh", args[0]), ("offset", args[1]), ("buf", args[2]), ("count", args[3]), ("datatype", args[4]), ("status", args[5]), ]), "2.0") + return MPICall("MPI_File_read_at_all", OrderedDict([("fh", args[0]),("offset", args[1]),("buf", args[2]),("count", args[3]),("datatype", args[4]),("status", args[5]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_at_all_begin(*args): - return MPICall("MPI_File_read_at_all_begin", OrderedDict([("fh", args[0]), ("offset", args[1]), ("buf", args[2]), ("count", args[3]), ("datatype", args[4]), ]), "2.0") + return MPICall("MPI_File_read_at_all_begin", OrderedDict([("fh", args[0]),("offset", args[1]),("buf", args[2]),("count", args[3]),("datatype", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_at_all_end(*args): - return MPICall("MPI_File_read_at_all_end", OrderedDict([("fh", args[0]), ("buf", args[1]), ("status", args[2]), ]), "2.0") + return MPICall("MPI_File_read_at_all_end", OrderedDict([("fh", args[0]),("buf", args[1]),("status", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_ordered(*args): - return MPICall("MPI_File_read_ordered", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("status", args[4]), ]), "2.0") + return MPICall("MPI_File_read_ordered", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("status", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_ordered_begin(*args): - return MPICall("MPI_File_read_ordered_begin", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ]), "2.0") + return MPICall("MPI_File_read_ordered_begin", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_ordered_end(*args): - return MPICall("MPI_File_read_ordered_end", OrderedDict([("fh", args[0]), ("buf", args[1]), ("status", args[2]), ]), "2.0") + return MPICall("MPI_File_read_ordered_end", OrderedDict([("fh", args[0]),("buf", args[1]),("status", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_file_read_shared(*args): - return MPICall("MPI_File_read_shared", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("status", args[4]), ]), "2.0") + return MPICall("MPI_File_read_shared", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("status", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_seek(*args): - return MPICall("MPI_File_seek", OrderedDict([("fh", args[0]), ("offset", args[1]), ("whence", args[2]), ]), "2.0") + return MPICall("MPI_File_seek", OrderedDict([("fh", args[0]),("offset", args[1]),("whence", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_file_seek_shared(*args): - return MPICall("MPI_File_seek_shared", OrderedDict([("fh", args[0]), ("offset", args[1]), ("whence", args[2]), ]), "2.0") + return MPICall("MPI_File_seek_shared", OrderedDict([("fh", args[0]),("offset", args[1]),("whence", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_file_set_atomicity(*args): - return MPICall("MPI_File_set_atomicity", OrderedDict([("fh", args[0]), ("flag", args[1]), ]), "2.0") + return MPICall("MPI_File_set_atomicity", OrderedDict([("fh", args[0]),("flag", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_set_errhandler(*args): - return MPICall("MPI_File_set_errhandler", OrderedDict([("file", args[0]), ("errhandler", args[1]), ]), "2.0") + return MPICall("MPI_File_set_errhandler", OrderedDict([("file", args[0]),("errhandler", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_set_info(*args): - return MPICall("MPI_File_set_info", OrderedDict([("fh", args[0]), ("info", args[1]), ]), "2.0") + return MPICall("MPI_File_set_info", OrderedDict([("fh", args[0]),("info", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_set_size(*args): - return MPICall("MPI_File_set_size", OrderedDict([("fh", args[0]), ("size", args[1]), ]), "2.0") + return MPICall("MPI_File_set_size", OrderedDict([("fh", args[0]),("size", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_file_set_view(*args): - return MPICall("MPI_File_set_view", OrderedDict([("fh", args[0]), ("disp", args[1]), ("etype", args[2]), ("filetype", args[3]), ("datarep", args[4]), ("info", args[5]), ]), "2.0") + return MPICall("MPI_File_set_view", OrderedDict([("fh", args[0]),("disp", args[1]),("etype", args[2]),("filetype", args[3]),("datarep", args[4]),("info", args[5]),]), "2.0", bigints={}) @staticmethod def mpi_file_sync(*args): - return MPICall("MPI_File_sync", OrderedDict([("fh", args[0]), ]), "2.0") + return MPICall("MPI_File_sync", OrderedDict([("fh", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_file_write(*args): - return MPICall("MPI_File_write", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("status", args[4]), ]), "2.0") + return MPICall("MPI_File_write", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("status", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_all(*args): - return MPICall("MPI_File_write_all", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("status", args[4]), ]), "2.0") + return MPICall("MPI_File_write_all", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("status", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_all_begin(*args): - return MPICall("MPI_File_write_all_begin", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ]), "2.0") + return MPICall("MPI_File_write_all_begin", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_all_end(*args): - return MPICall("MPI_File_write_all_end", OrderedDict([("fh", args[0]), ("buf", args[1]), ("status", args[2]), ]), "2.0") + return MPICall("MPI_File_write_all_end", OrderedDict([("fh", args[0]),("buf", args[1]),("status", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_at(*args): - return MPICall("MPI_File_write_at", OrderedDict([("fh", args[0]), ("offset", args[1]), ("buf", args[2]), ("count", args[3]), ("datatype", args[4]), ("status", args[5]), ]), "2.0") + return MPICall("MPI_File_write_at", OrderedDict([("fh", args[0]),("offset", args[1]),("buf", args[2]),("count", args[3]),("datatype", args[4]),("status", args[5]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_at_all(*args): - return MPICall("MPI_File_write_at_all", OrderedDict([("fh", args[0]), ("offset", args[1]), ("buf", args[2]), ("count", args[3]), ("datatype", args[4]), ("status", args[5]), ]), "2.0") + return MPICall("MPI_File_write_at_all", OrderedDict([("fh", args[0]),("offset", args[1]),("buf", args[2]),("count", args[3]),("datatype", args[4]),("status", args[5]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_at_all_begin(*args): - return MPICall("MPI_File_write_at_all_begin", OrderedDict([("fh", args[0]), ("offset", args[1]), ("buf", args[2]), ("count", args[3]), ("datatype", args[4]), ]), "2.0") + return MPICall("MPI_File_write_at_all_begin", OrderedDict([("fh", args[0]),("offset", args[1]),("buf", args[2]),("count", args[3]),("datatype", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_at_all_end(*args): - return MPICall("MPI_File_write_at_all_end", OrderedDict([("fh", args[0]), ("buf", args[1]), ("status", args[2]), ]), "2.0") + return MPICall("MPI_File_write_at_all_end", OrderedDict([("fh", args[0]),("buf", args[1]),("status", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_ordered(*args): - return MPICall("MPI_File_write_ordered", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("status", args[4]), ]), "2.0") + return MPICall("MPI_File_write_ordered", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("status", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_ordered_begin(*args): - return MPICall("MPI_File_write_ordered_begin", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ]), "2.0") + return MPICall("MPI_File_write_ordered_begin", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_ordered_end(*args): - return MPICall("MPI_File_write_ordered_end", OrderedDict([("fh", args[0]), ("buf", args[1]), ("status", args[2]), ]), "2.0") + return MPICall("MPI_File_write_ordered_end", OrderedDict([("fh", args[0]),("buf", args[1]),("status", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_file_write_shared(*args): - return MPICall("MPI_File_write_shared", OrderedDict([("fh", args[0]), ("buf", args[1]), ("count", args[2]), ("datatype", args[3]), ("status", args[4]), ]), "2.0") + return MPICall("MPI_File_write_shared", OrderedDict([("fh", args[0]),("buf", args[1]),("count", args[2]),("datatype", args[3]),("status", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_finalize(*args): - return MPICall("MPI_Finalize", OrderedDict([]), "1.0") + return MPICall("MPI_Finalize", OrderedDict([]), "1.0", bigints={}) @staticmethod def mpi_finalized(*args): - return MPICall("MPI_Finalized", OrderedDict([("flag", args[0]), ]), "2.0") + return MPICall("MPI_Finalized", OrderedDict([("flag", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_free_mem(*args): - return MPICall("MPI_Free_mem", OrderedDict([("base", args[0]), ]), "2.0") + return MPICall("MPI_Free_mem", OrderedDict([("base", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_gather(*args): - return MPICall("MPI_Gather", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("root", args[6]), ("comm", args[7]), ]), "1.0") + return MPICall("MPI_Gather", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("root", args[6]),("comm", args[7]),]), "1.0", bigints={}) @staticmethod def mpi_gather_init(*args): - return MPICall("MPI_Gather_init", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("root", args[6]), ("comm", args[7]), ("info", args[8]), ("request", args[9]), ]), "4.0") + return MPICall("MPI_Gather_init", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("root", args[6]),("comm", args[7]),("info", args[8]),("request", args[9]),]), "4.0", bigints={}) @staticmethod def mpi_gatherv(*args): - return MPICall("MPI_Gatherv", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcounts", args[4]), ("displs", args[5]), ("recvtype", args[6]), ("root", args[7]), ("comm", args[8]), ]), "1.0") + return MPICall("MPI_Gatherv", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcounts", args[4]),("displs", args[5]),("recvtype", args[6]),("root", args[7]),("comm", args[8]),]), "1.0", bigints={}) @staticmethod def mpi_gatherv_init(*args): - return MPICall("MPI_Gatherv_init", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcounts", args[4]), ("displs", args[5]), ("recvtype", args[6]), ("root", args[7]), ("comm", args[8]), ("info", args[9]), ("request", args[10]), ]), "4.0") + return MPICall("MPI_Gatherv_init", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcounts", args[4]),("displs", args[5]),("recvtype", args[6]),("root", args[7]),("comm", args[8]),("info", args[9]),("request", args[10]),]), "4.0", bigints={}) @staticmethod def mpi_get(*args): - return MPICall("MPI_Get", OrderedDict([("origin_addr", args[0]), ("origin_count", args[1]), ("origin_datatype", args[2]), ("target_rank", args[3]), ("target_disp", args[4]), ("target_count", args[5]), ("target_datatype", args[6]), ("win", args[7]), ]), "2.0") + return MPICall("MPI_Get", OrderedDict([("origin_addr", args[0]),("origin_count", args[1]),("origin_datatype", args[2]),("target_rank", args[3]),("target_disp", args[4]),("target_count", args[5]),("target_datatype", args[6]),("win", args[7]),]), "2.0", bigints={'target_disp': 'mpi_address_kind'}) @staticmethod def mpi_get_accumulate(*args): - return MPICall("MPI_Get_accumulate", OrderedDict([("origin_addr", args[0]), ("origin_count", args[1]), ("origin_datatype", args[2]), ("result_addr", args[3]), ("result_count", args[4]), ("result_datatype", args[5]), ("target_rank", args[6]), ("target_disp", args[7]), ("target_count", args[8]), ("target_datatype", args[9]), ("op", args[10]), ("win", args[11]), ]), "3.0") + return MPICall("MPI_Get_accumulate", OrderedDict([("origin_addr", args[0]),("origin_count", args[1]),("origin_datatype", args[2]),("result_addr", args[3]),("result_count", args[4]),("result_datatype", args[5]),("target_rank", args[6]),("target_disp", args[7]),("target_count", args[8]),("target_datatype", args[9]),("op", args[10]),("win", args[11]),]), "3.0", bigints={'target_disp': 'mpi_address_kind'}) @staticmethod def mpi_get_address(*args): - return MPICall("MPI_Get_address", OrderedDict([("location", args[0]), ("address", args[1]), ]), "2.0") + return MPICall("MPI_Get_address", OrderedDict([("location", args[0]),("address", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_get_count(*args): - return MPICall("MPI_Get_count", OrderedDict([("status", args[0]), ("datatype", args[1]), ("count", args[2]), ]), "1.0") + return MPICall("MPI_Get_count", OrderedDict([("status", args[0]),("datatype", args[1]),("count", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_get_elements(*args): - return MPICall("MPI_Get_elements", OrderedDict([("status", args[0]), ("datatype", args[1]), ("count", args[2]), ]), "1.0") + return MPICall("MPI_Get_elements", OrderedDict([("status", args[0]),("datatype", args[1]),("count", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_get_elements_x(*args): - return MPICall("MPI_Get_elements_x", OrderedDict([("status", args[0]), ("datatype", args[1]), ("count", args[2]), ]), "3.0") + return MPICall("MPI_Get_elements_x", OrderedDict([("status", args[0]),("datatype", args[1]),("count", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_get_library_version(*args): - return MPICall("MPI_Get_library_version", OrderedDict([("version", args[0]), ("resultlen", args[1]), ]), "3.0") + return MPICall("MPI_Get_library_version", OrderedDict([("version", args[0]),("resultlen", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_get_processor_name(*args): - return MPICall("MPI_Get_processor_name", OrderedDict([("name", args[0]), ("resultlen", args[1]), ]), "1.0") + return MPICall("MPI_Get_processor_name", OrderedDict([("name", args[0]),("resultlen", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_get_version(*args): - return MPICall("MPI_Get_version", OrderedDict([("version", args[0]), ("subversion", args[1]), ]), "1.0") + return MPICall("MPI_Get_version", OrderedDict([("version", args[0]),("subversion", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_graph_create(*args): - return MPICall("MPI_Graph_create", OrderedDict([("comm_old", args[0]), ("nnodes", args[1]), ("index", args[2]), ("edges", args[3]), ("reorder", args[4]), ("comm_graph", args[5]), ]), "1.0") + return MPICall("MPI_Graph_create", OrderedDict([("comm_old", args[0]),("nnodes", args[1]),("index", args[2]),("edges", args[3]),("reorder", args[4]),("comm_graph", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_graph_get(*args): - return MPICall("MPI_Graph_get", OrderedDict([("comm", args[0]), ("maxindex", args[1]), ("maxedges", args[2]), ("index", args[3]), ("edges", args[4]), ]), "1.0") + return MPICall("MPI_Graph_get", OrderedDict([("comm", args[0]),("maxindex", args[1]),("maxedges", args[2]),("index", args[3]),("edges", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_graph_map(*args): - return MPICall("MPI_Graph_map", OrderedDict([("comm", args[0]), ("nnodes", args[1]), ("index", args[2]), ("edges", args[3]), ("newrank", args[4]), ]), "1.0") + return MPICall("MPI_Graph_map", OrderedDict([("comm", args[0]),("nnodes", args[1]),("index", args[2]),("edges", args[3]),("newrank", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_graph_neighbors(*args): - return MPICall("MPI_Graph_neighbors", OrderedDict([("comm", args[0]), ("rank", args[1]), ("maxneighbors", args[2]), ("neighbors", args[3]), ]), "1.0") + return MPICall("MPI_Graph_neighbors", OrderedDict([("comm", args[0]),("rank", args[1]),("maxneighbors", args[2]),("neighbors", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_graph_neighbors_count(*args): - return MPICall("MPI_Graph_neighbors_count", OrderedDict([("comm", args[0]), ("rank", args[1]), ("nneighbors", args[2]), ]), "1.0") + return MPICall("MPI_Graph_neighbors_count", OrderedDict([("comm", args[0]),("rank", args[1]),("nneighbors", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_graphdims_get(*args): - return MPICall("MPI_Graphdims_get", OrderedDict([("comm", args[0]), ("nnodes", args[1]), ("nedges", args[2]), ]), "1.0") + return MPICall("MPI_Graphdims_get", OrderedDict([("comm", args[0]),("nnodes", args[1]),("nedges", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_grequest_cancel_function(*args): - return MPICall("MPI_Grequest_cancel_function", OrderedDict([("extra_state", args[0]), ("complete", args[1]), ]), "2.0") + return MPICall("MPI_Grequest_cancel_function", OrderedDict([("extra_state", args[0]),("complete", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_grequest_complete(*args): - return MPICall("MPI_Grequest_complete", OrderedDict([("request", args[0]), ]), "2.0") + return MPICall("MPI_Grequest_complete", OrderedDict([("request", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_grequest_free_function(*args): - return MPICall("MPI_Grequest_free_function", OrderedDict([("extra_state", args[0]), ]), "2.0") + return MPICall("MPI_Grequest_free_function", OrderedDict([("extra_state", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_grequest_query_function(*args): - return MPICall("MPI_Grequest_query_function", OrderedDict([("extra_state", args[0]), ("status", args[1]), ]), "2.0") + return MPICall("MPI_Grequest_query_function", OrderedDict([("extra_state", args[0]),("status", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_grequest_start(*args): - return MPICall("MPI_Grequest_start", OrderedDict([("query_fn", args[0]), ("free_fn", args[1]), ("cancel_fn", args[2]), ("extra_state", args[3]), ("request", args[4]), ]), "2.0") + return MPICall("MPI_Grequest_start", OrderedDict([("query_fn", args[0]),("free_fn", args[1]),("cancel_fn", args[2]),("extra_state", args[3]),("request", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_group_c2f(*args): - return MPICall("MPI_Group_c2f", OrderedDict([("group", args[0]), ]), "2.0") + return MPICall("MPI_Group_c2f", OrderedDict([("group", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_group_compare(*args): - return MPICall("MPI_Group_compare", OrderedDict([("group1", args[0]), ("group2", args[1]), ("result", args[2]), ]), "1.0") + return MPICall("MPI_Group_compare", OrderedDict([("group1", args[0]),("group2", args[1]),("result", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_group_difference(*args): - return MPICall("MPI_Group_difference", OrderedDict([("group1", args[0]), ("group2", args[1]), ("newgroup", args[2]), ]), "1.0") + return MPICall("MPI_Group_difference", OrderedDict([("group1", args[0]),("group2", args[1]),("newgroup", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_group_excl(*args): - return MPICall("MPI_Group_excl", OrderedDict([("group", args[0]), ("n", args[1]), ("ranks", args[2]), ("newgroup", args[3]), ]), "1.0") + return MPICall("MPI_Group_excl", OrderedDict([("group", args[0]),("n", args[1]),("ranks", args[2]),("newgroup", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_group_f2c(*args): - return MPICall("MPI_Group_f2c", OrderedDict([("group", args[0]), ]), "2.0") + return MPICall("MPI_Group_f2c", OrderedDict([("group", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_group_free(*args): - return MPICall("MPI_Group_free", OrderedDict([("group", args[0]), ]), "1.0") + return MPICall("MPI_Group_free", OrderedDict([("group", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_group_from_session_pset(*args): - return MPICall("MPI_Group_from_session_pset", OrderedDict([("session", args[0]), ("pset_name", args[1]), ("newgroup", args[2]), ]), "4.0") + return MPICall("MPI_Group_from_session_pset", OrderedDict([("session", args[0]),("pset_name", args[1]),("newgroup", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_group_incl(*args): - return MPICall("MPI_Group_incl", OrderedDict([("group", args[0]), ("n", args[1]), ("ranks", args[2]), ("newgroup", args[3]), ]), "1.0") + return MPICall("MPI_Group_incl", OrderedDict([("group", args[0]),("n", args[1]),("ranks", args[2]),("newgroup", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_group_intersection(*args): - return MPICall("MPI_Group_intersection", OrderedDict([("group1", args[0]), ("group2", args[1]), ("newgroup", args[2]), ]), "1.0") + return MPICall("MPI_Group_intersection", OrderedDict([("group1", args[0]),("group2", args[1]),("newgroup", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_group_range_excl(*args): - return MPICall("MPI_Group_range_excl", OrderedDict([("group", args[0]), ("n", args[1]), ("ranges", args[2]), ("newgroup", args[3]), ]), "1.0") + return MPICall("MPI_Group_range_excl", OrderedDict([("group", args[0]),("n", args[1]),("ranges", args[2]),("newgroup", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_group_range_incl(*args): - return MPICall("MPI_Group_range_incl", OrderedDict([("group", args[0]), ("n", args[1]), ("ranges", args[2]), ("newgroup", args[3]), ]), "1.0") + return MPICall("MPI_Group_range_incl", OrderedDict([("group", args[0]),("n", args[1]),("ranges", args[2]),("newgroup", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_group_rank(*args): - return MPICall("MPI_Group_rank", OrderedDict([("group", args[0]), ("rank", args[1]), ]), "1.0") + return MPICall("MPI_Group_rank", OrderedDict([("group", args[0]),("rank", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_group_size(*args): - return MPICall("MPI_Group_size", OrderedDict([("group", args[0]), ("size", args[1]), ]), "1.0") + return MPICall("MPI_Group_size", OrderedDict([("group", args[0]),("size", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_group_translate_ranks(*args): - return MPICall("MPI_Group_translate_ranks", OrderedDict([("group1", args[0]), ("n", args[1]), ("ranks1", args[2]), ("group2", args[3]), ("ranks2", args[4]), ]), "1.0") + return MPICall("MPI_Group_translate_ranks", OrderedDict([("group1", args[0]),("n", args[1]),("ranks1", args[2]),("group2", args[3]),("ranks2", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_group_union(*args): - return MPICall("MPI_Group_union", OrderedDict([("group1", args[0]), ("group2", args[1]), ("newgroup", args[2]), ]), "1.0") + return MPICall("MPI_Group_union", OrderedDict([("group1", args[0]),("group2", args[1]),("newgroup", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_iallgather(*args): - return MPICall("MPI_Iallgather", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ("request", args[7]), ]), "3.0") + return MPICall("MPI_Iallgather", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),("request", args[7]),]), "3.0", bigints={}) @staticmethod def mpi_iallgatherv(*args): - return MPICall("MPI_Iallgatherv", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcounts", args[4]), ("displs", args[5]), ("recvtype", args[6]), ("comm", args[7]), ("request", args[8]), ]), "3.0") + return MPICall("MPI_Iallgatherv", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcounts", args[4]),("displs", args[5]),("recvtype", args[6]),("comm", args[7]),("request", args[8]),]), "3.0", bigints={}) @staticmethod def mpi_iallreduce(*args): - return MPICall("MPI_Iallreduce", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ("request", args[6]), ]), "3.0") + return MPICall("MPI_Iallreduce", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),("request", args[6]),]), "3.0", bigints={}) @staticmethod def mpi_ialltoall(*args): - return MPICall("MPI_Ialltoall", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ("request", args[7]), ]), "3.0") + return MPICall("MPI_Ialltoall", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),("request", args[7]),]), "3.0", bigints={}) @staticmethod def mpi_ialltoallv(*args): - return MPICall("MPI_Ialltoallv", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtype", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtype", args[7]), ("comm", args[8]), ("request", args[9]), ]), "3.0") + return MPICall("MPI_Ialltoallv", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtype", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtype", args[7]),("comm", args[8]),("request", args[9]),]), "3.0", bigints={}) @staticmethod def mpi_ialltoallw(*args): - return MPICall("MPI_Ialltoallw", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtypes", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtypes", args[7]), ("comm", args[8]), ("request", args[9]), ]), "3.0") + return MPICall("MPI_Ialltoallw", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtypes", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtypes", args[7]),("comm", args[8]),("request", args[9]),]), "3.0", bigints={}) @staticmethod def mpi_ibarrier(*args): - return MPICall("MPI_Ibarrier", OrderedDict([("comm", args[0]), ("request", args[1]), ]), "3.0") + return MPICall("MPI_Ibarrier", OrderedDict([("comm", args[0]),("request", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_ibcast(*args): - return MPICall("MPI_Ibcast", OrderedDict([("buffer", args[0]), ("count", args[1]), ("datatype", args[2]), ("root", args[3]), ("comm", args[4]), ("request", args[5]), ]), "3.0") + return MPICall("MPI_Ibcast", OrderedDict([("buffer", args[0]),("count", args[1]),("datatype", args[2]),("root", args[3]),("comm", args[4]),("request", args[5]),]), "3.0", bigints={}) @staticmethod def mpi_ibsend(*args): - return MPICall("MPI_Ibsend", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ("request", args[6]), ]), "1.0") + return MPICall("MPI_Ibsend", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),("request", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_iexscan(*args): - return MPICall("MPI_Iexscan", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ("request", args[6]), ]), "3.0") + return MPICall("MPI_Iexscan", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),("request", args[6]),]), "3.0", bigints={}) @staticmethod def mpi_igather(*args): - return MPICall("MPI_Igather", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("root", args[6]), ("comm", args[7]), ("request", args[8]), ]), "3.0") + return MPICall("MPI_Igather", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("root", args[6]),("comm", args[7]),("request", args[8]),]), "3.0", bigints={}) @staticmethod def mpi_igatherv(*args): - return MPICall("MPI_Igatherv", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcounts", args[4]), ("displs", args[5]), ("recvtype", args[6]), ("root", args[7]), ("comm", args[8]), ("request", args[9]), ]), "3.0") + return MPICall("MPI_Igatherv", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcounts", args[4]),("displs", args[5]),("recvtype", args[6]),("root", args[7]),("comm", args[8]),("request", args[9]),]), "3.0", bigints={}) @staticmethod def mpi_improbe(*args): - return MPICall("MPI_Improbe", OrderedDict([("source", args[0]), ("tag", args[1]), ("comm", args[2]), ("flag", args[3]), ("message", args[4]), ("status", args[5]), ]), "3.0") + return MPICall("MPI_Improbe", OrderedDict([("source", args[0]),("tag", args[1]),("comm", args[2]),("flag", args[3]),("message", args[4]),("status", args[5]),]), "3.0", bigints={}) @staticmethod def mpi_imrecv(*args): - return MPICall("MPI_Imrecv", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("message", args[3]), ("request", args[4]), ]), "3.0") + return MPICall("MPI_Imrecv", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("message", args[3]),("request", args[4]),]), "3.0", bigints={}) @staticmethod def mpi_ineighbor_allgather(*args): - return MPICall("MPI_Ineighbor_allgather", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ("request", args[7]), ]), "3.0") + return MPICall("MPI_Ineighbor_allgather", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),("request", args[7]),]), "3.0", bigints={}) @staticmethod def mpi_ineighbor_allgatherv(*args): - return MPICall("MPI_Ineighbor_allgatherv", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcounts", args[4]), ("displs", args[5]), ("recvtype", args[6]), ("comm", args[7]), ("request", args[8]), ]), "3.0") + return MPICall("MPI_Ineighbor_allgatherv", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcounts", args[4]),("displs", args[5]),("recvtype", args[6]),("comm", args[7]),("request", args[8]),]), "3.0", bigints={}) @staticmethod def mpi_ineighbor_alltoall(*args): - return MPICall("MPI_Ineighbor_alltoall", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ("request", args[7]), ]), "3.0") + return MPICall("MPI_Ineighbor_alltoall", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),("request", args[7]),]), "3.0", bigints={}) @staticmethod def mpi_ineighbor_alltoallv(*args): - return MPICall("MPI_Ineighbor_alltoallv", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtype", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtype", args[7]), ("comm", args[8]), ("request", args[9]), ]), "3.0") + return MPICall("MPI_Ineighbor_alltoallv", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtype", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtype", args[7]),("comm", args[8]),("request", args[9]),]), "3.0", bigints={}) @staticmethod def mpi_ineighbor_alltoallw(*args): - return MPICall("MPI_Ineighbor_alltoallw", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtypes", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtypes", args[7]), ("comm", args[8]), ("request", args[9]), ]), "3.0") + return MPICall("MPI_Ineighbor_alltoallw", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtypes", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtypes", args[7]),("comm", args[8]),("request", args[9]),]), "3.0", bigints={}) @staticmethod def mpi_info_c2f(*args): - return MPICall("MPI_Info_c2f", OrderedDict([("info", args[0]), ]), "2.0") + return MPICall("MPI_Info_c2f", OrderedDict([("info", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_info_create(*args): - return MPICall("MPI_Info_create", OrderedDict([("info", args[0]), ]), "2.0") + return MPICall("MPI_Info_create", OrderedDict([("info", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_info_create_env(*args): - return MPICall("MPI_Info_create_env", OrderedDict([("argc", args[0]), ("argv", args[1]), ("info", args[2]), ]), "4.0") + return MPICall("MPI_Info_create_env", OrderedDict([("argc", args[0]),("argv", args[1]),("info", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_info_delete(*args): - return MPICall("MPI_Info_delete", OrderedDict([("info", args[0]), ("key", args[1]), ]), "2.0") + return MPICall("MPI_Info_delete", OrderedDict([("info", args[0]),("key", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_info_dup(*args): - return MPICall("MPI_Info_dup", OrderedDict([("info", args[0]), ("newinfo", args[1]), ]), "2.0") + return MPICall("MPI_Info_dup", OrderedDict([("info", args[0]),("newinfo", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_info_f2c(*args): - return MPICall("MPI_Info_f2c", OrderedDict([("info", args[0]), ]), "2.0") + return MPICall("MPI_Info_f2c", OrderedDict([("info", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_info_free(*args): - return MPICall("MPI_Info_free", OrderedDict([("info", args[0]), ]), "2.0") + return MPICall("MPI_Info_free", OrderedDict([("info", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_info_get(*args): - return MPICall("MPI_Info_get", OrderedDict([("info", args[0]), ("key", args[1]), ("valuelen", args[2]), ("value", args[3]), ("flag", args[4]), ]), "2.0") + return MPICall("MPI_Info_get", OrderedDict([("info", args[0]),("key", args[1]),("valuelen", args[2]),("value", args[3]),("flag", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_info_get_nkeys(*args): - return MPICall("MPI_Info_get_nkeys", OrderedDict([("info", args[0]), ("nkeys", args[1]), ]), "2.0") + return MPICall("MPI_Info_get_nkeys", OrderedDict([("info", args[0]),("nkeys", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_info_get_nthkey(*args): - return MPICall("MPI_Info_get_nthkey", OrderedDict([("info", args[0]), ("n", args[1]), ("key", args[2]), ]), "2.0") + return MPICall("MPI_Info_get_nthkey", OrderedDict([("info", args[0]),("n", args[1]),("key", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_info_get_string(*args): - return MPICall("MPI_Info_get_string", OrderedDict([("info", args[0]), ("key", args[1]), ("buflen", args[2]), ("value", args[3]), ("flag", args[4]), ]), "4.0") + return MPICall("MPI_Info_get_string", OrderedDict([("info", args[0]),("key", args[1]),("buflen", args[2]),("value", args[3]),("flag", args[4]),]), "4.0", bigints={}) @staticmethod def mpi_info_get_valuelen(*args): - return MPICall("MPI_Info_get_valuelen", OrderedDict([("info", args[0]), ("key", args[1]), ("valuelen", args[2]), ("flag", args[3]), ]), "2.0") + return MPICall("MPI_Info_get_valuelen", OrderedDict([("info", args[0]),("key", args[1]),("valuelen", args[2]),("flag", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_info_set(*args): - return MPICall("MPI_Info_set", OrderedDict([("info", args[0]), ("key", args[1]), ("value", args[2]), ]), "2.0") + return MPICall("MPI_Info_set", OrderedDict([("info", args[0]),("key", args[1]),("value", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_init(*args): - return MPICall("MPI_Init", OrderedDict([("argc", args[0]), ("argv", args[1]), ]), "1.0") + return MPICall("MPI_Init", OrderedDict([("argc", args[0]),("argv", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_init_thread(*args): - return MPICall("MPI_Init_thread", OrderedDict([("argc", args[0]), ("argv", args[1]), ("required", args[2]), ("provided", args[3]), ]), "2.0") + return MPICall("MPI_Init_thread", OrderedDict([("argc", args[0]),("argv", args[1]),("required", args[2]),("provided", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_initialized(*args): - return MPICall("MPI_Initialized", OrderedDict([("flag", args[0]), ]), "1.0") + return MPICall("MPI_Initialized", OrderedDict([("flag", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_intercomm_create(*args): - return MPICall("MPI_Intercomm_create", OrderedDict([("local_comm", args[0]), ("local_leader", args[1]), ("peer_comm", args[2]), ("remote_leader", args[3]), ("tag", args[4]), ("newintercomm", args[5]), ]), "1.0") + return MPICall("MPI_Intercomm_create", OrderedDict([("local_comm", args[0]),("local_leader", args[1]),("peer_comm", args[2]),("remote_leader", args[3]),("tag", args[4]),("newintercomm", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_intercomm_create_from_groups(*args): - return MPICall("MPI_Intercomm_create_from_groups", OrderedDict([("local_group", args[0]), ("local_leader", args[1]), ("remote_group", args[2]), ("remote_leader", args[3]), ("stringtag", args[4]), ("info", args[5]), ("errhandler", args[6]), ("newintercomm", args[7]), ]), "4.0") + return MPICall("MPI_Intercomm_create_from_groups", OrderedDict([("local_group", args[0]),("local_leader", args[1]),("remote_group", args[2]),("remote_leader", args[3]),("stringtag", args[4]),("info", args[5]),("errhandler", args[6]),("newintercomm", args[7]),]), "4.0", bigints={}) @staticmethod def mpi_intercomm_merge(*args): - return MPICall("MPI_Intercomm_merge", OrderedDict([("intercomm", args[0]), ("high", args[1]), ("newintracomm", args[2]), ]), "1.0") + return MPICall("MPI_Intercomm_merge", OrderedDict([("intercomm", args[0]),("high", args[1]),("newintracomm", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_iprobe(*args): - return MPICall("MPI_Iprobe", OrderedDict([("source", args[0]), ("tag", args[1]), ("comm", args[2]), ("flag", args[3]), ("status", args[4]), ]), "1.0") + return MPICall("MPI_Iprobe", OrderedDict([("source", args[0]),("tag", args[1]),("comm", args[2]),("flag", args[3]),("status", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_irecv(*args): - return MPICall("MPI_Irecv", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("source", args[3]), ("tag", args[4]), ("comm", args[5]), ("request", args[6]), ]), "1.0") + return MPICall("MPI_Irecv", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("source", args[3]),("tag", args[4]),("comm", args[5]),("request", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_ireduce(*args): - return MPICall("MPI_Ireduce", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("root", args[5]), ("comm", args[6]), ("request", args[7]), ]), "3.0") + return MPICall("MPI_Ireduce", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("root", args[5]),("comm", args[6]),("request", args[7]),]), "3.0", bigints={}) @staticmethod def mpi_ireduce_scatter(*args): - return MPICall("MPI_Ireduce_scatter", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("recvcounts", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ("request", args[6]), ]), "3.0") + return MPICall("MPI_Ireduce_scatter", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("recvcounts", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),("request", args[6]),]), "3.0", bigints={}) @staticmethod def mpi_ireduce_scatter_block(*args): - return MPICall("MPI_Ireduce_scatter_block", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("recvcount", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ("request", args[6]), ]), "3.0") + return MPICall("MPI_Ireduce_scatter_block", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("recvcount", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),("request", args[6]),]), "3.0", bigints={}) @staticmethod def mpi_irsend(*args): - return MPICall("MPI_Irsend", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ("request", args[6]), ]), "1.0") + return MPICall("MPI_Irsend", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),("request", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_is_thread_main(*args): - return MPICall("MPI_Is_thread_main", OrderedDict([("flag", args[0]), ]), "2.0") + return MPICall("MPI_Is_thread_main", OrderedDict([("flag", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_iscan(*args): - return MPICall("MPI_Iscan", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ("request", args[6]), ]), "3.0") + return MPICall("MPI_Iscan", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),("request", args[6]),]), "3.0", bigints={}) @staticmethod def mpi_iscatter(*args): - return MPICall("MPI_Iscatter", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("root", args[6]), ("comm", args[7]), ("request", args[8]), ]), "3.0") + return MPICall("MPI_Iscatter", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("root", args[6]),("comm", args[7]),("request", args[8]),]), "3.0", bigints={}) @staticmethod def mpi_iscatterv(*args): - return MPICall("MPI_Iscatterv", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("displs", args[2]), ("sendtype", args[3]), ("recvbuf", args[4]), ("recvcount", args[5]), ("recvtype", args[6]), ("root", args[7]), ("comm", args[8]), ("request", args[9]), ]), "3.0") + return MPICall("MPI_Iscatterv", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("displs", args[2]),("sendtype", args[3]),("recvbuf", args[4]),("recvcount", args[5]),("recvtype", args[6]),("root", args[7]),("comm", args[8]),("request", args[9]),]), "3.0", bigints={}) @staticmethod def mpi_isend(*args): - return MPICall("MPI_Isend", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ("request", args[6]), ]), "1.0") + return MPICall("MPI_Isend", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),("request", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_isendrecv(*args): - return MPICall("MPI_Isendrecv", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("dest", args[3]), ("sendtag", args[4]), ("recvbuf", args[5]), ("recvcount", args[6]), ("recvtype", args[7]), ("source", args[8]), ("recvtag", args[9]), ("comm", args[10]), ("request", args[11]), ]), "4.0") + return MPICall("MPI_Isendrecv", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("dest", args[3]),("sendtag", args[4]),("recvbuf", args[5]),("recvcount", args[6]),("recvtype", args[7]),("source", args[8]),("recvtag", args[9]),("comm", args[10]),("request", args[11]),]), "4.0", bigints={}) @staticmethod def mpi_isendrecv_replace(*args): - return MPICall("MPI_Isendrecv_replace", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("sendtag", args[4]), ("source", args[5]), ("recvtag", args[6]), ("comm", args[7]), ("request", args[8]), ]), "4.0") + return MPICall("MPI_Isendrecv_replace", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("sendtag", args[4]),("source", args[5]),("recvtag", args[6]),("comm", args[7]),("request", args[8]),]), "4.0", bigints={}) @staticmethod def mpi_issend(*args): - return MPICall("MPI_Issend", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ("request", args[6]), ]), "1.0") + return MPICall("MPI_Issend", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),("request", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_keyval_create(*args): - return MPICall("MPI_Keyval_create", OrderedDict([("copy_fn", args[0]), ("delete_fn", args[1]), ("keyval", args[2]), ("extra_state", args[3]), ]), "1.0") + return MPICall("MPI_Keyval_create", OrderedDict([("copy_fn", args[0]),("delete_fn", args[1]),("keyval", args[2]),("extra_state", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_keyval_free(*args): - return MPICall("MPI_Keyval_free", OrderedDict([("keyval", args[0]), ]), "1.0") + return MPICall("MPI_Keyval_free", OrderedDict([("keyval", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_lookup_name(*args): - return MPICall("MPI_Lookup_name", OrderedDict([("service_name", args[0]), ("info", args[1]), ("port_name", args[2]), ]), "2.0") + return MPICall("MPI_Lookup_name", OrderedDict([("service_name", args[0]),("info", args[1]),("port_name", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_message_c2f(*args): - return MPICall("MPI_Message_c2f", OrderedDict([("message", args[0]), ]), "4.0") + return MPICall("MPI_Message_c2f", OrderedDict([("message", args[0]),]), "4.0", bigints={}) @staticmethod def mpi_message_f2c(*args): - return MPICall("MPI_Message_f2c", OrderedDict([("message", args[0]), ]), "4.0") + return MPICall("MPI_Message_f2c", OrderedDict([("message", args[0]),]), "4.0", bigints={}) @staticmethod def mpi_mprobe(*args): - return MPICall("MPI_Mprobe", OrderedDict([("source", args[0]), ("tag", args[1]), ("comm", args[2]), ("message", args[3]), ("status", args[4]), ]), "3.0") + return MPICall("MPI_Mprobe", OrderedDict([("source", args[0]),("tag", args[1]),("comm", args[2]),("message", args[3]),("status", args[4]),]), "3.0", bigints={}) @staticmethod def mpi_mrecv(*args): - return MPICall("MPI_Mrecv", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("message", args[3]), ("status", args[4]), ]), "3.0") + return MPICall("MPI_Mrecv", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("message", args[3]),("status", args[4]),]), "3.0", bigints={}) @staticmethod def mpi_neighbor_allgather(*args): - return MPICall("MPI_Neighbor_allgather", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ]), "3.0") + return MPICall("MPI_Neighbor_allgather", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),]), "3.0", bigints={}) @staticmethod def mpi_neighbor_allgather_init(*args): - return MPICall("MPI_Neighbor_allgather_init", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ("info", args[7]), ("request", args[8]), ]), "4.0") + return MPICall("MPI_Neighbor_allgather_init", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),("info", args[7]),("request", args[8]),]), "4.0", bigints={}) @staticmethod def mpi_neighbor_allgatherv(*args): - return MPICall("MPI_Neighbor_allgatherv", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcounts", args[4]), ("displs", args[5]), ("recvtype", args[6]), ("comm", args[7]), ]), "3.0") + return MPICall("MPI_Neighbor_allgatherv", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcounts", args[4]),("displs", args[5]),("recvtype", args[6]),("comm", args[7]),]), "3.0", bigints={}) @staticmethod def mpi_neighbor_allgatherv_init(*args): - return MPICall("MPI_Neighbor_allgatherv_init", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcounts", args[4]), ("displs", args[5]), ("recvtype", args[6]), ("comm", args[7]), ("info", args[8]), ("request", args[9]), ]), "4.0") + return MPICall("MPI_Neighbor_allgatherv_init", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcounts", args[4]),("displs", args[5]),("recvtype", args[6]),("comm", args[7]),("info", args[8]),("request", args[9]),]), "4.0", bigints={}) @staticmethod def mpi_neighbor_alltoall(*args): - return MPICall("MPI_Neighbor_alltoall", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ]), "3.0") + return MPICall("MPI_Neighbor_alltoall", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),]), "3.0", bigints={}) @staticmethod def mpi_neighbor_alltoall_init(*args): - return MPICall("MPI_Neighbor_alltoall_init", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("comm", args[6]), ("info", args[7]), ("request", args[8]), ]), "4.0") + return MPICall("MPI_Neighbor_alltoall_init", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("comm", args[6]),("info", args[7]),("request", args[8]),]), "4.0", bigints={}) @staticmethod def mpi_neighbor_alltoallv(*args): - return MPICall("MPI_Neighbor_alltoallv", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtype", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtype", args[7]), ("comm", args[8]), ]), "3.0") + return MPICall("MPI_Neighbor_alltoallv", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtype", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtype", args[7]),("comm", args[8]),]), "3.0", bigints={}) @staticmethod def mpi_neighbor_alltoallv_init(*args): - return MPICall("MPI_Neighbor_alltoallv_init", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtype", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtype", args[7]), ("comm", args[8]), ("info", args[9]), ("request", args[10]), ]), "4.0") + return MPICall("MPI_Neighbor_alltoallv_init", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtype", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtype", args[7]),("comm", args[8]),("info", args[9]),("request", args[10]),]), "4.0", bigints={}) @staticmethod def mpi_neighbor_alltoallw(*args): - return MPICall("MPI_Neighbor_alltoallw", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtypes", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtypes", args[7]), ("comm", args[8]), ]), "3.0") + return MPICall("MPI_Neighbor_alltoallw", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtypes", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtypes", args[7]),("comm", args[8]),]), "3.0", bigints={}) @staticmethod def mpi_neighbor_alltoallw_init(*args): - return MPICall("MPI_Neighbor_alltoallw_init", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("sdispls", args[2]), ("sendtypes", args[3]), ("recvbuf", args[4]), ("recvcounts", args[5]), ("rdispls", args[6]), ("recvtypes", args[7]), ("comm", args[8]), ("info", args[9]), ("request", args[10]), ]), "4.0") + return MPICall("MPI_Neighbor_alltoallw_init", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("sdispls", args[2]),("sendtypes", args[3]),("recvbuf", args[4]),("recvcounts", args[5]),("rdispls", args[6]),("recvtypes", args[7]),("comm", args[8]),("info", args[9]),("request", args[10]),]), "4.0", bigints={}) @staticmethod def mpi_null_copy_fn(*args): - return MPICall("MPI_NULL_COPY_FN", OrderedDict([("oldcomm", args[0]), ("keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "4.0") + return MPICall("MPI_NULL_COPY_FN", OrderedDict([("oldcomm", args[0]),("keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_null_delete_fn(*args): - return MPICall("MPI_NULL_DELETE_FN", OrderedDict([("comm", args[0]), ("keyval", args[1]), ("attribute_val", args[2]), ("extra_state", args[3]), ]), "4.0") + return MPICall("MPI_NULL_DELETE_FN", OrderedDict([("comm", args[0]),("keyval", args[1]),("attribute_val", args[2]),("extra_state", args[3]),]), "4.0", bigints={}) @staticmethod def mpi_op_c2f(*args): - return MPICall("MPI_Op_c2f", OrderedDict([("op", args[0]), ]), "2.0") + return MPICall("MPI_Op_c2f", OrderedDict([("op", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_op_commutative(*args): - return MPICall("MPI_Op_commutative", OrderedDict([("op", args[0]), ("commute", args[1]), ]), "2.2") + return MPICall("MPI_Op_commutative", OrderedDict([("op", args[0]),("commute", args[1]),]), "2.2", bigints={}) @staticmethod def mpi_op_create(*args): - return MPICall("MPI_Op_create", OrderedDict([("user_fn", args[0]), ("commute", args[1]), ("op", args[2]), ]), "1.0") + return MPICall("MPI_Op_create", OrderedDict([("user_fn", args[0]),("commute", args[1]),("op", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_op_f2c(*args): - return MPICall("MPI_Op_f2c", OrderedDict([("op", args[0]), ]), "2.0") + return MPICall("MPI_Op_f2c", OrderedDict([("op", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_op_free(*args): - return MPICall("MPI_Op_free", OrderedDict([("op", args[0]), ]), "1.0") + return MPICall("MPI_Op_free", OrderedDict([("op", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_open_port(*args): - return MPICall("MPI_Open_port", OrderedDict([("info", args[0]), ("port_name", args[1]), ]), "2.0") + return MPICall("MPI_Open_port", OrderedDict([("info", args[0]),("port_name", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_pack(*args): - return MPICall("MPI_Pack", OrderedDict([("inbuf", args[0]), ("incount", args[1]), ("datatype", args[2]), ("outbuf", args[3]), ("outsize", args[4]), ("position", args[5]), ("comm", args[6]), ]), "1.0") + return MPICall("MPI_Pack", OrderedDict([("inbuf", args[0]),("incount", args[1]),("datatype", args[2]),("outbuf", args[3]),("outsize", args[4]),("position", args[5]),("comm", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_pack_external(*args): - return MPICall("MPI_Pack_external", OrderedDict([("datarep", args[0]), ("inbuf", args[1]), ("incount", args[2]), ("datatype", args[3]), ("outbuf", args[4]), ("outsize", args[5]), ("position", args[6]), ]), "2.0") + return MPICall("MPI_Pack_external", OrderedDict([("datarep", args[0]),("inbuf", args[1]),("incount", args[2]),("datatype", args[3]),("outbuf", args[4]),("outsize", args[5]),("position", args[6]),]), "2.0", bigints={}) @staticmethod def mpi_pack_external_size(*args): - return MPICall("MPI_Pack_external_size", OrderedDict([("datarep", args[0]), ("incount", args[1]), ("datatype", args[2]), ("size", args[3]), ]), "2.0") + return MPICall("MPI_Pack_external_size", OrderedDict([("datarep", args[0]),("incount", args[1]),("datatype", args[2]),("size", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_pack_size(*args): - return MPICall("MPI_Pack_size", OrderedDict([("incount", args[0]), ("datatype", args[1]), ("comm", args[2]), ("size", args[3]), ]), "1.0") + return MPICall("MPI_Pack_size", OrderedDict([("incount", args[0]),("datatype", args[1]),("comm", args[2]),("size", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_parrived(*args): - return MPICall("MPI_Parrived", OrderedDict([("request", args[0]), ("partition", args[1]), ("flag", args[2]), ]), "4.0") + return MPICall("MPI_Parrived", OrderedDict([("request", args[0]),("partition", args[1]),("flag", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_pcontrol(*args): - return MPICall("MPI_Pcontrol", OrderedDict([("level", args[0]), ("varargs", args[1]), ]), "1.0") + return MPICall("MPI_Pcontrol", OrderedDict([("level", args[0]),("varargs", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_pready(*args): - return MPICall("MPI_Pready", OrderedDict([("partition", args[0]), ("request", args[1]), ]), "4.0") + return MPICall("MPI_Pready", OrderedDict([("partition", args[0]),("request", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_pready_list(*args): - return MPICall("MPI_Pready_list", OrderedDict([("length", args[0]), ("array_of_partitions", args[1]), ("request", args[2]), ]), "4.0") + return MPICall("MPI_Pready_list", OrderedDict([("length", args[0]),("array_of_partitions", args[1]),("request", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_pready_range(*args): - return MPICall("MPI_Pready_range", OrderedDict([("partition_low", args[0]), ("partition_high", args[1]), ("request", args[2]), ]), "4.0") + return MPICall("MPI_Pready_range", OrderedDict([("partition_low", args[0]),("partition_high", args[1]),("request", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_precv_init(*args): - return MPICall("MPI_Precv_init", OrderedDict([("buf", args[0]), ("partitions", args[1]), ("count", args[2]), ("datatype", args[3]), ("source", args[4]), ("tag", args[5]), ("comm", args[6]), ("info", args[7]), ("request", args[8]), ]), "4.0") + return MPICall("MPI_Precv_init", OrderedDict([("buf", args[0]),("partitions", args[1]),("count", args[2]),("datatype", args[3]),("source", args[4]),("tag", args[5]),("comm", args[6]),("info", args[7]),("request", args[8]),]), "4.0", bigints={'count': 'mpi_count_kind'}) @staticmethod def mpi_probe(*args): - return MPICall("MPI_Probe", OrderedDict([("source", args[0]), ("tag", args[1]), ("comm", args[2]), ("status", args[3]), ]), "1.0") + return MPICall("MPI_Probe", OrderedDict([("source", args[0]),("tag", args[1]),("comm", args[2]),("status", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_psend_init(*args): - return MPICall("MPI_Psend_init", OrderedDict([("buf", args[0]), ("partitions", args[1]), ("count", args[2]), ("datatype", args[3]), ("dest", args[4]), ("tag", args[5]), ("comm", args[6]), ("info", args[7]), ("request", args[8]), ]), "4.0") + return MPICall("MPI_Psend_init", OrderedDict([("buf", args[0]),("partitions", args[1]),("count", args[2]),("datatype", args[3]),("dest", args[4]),("tag", args[5]),("comm", args[6]),("info", args[7]),("request", args[8]),]), "4.0", bigints={'count': 'mpi_count_kind'}) @staticmethod def mpi_publish_name(*args): - return MPICall("MPI_Publish_name", OrderedDict([("service_name", args[0]), ("info", args[1]), ("port_name", args[2]), ]), "2.0") + return MPICall("MPI_Publish_name", OrderedDict([("service_name", args[0]),("info", args[1]),("port_name", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_put(*args): - return MPICall("MPI_Put", OrderedDict([("origin_addr", args[0]), ("origin_count", args[1]), ("origin_datatype", args[2]), ("target_rank", args[3]), ("target_disp", args[4]), ("target_count", args[5]), ("target_datatype", args[6]), ("win", args[7]), ]), "2.0") + return MPICall("MPI_Put", OrderedDict([("origin_addr", args[0]),("origin_count", args[1]),("origin_datatype", args[2]),("target_rank", args[3]),("target_disp", args[4]),("target_count", args[5]),("target_datatype", args[6]),("win", args[7]),]), "2.0", bigints={'target_disp': 'mpi_address_kind'}) @staticmethod def mpi_query_thread(*args): - return MPICall("MPI_Query_thread", OrderedDict([("provided", args[0]), ]), "2.0") + return MPICall("MPI_Query_thread", OrderedDict([("provided", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_raccumulate(*args): - return MPICall("MPI_Raccumulate", OrderedDict([("origin_addr", args[0]), ("origin_count", args[1]), ("origin_datatype", args[2]), ("target_rank", args[3]), ("target_disp", args[4]), ("target_count", args[5]), ("target_datatype", args[6]), ("op", args[7]), ("win", args[8]), ("request", args[9]), ]), "3.0") + return MPICall("MPI_Raccumulate", OrderedDict([("origin_addr", args[0]),("origin_count", args[1]),("origin_datatype", args[2]),("target_rank", args[3]),("target_disp", args[4]),("target_count", args[5]),("target_datatype", args[6]),("op", args[7]),("win", args[8]),("request", args[9]),]), "3.0", bigints={'target_disp': 'mpi_address_kind'}) @staticmethod def mpi_recv(*args): - return MPICall("MPI_Recv", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("source", args[3]), ("tag", args[4]), ("comm", args[5]), ("status", args[6]), ]), "1.0") + return MPICall("MPI_Recv", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("source", args[3]),("tag", args[4]),("comm", args[5]),("status", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_recv_init(*args): - return MPICall("MPI_Recv_init", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("source", args[3]), ("tag", args[4]), ("comm", args[5]), ("request", args[6]), ]), "1.0") + return MPICall("MPI_Recv_init", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("source", args[3]),("tag", args[4]),("comm", args[5]),("request", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_reduce(*args): - return MPICall("MPI_Reduce", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("root", args[5]), ("comm", args[6]), ]), "1.0") + return MPICall("MPI_Reduce", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("root", args[5]),("comm", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_reduce_init(*args): - return MPICall("MPI_Reduce_init", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("root", args[5]), ("comm", args[6]), ("info", args[7]), ("request", args[8]), ]), "4.0") + return MPICall("MPI_Reduce_init", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("root", args[5]),("comm", args[6]),("info", args[7]),("request", args[8]),]), "4.0", bigints={}) @staticmethod def mpi_reduce_local(*args): - return MPICall("MPI_Reduce_local", OrderedDict([("inbuf", args[0]), ("inoutbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ]), "2.2") + return MPICall("MPI_Reduce_local", OrderedDict([("inbuf", args[0]),("inoutbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),]), "2.2", bigints={}) @staticmethod def mpi_reduce_scatter(*args): - return MPICall("MPI_Reduce_scatter", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("recvcounts", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ]), "1.0") + return MPICall("MPI_Reduce_scatter", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("recvcounts", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_reduce_scatter_block(*args): - return MPICall("MPI_Reduce_scatter_block", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("recvcount", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ]), "2.2") + return MPICall("MPI_Reduce_scatter_block", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("recvcount", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),]), "2.2", bigints={}) @staticmethod def mpi_reduce_scatter_block_init(*args): - return MPICall("MPI_Reduce_scatter_block_init", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("recvcount", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ("info", args[6]), ("request", args[7]), ]), "4.0") + return MPICall("MPI_Reduce_scatter_block_init", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("recvcount", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),("info", args[6]),("request", args[7]),]), "4.0", bigints={}) @staticmethod def mpi_reduce_scatter_init(*args): - return MPICall("MPI_Reduce_scatter_init", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("recvcounts", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ("info", args[6]), ("request", args[7]), ]), "4.0") + return MPICall("MPI_Reduce_scatter_init", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("recvcounts", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),("info", args[6]),("request", args[7]),]), "4.0", bigints={}) @staticmethod def mpi_register_datarep(*args): - return MPICall("MPI_Register_datarep", OrderedDict([("datarep", args[0]), ("read_conversion_fn", args[1]), ("write_conversion_fn", args[2]), ("dtype_file_extent_fn", args[3]), ("extra_state", args[4]), ]), "2.0") + return MPICall("MPI_Register_datarep", OrderedDict([("datarep", args[0]),("read_conversion_fn", args[1]),("write_conversion_fn", args[2]),("dtype_file_extent_fn", args[3]),("extra_state", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_request_c2f(*args): - return MPICall("MPI_Request_c2f", OrderedDict([("request", args[0]), ]), "2.0") + return MPICall("MPI_Request_c2f", OrderedDict([("request", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_request_f2c(*args): - return MPICall("MPI_Request_f2c", OrderedDict([("request", args[0]), ]), "2.0") + return MPICall("MPI_Request_f2c", OrderedDict([("request", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_request_free(*args): - return MPICall("MPI_Request_free", OrderedDict([("request", args[0]), ]), "1.0") + return MPICall("MPI_Request_free", OrderedDict([("request", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_request_get_status(*args): - return MPICall("MPI_Request_get_status", OrderedDict([("request", args[0]), ("flag", args[1]), ("status", args[2]), ]), "2.0") + return MPICall("MPI_Request_get_status", OrderedDict([("request", args[0]),("flag", args[1]),("status", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_rget(*args): - return MPICall("MPI_Rget", OrderedDict([("origin_addr", args[0]), ("origin_count", args[1]), ("origin_datatype", args[2]), ("target_rank", args[3]), ("target_disp", args[4]), ("target_count", args[5]), ("target_datatype", args[6]), ("win", args[7]), ("request", args[8]), ]), "3.0") + return MPICall("MPI_Rget", OrderedDict([("origin_addr", args[0]),("origin_count", args[1]),("origin_datatype", args[2]),("target_rank", args[3]),("target_disp", args[4]),("target_count", args[5]),("target_datatype", args[6]),("win", args[7]),("request", args[8]),]), "3.0", bigints={'target_disp': 'mpi_address_kind'}) @staticmethod def mpi_rget_accumulate(*args): - return MPICall("MPI_Rget_accumulate", OrderedDict([("origin_addr", args[0]), ("origin_count", args[1]), ("origin_datatype", args[2]), ("result_addr", args[3]), ("result_count", args[4]), ("result_datatype", args[5]), ("target_rank", args[6]), ("target_disp", args[7]), ("target_count", args[8]), ("target_datatype", args[9]), ("op", args[10]), ("win", args[11]), ("request", args[12]), ]), "3.0") + return MPICall("MPI_Rget_accumulate", OrderedDict([("origin_addr", args[0]),("origin_count", args[1]),("origin_datatype", args[2]),("result_addr", args[3]),("result_count", args[4]),("result_datatype", args[5]),("target_rank", args[6]),("target_disp", args[7]),("target_count", args[8]),("target_datatype", args[9]),("op", args[10]),("win", args[11]),("request", args[12]),]), "3.0", bigints={'target_disp': 'mpi_address_kind'}) @staticmethod def mpi_rput(*args): - return MPICall("MPI_Rput", OrderedDict([("origin_addr", args[0]), ("origin_count", args[1]), ("origin_datatype", args[2]), ("target_rank", args[3]), ("target_disp", args[4]), ("target_count", args[5]), ("target_datatype", args[6]), ("win", args[7]), ("request", args[8]), ]), "3.0") + return MPICall("MPI_Rput", OrderedDict([("origin_addr", args[0]),("origin_count", args[1]),("origin_datatype", args[2]),("target_rank", args[3]),("target_disp", args[4]),("target_count", args[5]),("target_datatype", args[6]),("win", args[7]),("request", args[8]),]), "3.0", bigints={'target_disp': 'mpi_address_kind'}) @staticmethod def mpi_rsend(*args): - return MPICall("MPI_Rsend", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ]), "1.0") + return MPICall("MPI_Rsend", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_rsend_init(*args): - return MPICall("MPI_Rsend_init", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ("request", args[6]), ]), "1.0") + return MPICall("MPI_Rsend_init", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),("request", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_scan(*args): - return MPICall("MPI_Scan", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ]), "1.0") + return MPICall("MPI_Scan", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_scan_init(*args): - return MPICall("MPI_Scan_init", OrderedDict([("sendbuf", args[0]), ("recvbuf", args[1]), ("count", args[2]), ("datatype", args[3]), ("op", args[4]), ("comm", args[5]), ("info", args[6]), ("request", args[7]), ]), "4.0") + return MPICall("MPI_Scan_init", OrderedDict([("sendbuf", args[0]),("recvbuf", args[1]),("count", args[2]),("datatype", args[3]),("op", args[4]),("comm", args[5]),("info", args[6]),("request", args[7]),]), "4.0", bigints={}) @staticmethod def mpi_scatter(*args): - return MPICall("MPI_Scatter", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("root", args[6]), ("comm", args[7]), ]), "1.0") + return MPICall("MPI_Scatter", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("root", args[6]),("comm", args[7]),]), "1.0", bigints={}) @staticmethod def mpi_scatter_init(*args): - return MPICall("MPI_Scatter_init", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("recvbuf", args[3]), ("recvcount", args[4]), ("recvtype", args[5]), ("root", args[6]), ("comm", args[7]), ("info", args[8]), ("request", args[9]), ]), "4.0") + return MPICall("MPI_Scatter_init", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("recvbuf", args[3]),("recvcount", args[4]),("recvtype", args[5]),("root", args[6]),("comm", args[7]),("info", args[8]),("request", args[9]),]), "4.0", bigints={}) @staticmethod def mpi_scatterv(*args): - return MPICall("MPI_Scatterv", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("displs", args[2]), ("sendtype", args[3]), ("recvbuf", args[4]), ("recvcount", args[5]), ("recvtype", args[6]), ("root", args[7]), ("comm", args[8]), ]), "1.0") + return MPICall("MPI_Scatterv", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("displs", args[2]),("sendtype", args[3]),("recvbuf", args[4]),("recvcount", args[5]),("recvtype", args[6]),("root", args[7]),("comm", args[8]),]), "1.0", bigints={}) @staticmethod def mpi_scatterv_init(*args): - return MPICall("MPI_Scatterv_init", OrderedDict([("sendbuf", args[0]), ("sendcounts", args[1]), ("displs", args[2]), ("sendtype", args[3]), ("recvbuf", args[4]), ("recvcount", args[5]), ("recvtype", args[6]), ("root", args[7]), ("comm", args[8]), ("info", args[9]), ("request", args[10]), ]), "4.0") + return MPICall("MPI_Scatterv_init", OrderedDict([("sendbuf", args[0]),("sendcounts", args[1]),("displs", args[2]),("sendtype", args[3]),("recvbuf", args[4]),("recvcount", args[5]),("recvtype", args[6]),("root", args[7]),("comm", args[8]),("info", args[9]),("request", args[10]),]), "4.0", bigints={}) @staticmethod def mpi_send(*args): - return MPICall("MPI_Send", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ]), "1.0") + return MPICall("MPI_Send", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_send_init(*args): - return MPICall("MPI_Send_init", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ("request", args[6]), ]), "1.0") + return MPICall("MPI_Send_init", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),("request", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_sendrecv(*args): - return MPICall("MPI_Sendrecv", OrderedDict([("sendbuf", args[0]), ("sendcount", args[1]), ("sendtype", args[2]), ("dest", args[3]), ("sendtag", args[4]), ("recvbuf", args[5]), ("recvcount", args[6]), ("recvtype", args[7]), ("source", args[8]), ("recvtag", args[9]), ("comm", args[10]), ("status", args[11]), ]), "1.0") + return MPICall("MPI_Sendrecv", OrderedDict([("sendbuf", args[0]),("sendcount", args[1]),("sendtype", args[2]),("dest", args[3]),("sendtag", args[4]),("recvbuf", args[5]),("recvcount", args[6]),("recvtype", args[7]),("source", args[8]),("recvtag", args[9]),("comm", args[10]),("status", args[11]),]), "1.0", bigints={}) @staticmethod def mpi_sendrecv_replace(*args): - return MPICall("MPI_Sendrecv_replace", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("sendtag", args[4]), ("source", args[5]), ("recvtag", args[6]), ("comm", args[7]), ("status", args[8]), ]), "1.0") + return MPICall("MPI_Sendrecv_replace", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("sendtag", args[4]),("source", args[5]),("recvtag", args[6]),("comm", args[7]),("status", args[8]),]), "1.0", bigints={}) @staticmethod def mpi_session_c2f(*args): - return MPICall("MPI_Session_c2f", OrderedDict([("session", args[0]), ]), "4.0") + return MPICall("MPI_Session_c2f", OrderedDict([("session", args[0]),]), "4.0", bigints={}) @staticmethod def mpi_session_call_errhandler(*args): - return MPICall("MPI_Session_call_errhandler", OrderedDict([("session", args[0]), ("errorcode", args[1]), ]), "4.0") + return MPICall("MPI_Session_call_errhandler", OrderedDict([("session", args[0]),("errorcode", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_session_create_errhandler(*args): - return MPICall("MPI_Session_create_errhandler", OrderedDict([("session_errhandler_fn", args[0]), ("errhandler", args[1]), ]), "4.0") + return MPICall("MPI_Session_create_errhandler", OrderedDict([("session_errhandler_fn", args[0]),("errhandler", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_session_errhandler_function(*args): - return MPICall("MPI_Session_errhandler_function", OrderedDict([("session", args[0]), ("error_code", args[1]), ("varargs", args[2]), ]), "4.0") + return MPICall("MPI_Session_errhandler_function", OrderedDict([("session", args[0]),("error_code", args[1]),("varargs", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_session_f2c(*args): - return MPICall("MPI_Session_f2c", OrderedDict([("session", args[0]), ]), "4.0") + return MPICall("MPI_Session_f2c", OrderedDict([("session", args[0]),]), "4.0", bigints={}) @staticmethod def mpi_session_finalize(*args): - return MPICall("MPI_Session_finalize", OrderedDict([("session", args[0]), ]), "4.0") + return MPICall("MPI_Session_finalize", OrderedDict([("session", args[0]),]), "4.0", bigints={}) @staticmethod def mpi_session_get_errhandler(*args): - return MPICall("MPI_Session_get_errhandler", OrderedDict([("session", args[0]), ("errhandler", args[1]), ]), "4.0") + return MPICall("MPI_Session_get_errhandler", OrderedDict([("session", args[0]),("errhandler", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_session_get_info(*args): - return MPICall("MPI_Session_get_info", OrderedDict([("session", args[0]), ("info_used", args[1]), ]), "4.0") + return MPICall("MPI_Session_get_info", OrderedDict([("session", args[0]),("info_used", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_session_get_nth_pset(*args): - return MPICall("MPI_Session_get_nth_pset", OrderedDict([("session", args[0]), ("info", args[1]), ("n", args[2]), ("pset_len", args[3]), ("pset_name", args[4]), ]), "4.0") + return MPICall("MPI_Session_get_nth_pset", OrderedDict([("session", args[0]),("info", args[1]),("n", args[2]),("pset_len", args[3]),("pset_name", args[4]),]), "4.0", bigints={}) @staticmethod def mpi_session_get_num_psets(*args): - return MPICall("MPI_Session_get_num_psets", OrderedDict([("session", args[0]), ("info", args[1]), ("npset_names", args[2]), ]), "4.0") + return MPICall("MPI_Session_get_num_psets", OrderedDict([("session", args[0]),("info", args[1]),("npset_names", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_session_get_pset_info(*args): - return MPICall("MPI_Session_get_pset_info", OrderedDict([("session", args[0]), ("pset_name", args[1]), ("info", args[2]), ]), "4.0") + return MPICall("MPI_Session_get_pset_info", OrderedDict([("session", args[0]),("pset_name", args[1]),("info", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_session_init(*args): - return MPICall("MPI_Session_init", OrderedDict([("info", args[0]), ("errhandler", args[1]), ("session", args[2]), ]), "4.0") + return MPICall("MPI_Session_init", OrderedDict([("info", args[0]),("errhandler", args[1]),("session", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_session_set_errhandler(*args): - return MPICall("MPI_Session_set_errhandler", OrderedDict([("session", args[0]), ("errhandler", args[1]), ]), "4.0") + return MPICall("MPI_Session_set_errhandler", OrderedDict([("session", args[0]),("errhandler", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_sizeof(*args): - return MPICall("MPI_Sizeof", OrderedDict([("x", args[0]), ("size", args[1]), ]), "2.0") + return MPICall("MPI_Sizeof", OrderedDict([("x", args[0]),("size", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_ssend(*args): - return MPICall("MPI_Ssend", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ]), "1.0") + return MPICall("MPI_Ssend", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),]), "1.0", bigints={}) @staticmethod def mpi_ssend_init(*args): - return MPICall("MPI_Ssend_init", OrderedDict([("buf", args[0]), ("count", args[1]), ("datatype", args[2]), ("dest", args[3]), ("tag", args[4]), ("comm", args[5]), ("request", args[6]), ]), "1.0") + return MPICall("MPI_Ssend_init", OrderedDict([("buf", args[0]),("count", args[1]),("datatype", args[2]),("dest", args[3]),("tag", args[4]),("comm", args[5]),("request", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_start(*args): - return MPICall("MPI_Start", OrderedDict([("request", args[0]), ]), "1.0") + return MPICall("MPI_Start", OrderedDict([("request", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_startall(*args): - return MPICall("MPI_Startall", OrderedDict([("count", args[0]), ("array_of_requests", args[1]), ]), "1.0") + return MPICall("MPI_Startall", OrderedDict([("count", args[0]),("array_of_requests", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_status_c2f(*args): - return MPICall("MPI_Status_c2f", OrderedDict([("c_status", args[0]), ("f_status", args[1]), ]), "2.0") + return MPICall("MPI_Status_c2f", OrderedDict([("c_status", args[0]),("f_status", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_status_c2f08(*args): - return MPICall("MPI_Status_c2f08", OrderedDict([("c_status", args[0]), ("f08_status", args[1]), ]), "4.0") + return MPICall("MPI_Status_c2f08", OrderedDict([("c_status", args[0]),("f08_status", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_status_f082c(*args): - return MPICall("MPI_Status_f082c", OrderedDict([("f08_status", args[0]), ("c_status", args[1]), ]), "4.0") + return MPICall("MPI_Status_f082c", OrderedDict([("f08_status", args[0]),("c_status", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_status_f082f(*args): - return MPICall("MPI_Status_f082f", OrderedDict([("f08_status", args[0]), ("f_status", args[1]), ]), "4.0") + return MPICall("MPI_Status_f082f", OrderedDict([("f08_status", args[0]),("f_status", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_status_f2c(*args): - return MPICall("MPI_Status_f2c", OrderedDict([("f_status", args[0]), ("c_status", args[1]), ]), "2.0") + return MPICall("MPI_Status_f2c", OrderedDict([("f_status", args[0]),("c_status", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_status_f2f08(*args): - return MPICall("MPI_Status_f2f08", OrderedDict([("f_status", args[0]), ("f08_status", args[1]), ]), "4.0") + return MPICall("MPI_Status_f2f08", OrderedDict([("f_status", args[0]),("f08_status", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_status_set_cancelled(*args): - return MPICall("MPI_Status_set_cancelled", OrderedDict([("status", args[0]), ("flag", args[1]), ]), "2.0") + return MPICall("MPI_Status_set_cancelled", OrderedDict([("status", args[0]),("flag", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_status_set_elements(*args): - return MPICall("MPI_Status_set_elements", OrderedDict([("status", args[0]), ("datatype", args[1]), ("count", args[2]), ]), "2.0") + return MPICall("MPI_Status_set_elements", OrderedDict([("status", args[0]),("datatype", args[1]),("count", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_status_set_elements_x(*args): - return MPICall("MPI_Status_set_elements_x", OrderedDict([("status", args[0]), ("datatype", args[1]), ("count", args[2]), ]), "3.0") + return MPICall("MPI_Status_set_elements_x", OrderedDict([("status", args[0]),("datatype", args[1]),("count", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_t_category_changed(*args): - return MPICall("MPI_T_category_changed", OrderedDict([("update_number", args[0]), ]), "3.0") + return MPICall("MPI_T_category_changed", OrderedDict([("update_number", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_t_category_get_categories(*args): - return MPICall("MPI_T_category_get_categories", OrderedDict([("cat_index", args[0]), ("len", args[1]), ("indices", args[2]), ]), "3.0") + return MPICall("MPI_T_category_get_categories", OrderedDict([("cat_index", args[0]),("len", args[1]),("indices", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_t_category_get_cvars(*args): - return MPICall("MPI_T_category_get_cvars", OrderedDict([("cat_index", args[0]), ("len", args[1]), ("indices", args[2]), ]), "3.0") + return MPICall("MPI_T_category_get_cvars", OrderedDict([("cat_index", args[0]),("len", args[1]),("indices", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_t_category_get_events(*args): - return MPICall("MPI_T_category_get_events", OrderedDict([("cat_index", args[0]), ("len", args[1]), ("indices", args[2]), ]), "4.0") + return MPICall("MPI_T_category_get_events", OrderedDict([("cat_index", args[0]),("len", args[1]),("indices", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_t_category_get_index(*args): - return MPICall("MPI_T_category_get_index", OrderedDict([("name", args[0]), ("cat_index", args[1]), ]), "3.0") + return MPICall("MPI_T_category_get_index", OrderedDict([("name", args[0]),("cat_index", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_t_category_get_info(*args): - return MPICall("MPI_T_category_get_info", OrderedDict([("cat_index", args[0]), ("name", args[1]), ("name_len", args[2]), ("desc", args[3]), ("desc_len", args[4]), ("num_cvars", args[5]), ("num_pvars", args[6]), ("num_categories", args[7]), ]), "3.0") + return MPICall("MPI_T_category_get_info", OrderedDict([("cat_index", args[0]),("name", args[1]),("name_len", args[2]),("desc", args[3]),("desc_len", args[4]),("num_cvars", args[5]),("num_pvars", args[6]),("num_categories", args[7]),]), "3.0", bigints={}) @staticmethod def mpi_t_category_get_num(*args): - return MPICall("MPI_T_category_get_num", OrderedDict([("num_cat", args[0]), ]), "3.0") + return MPICall("MPI_T_category_get_num", OrderedDict([("num_cat", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_t_category_get_num_events(*args): - return MPICall("MPI_T_category_get_num_events", OrderedDict([("cat_index", args[0]), ("num_events", args[1]), ]), "4.0") + return MPICall("MPI_T_category_get_num_events", OrderedDict([("cat_index", args[0]),("num_events", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_t_category_get_pvars(*args): - return MPICall("MPI_T_category_get_pvars", OrderedDict([("cat_index", args[0]), ("len", args[1]), ("indices", args[2]), ]), "3.0") + return MPICall("MPI_T_category_get_pvars", OrderedDict([("cat_index", args[0]),("len", args[1]),("indices", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_t_cvar_get_index(*args): - return MPICall("MPI_T_cvar_get_index", OrderedDict([("name", args[0]), ("cvar_index", args[1]), ]), "3.0") + return MPICall("MPI_T_cvar_get_index", OrderedDict([("name", args[0]),("cvar_index", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_t_cvar_get_info(*args): - return MPICall("MPI_T_cvar_get_info", OrderedDict([("cvar_index", args[0]), ("name", args[1]), ("name_len", args[2]), ("verbosity", args[3]), ("datatype", args[4]), ("enumtype", args[5]), ("desc", args[6]), ("desc_len", args[7]), ("bind", args[8]), ("scope", args[9]), ]), "3.0") + return MPICall("MPI_T_cvar_get_info", OrderedDict([("cvar_index", args[0]),("name", args[1]),("name_len", args[2]),("verbosity", args[3]),("datatype", args[4]),("enumtype", args[5]),("desc", args[6]),("desc_len", args[7]),("bind", args[8]),("scope", args[9]),]), "3.0", bigints={}) @staticmethod def mpi_t_cvar_get_num(*args): - return MPICall("MPI_T_cvar_get_num", OrderedDict([("num_cvar", args[0]), ]), "3.0") + return MPICall("MPI_T_cvar_get_num", OrderedDict([("num_cvar", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_t_cvar_handle_alloc(*args): - return MPICall("MPI_T_cvar_handle_alloc", OrderedDict([("cvar_index", args[0]), ("obj_handle", args[1]), ("handle", args[2]), ("count", args[3]), ]), "3.0") + return MPICall("MPI_T_cvar_handle_alloc", OrderedDict([("cvar_index", args[0]),("obj_handle", args[1]),("handle", args[2]),("count", args[3]),]), "3.0", bigints={}) @staticmethod def mpi_t_cvar_handle_free(*args): - return MPICall("MPI_T_cvar_handle_free", OrderedDict([("handle", args[0]), ]), "3.0") + return MPICall("MPI_T_cvar_handle_free", OrderedDict([("handle", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_t_cvar_read(*args): - return MPICall("MPI_T_cvar_read", OrderedDict([("handle", args[0]), ("buf", args[1]), ]), "3.0") + return MPICall("MPI_T_cvar_read", OrderedDict([("handle", args[0]),("buf", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_t_cvar_write(*args): - return MPICall("MPI_T_cvar_write", OrderedDict([("handle", args[0]), ("buf", args[1]), ]), "3.0") + return MPICall("MPI_T_cvar_write", OrderedDict([("handle", args[0]),("buf", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_t_enum_get_info(*args): - return MPICall("MPI_T_enum_get_info", OrderedDict([("enumtype", args[0]), ("num", args[1]), ("name", args[2]), ("name_len", args[3]), ]), "3.0") + return MPICall("MPI_T_enum_get_info", OrderedDict([("enumtype", args[0]),("num", args[1]),("name", args[2]),("name_len", args[3]),]), "3.0", bigints={}) @staticmethod def mpi_t_enum_get_item(*args): - return MPICall("MPI_T_enum_get_item", OrderedDict([("enumtype", args[0]), ("index", args[1]), ("value", args[2]), ("name", args[3]), ("name_len", args[4]), ]), "3.0") + return MPICall("MPI_T_enum_get_item", OrderedDict([("enumtype", args[0]),("index", args[1]),("value", args[2]),("name", args[3]),("name_len", args[4]),]), "3.0", bigints={}) @staticmethod def mpi_t_event_callback_get_info(*args): - return MPICall("MPI_T_event_callback_get_info", OrderedDict([("event_registration", args[0]), ("cb_safety", args[1]), ("info_used", args[2]), ]), "4.0") + return MPICall("MPI_T_event_callback_get_info", OrderedDict([("event_registration", args[0]),("cb_safety", args[1]),("info_used", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_callback_set_info(*args): - return MPICall("MPI_T_event_callback_set_info", OrderedDict([("event_registration", args[0]), ("cb_safety", args[1]), ("info", args[2]), ]), "4.0") + return MPICall("MPI_T_event_callback_set_info", OrderedDict([("event_registration", args[0]),("cb_safety", args[1]),("info", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_cb_function(*args): - return MPICall("MPI_T_event_cb_function", OrderedDict([("event_instance", args[0]), ("event_registration", args[1]), ("cb_safety", args[2]), ("user_data", args[3]), ]), "4.0") + return MPICall("MPI_T_event_cb_function", OrderedDict([("event_instance", args[0]),("event_registration", args[1]),("cb_safety", args[2]),("user_data", args[3]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_copy(*args): - return MPICall("MPI_T_event_copy", OrderedDict([("event_instance", args[0]), ("buffer", args[1]), ]), "4.0") + return MPICall("MPI_T_event_copy", OrderedDict([("event_instance", args[0]),("buffer", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_dropped_cb_function(*args): - return MPICall("MPI_T_event_dropped_cb_function", OrderedDict([("count", args[0]), ("event_registration", args[1]), ("source_index", args[2]), ("cb_safety", args[3]), ("user_data", args[4]), ]), "4.0") + return MPICall("MPI_T_event_dropped_cb_function", OrderedDict([("count", args[0]),("event_registration", args[1]),("source_index", args[2]),("cb_safety", args[3]),("user_data", args[4]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_free_cb_function(*args): - return MPICall("MPI_T_event_free_cb_function", OrderedDict([("event_registration", args[0]), ("cb_safety", args[1]), ("user_data", args[2]), ]), "4.0") + return MPICall("MPI_T_event_free_cb_function", OrderedDict([("event_registration", args[0]),("cb_safety", args[1]),("user_data", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_get_index(*args): - return MPICall("MPI_T_event_get_index", OrderedDict([("name", args[0]), ("event_index", args[1]), ]), "4.0") + return MPICall("MPI_T_event_get_index", OrderedDict([("name", args[0]),("event_index", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_get_info(*args): - return MPICall("MPI_T_event_get_info", OrderedDict([("event_index", args[0]), ("name", args[1]), ("name_len", args[2]), ("verbosity", args[3]), ("array_of_datatypes", args[4]), ("array_of_displacements", args[5]), ("num_elements", args[6]), ("enumtype", args[7]), ("info", args[8]), ("desc", args[9]), ("desc_len", args[10]), ("bind", args[11]), ]), "4.0") + return MPICall("MPI_T_event_get_info", OrderedDict([("event_index", args[0]),("name", args[1]),("name_len", args[2]),("verbosity", args[3]),("array_of_datatypes", args[4]),("array_of_displacements", args[5]),("num_elements", args[6]),("enumtype", args[7]),("info", args[8]),("desc", args[9]),("desc_len", args[10]),("bind", args[11]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_get_num(*args): - return MPICall("MPI_T_event_get_num", OrderedDict([("num_events", args[0]), ]), "4.0") + return MPICall("MPI_T_event_get_num", OrderedDict([("num_events", args[0]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_get_source(*args): - return MPICall("MPI_T_event_get_source", OrderedDict([("event_instance", args[0]), ("source_index", args[1]), ]), "4.0") + return MPICall("MPI_T_event_get_source", OrderedDict([("event_instance", args[0]),("source_index", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_get_timestamp(*args): - return MPICall("MPI_T_event_get_timestamp", OrderedDict([("event_instance", args[0]), ("event_timestamp", args[1]), ]), "4.0") + return MPICall("MPI_T_event_get_timestamp", OrderedDict([("event_instance", args[0]),("event_timestamp", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_handle_alloc(*args): - return MPICall("MPI_T_event_handle_alloc", OrderedDict([("event_index", args[0]), ("obj_handle", args[1]), ("info", args[2]), ("event_registration", args[3]), ]), "4.0") + return MPICall("MPI_T_event_handle_alloc", OrderedDict([("event_index", args[0]),("obj_handle", args[1]),("info", args[2]),("event_registration", args[3]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_handle_free(*args): - return MPICall("MPI_T_event_handle_free", OrderedDict([("event_registration", args[0]), ("user_data", args[1]), ("free_cb_function", args[2]), ]), "4.0") + return MPICall("MPI_T_event_handle_free", OrderedDict([("event_registration", args[0]),("user_data", args[1]),("free_cb_function", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_handle_get_info(*args): - return MPICall("MPI_T_event_handle_get_info", OrderedDict([("event_registration", args[0]), ("info_used", args[1]), ]), "4.0") + return MPICall("MPI_T_event_handle_get_info", OrderedDict([("event_registration", args[0]),("info_used", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_handle_set_info(*args): - return MPICall("MPI_T_event_handle_set_info", OrderedDict([("event_registration", args[0]), ("info", args[1]), ]), "4.0") + return MPICall("MPI_T_event_handle_set_info", OrderedDict([("event_registration", args[0]),("info", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_read(*args): - return MPICall("MPI_T_event_read", OrderedDict([("event_instance", args[0]), ("element_index", args[1]), ("buffer", args[2]), ]), "4.0") + return MPICall("MPI_T_event_read", OrderedDict([("event_instance", args[0]),("element_index", args[1]),("buffer", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_register_callback(*args): - return MPICall("MPI_T_event_register_callback", OrderedDict([("event_registration", args[0]), ("cb_safety", args[1]), ("info", args[2]), ("user_data", args[3]), ("event_cb_function", args[4]), ]), "4.0") + return MPICall("MPI_T_event_register_callback", OrderedDict([("event_registration", args[0]),("cb_safety", args[1]),("info", args[2]),("user_data", args[3]),("event_cb_function", args[4]),]), "4.0", bigints={}) @staticmethod def mpi_t_event_set_dropped_handler(*args): - return MPICall("MPI_T_event_set_dropped_handler", OrderedDict([("event_registration", args[0]), ("dropped_cb_function", args[1]), ]), "4.0") + return MPICall("MPI_T_event_set_dropped_handler", OrderedDict([("event_registration", args[0]),("dropped_cb_function", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_t_finalize(*args): - return MPICall("MPI_T_finalize", OrderedDict([]), "3.0") + return MPICall("MPI_T_finalize", OrderedDict([]), "3.0", bigints={}) @staticmethod def mpi_t_init_thread(*args): - return MPICall("MPI_T_init_thread", OrderedDict([("required", args[0]), ("provided", args[1]), ]), "3.0") + return MPICall("MPI_T_init_thread", OrderedDict([("required", args[0]),("provided", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_get_index(*args): - return MPICall("MPI_T_pvar_get_index", OrderedDict([("name", args[0]), ("var_class", args[1]), ("pvar_index", args[2]), ]), "3.0") + return MPICall("MPI_T_pvar_get_index", OrderedDict([("name", args[0]),("var_class", args[1]),("pvar_index", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_get_info(*args): - return MPICall("MPI_T_pvar_get_info", OrderedDict([("pvar_index", args[0]), ("name", args[1]), ("name_len", args[2]), ("verbosity", args[3]), ("var_class", args[4]), ("datatype", args[5]), ("enumtype", args[6]), ("desc", args[7]), ("desc_len", args[8]), ("bind", args[9]), ("readonly", args[10]), ("continuous", args[11]), ("atomic", args[12]), ]), "3.0") + return MPICall("MPI_T_pvar_get_info", OrderedDict([("pvar_index", args[0]),("name", args[1]),("name_len", args[2]),("verbosity", args[3]),("var_class", args[4]),("datatype", args[5]),("enumtype", args[6]),("desc", args[7]),("desc_len", args[8]),("bind", args[9]),("readonly", args[10]),("continuous", args[11]),("atomic", args[12]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_get_num(*args): - return MPICall("MPI_T_pvar_get_num", OrderedDict([("num_pvar", args[0]), ]), "3.0") + return MPICall("MPI_T_pvar_get_num", OrderedDict([("num_pvar", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_handle_alloc(*args): - return MPICall("MPI_T_pvar_handle_alloc", OrderedDict([("pe_session", args[0]), ("pvar_index", args[1]), ("obj_handle", args[2]), ("handle", args[3]), ("count", args[4]), ]), "3.0") + return MPICall("MPI_T_pvar_handle_alloc", OrderedDict([("pe_session", args[0]),("pvar_index", args[1]),("obj_handle", args[2]),("handle", args[3]),("count", args[4]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_handle_free(*args): - return MPICall("MPI_T_pvar_handle_free", OrderedDict([("pe_session", args[0]), ("handle", args[1]), ]), "3.0") + return MPICall("MPI_T_pvar_handle_free", OrderedDict([("pe_session", args[0]),("handle", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_read(*args): - return MPICall("MPI_T_pvar_read", OrderedDict([("pe_session", args[0]), ("handle", args[1]), ("buf", args[2]), ]), "3.0") + return MPICall("MPI_T_pvar_read", OrderedDict([("pe_session", args[0]),("handle", args[1]),("buf", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_readreset(*args): - return MPICall("MPI_T_pvar_readreset", OrderedDict([("pe_session", args[0]), ("handle", args[1]), ("buf", args[2]), ]), "3.0") + return MPICall("MPI_T_pvar_readreset", OrderedDict([("pe_session", args[0]),("handle", args[1]),("buf", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_reset(*args): - return MPICall("MPI_T_pvar_reset", OrderedDict([("pe_session", args[0]), ("handle", args[1]), ]), "3.0") + return MPICall("MPI_T_pvar_reset", OrderedDict([("pe_session", args[0]),("handle", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_session_create(*args): - return MPICall("MPI_T_pvar_session_create", OrderedDict([("pe_session", args[0]), ]), "3.0") + return MPICall("MPI_T_pvar_session_create", OrderedDict([("pe_session", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_session_free(*args): - return MPICall("MPI_T_pvar_session_free", OrderedDict([("pe_session", args[0]), ]), "3.0") + return MPICall("MPI_T_pvar_session_free", OrderedDict([("pe_session", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_start(*args): - return MPICall("MPI_T_pvar_start", OrderedDict([("pe_session", args[0]), ("handle", args[1]), ]), "3.0") + return MPICall("MPI_T_pvar_start", OrderedDict([("pe_session", args[0]),("handle", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_stop(*args): - return MPICall("MPI_T_pvar_stop", OrderedDict([("pe_session", args[0]), ("handle", args[1]), ]), "3.0") + return MPICall("MPI_T_pvar_stop", OrderedDict([("pe_session", args[0]),("handle", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_t_pvar_write(*args): - return MPICall("MPI_T_pvar_write", OrderedDict([("pe_session", args[0]), ("handle", args[1]), ("buf", args[2]), ]), "3.0") + return MPICall("MPI_T_pvar_write", OrderedDict([("pe_session", args[0]),("handle", args[1]),("buf", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_t_source_get_info(*args): - return MPICall("MPI_T_source_get_info", OrderedDict([("source_index", args[0]), ("name", args[1]), ("name_len", args[2]), ("desc", args[3]), ("desc_len", args[4]), ("ordering", args[5]), ("ticks_per_second", args[6]), ("max_ticks", args[7]), ("info", args[8]), ]), "4.0") + return MPICall("MPI_T_source_get_info", OrderedDict([("source_index", args[0]),("name", args[1]),("name_len", args[2]),("desc", args[3]),("desc_len", args[4]),("ordering", args[5]),("ticks_per_second", args[6]),("max_ticks", args[7]),("info", args[8]),]), "4.0", bigints={}) @staticmethod def mpi_t_source_get_num(*args): - return MPICall("MPI_T_source_get_num", OrderedDict([("num_sources", args[0]), ]), "4.0") + return MPICall("MPI_T_source_get_num", OrderedDict([("num_sources", args[0]),]), "4.0", bigints={}) @staticmethod def mpi_t_source_get_timestamp(*args): - return MPICall("MPI_T_source_get_timestamp", OrderedDict([("source_index", args[0]), ("timestamp", args[1]), ]), "4.0") + return MPICall("MPI_T_source_get_timestamp", OrderedDict([("source_index", args[0]),("timestamp", args[1]),]), "4.0", bigints={}) @staticmethod def mpi_test(*args): - return MPICall("MPI_Test", OrderedDict([("request", args[0]), ("flag", args[1]), ("status", args[2]), ]), "1.0") + return MPICall("MPI_Test", OrderedDict([("request", args[0]),("flag", args[1]),("status", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_test_cancelled(*args): - return MPICall("MPI_Test_cancelled", OrderedDict([("status", args[0]), ("flag", args[1]), ]), "1.0") + return MPICall("MPI_Test_cancelled", OrderedDict([("status", args[0]),("flag", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_testall(*args): - return MPICall("MPI_Testall", OrderedDict([("count", args[0]), ("array_of_requests", args[1]), ("flag", args[2]), ("array_of_statuses", args[3]), ]), "1.0") + return MPICall("MPI_Testall", OrderedDict([("count", args[0]),("array_of_requests", args[1]),("flag", args[2]),("array_of_statuses", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_testany(*args): - return MPICall("MPI_Testany", OrderedDict([("count", args[0]), ("array_of_requests", args[1]), ("index", args[2]), ("flag", args[3]), ("status", args[4]), ]), "1.0") + return MPICall("MPI_Testany", OrderedDict([("count", args[0]),("array_of_requests", args[1]),("index", args[2]),("flag", args[3]),("status", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_testsome(*args): - return MPICall("MPI_Testsome", OrderedDict([("incount", args[0]), ("array_of_requests", args[1]), ("outcount", args[2]), ("array_of_indices", args[3]), ("array_of_statuses", args[4]), ]), "1.0") + return MPICall("MPI_Testsome", OrderedDict([("incount", args[0]),("array_of_requests", args[1]),("outcount", args[2]),("array_of_indices", args[3]),("array_of_statuses", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_topo_test(*args): - return MPICall("MPI_Topo_test", OrderedDict([("comm", args[0]), ("status", args[1]), ]), "1.0") + return MPICall("MPI_Topo_test", OrderedDict([("comm", args[0]),("status", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_type_c2f(*args): - return MPICall("MPI_Type_c2f", OrderedDict([("datatype", args[0]), ]), "2.0") + return MPICall("MPI_Type_c2f", OrderedDict([("datatype", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_type_commit(*args): - return MPICall("MPI_Type_commit", OrderedDict([("datatype", args[0]), ]), "1.0") + return MPICall("MPI_Type_commit", OrderedDict([("datatype", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_type_contiguous(*args): - return MPICall("MPI_Type_contiguous", OrderedDict([("count", args[0]), ("oldtype", args[1]), ("newtype", args[2]), ]), "1.0") + return MPICall("MPI_Type_contiguous", OrderedDict([("count", args[0]),("oldtype", args[1]),("newtype", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_type_copy_attr_function(*args): - return MPICall("MPI_Type_copy_attr_function", OrderedDict([("oldtype", args[0]), ("type_keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "4.0") + return MPICall("MPI_Type_copy_attr_function", OrderedDict([("oldtype", args[0]),("type_keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_type_create_darray(*args): - return MPICall("MPI_Type_create_darray", OrderedDict([("size", args[0]), ("rank", args[1]), ("ndims", args[2]), ("array_of_gsizes", args[3]), ("array_of_distribs", args[4]), ("array_of_dargs", args[5]), ("array_of_psizes", args[6]), ("order", args[7]), ("oldtype", args[8]), ("newtype", args[9]), ]), "2.0") + return MPICall("MPI_Type_create_darray", OrderedDict([("size", args[0]),("rank", args[1]),("ndims", args[2]),("array_of_gsizes", args[3]),("array_of_distribs", args[4]),("array_of_dargs", args[5]),("array_of_psizes", args[6]),("order", args[7]),("oldtype", args[8]),("newtype", args[9]),]), "2.0", bigints={}) @staticmethod def mpi_type_create_f90_complex(*args): - return MPICall("MPI_Type_create_f90_complex", OrderedDict([("p", args[0]), ("r", args[1]), ("newtype", args[2]), ]), "2.0") + return MPICall("MPI_Type_create_f90_complex", OrderedDict([("p", args[0]),("r", args[1]),("newtype", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_type_create_f90_integer(*args): - return MPICall("MPI_Type_create_f90_integer", OrderedDict([("r", args[0]), ("newtype", args[1]), ]), "2.0") + return MPICall("MPI_Type_create_f90_integer", OrderedDict([("r", args[0]),("newtype", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_type_create_f90_real(*args): - return MPICall("MPI_Type_create_f90_real", OrderedDict([("p", args[0]), ("r", args[1]), ("newtype", args[2]), ]), "2.0") + return MPICall("MPI_Type_create_f90_real", OrderedDict([("p", args[0]),("r", args[1]),("newtype", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_type_create_hindexed(*args): - return MPICall("MPI_Type_create_hindexed", OrderedDict([("count", args[0]), ("array_of_blocklengths", args[1]), ("array_of_displacements", args[2]), ("oldtype", args[3]), ("newtype", args[4]), ]), "2.0") + return MPICall("MPI_Type_create_hindexed", OrderedDict([("count", args[0]),("array_of_blocklengths", args[1]),("array_of_displacements", args[2]),("oldtype", args[3]),("newtype", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_type_create_hindexed_block(*args): - return MPICall("MPI_Type_create_hindexed_block", OrderedDict([("count", args[0]), ("blocklength", args[1]), ("array_of_displacements", args[2]), ("oldtype", args[3]), ("newtype", args[4]), ]), "3.0") + return MPICall("MPI_Type_create_hindexed_block", OrderedDict([("count", args[0]),("blocklength", args[1]),("array_of_displacements", args[2]),("oldtype", args[3]),("newtype", args[4]),]), "3.0", bigints={}) @staticmethod def mpi_type_create_hvector(*args): - return MPICall("MPI_Type_create_hvector", OrderedDict([("count", args[0]), ("blocklength", args[1]), ("stride", args[2]), ("oldtype", args[3]), ("newtype", args[4]), ]), "2.0") + return MPICall("MPI_Type_create_hvector", OrderedDict([("count", args[0]),("blocklength", args[1]),("stride", args[2]),("oldtype", args[3]),("newtype", args[4]),]), "2.0", bigints={'stride': 'mpi_address_kind'}) @staticmethod def mpi_type_create_indexed_block(*args): - return MPICall("MPI_Type_create_indexed_block", OrderedDict([("count", args[0]), ("blocklength", args[1]), ("array_of_displacements", args[2]), ("oldtype", args[3]), ("newtype", args[4]), ]), "2.0") + return MPICall("MPI_Type_create_indexed_block", OrderedDict([("count", args[0]),("blocklength", args[1]),("array_of_displacements", args[2]),("oldtype", args[3]),("newtype", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_type_create_keyval(*args): - return MPICall("MPI_Type_create_keyval", OrderedDict([("type_copy_attr_fn", args[0]), ("type_delete_attr_fn", args[1]), ("type_keyval", args[2]), ("extra_state", args[3]), ]), "2.0") + return MPICall("MPI_Type_create_keyval", OrderedDict([("type_copy_attr_fn", args[0]),("type_delete_attr_fn", args[1]),("type_keyval", args[2]),("extra_state", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_type_create_resized(*args): - return MPICall("MPI_Type_create_resized", OrderedDict([("oldtype", args[0]), ("lb", args[1]), ("extent", args[2]), ("newtype", args[3]), ]), "2.0") + return MPICall("MPI_Type_create_resized", OrderedDict([("oldtype", args[0]),("lb", args[1]),("extent", args[2]),("newtype", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_type_create_struct(*args): - return MPICall("MPI_Type_create_struct", OrderedDict([("count", args[0]), ("array_of_blocklengths", args[1]), ("array_of_displacements", args[2]), ("array_of_types", args[3]), ("newtype", args[4]), ]), "2.0") + return MPICall("MPI_Type_create_struct", OrderedDict([("count", args[0]),("array_of_blocklengths", args[1]),("array_of_displacements", args[2]),("array_of_types", args[3]),("newtype", args[4]),]), "2.0", bigints={}) @staticmethod def mpi_type_create_subarray(*args): - return MPICall("MPI_Type_create_subarray", OrderedDict([("ndims", args[0]), ("array_of_sizes", args[1]), ("array_of_subsizes", args[2]), ("array_of_starts", args[3]), ("order", args[4]), ("oldtype", args[5]), ("newtype", args[6]), ]), "2.0") + return MPICall("MPI_Type_create_subarray", OrderedDict([("ndims", args[0]),("array_of_sizes", args[1]),("array_of_subsizes", args[2]),("array_of_starts", args[3]),("order", args[4]),("oldtype", args[5]),("newtype", args[6]),]), "2.0", bigints={}) @staticmethod def mpi_type_delete_attr(*args): - return MPICall("MPI_Type_delete_attr", OrderedDict([("datatype", args[0]), ("type_keyval", args[1]), ]), "2.0") + return MPICall("MPI_Type_delete_attr", OrderedDict([("datatype", args[0]),("type_keyval", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_type_delete_attr_function(*args): - return MPICall("MPI_Type_delete_attr_function", OrderedDict([("datatype", args[0]), ("type_keyval", args[1]), ("attribute_val", args[2]), ("extra_state", args[3]), ]), "4.0") + return MPICall("MPI_Type_delete_attr_function", OrderedDict([("datatype", args[0]),("type_keyval", args[1]),("attribute_val", args[2]),("extra_state", args[3]),]), "4.0", bigints={}) @staticmethod def mpi_type_dup(*args): - return MPICall("MPI_Type_dup", OrderedDict([("oldtype", args[0]), ("newtype", args[1]), ]), "2.0") + return MPICall("MPI_Type_dup", OrderedDict([("oldtype", args[0]),("newtype", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_type_dup_fn(*args): - return MPICall("MPI_TYPE_DUP_FN", OrderedDict([("oldtype", args[0]), ("type_keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "4.0") + return MPICall("MPI_TYPE_DUP_FN", OrderedDict([("oldtype", args[0]),("type_keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_type_f2c(*args): - return MPICall("MPI_Type_f2c", OrderedDict([("datatype", args[0]), ]), "2.0") + return MPICall("MPI_Type_f2c", OrderedDict([("datatype", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_type_free(*args): - return MPICall("MPI_Type_free", OrderedDict([("datatype", args[0]), ]), "1.0") + return MPICall("MPI_Type_free", OrderedDict([("datatype", args[0]),]), "1.0", bigints={}) @staticmethod def mpi_type_free_keyval(*args): - return MPICall("MPI_Type_free_keyval", OrderedDict([("type_keyval", args[0]), ]), "2.0") + return MPICall("MPI_Type_free_keyval", OrderedDict([("type_keyval", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_type_get_attr(*args): - return MPICall("MPI_Type_get_attr", OrderedDict([("datatype", args[0]), ("type_keyval", args[1]), ("attribute_val", args[2]), ("flag", args[3]), ]), "2.0") + return MPICall("MPI_Type_get_attr", OrderedDict([("datatype", args[0]),("type_keyval", args[1]),("attribute_val", args[2]),("flag", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_type_get_contents(*args): - return MPICall("MPI_Type_get_contents", OrderedDict([("datatype", args[0]), ("max_integers", args[1]), ("max_addresses", args[2]), ("max_large_counts", args[3]), ("max_datatypes", args[4]), ("array_of_integers", args[5]), ("array_of_addresses", args[6]), ("array_of_large_counts", args[7]), ("array_of_datatypes", args[8]), ]), "2.0") + return MPICall("MPI_Type_get_contents", OrderedDict([("datatype", args[0]),("max_integers", args[1]),("max_addresses", args[2]),("max_large_counts", args[3]),("max_datatypes", args[4]),("array_of_integers", args[5]),("array_of_addresses", args[6]),("array_of_large_counts", args[7]),("array_of_datatypes", args[8]),]), "2.0", bigints={}) @staticmethod def mpi_type_get_envelope(*args): - return MPICall("MPI_Type_get_envelope", OrderedDict([("datatype", args[0]), ("num_integers", args[1]), ("num_addresses", args[2]), ("num_large_counts", args[3]), ("num_datatypes", args[4]), ("combiner", args[5]), ]), "2.0") + return MPICall("MPI_Type_get_envelope", OrderedDict([("datatype", args[0]),("num_integers", args[1]),("num_addresses", args[2]),("num_large_counts", args[3]),("num_datatypes", args[4]),("combiner", args[5]),]), "2.0", bigints={}) @staticmethod def mpi_type_get_extent(*args): - return MPICall("MPI_Type_get_extent", OrderedDict([("datatype", args[0]), ("lb", args[1]), ("extent", args[2]), ]), "2.0") + return MPICall("MPI_Type_get_extent", OrderedDict([("datatype", args[0]),("lb", args[1]),("extent", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_type_get_extent_x(*args): - return MPICall("MPI_Type_get_extent_x", OrderedDict([("datatype", args[0]), ("lb", args[1]), ("extent", args[2]), ]), "3.0") + return MPICall("MPI_Type_get_extent_x", OrderedDict([("datatype", args[0]),("lb", args[1]),("extent", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_type_get_name(*args): - return MPICall("MPI_Type_get_name", OrderedDict([("datatype", args[0]), ("type_name", args[1]), ("resultlen", args[2]), ]), "2.0") + return MPICall("MPI_Type_get_name", OrderedDict([("datatype", args[0]),("type_name", args[1]),("resultlen", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_type_get_true_extent(*args): - return MPICall("MPI_Type_get_true_extent", OrderedDict([("datatype", args[0]), ("true_lb", args[1]), ("true_extent", args[2]), ]), "2.0") + return MPICall("MPI_Type_get_true_extent", OrderedDict([("datatype", args[0]),("true_lb", args[1]),("true_extent", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_type_get_true_extent_x(*args): - return MPICall("MPI_Type_get_true_extent_x", OrderedDict([("datatype", args[0]), ("true_lb", args[1]), ("true_extent", args[2]), ]), "3.0") + return MPICall("MPI_Type_get_true_extent_x", OrderedDict([("datatype", args[0]),("true_lb", args[1]),("true_extent", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_type_indexed(*args): - return MPICall("MPI_Type_indexed", OrderedDict([("count", args[0]), ("array_of_blocklengths", args[1]), ("array_of_displacements", args[2]), ("oldtype", args[3]), ("newtype", args[4]), ]), "1.0") + return MPICall("MPI_Type_indexed", OrderedDict([("count", args[0]),("array_of_blocklengths", args[1]),("array_of_displacements", args[2]),("oldtype", args[3]),("newtype", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_type_match_size(*args): - return MPICall("MPI_Type_match_size", OrderedDict([("typeclass", args[0]), ("size", args[1]), ("datatype", args[2]), ]), "2.0") + return MPICall("MPI_Type_match_size", OrderedDict([("typeclass", args[0]),("size", args[1]),("datatype", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_type_null_copy_fn(*args): - return MPICall("MPI_TYPE_NULL_COPY_FN", OrderedDict([("oldtype", args[0]), ("type_keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "4.0") + return MPICall("MPI_TYPE_NULL_COPY_FN", OrderedDict([("oldtype", args[0]),("type_keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_type_null_delete_fn(*args): - return MPICall("MPI_TYPE_NULL_DELETE_FN", OrderedDict([("datatype", args[0]), ("type_keyval", args[1]), ("attribute_val", args[2]), ("extra_state", args[3]), ]), "4.0") + return MPICall("MPI_TYPE_NULL_DELETE_FN", OrderedDict([("datatype", args[0]),("type_keyval", args[1]),("attribute_val", args[2]),("extra_state", args[3]),]), "4.0", bigints={}) @staticmethod def mpi_type_set_attr(*args): - return MPICall("MPI_Type_set_attr", OrderedDict([("datatype", args[0]), ("type_keyval", args[1]), ("attribute_val", args[2]), ]), "2.0") + return MPICall("MPI_Type_set_attr", OrderedDict([("datatype", args[0]),("type_keyval", args[1]),("attribute_val", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_type_set_name(*args): - return MPICall("MPI_Type_set_name", OrderedDict([("datatype", args[0]), ("type_name", args[1]), ]), "2.0") + return MPICall("MPI_Type_set_name", OrderedDict([("datatype", args[0]),("type_name", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_type_size(*args): - return MPICall("MPI_Type_size", OrderedDict([("datatype", args[0]), ("size", args[1]), ]), "1.0") + return MPICall("MPI_Type_size", OrderedDict([("datatype", args[0]),("size", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_type_size_x(*args): - return MPICall("MPI_Type_size_x", OrderedDict([("datatype", args[0]), ("size", args[1]), ]), "3.0") + return MPICall("MPI_Type_size_x", OrderedDict([("datatype", args[0]),("size", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_type_vector(*args): - return MPICall("MPI_Type_vector", OrderedDict([("count", args[0]), ("blocklength", args[1]), ("stride", args[2]), ("oldtype", args[3]), ("newtype", args[4]), ]), "1.0") + return MPICall("MPI_Type_vector", OrderedDict([("count", args[0]),("blocklength", args[1]),("stride", args[2]),("oldtype", args[3]),("newtype", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_unpack(*args): - return MPICall("MPI_Unpack", OrderedDict([("inbuf", args[0]), ("insize", args[1]), ("position", args[2]), ("outbuf", args[3]), ("outcount", args[4]), ("datatype", args[5]), ("comm", args[6]), ]), "1.0") + return MPICall("MPI_Unpack", OrderedDict([("inbuf", args[0]),("insize", args[1]),("position", args[2]),("outbuf", args[3]),("outcount", args[4]),("datatype", args[5]),("comm", args[6]),]), "1.0", bigints={}) @staticmethod def mpi_unpack_external(*args): - return MPICall("MPI_Unpack_external", OrderedDict([("datarep", args[0]), ("inbuf", args[1]), ("insize", args[2]), ("position", args[3]), ("outbuf", args[4]), ("outcount", args[5]), ("datatype", args[6]), ]), "2.0") + return MPICall("MPI_Unpack_external", OrderedDict([("datarep", args[0]),("inbuf", args[1]),("insize", args[2]),("position", args[3]),("outbuf", args[4]),("outcount", args[5]),("datatype", args[6]),]), "2.0", bigints={}) @staticmethod def mpi_unpublish_name(*args): - return MPICall("MPI_Unpublish_name", OrderedDict([("service_name", args[0]), ("info", args[1]), ("port_name", args[2]), ]), "2.0") + return MPICall("MPI_Unpublish_name", OrderedDict([("service_name", args[0]),("info", args[1]),("port_name", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_user_function(*args): - return MPICall("MPI_User_function", OrderedDict([("invec", args[0]), ("inoutvec", args[1]), ("len", args[2]), ("datatype", args[3]), ]), "1.0") + return MPICall("MPI_User_function", OrderedDict([("invec", args[0]),("inoutvec", args[1]),("len", args[2]),("datatype", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_wait(*args): - return MPICall("MPI_Wait", OrderedDict([("request", args[0]), ("status", args[1]), ]), "1.0") + return MPICall("MPI_Wait", OrderedDict([("request", args[0]),("status", args[1]),]), "1.0", bigints={}) @staticmethod def mpi_waitall(*args): - return MPICall("MPI_Waitall", OrderedDict([("count", args[0]), ("array_of_requests", args[1]), ("array_of_statuses", args[2]), ]), "1.0") + return MPICall("MPI_Waitall", OrderedDict([("count", args[0]),("array_of_requests", args[1]),("array_of_statuses", args[2]),]), "1.0", bigints={}) @staticmethod def mpi_waitany(*args): - return MPICall("MPI_Waitany", OrderedDict([("count", args[0]), ("array_of_requests", args[1]), ("index", args[2]), ("status", args[3]), ]), "1.0") + return MPICall("MPI_Waitany", OrderedDict([("count", args[0]),("array_of_requests", args[1]),("index", args[2]),("status", args[3]),]), "1.0", bigints={}) @staticmethod def mpi_waitsome(*args): - return MPICall("MPI_Waitsome", OrderedDict([("incount", args[0]), ("array_of_requests", args[1]), ("outcount", args[2]), ("array_of_indices", args[3]), ("array_of_statuses", args[4]), ]), "1.0") + return MPICall("MPI_Waitsome", OrderedDict([("incount", args[0]),("array_of_requests", args[1]),("outcount", args[2]),("array_of_indices", args[3]),("array_of_statuses", args[4]),]), "1.0", bigints={}) @staticmethod def mpi_win_allocate(*args): - return MPICall("MPI_Win_allocate", OrderedDict([("size", args[0]), ("disp_unit", args[1]), ("info", args[2]), ("comm", args[3]), ("baseptr", args[4]), ("win", args[5]), ]), "3.0") + return MPICall("MPI_Win_allocate", OrderedDict([("size", args[0]),("disp_unit", args[1]),("info", args[2]),("comm", args[3]),("baseptr", args[4]),("win", args[5]),]), "3.0", bigints={'size': 'mpi_address_kind'}) @staticmethod def mpi_win_allocate_shared(*args): - return MPICall("MPI_Win_allocate_shared", OrderedDict([("size", args[0]), ("disp_unit", args[1]), ("info", args[2]), ("comm", args[3]), ("baseptr", args[4]), ("win", args[5]), ]), "3.0") + return MPICall("MPI_Win_allocate_shared", OrderedDict([("size", args[0]),("disp_unit", args[1]),("info", args[2]),("comm", args[3]),("baseptr", args[4]),("win", args[5]),]), "3.0", bigints={'size': 'mpi_address_kind'}) @staticmethod def mpi_win_attach(*args): - return MPICall("MPI_Win_attach", OrderedDict([("win", args[0]), ("base", args[1]), ("size", args[2]), ]), "3.0") + return MPICall("MPI_Win_attach", OrderedDict([("win", args[0]),("base", args[1]),("size", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_win_c2f(*args): - return MPICall("MPI_Win_c2f", OrderedDict([("win", args[0]), ]), "2.0") + return MPICall("MPI_Win_c2f", OrderedDict([("win", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_win_call_errhandler(*args): - return MPICall("MPI_Win_call_errhandler", OrderedDict([("win", args[0]), ("errorcode", args[1]), ]), "2.0") + return MPICall("MPI_Win_call_errhandler", OrderedDict([("win", args[0]),("errorcode", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_win_complete(*args): - return MPICall("MPI_Win_complete", OrderedDict([("win", args[0]), ]), "2.0") + return MPICall("MPI_Win_complete", OrderedDict([("win", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_win_copy_attr_function(*args): - return MPICall("MPI_Win_copy_attr_function", OrderedDict([("oldwin", args[0]), ("win_keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "4.0") + return MPICall("MPI_Win_copy_attr_function", OrderedDict([("oldwin", args[0]),("win_keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_win_create(*args): - return MPICall("MPI_Win_create", OrderedDict([("base", args[0]), ("size", args[1]), ("disp_unit", args[2]), ("info", args[3]), ("comm", args[4]), ("win", args[5]), ]), "2.0") + return MPICall("MPI_Win_create", OrderedDict([("base", args[0]),("size", args[1]),("disp_unit", args[2]),("info", args[3]),("comm", args[4]),("win", args[5]),]), "2.0", bigints={'size': 'mpi_address_kind'}) @staticmethod def mpi_win_create_dynamic(*args): - return MPICall("MPI_Win_create_dynamic", OrderedDict([("info", args[0]), ("comm", args[1]), ("win", args[2]), ]), "3.0") + return MPICall("MPI_Win_create_dynamic", OrderedDict([("info", args[0]),("comm", args[1]),("win", args[2]),]), "3.0", bigints={}) @staticmethod def mpi_win_create_errhandler(*args): - return MPICall("MPI_Win_create_errhandler", OrderedDict([("win_errhandler_fn", args[0]), ("errhandler", args[1]), ]), "2.0") + return MPICall("MPI_Win_create_errhandler", OrderedDict([("win_errhandler_fn", args[0]),("errhandler", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_win_create_keyval(*args): - return MPICall("MPI_Win_create_keyval", OrderedDict([("win_copy_attr_fn", args[0]), ("win_delete_attr_fn", args[1]), ("win_keyval", args[2]), ("extra_state", args[3]), ]), "2.0") + return MPICall("MPI_Win_create_keyval", OrderedDict([("win_copy_attr_fn", args[0]),("win_delete_attr_fn", args[1]),("win_keyval", args[2]),("extra_state", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_win_delete_attr(*args): - return MPICall("MPI_Win_delete_attr", OrderedDict([("win", args[0]), ("win_keyval", args[1]), ]), "2.0") + return MPICall("MPI_Win_delete_attr", OrderedDict([("win", args[0]),("win_keyval", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_win_delete_attr_function(*args): - return MPICall("MPI_Win_delete_attr_function", OrderedDict([("win", args[0]), ("win_keyval", args[1]), ("attribute_val", args[2]), ("extra_state", args[3]), ]), "4.0") + return MPICall("MPI_Win_delete_attr_function", OrderedDict([("win", args[0]),("win_keyval", args[1]),("attribute_val", args[2]),("extra_state", args[3]),]), "4.0", bigints={}) @staticmethod def mpi_win_detach(*args): - return MPICall("MPI_Win_detach", OrderedDict([("win", args[0]), ("base", args[1]), ]), "3.0") + return MPICall("MPI_Win_detach", OrderedDict([("win", args[0]),("base", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_win_dup_fn(*args): - return MPICall("MPI_WIN_DUP_FN", OrderedDict([("oldwin", args[0]), ("win_keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "4.0") + return MPICall("MPI_WIN_DUP_FN", OrderedDict([("oldwin", args[0]),("win_keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_win_errhandler_function(*args): - return MPICall("MPI_Win_errhandler_function", OrderedDict([("win", args[0]), ("error_code", args[1]), ("varargs", args[2]), ]), "4.0") + return MPICall("MPI_Win_errhandler_function", OrderedDict([("win", args[0]),("error_code", args[1]),("varargs", args[2]),]), "4.0", bigints={}) @staticmethod def mpi_win_f2c(*args): - return MPICall("MPI_Win_f2c", OrderedDict([("win", args[0]), ]), "2.0") + return MPICall("MPI_Win_f2c", OrderedDict([("win", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_win_fence(*args): - return MPICall("MPI_Win_fence", OrderedDict([("assert", args[0]), ("win", args[1]), ]), "2.0") + return MPICall("MPI_Win_fence", OrderedDict([("assert", args[0]),("win", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_win_flush(*args): - return MPICall("MPI_Win_flush", OrderedDict([("rank", args[0]), ("win", args[1]), ]), "3.0") + return MPICall("MPI_Win_flush", OrderedDict([("rank", args[0]),("win", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_win_flush_all(*args): - return MPICall("MPI_Win_flush_all", OrderedDict([("win", args[0]), ]), "3.0") + return MPICall("MPI_Win_flush_all", OrderedDict([("win", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_win_flush_local(*args): - return MPICall("MPI_Win_flush_local", OrderedDict([("rank", args[0]), ("win", args[1]), ]), "3.0") + return MPICall("MPI_Win_flush_local", OrderedDict([("rank", args[0]),("win", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_win_flush_local_all(*args): - return MPICall("MPI_Win_flush_local_all", OrderedDict([("win", args[0]), ]), "3.0") + return MPICall("MPI_Win_flush_local_all", OrderedDict([("win", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_win_free(*args): - return MPICall("MPI_Win_free", OrderedDict([("win", args[0]), ]), "2.0") + return MPICall("MPI_Win_free", OrderedDict([("win", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_win_free_keyval(*args): - return MPICall("MPI_Win_free_keyval", OrderedDict([("win_keyval", args[0]), ]), "2.0") + return MPICall("MPI_Win_free_keyval", OrderedDict([("win_keyval", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_win_get_attr(*args): - return MPICall("MPI_Win_get_attr", OrderedDict([("win", args[0]), ("win_keyval", args[1]), ("attribute_val", args[2]), ("flag", args[3]), ]), "2.0") + return MPICall("MPI_Win_get_attr", OrderedDict([("win", args[0]),("win_keyval", args[1]),("attribute_val", args[2]),("flag", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_win_get_errhandler(*args): - return MPICall("MPI_Win_get_errhandler", OrderedDict([("win", args[0]), ("errhandler", args[1]), ]), "2.0") + return MPICall("MPI_Win_get_errhandler", OrderedDict([("win", args[0]),("errhandler", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_win_get_group(*args): - return MPICall("MPI_Win_get_group", OrderedDict([("win", args[0]), ("group", args[1]), ]), "2.0") + return MPICall("MPI_Win_get_group", OrderedDict([("win", args[0]),("group", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_win_get_info(*args): - return MPICall("MPI_Win_get_info", OrderedDict([("win", args[0]), ("info_used", args[1]), ]), "3.0") + return MPICall("MPI_Win_get_info", OrderedDict([("win", args[0]),("info_used", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_win_get_name(*args): - return MPICall("MPI_Win_get_name", OrderedDict([("win", args[0]), ("win_name", args[1]), ("resultlen", args[2]), ]), "2.0") + return MPICall("MPI_Win_get_name", OrderedDict([("win", args[0]),("win_name", args[1]),("resultlen", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_win_lock(*args): - return MPICall("MPI_Win_lock", OrderedDict([("lock_type", args[0]), ("rank", args[1]), ("assert", args[2]), ("win", args[3]), ]), "2.0") + return MPICall("MPI_Win_lock", OrderedDict([("lock_type", args[0]),("rank", args[1]),("assert", args[2]),("win", args[3]),]), "2.0", bigints={}) @staticmethod def mpi_win_lock_all(*args): - return MPICall("MPI_Win_lock_all", OrderedDict([("assert", args[0]), ("win", args[1]), ]), "3.0") + return MPICall("MPI_Win_lock_all", OrderedDict([("assert", args[0]),("win", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_win_null_copy_fn(*args): - return MPICall("MPI_WIN_NULL_COPY_FN", OrderedDict([("oldwin", args[0]), ("win_keyval", args[1]), ("extra_state", args[2]), ("attribute_val_in", args[3]), ("attribute_val_out", args[4]), ("flag", args[5]), ]), "4.0") + return MPICall("MPI_WIN_NULL_COPY_FN", OrderedDict([("oldwin", args[0]),("win_keyval", args[1]),("extra_state", args[2]),("attribute_val_in", args[3]),("attribute_val_out", args[4]),("flag", args[5]),]), "4.0", bigints={}) @staticmethod def mpi_win_null_delete_fn(*args): - return MPICall("MPI_WIN_NULL_DELETE_FN", OrderedDict([("win", args[0]), ("win_keyval", args[1]), ("attribute_val", args[2]), ("extra_state", args[3]), ]), "4.0") + return MPICall("MPI_WIN_NULL_DELETE_FN", OrderedDict([("win", args[0]),("win_keyval", args[1]),("attribute_val", args[2]),("extra_state", args[3]),]), "4.0", bigints={}) @staticmethod def mpi_win_post(*args): - return MPICall("MPI_Win_post", OrderedDict([("group", args[0]), ("assert", args[1]), ("win", args[2]), ]), "2.0") + return MPICall("MPI_Win_post", OrderedDict([("group", args[0]),("assert", args[1]),("win", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_win_set_attr(*args): - return MPICall("MPI_Win_set_attr", OrderedDict([("win", args[0]), ("win_keyval", args[1]), ("attribute_val", args[2]), ]), "2.0") + return MPICall("MPI_Win_set_attr", OrderedDict([("win", args[0]),("win_keyval", args[1]),("attribute_val", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_win_set_errhandler(*args): - return MPICall("MPI_Win_set_errhandler", OrderedDict([("win", args[0]), ("errhandler", args[1]), ]), "2.0") + return MPICall("MPI_Win_set_errhandler", OrderedDict([("win", args[0]),("errhandler", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_win_set_info(*args): - return MPICall("MPI_Win_set_info", OrderedDict([("win", args[0]), ("info", args[1]), ]), "3.0") + return MPICall("MPI_Win_set_info", OrderedDict([("win", args[0]),("info", args[1]),]), "3.0", bigints={}) @staticmethod def mpi_win_set_name(*args): - return MPICall("MPI_Win_set_name", OrderedDict([("win", args[0]), ("win_name", args[1]), ]), "2.0") + return MPICall("MPI_Win_set_name", OrderedDict([("win", args[0]),("win_name", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_win_shared_query(*args): - return MPICall("MPI_Win_shared_query", OrderedDict([("win", args[0]), ("rank", args[1]), ("size", args[2]), ("disp_unit", args[3]), ("baseptr", args[4]), ]), "3.0") + return MPICall("MPI_Win_shared_query", OrderedDict([("win", args[0]),("rank", args[1]),("size", args[2]),("disp_unit", args[3]),("baseptr", args[4]),]), "3.0", bigints={'size': 'mpi_address_kind'}) @staticmethod def mpi_win_start(*args): - return MPICall("MPI_Win_start", OrderedDict([("group", args[0]), ("assert", args[1]), ("win", args[2]), ]), "2.0") + return MPICall("MPI_Win_start", OrderedDict([("group", args[0]),("assert", args[1]),("win", args[2]),]), "2.0", bigints={}) @staticmethod def mpi_win_sync(*args): - return MPICall("MPI_Win_sync", OrderedDict([("win", args[0]), ]), "3.0") + return MPICall("MPI_Win_sync", OrderedDict([("win", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_win_test(*args): - return MPICall("MPI_Win_test", OrderedDict([("win", args[0]), ("flag", args[1]), ]), "2.0") + return MPICall("MPI_Win_test", OrderedDict([("win", args[0]),("flag", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_win_unlock(*args): - return MPICall("MPI_Win_unlock", OrderedDict([("rank", args[0]), ("win", args[1]), ]), "2.0") + return MPICall("MPI_Win_unlock", OrderedDict([("rank", args[0]),("win", args[1]),]), "2.0", bigints={}) @staticmethod def mpi_win_unlock_all(*args): - return MPICall("MPI_Win_unlock_all", OrderedDict([("win", args[0]), ]), "3.0") + return MPICall("MPI_Win_unlock_all", OrderedDict([("win", args[0]),]), "3.0", bigints={}) @staticmethod def mpi_win_wait(*args): - return MPICall("MPI_Win_wait", OrderedDict([("win", args[0]), ]), "2.0") + return MPICall("MPI_Win_wait", OrderedDict([("win", args[0]),]), "2.0", bigints={}) @staticmethod def mpi_wtick(*args): - return MPICall("MPI_Wtick", OrderedDict([]), "1.0") + return MPICall("MPI_Wtick", OrderedDict([]), "1.0", bigints={}) @staticmethod def mpi_wtime(*args): - return MPICall("MPI_Wtime", OrderedDict([]), "1.0") + return MPICall("MPI_Wtime", OrderedDict([]), "1.0", bigints={}) from Infrastructure.CorrectParameter import CorrectParameterFactory @@ -2255,7 +2255,7 @@ class CorrectMPICallFactory: @staticmethod def mpi_cart_get(): correct_params = CorrectParameterFactory() - return MPICallFactory().mpi_cart_get(correct_params.get("comm_cart"),correct_params.get("maxdims"),correct_params.get("dims"),correct_params.get("periods"),correct_params.get("coords")) + return MPICallFactory().mpi_cart_get(correct_params.get("comm"),correct_params.get("maxdims"),correct_params.get("dims"),correct_params.get("periods"),correct_params.get("coords")) @staticmethod def mpi_cart_map(): diff --git a/scripts/Infrastructure/PrintInst.py b/scripts/Infrastructure/PrintInst.py new file mode 100644 index 0000000000000000000000000000000000000000..544bc7f7b87774d9ffcf1a2a822014811543084c --- /dev/null +++ b/scripts/Infrastructure/PrintInst.py @@ -0,0 +1,58 @@ +#! /usr/bin/python3 +from __future__ import annotations + +from typing_extensions import override +import re + +from Infrastructure.Instruction import Instruction +from Infrastructure.Variables import ERROR_MARKER_COMMENT_BEGIN, ERROR_MARKER_COMMENT_END, ERROR_MARKER_COMMENT_BEGIN_FORT, ERROR_MARKER_COMMENT_END_FORT, adjust_var_language +import Infrastructure.Variables as infvars + +print_template_c = "printf(\"@STRING@\"@ARGS@);" +print_template_fort = "print *, \"@STRING@\"@ARGS@" + +""" + Class Overview: + The `PrintInst` class is a helper for creating print instructions + + Methods: + - `__init__(self)`: Initializes a new print instruction + - `__str__(self)`: Converts the print instance to a string, replacing placeholders. +""" + +class PrintInst(Instruction): + @override + def __init__(self, string: str, args: List[str] = [], rank: str | int = 'all', identifier: str = None): + """ + Creates a new print instruction + + Args: + string: String to print + args: List of variables to print (postfix) + """ + super().__init__("", rank, identifier) + self._string = string + self._args = args + + @override + def __str__(self): + actual_template = print_template_c if infvars.generator_language == "c" else print_template_fort + actual_string = self._string + + arg_str = "" + for arg in self._args: + arg_str = ", " + adjust_var_language(arg) + if infvars.generator_language == "c": + actual_string += " %d" + if infvars.generator_language == "c": + actual_string += "\\n" + result = actual_template.replace("@STRING@", actual_string).replace("@ARGS@", arg_str) + if infvars.generator_language == "c": + error_begin = ERROR_MARKER_COMMENT_BEGIN + error_end = ERROR_MARKER_COMMENT_END + else: + error_begin = ERROR_MARKER_COMMENT_BEGIN_FORT + error_end = ERROR_MARKER_COMMENT_END_FORT + if self.has_error(): + result = error_begin + result + error_end + return result diff --git a/scripts/Infrastructure/Template.py b/scripts/Infrastructure/Template.py index 5b419102228b0f65794d89026adf89cac0b0f2da..ec2de098b4f32c1e60a1664bb226ece1505e6218 100644 --- a/scripts/Infrastructure/Template.py +++ b/scripts/Infrastructure/Template.py @@ -4,11 +4,14 @@ from __future__ import annotations import typing from Infrastructure.Instruction import Instruction +from Infrastructure.AllocCall import AllocCall from Infrastructure.MPICall import MPICall from Infrastructure.CorrectParameter import CorrectParameterFactory from Infrastructure.Variables import ERROR_CLASSES +from Infrastructure.Branches import IfBranch +import Infrastructure.Variables as infvars -deadlock_marker = "\n\n This testcase can result in a Deadlock\n" +deadlock_marker = "\n!\n! This testcase can result in a Deadlock\n!" """ THIS BLOCK IS CURRENTLY NOT USED: @@ -24,7 +27,7 @@ BEGIN_MPI_FEATURES END_MPI_FEATURES """ -template = """/* ///////////////////////// The MPI Bug Bench //////////////////////// +template_c = """/* ///////////////////////// The MPI Bug Bench //////////////////////// Description: @{desc}@ @@ -45,6 +48,14 @@ END_MBB_TESTS #include <stddef.h> #include <stdint.h> +// C23 defines its own bool type +// However, MPI expects int treated as bool +// Using int directly would cause issues with fortran, where logical is used instead, +// breaking C -> Fortran conversion +#define bool int +#define true 1 +#define false 0 + int main(int argc, char **argv) { int nprocs = -1; int rank = -1; @@ -64,12 +75,66 @@ int main(int argc, char **argv) { } """ +template_fort = """ +! ///////////////////////// The MPI Bug Bench //////////////////////// +! +! Description: @{desc}@ +! +! Version of MPI: @{version}@ +! +! Category: @{category}@ +! +!BEGIN_MBB_TESTS +! $ mpirun -np @{min_num_ranks}@ ${EXE} +! | @{outcome}@ +! | @{errormsg}@ +!END_MBB_TESTS +! ////////////////////// End of MBI headers ////////////////////// + +program main + use mpi_f08 + implicit none + + integer :: ierr + integer :: nprocs = -1 + integer :: rank = -1 + integer :: double_size + integer :: integer_size + integer :: logical_size + integer :: i ! Loop index used by some tests + @{stack_vars}@ + + @{mpi_init}@ + call MPI_Comm_size(MPI_COMM_WORLD, nprocs, ierr) + call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr) + if (nprocs .lt. @{min_num_ranks}@) then + print *, "MBB ERROR: This test needs at least @{min_num_ranks}@ processes to produce a bug!\\n" + end if + + call mpi_type_size(MPI_DOUBLE_PRECISION, double_size, ierr) + call mpi_type_size(MPI_INTEGER, integer_size, ierr) + call mpi_type_size(MPI_LOGICAL, logical_size, ierr) + + @{test_code}@ + + @{mpi_finalize}@ + print *, "Rank ", rank, " finished normally" +end program +""" + init_thread_template = """int provided; MPI_Init_thread(&argc, &argv, @{thread_level}@, &provided); if (@{thread_level}@ < provided) printf("MBI ERROR: The MPI Implementation does not provide the required thread level!\\n"); """ +def get_call(func: str): + if infvars.generator_language == "fort": + return f"call {func}(ierr)" + else: + args = "&argc, &argv" if func == "MPI_Init" else "" + return f"{func}({args});" + class TemplateManager: """ @@ -122,6 +187,8 @@ class TemplateManager: self._has_init = has_init self._can_deadlock = can_deadlock self._stack_variables = {} + self._stack_variable_inits = {} + self._stack_variable_dims = {} self._allow_reorder = allow_reorder self._category = "" @@ -131,7 +198,7 @@ class TemplateManager: """ version = self.get_version() if self._can_deadlock: - # append the deadlock info after teh version info + # append the deadlock info after the version info version = version + deadlock_marker code_string = "" current_rank = 'all' @@ -173,47 +240,57 @@ class TemplateManager: # no re-ordering instr_copy = self._instructions.copy() + alloc_vars_fort = [] + for inst in instr_copy: + if isinstance(inst, AllocCall) and infvars.generator_language == "fort": + alloc_vars_fort.append(f" {inst.get_type()}, pointer :: {inst.get_name()}(:)") if inst.get_rank_executing() != current_rank: if current_rank != 'all': - code_string = code_string + "}\n" + code_string = code_string + IfBranch.trailer() + "\n" # end previous if current_rank = inst.get_rank_executing() if current_rank == 'not0': - code_string = code_string + "if (rank!=0){\n" + code_string = code_string + IfBranch("rank != 0").header() + "\n" elif current_rank != 'all': - code_string = code_string + "if (rank==%d){\n" % current_rank + code_string = code_string + IfBranch(f"rank == {current_rank}").header() + "\n" code_string += str(inst) + "\n" # end for inst if current_rank != 'all': - code_string = code_string + "}\n" # end previous if + code_string = code_string + IfBranch.trailer() + "\n" # end previous if init_string = "" if self._has_init: if self._thread_level == None: - init_string = "MPI_Init(&argc, &argv);" + init_string = get_call("MPI_Init") else: init_string = init_thread_template.replace("@{thread_level}@", self._thread_level) finalize_string = "" if self._has_finalize: - finalize_string = "MPI_Finalize();" + finalize_string = get_call("MPI_Finalize") stack_vars_str = "" - for var_type, number in self._stack_variables.items(): - for i in range(number): - stack_vars_str += (var_type + " " + var_type.lower() + "_" + str(i) - + " = " + CorrectParameterFactory().get_initializer(var_type) + ";\n") - - return (template + for var_type, names in self._stack_variables.items(): + for name in names: + stack_vars_str += self.get_stack_var(var_type, name) + for alloc_var in alloc_vars_fort: + stack_vars_str += alloc_var + "\n" + + actual_description = self._descr_full + if infvars.generator_language == "fort": + actual_description = actual_description.replace("\n", "\n!") + + actual_template = template_c if infvars.generator_language == "c" else template_fort + return (actual_template .replace("@{min_num_ranks}@", str(self._min_ranks)) .replace("@{outcome}@", outcome_str) .replace("@{stack_vars}@", stack_vars_str) .replace("@{mpi_init}@", init_string) .replace("@{mpi_finalize}@", finalize_string) - .replace("@{desc}@", self._descr_full) + .replace("@{desc}@", actual_description) .replace("@{category}@", self._category) .replace("@{errormsg}@", self._descr_short) .replace("@{version}@", version) @@ -250,7 +327,7 @@ class TemplateManager: inst.set_rank_executing(rank_to_execute) self._instructions.append(inst) - def add_stack_variable(self, variable_type: str) -> str: + def add_stack_variable(self, variable_type: str, name: str = "", init: str = "", arr_dim: int = 0) -> str: """ Adds a new stack variable and returns its name to be used in the code. the variable is initialized with the initializer given by the correctParameter class @@ -258,14 +335,62 @@ class TemplateManager: names follow the sceme: mpi_request_0, mpi_request_1, ... """ # currently supported: - assert variable_type.startswith("MPI") or variable_type in ["int"] + assert variable_type.startswith("MPI") or variable_type in ["int", "int*", "bool", "bool*", "c_ptr"] # does not support ptr types ! if variable_type not in self._stack_variables: - self._stack_variables[variable_type] = 0 + self._stack_variables[variable_type] = [] + if not name: + name = variable_type.lower() + "_" + str(len(self._stack_variables[variable_type])) + self._stack_variables[variable_type].append(name) + if init: + self._stack_variable_inits[name] = init + self._stack_variable_dims[name] = arr_dim + return name - name = variable_type.lower() + "_" + str(self._stack_variables[variable_type]) - self._stack_variables[variable_type] = self._stack_variables[variable_type] + 1 + def remove_stack_variable(self, variable_type: str, variable_name: str = "") -> str: + """ + Removes a stack variable and returns the removed variable name + """ + assert len(self._stack_variables[variable_type]) == 1 or variable_name, "Ambiguous replacement of stack variable without name specifier!" + removed_var = variable_name + if not variable_name: + removed_var = self._stack_variables[variable_type][0] + if removed_var in self._stack_variable_inits: + del self._stack_variable_inits[removed_var] + del self._stack_variable_dims[removed_var] + self._stack_variables[variable_type].remove(removed_var) + return removed_var + + def reserve_stack_name(self, variable_type: str) -> str: + if variable_type not in self._stack_variables: + self._stack_variables[variable_type] = [] + name = variable_type.lower() + "_" + str(len(self._stack_variables[variable_type])) + self._stack_variables[variable_type].append("_DUMMY") return name + + def get_stack_var(self, typename: str, name: str) -> str: + if name == "_DUMMY": return "" + init = "" + if name in self._stack_variable_inits: init = self._stack_variable_inits[name] # Explicit init has priority + if not init and CorrectParameterFactory().get_initializer(typename): # If no explicit init, but implicit exists... + for _ in range(max(self._stack_variable_dims[name],1)): # Initialize for each element in array + init = init + CorrectParameterFactory().get_initializer(typename) + ", " + init = init[:-2] # remove last ", " + if init and self._stack_variable_dims[name] >= 1: init = "{" + init + "}" # Add initializer braces + if init: init = f"= {init}" + if infvars.generator_language == "c": + dims = f"[{self._stack_variable_dims[name]}]" if self._stack_variable_dims[name] >= 1 else "" # Set array dimension + return f"{typename} {name}{dims} {init};\n" + else: + dims = f"(0:{self._stack_variable_dims[name] - 1})" if self._stack_variable_dims[name] >= 1 else "" # Set array dimension, including explicit starting index! + if self._stack_variable_dims[name] == -1: dims = "(:)" # Deferred shape + init = init.replace("{", "(/").replace("}", "/)") + type_prefix = f"type({typename})" + if typename.startswith("int"): type_prefix = "integer" + if typename.startswith("bool"): type_prefix = "logical" + if typename == "MPI_Aint": type_prefix = "integer(kind=mpi_address_kind)" + if typename.endswith("*"): type_prefix += ", pointer" + return (f"{type_prefix} :: {name}{dims} {init}\n") def get_version(self) -> str: """ diff --git a/scripts/Infrastructure/TemplateFactory.py b/scripts/Infrastructure/TemplateFactory.py index 3772f8f72226198fed9bbf5986fd2089cfb39754..fe3de371f65d048d59aaf9c7badbf8c7e74c57fb 100644 --- a/scripts/Infrastructure/TemplateFactory.py +++ b/scripts/Infrastructure/TemplateFactory.py @@ -4,13 +4,15 @@ from __future__ import annotations import typing from typing import List, Tuple -from Infrastructure.AllocCall import AllocCall +from Infrastructure.AllocCall import AllocCall, get_free_by_name from Infrastructure.CorrectParameter import CorrectParameterFactory from Infrastructure.Instruction import Instruction from Infrastructure.MPIAPIInfo.MPIAPICategories import mpi_scatter_collective_funcs from Infrastructure.MPICall import MPICall +from Infrastructure.ArrAsgn import ArrAsgn from Infrastructure.MPICallFactory import CorrectMPICallFactory, MPICallFactory from Infrastructure.Template import TemplateManager +import Infrastructure.Variables as infvars list_of_not_implemented_types = [ # TODO add wrong usage of @@ -142,12 +144,11 @@ def get_buffer_for_usertype(mpi_type_creator, tm, insert_before, size=100): tm.insert_instruction(alloc, before_instruction=insert_before, before_first_of_list=True) elif mpi_type_creator == "mpi_type_create_struct": result_type = tm.add_stack_variable("MPI_Datatype") - tm.insert_instruction(Instruction("int block_length_struct[] = {2,4};"), - before_instruction=insert_before, before_first_of_list=True) - tm.insert_instruction(Instruction("MPI_Aint displacements_struct[] = {0,3*sizeof(int)};"), - before_instruction=insert_before, before_first_of_list=True) - tm.insert_instruction(Instruction("MPI_Datatype dtypes_struct[] = {MPI_INT,MPI_INT};"), - before_instruction=insert_before, before_first_of_list=True) + tm.add_stack_variable("int", "block_length_struct", "2,4", 2) + tm.add_stack_variable("MPI_Aint", "displacements_struct", arr_dim=2) + tm.insert_instruction(ArrAsgn("displacements_struct", 0, 0), before_instruction=insert_before, before_first_of_list=True) + tm.insert_instruction(ArrAsgn("displacements_struct", 0, "3*sizeof(int)"), before_instruction=insert_before, before_first_of_list=True) + tm.add_stack_variable("MPI_Datatype", "dtypes_struct", "MPI_INT,MPI_INT", 2) call = MPICallFactory.mpi_type_create_struct(2, "block_length_struct", "displacements_struct", "dtypes_struct", "&" + result_type) tm.insert_instruction(call, before_instruction=insert_before, before_first_of_list=True) @@ -222,7 +223,7 @@ def get_type_buffers(tm, type_1, type_2, size_1, size_2): else: assert type_1 in user_defined_types buf_name_1, type_1_variable = get_buffer_for_usertype(type_1, tm, "MPICALL", size_1) - tm.register_instruction("free(" + buf_name_1 + ");") + tm.register_instruction(get_free_by_name(buf_name_1)) if type_2 in predefined_types: type_2_variable = type_2 buf_alloc_call = get_buffer_for_type(type_2, size_2) @@ -232,7 +233,7 @@ def get_type_buffers(tm, type_1, type_2, size_1, size_2): else: assert type_2 in user_defined_types buf_name_2, type_2_variable = get_buffer_for_usertype(type_2, tm, "MPICALL", size_2) - tm.register_instruction("free(" + buf_name_2 + ");") + tm.register_instruction(get_free_by_name(buf_name_2)) return type_1_variable, buf_name_1, type_2_variable, buf_name_2 @@ -308,7 +309,7 @@ def get_send_recv_template(send_func: str = "mpi_isend", recv_func: str | typing recv_func in persistent_recv_funcs + irecv_funcs + probe_pairs): tm.add_stack_variable("MPI_Request") if recv_func in probe_pairs: - flag_name = tm.add_stack_variable("int") + flag_name = tm.add_stack_variable("bool") # end preperation of all local variables # before the send/recv block @@ -343,10 +344,11 @@ def get_send_recv_template(send_func: str = "mpi_isend", recv_func: str | typing if recv_func in probe_pairs: if recv_func in [["mpi_improbe", "mpi_mrecv"], ["mpi_improbe", "mpi_imrecv"]]: - tm.insert_instruction(Instruction("while (!" + flag_name + "){", rank=0, identifier="PROBELOOP"), + r.set_arg("flag", f"&{flag_name}") + tm.insert_instruction(Instruction(flag_wait_header(flag_name), rank=0, identifier="PROBELOOP"), before_instruction=r) # insertion before the improbe call - tm.register_instruction("}", rank_to_execute=0, identifier="PROBELOOP") # end while + tm.register_instruction(flag_wait_trailer(), rank_to_execute=0, identifier="PROBELOOP") # end while # the matched recv tm.register_instruction(CorrectMPICallFactory.get(recv_func[1]), rank_to_execute=0, identifier="MATCHEDRECEIVE") @@ -376,15 +378,15 @@ def get_send_recv_template(send_func: str = "mpi_isend", recv_func: str | typing # end MPI operation # cleanup if send_func in ["mpi_bsend", "mpi_ibsend", "mpi_bsend_init"]: - tm.register_instruction("int freed_size;", identifier="FREE") + tm.add_stack_variable("int", "freed_size") tm.register_instruction(MPICallFactory.mpi_buffer_detach("mpi_buf", "&freed_size"), identifier="FREE") - tm.register_instruction("free(mpi_buf);", identifier="FREE") + tm.register_instruction(get_free_by_name("mpi_buf"), identifier="FREE") tm.register_instruction(cf.get_buffer_free(), identifier="FREE") if send_func in sendrecv_funcs: # spilt send and recv buf - tm.register_instruction("free(recv_buf);", identifier="FREE") + tm.register_instruction(get_free_by_name("recv_buf"), identifier="FREE") if send_func in persistent_send_funcs: tm.register_instruction(CorrectMPICallFactory.mpi_request_free(), rank_to_execute=1,identifier="FREE") @@ -409,8 +411,7 @@ def get_rma_template(win_alloc_func: str = "mpi_win_allocate", rmaop_func: str = tm.register_instruction(AllocCall( cf.dtype[0], cf.buf_size, cf.buf_var_name, use_malloc=False, identifier="RMA_LOCALBUF_ALLOC", rank="all")) - (win_declare, alloc_list, free_list) = get_allocated_window(win_alloc_func, cf.get("win"), cf.winbuf_var_name, "int", "10") - tm.register_instruction(win_declare, identifier="RMA_WIN_DECLARE") + (alloc_list, free_list) = get_allocated_window(tm, win_alloc_func, cf.get("win"), cf.winbuf_var_name, "int", "10") tm.register_instruction(alloc_list, identifier="RMA_WIN_ALLOC") if sync_mode == "fence": @@ -440,8 +441,19 @@ def get_rma_template(win_alloc_func: str = "mpi_win_allocate", rmaop_func: str = return tm +def flag_wait_header(flag: str, isBool: bool = True) -> str: + if infvars.generator_language == "c": + return f"while (!{flag}) {{" + else: + if isBool: + return f"do while (.not. {flag})" + return f"do while ({flag} == 0)" - +def flag_wait_trailer() -> str: + if infvars.generator_language == "c": + return "}" + else: + return "end do" def get_invalid_param_p2p_case(param, value, check_receive, send_func, recv_func): tm = get_send_recv_template(send_func, recv_func) @@ -472,14 +484,14 @@ def insert_probe(tm, probe_to_use, recv_call): probe_call.set_rank_executing(recv_call.get_rank_executing()) if probe_to_use == "mpi_iprobe": - flag_name = tm.add_stack_variable("int") # the flag + flag_name = tm.add_stack_variable("bool") # the flag tm.insert_instruction(Instruction(flag_name + "=0;", rank=recv_call.get_rank_executing()), before_instruction=recv_call) - tm.insert_instruction(Instruction("while (!" + flag_name + "){", rank=recv_call.get_rank_executing()), + tm.insert_instruction(Instruction(flag_wait_header(flag_name), rank=recv_call.get_rank_executing()), before_instruction=recv_call) probe_call.set_arg("flag", "&"+flag_name) tm.insert_instruction(probe_call, before_instruction=recv_call) - tm.insert_instruction(Instruction("}", rank=recv_call.get_rank_executing()), + tm.insert_instruction(Instruction(flag_wait_trailer(), rank=recv_call.get_rank_executing()), before_instruction=recv_call) # end while else: tm.insert_instruction(probe_call, before_instruction=recv_call) @@ -487,26 +499,38 @@ def insert_probe(tm, probe_to_use, recv_call): return probe_call -def replace_wait(wait_call, tm, wait_func_to_use): +def replace_wait(wait_call, tm, wait_func_to_use, provide_request_array: bool = False): assert wait_func_to_use in ["mpi_wait", "mpi_test", "mpi_waitall", "mpi_testall", "mpi_waitany", "mpi_testany", "mpi_waitsome", "mpi_testsome"] if wait_func_to_use == "mpi_wait": return # nothing to do if wait_func_to_use == "mpi_test": - flag_name = tm.add_stack_variable("int") + flag_name = tm.add_stack_variable("bool") test_call = MPICallFactory.mpi_test(wait_call.get_arg("request"), "&" + flag_name, wait_call.get_arg("status")) test_call.set_rank_executing(wait_call.get_rank_executing()) test_call.set_identifier(wait_call.get_identifier()) - tm.insert_instruction(Instruction("while (!" + flag_name + "){", rank=wait_call.get_rank_executing()), + tm.insert_instruction(Instruction(flag_wait_header(flag_name), rank=wait_call.get_rank_executing()), before_instruction=wait_call) tm.insert_instruction(test_call, before_instruction=wait_call) # insertion before the improbe call - tm.insert_instruction(Instruction("}", rank=wait_call.get_rank_executing()), before_instruction="FREE", + tm.insert_instruction(Instruction(flag_wait_trailer(), rank=wait_call.get_rank_executing()), before_instruction="FREE", ) # end while tm.remove_instruction(wait_call) return status_to_use = wait_call.get_arg("status") if status_to_use == "MPI_STATUS_IGNORE": status_to_use = "MPI_STATUSES_IGNORE" + + # From here: All waits/tests use arrays + # Replace request with array type before continuing if needed + if not provide_request_array: + old_req = tm.remove_stack_variable("MPI_Request") + new_req = tm.add_stack_variable("MPI_Request", arr_dim=1) + + mpi_calls = tm.get_instruction("MPICALL", return_list=True) + for mpi_call in mpi_calls: + if mpi_call.has_arg("request"): + mpi_call.set_arg("request", mpi_call.get_arg("request").replace(old_req, new_req + "[0]")) + if wait_func_to_use == "mpi_waitall": test_call = MPICallFactory.mpi_waitall("1", wait_call.get_arg("request"), status_to_use) test_call.set_rank_executing(wait_call.get_rank_executing()) @@ -515,15 +539,15 @@ def replace_wait(wait_call, tm, wait_func_to_use): tm.remove_instruction(wait_call) return if wait_func_to_use == "mpi_testall": - flag_name = tm.add_stack_variable("int") + flag_name = tm.add_stack_variable("bool") test_call = MPICallFactory.mpi_testall("1", wait_call.get_arg("request"), "&" + flag_name, status_to_use) test_call.set_rank_executing(wait_call.get_rank_executing()) test_call.set_identifier(wait_call.get_identifier()) - tm.insert_instruction(Instruction("while (!" + flag_name + "){", rank=wait_call.get_rank_executing()), + tm.insert_instruction(Instruction(flag_wait_header(flag_name), rank=wait_call.get_rank_executing()), before_instruction=wait_call) tm.insert_instruction(test_call, before_instruction=wait_call) # insertion before the improbe call - tm.insert_instruction(Instruction("}", rank=wait_call.get_rank_executing()), + tm.insert_instruction(Instruction(flag_wait_trailer(), rank=wait_call.get_rank_executing()), before_instruction=wait_call) # end while tm.remove_instruction(wait_call) return @@ -537,24 +561,24 @@ def replace_wait(wait_call, tm, wait_func_to_use): tm.remove_instruction(wait_call) return if wait_func_to_use == "mpi_testany": - flag_name = tm.add_stack_variable("int") + flag_name = tm.add_stack_variable("bool") idx_name = tm.add_stack_variable("int") test_call = MPICallFactory.mpi_testany("1", wait_call.get_arg("request"), "&" + idx_name, "&" + flag_name, wait_call.get_arg("status")) test_call.set_rank_executing(wait_call.get_rank_executing()) test_call.set_identifier(wait_call.get_identifier()) - tm.insert_instruction(Instruction("while (!" + flag_name + "){", rank=wait_call.get_rank_executing()), + tm.insert_instruction(Instruction(flag_wait_header(flag_name), rank=wait_call.get_rank_executing()), before_instruction=wait_call) tm.insert_instruction(test_call, before_instruction=wait_call) # insertion before the improbe call - tm.insert_instruction(Instruction("}", rank=wait_call.get_rank_executing()), + tm.insert_instruction(Instruction(flag_wait_trailer(), rank=wait_call.get_rank_executing()), before_instruction=wait_call) # end while tm.remove_instruction(wait_call) return if wait_func_to_use == "mpi_waitsome": idx_name = tm.add_stack_variable("int") - idx_array = tm.add_stack_variable("int") + idx_array = tm.add_stack_variable("int", arr_dim=1) test_call = MPICallFactory.mpi_waitsome("1", wait_call.get_arg("request"), "&" + idx_name, - "&" + idx_array, status_to_use) + idx_array, status_to_use) test_call.set_rank_executing(wait_call.get_rank_executing()) test_call.set_identifier(wait_call.get_identifier()) tm.insert_instruction(test_call, before_instruction=wait_call) # insertion before the improbe call @@ -562,15 +586,15 @@ def replace_wait(wait_call, tm, wait_func_to_use): return if wait_func_to_use == "mpi_testsome": flag_name = tm.add_stack_variable("int") - idx_array = tm.add_stack_variable("int") - test_call = MPICallFactory.mpi_testsome("1", wait_call.get_arg("request"), "&" + flag_name, "&" + idx_array, + idx_array = tm.add_stack_variable("int", arr_dim=1) + test_call = MPICallFactory.mpi_testsome("1", wait_call.get_arg("request"), "&" + flag_name, idx_array, status_to_use) test_call.set_rank_executing(wait_call.get_rank_executing()) test_call.set_identifier(wait_call.get_identifier()) - tm.insert_instruction(Instruction("while (!" + flag_name + "){", rank=wait_call.get_rank_executing()), + tm.insert_instruction(Instruction(flag_wait_header(flag_name, False), rank=wait_call.get_rank_executing()), before_instruction=wait_call) tm.insert_instruction(test_call, before_instruction=wait_call) # insertion before the improbe call - tm.insert_instruction(Instruction("}", rank=wait_call.get_rank_executing()), + tm.insert_instruction(Instruction(flag_wait_trailer(), rank=wait_call.get_rank_executing()), before_instruction=wait_call) # end while tm.remove_instruction(wait_call) return @@ -609,9 +633,9 @@ def get_collective_template(collective_func): if c.has_arg("comm_cart"): tm.add_stack_variable("MPI_Comm") # TODO: create proper instructions - tm.register_instruction(Instruction("int periods[2]={1,1};"), identifier="ALLOC") - tm.register_instruction(Instruction("int dims[2]={0,0};"), identifier="ALLOC") # this is an initialization, we use dim_create function - tm.register_instruction(Instruction("int coords[2]={0,0};"), identifier="ALLOC") + tm.add_stack_variable("bool", "periods", "{1,1}", 2) + tm.add_stack_variable("int", "dims", "{0,0}", 2) + tm.add_stack_variable("int", "coords", "{0,0}", 2) # Get the dims of the cartesian topology MPI_Dims_create(nprocs,2,dims); dims_create = MPICallFactory.mpi_dims_create("nprocs", "2", "dims") tm.register_instruction(dims_create) @@ -696,7 +720,7 @@ def get_two_collective_template(collective_func1, collective_func2): return tm -def get_allocated_window(win_alloc_func, name, bufname, ctype, num_elements): +def get_allocated_window(tm: TemplateManager, win_alloc_func, name, bufname, ctype, num_elements): """ Constructs a window allocation using Win_allocate or Win_create and a corresponding free call. :param win_alloc_func: The window allocation to use (mpi_win_allocate or mpi_win_create). @@ -707,7 +731,7 @@ def get_allocated_window(win_alloc_func, name, bufname, ctype, num_elements): free_list = [] # declare window - win_declare = Instruction(f"MPI_Win {name};", identifier=identifier) + tm.add_stack_variable("MPI_Win", name) # extract C data type and window buffer name # dtype = CorrectParameterFactory().dtype[0] @@ -717,7 +741,10 @@ def get_allocated_window(win_alloc_func, name, bufname, ctype, num_elements): if win_alloc_func == "mpi_win_allocate": # MPI allocate, only declaration of local buffer required - alloc_list.append(Instruction(f"{ctype}* {bufname};", "all", identifier)) + if infvars.generator_language == "fort": + tm.add_stack_variable(f"c_ptr", bufname) + else: + tm.add_stack_variable(f"{ctype}*", bufname) win_allocate_call = CorrectMPICallFactory().mpi_win_allocate() win_allocate_call.set_arg("baseptr", "&" + bufname) elif win_alloc_func == "mpi_win_create": @@ -741,7 +768,7 @@ def get_allocated_window(win_alloc_func, name, bufname, ctype, num_elements): win_free_call.set_arg("win", "&" + name) free_list.append(win_free_call) - return (win_declare, alloc_list, free_list) + return (alloc_list, free_list) def get_rma_call(tm: TemplateManager, rma_func, rank, identifier="RMACall") -> Tuple[List[Instruction],Instruction, Instruction | None]: @@ -762,11 +789,12 @@ def get_rma_call(tm: TemplateManager, rma_func, rank, identifier="RMACall") -> T if rma_call.has_arg("request"): req = tm.add_stack_variable("MPI_Request") rma_call.set_arg("request", "&" + req) - inst_rma_req_wait = Instruction(f"MPI_Wait(&{req}, MPI_STATUS_IGNORE);", rank=rank) + inst_rma_req_wait = CorrectMPICallFactory.mpi_wait() + inst_rma_req_wait.set_arg("request", "&" + req) # some RMA ops require result_addr if rma_call.has_arg("result_addr"): - result_addr = tm.add_stack_variable("int") + result_addr = tm.reserve_stack_name(cf.dtype[0]) result_addr_alloc = AllocCall(cf.dtype[0], cf.buf_size, result_addr, rank=rank, identifier=identifier) rma_call.set_arg("result_addr", result_addr) additional_alloc_list.append(result_addr_alloc) @@ -774,7 +802,7 @@ def get_rma_call(tm: TemplateManager, rma_func, rank, identifier="RMACall") -> T # some RMA ops require compare_addr if rma_call.has_arg("compare_addr"): - compare_addr = tm.add_stack_variable("int") + compare_addr = tm.reserve_stack_name(cf.dtype[0]) compare_addr_alloc = AllocCall(cf.dtype[0], cf.buf_size, compare_addr, rank=rank) rma_call.set_arg("compare_addr", compare_addr) additional_alloc_list.append(compare_addr_alloc) @@ -844,7 +872,7 @@ def get_intercomm(comm_create_func: str, tm: TemplateManager, before_idx: int = call = MPICallFactory.mpi_comm_split("MPI_COMM_WORLD", "rank % 2", "rank", "&" + base_comm) call.set_identifier(identifier) tm.insert_instruction(call, before_instruction=before_inst) - call = MPICallFactory.mpi_intercomm_create(base_comm, "0", "MPI_COMM_WORLD", "!(rank %2)", + call = MPICallFactory.mpi_intercomm_create(base_comm, "0", "MPI_COMM_WORLD", "1 - rank % 2", CorrectParameterFactory().get("tag"), "&" + intercomm) call.set_identifier(identifier) tm.insert_instruction(call, before_instruction=before_inst) @@ -863,23 +891,30 @@ def get_intercomm(comm_create_func: str, tm: TemplateManager, before_idx: int = call = MPICallFactory.mpi_comm_group("MPI_COMM_WORLD", "&" + world_group) call.set_identifier(identifier) tm.insert_instruction(call, before_instruction=before_inst) - inst = Instruction("int triplet[3];" - "triplet[0] =0;" - "triplet[1] =nprocs;" - "triplet[2] =2;", identifier=identifier) - tm.insert_instruction(inst, before_instruction=before_inst) - call = MPICallFactory.mpi_group_incl(world_group, "1", "&triplet", "&" +even_group) + tm.add_stack_variable("int", "triplet", arr_dim=3) + tm.insert_instruction(ArrAsgn("triplet", 0, 0), before_instruction=before_inst) + tm.insert_instruction(ArrAsgn("triplet", 1, "nprocs"), before_instruction=before_inst) + tm.insert_instruction(ArrAsgn("triplet", 2, 2), before_instruction=before_inst) + call = MPICallFactory.mpi_group_incl(world_group, "1", "triplet", "&" +even_group) call.set_identifier(identifier) tm.insert_instruction(call, before_instruction=before_inst) - inst = Instruction("triplet[0] =1;", identifier=identifier) - tm.insert_instruction(inst, before_instruction=before_inst) - call = MPICallFactory.mpi_group_incl(world_group, "1", "&triplet", "&" +odd_group) + tm.insert_instruction(ArrAsgn("triplet", 0, 1), before_instruction=before_inst) + call = MPICallFactory.mpi_group_incl(world_group, "1", "triplet", "&" +odd_group) call.set_identifier(identifier) tm.insert_instruction(call, before_instruction=before_inst) - call = MPICallFactory.mpi_intercomm_create_from_groups("(rank % 2 ? " + even_group + ":" + odd_group + ")", + tm.add_stack_variable("MPI_Group", "local_group") + tm.add_stack_variable("MPI_Group", "remote_group") + if infvars.generator_language == "c": + tm.insert_instruction(Instruction("local_group = (rank % 2 ? " + even_group + ":" + odd_group + ");"), before_instruction=before_inst) + tm.insert_instruction(Instruction("remote_group = (!(rank % 2) ? " + even_group + ":" + odd_group + ");"), before_instruction=before_inst) + else: + tm.insert_instruction(Instruction("local_group = merge(" + even_group + ", " + odd_group + ", modulo(rank, 2) == 1)"), before_instruction=before_inst) + tm.insert_instruction(Instruction("remote_group = merge(" + even_group + ", " + odd_group + ", modulo(rank, 2) == 0)"), before_instruction=before_inst) + + call = MPICallFactory.mpi_intercomm_create_from_groups("local_group", "0", - "(!(rank % 2) ? " + even_group + ":" + odd_group + ")", + "remote_group", "0", CorrectParameterFactory().get("stringtag"), CorrectParameterFactory().get("INFO"), @@ -899,11 +934,11 @@ def get_intercomm(comm_create_func: str, tm: TemplateManager, before_idx: int = call = MPICallFactory.mpi_comm_split("MPI_COMM_WORLD", "rank % 2", "rank", "&" + intercomm_base_comm) call.set_identifier(identifier) tm.insert_instruction(call, before_instruction=before_inst) - call = MPICallFactory.mpi_intercomm_create(intercomm_base_comm, "0", "MPI_COMM_WORLD", "!(rank %2)", + call = MPICallFactory.mpi_intercomm_create(intercomm_base_comm, "0", "MPI_COMM_WORLD", "1 - rank % 2", CorrectParameterFactory().get("tag"), "&" + to_merge_intercomm) call.set_identifier(identifier) tm.insert_instruction(call, before_instruction=before_inst) - call = MPICallFactory.mpi_intercomm_merge(to_merge_intercomm, "rank %2", "&" + result_comm) + call = MPICallFactory.mpi_intercomm_merge(to_merge_intercomm, "rank % 2 == 1", "&" + result_comm) call.set_identifier(identifier) tm.insert_instruction(call, before_instruction=before_inst) call = MPICallFactory.mpi_comm_free("&" + to_merge_intercomm) diff --git a/scripts/Infrastructure/Variables.py b/scripts/Infrastructure/Variables.py index ff50514b103e41810bfec3182bc015307a1d2978..93b9401f878fe0bdaf734834528859303ea615cd 100644 --- a/scripts/Infrastructure/Variables.py +++ b/scripts/Infrastructure/Variables.py @@ -3,10 +3,58 @@ # The 'Magic' Comments denoting where the Error is in a testcase ERROR_MARKER_COMMENT_BEGIN = "/*MBBERROR_BEGIN*/" ERROR_MARKER_COMMENT_END = "/*MBBERROR_END*/" +ERROR_MARKER_COMMENT_BEGIN_FORT = "! MBBERROR_BEGIN\n" +ERROR_MARKER_COMMENT_END_FORT = "\n! MBBERROR_END" # The List of Features considered featurelist = ["P2P", "COLL", "RMA", "TOOL", "other"] +# Language to use (fort, c) +generator_language = "c" +# "Actual" Target, i.e. fort, c, or c_fort_compat +generation_target = "c" + +arg_c_to_fort = { + "MPI_INT": "MPI_INTEGER", + "MPI_DOUBLE": "MPI_DOUBLE_PRECISION", + "MPI_C_BOOL": "MPI_LOGICAL", + "sizeof(int)": "integer_size", + "sizeof(signed int)": "integer_size", + "sizeof(_Bool)": "logical_size", + "sizeof(double)": "double_size", + "true": ".TRUE.", + "false": ".FALSE.", +} + +def adjust_var_language(var) -> str: + import re + actual_value = str(var) + if generation_target != "c": + # NULL() and MPI_REQUEST_NULL (as a literal, not variable) are both caught by the compiler + # Tests are invalid, and would not compile + if actual_value == "NULL" or actual_value == "MPI_REQUEST_NULL": actual_value = "! FORTRAN_INCOMPATIBLE" + # Using a C datatype with no (implemented) fortran equivalent, also invalid + from Infrastructure.TemplateFactory import predefined_types + if actual_value in predefined_types and actual_value not in arg_c_to_fort: actual_value = "! FORTRAN_INCOMPATIBLE" + + # Checked for incompatible, now only continue if generating actual Fortran code + if generator_language != "fort": return actual_value + + # Normal replacements + for c_arg in arg_c_to_fort.keys(): + if c_arg in str(actual_value): + actual_value = actual_value.replace(c_arg, arg_c_to_fort[c_arg]) + break + # Need to remove addrof + actual_value = actual_value.replace("&", "") + # Need to remove derefs, but preserve multiplication! + actual_value = re.sub(r"^\*", r"", actual_value) + # Need to replace % with MODULO + actual_value = re.sub(r"([A-z0-9]+)\s*\%\s*([A-z0-9]+)", r"modulo(\1, \2)", actual_value) + # Replace array access [*] with (*) + actual_value = re.sub(r"([A-z0-9]+)\s*\[(.+)\]", r"\1(\2)", actual_value) + return actual_value + BASIC_TEST_LEVEL = 1 SUFFICIENT_REAL_WORLD_TEST_LEVEL = 2 SUFFICIENT_TEST_LEVEL = 3 diff --git a/scripts/LaTeXutils.py b/scripts/LaTeXutils.py index 65a3d64c6200845fbb8e035ded0730efb30eef71..76df84cdc023ead63a0c5554860adbe62c209762 100644 --- a/scripts/LaTeXutils.py +++ b/scripts/LaTeXutils.py @@ -68,11 +68,11 @@ def get_C_files_from_dir(dir): if dir[-1] != '/': # dir must be ended by a / for later separation between the path and basename dir = "{}/".format(dir) for filename in os.listdir(dir): - if filename.endswith(".c"): + if filename.endswith(".c") or filename.endswith(".f90"): files.append("{}/{}".format(dir,filename)) return files def filename_to_binary(file): - return re.sub("_", "\\_", re.sub(".*?//", "", re.sub("\.c","", file))) + return re.sub("_", "\\_", re.sub(".*?//", "", re.sub(r"\.c","", file))) def parse_files_per_expected(list): """ @@ -114,8 +114,8 @@ def generate_errors(files, outfile): with open(outfile, 'w') as output: output.write('\\begin{tabular}{|l|l|c|c|c| c|c|c |c||c|}\\cline{3-10}\n') - output.write('\\multicolumn{2}{c|}{}&\\multicolumn{3}{c|}{Point-to-point}&\\multicolumn{3}{c|}{Collective}&\multirow{6}{*}{RMA}&\multirow{6}{*}{Unique files}\\\\\\cline{3-8}\n') - output.write('\\multicolumn{2}{c|}{}&\\R{base calls}&\\R{~nonblocking~}&\R{persistent} & \\R{base calls}&\R{~nonblocking~}& \\R{tools} &&\\\\\\hline\n') + output.write('\\multicolumn{2}{c|}{}&\\multicolumn{3}{c|}{Point-to-point}&\\multicolumn{3}{c|}{Collective}&\\multirow{6}{*}{RMA}&\\multirow{6}{*}{Unique files}\\\\\\cline{3-8}\n') + output.write('\\multicolumn{2}{c|}{}&\\R{base calls}&\\R{~nonblocking~}&\\R{persistent} & \\R{base calls}&\R{~nonblocking~}& \\R{tools} &&\\\\\\hline\n') output.write('\\multirow{1}{*}{{Single call}} &Invalid Parameter & '); show_counts(['AInvalidParam']); output.write(' \\hline') diff --git a/scripts/MBButils.py b/scripts/MBButils.py index b22c6125f9c427383d9f43c618a2a376bd27b828..bacfb8d168264f9dc62127f515ef244d42ba1835 100644 --- a/scripts/MBButils.py +++ b/scripts/MBButils.py @@ -97,8 +97,9 @@ class AbstractTool: logger.addHandler(consoleHandler) # copy source file into logs directory - res = shutil.copy(filename, f"{binary}.c") - print(f"Copying {binary}.c, result is {res}") + _, file_ext = os.path.splitext(filename) + res = shutil.copy(filename, f"{binary}{file_ext}") + print(f"Copying {filename}, result is {binary}{file_ext}") logger.info(f"Running #{number} {filename}") @@ -310,16 +311,16 @@ def parse_one_code(filename): raise ValueError(f"Unexpected end of MBB_TESTS header at line {line_num}: \n{line}") elif "This testcase can result in a Deadlock" in line: can_deadlock = True - if state == 1 and re.match("\s+\$ ?.*", line): - m = re.match('\s+\$ ?(.*)', line) + if state == 1 and re.match("!?\s+\$ ?.*", line): + m = re.match('!?\s+\$ ?(.*)', line) cmd = m.group(1) nextline = next(input_file) line_num += 1 detail = 'OK' - if re.match('[ |]*OK *', nextline): + if re.match('!?[ |]*OK *', nextline): expect = 'OK' else: - m = re.match('[ |]*ERROR *(.*)', nextline) + m = re.match('!?[ |]*ERROR *(.*)', nextline) if not m: raise ValueError( f"\n{filename}:{line_num}: MBB parse error: Test not followed by a proper 'ERROR' line:\n{line}{nextline}") @@ -364,7 +365,7 @@ def categorize(tool, toolname, test, test_id, logs_dir, autoclean=False): if cache_id in cache_categorize: return cache_categorize[cache_id] - outcome = tool.parse(test_id, logs_dir) + outcome = tool.parse(test_id, f"{logs_dir}/{toolname}") # TODO DEBUG ONLY: replace with an assertion if not isinstance(outcome, dict): outcome = {"status": "failure"} diff --git a/scripts/errors/coll/Correct.py b/scripts/errors/coll/Correct.py index b0704302deef243388c9cbec42e2bda6020397df..fa94a93ee07bef62cdcd0ad3061412ab1f08d2d5 100644 --- a/scripts/errors/coll/Correct.py +++ b/scripts/errors/coll/Correct.py @@ -51,7 +51,7 @@ class CorrectColl(ErrorGenerator): yield tm tm.set_description("Correct-" + func_to_use + "-mpi_cart_get", "Correct code") cart_get = CorrectMPICallFactory().mpi_cart_get() - cart_get.set_arg("comm_cart", "mpi_comm_0") + cart_get.set_arg("comm", "mpi_comm_0") tm.insert_instruction(cart_get,before_instruction=comm_free) yield tm if generate_level <= BASIC_TEST_LEVEL: diff --git a/scripts/errors/coll/InvalidComm.py b/scripts/errors/coll/InvalidComm.py index 0a291a212abb3e83b51c94d5118a7882c6a364a4..0c130e64fbe6c8a919bf0798820e532fef474ca1 100644 --- a/scripts/errors/coll/InvalidComm.py +++ b/scripts/errors/coll/InvalidComm.py @@ -46,7 +46,7 @@ class InvalidComErrorColl(ErrorGenerator): "A function tries to get cartesian information of " + com_to_use) cart_get = CorrectMPICallFactory.mpi_cart_get() - cart_get.set_arg("comm_cart", com_to_use) + cart_get.set_arg("comm", com_to_use) tm.register_instruction(cart_get) cart_get.set_has_error() comm_free = CorrectMPICallFactory().mpi_comm_free() diff --git a/scripts/errors/coll/LocalConcurrency.py b/scripts/errors/coll/LocalConcurrency.py index 9bd7ccb52aa812dd5dfbf8ccabe5de3035dd3dad..b4502ad939901da62d4c0958db618b946ee113b9 100644 --- a/scripts/errors/coll/LocalConcurrency.py +++ b/scripts/errors/coll/LocalConcurrency.py @@ -7,6 +7,7 @@ from Infrastructure.CorrectParameter import CorrectParameterFactory, get_matchin from Infrastructure.Template import TemplateManager from Infrastructure.TemplateFactory import get_collective_template from Infrastructure.Variables import * +from Infrastructure.ArrAsgn import ArrAsgn class LocalConcurrencyErrorColl(ErrorGenerator): @@ -26,7 +27,7 @@ class LocalConcurrencyErrorColl(ErrorGenerator): tm.set_description("LocalConcurrency-" + func_to_use, "Usage of buffer before operation is completed") - conflicting_inst = Instruction("buf[2]=1;") + conflicting_inst = ArrAsgn(arr_name="buf", idx=2, value="1") conflicting_inst.set_has_error() wait = tm.get_instruction("WAIT", return_list=True) tm.insert_instruction(conflicting_inst, before_instruction=wait) diff --git a/scripts/errors/pt2pt/InvalidBuf.py b/scripts/errors/pt2pt/InvalidBuf.py index 8c6133191cf32a4fe2b1a3ea514065b2a705fa67..7ea65eb2511e439580c4a8f0fe76065ccceba1c8 100644 --- a/scripts/errors/pt2pt/InvalidBuf.py +++ b/scripts/errors/pt2pt/InvalidBuf.py @@ -53,8 +53,7 @@ class InvalidBufErrorP2P(ErrorGenerator): tm = get_invalid_param_p2p_case("buf", "not_allocated", check_recv, send_func, recv_func) tm.set_description("InvalidParam-Buffer-" + func, "Invalid Buffer: Not allocated") - tm.insert_instruction(Instruction("int* not_allocated;"), before_instruction="ALLOC", - before_first_of_list=True) + tm.add_stack_variable("int*", "not_allocated") yield tm # use buffer after free @@ -80,8 +79,7 @@ class InvalidBufErrorP2P(ErrorGenerator): tm = get_send_recv_template("mpi_isend", ["mpi_mprobe", func]) tm.set_description("InvalidParam-Buffer-" + func, "Invalid Buffer: Not allocated") - tm.insert_instruction(Instruction("int* not_allocated;"), before_instruction="ALLOC", - before_first_of_list=True) + tm.add_stack_variable("int*", "not_allocated") for call in tm.get_instruction(identifier="MATCHEDRECEIVE", return_list=True): call.set_arg("buf", "not_allocated") call.set_has_error() @@ -89,12 +87,13 @@ class InvalidBufErrorP2P(ErrorGenerator): tm = get_send_recv_template("mpi_isend", ["mpi_mprobe", func]) tm.set_description("InvalidParam-Buffer-" + func, "use after free") - tm.insert_instruction(Instruction("int* not_allocated;"), before_instruction="ALLOC", - before_first_of_list=True) + tm.add_stack_variable("int*", "not_allocated") call_list = tm.get_instruction(identifier="FREE", return_list=True) tm.remove_instruction(identifier="FREE") tm.insert_instruction(call_list, before_instruction="MPICALL", before_first_of_list=True) + for call in tm.get_instruction(identifier="MATCHEDRECEIVE", return_list=True): + call.set_has_error() yield tm @@ -137,7 +136,7 @@ class MessageRaceErrorSendRecv(ErrorGenerator): # use without alloc tm = get_send_recv_template("mpi_sendrecv", "mpi_sendrecv") tm.set_description("InvalidParam-Buffer-mpi_sendrecv", "not allocated receive buffer") - tm.insert_instruction(Instruction("int* not_allocated;"), before_instruction="ALLOC", before_first_of_list=True) + tm.add_stack_variable("int*", "not_allocated") for call in tm.get_instruction(identifier="MPICALL", return_list=True): call.set_arg("recvbuf", "not_allocated") @@ -146,7 +145,7 @@ class MessageRaceErrorSendRecv(ErrorGenerator): tm = get_send_recv_template("mpi_sendrecv", "mpi_sendrecv") tm.set_description("InvalidParam-Buffer-mpi_sendrecv", "not allocated send buffer") - tm.insert_instruction(Instruction("int* not_allocated;"), before_instruction="ALLOC", before_first_of_list=True) + tm.add_stack_variable("int*", "not_allocated") for call in tm.get_instruction(identifier="MPICALL", return_list=True): call.set_arg("sendbuf", "not_allocated") diff --git a/scripts/errors/pt2pt/InvalidFlag.py b/scripts/errors/pt2pt/InvalidFlag.py index 2145c7bebd64207b9ea81ac642406bdeb5c2a3d4..1dc5f07d2840ade5a1212f6fce92212a7daa149d 100644 --- a/scripts/errors/pt2pt/InvalidFlag.py +++ b/scripts/errors/pt2pt/InvalidFlag.py @@ -5,7 +5,7 @@ from Infrastructure.ErrorGenerator import ErrorGenerator from Infrastructure.Instruction import Instruction from Infrastructure.MPICallFactory import CorrectMPICallFactory, MPICallFactory -from Infrastructure.TemplateFactory import get_send_recv_template, get_invalid_param_p2p_case, replace_wait +from Infrastructure.TemplateFactory import get_send_recv_template, get_invalid_param_p2p_case, replace_wait, flag_wait_header, flag_wait_trailer class InvalidFlagErrorP2P(ErrorGenerator): @@ -29,7 +29,7 @@ class InvalidFlagErrorP2P(ErrorGenerator): tm.set_description("InvalidParam-Status-" + func_to_test, "Invalid Status: %s" % status) if status == "MPI_STATUSES_IGNORE": tm.set_description("InvalidParam-Status-" + func_to_test, - "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore" % status) + "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore FORTRAN_INCOMPATIBLE" % status) if test_probe: for call in tm.get_instruction(identifier="MPICALL", return_list=True): @@ -49,7 +49,7 @@ class InvalidFlagErrorP2P(ErrorGenerator): tm.set_description("InvalidParam-Status-" + probe_to_use, "Invalid Status: %s" % status) if status == "MPI_STATUSES_IGNORE": tm.set_description("InvalidParam-Status-" + probe_to_use, - "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore" % status) + "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore FORTRAN_INCOMPATIBLE" % status) probe_call = CorrectMPICallFactory.get(probe_to_use) probe_call.set_arg("status", status) @@ -57,13 +57,12 @@ class InvalidFlagErrorP2P(ErrorGenerator): probe_call.set_rank_executing(0) if probe_to_use == "mpi_iprobe": - tm.add_stack_variable("int") # the flag - tm.insert_instruction(Instruction("int flag=0;", rank=0), before_instruction="MPICALL", - before_first_of_list=True) - tm.insert_instruction(Instruction("while (!flag){", rank=0), before_instruction="MPICALL", + flag_name = tm.add_stack_variable("bool", "flag") # the flag + probe_call.set_arg("flag", "&" + flag_name) + tm.insert_instruction(Instruction(flag_wait_header(flag_name), rank=0), before_instruction="MPICALL", before_first_of_list=True) tm.insert_instruction(probe_call, before_instruction="MPICALL", before_first_of_list=True) - tm.insert_instruction(Instruction("}", rank=0), before_instruction="MPICALL", + tm.insert_instruction(Instruction(flag_wait_trailer(), rank=0), before_instruction="MPICALL", before_first_of_list=True) # end while else: tm.insert_instruction(probe_call, before_instruction="MPICALL", before_first_of_list=True) @@ -74,22 +73,22 @@ class InvalidFlagErrorP2P(ErrorGenerator): for wait_func in self.test_funcs: for flag in self.invalid_flag: - tm = get_send_recv_template("mpi_send", "mpi_irecv") - replace_wait(tm.get_instruction(identifier="WAIT"), tm, wait_func) - wait_call = tm.get_instruction(identifier="WAIT") - wait_call.set_has_error() - if flag == "not_allocated": - tm.insert_instruction(Instruction("int* not_allocated;"), before_instruction="ALLOC", - before_first_of_list=True) # not allocated - for arg in ["flag", "outcount", "indx", "array_of_indices"]: - - if wait_call.has_arg(arg): - prev_value = wait_call.get_arg(arg) - wait_call.set_arg(arg, flag) - tm.set_description("InvalidParam-" + arg + "-" + wait_func, ("Invalid %s: %s" % (arg, flag))) - yield tm - wait_call.set_arg(arg, prev_value) + tm = get_send_recv_template("mpi_send", "mpi_irecv") + replace_wait(tm.get_instruction(identifier="WAIT"), tm, wait_func) + wait_call = tm.get_instruction(identifier="WAIT") + if not wait_call.has_arg(arg): continue + wait_call.set_has_error() + if flag == "not_allocated": + if arg == "outcount" or arg == "indx": + tm.add_stack_variable("int*", "not_allocated") + if arg == "array_of_indices": + tm.add_stack_variable("int*", "not_allocated", arr_dim=-1) + if arg == "flag": + tm.add_stack_variable("bool*", "not_allocated") + wait_call.set_arg(arg, flag) + tm.set_description("InvalidParam-" + arg + "-" + wait_func, ("Invalid %s: %s" % (arg, flag))) + yield tm if generate_level <= BASIC_TEST_LEVEL: return @@ -97,8 +96,7 @@ class InvalidFlagErrorP2P(ErrorGenerator): for flag in self.invalid_flag: tm = get_send_recv_template("mpi_send", "mpi_recv") if flag == "not_allocated": - tm.insert_instruction(Instruction("int* not_allocated;"), before_instruction="ALLOC", - before_first_of_list=True) # not allocated + tm.add_stack_variable("bool*", "not_allocated") arg = "flag" wait_func="mpi_iprobe" tm.set_description("InvalidParam-" + arg + "-" + wait_func, ("Invalid %s: %s" % (arg, flag))) @@ -106,20 +104,18 @@ class InvalidFlagErrorP2P(ErrorGenerator): probe_call.set_arg("flag", flag) probe_call.set_has_error() probe_call.set_rank_executing(0) - tm.insert_instruction(Instruction("int flag=0;", rank=0), before_instruction="MPICALL", - before_first_of_list=True) - tm.insert_instruction(Instruction("while (!flag){", rank=0), before_instruction="MPICALL", + flag_name = tm.add_stack_variable("bool", "flag") + tm.insert_instruction(Instruction(flag_wait_header(flag_name), rank=0), before_instruction="MPICALL", before_first_of_list=True) tm.insert_instruction(probe_call, before_instruction="MPICALL", before_first_of_list=True) - tm.insert_instruction(Instruction("}", rank=0), before_instruction="MPICALL", before_first_of_list=True) + tm.insert_instruction(Instruction(flag_wait_trailer(), rank=0), before_instruction="MPICALL", before_first_of_list=True) yield tm tm = get_send_recv_template("mpi_send", ["mpi_improbe", "mpi_mrecv"]) arg = "flag" wait_func = "mpi_improbe" tm.set_description("InvalidParam-" + arg + "-" + wait_func, ("Invalid %s: %s" % (arg, flag))) if flag == "not_allocated": - tm.insert_instruction(Instruction("int* not_allocated;"), before_instruction="ALLOC", - before_first_of_list=True) # not allocated + tm.add_stack_variable("bool*", "not_allocated") for call in tm.get_instruction(identifier="MPICALL", return_list=True): if call.get_rank_executing() == 0: call.set_arg("flag", flag) diff --git a/scripts/errors/pt2pt/InvalidRequest.py b/scripts/errors/pt2pt/InvalidRequest.py index 576fd92eb6d6f7cd4237d94ec7fb325fd1643299..7282bc59264bcb6c8ecbb606e53ed3dc41ff6999 100644 --- a/scripts/errors/pt2pt/InvalidRequest.py +++ b/scripts/errors/pt2pt/InvalidRequest.py @@ -4,6 +4,7 @@ from Infrastructure.Variables import * from Infrastructure.ErrorGenerator import ErrorGenerator from Infrastructure.Instruction import Instruction from Infrastructure.MPICall import MPICall +from Infrastructure.ArrAsgn import ArrAsgn from Infrastructure.TemplateFactory import get_send_recv_template, replace_wait from Infrastructure.MPICallFactory import MPICallFactory @@ -85,18 +86,17 @@ class InvalidRequestArrayP2P(ErrorGenerator): tm = get_send_recv_template("mpi_send", "mpi_irecv") tm.set_description("InvalidParam-Request-" + wait_func, "Invalid Request Array: the same request is not allowed to be in the array multiple times") - replace_wait(tm.get_instruction(identifier="WAIT"), tm, wait_func) + replace_wait(tm.get_instruction(identifier="WAIT"), tm, wait_func, provide_request_array=True) wait_call = tm.get_instruction(identifier="WAIT") wait_call.set_has_error() prev_req = wait_call.get_arg("array_of_requests")[1:] # remove leading & wait_call.set_arg("array_of_requests", "req_array") - tm.insert_instruction(Instruction("MPI_Request req_array[2];", rank=wait_call.get_rank_executing()), + tm.add_stack_variable("MPI_Request", "req_array", "", 2) + tm.insert_instruction(ArrAsgn(arr_name="req_array", idx=0, value=prev_req, rank=wait_call.get_rank_executing()), before_instruction=wait_call) - tm.insert_instruction(Instruction("req_array[0] = " + prev_req + ";", rank=wait_call.get_rank_executing()), - before_instruction=wait_call) - tm.insert_instruction(Instruction("req_array[1] = " + prev_req + ";", rank=wait_call.get_rank_executing()), + tm.insert_instruction(ArrAsgn(arr_name="req_array", idx=1, value=prev_req, rank=wait_call.get_rank_executing()), before_instruction=wait_call) yield tm @@ -186,11 +186,10 @@ class InvalidPersistentRequestUsage(ErrorGenerator): if prev_req.startswith("&"): prev_req = prev_req[1:] # remove leading & - tm.insert_instruction(Instruction("MPI_Request req_array[2];", rank=start_call.get_rank_executing()), - before_instruction=start_call) - tm.insert_instruction(Instruction("req_array[0] = " + prev_req + ";", rank=start_call.get_rank_executing()), + tm.add_stack_variable("MPI_Request", "req_array", "", 2) + tm.insert_instruction(ArrAsgn(arr_name="req_array", idx=0, value=prev_req, rank=start_call.get_rank_executing()), before_instruction=start_call) - tm.insert_instruction(Instruction("req_array[1] = " + prev_req + ";", rank=start_call.get_rank_executing()), + tm.insert_instruction(ArrAsgn(arr_name="req_array", idx=1, value=prev_req, rank=start_call.get_rank_executing()), before_instruction=start_call) startall_call = MPICallFactory.mpi_startall(2, "req_array") @@ -210,11 +209,10 @@ class InvalidPersistentRequestUsage(ErrorGenerator): if prev_req.startswith("&"): prev_req = prev_req[1:] # remove leading & - tm.insert_instruction(Instruction("MPI_Request req_array[2];", rank=start_call.get_rank_executing()), - before_instruction=start_call) - tm.insert_instruction(Instruction("req_array[0] = " + prev_req + ";", rank=start_call.get_rank_executing()), + tm.add_stack_variable("MPI_Request", "req_array", "", 2) + tm.insert_instruction(ArrAsgn(arr_name="req_array", idx=0, value=prev_req, rank=start_call.get_rank_executing()), before_instruction=start_call) - tm.insert_instruction(Instruction("req_array[1] = " + "NULL" + ";", rank=start_call.get_rank_executing()), + tm.insert_instruction(ArrAsgn(arr_name="req_array", idx=1, value="MPI_REQUEST_NULL", rank=start_call.get_rank_executing()), before_instruction=start_call) startall_call = MPICallFactory.mpi_startall(2, "req_array") diff --git a/scripts/errors/pt2pt/InvalidStatus.py b/scripts/errors/pt2pt/InvalidStatus.py index c93666206a72de6e10bcbc605c07d4ab669f0dd1..b66d77e404be8f2631ebc82d7207136d9eb05b32 100644 --- a/scripts/errors/pt2pt/InvalidStatus.py +++ b/scripts/errors/pt2pt/InvalidStatus.py @@ -35,7 +35,7 @@ class InvalidStatusErrorP2P(ErrorGenerator): tm.set_description("InvalidParam-Status-" + func_to_test, "Invalid Status: %s" % status) if status == "MPI_STATUSES_IGNORE": tm.set_description("InvalidParam-Status-" + func_to_test, - "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore" % status) + "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore FORTRAN_INCOMPATIBLE" % status) if test_probe: for call in tm.get_instruction(identifier="MPICALL", return_list=True): @@ -55,7 +55,7 @@ class InvalidStatusErrorP2P(ErrorGenerator): tm.set_description("InvalidParam-Status-" + probe_to_use, "Invalid Status: %s" % status) if status == "MPI_STATUSES_IGNORE": tm.set_description("InvalidParam-Status-" + probe_to_use, - "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore" % status) + "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore FORTRAN_INCOMPATIBLE" % status) recv_call = tm.get_instruction(identifier="MPICALL", rank_excuting=0) probe_call = insert_probe(tm, probe_to_use, recv_call) @@ -74,7 +74,7 @@ class InvalidStatusErrorP2P(ErrorGenerator): tm.set_description("InvalidParam-Status-" + "mpi_recv", "Invalid Status: %s" % status) if status == "MPI_STATUSES_IGNORE": tm.set_description("InvalidParam-Status-" + "mpi_recv", - "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore" % status) + "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore FORTRAN_INCOMPATIBLE" % status) yield tm if generate_level <= BASIC_TEST_LEVEL: @@ -86,7 +86,7 @@ class InvalidStatusErrorP2P(ErrorGenerator): tm.set_description("InvalidParam-Status-" + wait_func, "Invalid Status: %s" % status) if status == "MPI_STATUSES_IGNORE": tm.set_description("InvalidParam-Status-" + wait_func, - "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore" % status) + "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore FORTRAN_INCOMPATIBLE" % status) # replace with wrong wait call replace_wait(tm.get_instruction(identifier="WAIT"), tm, wait_func) wait_call = tm.get_instruction(identifier="WAIT") @@ -114,7 +114,7 @@ class InvalidStatusErrorP2P(ErrorGenerator): tm.set_description("InvalidParam-Status-" + func, "Invalid Status: %s" % status) if status == "MPI_STATUSES_IGNORE": tm.set_description("InvalidParam-Status-" + func, - "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore" % status) + "Invalid Status: %s\n wrong usage of status_ignore vs statusES_ignore FORTRAN_INCOMPATIBLE" % status) for call in tm.get_instruction(identifier="MPICALL", return_list=True): call.set_has_error() call.set_arg("status", status) diff --git a/scripts/errors/pt2pt/LocalConcurrency.py b/scripts/errors/pt2pt/LocalConcurrency.py index 8ff9ed398b66328e2fc3e0b29a7c290a00bf2f40..767868aa8180ce25286e4c4b02e70e75752b8ce1 100644 --- a/scripts/errors/pt2pt/LocalConcurrency.py +++ b/scripts/errors/pt2pt/LocalConcurrency.py @@ -4,6 +4,7 @@ from Infrastructure.Variables import * from Infrastructure.ErrorGenerator import ErrorGenerator from Infrastructure.Instruction import Instruction from Infrastructure.TemplateFactory import get_send_recv_template +from Infrastructure.ArrAsgn import ArrAsgn sendrecv_funcs = ["mpi_sendrecv", "mpi_sendrecv_replace"] @@ -49,7 +50,7 @@ class LocalConcurrencyErrorP2P(ErrorGenerator): tm.set_description("LocalConcurrency-send-" + send_func, "usage of send buffer before operation is completed") - conflicting_inst = Instruction("buf[2]=1;") + conflicting_inst = ArrAsgn(arr_name="buf", idx=2, value="1") conflicting_inst.set_has_error() kind = 1 if check_receive: diff --git a/scripts/errors/pt2pt/MessageRace.py b/scripts/errors/pt2pt/MessageRace.py index df5302a7c2a53c5a4b5ec2a31be9b148ef86bca5..c559347317b7f838103bbfc7fc7c6953914d3f5f 100644 --- a/scripts/errors/pt2pt/MessageRace.py +++ b/scripts/errors/pt2pt/MessageRace.py @@ -5,6 +5,8 @@ from Infrastructure.CorrectParameter import CorrectParameterFactory from Infrastructure.ErrorGenerator import ErrorGenerator from Infrastructure.MPICallFactory import CorrectMPICallFactory from Infrastructure.Template import TemplateManager +from Infrastructure.ArrAsgn import ArrAsgn +from Infrastructure.Branches import IfBranch, ForLoop class MessageRaceErrorAnyTag(ErrorGenerator): @@ -25,30 +27,30 @@ class MessageRaceErrorAnyTag(ErrorGenerator): # send part - tm.register_instruction("for(int i =0; i < 10; ++i) {", rank_to_execute=1) - tm.register_instruction("buf[0]=i;", rank_to_execute=1) + tm.register_instruction(ForLoop(0, 10).header(), rank_to_execute=1) + tm.register_instruction(ArrAsgn("buf", 0, "i"), rank_to_execute=1) send_call = CorrectMPICallFactory().mpi_send() send_call.set_arg("tag", "i") tm.register_instruction(send_call, rank_to_execute=1) - tm.register_instruction("}", rank_to_execute=1) + tm.register_instruction(ForLoop.trailer(), rank_to_execute=1) # the final msg after the loop send_call = CorrectMPICallFactory().mpi_send() tm.register_instruction(send_call, rank_to_execute=1) # recv part - tm.register_instruction("for(int i =0; i < 10; ++i) {", rank_to_execute=0) + tm.register_instruction(ForLoop(0, 10).header(), rank_to_execute=0) recv_call = CorrectMPICallFactory().mpi_recv() recv_call.set_arg("tag", "MPI_ANY_TAG") recv_call.set_rank_executing(0) tm.register_instruction(recv_call) - tm.register_instruction("if(buf[0]!=i){", rank_to_execute=0) + tm.register_instruction(IfBranch("buf[0]!=i").header(), rank_to_execute=0) additional_recv = CorrectMPICallFactory().mpi_recv() additional_recv.set_has_error() # additional recv may lead to deadlock tm.register_instruction(additional_recv,rank_to_execute=0) - tm.register_instruction(" }", rank_to_execute=0) # end if - tm.register_instruction("}", rank_to_execute=0) # end for + tm.register_instruction(IfBranch.trailer(), rank_to_execute=0) + tm.register_instruction(ForLoop.trailer(), rank_to_execute=0) tm.register_instruction(CorrectParameterFactory().get_buffer_free()) @@ -72,7 +74,7 @@ class MessageRaceErrorAnysource(ErrorGenerator): tm.register_instruction(CorrectParameterFactory().get_buffer_alloc()) # send part - tm.register_instruction("buf[0]=rank;", rank_to_execute='not0') + tm.register_instruction(ArrAsgn("buf", 0, "rank"), rank_to_execute='not0') send_call = CorrectMPICallFactory().mpi_send() tm.register_instruction(send_call, rank_to_execute='not0') # rank 1 sends an additional msg @@ -80,16 +82,16 @@ class MessageRaceErrorAnysource(ErrorGenerator): tm.register_instruction(send_call, rank_to_execute=1) # recv part - tm.register_instruction("for(int i =1; i < nprocs; ++i) {", rank_to_execute=0) + tm.register_instruction(ForLoop(1, "nprocs").header(), rank_to_execute=0) recv_call = CorrectMPICallFactory().mpi_recv() recv_call.set_arg("source", "MPI_ANY_SOURCE") tm.register_instruction(recv_call, rank_to_execute=0) - tm.register_instruction("if(buf[0]!=i){", rank_to_execute=0) + tm.register_instruction(IfBranch("buf[0]!=i").header(), rank_to_execute=0) additional_recv = CorrectMPICallFactory().mpi_recv() additional_recv.set_has_error() # additional recv leads to deadlock tm.register_instruction(additional_recv, rank_to_execute=0) - tm.register_instruction(" }", rank_to_execute=0) # end if - tm.register_instruction("}", rank_to_execute=0) # end for + tm.register_instruction(IfBranch.trailer(), rank_to_execute=0) # end if + tm.register_instruction(ForLoop.trailer(), rank_to_execute=0) tm.register_instruction(CorrectParameterFactory().get_buffer_free()) diff --git a/scripts/errors/pt2pt/RecvBeforeSend.py b/scripts/errors/pt2pt/RecvBeforeSend.py index 7d31a0d3ef00a0a74548be3fc633fed83a28302a..a2ace3da0dcc68c1cd63e5512a06b9df08ab3076 100644 --- a/scripts/errors/pt2pt/RecvBeforeSend.py +++ b/scripts/errors/pt2pt/RecvBeforeSend.py @@ -5,7 +5,7 @@ import itertools from Infrastructure.ErrorGenerator import ErrorGenerator from Infrastructure.Instruction import Instruction from Infrastructure.MPICallFactory import CorrectMPICallFactory -from Infrastructure.TemplateFactory import get_send_recv_template, insert_probe +from Infrastructure.TemplateFactory import get_send_recv_template, insert_probe, flag_wait_header, flag_wait_trailer class RecvBeforeSend(ErrorGenerator): @@ -110,13 +110,12 @@ class RecvBeforeSend(ErrorGenerator): probecall.set_has_error() probecall.set_rank_executing(1) if probe_to_use == "mpi_improbe": - tm.add_stack_variable("int") # the flag - tm.insert_instruction(Instruction("int flag=0;", rank=1), before_instruction="MPICALL", - before_first_of_list=True) - tm.insert_instruction(Instruction("while (!flag){", rank=1), before_instruction="MPICALL", + flag_name = tm.add_stack_variable("bool", "flag") # the flag + probecall.set_arg("flag", "&" + flag_name) + tm.insert_instruction(Instruction(flag_wait_header(flag_name), rank=1), before_instruction="MPICALL", before_first_of_list=True) tm.insert_instruction(probecall, before_instruction="MPICALL", before_first_of_list=True) - tm.insert_instruction(Instruction("}", rank=1), before_instruction="MPICALL", + tm.insert_instruction(Instruction(flag_wait_trailer(), rank=1), before_instruction="MPICALL", before_first_of_list=True) # end while else: tm.insert_instruction(probecall, before_instruction="MPICALL", before_first_of_list=True) diff --git a/scripts/errors/pt2pt/Unmatched.py b/scripts/errors/pt2pt/Unmatched.py index fc83a38395fcc2f1077ea23ea65cd0b0bfa8fce4..5cd9685bbd23ac204d3055ae3cf3f810faccdac1 100644 --- a/scripts/errors/pt2pt/Unmatched.py +++ b/scripts/errors/pt2pt/Unmatched.py @@ -5,6 +5,10 @@ from Infrastructure.Variables import * from Infrastructure.ErrorGenerator import ErrorGenerator from Infrastructure.Template import TemplateManager from Infrastructure.TemplateFactory import get_send_recv_template +from Infrastructure.AllocCall import AllocCall +from Infrastructure.MPICallFactory import MPICallFactory +from Infrastructure.Branches import IfBranch, ForLoop +from Infrastructure.PrintInst import PrintInst class UnmatchedP2Pcall(ErrorGenerator): @@ -78,51 +82,47 @@ class ComplexMissmach(ErrorGenerator): return ["P2P"] def generate(self, generate_level, real_world_score_table): - code = """ -#define MSG_TAG_A 124523 -#define N 10 -#define EVEN 0 - - int buffer[N]; - int i; + tm = TemplateManager() + tm.add_stack_variable("MPI_Request", "request") + tm.add_stack_variable("MPI_Status", "status") + tm.add_stack_variable("int", "countEvenNumbers") + tm.add_stack_variable("int", "tag_sender") + tm.add_stack_variable("int", "tag_receiver") - MPI_Request request; - MPI_Status status; + tm.register_instruction(Instruction("#define MSG_TAG_A 124523")) + tm.register_instruction(Instruction("#define N 10")) + tm.register_instruction(Instruction("#define EVEN 0")) - int countEvenNumbers = 0; + tm.register_instruction(AllocCall("int", "N", "buffer")) - for (i = 0; i < 10; i++) { - if (rank == 0) { - int tag_sender = i * N; - MPI_Isend(buffer, 1, MPI_INT, 1, tag_sender, MPI_COMM_WORLD, &request); - MPI_Wait(&request, &status); - } + tm.register_instruction(ForLoop(0, 10).header()) - else if (rank == 1) { - int tag_receiver = i * N; + tm.register_instruction(IfBranch("rank == 0").header()) - if (i % 2 == EVEN) { - (countEvenNumbers)++; - } - - if ((countEvenNumbers) == (N / 2)) { - tag_receiver++; // mismatch - } - - printf(\"Count Even Numbers: %d \\n\", countEvenNumbers); - MPI_Irecv(buffer, 1, MPI_INT, 0, tag_receiver, MPI_COMM_WORLD, &request); - MPI_Wait(&request, &status); - } - } -""" - tm = TemplateManager() - i = Instruction(code) - i.set_has_error() - tm.register_instruction(i) + tm.register_instruction("tag_sender = i*N;") + tm.register_instruction(MPICallFactory.mpi_isend("buffer", 1, "MPI_INT", 1, "tag_sender", "MPI_COMM_WORLD", "&request")) + tm.register_instruction(MPICallFactory.mpi_wait("&request", "&status")) - tm.set_can_deadlock() + tm.register_instruction(IfBranch("rank == 1", elseif=True).header()) - #TODO SET_HAS_ERROR + tm.register_instruction("tag_receiver = i*N;") + tm.register_instruction(IfBranch("i % 2 == EVEN").header()) + tm.register_instruction("countEvenNumbers = countEvenNumbers + 1;") + tm.register_instruction(IfBranch.trailer()) + tm.register_instruction(IfBranch("(countEvenNumbers) == (N / 2)").header()) + tm.register_instruction("tag_receiver = tag_receiver + 1;") + tm.register_instruction(IfBranch.trailer()) + + tm.register_instruction(PrintInst("Count Even Numbers: ", ["countEvenNumbers"])) + recv_call = MPICallFactory.mpi_irecv("buffer", 1, "MPI_INT", 0, "tag_receiver", "MPI_COMM_WORLD", "&request") + recv_call.set_has_error() + tm.register_instruction(recv_call) + tm.register_instruction(MPICallFactory.mpi_wait("&request", "&status")) + tm.register_instruction(IfBranch.trailer()) + + tm.register_instruction(ForLoop.trailer()) + + tm.set_can_deadlock() tm.set_description("GlobalParameterMissmatch-tag-mpi_send", "Missmatching message tags in iteration 10") yield tm diff --git a/scripts/errors/rma/GlobalConcurrency.py b/scripts/errors/rma/GlobalConcurrency.py index f2296d3c8b65f7d60d4af695db23760da063c27b..4fbaea8ba0a9021eb4608f704b38d428a59e1de1 100644 --- a/scripts/errors/rma/GlobalConcurrency.py +++ b/scripts/errors/rma/GlobalConcurrency.py @@ -11,6 +11,8 @@ from Infrastructure.CorrectParameter import CorrectParameterFactory from Infrastructure.Template import TemplateManager from Infrastructure.TemplateFactory import get_allocated_window, get_rma_call from Infrastructure.AllocCall import AllocCall +from Infrastructure.ArrAsgn import ArrAsgn +from Infrastructure.PrintInst import PrintInst import itertools @@ -39,8 +41,8 @@ class GlobalConcurrencyErrorRMA(ErrorGenerator): localbufread.set_arg("target_rank", "0") self.buf_instructions = { - "bufread": Instruction(f'printf("winbuf is %d\\n", {CorrectParameterFactory().winbuf_var_name}[1]);', 1, "bufread"), - "bufwrite": Instruction(f'{CorrectParameterFactory().winbuf_var_name}[1] = 42;', 1, "bufwrite"), + "bufread": PrintInst("winbuf is ", [f"{CorrectParameterFactory().winbuf_var_name}[1]"], rank=1, identifier="bufread"), + "bufwrite": ArrAsgn(CorrectParameterFactory().winbuf_var_name, 1, 42, rank=1, identifier="bufwrite"), "localbufread": localbufread, "localbufwrite": localbufwrite } @@ -265,10 +267,9 @@ class GlobalConcurrencyErrorRMA(ErrorGenerator): for shouldsync in [False, True]: for (op1, op2) in itertools.product(ops1, ops2): self.tm = TemplateManager(min_ranks=3) - (win_declare, win_alloc, win_free) = get_allocated_window( - "mpi_win_create", cf.get("win"), cf.winbuf_var_name, "int", "10") + (win_alloc, win_free) = get_allocated_window( + self.tm, "mpi_win_create", cf.get("win"), cf.winbuf_var_name, "int", "10") # window allocation boilerplate - self.tm.register_instruction(win_declare) self.tm.register_instruction(win_alloc) # local buffer allocation, can be used by calls from different ranks diff --git a/scripts/errors/rma/InvalidDataType.py b/scripts/errors/rma/InvalidDataType.py index 8b3cba524b6172621d4b221e4c2703a1c1367983..5fbc99740761618c63e72eb7ac73aae0d13910cc 100644 --- a/scripts/errors/rma/InvalidDataType.py +++ b/scripts/errors/rma/InvalidDataType.py @@ -5,7 +5,7 @@ from Infrastructure.Variables import * from Infrastructure.ErrorGenerator import ErrorGenerator from Infrastructure.Instruction import Instruction -from Infrastructure.MPICallFactory import CorrectMPICallFactory +from Infrastructure.MPICallFactory import CorrectMPICallFactory, MPICallFactory from Infrastructure.TemplateFactory import get_invalid_param_rma_case @@ -35,9 +35,17 @@ class InvalidDatatypeErrorRMA(ErrorGenerator): # # Use freed datatype tm = get_invalid_param_rma_case("target_datatype", func, "type") - datatype_register_free = Instruction("MPI_Datatype type; MPI_Type_contiguous (2, MPI_INT, &type); MPI_Type_commit(&type);MPI_Type_free(&type);", rank=0) + tm.add_stack_variable("MPI_Datatype", "type") + type_constructor = MPICallFactory.mpi_type_contiguous(2, "MPI_INT", "&type") + type_commit = MPICallFactory.mpi_type_commit("&type") + type_free = MPICallFactory.mpi_type_free("&type") + type_insts = [ type_free, type_commit, type_constructor ] + before = "RMAOP" + for inst in type_insts: # Insert in reverse order, then append in front + inst.set_rank_executing(0) + tm.insert_instruction(before_instruction=before, new_instruction=inst) + before = inst tm.get_instruction("RMAOP").set_has_error() - tm.insert_instruction(before_instruction="RMAOP", new_instruction=datatype_register_free) tm.set_description("InvalidParam", "Invalid Datatype: Datatype is freed before it is actually used") yield tm diff --git a/scripts/errors/rma/InvalidWin.py b/scripts/errors/rma/InvalidWin.py index 67078762bc206daf194363498b041e8fab4e0c51..410be9f3a408a6ecccc34f330cb353ecaba2e0c1 100644 --- a/scripts/errors/rma/InvalidWin.py +++ b/scripts/errors/rma/InvalidWin.py @@ -30,7 +30,8 @@ class InvalidWinErrorRMA(ErrorGenerator): # free window too early tm = get_rma_template() - win_free_early = Instruction(f"MPI_Win_free(&{CorrectParameterFactory().get('win')});") + win_free_early = CorrectMPICallFactory.mpi_win_free() + win_free_early.set_arg("win", "&" + win_free_early.get_arg("win")) tm.insert_instruction(new_instruction=win_free_early, before_instruction="STARTRMAEPOCH") # opening epoch on already freed window is the actual error diff --git a/scripts/errors/rma/LocalConcurrency.py b/scripts/errors/rma/LocalConcurrency.py index b068aa7302a60c4a2ea4fc8e39f375bd3f0b351f..3943819471c12a6c761aed05c72abc28e148178d 100644 --- a/scripts/errors/rma/LocalConcurrency.py +++ b/scripts/errors/rma/LocalConcurrency.py @@ -11,6 +11,8 @@ from Infrastructure.CorrectParameter import CorrectParameterFactory from Infrastructure.Template import TemplateManager from Infrastructure.TemplateFactory import get_allocated_window, get_rma_call from Infrastructure.AllocCall import AllocCall +from Infrastructure.ArrAsgn import ArrAsgn +from Infrastructure.PrintInst import PrintInst import itertools @@ -22,8 +24,8 @@ class LocalConcurrencyErrorRMA(ErrorGenerator): self.cfmpi = CorrectMPICallFactory() # generate standard buffer access instructions self.buf_instructions = { - "bufread": Instruction(f'printf("buf is %d\\n", {CorrectParameterFactory().buf_var_name}[0]);', 0, "bufread"), - "bufwrite": Instruction(f'{CorrectParameterFactory().buf_var_name}[0] = 42;', 0, "bufwrite") + "bufread": PrintInst("buf is ", [f"{CorrectParameterFactory().buf_var_name}[0]"], rank=0, identifier="bufread"), + "bufwrite": ArrAsgn(CorrectParameterFactory().buf_var_name, 0, 42, rank=0, identifier="bufwrite") } def get_feature(self): @@ -317,10 +319,9 @@ class LocalConcurrencyErrorRMA(ErrorGenerator): for shouldsync in [False, True]: for (op1, op2) in itertools.product(ops1, ops2): self.tm = TemplateManager() - (win_declare, win_alloc, win_free) = get_allocated_window( - "mpi_win_create", cf.get("win"), cf.winbuf_var_name, "int", "20") + (win_alloc, win_free) = get_allocated_window( + self.tm, "mpi_win_create", cf.get("win"), cf.winbuf_var_name, "int", "20") # window allocation boilerplate - self.tm.register_instruction(win_declare) self.tm.register_instruction(win_alloc) # local buffer allocation diff --git a/scripts/generate.py b/scripts/generate.py index a14b90079084b75844b78abd0cd2b819671732ce..252a8d70401e43d9e385865b3c4790d1cdf8073a 100644 --- a/scripts/generate.py +++ b/scripts/generate.py @@ -15,6 +15,8 @@ if __name__ == "__main__": help="Path to generate the codes into") parser.add_argument("--level", action="store", default=1, type=int, required=False, help="Level of tests to generate. 1: simple cases, 2: caseswith sufficient coverage, 3: usage combinations found in real wolrd dataset, 4: all possible usage combinations") + parser.add_argument("--language", action="store", default="c", type=str, required=False, choices=["c", "fort", "c_fort_compat"], + help="Test Language to generate. 'c', 'fort' or 'c_fort_compat' for C, Fortran, and C code compatible with Fortran tests respectively.") parser.add_argument("--real_world_data", default=None, required=False, action="store", help="file of real world dataset, only relevant if level is 3") parser.add_argument("--mpi_version", default="4.1", required=False, help="maximum MPI versions to use") @@ -37,13 +39,13 @@ if __name__ == "__main__": print("Read real world dataset and build scoring table") score_table = get_scoring_table(pd.read_csv(ARGS.real_world_data, header=0, low_memory=False), c_only=True) - gm = GeneratorManager(ARGS.generator_dir, score_table) + gm = GeneratorManager(ARGS.generator_dir, score_table, lang=ARGS.language) # remove all testcases from previous execution (ease of debugging) if ARGS.remove_previous_generation_results: for root, dirs, files in os.walk(gencodes_dir): for file in files: - if file.endswith(".c"): + if file.endswith(".c") or file.endswith(".f90"): os.remove(os.path.join(root, file)) if ARGS.count_only: diff --git a/scripts/original_MBI_generators/CollArgGenerator.py b/scripts/original_MBI_generators/CollArgGenerator.py deleted file mode 100755 index e269309bdf578387b24c009b61b4ec9e7ff07219..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/CollArgGenerator.py +++ /dev/null @@ -1,225 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: @{collfeature}@ - COLL!nonblocking: @{icollfeature}@ - COLL!persistent: Lacking - COLL!tools: @{toolfeature}@ - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define buff_size 128 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int root = 0; - int size = 1; - int j=0; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Op op = MPI_SUM; - MPI_Datatype type = MPI_INT; - - int dbs = sizeof(int)*nprocs; /* Size of the dynamic buffers for alltoall and friends */ - - @{init}@ - @{start}@ - - @{change_arg}@ - @{operation}@ /* MBIERROR2 */ - @{fini}@ - @{free}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -##################################################### -# Generate code with color mismatch in MPI_Comm_split -##################################################### - -for c in gen.tcoll4color: - patterns = {} - patterns = {'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['collfeature'] = 'Lacking' - patterns['icollfeature'] = 'Lacking' - patterns['toolfeature'] = 'Yes' if c in gen.tcoll4color else 'Lacking' - patterns['c'] = c - patterns['init'] = gen.init[c]("1") - patterns['start'] = gen.start[c]("1") - patterns['operation'] = gen.operation[c]("1") - patterns['fini'] = gen.fini[c]("1") - patterns['free'] = gen.free[c]("1") - patterns['change_arg'] = '' - - # Generate the code with invalid color - replace = patterns.copy() - replace['shortdesc'] = 'Invalid color in @{c}@' - replace['longdesc'] = 'invalid color in @{c}@' - replace['outcome'] = 'ERROR: InvalidOtherArg' - replace['errormsg'] = 'Invalid Argument in collective. @{c}@ at line @{line:MBIERROR2}@ has an invalid color' - replace['change_arg'] = 'color=-10; /* MBIERROR1*/' - gen.make_file(template, f'InvalidParam_OtherArg_{c}_nok.c', replace) - - -################################## -# Generate code with root mismatch -################################## - -for c in gen.coll4root + gen.icoll4root: - patterns = {} - patterns = {'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['collfeature'] = 'Yes' if c in gen.coll4root else 'Lacking' - patterns['icollfeature'] = 'Yes' if c in gen.icoll4root else 'Lacking' - patterns['toolfeature'] = 'Lacking' - patterns['c'] = c - patterns['init'] = gen.init[c]("1") - patterns['start'] = gen.start[c]("1") - patterns['fini'] = gen.fini[c]("1") - patterns['free'] = gen.free[c]("1") - patterns['operation'] = gen.operation[c]("1") - patterns['change_arg'] = '' - - # Generate an incorrect root matching (root mismatch) - replace = patterns.copy() - replace['shortdesc'] = 'Collective @{c}@ with a root mismatch' - replace['longdesc'] = 'Odd ranks use 0 as a root while even ranks use 1 as a root' - replace['outcome'] = 'ERROR: RootMatching' - replace['errormsg'] = 'Collective root mistmatch. @{c}@ at @{filename}@:@{line:MBIERROR2}@ has 0 or 1 as a root.' - replace['change_arg'] = 'if (rank % 2)\n root = 1; /* MBIERROR1 */' - gen.make_file(template, f'ParamMatching_Root_{c}_nok.c', replace) - - # Generate the call with root=-1 (invalid root) - replace = patterns.copy() - replace['shortdesc'] = f'Collective {c} with root = -1' - replace['longdesc'] = f'Collective {c} with root = -1' - replace['outcome'] = 'ERROR: InvalidRoot' - replace['errormsg'] = 'Invalid collective root. @{c}@ at @{filename}@:@{line:MBIERROR2}@ has -1 as a root while communicator MPI_COMM_WORLD requires ranks in range 0 to 1.' - replace['change_arg'] = 'root = -1; /* MBIERROR1 */' - gen.make_file(template, f'InvalidParam_RootNeg_{c}_nok.c', replace) - - # Generate the call with root=2 (root not in communicator) - replace = patterns.copy() - replace['shortdesc'] = f'Collective {c} with root out of the communicator' - replace['longdesc'] = f'Collective {c} with root = 2 (there is only 2 ranks)' - replace['outcome'] = 'ERROR: InvalidRoot' - replace['errormsg'] = 'Invalid collective root. @{c}@ at @{filename}@:@{line:MBIERROR2}@ has 2 as a root while communicator MPI_COMM_WORLD requires ranks in range 0 to 1.' - replace['change_arg'] = 'root = nprocs; /* MBIERROR1 */' - gen.make_file(template, f'InvalidParam_RootTooLarge_{c}_nok.c', replace) - - -################################## -# Generate code with type mismatch -################################## - -for c in gen.coll + gen.icoll: - if c != 'MPI_Barrier': # Barrier has no Data to mismatch or to nullify - patterns = {} - patterns = {'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['collfeature'] = 'Yes' if c in gen.coll else 'Lacking' - patterns['icollfeature'] = 'Yes' if c in gen.icoll + gen.ibarrier else 'Lacking' - patterns['toolfeature'] = 'Lacking' - patterns['c'] = c - patterns['init'] = gen.init[c]("1") - patterns['start'] = gen.start[c]("1") - patterns['fini'] = gen.fini[c]("1") - patterns['operation'] = gen.operation[c]("1") - patterns['free'] = gen.free[c]("1") - patterns['change_arg'] = '' - - # Generate the incorrect matching (datatype Mmismatch) - replace = patterns.copy() - replace['shortdesc'] = 'Collective @{c}@ with a datatype mismatch' - replace['longdesc'] = 'Odd ranks use MPI_INT as the datatype while even ranks use MPI_FLOAT' - replace['outcome'] = 'ERROR: DatatypeMatching' - replace['errormsg'] = 'Collective datatype mistmatch. @{c}@ at @{filename}@:@{line:MBIERROR2}@ has MPI_INT or MPI_FLOAT as a datatype.' - replace['change_arg'] = 'if (rank % 2)\n type = MPI_FLOAT; /* MBIERROR1 */' - gen.make_file(template, f'ParamMatching_Data_{c}_nok.c', replace) - - # Generate the call with null type (invalid datatype) - replace = patterns.copy() - replace['shortdesc'] = 'Collective @{c}@ with an invalid datatype ' - replace['longdesc'] = 'Collective @{c}@ with an invalid datatype ' - replace['outcome'] = 'ERROR: InvalidDatatype' - replace['errormsg'] = 'Invalid Datatype. @{c}@ at @{filename}@:@{line:MBIERROR2}@ has an invalid datatype.' - replace['change_arg'] = 'type=MPI_DATATYPE_NULL; /* MBIERROR1 */' - gen.make_file(template, f'InvalidParam_DataNull_{c}_nok.c', replace) - - -################################## -# Generate code with Op mismatch -################################## - -for c in gen.coll4op + gen.icoll4op: - patterns = {} - patterns = {'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['collfeature'] = 'Yes' if c in gen.coll4op else 'Lacking' - patterns['icollfeature'] = 'Yes' if c in gen.icoll4op else 'Lacking' - patterns['toolfeature'] = 'Lacking' - patterns['c'] = c - patterns['init'] = gen.init[c]("1") - patterns['start'] = gen.start[c]("1") - patterns['fini'] = gen.fini[c]("1") - patterns['operation'] = gen.operation[c]("1") - patterns['free'] = gen.free[c]("1") - patterns['change_arg'] = '' - - # Generate the incorrect matching (op mismatch) - replace = patterns.copy() - replace['shortdesc'] = 'Collective @{c}@ with an operator mismatch' - replace['longdesc'] = 'Odd ranks use MPI_SUM as the operator while even ranks use MPI_MAX' - replace['outcome'] = 'ERROR: OperatorMatching' - replace['errormsg'] = 'Collective operator mistmatch. @{c}@ at @{filename}@:@{line:MBIERROR2}@ has MPI_MAX or MPI_SUM as an operator.' - replace['change_arg'] = 'if (rank % 2)\n op = MPI_MAX; /* MBIERROR1 */' - gen.make_file(template, f'ParamMatching_Op_{c}_nok.c', replace) - - # Generate the call with Op=MPI_OP_NULL (invalid op) - replace = patterns.copy() - replace['shortdesc'] = 'Collective @{c}@ with an invalid operator ' - replace['longdesc'] = 'Collective @{c}@ with an invalid operator ' - replace['outcome'] = 'ERROR: InvalidOperator' - replace['errormsg'] = 'Invalid Operator. @{c}@ at @{filename}@:@{line:MBIERROR2}@ has MPI_OP_NULL as an operator.' - replace['change_arg'] = 'op = MPI_OP_NULL; /* MBIERROR1 */' - gen.make_file(template, f'InvalidParam_OpNull_{c}_nok.c', replace) diff --git a/scripts/original_MBI_generators/CollComGenerator.py b/scripts/original_MBI_generators/CollComGenerator.py deleted file mode 100755 index f8431b807d83f5a16879891d5fcadd833798409e..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/CollComGenerator.py +++ /dev/null @@ -1,117 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: @{collfeature}@ - COLL!nonblocking: @{icollfeature}@ - COLL!persistent: Lacking - COLL!tools: Yes - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#define buff_size 128 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int root = 0; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Op op = MPI_SUM; - MPI_Datatype type = MPI_INT; - MPI_Comm newcom; - MPI_Comm_split(MPI_COMM_WORLD, 0, nprocs - rank, &newcom); - - @{change_com}@ - - int dbs = sizeof(int)*nprocs; /* Size of the dynamic buffers for alltoall and friends */ - @{init}@ - @{start}@ - @{operation}@ /* MBIERROR */ - @{fini}@ - @{free}@ - - if(newcom != MPI_COMM_NULL && newcom != MPI_COMM_WORLD) - MPI_Comm_free(&newcom); - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -# Generate code with one collective -for c in gen.coll + gen.icoll + gen.ibarrier: - patterns = {} - patterns = {'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['collfeature'] = 'Yes' if c in gen.coll else 'Lacking' - patterns['icollfeature'] = 'Yes' if c in gen.icoll + gen.ibarrier else 'Lacking' - patterns['c'] = c - patterns['init'] = gen.init[c]("1") - patterns['start'] = gen.start[c]("1") - patterns['fini'] = gen.fini[c]("1") - patterns['free'] = gen.free[c]("1") - patterns['operation'] = gen.operation[c]("1") - - # Generate the correct code => to remove? - replace = patterns.copy() - replace['shortdesc'] = 'Collective @{c}@ with correct arguments' - replace['longdesc'] = f'All ranks in newcom call {c} with correct arguments' - replace['outcome'] = 'OK' - replace['errormsg'] = '' - replace['change_com'] = '/* No error injected here */' - gen.make_file(template, f'ParamMatching_Com_{c}_ok.c', replace) - - # Generate the incorrect communicator matching - replace = patterns.copy() - replace['shortdesc'] = 'Collective @{c}@ with a communicator mismatch' - replace['longdesc'] = 'Odd ranks call the collective on newcom while even ranks call the collective on MPI_COMM_WORLD' - replace['outcome'] = 'ERROR: CommunicatorMatching' - replace['errormsg'] = 'Communicator mistmatch in collectives. @{c}@ at @{filename}@:@{line:MBIERROR}@ has newcom or MPI_COMM_WORLD as a communicator.' - replace['change_com'] = 'if (rank % 2)\n newcom = MPI_COMM_WORLD; /* MBIERROR */' - gen.make_file(template, f'ParamMatching_Com_{c}_nok.c', replace) - - # Generate the coll with newcom=MPI_COMM_NULL - replace = patterns.copy() - replace['shortdesc'] = f'Collective @{c}@ with newcom=MPI_COMM_NULL' - replace['longdesc'] = f'Collective @{c}@ with newcom=MPI_COMM_NULL' - replace['outcome'] = 'ERROR: InvalidCommunicator' - replace['errormsg'] = 'Invalid communicator. @{c}@ at @{filename}@:@{line:MBIERROR}@ has MPI_COMM_NULL as a communicator.' - replace['change_com'] = 'newcom = MPI_COMM_NULL; /* MBIERROR */' - gen.make_file(template, f'InvalidParam_ComNull_{c}_nok.c', replace) diff --git a/scripts/original_MBI_generators/CollLocalConcurrencyGenerator.py b/scripts/original_MBI_generators/CollLocalConcurrencyGenerator.py deleted file mode 100755 index dd9ed0810263722c079865712f69b04f55a85eae..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/CollLocalConcurrencyGenerator.py +++ /dev/null @@ -1,91 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 3, requires MPI 3 implementation - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: @{icollfeature}@ - COLL!persistent: @{pcollfeature}@ - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#define buff_size 128 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int root = 0; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - int dbs = sizeof(int)*nprocs; /* Size of the dynamic buffers for alltoall and friends */ - MPI_Op op = MPI_SUM; - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - - @{init}@ - @{start}@ - @{operation}@ - @{write}@ /* MBIERROR */ - @{fini}@ - @{free}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -for c in gen.icoll + gen.pcoll: - patterns = {} - patterns = {'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['icollfeature'] = 'Yes' if c in gen.icoll else 'Lacking' - patterns['pcollfeature'] = 'Yes' if c in gen.pcoll else 'Lacking' - patterns['c'] = c - patterns['init'] = gen.init[c]("1") - patterns['start'] = gen.start[c]("1") - patterns['fini'] = gen.fini[c]("1") - patterns['operation'] = gen.operation[c]("1") - patterns['write'] = gen.write[c]("1") - patterns['free'] = gen.free[c]("1") - - replace = patterns.copy() - replace['shortdesc'] = 'Local concurrency with a collective' - replace['longdesc'] = f'The buffer in {c} is modified before the call has been completed.' - replace['outcome'] = 'ERROR: LocalConcurrency' - replace['errormsg'] = 'Local Concurrency with a collective. The buffer in @{c}@ is modified at @{filename}@:@{line:MBIERROR}@ whereas there is no guarantee the call has been completed.' - gen.make_file(template, f'LocalConcurrency_{c}_nok.c', replace) diff --git a/scripts/original_MBI_generators/CollMatchingGenerator.py b/scripts/original_MBI_generators/CollMatchingGenerator.py deleted file mode 100755 index 6de1bd8b8728dce4a7fb08e6af12491e34587b45..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/CollMatchingGenerator.py +++ /dev/null @@ -1,202 +0,0 @@ -#! /usr/bin/python3 - -# Copyright 2021-2022. The MBI project. All rights reserved. -# This program is free software; you can redistribute it and/or modify it under the terms of the license (GNU GPL). - -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: @{collfeature}@ - COLL!nonblocking: @{icollfeature}@ - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#define buff_size 128 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int root = 0; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug.\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - MPI_Op op = MPI_SUM; - - int dbs = sizeof(int)*nprocs; /* Size of the dynamic buffers for alltoall and friends */ - @{init1}@ - @{init2}@ - - if (@{change_cond}@) { - @{operation1a}@ /* MBIERROR1 */ - @{fini1a}@ - @{operation2a}@ - @{fini2a}@ - } else { - @{operation1b}@ /* MBIERROR2 */ - @{fini1b}@ - @{operation2b}@ - @{fini2b}@ - } - - @{free1}@ - @{free2}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -for c1 in gen.coll + gen.icoll + gen.ibarrier: - for c2 in gen.coll + gen.icoll + gen.ibarrier: - patterns = {} - patterns = {'c1': c1, 'c2': c2} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['collfeature'] = 'Yes' if c1 in gen.coll or c2 in gen.coll else 'Lacking' - patterns['icollfeature'] = 'Yes' if c1 in gen.icoll + gen.ibarrier or c2 in gen.icoll + gen.ibarrier else 'Lacking' - patterns['c1'] = c1 - patterns['c2'] = c2 - patterns['init1'] = gen.init[c1]("1") - patterns['init2'] = gen.init[c2]("2") - patterns['fini1a'] = gen.fini[c1]("1") - patterns['fini2a'] = gen.fini[c2]("2") - patterns['fini1b'] = gen.fini[c1]("1") - patterns['fini2b'] = gen.fini[c2]("2") - patterns['free1'] = gen.free[c1]("1") - patterns['free2'] = gen.free[c2]("2") - patterns['operation1a'] = gen.operation[c1]("1") - patterns['operation1b'] = gen.operation[c1]("1") - patterns['operation2a'] = gen.operation[c2]("2") - patterns['operation2b'] = gen.operation[c2]("2") - patterns['change_cond'] = 'rank % 2' - shortdesc = ' collective ordering' - - if c1 == c2: - # Generate the correct code using the same collective twice - replace = patterns.copy() - replace['shortdesc'] = 'Correct' + shortdesc - replace['longdesc'] = f'All ranks call {c1} twice' - replace['outcome'] = 'OK' - replace['errormsg'] = '' - replace['change_cond'] = 'rank < nprocs' - replace['operation1b'] = '' - replace['operation2b'] = '' - replace['fini1b'] = '' - replace['fini2b'] = '' - gen.make_file(template, f'CallOrdering_{c1}_{c2}_ok.c', replace) - # Generate the correct code using the collective once - replace = patterns.copy() - replace['shortdesc'] = 'Correct' + shortdesc - replace['longdesc'] = f'All ranks call {c1} once' - replace['outcome'] = 'OK' - replace['errormsg'] = '' - replace['init2'] = '' - replace['change_cond'] = 'rank < nprocs' - replace['operation2a'] = '' - replace['operation1b'] = '' - replace['operation2b'] = '' - replace['fini2a'] = '' - replace['fini1b'] = '' - replace['fini2b'] = '' - replace['free2'] = '' - gen.make_file(template, f'CallOrdering_{c1}_ok.c', replace) - else: - # Generate the correct ordering with two different collectives - replace = patterns.copy() - replace['shortdesc'] = 'Correct' + shortdesc - replace['longdesc'] = f'All ranks call {c1} and then {c2}' - replace['outcome'] = 'OK' - replace['errormsg'] = '' - replace['change_cond'] = 'rank < nprocs' - replace['operation1b'] = '' - replace['operation2b'] = '' - replace['fini1b'] = '' - replace['fini2b'] = '' - gen.make_file(template, f'CallOrdering_{c1}_{c2}_ok.c', replace) - # Generate the incorrect ordering with two different collectives - replace = patterns.copy() - replace['shortdesc'] = 'Incorrect' + shortdesc - replace['longdesc'] = f'Odd ranks call {c1} and then {c2} while even ranks call these collectives in the other order' - replace['outcome'] = 'ERROR: CallMatching' - replace['errormsg'] = 'Collective mistmatch. @{c1}@ at @{filename}@:@{line:MBIERROR1}@ is matched with @{c2}@ line @{filename}@:@{line:MBIERROR2}@.' - replace['operation1b'] = gen.operation[c2]("2") # Inversion - replace['operation2b'] = gen.operation[c1]("1") - replace['fini1a'] = gen.fini[c1]("1") # Inversion - replace['fini2a'] = gen.fini[c2]("2") - replace['fini1b'] = gen.fini[c2]("2") # Inversion - replace['fini2b'] = gen.fini[c1]("1") - replace['free1'] = gen.free[c2]("2") - replace['free2'] = gen.free[c1]("1") - - gen.make_file(template, f'CallOrdering_{c1}_{c2}_nok.c', replace) - - # Generate the incorrect ordering with one collective - replace = patterns.copy() - replace['shortdesc'] = 'Incorrect' + shortdesc - replace['longdesc'] = f'Odd ranks call {c1} while even ranks do not call any collective' - replace['outcome'] = 'ERROR: CallMatching' - replace['errormsg'] = 'Collective mistmatch. @{c1}@ at @{filename}@:@{line:MBIERROR1}@ is not matched.' - replace['operation1b'] = '' # Remove functions - replace['operation2b'] = '' - replace['operation2a'] = '' - replace['init2'] = '' - replace['fini1b'] = '' - replace['fini2a'] = '' - replace['fini2b'] = '' - replace['free1'] = gen.free[c1]("1") - replace['free2'] = '' - gen.make_file(template, f'CallOrdering_{c1}_none_nok.c', replace) - # Generate a correct ordering with a conditional not depending on ranks - replace = patterns.copy() - replace['shortdesc'] = 'Correct' + shortdesc - replace['longdesc'] = f'All ranks call {c1}' - replace['outcome'] = 'OK' - replace['errormsg'] = '' - replace['change_cond'] = 'rank < nprocs' - replace['operation1b'] = '' # Remove functions - replace['operation2b'] = '' - replace['operation2a'] = '' - replace['init2'] = '' - replace['fini1b'] = '' - replace['fini2a'] = '' - replace['fini2b'] = '' - replace['free1'] = gen.free[c1]("1") - replace['free2'] = '' - gen.make_file(template, f'CallOrdering_{c1}_none_ok.c', replace) diff --git a/scripts/original_MBI_generators/CollP2PMatchingGenerator.py b/scripts/original_MBI_generators/CollP2PMatchingGenerator.py deleted file mode 100755 index ed1f44fd6e3ac94c2792cfaf1fe36e192b70532a..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/CollP2PMatchingGenerator.py +++ /dev/null @@ -1,133 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: Lacking - COLL!basic: @{collfeature}@ - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int dest, src; - int root = 0; - int stag = 0, rtag = 0; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - int dbs = sizeof(int)*nprocs; /* Size of the dynamic buffers for alltoall and friends */ - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - MPI_Op op = MPI_SUM; - - @{init1}@ - @{init2}@ - @{init3}@ - if (rank == 0) { - dest=1;src=1; - @{operation3}@ /* MBIERROR1 */ - @{fini3}@ - @{operation1}@ - @{fini1}@ - }else if (rank==1) { - dest=0;src=0; - @{operation2}@ /* MBIERROR2 */ - @{fini2}@ - @{operation3}@ - @{fini3}@ - } - - @{free1}@ - @{free2}@ - @{free3}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for s in gen.send + gen.isend: - for r in gen.recv + gen.irecv: - for c in gen.coll: - patterns = {} - patterns = {'s': s, 'r': r, 'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['collfeature'] = 'Yes' if c in gen.coll else 'Lacking' - patterns['s'] = s - patterns['r'] = r - patterns['c'] = c - patterns['init1'] = gen.init[s]("1") - patterns['init2'] = gen.init[r]("2") - patterns['init3'] = gen.init[c]("3") - patterns['fini1'] = gen.fini[s]("1") - patterns['fini2'] = gen.fini[r]("2") - patterns['fini3'] = gen.fini[c]("3") - patterns['free1'] = gen.free[s]("1") - patterns['free2'] = gen.free[r]("2") - patterns['free3'] = gen.free[c]("3") - patterns['operation1'] = gen.operation[s]("1") - patterns['operation2'] = gen.operation[r]("2") - patterns['operation3'] = gen.operation[c]("3") - - # Generate the incorrect matching because of the conditional - replace = patterns.copy() - replace['shortdesc'] = 'Point to point & collective mismatch' - replace['longdesc'] = 'The @{s}@ corresponding to the @{r}@ is after @{c}@, while @{r}@ is before @{c}@. This is a deadlock.' - replace['outcome'] = 'ERROR: CallMatching' - replace['errormsg'] = 'P2P & Collective mistmatch. @{r}@ at @{filename}@:@{line:MBIERROR2}@ is matched with @{c}@ at @{filename}@:@{line:MBIERROR1}@ wich causes a deadlock.' - gen.make_file(template, f'CallOrdering_{r}_{s}_{c}_nok.c', replace) - - # Generate the incorrect code depending on buffering - # replace = patterns.copy() - # replace['shortdesc'] = 'Point to point & collective mismatch' - # replace['longdesc'] = 'Point to point @{s}@ is matched with @{c}@ which causes a deadlock depending on the buffering mode.' - # replace['outcome'] = 'ERROR: BufferingHazard' - # replace['errormsg'] = 'P2P & Collective mistmatch. @{s}@ at @{filename}@:@{line:MBIERROR2}@ is matched with @{c}@ at @{filename}@:@{line:MBIERROR1}@ wich causes a deadlock.' - # replace['init1'] = gen.init[s]("1") - # replace['init2'] = gen.init[r]("2") - # replace['operation1'] = gen.operation[r]("2") - # replace['operation2'] = gen.operation[s]("1") - # replace['fini1'] = gen.fini[r]("2") - # replace['fini2'] = gen.fini[s]("1") - # gen.make_file(template, f'CollP2PBuffering_{r}_{s}_{c}_nok.c', replace) diff --git a/scripts/original_MBI_generators/CollP2PMessageRaceGenerator.py b/scripts/original_MBI_generators/CollP2PMessageRaceGenerator.py deleted file mode 100755 index ff23dfab8f0f35e3224ab0adbdfbbe8e3eb3e5db..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/CollP2PMessageRaceGenerator.py +++ /dev/null @@ -1,152 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: Lacking - COLL!basic: @{collfeature}@ - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 4 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int dest, src; - int i=0; - int root = 0; - int stag = 0, rtag = 0; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs != 4) - printf("MBI ERROR: This test needs 4 processes to produce a bug!\\n"); - - int dbs = sizeof(int)*nprocs; /* Size of the dynamic buffers for alltoall and friends */ - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - MPI_Op op = MPI_SUM; - - - @{init1}@ - @{init2}@ - @{init3}@ - @{init4}@ - if (rank == 0) { - dest=1; - @{operation1}@ - @{fini1}@ - @{operation2}@ - @{fini2}@ - }else if (rank==2) { - dest=1; - @{operation1}@ - @{fini1}@ - @{operation2}@ - @{fini2}@ - }else if (rank==1) { - src = MPI_ANY_SOURCE; - rtag = MPI_ANY_TAG; - @{operation3}@ /* MBIERROR1 */ - @{operation1}@ - @{fini1}@ - @{changesrc}@ - @{operation4}@ /* MBIERROR2 */ - @{fini3}@ - @{fini4}@ - }else if (rank==3) { - @{operation1}@ - @{fini1}@ - } - - @{free1}@ - @{free2}@ - @{free3}@ - @{free4}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for s in gen.send + gen.isend: - for r in gen.irecv: - for c in gen.coll: - patterns = {} - patterns = {'s': s, 'r': r, 'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['collfeature'] = 'Yes' if c in gen.coll else 'Lacking' - patterns['s'] = s - patterns['r'] = r - patterns['c'] = c - patterns['init1'] = gen.init[c]("1") - patterns['init2'] = gen.init[s]("2") - patterns['init3'] = gen.init[r]("3") - patterns['init4'] = gen.init[r]("4") - patterns['fini1'] = gen.fini[c]("1") - patterns['fini2'] = gen.fini[s]("2") - patterns['fini3'] = gen.fini[r]("3") - patterns['fini4'] = gen.fini[r]("4") - patterns['free1'] = gen.free[c]("1") - patterns['free2'] = gen.free[s]("2") - patterns['free3'] = gen.free[r]("3") - patterns['free4'] = gen.free[r]("4") - patterns['operation1'] = gen.operation[c]("1") - patterns['operation2'] = gen.operation[s]("2") - patterns['operation3'] = gen.operation[r]("3") - patterns['operation4'] = gen.operation[r]("4") - patterns['changesrc'] = '' - - # Generate the correct matching because of the conditional - replace = patterns.copy() - replace['shortdesc'] = 'Message race' - replace['longdesc'] = 'Message race without problem in @{r}@ with @{c}@.' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - replace['changesrc'] = '' - gen.make_file(template, f'MessageRace_{c}_{s}_{r}_ok.c', replace) - - # Generate the incorrect matching because of the conditional - replace = patterns.copy() - replace['shortdesc'] = 'Message race' - replace['longdesc'] = 'Message race in @{r}@ with @{c}@.' - replace['outcome'] = 'ERROR: MessageRace' - replace['errormsg'] = 'Message race. The use of wildcard receive calls (@{r}@ at @{filename}@:@{line:MBIERROR1}@ and @{r}@ at @{filename}@:@{line:MBIERROR2}@) leads to nondeterministic matching.' - replace['changesrc'] = 'src = 0;' - gen.make_file(template, f'MessageRace_{c}_{s}_{r}_nok.c', replace) diff --git a/scripts/original_MBI_generators/CollTopoGenerator.py b/scripts/original_MBI_generators/CollTopoGenerator.py deleted file mode 100755 index 7a137bd2aaef951ca63b1398a6530419db8d7293..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/CollTopoGenerator.py +++ /dev/null @@ -1,126 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: @{toolfeature}@ - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define buff_size 128 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Comm newcom; - int dims[2], periods[2], coords[2]; - int source, dest; - dims[0] = 2; - dims[1] = 1; - periods[0] = 1; - periods[1] = 1; - - @{change_dims}@ - - MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, 0, &newcom); /* create a cartesian communicator */ - - @{change_com}@ - - @{init}@ - @{operation}@ /* MBIERROR2 */ - @{fini}@ - - if (newcom != MPI_COMM_NULL) - MPI_Comm_free(&newcom); - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -for c in gen.tcoll4topo: - patterns = {} - patterns = {'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['toolfeature'] = 'Yes' if c in gen.tcoll4topo else 'Lacking' - patterns['c'] = c - patterns['init'] = gen.init[c]("1") - patterns['fini'] = gen.fini[c]("1") - patterns['operation'] = gen.operation[c]("1") - patterns['change_dims'] = '/* No error injected here */' - - # Generate the correct code - replace = patterns.copy() - replace['shortdesc'] = 'Function @{c}@ with correct arguments' - replace['longdesc'] = f'All ranks in comm call {c} with correct arguments' - replace['outcome'] = 'OK' - replace['errormsg'] = '' - replace['change_com'] = '/* No error injected here */' - replace['change_dims'] = '/* No error injected here */' - gen.make_file(template, f'InvalidParam_{c}_ok.c', replace) - - # Generate the incorrect code - replace = patterns.copy() - replace['shortdesc'] = 'The code tries to get cartesian information of MPI_COMM_WORLD.' - replace['longdesc'] = 'The code creates a cartesian communicator, and tries to get cartesian information of MPI_COMM_WORLD.' - replace['outcome'] = 'ERROR: InvalidCommunicator' - replace['errormsg'] = 'Invalid Communicator in a collective. @{c}@ at @{filename}@:@{line:MBIERROR2}@ tries to get cartesian information of MPI_COMM_WORLD.' - replace['change_com'] = 'newcom = MPI_COMM_WORLD; /* MBIERROR1 */' - gen.make_file(template, f'InvalidParam_Com_{c}_nok.c', replace) - - # Generate the code with newcom=MPI_COMM_NULL - replace = patterns.copy() - replace['shortdesc'] = 'Function @{c}@ called with comm=MPI_COMM_NULL' - replace['longdesc'] = 'Function @{c}@ called with comm=MPI_COMM_NULL' - replace['outcome'] = 'ERROR: InvalidCommunicator' - replace['errormsg'] = 'Invalid communicator. @{c}@ at @{filename}@:@{line:MBIERROR2}@ has MPI_COMM_NULL as a communicator.' - replace['change_com'] = 'newcom = MPI_COMM_NULL; /* MBIERROR1 */' - gen.make_file(template, f'InvalidParam_ComNull_{c}_nok.c', replace) - - # Generate the code with invalid dimension - replace = patterns.copy() - replace['shortdesc'] = 'Creates a cartesian communicator with a negative entry in the dims attribute' - replace['longdesc'] = 'Creates a cartesian communicator with a negative entry in the dims attribute, which is a usage error' - replace['outcome'] = 'ERROR: InvalidOtherArg' - replace['errormsg'] = 'Invalid Argument. MPI_Cart_create has invalid dimensions.' - replace['change_com'] = "" - replace['change_dims'] = 'dims[0] = -2; dims[1] = -1; /* MBIERROR1 */' - gen.make_file(template, 'InvalidParam_Dim_MPI_Cart_create_nok.c', replace) diff --git a/scripts/original_MBI_generators/InputHazardGenerator.py b/scripts/original_MBI_generators/InputHazardGenerator.py deleted file mode 100755 index 899e810f969afdd72ed1d4cf57825fb6aa46853b..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/InputHazardGenerator.py +++ /dev/null @@ -1,188 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: Lacking - COLL!basic: @{collfeature}@ - COLL!nonblocking: @{icollfeature}@ - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} 1 - | @{outcome}@ - | @{errormsg}@ - $ mpirun -np 2 ${EXE} 2 - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 10 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - MPI_Status sta; - int i=0; - int root = 0; - int stag=0; - int rtag=0; - int buff_size = N; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - if (argc < 2) - printf("MBI ERROR: This test needs at least 1 argument to produce a bug!\\n"); - - int dbs = sizeof(int)*nprocs; /* Size of the dynamic buffers for alltoall and friends */ - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - MPI_Op op = MPI_SUM; - - int n = atoi(argv[1]); - int buffer[N] = {42}; - - @{init1}@ - @{init2}@ - - if (rank == 0) { - if ((n % 2) == 0) { @{errorcond}@ - @{operation1b}@ - @{fini1b}@ - } else { - @{operation1a}@ - @{fini1a}@ - } - } else @{addcond}@ { - @{operation2}@ - @{fini2}@ - } - - @{free1}@ - @{free2}@ - - MPI_Finalize(); - - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -# P2P -for s in gen.send + gen.isend: - for r in gen.recv + gen.irecv: - patterns = {} - patterns = {'s': s, 'r': r} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['collfeature'] = 'Lacking' - patterns['icollfeature'] = 'Lacking' - patterns['s'] = s - patterns['r'] = r - - patterns['init1'] = gen.init[s]("1") - patterns['operation1a'] = gen.operation[s]("1").replace("buf1", "buffer").replace("dest", "1") - patterns['operation1b'] = gen.operation[s]("1").replace("buf1", "buffer").replace("dest", "1") - patterns['fini1a'] = gen.fini[s]("1") - patterns['fini1b'] = gen.fini[s]("1") - patterns['free1'] = gen.free[s]("1") - - patterns['init2'] = gen.init[r]("2") - patterns['operation2'] = gen.operation[r]("2").replace("buf2", "buffer").replace("src", "0") - patterns['fini2'] = gen.fini[r]("2") - patterns['free2'] = gen.free[r]("2") - - patterns['errorcond'] = '' - patterns['addcond'] = 'if (rank == 1)' - - # Generate a correct matching - replace = patterns.copy() - replace['shortdesc'] = 'Correct call ordering.' - replace['longdesc'] = 'Correct call ordering.' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - gen.make_file(template, f'InputHazardCallOrdering_{r}_{s}_ok.c', replace) - - # Generate the incorrect matching - replace = patterns.copy() - replace['shortdesc'] = 'Missing Send function.' - replace['longdesc'] = 'Missing Send function call for a path depending to input, a deadlock is created.' - replace['outcome'] = 'ERROR: IHCallMatching' - replace['errormsg'] = 'P2P mistmatch. Missing @{r}@ at @{filename}@:@{line:MBIERROR}@.' - replace['errorcond'] = '/* MBIERROR */' - replace['operation1b'] = '' - replace['fini1b'] = '' - gen.make_file(template, f'InputHazardCallOrdering_{r}_{s}_nok.c', replace) - -# COLLECTIVE -for c in gen.coll: - patterns = {} - patterns = {'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Lacking' - patterns['ip2pfeature'] = 'Lacking' - patterns['collfeature'] = 'Yes' if c in gen.coll else 'Lacking' - patterns['icollfeature'] = 'Yes' if c in gen.icoll else 'Lacking' - patterns['c'] = c - - patterns['init1'] = gen.init[c]("1") - patterns['operation1a'] = gen.operation[c]("1") - patterns['operation1b'] = gen.operation[c]("1") - patterns['fini1a'] = gen.fini[c]("1") - patterns['fini1b'] = gen.fini[c]("1") - patterns['free1'] = gen.free[c]("1") - - patterns['init2'] = gen.init[c]("2") - patterns['operation2'] = gen.operation[c]("2") - patterns['fini2'] = gen.fini[c]("2") - patterns['free2'] = gen.free[c]("2") - - patterns['errorcond'] = '' - patterns['addcond'] = '' - - # Generate a correct matching - replace = patterns.copy() - replace['shortdesc'] = 'Correct call ordering.' - replace['longdesc'] = 'Correct call ordering.' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - gen.make_file(template, f'InputHazardCallOrdering_{c}_ok.c', replace) - - # Generate the incorrect matching - replace = patterns.copy() - replace['shortdesc'] = 'Missing collective function call.' - replace['longdesc'] = 'Missing collective function call for a path depending to input, a deadlock is created.' - replace['outcome'] = 'ERROR: IHCallMatching' - replace['errormsg'] = 'P2P mistmatch. Missing @{c}@ at @{filename}@:@{line:MBIERROR}@.' - replace['errorcond'] = '/* MBIERROR */' - replace['operation1b'] = '' - replace['fini1b'] = '' - gen.make_file(template, f'InputHazardCallOrdering_{c}_nok.c', replace) diff --git a/scripts/original_MBI_generators/MissingWaitandStartGenerator.py b/scripts/original_MBI_generators/MissingWaitandStartGenerator.py deleted file mode 100755 index 2a12cab8992fe7816b12acca23a41eed67d0369b..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/MissingWaitandStartGenerator.py +++ /dev/null @@ -1,201 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: @{persfeature}@ - COLL!basic: Lacking - COLL!nonblocking: @{icollfeature}@ - COLL!persistent: @{cpersfeature}@ - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int root = 0; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - MPI_Op op = MPI_SUM; - int stag = 0, rtag = 0; - int buff_size = 1; - - int dbs = sizeof(int)*nprocs; /* Size of the dynamic buffers for alltoall and friends */ - - int dest = (rank == nprocs - 1) ? (0) : (rank + 1); - int src = (rank == 0) ? (nprocs - 1) : (rank - 1); - - @{init1}@ - @{init2}@ - - @{operation1}@ /* MBIERROR */ - @{start1}@ - @{operation2}@ - @{start2}@ - - @{fini1}@ - @{fini2}@ - - @{free1}@ - @{free2}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for s in gen.isend + gen.psend: - for r in gen.irecv + gen.precv: - patterns = {} - patterns = {'s': s, 'r': r} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['persfeature'] = 'Yes' if s in gen.psend or r in gen.precv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['icollfeature'] = 'Lacking' - patterns['cpersfeature'] = 'Lacking' - patterns['s'] = s - patterns['r'] = r - patterns['init1'] = gen.init[s]("1") - patterns['init2'] = gen.init[r]("2") - patterns['start1'] = gen.start[s]("1") - startPers = patterns['start1'] - patterns['start2'] = gen.start[r]("2") - patterns['operation1'] = gen.operation[s]("1") - patterns['operation2'] = gen.operation[r]("2") - patterns['fini1'] = gen.fini[s]("1") - wait = patterns['fini1'] - patterns['fini2'] = gen.fini[r]("2") - patterns['free1'] = gen.free[s]("1") - Reqfree = patterns['free1'] - patterns['free2'] = gen.free[r]("2") - - # Generate the correct code - replace = patterns.copy() - replace['shortdesc'] = 'Correct matching' - replace['longdesc'] = 'No error' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - gen.make_file(template, f'ReqLifecycle_{s}_{r}_ok.c', replace) - - # Generate the code with a missing wait - replace = patterns.copy() - replace['shortdesc'] = 'Missing wait' - replace['longdesc'] = 'Missing Wait. @{s}@ at @{filename}@:@{line:MBIERROR}@ has no completion.' - replace['outcome'] = 'ERROR: MissingWait' - replace['errormsg'] = 'ERROR: MissingWait' - replace['fini1'] = ' /* MBIERROR MISSING: ' + wait + ' */' - gen.make_file(template, f'ReqLifecycle_MissingWait_{s}_{r}_nok.c', replace) - - if s in gen.psend: - # Generate the code with a missing start - persistent only - replace = patterns.copy() - replace['shortdesc'] = 'Missing start' - replace['longdesc'] = 'Missing start. @{s}@ at @{filename}@:@{line:MBIERROR}@ has no start' - replace['outcome'] = 'ERROR: MissingStart' - replace['errormsg'] = 'ERROR: MissingStart' - replace['fini1'] = gen.fini[s]("1") - replace['start1'] = ' /* MBIERROR MISSING: ' + startPers + ' */' - gen.make_file(template, f'ReqLifecycle_MissingStart_{s}_{r}_nok.c', replace) - # Generate the code with a missing free - persistent only - replace = patterns.copy() - replace['shortdesc'] = 'Missing free' - replace['longdesc'] = 'Missing free. @{s}@ at @{filename}@:@{line:MBIERROR}@ has no free' - replace['outcome'] = 'ERROR: RequestLeak' - replace['errormsg'] = 'ERROR: RequestLeak' - replace['start1'] = gen.start[s]("1") - replace['free1'] = ' /* MBIERROR MISSING: ' + Reqfree + ' */' - gen.make_file(template, f'ResLeak_nofree_{s}_{r}_nok.c', replace) - - -# Collectives only -for c in gen.pcoll + gen.icoll + gen.ibarrier: - patterns = {} - patterns = {'c': c} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['persfeature'] = 'Lacking' - patterns['ip2pfeature'] = 'Lacking' - patterns['cpersfeature'] = 'Yes' if c in gen.pcoll else 'Lacking' - patterns['icollfeature'] = 'Yes' if c in gen.icoll + gen.ibarrier else 'Lacking' - patterns['c'] = c - patterns['init1'] = gen.init[c]("1") - patterns['operation1'] = gen.operation[c]("1") - patterns['start1'] = gen.start[c]("1") - patterns['fini1'] = gen.fini[c]("1") - patterns['free1'] = gen.free[c]("1") - opstart = patterns['start1'] - opwait = patterns['fini1'] - opfree = patterns['free1'] - patterns['init2'] = "" - patterns['operation2'] = "" - patterns['start2'] = "" - patterns['fini2'] = "" - patterns['free2'] = "" - - # Generate the code with a missing wait - replace = patterns.copy() - replace['shortdesc'] = 'Missing wait' - replace['longdesc'] = 'Missing Wait. @{c}@ at @{filename}@:@{line:MBIERROR}@ has no completion' - replace['outcome'] = 'ERROR: MissingWait' - replace['errormsg'] = 'ERROR: MissingWait' - replace['fini1'] = ' /* MBIERROR MISSING: ' + opwait + ' */' - replace['free1'] = ' /* MISSING: ' + replace['free1'] + ' (to not free the buffer before an internal wait */' - gen.make_file(template, f'ReqLifecycle_MissingWait_{c}_nok.c', replace) - - if c in gen.pcoll: - # Generate the code with a missing start - persistent only - replace = patterns.copy() - replace['shortdesc'] = 'Missing start functio' - replace['longdesc'] = 'Missing Start. @{c}@ at @{filename}@:@{line:MBIERROR}@ has no start' - replace['outcome'] = 'ERROR: MissingStart' - replace['errormsg'] = 'ERROR: MissingStart' - replace['fini1'] = gen.fini[c]("1") - replace['start1'] = ' /* MBIERROR MISSING: ' + opstart + ' */' - gen.make_file(template, f'ReqLifecycle_MissingStart_{c}_nok.c', replace) - - # Generate the code with a resleak (no free) - persistent only - replace = patterns.copy() - replace['shortdesc'] = 'Missing free' - replace['longdesc'] = 'Missing free. @{c}@ at @{filename}@:@{line:MBIERROR}@ has no free' - replace['outcome'] = 'ERROR: RequestLeak' - replace['errormsg'] = 'ERROR: RequestLeak' - replace['start1'] = gen.start[c]("1") - replace['free1'] = ' /* MBIERROR MISSING: ' + opfree + ' */' - gen.make_file(template, f'ResLeak_nofree_{c}_nok.c', replace) diff --git a/scripts/original_MBI_generators/P2PArgGenerator.py b/scripts/original_MBI_generators/P2PArgGenerator.py deleted file mode 100755 index ae0f2d0783bae3fb2114671c6f057beefb80c1f3..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PArgGenerator.py +++ /dev/null @@ -1,182 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: @{persfeature}@ - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int src=0, dest=1; - int stag=0, rtag=0; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - - @{change_arg}@ - - @{init1}@ - @{init2}@ - if (rank == 0) { - @{operation1}@ /* MBIERROR1 */ - @{start1}@ - @{fini1}@ - }else if (rank == 1) { - @{operation2}@ /* MBIERROR2 */ - @{start2}@ - @{fini2}@ - } - @{free1}@ - @{free2}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -################################## -# Generate code with type mismatch -################################## - -for p1 in gen.allsend: - for p2 in gen.allrecv: - patterns = {} - patterns = {'p1': p1, 'p2': p2} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if p1 in gen.send + gen.ssend + gen.bsend or p2 in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if p1 in gen.isend or p2 in gen.irecv else 'Lacking' - patterns['persfeature'] = 'Yes' if p1 in gen.psend or p2 in gen.precv else 'Lacking' - patterns['p1'] = p1 - patterns['p2'] = p2 - patterns['init1'] = gen.init[p1]("1") - patterns['init2'] = gen.init[p2]("2") - patterns['start1'] = gen.start[p1]("1") - patterns['start2'] = gen.start[p2]("2") - patterns['fini1'] = gen.fini[p1]("1") - patterns['fini2'] = gen.fini[p2]("2") - patterns['operation1'] = gen.operation[p1]("1") #send - patterns['operation2'] = gen.operation[p2]("2") #recv - patterns['free1'] = gen.free[p1]("1") - patterns['free2'] = gen.free[p2]("2") - - # Generate the incorrect matching - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{p1}@ and @{p2}@ have a datatype mismatch' - replace['longdesc'] = 'Process 0 uses MPI_FLOAT as the datatype while process 1 uses MPI_INT.' - replace['outcome'] = 'ERROR: DatatypeMatching' - replace['errormsg'] = 'P2P Datatype mismatch. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ and @{p2}@ at @{filename}@:@{line:MBIERROR2}@ have MPI_INT and MPI_FLOAT as a datatype' - replace['change_arg'] = 'if (rank == 0)\n type = MPI_FLOAT; /* MBIERROR3 */' - gen.make_file(template, f'ParamMatching_Data_{p1}_{p2}_nok.c', replace) - - # Generate code with a null type - replace = patterns.copy() - replace['shortdesc'] = 'Use of invalid datatype in point-to-point communication' - replace['longdesc'] = 'Point to point @{p1}@ and @{p2}@ have MPI_DATATYPE_NULL as a type' - replace['outcome'] = 'ERROR: InvalidDatatype' - replace['errormsg'] = 'Invalid datatype in P2P. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ and @{p2}@ at @{filename}@:@{line:MBIERROR2}@ have MPI_DATATYPE_NULL as a type' - replace['change_arg'] = 'type = MPI_DATATYPE_NULL; /* MBIERROR3 */' - gen.make_file(template, f'InvalidParam_DatatypeNull_{p1}_{p2}_nok.c', replace) - - # Generate code with an invalid datatype - replace = patterns.copy() - replace['shortdesc'] = 'Use of invalid datatype in point-to-point communication' - replace['longdesc'] = 'Point to point @{p1}@ and @{p2}@ have an invalid datatype' - replace['outcome'] = 'ERROR: InvalidDatatype' - replace['errormsg'] = 'Invalid datatype in P2P. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ and @{p2}@ at @{filename}@:@{line:MBIERROR2}@ have an invalid datatype' - replace['change_arg'] = 'MPI_Type_contiguous (2, MPI_INT, &type); MPI_Type_commit(&type);MPI_Type_free(&type); /* MBIERROR3 */' - gen.make_file(template, f'InvalidParam_Datatype_{p1}_{p2}_nok.c', replace) - -################################# -# Generate code with tag mismatch -################################# - -for p1 in gen.allsend: - for p2 in gen.allrecv: - patterns = {} - patterns = {'p1': p1, 'p2': p2} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if p1 in gen.send + gen.ssend + gen.bsend or p2 in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if p1 in gen.isend or p2 in gen.irecv else 'Lacking' - patterns['persfeature'] = 'Yes' if p1 in gen.psend or p2 in gen.precv else 'Lacking' - patterns['p1'] = p1 - patterns['p2'] = p2 - patterns['init1'] = gen.init[p1]("1") - patterns['init2'] = gen.init[p2]("2") - patterns['start1'] = gen.start[p1]("1") - patterns['start2'] = gen.start[p2]("2") - patterns['fini1'] = gen.fini[p1]("1") - patterns['fini2'] = gen.fini[p2]("2") - patterns['operation1'] = gen.operation[p1]("1") #send - patterns['operation2'] = gen.operation[p2]("2") #recv - patterns['free1'] = gen.free[p1]("1") - patterns['free2'] = gen.free[p2]("2") - patterns['change_arg'] = "" - - # Generate the incorrect tag matching - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{p1}@ and @{p2}@ have a tag mismatch' - replace['longdesc'] = 'Point to point @{p1}@ and @{p2}@ have a tag mismatch.' - replace['outcome'] = 'ERROR: TagMatching' - replace['errormsg'] = 'P2P tag mismatch. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ and @{p2}@ at @{filename}@:@{line:MBIERROR2}@ use different tag.' - replace['change_arg'] = 'stag=0; rtag=1;/* MBIERROR */' - gen.make_file(template, f'ParamMatching_Tag_{p1}_{p2}_nok.c', replace) - - # Generate the code with an invalid tag - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{p1}@ and @{p2}@ have an invalid tag' - replace['longdesc'] = 'Point to point @{p1}@ and @{p2}@ have an invalid tag.' - replace['outcome'] = 'ERROR: InvalidTag' - replace['errormsg'] = 'Invalid Tag. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ and @{p2}@ at @{filename}@:@{line:MBIERROR2}@ use an invalid tag.' - replace['change_arg'] = 'stag=-1; rtag=-2;/* MBIERROR */' - gen.make_file(template, f'InvalidParam_Tag_{p1}_{p2}_nok.c', replace) - - # Generate a correct code using MPI_ANY_TAG - replace = patterns.copy() - replace['shortdesc'] = 'Correct code' - replace['longdesc'] = 'Correct code' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - replace['change_arg'] = 'rtag=MPI_ANY_TAG;' - gen.make_file(template, f'ParamMatching_Tag_{p1}_{p2}_ok.c', replace) diff --git a/scripts/original_MBI_generators/P2PBufferingGenerator.py b/scripts/original_MBI_generators/P2PBufferingGenerator.py deleted file mode 100755 index 05253b87380cb19bc9ec3a39ccd08116d2c643ef..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PBufferingGenerator.py +++ /dev/null @@ -1,188 +0,0 @@ -#! /usr/bin/python3 - -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: @{origin}@ - - Description: @{shortdesc}@ - @{longdesc}@ - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 4 $zero_buffer ${EXE} - | @{outcome1}@ - | @{errormsg1}@ - $ mpirun -np 4 $infty_buffer ${EXE} - | @{outcome1}@ - | @{errormsg1}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int dest, src; - int stag = 0, rtag = 0; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 4) - printf("MBI ERROR: This test needs at least 4 processes to produce a bug!\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - - @{init1}@ - @{init2}@ - if (rank == 0) { - src=@{src1}@,dest=@{dest1}@; - @{operation1a}@ /* MBIERROR1 */ - @{fini1a}@ - @{operation2a}@ - @{fini2a}@ - }else if (rank == 1) { - src=@{src2}@,dest=@{dest2}@; - @{operation1b}@ /* MBIERROR2 */ - @{fini1b}@ - @{operation2b}@ - @{fini2b}@ - }else{ - src=@{src3}@,dest=@{dest3}@; - @{operation1c}@ - @{fini1c}@ - @{operation2c}@ - @{fini2c}@ - } - @{free1}@ - @{free2}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -for s in gen.send + gen.isend: - for r in gen.recv + gen.irecv: - patterns = {} - patterns = {'s': s, 'r': r} - patterns['origin'] = 'MBI' - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['s'] = s - patterns['r'] = r - patterns['src1'] = '1' - patterns['dest1'] = '1' - patterns['src2'] = '0' - patterns['dest2'] = '0' - patterns['src3'] = '0' - patterns['dest3'] = '0' - patterns['init1'] = gen.init[s]("1") - patterns['init2'] = gen.init[r]("2") - patterns['fini1a'] = gen.fini[s]("1") - patterns['fini1b'] = gen.fini[s]("1") - patterns['fini1c'] = '' - patterns['fini2a'] = gen.fini[r]("2") - patterns['fini2b'] = gen.fini[r]("2") - patterns['fini2c'] = '' - patterns['free1'] = gen.free[s]("1") - patterns['free2'] = gen.free[r]("2") - patterns['operation1a'] = gen.operation[s]("1") - patterns['operation2a'] = gen.operation[r]("2") - patterns['operation1b'] = gen.operation[s]("1") - patterns['operation2b'] = gen.operation[r]("2") - patterns['operation1c'] = '' - patterns['operation2c'] = '' - - # Generate the incorrect matching depending on the buffering mode (send + recv) - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{s}@ and @{r}@ may not be matched' - replace['longdesc'] = 'Processes 0 and 1 both call @{s}@ and @{r}@. This results in a deadlock depending on the buffering mode' - replace['outcome1'] = 'ERROR: BufferingHazard' - replace['errormsg1'] = f'Buffering Hazard. Possible deadlock depending the buffer size of MPI implementation and system environment cause by two processes call {s} before {r}.' - gen.make_file(template, f'P2PBuffering_{s}_{r}_{s}_{r}_nok.c', replace) - - # Generate the incorrect matching with send message to the same process depending on the buffering mode (send + recv) - replace = patterns.copy().copy() - replace['origin'] = 'RTED' - replace['src1'] = '0' - replace['dest1'] = '0' - replace['src2'] = '1' - replace['dest2'] = '1' - replace['shortdesc'] = 'Point to point @{s}@ and @{r}@ may not be matched' - replace['longdesc'] = 'Processes 0 and 1 both call @{s}@ and @{r}@. This results in a deadlock depending on the buffering mode' - replace['outcome1'] = 'ERROR: BufferingHazard' - replace['errormsg1'] = f'Buffering Hazard. Possible deadlock depending the buffer size of MPI implementation and system environment cause Send message to the same process.' - gen.make_file(template, f'P2PBuffering_SameProcess_{s}_{r}_nok.c', replace) - - # Generate the incorrect matching with circular send message depending on the buffering mode (send + recv) - replace = patterns.copy().copy() - replace['origin'] = 'RTED' - replace['src1'] = '(nprocs - 1)' - replace['dest1'] = '1' - replace['src2'] = '0' - replace['dest2'] = '2' - replace['src3'] = '(rank - 1)' - replace['dest3'] = '((rank + 1) % nprocs)' - replace['fini1c'] = gen.fini[s]("1") - replace['fini2c'] = gen.fini[r]("2") - replace['operation1c'] = gen.operation[s]("1") + ' /* MBIERROR3 */' - replace['operation2c'] = gen.operation[r]("2") - replace['shortdesc'] = 'Point to point @{s}@ and @{r}@ may not be matched' - replace['longdesc'] = 'Processes 0 and 1 both call @{s}@ and @{r}@. This results in a deadlock depending on the buffering mode' - replace['outcome1'] = 'ERROR: BufferingHazard' - replace['errormsg1'] = f'Buffering Hazard. Possible deadlock depending the buffer size of MPI implementation and system environment cause circular send message.' - gen.make_file(template, f'P2PBuffering_Circular_{s}_{r}_nok.c', replace) - - # Generate the incorrect matching depending on the buffering mode (recv + send) - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{s}@ and @{r}@ are not matched' - replace['longdesc'] = 'Processes 0 and 1 both call @{r}@ and @{s}@. This results in a deadlock' - replace['outcome1'] = 'ERROR: CallMatching' - replace['errormsg1'] = 'ERROR: CallMatching' - replace['operation1a'] = gen.operation[r]("2") - replace['fini1a'] = gen.fini[r]("2") - replace['operation2a'] = gen.operation[s]("1") - replace['fini2a'] = gen.fini[s]("1") - replace['operation1b'] = gen.operation[r]("2") - replace['fini1b'] = gen.fini[r]("2") - replace['operation2b'] = gen.operation[s]("1") - replace['fini2b'] = gen.fini[s]("1") - gen.make_file(template, f'P2PCallMatching_{r}_{s}_{r}_{s}_nok.c', replace) - - # Generate the correct matching - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{s}@ and @{r}@ are correctly matched' - replace['longdesc'] = 'Process 0 calls @{s}@ and process 1 calls @{r}@.' - replace['outcome1'] = 'OK' - replace['errormsg1'] = 'OK' - replace['fini1a'] = gen.fini[s]("1") - replace['fini2a'] = gen.fini[r]("2") - replace['operation1a'] = gen.operation[s]("1") - replace['operation2a'] = gen.operation[r]("2") - gen.make_file(template, f'P2PCallMatching_{s}_{r}_{r}_{s}_ok.c', replace) diff --git a/scripts/original_MBI_generators/P2PComGenerator.py b/scripts/original_MBI_generators/P2PComGenerator.py deleted file mode 100755 index 6382267aa9f917faf751f0dbb7b82cd70ba32d12..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PComGenerator.py +++ /dev/null @@ -1,154 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: @{origin}@ - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: @{persfeature}@ - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Yes - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int src=0, dest=1; - int stag = 0, rtag = 0; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Datatype type = MPI_INT; - MPI_Comm newcom; - MPI_Comm_split(MPI_COMM_WORLD, 0, nprocs - rank, &newcom); - @{change_com}@ - @{change_srcdest}@ - - @{init1}@ - @{init2}@ - if (rank == 0) { - @{operation1}@ /* MBIERROR1 */ - @{start1}@ - @{fini1}@ - }else if (rank == 1) { - @{operation2}@ /* MBIERROR2 */ - @{start2}@ - @{fini2}@ - } - @{free1}@ - @{free2}@ - - if(newcom != MPI_COMM_NULL && newcom != MPI_COMM_WORLD) - MPI_Comm_free(&newcom); - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for p1 in gen.send + gen.isend + gen.psend: - for p2 in gen.recv + gen.irecv + gen.precv: - patterns = {} - patterns = {'p1': p1, 'p2': p2} - patterns['origin'] = "MBI" - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if p1 in gen.send or p2 in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if p1 in gen.isend or p2 in gen.irecv else 'Lacking' - patterns['persfeature'] = 'Yes' if p1 in gen.psend or p2 in gen.precv else 'Lacking' - patterns['p1'] = p1 - patterns['p2'] = p2 - patterns['init1'] = gen.init[p1]("1") - patterns['init2'] = gen.init[p2]("2") - patterns['start1'] = gen.start[p1]("1") - patterns['start2'] = gen.start[p2]("2") - patterns['fini1'] = gen.fini[p1]("1") - patterns['fini2'] = gen.fini[p2]("2") - patterns['operation1'] = gen.operation[p1]("1") #send - patterns['operation2'] = gen.operation[p2]("2") #recv - patterns['free1'] = gen.free[p1]("1") - patterns['free2'] = gen.free[p2]("2") - patterns['change_srcdest'] = "" - patterns['change_com'] = "" - - # Generate the incorrect matching - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{p1}@ and @{p2}@ have a communicator mismatch' - replace['longdesc'] = 'Process 1 uses newcom as the communicator while process 0 uses MPI_COMM_WORLD.' - replace['outcome'] = 'ERROR: CommunicatorMatching' - replace['errormsg'] = 'P2P Communicator mismatch. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ and @{p2}@ at @{filename}@:@{line:MBIERROR2}@ have newcom or MPI_COMM_WORLD as a communicator.' - replace['change_com'] = 'if (rank==0)\n newcom = MPI_COMM_WORLD; /* MBIERROR */' - gen.make_file(template, f'ParamMatching_Com_{p1}_{p2}_nok.c', replace) - - # Generate the code with an invalid communicator - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{p1}@ and @{p2}@ have an invalid communicator' - replace['longdesc'] = 'Point to point @{p1}@ and @{p2}@ have an invalid communicator.' - replace['outcome'] = 'ERROR: InvalidCommunicator' - replace['errormsg'] = 'Invalid Communicator. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ and @{p2}@ at @{filename}@:@{line:MBIERROR2}@ use a communicator that is freed line @{line:MBIERROR}@.' - replace['change_com'] = 'MPI_Comm_free(&newcom); /* MBIERROR */' - gen.make_file(template, f'InvalidParam_Com_{p1}_{p2}_nok.c', replace) - - # Generate the code with an invalid communicator ==> TO CHECK - #replace = patterns.copy() - #replace['shortdesc'] = 'Point to point @{p1}@ and @{p2}@ have an invalid communicator' - # replace['longdesc'] = 'Point to point @{p1}@ and @{p2}@ have an invalid communicator.' - # replace['outcome'] = 'ERROR: InvalidCommunicator' - # replace['errormsg'] = 'Invalid Communicator. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ and @{p2}@ at @{filename}@:@{line:MBIERROR2}@ use different communicators' - # replace['origin'] = "MPI-Corrbench" - # replace['change_com'] = "" - # gen.make_file(template, f'InvalidParam_Com_{p1}_{p2}_nok.c', replace) - - # Generate the code with an invalid dest - replace = patterns.copy() - replace['origin'] = "MBI" - replace['shortdesc'] = 'Point to point @{p1}@ has an invalid argument' - replace['longdesc'] = 'Point to point @{p1}@ and @{p2}@ have an invalid communicator.' - replace['outcome'] = 'ERROR: InvalidSrcDest' - replace['errormsg'] = 'InvalidSrcDest. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ performs a send with a dest not in communicator (dest is changed line @{line:MBIERROR}@).' - replace['change_com'] = "" - replace['change_srcdest'] = 'dest=4; /* MBIERROR */' - gen.make_file(template, f'InvalidParam_Dest_{p1}_{p2}_nok.c', replace) - - # Generate the code with an invalid src - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{p2}@ has an invalid argument' - replace['longdesc'] = 'Point to point @{p1}@ and @{p2}@ have an invalid communicator.' - replace['outcome'] = 'ERROR: InvalidSrcDest' - replace['errormsg'] = 'InvalidSrcDest. @{p2}@ at @{filename}@:@{line:MBIERROR2}@ performs a recv with a negative integer as source (src is changed line @{line:MBIERROR}@).' - replace['change_srcdest'] = 'src=-1; /* MBIERROR */' - gen.make_file(template, f'InvalidParam_Src_{p1}_{p2}_nok.c', replace) diff --git a/scripts/original_MBI_generators/P2PInvalidComGenerator.py b/scripts/original_MBI_generators/P2PInvalidComGenerator.py deleted file mode 100755 index 2a8a515ab0fe3323ec3bb75d0fe2b8e6ce002644..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PInvalidComGenerator.py +++ /dev/null @@ -1,120 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: @{origin}@ - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: @{persfeature}@ - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Yes - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int src=0, dest=1; - int stag = 0, rtag = 0; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - MPI_Datatype type = MPI_INT; - MPI_Comm newcom = MPI_COMM_WORLD; - - @{init1}@ - @{init2}@ - if (rank == 0) { - @{change_com1}@ - @{operation1}@ /* MBIERROR1 */ - @{start1}@ - @{fini1}@ - }else if (rank == 1) { - @{change_com2}@ - @{operation2}@ /* MBIERROR2 */ - @{start2}@ - @{fini2}@ - } - @{free1}@ - @{free2}@ - - if(newcom != MPI_COMM_NULL && newcom != MPI_COMM_WORLD) - MPI_Comm_free(&newcom); - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for p1 in gen.send + gen.isend + gen.psend: - for p2 in gen.recv + gen.irecv + gen.precv: - patterns = {} - patterns = {'p1': p1, 'p2': p2} - patterns['origin'] = "MBI" - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if p1 in gen.send or p2 in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if p1 in gen.isend or p2 in gen.irecv else 'Lacking' - patterns['persfeature'] = 'Yes' if p1 in gen.psend or p2 in gen.precv else 'Lacking' - patterns['p1'] = p1 - patterns['p2'] = p2 - patterns['init1'] = gen.init[p1]("1") - patterns['init2'] = gen.init[p2]("2") - patterns['start1'] = gen.start[p1]("1") - patterns['start2'] = gen.start[p2]("2") - patterns['fini1'] = gen.fini[p1]("1") - patterns['fini2'] = gen.fini[p2]("2") - patterns['operation1'] = gen.operation[p1]("1") #send - patterns['operation2'] = gen.operation[p2]("2") #recv - patterns['free1'] = gen.free[p1]("1") - patterns['free2'] = gen.free[p2]("2") - patterns['change_com1'] = "" - patterns['change_com2'] = "" - - replace = patterns.copy() - replace['origin'] = "inspired from MPI-Corrbench" - replace['shortdesc'] = 'Point to point @{p2}@ has an invalid communicator' - replace['longdesc'] = 'MPI_COMM_NULL used in point to point @{p2}@' - replace['outcome'] = 'ERROR: InvalidCommunicator' - replace['errormsg'] = 'Invalid Communicator. @{p2}@ at @{filename}@:@{line:MBIERROR2}@ uses a null communicator.' - replace['change_com2'] = 'newcom = MPI_COMM_NULL;' - gen.make_file(template, f'InvalidParam_ComNull_{p2}_{p1}nok.c', replace) - - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{p2}@ has an invalid communicator' - replace['longdesc'] = 'MPI_COMM_NULL used in point to point @{p2}@' - replace['outcome'] = 'ERROR: InvalidCommunicator' - replace['errormsg'] = 'Invalid Communicator. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ uses a null communicator.' - replace['change_com1'] = 'newcom = MPI_COMM_NULL;' - replace['change_com2'] = "" - gen.make_file(template, f'InvalidParam_ComNull_{p1}_{p2}nok.c', replace) diff --git a/scripts/original_MBI_generators/P2PLocalConcurrencyGenerator.py b/scripts/original_MBI_generators/P2PLocalConcurrencyGenerator.py deleted file mode 100755 index 072817b5a56bb946a81eda0076af6edd36041a98..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PLocalConcurrencyGenerator.py +++ /dev/null @@ -1,127 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: @{persfeature}@ - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int dest=0, src=0; - int stag = 0, rtag = 0; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - - @{init1}@ - @{init2}@ - if (rank == 0) { - dest = 1; src = 1; - @{operation1}@ - @{start1}@ - @{write1}@ /* MBIERROR1 */ - @{fini1}@ - @{free1}@ - }else if (rank == 1){ - dest = 0; src = 0; - @{operation2}@ - @{start2}@ - @{write2}@ /* MBIERROR2 */ - @{fini2}@ - @{free2}@ - } - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for s in gen.send + gen.isend + gen.psend: - for r in gen.irecv + gen.precv + gen.recv: - patterns = {} - patterns = {'s': s, 'r': r} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if s in gen.send else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if r in gen.irecv else 'Lacking' - patterns['persfeature'] = 'Yes' if r in gen.precv else 'Lacking' - patterns['s'] = s - patterns['r'] = r - patterns['init1'] = gen.init[s]("1") - patterns['init2'] = gen.init[r]("2") - patterns['fini1'] = gen.fini[s]("1") - patterns['fini2'] = gen.fini[r]("2") - patterns['start1'] = gen.start[s]("1") - patterns['start2'] = gen.start[r]("2") - patterns['operation1'] = gen.operation[s]("1") - patterns['operation2'] = gen.operation[r]("2") - patterns['write1'] = gen.write[s]("1") - patterns['write2'] = gen.write[r]("2") - patterns['free1'] = gen.free[s]("1") - patterns['free2'] = gen.free[r]("2") - shortdesc = ' Local Concurrency with a P2P' - - # Generate a message race - if s in gen.send and r in gen.irecv + gen.precv: - replace = patterns.copy() - replace['shortdesc'] = shortdesc - replace['longdesc'] = f'The message buffer in {r} is modified before the call has been completed.' - replace['outcome'] = 'ERROR: LocalConcurrency' - replace['errormsg'] = 'Local Concurrency with a P2P. The receive buffer in @{r}@ is modified at @{filename}@:@{line:MBIERROR2}@ whereas there is no guarantee the message has been received.' - gen.make_file(template, f'LocalConcurrency_{r}_{s}_nok.c', replace) - if s in gen.isend + gen.psend and r in gen.recv: - replace = patterns.copy() - replace['shortdesc'] = shortdesc - replace['longdesc'] = f'The message buffer in {s} is modified before the call has been completed.' - replace['outcome'] = 'ERROR: LocalConcurrency' - replace['errormsg'] = 'Local Concurrency with a P2P. The send buffer in @{s}@ is modified at @{filename}@:@{line:MBIERROR1}@ whereas there is no guarantee the message has been sent.' - gen.make_file(template, f'LocalConcurrency_{r}_{s}_nok.c', replace) - if s in gen.isend + gen.psend and r in gen.irecv + gen.precv: - replace = patterns.copy() - replace['shortdesc'] = shortdesc - replace['longdesc'] = f'The message buffer in {s} and {r} are modified before the calls have completed.' - replace['outcome'] = 'ERROR: LocalConcurrency' - replace['errormsg'] = 'Local Concurrency with a P2P. The message buffers in @{s}@ and @{r}@ are modified at @{filename}@:@{line:MBIERROR1}@ and @{filename}@:@{line:MBIERROR2}@ whereas there is no guarantee the calls have been completed.' - gen.make_file(template, f'LocalConcurrency_{r}_{s}_nok.c', replace) diff --git a/scripts/original_MBI_generators/P2PMatchingANYSRCGenerator.py b/scripts/original_MBI_generators/P2PMatchingANYSRCGenerator.py deleted file mode 100755 index ce489af9cbd77a7106e948b76e0c9a3bf1367c0f..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PMatchingANYSRCGenerator.py +++ /dev/null @@ -1,108 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 4 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int src=MPI_ANY_SOURCE, dest=0; - int stag = 42, rtag = MPI_ANY_TAG; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - int send_buffer=rank; - - MPI_Datatype type = MPI_INT; - MPI_Comm newcom = MPI_COMM_WORLD; - - @{init1}@ - @{init2}@ - - if (rank == 0) { - for (int i = 0; i < nprocs - 1; i++) { - @{operation1}@ /* MBIERROR */ - @{fini1}@ - } - if (@{cond}@ != 3) { - printf("MBI_MSG_RACE: The last received message is not 3 but %d!\\n", buf1); - fflush(stdout); - abort(); - } - }else{ - @{operation2}@ - @{fini2}@ - } - - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for s in gen.send + gen.isend: - for r in gen.recv + gen.irecv: - patterns = {} - patterns = {'s': s, 'r': r} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['s'] = s - patterns['r'] = r - patterns['cond'] = 'buf1' - patterns['init2'] = gen.init[s]("2") - patterns['init1'] = gen.init[r]("1") - patterns['fini2'] = gen.fini[s]("2") - patterns['fini1'] = gen.fini[r]("1") - patterns['operation2'] = gen.operation[s]("2") - patterns['operation1'] = gen.operation[r]("1") - - # Generate the incorrect matching - replace = patterns.copy() - replace['shortdesc'] = 'The message ordering is non-deterministic.' - replace['longdesc'] = 'The code assumes a fixed order in the reception of messages while the message ordering is non-deterministic.' - replace['outcome'] = 'ERROR: MessageRace' - replace['errormsg'] = 'P2P message race which can cause a deadlock. @{r}@ at @{filename}@:@{line:MBIERROR}@ is called with ANY_SRC.' - gen.make_file(template, f'MessageRace_{r}_{s}_nok.c', replace) diff --git a/scripts/original_MBI_generators/P2PMatchingGenerator.py b/scripts/original_MBI_generators/P2PMatchingGenerator.py deleted file mode 100755 index a675d335cbada4d765090fff717efea34a6acf16..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PMatchingGenerator.py +++ /dev/null @@ -1,145 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: @{persfeature}@ - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define buff_size 1 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int its_raining = 0; - int src=0, dest=1; - int stag=0, rtag=0; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - - @{init1}@ - @{init2}@ - - if (rank == 0) { - @{operation1}@ /* MBIERROR1 */ - @{fini1}@ - }else if (@{change_cond}@){ - @{operation2}@ /* MBIERROR2 */ - @{fini2}@ - } - - @{free1}@ - @{free2}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for p in gen.send + gen.ssend + gen.bsend + gen.recv + gen.irecv + gen.isend: - patterns = {} - patterns = {'p': p} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if p in gen.send + gen.bsend + gen.ssend + gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if p in gen.isend + gen.irecv else 'Lacking' - patterns['persfeature'] = 'Lacking' - # patterns['persfeature'] = 'Yes' if p in gen.psend + gen.precv else 'Lacking' - patterns['p'] = p - patterns['init1'] = gen.init[p]("1") - patterns['init2'] = '' #gen.init[p2]("2") - patterns['fini1'] = gen.fini[p]("1") - patterns['fini2'] = '' #gen.fini[p2]("2") - patterns['free1'] = gen.free[p]("1") - patterns['free2'] = '' #gen.free[p]("2") - patterns['operation1'] = gen.operation[p]("1") - patterns['operation2'] = '' #gen.operation[p2]("2") - patterns['change_cond'] = 'rank == 1' - - # Generate the incorrect matching with one call - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{p}@ is not matched' - replace['longdesc'] = 'Process 0 calls @{p}@ and is not matched' - replace['outcome'] = 'ERROR: CallMatching' - replace['errormsg'] = 'P2P mistmatch. @{p}@ at @{filename}@:@{line:MBIERROR1}@ is not matched.' - gen.make_file(template, f'CallOrdering_{p}_nok.c', replace) - - # Generate the incorrect matching with two calls - replace = patterns.copy() - replace['shortdesc'] = 'Both point to point @{p}@ are not matched' - replace['longdesc'] = 'Processes 0 and 1 both call @{p}@ which are not matched' - replace['outcome'] = 'ERROR: CallMatching' - replace['errormsg'] = 'P2P mismatch. @{p}@ at @{filename}@:@{line:MBIERROR1}@ and @{p}@ at @{filename}@:@{line:MBIERROR2}@ are not matched.' - replace['operation2'] = gen.operation[p]("1") - replace['fini2'] = gen.fini[p]("1") - #replace['free2'] = gen.free[p]("2") - gen.make_file(template, f'CallOrdering_{p}_{p}_nok.c', replace) - -for s in gen.send + gen.isend + gen.ssend + gen.bsend: - for r in gen.recv + gen.irecv: - patterns = {} - patterns = {'s': s, 'r': r} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['persfeature'] = 'Lacking' - patterns['s'] = s - patterns['r'] = r - patterns['init1'] = gen.init[s]("1") - patterns['init2'] = gen.init[r]("2") - patterns['fini1'] = gen.fini[s]("1") - patterns['fini2'] = gen.fini[r]("2") - patterns['free1'] = gen.free[s]("1") - patterns['free2'] = gen.free[r]("2") - patterns['operation1'] = gen.operation[s]("1") - patterns['operation2'] = gen.operation[r]("2") - patterns['change_cond'] = '(rank == 1) && (its_raining)' - - # Generate the incorrect matching because of the conditional - replace = patterns.copy() - replace['shortdesc'] = 'Point to point @{r}@ is never called.' - replace['longdesc'] = 'Point to point @{r}@ is never executed. Process 1 calls MPI_Finalize and causes a deadlock.' - replace['outcome'] = 'ERROR: CallMatching' - replace['errormsg'] = 'P2P mistmatch. @{r}@ at @{filename}@:@{line:MBIERROR2}@ is never called because of the conditional (@{change_cond}@).' - replace['operation1'] = gen.operation[s]("1") - replace['operation2'] = gen.operation[r]("2") - gen.make_file(template, f'CallOrdering_{r}_{s}_nok.c', replace) diff --git a/scripts/original_MBI_generators/P2PMessageRaceGenerator.py b/scripts/original_MBI_generators/P2PMessageRaceGenerator.py deleted file mode 100644 index 8003d587824d2ff46a1befb82492cc862ee43c40..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PMessageRaceGenerator.py +++ /dev/null @@ -1,189 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 4 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 2 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int dest, src; - int i=0; - int root = 0; - int stag = 0, rtag = 0; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs != 4) - printf("MBI ERROR: This test needs 4 processes to produce a bug!\\n"); - - int dbs = sizeof(int)*nprocs; /* Size of the dynamic buffers for alltoall and friends */ - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - MPI_Op op = MPI_SUM; - - @{init0a}@ - @{init0b}@ - @{init0c}@ - @{init1a}@ - @{init1b}@ - @{init3a}@ - @{init3b}@ - @{init3c}@ - @{init3d}@ - - if (rank == 0) { - src = MPI_ANY_SOURCE; rtag = @{tag}@; - for (int i = 0; i < 2 * N; i++) { - @{operation0a}@ /* MBIERROR1 */ - @{fini0a}@ - } - src = 3; rtag = 0; - @{operation0b}@ /* MBIERROR2 */ - @{fini0b}@ - @{operation0c}@ - @{fini0c}@ - } else if (rank == 1 || rank == 2) { - dest = 0; stag = @{tag}@; - for (int i = 0; i < N; i++) { - @{operation1a}@ - @{fini1a}@ - } - dest = 3; stag = 0; - @{operation1b}@ - @{fini1b}@ - } else if (rank == 3) { - dest = 0; src = 1; rtag= 0; stag = 0; - @{operation3a}@ - @{fini3a}@ - @{operation3b}@ /* MBIERROR3 */ - @{fini3b}@ - src = 2; - @{operation3c}@ - @{fini3c}@ - @{operation3d}@ - @{fini3d}@ - } - - @{free0a}@ - @{free0b}@ - @{free0c}@ - @{free1a}@ - @{free1b}@ - @{free3a}@ - @{free3b}@ - @{free3c}@ - @{free3d}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -basedesc = 'We have 4 processes (p0, p1, p2 and p3). p1 and p2 send N messages to p0 and send a last message to p3. Process p0 recv 2*N messages from p1 and p2 using MPI_ANY_SOURCE and wait messages from p3. p3 wait a message from p1 and send message to p0, before doing the same for p2.' - -for s in gen.send + gen.isend: - for r in gen.recv + gen.irecv: - patterns = {} - patterns = {'s': s, 'r': r} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['s'] = s - patterns['r'] = r - - patterns['init0a'] = gen.init[r]("0a") - patterns['init0b'] = gen.init[r]("0b") - patterns['init0c'] = gen.init[r]("0c") - patterns['operation0a'] = gen.operation[r]("0a") - patterns['operation0b'] = gen.operation[r]("0b") - patterns['operation0c'] = gen.operation[r]("0c") - patterns['fini0a'] = gen.fini[r]("0a") - patterns['fini0b'] = gen.fini[r]("0b") - patterns['fini0c'] = gen.fini[r]("0c") - patterns['free0a'] = gen.free[r]("0a") - patterns['free0b'] = gen.free[r]("0b") - patterns['free0c'] = gen.free[r]("0c") - - patterns['init1a'] = gen.init[s]("1a") - patterns['init1b'] = gen.init[s]("1b") - patterns['operation1a'] = gen.operation[s]("1a") - patterns['operation1b'] = gen.operation[s]("1b") - patterns['fini1a'] = gen.fini[s]("1a") - patterns['fini1b'] = gen.fini[s]("1b") - patterns['free1a'] = gen.free[s]("1a") - patterns['free1b'] = gen.free[s]("1b") - - patterns['init3a'] = gen.init[r]("3a") - patterns['init3b'] = gen.init[s]("3b") - patterns['init3c'] = gen.init[r]("3c") - patterns['init3d'] = gen.init[s]("3d") - patterns['operation3a'] = gen.operation[r]("3a") - patterns['operation3b'] = gen.operation[s]("3b") - patterns['operation3c'] = gen.operation[r]("3c") - patterns['operation3d'] = gen.operation[s]("3d") - patterns['fini3a'] = gen.fini[r]("3a") - patterns['fini3b'] = gen.fini[s]("3b") - patterns['fini3c'] = gen.fini[r]("3c") - patterns['fini3d'] = gen.fini[s]("3d") - patterns['free3a'] = gen.free[r]("3a") - patterns['free3b'] = gen.free[s]("3b") - patterns['free3c'] = gen.free[r]("3c") - patterns['free3d'] = gen.free[s]("3d") - - patterns['tag'] = '1' - - # Generate the correct matching because of the conditional - replace = patterns.copy() - replace['shortdesc'] = 'Message race' - replace['longdesc'] = basedesc + ' In this file, different message tag are used to avoid involuntary message race.' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - gen.make_file(template, f'MessageRace_Loop_{s}_{r}_ok.c', replace) - - # Generate the incorrect matching because of the conditional - replace = patterns.copy() - replace['shortdesc'] = 'Message race' - replace['longdesc'] = basedesc + ' If the loop of p1 ending before the loop of p2, p0 could recv a message from process p3 into recv loop destined to message from p1 and p2. In this case, the program deadlock cause by message race at recv at line @{line:MBIERROR2}@.' - replace['outcome'] = 'ERROR: MessageRace' - replace['errormsg'] = 'Message race. The use of wildcard receive calls @{r}@ at @{filename}@:@{line:MBIERROR1}@ from @{r}@ at @{filename}@:@{line:MBIERROR3}@ and @{r}@ without wildcard at @{filename}@:@{line:MBIERROR2}@) leads to nondeterministic matching.' - replace['tag'] = '0' - gen.make_file(template, f'MessageRace_Loop_{s}_{r}_nok.c', replace) diff --git a/scripts/original_MBI_generators/P2PMessageRaceTagsGenerator.py b/scripts/original_MBI_generators/P2PMessageRaceTagsGenerator.py deleted file mode 100644 index 78e3e24e9697b3ff028ff3d08e36b902afe10b95..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PMessageRaceTagsGenerator.py +++ /dev/null @@ -1,161 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 3 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 10 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int dest, src; - int i=0; - int root = 0; - int stag = 0, rtag = 0; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 3) - printf("MBI ERROR: This test needs at least 3 processes to produce a bug!\\n"); - - int dbs = sizeof(int)*nprocs; /* Size of the dynamic buffers for alltoall and friends */ - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - MPI_Op op = MPI_SUM; - - @{init0}@ - @{init1a}@ - @{init1b}@ - @{init2}@ - - if (rank == 0) { - dest = 1; stag = 1; - @{operation0}@ - @{fini0}@ - } else if (rank == 1) { - src = MPI_ANY_SOURCE; - rtag = @{tag1}@; - @{operation1a}@ - @{fini1a}@ - rtag = @{tag2}@; - @{operation1b}@ @{tagerror}@ - @{fini1b}@ - } else if (rank == 2) { - dest = 1; stag = 2; - @{operation2}@ - @{fini2}@ - } - - @{free0}@ - @{free1a}@ - @{free1b}@ - @{free2}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -# To be correct, this benchmark must be use wildcard on second recv -# tag, or no wildcard on first recv tag and second recv tag must be -# different. -# -# |-----+-----+----+----| -# | x\y | ANY | 1 | 2 | -# |-----+-----+----+----| -# | ANY | OK | - | - | -# | 1 | OK | - | OK | -# | 2 | OK | OK | - | -# |-----+-----+----+----| - -for s in gen.send: - for r in gen.recv: - for x, y in [('MPI_ANY_TAG', 'MPI_ANY_TAG'), # OK - ('MPI_ANY_TAG', '1'), # NOK - ('1', 'MPI_ANY_TAG'), # OK - ('1', '2'), # OK - ('2', '2')]: # NOK - patterns = {} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['s'] = s - patterns['r'] = r - - patterns['tag1'] = x - patterns['tag2'] = y - - patterns['init0'] = gen.init[s]("0") - patterns['operation0'] = gen.operation[s]("0") - patterns['fini0'] = gen.fini[s]("0") - patterns['free0'] = gen.free[s]("0") - - patterns['init1a'] = gen.init[r]("1a") - patterns['init1b'] = gen.init[r]("1b") - patterns['operation1a'] = gen.operation[r]("1a") - patterns['operation1b'] = gen.operation[r]("1b") - patterns['fini1a'] = gen.fini[r]("1a") - patterns['fini1b'] = gen.fini[r]("1b") - patterns['free1a'] = gen.free[r]("1a") - patterns['free1b'] = gen.free[r]("1b") - - patterns['init2'] = gen.init[s]("2") - patterns['operation2'] = gen.operation[s]("2") - patterns['fini2'] = gen.fini[s]("2") - patterns['free2'] = gen.free[s]("2") - patterns['tagerror'] = '/* MBIERROR */' - - if y == 'MPI_ANY_TAG' or (x != 'MPI_ANY_TAG' and x != y): - # Generate the correct matching because of the conditional - replace = patterns.copy() - replace['shortdesc'] = 'Message race' - replace['longdesc'] = 'Correct code without message race.' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - replace['tagerror'] = '' - gen.make_file(template, f'MessageRace_tag_{x}_{y}_{s}_{r}_ok.c', replace) - else: - # Generate the incorrect matching because of the conditional - replace = patterns.copy() - replace['shortdesc'] = 'Message race' - replace['longdesc'] = 'Message race in @{r}@ with @{s}@.' - replace['outcome'] = 'ERROR: MessageRace' - replace['errormsg'] = 'Message race. The use of wildcard receive calls @{r}@ at @{filename}@:@{line:MBIERROR}@ and incorrect tag matching.' - gen.make_file(template, f'MessageRace_tag_{x}_{y}_{s}_{r}_nok.c', replace) diff --git a/scripts/original_MBI_generators/P2PProbeGenerator.py b/scripts/original_MBI_generators/P2PProbeGenerator.py deleted file mode 100755 index 917859c1b1154360904ff3f0992a7dc4a270f482..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PProbeGenerator.py +++ /dev/null @@ -1,148 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - MPI_Status sta; - int src,dest; - int stag=0, rtag=0; - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - - @{init1a}@ - @{init1b}@ - @{init1c}@ - @{init2a}@ - @{init2b}@ - @{init2c}@ - - if (rank == 0) { - dest=1, src=1; - @{operation1a}@ /* MBIERROR1 */ - @{operation1b}@ - @{operation1c}@ - @{fini1a}@ - @{fini1b}@ - @{fini1c}@ - }else if (rank == 1){ - dest=0, src=0; - @{operation2a}@ /* MBIERROR2 */ - @{operation2b}@ - @{operation2c}@ - @{fini2a}@ - @{fini2b}@ - @{fini2c}@ - } - @{free1a}@ - @{free1b}@ - @{free1c}@ - @{free2a}@ - @{free2b}@ - @{free2c}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for p in gen.probe: - for s in gen.send + gen.isend: - for r in gen.recv + gen.irecv: - patterns = {} - patterns = {'p':p, 's': s, 'r': r} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['s'] = s - patterns['r'] = r - patterns['p'] = p - patterns['init1a'] = gen.init[p]("1") - patterns['init1b'] = gen.init[s]("1") - patterns['init1c'] = gen.init[r]("2") - patterns['init2a'] = gen.init[p]("1") - patterns['init2b'] = gen.init[r]("3") - patterns['init2c'] = gen.init[s]("4") - patterns['fini1a'] = gen.fini[p]("1") - patterns['fini1b'] = gen.fini[s]("1") - patterns['fini1c'] = gen.fini[r]("2") - patterns['fini2a'] = gen.fini[p]("1") - patterns['fini2b'] = gen.fini[r]("3") - patterns['fini2c'] = gen.fini[s]("4") - patterns['free1a'] = gen.free[p]("1") - patterns['free1b'] = gen.free[s]("1") - patterns['free1c'] = gen.free[r]("2") - patterns['free2a'] = gen.free[p]("1") - patterns['free2b'] = gen.free[r]("3") - patterns['free2c'] = gen.free[s]("4") - patterns['operation1a'] = gen.operation[p]("1") - patterns['operation1b'] = gen.operation[s]("1") - patterns['operation1c'] = gen.operation[r]("2") - patterns['operation2a'] = gen.operation[p]("1") - patterns['operation2b'] = gen.operation[r]("3") - patterns['operation2c'] = gen.operation[s]("4") - - # Generate the incorrect matching - replace = patterns.copy() - replace['shortdesc'] = 'MPI_Probe is called before MPI_Recv.' - replace['longdesc'] = 'MPI_Probe is a blocking call that returns only after a matching message has been found. By calling MPI_Probe before MPI_Recv, a deadlock is created.' - replace['outcome'] = 'ERROR: CallMatching' - replace['errormsg'] = 'P2P mistmatch. @{p}@ at @{filename}@:@{line:MBIERROR1}@ and @{filename}@:@{line:MBIERROR2}@ are called before @{r}@.' - gen.make_file(template, f'CallOrdering_{p}_{r}_{s}_nok.c', replace) - - # Generate a correct matching - replace = patterns.copy() - replace['shortdesc'] = 'Correct use of MPI_Probe.' - replace['longdesc'] = 'Correct use of MPI_Probe.' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - replace['operation1a'] = gen.operation[s]("1") - replace['operation1b'] = gen.operation[p]("1") - gen.make_file(template, f'CallOrdering_{p}_{r}_{s}_ok.c', replace) diff --git a/scripts/original_MBI_generators/P2PSendrecvArgGenerator.py b/scripts/original_MBI_generators/P2PSendrecvArgGenerator.py deleted file mode 100644 index 8ed991fed7371ab311c601a74230c6e7424d604e..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/P2PSendrecvArgGenerator.py +++ /dev/null @@ -1,134 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: @{origin}@ - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: Yes - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 3 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 10 - -int main(int argc, char **argv) { - int nprocs = -1 , rank = -1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - if (nprocs < 3) - printf("MBI ERROR: This test needs at least 3 processes to produce a bug!\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - - int src = 0; int dest = 0; - int stag = 1; int rtag = 1; - int buff_size = N; - - @{init1}@ - @{init2}@ - @{init3}@ - - if (rank == 0) { - src = 1; - @{start1}@ - @{operation1}@ - @{fini1}@ - } else if (rank == 1) { - src = 2; dest = 0; - @{start2}@ - @{change_arg}@ - @{operation2}@ - @{fini2}@ - } else if (rank == 2) { - dest = 1; - @{start3}@ - @{operation3}@ - @{fini3}@ - } - - @{free1}@ - @{free2}@ - @{free3}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -for s in gen.send: - for r in gen.recv: - for sr in gen.sendrecv: - patterns = {} - patterns = {'s': s, 'r': r, 'sr': sr} - patterns['origin'] = "RTED" - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - - patterns['init1'] = gen.init[r]("1").replace("buf1=-1", "buf1[N]={-1}") - patterns['start1'] = gen.start[r]("1") - patterns['operation1'] = gen.operation[r]("1") - patterns['fini1'] = gen.fini[r]("1") - patterns['free1'] = gen.free[r]("1") - - patterns['init2'] = gen.init[sr]("2") - patterns['start2'] = gen.start[sr]("2") - patterns['operation2'] = gen.operation[sr]("2") - patterns['fini2'] = gen.fini[sr]("2") - patterns['free2'] = gen.free[sr]("2") - - patterns['init3'] = gen.init[s]("3").replace("buf3=rank", "buf3[N]={rank}") - patterns['start3'] = gen.start[s]("3") - patterns['operation3'] = gen.operation[s]("3") - patterns['fini3'] = gen.fini[s]("3") - patterns['free3'] = gen.free[s]("3") - - patterns['change_arg'] = '' - - # Generate a code with distinct buffer - replace = patterns.copy() - replace['origin'] = 'MBI' - replace['shortdesc'] = 'Correct usage of Sendrecv function.' - replace['longdesc'] = 'Correct usage of Sendrecv function.' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - gen.make_file(template, f'InvalidParam_Buffer_{s}_{sr}_{r}_ok.c', replace) - - # Generate a code with non distinct buffer - replace = patterns.copy() - replace['shortdesc'] = 'Invalid buffer on Sendrecv function.' - replace['longdesc'] = 'Invalid buffer on Sendrecv, the tow buffers must be distinct.' - replace['outcome'] = 'ERROR: InvalidBuffer' - replace['errormsg'] = '@{sr}@ at @{filename}@:@{line:MBIERROR}@ send buffer and recv buffer must be distinct.' - replace['change_arg'] = gen.write[sr]("2") - replace['operation2'] = gen.operation[sr]("2") + " /* MBIERROR */" - gen.make_file(template, f'InvalidParam_Buffer_{s}_{sr}_{r}_nok.c', replace) diff --git a/scripts/original_MBI_generators/RMAArgGenerator.py b/scripts/original_MBI_generators/RMAArgGenerator.py deleted file mode 100755 index 04cef56feb5208ccd030d57b4b76d2eab8325f71..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/RMAArgGenerator.py +++ /dev/null @@ -1,109 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: @{origin}@ - - Description: @{shortdesc}@ - @{longdesc}@ - - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: @{rmafeature}@ -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stddef.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 10 - -int main(int argc, char **argv) { - int rank, numProcs; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &numProcs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - int *winbuf = (int *)malloc(N * sizeof(int)); - - MPI_Win win; - MPI_Win_create(&winbuf, N * sizeof(int), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win); - - MPI_Datatype type = MPI_INT; - int target = (rank + 1) % numProcs; - - if(rank == 0){ - @{epoch}@ - @{change_arg}@ - @{init}@ - @{operation}@ /* MBIERROR2 */ - - @{finEpoch}@ - } else { - @{epoch}@ - - @{finEpoch}@ - } - - MPI_Win_free(&win); - - free(winbuf); - - MPI_Finalize(); - return 0; -} -""" - - -for e in gen.epoch: - for p in gen.rma: - patterns = {} - patterns = {'e': e, 'p': p} - patterns['origin'] = "MBI" - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - patterns['p'] = p - patterns['e'] = e - patterns['epoch'] = gen.epoch[e]("1") - patterns['finEpoch'] = gen.finEpoch[e]("1") - patterns['init'] = gen.init[p]("1") - patterns['operation'] = gen.operation[p]("1") - patterns['change_arg'] = "" - - # Generate a code with a null type - replace = patterns.copy() - replace['shortdesc'] = 'Invalid argument in one-sided operation.' - replace['longdesc'] = 'A one-sided operation has MPI_DATATYPE_NULL as a type.' - replace['outcome'] = 'ERROR: InvalidDatatype' - replace['change_arg'] = 'type = MPI_DATATYPE_NULL;' - replace['errormsg'] = '@{p}@ at @{filename}@:@{line:MBIERROR}@ has MPI_DATATYPE_NULL as a type' - gen.make_file(template, f'InvalidParam_BufferNullCond_{e}_{p}_nok.c', replace) - - # Generate a code with an invalid type - replace = patterns.copy() - replace['shortdesc'] = 'Invalid argument in one-sided operation.' - replace['longdesc'] = 'Use of an invalid datatype in one-sided operation.' - replace['outcome'] = 'ERROR: InvalidDatatype' - replace['change_arg'] = 'MPI_Type_contiguous (2, MPI_INT, &type); MPI_Type_commit(&type);MPI_Type_free(&type); /* MBIERROR2 */' - replace['errormsg'] = 'Invalid Datatype in @{p}@ at @{filename}@:@{line:MBIERROR}@' - gen.make_file(template, f'InvalidParam_DatatypeCond_{e}_{p}_nok.c', replace) diff --git a/scripts/original_MBI_generators/RMAInvalidArgGenerator.py b/scripts/original_MBI_generators/RMAInvalidArgGenerator.py deleted file mode 100755 index 2ba7cf9adde25b691a8a0a49dc5a88d78596eebb..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/RMAInvalidArgGenerator.py +++ /dev/null @@ -1,134 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: @{origin}@ - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: @{rmafeature}@ -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 10 - -int main(int argc, char **argv) { - int nprocs = -1 , rank = -1; - MPI_Win win; - int *winbuf = (int *)@{malloc}@ // Window buffer - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Datatype type = MPI_INT; - int target = (rank + 1) % nprocs; - - MPI_Win_create(winbuf, N * sizeof(int), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win); - - - @{epoch}@ - - @{init}@ - @{change_arg}@ - @{operation}@ /* MBIERROR */ - - @{finEpoch}@ - - MPI_Win_free(&win); - free(winbuf); - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for e in gen.epoch: - for p in gen.rma: - patterns = {} - patterns = {'e': e, 'p': p} - patterns['origin'] = "MBI" - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - patterns['p'] = p - patterns['e'] = e - patterns['epoch'] = gen.epoch[e]("1") - patterns['finEpoch'] = gen.finEpoch[e]("1") - patterns['init'] = gen.init[p]("1") - patterns['operation'] = gen.operation[p]("1") - patterns['change_arg'] = "" - patterns['malloc'] = "malloc(N * sizeof(int));" - - # Generate a code with a null type - replace = patterns.copy() - replace['shortdesc'] = 'Invalid argument in one-sided operation.' - replace['longdesc'] = 'A one-sided operation has MPI_DATATYPE_NULL as a type.' - replace['outcome'] = 'ERROR: InvalidDatatype' - replace['change_arg'] = 'type = MPI_DATATYPE_NULL;' - replace['errormsg'] = '@{p}@ at @{filename}@:@{line:MBIERROR}@ has MPI_DATATYPE_NULL as a type' - gen.make_file(template, f'InvalidParam_DatatypeNull_{e}_{p}_nok.c', replace) - - # Generate a code with a null buffer (move to RMAWinBufferGenerator) - # replace = patterns.copy() - # replace['origin'] = 'MPI-Corrbench' - # replace['shortdesc'] = 'nullptr is invalid in one-sided operation.' - # replace['longdesc'] = 'A one-sided operation has an invalid buffer.' - # replace['outcome'] = 'ERROR: InvalidBuffer' - # replace['init'] = 'int * localbuf1 = (int *)malloc(sizeof(int));' - # replace['change_arg'] = 'localbuf1 = NULL;' - # replace['operation'] = gen.operation[p]("1").replace('&localbuf1', 'localbuf1') - # replace['errormsg'] = '@{p}@ at @{filename}@:@{line:MBIERROR}@ has an invalid buffer' - # gen.make_file(template, f'InvalidParam_BufferNull_{e}_{p}_nok.c', replace) - - # Generate a code with an invalid type - replace = patterns.copy() - replace['origin'] = 'MBI' - replace['shortdesc'] = 'Invalid argument in one-sided operation.' - replace['longdesc'] = 'Use of an invalid datatype in one-sided operation.' - replace['outcome'] = 'ERROR: InvalidDatatype' - replace['change_arg'] = 'MPI_Type_contiguous (2, MPI_INT, &type); MPI_Type_commit(&type);MPI_Type_free(&type); /* MBIERROR2 */' - replace['errormsg'] = 'Invalid Datatype in @{p}@ at @{filename}@:@{line:MBIERROR}@' - gen.make_file(template, f'InvalidParam_Datatype_{e}_{p}_nok.c', replace) - - # Generate a code with invalid buffer - replace = patterns.copy() - patterns['origin'] = "MPI-Corrbench" - replace['shortdesc'] = 'Invalid invalid buffer (buffer must be allocated)' - replace['longdesc'] = 'Use of an invalid buffer in MPI_Win_create.' - replace['outcome'] = 'ERROR: InvalidBuffer' - replace['malloc'] = "NULL; /* MBIERROR2 */" - replace['init'] = "" - replace['operation'] = "" - replace['change_arg'] = "" - replace['errormsg'] = 'Invalid buffer in Win_create at @{filename}@:@{line:MBIERROR2}@' - gen.make_file(template, f'InvalidParam_InvalidBufferWinCreate_{e}_{p}_nok.c', replace) diff --git a/scripts/original_MBI_generators/RMALocalLocalConcurrencyGenerator.py b/scripts/original_MBI_generators/RMALocalLocalConcurrencyGenerator.py deleted file mode 100755 index 37c8c052e9115e053256553106aa37919e7e1ef6..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/RMALocalLocalConcurrencyGenerator.py +++ /dev/null @@ -1,184 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 2, requires MPI 3 implementation (for lock_all/unlock_all epochs) - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: @{rmafeature}@ -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 1 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - MPI_Win win; - int winbuf[100] = {0}; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Datatype type = MPI_INT; - int target = 1; - - MPI_Win_create(&winbuf, 100 * sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win); - - winbuf[0] = 12345; - @{init1}@ - - @{epoch}@ - - if (rank == 0) { - @{operation1}@ /* MBIERROR1 */ - @{syncEpoch}@ - @{operation2}@ /* MBIERROR2 */ - } - - @{finEpoch}@ - - MPI_Win_free(&win); - - MPI_Finalize(); - return 0; -} -""" - - -for e in gen.epoch: - for p1 in gen.get: - for p2 in gen.put + gen.store + gen.load + gen.get + gen.loadstore: - patterns = {} - patterns = {'e': e, 'p1': p1, 'p2': p2} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - patterns['p1'] = p1 - patterns['p2'] = p2 - patterns['e'] = e - patterns['epoch'] = gen.epoch[e]("1") - patterns['finEpoch'] = gen.finEpoch[e]("1") - patterns['syncEpoch'] = '' - patterns['init1'] = gen.init[p1]("1") - patterns['operation1'] = gen.operation[p1]("1") - patterns['operation2'] = gen.operation[p2]("1") - shortdesc_rma = 'Correct code using RMA operations' - - # Generate a data race (Get + Get/load/store/Put) - replace = patterns.copy() - replace['shortdesc'] = 'Local Concurrency error.' - replace['longdesc'] = 'Local Concurrency error. @{p2}@ conflicts with @{p1}@' - replace['outcome'] = 'ERROR: LocalConcurrency' - replace['errormsg'] = 'Local Concurrency error. @{p2}@ at @{filename}@:@{line:MBIERROR2}@ conflicts with @{p1}@ line @{line:MBIERROR1}@' - gen.make_file(template, f'LocalConcurrency_lloutwindow_{e}_{p1}_{p2}_nok.c', replace) - # Generate a correct code by switching operation1 and operation2 - if p2 in gen.store + gen.load + gen.loadstore: - replace = patterns.copy() - replace['shortdesc'] = shortdesc_rma - replace['longdesc'] = shortdesc_rma - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - replace['operation1'] = gen.operation[p2]("1") - replace['operation2'] = gen.operation[p1]("1") - gen.make_file(template, f'LocalConcurrency_lloutwindow_{e}_{p2}_{p1}_ok.c', replace) - # Generate a correct code by synchronizing operation1 and operation2 - replace = patterns.copy() - replace['shortdesc'] = shortdesc_rma - replace['longdesc'] = shortdesc_rma - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - replace['syncEpoch'] = gen.syncEpoch[e]("1") - gen.make_file(template, f'LocalConcurrency_lloutwindow_{e}_{p1}_{p2}_ok.c', replace) - # Generate a correct code by removing operation2 - replace = patterns.copy() - replace['shortdesc'] = shortdesc_rma - replace['longdesc'] = shortdesc_rma - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - replace['operation1'] = gen.operation[p1]("1") - replace['operation2'] = '' - gen.make_file(template, f'LocalConcurrency_{e}_{p1}_ok.c', replace) - - -for e in gen.epoch: - for p1 in gen.put: - for p2 in gen.store: - patterns = {} - patterns = {'e': e, 'p1': p1, 'p2': p2} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - patterns['p1'] = p1 - patterns['p2'] = p2 - patterns['e'] = e - patterns['epoch'] = gen.epoch[e]("1") - patterns['finEpoch'] = gen.finEpoch[e]("1") - patterns['syncEpoch'] = '' - patterns['init1'] = gen.init[p1]("1") - patterns['operation1'] = gen.operation[p1]("1") - patterns['operation2'] = gen.operation[p2]("1") - - # Generate a data race (Put + store) - replace = patterns.copy() - replace['shortdesc'] = 'Local Concurrency error.' - replace['longdesc'] = 'Local Concurrency error. @{p2}@ conflicts with @{p1}@' - replace['outcome'] = 'ERROR: LocalConcurrency' - replace['errormsg'] = 'Local Concurrency error. @{p2}@ at @{filename}@:@{line:MBIERROR2}@ conflicts with @{p1}@ line @{line:MBIERROR1}@' - gen.make_file(template, f'LocalConcurrency_lloutwindow_{e}_{p1}_{p2}_nok.c', replace) - # Generate a correct code by adding a synchronization between operation1 and operation2 - replace = patterns.copy() - replace['shortdesc'] = shortdesc_rma - replace['longdesc'] = shortdesc_rma - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - replace['syncEpoch'] = gen.syncEpoch[e]("1") - gen.make_file(template, f'LocalConcurrency_lloutwindow_{e}_{p1}_{p2}_ok.c', replace) - # Generate a correct code by switching operation1 and operation2 - replace = patterns.copy() - replace['shortdesc'] = shortdesc_rma - replace['longdesc'] = shortdesc_rma - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - replace['operation1'] = gen.operation[p2]("1") - replace['operation2'] = gen.operation[p1]("1") - gen.make_file(template, f'LocalConcurrency_lloutwindow_{e}_{p2}_{p1}_ok.c', replace) - - # Generate a correct code by removing operation2 - replace = patterns.copy() - replace['shortdesc'] = shortdesc_rma - replace['longdesc'] = shortdesc_rma - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - replace['operation1'] = gen.operation[p1]("1") - replace['operation2'] = '' - gen.make_file(template, f'LocalConcurrency_{e}_{p1}_ok.c', replace) diff --git a/scripts/original_MBI_generators/RMAP2PGlobalConcurrencyGenerator.py b/scripts/original_MBI_generators/RMAP2PGlobalConcurrencyGenerator.py deleted file mode 100755 index a6723fac19c10c4ac7f7162f3858620bdffb7e57..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/RMAP2PGlobalConcurrencyGenerator.py +++ /dev/null @@ -1,121 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 2, does not require MPI 3 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: @{rmafeature}@ -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 4 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 1 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - MPI_Win win; - int * winbuf = (int *)malloc(N * sizeof(int)); // Window buffer - int buff_size = 1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 4) - printf("MBI ERROR: This test needs at least 4 processes to produce a bug!\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - int stag=0, rtag=0; - winbuf[0] = nprocs; - - MPI_Win_create(winbuf, N*sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win); - - - @{init1}@ - @{init2}@ - @{init3}@ - - if (rank == 0) { - int target=1; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 1, 0, win); - @{operation1}@ - localbuf1[0] = 12345; /* MBIERROR1 */ - MPI_Win_unlock(1, win); - }else if (rank == 2){ - int dest=1; - @{operation2}@ - @{fini2}@ - }else if (rank == 1){ - int src=2; - buf3 = winbuf[0]; - @{operation3}@ - winbuf[0] = buf3; /* MBIERROR2 */ - @{fini3}@ - } - - MPI_Win_free(&win); - free(winbuf); - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for p in gen.put + gen.get: - for s in gen.send + gen.isend: - for r in gen.recv + gen.irecv: - patterns = {} - patterns = {'p': p, 's': s, 'r': r} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['p'] = p - patterns['s'] = s - patterns['r'] = r - patterns['init1'] = gen.init[p]("1") - patterns['init2'] = gen.init[s]("2") - patterns['init3'] = gen.init[r]("3") - patterns['fini2'] = gen.fini[s]("2") - patterns['fini3'] = gen.fini[r]("3") - patterns['operation1'] = gen.operation[p]("1") #put or get - patterns['operation2'] = gen.operation[s]("2") #send - patterns['operation3'] = gen.operation[r]("3") #recv - - replace = patterns.copy() - replace['shortdesc'] = 'Global Concurrency error.' - replace['longdesc'] = 'Global Concurrency error. Concurrent access of variable winbuf by @{p}@ and @{r}@' - replace['outcome'] = 'ERROR: GlobalConcurrency' - replace['errormsg'] = 'Global Concurrency error. @{p}@ at @{filename}@:@{line:MBIERROR1}@ accesses the window of process 1. Process 1 receives data from process 2 and uses variable winbuf. winbuf in process 1 is then nondeterministic.' - gen.make_file(template, f'GlobalConcurrency_{p}_{s}_{r}_nok.c', replace) diff --git a/scripts/original_MBI_generators/RMAP2PLocalConcurrencyGenerator.py b/scripts/original_MBI_generators/RMAP2PLocalConcurrencyGenerator.py deleted file mode 100644 index 0f9f92e1f4c23fd87a971460e127f0e603df9452..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/RMAP2PLocalConcurrencyGenerator.py +++ /dev/null @@ -1,134 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: @{origin}@ - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 2, does not require MPI 3 implementation - -BEGIN_MPI_FEATURES - P2P!basic: @{p2pfeature}@ - P2P!nonblocking: @{ip2pfeature}@ - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: @{rmafeature}@ -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 3 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 1 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - MPI_Win win; - int * winbuf = (int *)malloc(N * sizeof(int)); // Window buffer - int buff_size = N; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 3) - printf("MBI ERROR: This test needs at least 3 processes to produce a bug!\\n"); - - MPI_Comm newcom = MPI_COMM_WORLD; - MPI_Datatype type = MPI_INT; - int stag=0, rtag=0; - winbuf[0] = nprocs; - - MPI_Win_create(winbuf, N*sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win); - - - @{init1}@ - @{init2}@ - @{init3}@ - - @{comment_fence}@MPI_Win_fence(0, win); - - if (rank == 0) { - int target=1, dest=2; - - @{comment_lock}@MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 1, 0, win); - @{operation1}@ - @{operation2}@ /* MBIERROR */ - @{comment_lock}@MPI_Win_unlock(1, win); - - @{fini2}@ - }else if (rank == 2){ - int src=0; - @{operation3}@ - @{fini3}@ - } - - @{comment_fence}@MPI_Win_fence(0, win); - - MPI_Win_free(&win); - free(winbuf); - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for p in gen.get: - for s in gen.send + gen.isend: - for r in gen.recv + gen.irecv: - patterns = {} - patterns = {'p': p, 's': s, 'r': r} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['origin'] = 'RTED' - patterns['shortdesc'] = 'Local Concurrency error.' - patterns['longdesc'] = 'Local Concurrency error. Concurrent access of variable localbuf1 by @{p}@ (write) and @{s}@ (read)' - patterns['rmafeature'] = 'Yes' - patterns['p2pfeature'] = 'Yes' if s in gen.send or r in gen.recv else 'Lacking' - patterns['ip2pfeature'] = 'Yes' if s in gen.isend or r in gen.irecv else 'Lacking' - patterns['p'] = p - patterns['s'] = s - patterns['r'] = r - patterns['init1'] = gen.init[p]("1") - patterns['init2'] = gen.init[s]("2") - patterns['init3'] = gen.init[r]("3") - patterns['fini2'] = gen.fini[s]("2") - patterns['fini3'] = gen.fini[r]("3") - patterns['operation1'] = gen.operation[p]("1") - patterns['operation2'] = gen.operation[s]("2").replace("buf2", "localbuf1") - patterns['operation3'] = gen.operation[r]("3") - patterns['comment_lock'] = '' - patterns['comment_fence'] = '' - - # Use fence epoch - replace = patterns.copy() - replace['outcome'] = 'ERROR: LocalConcurrency' - replace['errormsg'] = 'Local Concurrency error. @{p}@ at @{filename}@:@{line:MBIERROR}@ .' - replace['comment_lock'] = '// ' - gen.make_file(template, f'LocalConcurrency_fence_{p}_{s}_{r}_nok.c', replace) - - # Use lock epoch - replace = patterns.copy() - replace['outcome'] = 'ERROR: LocalConcurrency' - replace['errormsg'] = 'Local Concurrency error. @{p}@ at @{filename}@:@{line:MBIERROR}@ .' - replace['comment_fence'] = '// ' - gen.make_file(template, f'LocalConcurrency_lock_{p}_{s}_{r}_nok.c', replace) diff --git a/scripts/original_MBI_generators/RMARemoteLocalConcurrencyGenerator.py b/scripts/original_MBI_generators/RMARemoteLocalConcurrencyGenerator.py deleted file mode 100755 index 3b1ef07ebe4f64cac2dfd1d399998d9f4e341b45..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/RMARemoteLocalConcurrencyGenerator.py +++ /dev/null @@ -1,165 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 2, requires MPI 3 implementation (for lock_all/unlock_all epochs) - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: @{rmafeature}@ -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 10 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - MPI_Win win; - int winbuf[100] = {0}; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Datatype type = MPI_INT; - int target = 1 - rank; - - MPI_Win_create(&winbuf, 100 * sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win); - - @{init1}@ - @{init2}@ - - @{epoch}@ - - if (rank == 0) { - @{operation1}@ /* MBIERROR1 */ - } - if(rank == 1){ - @{operation2}@ /* MBIERROR2 */ - } - - @{finEpoch}@ - - MPI_Win_free(&win); - - MPI_Finalize(); - return 0; -} -""" - - -for e in gen.epoch: - for p1 in gen.get: - for p2 in gen.put + gen.rstore + gen.rload + gen.get : - patterns = {} - patterns = {'e': e, 'p1': p1, 'p2': p2} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - patterns['p1'] = p1 - patterns['p2'] = p2 - patterns['e'] = e - patterns['epoch'] = gen.epoch[e]("1") - patterns['finEpoch'] = gen.finEpoch[e]("1") - patterns['init1'] = gen.init[p1]("1") - patterns['operation1'] = 'MPI_Get(&winbuf[5], N, MPI_INT, target, 5, N, type, win);' - patterns['init2'] = gen.init[p2]("2") - patterns['operation2'] = gen.operation[p2]("2") - - # Generate a data race (Get + Get/load/store/Put) - replace = patterns.copy() - replace['shortdesc'] = 'Global Concurrency error.' - replace['longdesc'] = 'Global Concurrency error. @{p2}@ conflicts with @{p1}@' - replace['outcome'] = 'ERROR: GlobalConcurrency' - replace['errormsg'] = 'Global Concurrency error. @{p2}@ at @{filename}@:@{line:MBIERROR2}@ conflicts with @{p1}@ line @{line:MBIERROR1}@' - - # Replace Put and Get first argument - if p2 in gen.put: - replace['operation2'] = 'MPI_Put(&localbuf1, N, MPI_INT, target, 5, N, type, win);' - replace['outcome'] = 'ERROR: GlobalConcurrency' - replace['errormsg'] = 'Global Concurrency error. @{p2}@ at @{filename}@:@{line:MBIERROR2}@ conflicts with @{p1}@ line @{line:MBIERROR1}@' - gen.make_file(template, f'GlobalConcurrency_rl_{e}_{p1}_{p2}_nok.c', replace) - replace['operation1'] = gen.operation[p1]("1") - replace['operation2'] = 'MPI_Put(&localbuf1, N, MPI_INT, target, 0, N, type, win);' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - gen.make_file(template, f'GlobalConcurrency_rl_{e}_{p1}_{p2}_ok.c', replace) - else: - if p2 in gen.get: - replace['operation2'] = 'MPI_Get(&winbuf[5], N, MPI_INT, target, 0, N, type, win);' - replace['shortdesc'] = 'No error' - replace['longdesc'] = '' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - elif p2 in gen.rload: - replace['shortdesc'] = 'No error' - replace['longdesc'] = '' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - - ok = 'ok' if replace['outcome'] == 'OK' else 'nok' - gen.make_file(template, f'GlobalConcurrency_rl_{e}_{p1}_{p2}_{ok}.c', replace) - - -for e in gen.epoch: - for p1 in gen.put: - for p2 in gen.rstore + gen.rload + gen.put + gen.get: - patterns = {} - patterns = {'e': e, 'p1': p1, 'p2': p2} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - patterns['p1'] = p1 - patterns['p2'] = p2 - patterns['e'] = e - patterns['epoch'] = gen.epoch[e]("1") - patterns['finEpoch'] = gen.finEpoch[e]("1") - patterns['init1'] = gen.init[p1]("1") - patterns['operation1'] = gen.operation[p1]("1") - patterns['init2'] = gen.init[p2]("2") - patterns['operation2'] = gen.operation[p2]("2") - - # Generate a data race (Put + store) - replace = patterns.copy() - replace['shortdesc'] = 'Global Concurrency error.' - replace['longdesc'] = 'Global Concurrency error. @{p2}@ conflicts with @{p1}@' - replace['outcome'] = 'ERROR: GlobalConcurrency' - replace['errormsg'] = 'Global Concurrency error. @{p2}@ at @{filename}@:@{line:MBIERROR2}@ conflicts with @{p1}@ line @{line:MBIERROR1}@' - - # Replace Put/Get first argument - if p2 in gen.put: - replace['operation1'] = 'MPI_Put(&localbuf1, N, MPI_INT, target, 5, N, type, win);' - replace['operation2'] = 'MPI_Put(&winbuf[5], N, MPI_INT, target, 0, N, type, win);' - elif p2 in gen.get: - replace['operation1'] = 'MPI_Put(&localbuf1, N, MPI_INT, target, 5, N, type, win);' - replace['operation2'] = 'MPI_Get(&winbuf[5], N, MPI_INT, target, 0, N, type, win);' - - gen.make_file(template, f'GlobalConcurrency_rl_{e}_{p1}_{p2}_nok.c', replace) diff --git a/scripts/original_MBI_generators/RMARemoteRemoteConcurrencyGenerator.py b/scripts/original_MBI_generators/RMARemoteRemoteConcurrencyGenerator.py deleted file mode 100755 index 9361187b4154e97a4fa4e740f68719fa1e95e4c6..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/RMARemoteRemoteConcurrencyGenerator.py +++ /dev/null @@ -1,104 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 2, requires MPI 3 implementation (for lock_all/unlock_all epochs) - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: @{rmafeature}@ -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 3 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 1 - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - MPI_Win win; - int winbuf[100] = {0}; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Datatype type = MPI_INT; - int target = 1; - - MPI_Win_create(&winbuf, 100 * sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win); - - @{init1}@ - @{init2}@ - - @{epoch}@ - - if (rank == 0) { - @{operation1}@ /* MBIERROR1 */ - } - else if (rank == 2) { - @{operation2}@ /* MBIERROR2 */ - } - - @{finEpoch}@ - - MPI_Win_free(&win); - - MPI_Finalize(); - return 0; -} -""" - - -for e in gen.epoch: - for p1 in gen.get + gen.put: - for p2 in gen.put: - patterns = {} - patterns = {'e': e, 'p1': p1, 'p2': p2} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - patterns['p1'] = p1 - patterns['p2'] = p2 - patterns['e'] = e - patterns['epoch'] = gen.epoch[e]("1") - patterns['finEpoch'] = gen.finEpoch[e]("1") - patterns['init1'] = gen.init[p1]("1") - patterns['operation1'] = gen.operation[p1]("1") - patterns['init2'] = gen.init[p2]("2") - patterns['operation2'] = gen.operation[p2]("2") - - # Generate a data race - replace = patterns.copy() - replace['shortdesc'] = 'Global Concurrency error.' - replace['longdesc'] = 'Global Concurrency error. Both processes 0 and 2 access the window in process 1 with @{p1}@' - replace['outcome'] = 'ERROR: GlobalConcurrency' - replace['errormsg'] = 'Global Concurrency error. @{p1}@ at @{filename}@:@{line:MBIERROR1}@ and @{p2}@ at @{filename}@:@{line:MBIERROR2}@ conflicts in process 1' - gen.make_file(template, f'GlobalConcurrency_rr_{e}_{p1}_{p2}_nok.c', replace) diff --git a/scripts/original_MBI_generators/RMAReqLifecycleGenerator.py b/scripts/original_MBI_generators/RMAReqLifecycleGenerator.py deleted file mode 100755 index 82ee3fd99d4fcd35363f01c5bb18e6320e3de7f7..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/RMAReqLifecycleGenerator.py +++ /dev/null @@ -1,150 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: @{origin}@ - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: @{rmafeature}@ -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 20 - -int main(int argc, char **argv) { - int rank, numProcs; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &numProcs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - if (numProcs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - int *winbuf = (int *)malloc(N * sizeof(int)); - - MPI_Win win; - MPI_Win_create(winbuf, N * sizeof(int), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win); - - MPI_Datatype type = MPI_INT; - int target = 1; - - @{epoch}@ - - if (rank == 0) { - @{epoch2}@ - - @{init}@ - @{operation}@ - - @{finEpoch2}@ - } - - @{finEpoch}@ - - MPI_Win_free(&win); - - free(winbuf); - - MPI_Finalize(); - - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - - -for e1 in gen.epoch: - for p in gen.rma: - patterns = {} - patterns = {'e1': e1, 'p': p} - patterns['origin'] = "MPI-Corrbench" - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - patterns['p'] = p - patterns['e1'] = e1 - patterns['epoch'] = gen.epoch[e1]("1") - patterns['finEpoch'] = gen.finEpoch[e1]("1") - patterns['epoch2'] = "" - patterns['finEpoch2'] = "" - patterns['init'] = gen.init[p]("1") - patterns['operation'] = gen.operation[p]("1") - - # Generate a code correct - replace = patterns.copy() - replace['shortdesc'] = 'Correct code' - replace['longdesc'] = 'Correct code' - replace['outcome'] = 'OK' - replace['errormsg'] = 'OK' - gen.make_file(template, f'EpochLifecycle_RMA_{e1}_{p}_ok.c', replace) - - # Generate a code with missing open epoch - replace = patterns.copy() - replace['shortdesc'] = f"Request lifecycle, missing open {e1} epoch" - replace['longdesc'] = f"Request lifecycle, missing open {e1} epoch" - replace['outcome'] = 'ERROR: MissingEpoch' - replace['errormsg'] = '@{e1}@ at @{filename}@:@{line:MBIERROR}@ has missing' - replace['epoch'] = f"/* MBIERROR MISSING: {gen.epoch[e1]('1')} */" - gen.make_file(template, f'EpochLifecycle_RMA_MissingOpen_{e1}_{p}_nok.c', replace) - - # Generate a code with missing close epoch - replace = patterns.copy() - replace['shortdesc'] = f"Request lifecycle, missing close {e1} epoch" - replace['longdesc'] = f"Request lifecycle, missing close {e1} epoch" - replace['outcome'] = 'ERROR: MissingEpoch' - replace['errormsg'] = '@{e1}@ at @{filename}@:@{line:MBIERROR}@ has missing' - replace['epoch'] = gen.epoch[e1]("1") - replace['finEpoch'] = f"/* MBIERROR MISSING: {gen.finEpoch[e1]('1')} */" - gen.make_file(template, f'EpochLifecycle_RMA_MissingClose_{e1}_{p}_nok.c', replace) - -for e1 in gen.epoch: - for e2 in gen.epoch: - for p in gen.rma: - patterns = {} - patterns = {'e1': e1, 'e2': e2, 'p': p} - patterns['origin'] = "MPI-Corrbench" - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - patterns['p'] = p - patterns['e1'] = e1 - patterns['e2'] = e2 - patterns['epoch'] = gen.epoch[e1]("1") - patterns['finEpoch'] = gen.finEpoch[e1]("1") - patterns['epoch2'] = gen.epoch[e2]("1") + " /* MBIERROR */" - patterns['finEpoch2'] = gen.finEpoch[e2]("1") + " /* MBIERROR */" - patterns['init'] = gen.init[p]("1") - patterns['operation'] = gen.operation[p]("1") - - # Generate a code with epoch into an epoch - replace = patterns.copy() - replace['shortdesc'] = f"Request lifecycle, {e2} epoch into {e1} epoch" - replace['longdesc'] = f"Request lifecycle, {e2} epoch into {e1} epoch" - replace['outcome'] = 'ERROR: DoubleEpoch' - replace['errormsg'] = '@{e2}@ at @{filename}@:@{line:MBIERROR}@ has in an other epoch' - gen.make_file(template, f'EpochLifecycle_RMA_doubleEpoch_{e1}_{e2}_{p}_nok.c', replace) diff --git a/scripts/original_MBI_generators/RMAWinBufferGenerator.py b/scripts/original_MBI_generators/RMAWinBufferGenerator.py deleted file mode 100755 index 8ad4a4f501460d92786055a8f3cd102fc157785d..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/RMAWinBufferGenerator.py +++ /dev/null @@ -1,121 +0,0 @@ -#! /usr/bin/python3 -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: @{origin}@ - - Description: @{shortdesc}@ - @{longdesc}@ - - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: Lacking - RMA: @{rmafeature}@ -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stddef.h> -#include <stdio.h> -#include <stdlib.h> - -#define N 10 - -int * buffer; - -static void get_win(MPI_Win *win) { - @{bufferalloc}@ - - MPI_Win_create(@{buffer}@, N * sizeof(int), 1, MPI_INFO_NULL, MPI_COMM_WORLD, win); - - return; -} - -int main(int argc, char *argv[]) { - int rank, numProcs; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &numProcs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (numProcs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - MPI_Win win; - - get_win(&win); - - MPI_Win_fence(0, win); - - if (rank == 0) { - int localbuf[N] = {12345}; - MPI_Put(&localbuf, N, MPI_INT, 1, 0, N, MPI_INT, win); - } - - MPI_Win_fence(0, win); - - MPI_Win_free(&win); - - @{bufferfree}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} - -""" - - -for b in ['missing', 'null', 'malloc', 'bufferSize']: - patterns = {} - patterns = {'b': b} - patterns['origin'] = "MPI-CorrBench" - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['rmafeature'] = 'Yes' - - replace = patterns.copy() - replace['shortdesc'] = 'Invalid buffer in window creation.' - replace['longdesc'] = 'Invalid buffer in window creation.' - replace['outcome'] = 'ERROR: InvalidBuffer' - replace['errormsg'] = '@{b}@ at @{filename}@:@{line:MBIERROR}@ has an invalid buffer' - replace['bufferfree'] = '' - - ok = 'nok' - replace['buffer'] = 'buffer' - - if b == 'missing': - replace['bufferalloc'] = '/* MBIERROR1 */' - replace['longdesc'] = 'Uninitialized buffer in window creation.' - elif b == 'null': - replace['bufferalloc'] = 'buffer = NULL; /* MBIERROR1 */' - replace['longdesc'] = 'Use NULL buffer in window creation.' - elif b == 'bufferSize': - replace['bufferalloc'] = 'buffer = (int *)malloc((N/2) * sizeof(int)); /* MBIERROR1 */' - replace['bufferfree'] = 'free(buffer);' - replace['longdesc'] = 'Unmatched size of buffer in window creation.' - else: - replace['bufferalloc'] = 'buffer = (int *)malloc(N * sizeof(int));' - replace['bufferfree'] = 'free(buffer);' - replace['longdesc'] = 'Correct initialized buffer in window creation.' - replace['outcome'] = 'OK' - replace['errormsg'] = '' - ok = 'ok' - - gen.make_file(template, f'InvalidParam_WinBuffer_{b}_{ok}.c', replace) diff --git a/scripts/original_MBI_generators/ResleakGenerator.py b/scripts/original_MBI_generators/ResleakGenerator.py deleted file mode 100755 index c33d1978fb38fc8c040fec7770f1422ee7a52a01..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/ResleakGenerator.py +++ /dev/null @@ -1,126 +0,0 @@ -#! /usr/bin/python3 - -# Copyright 2021-2022. The MBI project. All rights reserved. -# This program is free software; you can redistribute it and/or modify it under the terms of the license (GNU GPL). - -import os -import sys -import generator_utils as gen - -template = """// @{generatedby}@ -/* ///////////////////////// The MPI Bugs Initiative //////////////////////// - - Origin: MBI - - Description: @{shortdesc}@ - @{longdesc}@ - - Version of MPI: Conforms to MPI 1.1, does not require MPI 2 implementation - -BEGIN_MPI_FEATURES - P2P!basic: Lacking - P2P!nonblocking: Lacking - P2P!persistent: Lacking - COLL!basic: Lacking - COLL!nonblocking: Lacking - COLL!persistent: Lacking - COLL!tools: @{toolfeature}@ - RMA: Lacking -END_MPI_FEATURES - -BEGIN_MBI_TESTS - $ mpirun -np 2 ${EXE} - | @{outcome}@ - | @{errormsg}@ -END_MBI_TESTS -////////////////////// End of MBI headers /////////////////// */ - -#include <mpi.h> -#include <stdio.h> - -#define ITERATIONS 100 -#define PARAM_PER_ITERATION 3 -#define PARAM_LOST_PER_ITERATION 1 - -static void myOp(int *invec, int *inoutvec, int *len, MPI_Datatype *dtype) { - for (int i = 0; i < *len; i++) - inoutvec[i] += invec[i]; -} - -int main(int argc, char **argv) { - int nprocs = -1; - int rank = -1; - int i=1; - int j=0; - int size=1; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - printf("Hello from rank %d \\n", rank); - - if (nprocs < 2) - printf("MBI ERROR: This test needs at least 2 processes to produce a bug!\\n"); - - @{change_size}@ - @{init}@ - @{loop}@ - @{operation}@ - @{cond}@ - @{fini}@ - @{end}@ - - @{free}@ - - MPI_Finalize(); - printf("Rank %d finished normally\\n", rank); - return 0; -} -""" - -# Generate code with one collective -for call in gen.tcoll: - patterns = {} - patterns = {'call': call} - patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['toolfeature'] = 'Yes' - patterns['call'] = call - patterns['operation'] = gen.operation[call]("1") - patterns['init'] = gen.init[call]("1") - patterns['fini'] = gen.fini[call]("1") - patterns['free'] = gen.free[call]("1") - missing = patterns['fini'] - patterns['loop'] = '' - patterns['cond'] = '' - patterns['change_size'] = '' - patterns['end'] = '' - - # Generate the correct code - replace = patterns.copy() - replace['shortdesc'] = '@{call}@ is correctly used' - replace['longdesc'] = f'{call} correctly used' - replace['outcome'] = 'OK' - replace['errormsg'] = '' - gen.make_file(template, f'ResLeak_{call}_ok.c', replace) - - # Generate the resleak - replace = patterns.copy() - replace['shortdesc'] = '@{call}@ has no free' - replace['longdesc'] = '@{call}@ has no free' - replace['outcome'] = f'ERROR: {gen.error[call]}' - replace['errormsg'] = 'Resleak. @{call}@ at @{filename}@:@{line:MBIERROR}@ has no free.' - replace['fini'] = ' /* MBIERROR MISSING: ' + missing + ' */' - gen.make_file(template, f'ResLeak_{call}_nok.c', replace) - - # Generate multiple resleak - replace = patterns.copy() - replace['shortdesc'] = '@{call}@ lacks several free' - replace['longdesc'] = '@{call}@ lacks several free' - replace['outcome'] = f'ERROR: {gen.error[call]}' - replace['errormsg'] = 'Resleak. @{call}@ at @{filename}@:@{line:MBIERROR}@ lacks several free.' - replace['change_size'] = 'size=PARAM_PER_ITERATION;' - replace['loop'] = 'for (i = 0; i < ITERATIONS; i++) {\n for (j = 0; j < PARAM_PER_ITERATION; j++) {' - replace['cond'] = ' if (j < PARAM_PER_ITERATION - PARAM_LOST_PER_ITERATION) {' - replace['fini'] = gen.fini[call]("1") + ' /* MBIERROR */' - replace['end'] = ' }\n }\n }' - gen.make_file(template, f'ResLeak_multiple_{call}_nok.c', replace) diff --git a/scripts/original_MBI_generators/generator_utils.py b/scripts/original_MBI_generators/generator_utils.py deleted file mode 100644 index 7b610baaf6e03f314702ef6561a15c7a6177151f..0000000000000000000000000000000000000000 --- a/scripts/original_MBI_generators/generator_utils.py +++ /dev/null @@ -1,481 +0,0 @@ -# Copyright 2021-2022. The MBI project. All rights reserved. -# This program is free software; you can redistribute it and/or modify it under the terms of the license (GNU GPL). - -# This is a simple templating system, dedicated to the systematic generation of MPI source code - -import os -import re - -# Collectives -coll = ['MPI_Barrier', 'MPI_Bcast', 'MPI_Reduce', 'MPI_Gather', 'MPI_Scatter', 'MPI_Scan', 'MPI_Exscan', 'MPI_Allgather', 'MPI_Allreduce', 'MPI_Allgatherv', 'MPI_Alltoall', 'MPI_Alltoallv'] -icoll = ['MPI_Ibcast', 'MPI_Ireduce', 'MPI_Igather', 'MPI_Iscatter', 'MPI_Iscan', 'MPI_Iexscan', 'MPI_Iallgather', 'MPI_Iallreduce', 'MPI_Iallgatherv', 'MPI_Ialltoall', 'MPI_Ialltoallv'] -barrier = ['MPI_Barrier'] -ibarrier = ['MPI_Ibarrier'] -coll4op = ['MPI_Reduce', 'MPI_Allreduce'] -icoll4op = ['MPI_Ireduce', 'MPI_Iallreduce'] -coll4root = ['MPI_Reduce', 'MPI_Bcast', 'MPI_Gather', 'MPI_Scatter'] -icoll4root = ['MPI_Ireduce', 'MPI_Ibcast', 'MPI_Igather', 'MPI_Iscatter'] -pcoll = [] -tcoll = ['MPI_Comm_split', 'MPI_Op_create', 'MPI_Comm_dup', 'MPI_Type_contiguous', 'MPI_Comm_create', 'MPI_Group_excl'] # MPI_Comm_dup removed -tcoll4color = ['MPI_Comm_split'] -tcoll4topo = ['MPI_Cart_get'] - -# P2P -allsend = ['MPI_Send', 'MPI_Isend', 'MPI_Ssend', 'MPI_Bsend', 'MPI_Send_init'] -allrecv = ['MPI_Recv', 'MPI_Irecv', 'MPI_Recv_init'] -send = ['MPI_Send'] -ssend = ['MPI_Ssend'] -bsend = ['MPI_Bsend'] -isend = ['MPI_Isend'] -psend = ['MPI_Send_init'] -recv = ['MPI_Recv'] -irecv = ['MPI_Irecv'] -precv = ['MPI_Recv_init'] -probe = ['MPI_Probe'] -sendrecv = ['MPI_Sendrecv'] - -# RMA -epoch = ['MPI_Win_fence', 'MPI_Win_lock', 'MPI_Win_lock_all'] -rma = ['MPI_Get', 'MPI_Put'] -get = ['MPI_Get'] -put = ['MPI_Put'] -store = ['store'] -load = ['load'] -rstore = ['rstore'] -rload = ['rload'] -loadstore = ['loadstore'] - - -# setup -init = {} -start = {} -operation = {} -fini = {} -free = {} -write = {} -error = {} -epoch = {} -finEpoch = {} -syncEpoch = {} - - -### COLL:basic - -init['MPI_Bcast'] = lambda n: f'int buf{n}[buff_size];' -start['MPI_Bcast'] = lambda n: "" -operation['MPI_Bcast'] = lambda n: f'MPI_Bcast(buf{n}, buff_size, type, root, newcom);' -fini['MPI_Bcast'] = lambda n: "" -free['MPI_Bcast'] = lambda n: "" -write['MPI_Bcast'] = lambda n: "" - -init['MPI_Barrier'] = lambda n: "" -start['MPI_Barrier'] = lambda n: "" -operation['MPI_Barrier'] = lambda n: 'MPI_Barrier(newcom);' -fini['MPI_Barrier'] = lambda n: "" -free['MPI_Barrier'] = lambda n: "" -write['MPI_Barrier'] = lambda n: "" - -init['MPI_Reduce'] = lambda n: f"int sum{n}, val{n} = 1;" -start['MPI_Reduce'] = lambda n: "" -operation['MPI_Reduce'] = lambda n: f"MPI_Reduce(&val{n}, &sum{n}, 1, type, op, root, newcom);" -fini['MPI_Reduce'] = lambda n: "" -free['MPI_Reduce'] = lambda n: "" -write['MPI_Reduce'] = lambda n: "" - -init['MPI_Gather'] = lambda n: f"int val{n}=1, buf{n}[buff_size];" -start['MPI_Gather'] = lambda n: "" -operation['MPI_Gather'] = lambda n: f"MPI_Gather(&val{n}, 1, type, buf{n},1, type, root, newcom);" -fini['MPI_Gather'] = lambda n: "" -free['MPI_Gather'] = lambda n: "" -write['MPI_Gather'] = lambda n: "" - -init['MPI_Scatter'] = lambda n: f"int val{n}, buf{n}[buff_size];\n memset(buf{n}, 0, sizeof(int)*buff_size);" -start['MPI_Scatter'] = lambda n: "" -operation['MPI_Scatter'] = lambda n: f"MPI_Scatter(&buf{n}, 1, type, &val{n}, 1, type, root, newcom);" -fini['MPI_Scatter'] = lambda n: "" -free['MPI_Scatter'] = lambda n: "" -write['MPI_Scatter'] = lambda n: "" - -init['MPI_Allreduce'] = lambda n: f"int sum{n}, val{n} = 1;" -start['MPI_Allreduce'] = lambda n: "" -operation['MPI_Allreduce'] = lambda n: f"MPI_Allreduce(&val{n}, &sum{n}, 1, type, op, newcom);" -fini['MPI_Allreduce'] = lambda n: "" -free['MPI_Allreduce'] = lambda n: "" -write['MPI_Allreduce'] = lambda n: "" - -init['MPI_Scan'] = lambda n: f"int outbuf{n}[buff_size];\n memset(outbuf{n}, 0, buff_size*sizeof(int));\n int inbuf{n}[buff_size];" -start['MPI_Scan'] = lambda n: "" -operation['MPI_Scan'] = lambda n: f"MPI_Scan(&outbuf{n}, inbuf{n}, buff_size, type, op, newcom);" -fini['MPI_Scan'] = lambda n: "" -free['MPI_Scan'] = lambda n: "" -write['MPI_Scan'] = lambda n: "" - -init['MPI_Exscan'] = lambda n: f"int outbuf{n}[buff_size];\n memset(outbuf{n}, 0, buff_size*sizeof(int));\n int inbuf{n}[buff_size];" -start['MPI_Exscan'] = lambda n: "" -operation['MPI_Exscan'] = lambda n: f"MPI_Exscan(&outbuf{n}, inbuf{n}, buff_size, type, op, newcom);" -fini['MPI_Exscan'] = lambda n: "" -free['MPI_Exscan'] = lambda n: "" -write['MPI_Exscan'] = lambda n: "" - -init['MPI_Allgather'] = lambda n: f"int val{n}=1, *rbuf{n} = (int*)malloc(dbs);" -start['MPI_Allgather'] = lambda n: "" -operation['MPI_Allgather'] = lambda n: f"MPI_Allgather(&val{n}, 1, type, rbuf{n}, 1, type, newcom);" -fini['MPI_Allgather'] = lambda n: "" -free['MPI_Allgather'] = lambda n: f"free(rbuf{n});" -write['MPI_Allgather'] = lambda n: "" - -init['MPI_Alltoallv'] = lambda n: (f"int *sbuf{n}=(int*)malloc(dbs*2), *rbuf{n}=(int*)malloc(dbs*2), *scounts{n}=(int*)malloc(dbs), *rcounts{n}=(int*)malloc(dbs), *sdispls{n}=(int*)malloc(dbs), *rdispls{n}=(int*)malloc(dbs);\n" - + " for (int i = 0; i < nprocs; i++) {\n" - + f" scounts{n}[i] = 2;\n" - + f" rcounts{n}[i] = 2;\n" - + f" sdispls{n}[i] = (nprocs - (i + 1)) * 2;\n" - + f" rdispls{n}[i] = i * 2;\n" - + " }") -start['MPI_Alltoallv'] = lambda n: "" -operation['MPI_Alltoallv'] = lambda n: f"MPI_Alltoallv(sbuf{n}, scounts{n}, sdispls{n}, type, rbuf{n}, rcounts{n}, rdispls{n}, type, newcom);" -fini['MPI_Alltoallv'] = lambda n: "" -free['MPI_Alltoallv'] = lambda n: f"free(sbuf{n});free(rbuf{n});free(scounts{n});free(rcounts{n});free(sdispls{n});free(rdispls{n});" -write['MPI_Alltoallv'] = lambda n: "" - -init['MPI_Alltoall'] = lambda n: f"int *sbuf{n} = (int*)malloc(dbs), *rbuf{n} = (int*)malloc(dbs);" -start['MPI_Alltoall'] = lambda n: "" -operation['MPI_Alltoall'] = lambda n: f"MPI_Alltoall(sbuf{n}, 1, type, rbuf{n}, 1, type, newcom);" -fini['MPI_Alltoall'] = lambda n: "" -free['MPI_Alltoall'] = lambda n: f"free(sbuf{n});free(rbuf{n});" -write['MPI_Alltoall'] = lambda n: "" - -init['MPI_Allgatherv'] = lambda n: (f"int *rbuf{n} = (int*)malloc(dbs*2), *rcounts{n}=(int*)malloc(dbs), *displs{n}=(int*)malloc(dbs);\n" - + " for (int i = 0; i < nprocs; i++) {\n" - + f" rcounts{n}[i] = 1;\n" - + f" displs{n}[i] = 2 * (nprocs - (i + 1));\n" - + " }") -start['MPI_Allgatherv'] = lambda n: "" -operation['MPI_Allgatherv'] = lambda n: f"MPI_Allgatherv(&rank, 1, type, rbuf{n}, rcounts{n}, displs{n}, type, newcom);" -fini['MPI_Allgatherv'] = lambda n: "" -free['MPI_Allgatherv'] = lambda n: f"free(rbuf{n});free(rcounts{n});free(displs{n});" -write['MPI_Allgatherv'] = lambda n: "" - - -### COLL:nonblocking - -init['MPI_Ibarrier'] = lambda n: f"MPI_Request req{n}=MPI_REQUEST_NULL; MPI_Status stat{n};" -start['MPI_Ibarrier'] = lambda n: "" -operation['MPI_Ibarrier'] = lambda n: f'MPI_Ibarrier(newcom, &req{n});' -fini['MPI_Ibarrier'] = lambda n: f"MPI_Wait(&req{n}, &stat{n});" -free['MPI_Ibarrier'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' -write['MPI_Ibarrier'] = lambda n: "" - -init['MPI_Ireduce'] = lambda n: f"MPI_Request req{n}=MPI_REQUEST_NULL; MPI_Status stat{n}; int sum{n}, val{n} = 1;" -start['MPI_Ireduce'] = lambda n: "" -operation['MPI_Ireduce'] = lambda n: f"MPI_Ireduce(&val{n}, &sum{n}, 1, type, op, root, newcom, &req{n});" -fini['MPI_Ireduce'] = lambda n: f"MPI_Wait(&req{n}, &stat{n});" -free['MPI_Ireduce'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' -write['MPI_Ireduce'] = lambda n: f"sum{n}++;" - -init['MPI_Iallreduce'] = lambda n: f'MPI_Request req{n}=MPI_REQUEST_NULL;MPI_Status stat{n}; int sum{n}, val{n} = 1;' -start['MPI_Iallreduce'] = lambda n: "" -operation['MPI_Iallreduce'] = lambda n: f'MPI_Iallreduce(&val{n}, &sum{n}, 1, type, op, newcom, &req{n});' -fini['MPI_Iallreduce'] = lambda n: f'MPI_Wait(&req{n}, &stat{n});' -free['MPI_Iallreduce'] = lambda n: f"if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});" -write['MPI_Iallreduce'] = lambda n: f"sum{n}++;" - -init['MPI_Ibcast'] = lambda n: f'MPI_Request req{n}=MPI_REQUEST_NULL; MPI_Status sta{n};int buf{n}[buff_size];' -start['MPI_Ibcast'] = lambda n: "" -operation['MPI_Ibcast'] = lambda n: f'MPI_Ibcast(buf{n}, buff_size, type, root, newcom, &req{n});' -fini['MPI_Ibcast'] = lambda n: f"MPI_Wait(&req{n},&sta{n});" -free['MPI_Ibcast'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' -write['MPI_Ibcast'] = lambda n: f'buf{n}[0]++;' - -init['MPI_Igather'] = lambda n: f"int val{n}=1, buf{n}[buff_size];MPI_Request req{n}=MPI_REQUEST_NULL;MPI_Status sta{n};" -start['MPI_Igather'] = lambda n: "" -operation['MPI_Igather'] = lambda n: f'MPI_Igather(&val{n}, 1, type, &buf{n},1, type, root, newcom, &req{n});' -write['MPI_Igather'] = lambda n: f'val{n}=3;' -fini['MPI_Igather'] = lambda n: f'MPI_Wait(&req{n},&sta{n});' -free['MPI_Igather'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' - -init['MPI_Iscatter'] = lambda n: f"MPI_Request req{n} = MPI_REQUEST_NULL;\n MPI_Status sta{n};\n int val{n};\n int buf{n}[buff_size];\n memset(buf{n}, 0, buff_size*sizeof(int));" -start['MPI_Iscatter'] = lambda n: "" -operation['MPI_Iscatter'] = lambda n: f"MPI_Iscatter(&buf{n}, 1, type, &val{n}, 1, type, root, newcom,&req{n});" -fini['MPI_Iscatter'] = lambda n: f"MPI_Wait(&req{n},&sta{n});" -free['MPI_Iscatter'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' -write['MPI_Iscatter'] = lambda n: f'buf{n}[0]++;' - -init['MPI_Iscan'] = lambda n: f"MPI_Request req{n} = MPI_REQUEST_NULL;\n MPI_Status sta{n};\n int outbuf{n}[buff_size];\n memset(outbuf{n}, 0, buff_size*sizeof(int));\n int inbuf{n}[buff_size];" -start['MPI_Iscan'] = lambda n: "" -operation['MPI_Iscan'] = lambda n: f"MPI_Iscan(&outbuf{n}, inbuf{n}, buff_size, type, op, newcom,&req{n});" -fini['MPI_Iscan'] = lambda n: f"MPI_Wait(&req{n},&sta{n});" -free['MPI_Iscan'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' -write['MPI_Iscan'] = lambda n: f'outbuf{n}[0]++;' - -init['MPI_Iexscan'] = lambda n: f"MPI_Request req{n}=MPI_REQUEST_NULL;MPI_Status sta{n};\n int outbuf{n}[buff_size];\n memset(outbuf{n}, 0, buff_size*sizeof(int));\n int inbuf{n}[buff_size];" -start['MPI_Iexscan'] = lambda n: "" -operation['MPI_Iexscan'] = lambda n: f"MPI_Iexscan(&outbuf{n}, inbuf{n}, buff_size, type, op, newcom,&req{n});" -fini['MPI_Iexscan'] = lambda n: f"MPI_Wait(&req{n},&sta{n});" -free['MPI_Iexscan'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' -write['MPI_Iexscan'] = lambda n: f'outbuf{n}[0]++;' - -init['MPI_Iallgather'] = lambda n: f"MPI_Request req{n}=MPI_REQUEST_NULL;MPI_Status sta{n};int val{n}=1, *rbuf{n} = (int*)malloc(dbs);" -start['MPI_Iallgather'] = lambda n: "" -operation['MPI_Iallgather'] = lambda n: f"MPI_Iallgather(&val{n}, 1, type, rbuf{n}, 1, type, newcom,&req{n});" -fini['MPI_Iallgather'] = lambda n: f"MPI_Wait(&req{n},&sta{n});" -free['MPI_Iallgather'] = lambda n: f"free(rbuf{n});" -write['MPI_Iallgather'] = lambda n: f'val{n}++;' - -init['MPI_Iallgatherv'] = lambda n: (f"MPI_Request req{n}=MPI_REQUEST_NULL;MPI_Status sta{n};int *rbuf{n} = (int*)malloc(dbs*2), *rcounts{n}=(int*)malloc(dbs), *displs{n}=(int*)malloc(dbs);\n" - + " for (int i = 0; i < nprocs; i++) {\n" - + f" rcounts{n}[i] = 1;\n" - + f" displs{n}[i] = 2 * (nprocs - (i + 1));\n" - + " }") -start['MPI_Iallgatherv'] = lambda n: "" -operation['MPI_Iallgatherv'] = lambda n: f"MPI_Iallgatherv(&rank, 1, type, rbuf{n}, rcounts{n}, displs{n}, type, newcom,&req{n});" -fini['MPI_Iallgatherv'] = lambda n: f"MPI_Wait(&req{n},&sta{n});" -free['MPI_Iallgatherv'] = lambda n: f"free(rbuf{n});free(rcounts{n});free(displs{n});" -write['MPI_Iallgatherv'] = lambda n: f"rbuf{n}[0]++;" - -init['MPI_Ialltoall'] = lambda n: f"MPI_Request req{n}=MPI_REQUEST_NULL;MPI_Status sta{n};int *sbuf{n} = (int*)malloc(dbs), *rbuf{n} = (int*)malloc(dbs);" -start['MPI_Ialltoall'] = lambda n: "" -operation['MPI_Ialltoall'] = lambda n: f"MPI_Ialltoall(sbuf{n}, 1, type, rbuf{n}, 1, type, newcom, &req{n});" -fini['MPI_Ialltoall'] = lambda n: f"MPI_Wait(&req{n},&sta{n});" -free['MPI_Ialltoall'] = lambda n: f"free(sbuf{n});free(rbuf{n});" -write['MPI_Ialltoall'] = lambda n: f"rbuf{n}[0]++;" - -init['MPI_Ialltoallv'] = lambda n: (f"MPI_Request req{n}=MPI_REQUEST_NULL;MPI_Status sta{n};int *sbuf{n}=(int*)malloc(dbs*2), *rbuf{n}=(int*)malloc(dbs*2), *scounts{n}=(int*)malloc(dbs), *rcounts{n}=(int*)malloc(dbs), *sdispls{n}=(int*)malloc(dbs), *rdispls{n}=(int*)malloc(dbs);\n" - + " for (int i = 0; i < nprocs; i++) {\n" - + f" scounts{n}[i] = 2;\n" - + f" rcounts{n}[i] = 2;\n" - + f" sdispls{n}[i] = (nprocs - (i + 1)) * 2;\n" - + f" rdispls{n}[i] = i * 2;\n" - + " }") -start['MPI_Ialltoallv'] = lambda n: "" -operation['MPI_Ialltoallv'] = lambda n: f"MPI_Ialltoallv(sbuf{n}, scounts{n}, sdispls{n}, type, rbuf{n}, rcounts{n}, rdispls{n}, type, newcom,&req{n});" -fini['MPI_Ialltoallv'] = lambda n: f"MPI_Wait(&req{n},&sta{n});" -free['MPI_Ialltoallv'] = lambda n: f"free(sbuf{n});free(rbuf{n});free(scounts{n});free(rcounts{n});free(sdispls{n});free(rdispls{n});" -write['MPI_Ialltoallv'] = lambda n: f"rbuf{n}[0]++;" - -### COLL:persistent - - - -### COLL:tools - -init['MPI_Comm_split'] = lambda n: 'MPI_Comm com[size]; int color = rank % 2; int key = 1;' -start['MPI_Comm_split'] = lambda n: "" -operation['MPI_Comm_split'] = lambda n: 'MPI_Comm_split(MPI_COMM_WORLD,color,key, &com[j]);' -error['MPI_Comm_split'] = 'CommunicatorLeak' -fini['MPI_Comm_split'] = lambda n: "if(com[j] != MPI_COMM_NULL) MPI_Comm_free(&com[j]);" -free['MPI_Comm_split'] = lambda n: "" - - -init['MPI_Cart_get'] = lambda n: "" -start['MPI_Cart_get'] = lambda n: "" -operation['MPI_Cart_get'] = lambda n: 'MPI_Cart_get(newcom, 2, dims, periods, coords);' -write['MPI_Cart_get'] = lambda n: "" -fini['MPI_Cart_get'] = lambda n: "" -free['MPI_Cart_get'] = lambda n: "" - - -init['MPI_Op_create'] = lambda n: 'MPI_Op op[size];' -operation['MPI_Op_create'] = lambda n: 'MPI_Op_create((MPI_User_function *)myOp, 0, &op[j]);' -error['MPI_Op_create'] = 'OperatorLeak' -fini['MPI_Op_create'] = lambda n: "MPI_Op_free(&op[j]);" -free['MPI_Op_create'] = lambda n: "" - -init['MPI_Comm_group'] = lambda n: 'MPI_Group grp[size];' -operation['MPI_Comm_group'] = lambda n: 'MPI_Comm_group(MPI_COMM_WORLD, &grp[j]);' -error['MPI_Comm_group'] = 'GroupLeak' -fini['MPI_Comm_group'] = lambda n: "MPI_Group_free(&grp[j]);" -free['MPI_Comm_group'] = lambda n: "" - -init['MPI_Group_excl'] = lambda n: 'MPI_Group worldgroup, grp[size];\n MPI_Comm_group(MPI_COMM_WORLD, &worldgroup);' -operation['MPI_Group_excl'] = lambda n: 'MPI_Group_excl(worldgroup, 1, &rank, &grp[j]);' -error['MPI_Group_excl'] = 'GroupLeak' -fini['MPI_Group_excl'] = lambda n: "MPI_Group_free(&grp[j]);" -free['MPI_Group_excl'] = lambda n: "MPI_Group_free(&worldgroup);" - -init['MPI_Comm_create'] = lambda n: 'MPI_Comm com[size]; MPI_Group grp[size];' -operation['MPI_Comm_create'] = lambda n: 'MPI_Comm_group(MPI_COMM_WORLD, &grp[j]);\n MPI_Comm_create(MPI_COMM_WORLD, grp[j], &com[j]);\n MPI_Group_free(&grp[j]);' -error['MPI_Comm_create'] = 'CommunicatorLeak' -fini['MPI_Comm_create'] = lambda n: "MPI_Comm_free(&com[j]);" -free['MPI_Comm_create'] = lambda n: "" - -init['MPI_Comm_dup'] = lambda n: 'MPI_Comm com[size];' -operation['MPI_Comm_dup'] = lambda n: 'MPI_Comm_dup(MPI_COMM_WORLD, &com[j]);' -error['MPI_Comm_dup'] = 'CommunicatorLeak' -fini['MPI_Comm_dup'] = lambda n: "MPI_Comm_free(&com[j]);" -free['MPI_Comm_dup'] = lambda n: "" - -init['MPI_Type_contiguous'] = lambda n: 'MPI_Datatype type[size];' -operation['MPI_Type_contiguous'] = lambda n: 'MPI_Type_contiguous(2, MPI_DOUBLE, &type[j]);' -error['MPI_Type_contiguous'] = 'TypeLeak' -fini['MPI_Type_contiguous'] = lambda n: "MPI_Type_free(&type[j]);" -free['MPI_Type_contiguous'] = lambda n: "" - - - - -### P2P:basic - -init['MPI_Send'] = lambda n: f'int buf{n}=rank;' -start['MPI_Send'] = lambda n: "" -operation['MPI_Send'] = lambda n: f'MPI_Send(&buf{n}, buff_size, type, dest, stag, newcom);' -fini['MPI_Send'] = lambda n: "" -free['MPI_Send'] = lambda n: "" -write['MPI_Send'] = lambda n: "" - -init['MPI_Ssend'] = lambda n: f'int buf{n}=rank;' -start['MPI_Ssend'] = lambda n: "" -operation['MPI_Ssend'] = lambda n: f'MPI_Ssend(&buf{n}, buff_size, type, dest, stag, newcom);' -fini['MPI_Ssend'] = lambda n: "" -free['MPI_Ssend'] = lambda n: "" -write['MPI_Ssend'] = lambda n: "" - -init['MPI_Bsend'] = lambda n: (f'int buf{n}=rank;\n' - + f'int buffer_attached_size{n} = MPI_BSEND_OVERHEAD + sizeof(int);\n' - + f'char* buffer_attached{n} = (char*)malloc(buffer_attached_size{n});\n' - + f'MPI_Buffer_attach(buffer_attached{n}, buffer_attached_size{n});') -start['MPI_Bsend'] = lambda n: "" -operation['MPI_Bsend'] = lambda n: f'MPI_Bsend(&buf{n}, buff_size, type, dest, stag, newcom);' -fini['MPI_Bsend'] = lambda n: "" -free['MPI_Bsend'] = (lambda n: f'MPI_Buffer_detach(&buffer_attached{n}, &buffer_attached_size{n});\n' - + f'free(buffer_attached{n});') -write['MPI_Bsend'] = lambda n: "" - -init['MPI_Recv'] = lambda n: f'int buf{n}=-1; MPI_Status sta{n};' -start['MPI_Recv'] = lambda n: "" -operation['MPI_Recv'] = lambda n: f'MPI_Recv(&buf{n}, buff_size, type, src, rtag, newcom, &sta{n});' -fini['MPI_Recv'] = lambda n: "" -free['MPI_Recv'] = lambda n: "" -write['MPI_Recv'] = lambda n: "" - -init['MPI_Probe'] = lambda n: "" -start['MPI_Probe'] = lambda n: "" -operation['MPI_Probe'] = lambda n: 'MPI_Probe(src, 0, newcom, &sta);' -fini['MPI_Probe'] = lambda n: "" -free['MPI_Probe'] = lambda n: "" -write['MPI_Probe'] = lambda n: "" - -init['MPI_Sendrecv'] = lambda n: f'int sbuf{n}[N+2]={{rank}}; int rbuf{n}[N]={{rank}}; int * psbuf{n} = &sbuf{n}[0]; int * prbuf{n} = &rbuf{n}[0]; MPI_Status sta{n};' -start['MPI_Sendrecv'] = lambda n: "" -operation['MPI_Sendrecv'] = lambda n: f'MPI_Sendrecv(psbuf{n}, buff_size, type, dest, stag, prbuf{n}, buff_size, type, src, rtag, newcom, &sta{n});' -fini['MPI_Sendrecv'] = lambda n: "" -free['MPI_Sendrecv'] = lambda n: "" -write['MPI_Sendrecv'] = lambda n: f"prbuf{n} = &sbuf{n}[2];" - - -### P2P:nonblocking - -init['MPI_Isend'] = lambda n: f'int buf{n}=rank; MPI_Request req{n}=MPI_REQUEST_NULL;' -start['MPI_Isend'] = lambda n: "" -operation['MPI_Isend'] = lambda n: f'MPI_Isend(&buf{n}, buff_size, type, dest, stag, newcom, &req{n});' -fini['MPI_Isend'] = lambda n: f'MPI_Wait(&req{n}, MPI_STATUS_IGNORE);' -free['MPI_Isend'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' -write['MPI_Isend'] = lambda n: f'buf{n}=4;' - -init['MPI_Irecv'] = lambda n: f'int buf{n}=-1; MPI_Request req{n}=MPI_REQUEST_NULL;' -start['MPI_Irecv'] = lambda n: "" -operation['MPI_Irecv'] = lambda n: f'MPI_Irecv(&buf{n}, buff_size, type, src, rtag, newcom, &req{n});' -fini['MPI_Irecv'] = lambda n: f' MPI_Wait(&req{n}, MPI_STATUS_IGNORE);' -free['MPI_Irecv'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' -write['MPI_Irecv'] = lambda n: f'buf{n}++;' - -### P2P:persistent - -init['MPI_Send_init'] = lambda n: f'int buf{n}=rank; MPI_Request req{n}=MPI_REQUEST_NULL;' -operation['MPI_Send_init'] = lambda n: f'MPI_Send_init(&buf{n}, buff_size, type, dest, stag, newcom, &req{n});' -start['MPI_Send_init'] = lambda n: f'MPI_Start(&req{n});' -fini['MPI_Send_init'] = lambda n: f'MPI_Wait(&req{n}, MPI_STATUS_IGNORE);' -free['MPI_Send_init'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' -write['MPI_Send_init'] = lambda n: f'buf{n}=4;' - -init['MPI_Recv_init'] = lambda n: f'int buf{n}=-1; MPI_Request req{n}=MPI_REQUEST_NULL;' -start['MPI_Recv_init'] = lambda n: f'MPI_Start(&req{n});' -operation['MPI_Recv_init'] = lambda n: f'MPI_Recv_init(&buf{n}, buff_size, type, src, rtag, newcom, &req{n});' -fini['MPI_Recv_init'] = lambda n: f'MPI_Wait(&req{n}, MPI_STATUS_IGNORE);' -free['MPI_Recv_init'] = lambda n: f'if(req{n} != MPI_REQUEST_NULL) MPI_Request_free(&req{n});' -write['MPI_Recv_init'] = lambda n: f'buf{n}++;' - -### RMA - -epoch['MPI_Win_fence'] = lambda n: 'MPI_Win_fence(0, win);' -finEpoch['MPI_Win_fence'] = lambda n: 'MPI_Win_fence(0, win);' -syncEpoch['MPI_Win_fence'] = lambda n: 'MPI_Win_fence(0, win);' -#epoch['MPI_Win_lock'] = lambda n: 'MPI_Win_lock(MPI_LOCK_SHARED, target, 0, win);' -#finEpoch['MPI_Win_lock'] = lambda n: 'MPI_Win_unlock(target, win);' -#syncEpoch['MPI_Win_lock'] = lambda n: '' -epoch['MPI_Win_lock_all'] = lambda n: 'MPI_Win_lock_all(0,win);' -finEpoch['MPI_Win_lock_all'] = lambda n: 'MPI_Win_unlock_all(win);' -syncEpoch['MPI_Win_lock_all'] = lambda n: 'MPI_Win_flush(1,win);' - -init['MPI_Put'] = lambda n: f'int localbuf{n}[N] = {{12345}};' -operation['MPI_Put'] = lambda n: f'MPI_Put(&localbuf{n}, N, MPI_INT, target, 0, N, type, win);' - -init['MPI_Get'] = lambda n: f'int localbuf{n}[N] = {{54321}};' -operation['MPI_Get'] = lambda n: f'MPI_Get(&localbuf{n}, N, MPI_INT, target, 0, N, type, win);' - -init['store'] = lambda n: f'int localbuf{n}[N] = {{0}};' -operation['store'] = lambda n: f'localbuf{n}[0] = 8;' - -init['rstore'] = lambda n: "" -operation['rstore'] = lambda n: f'winbuf[5] = 12346;' - -init['load'] = lambda n: f'int localbuf{n}[N] = {{0}};' -operation['load'] = lambda n: f'int load = localbuf{n}[0];' - -init['rload'] = lambda n: "" -operation['rload'] = lambda n: "int load = winbuf[5];" - -init['loadstore'] = lambda n: f'int localbuf{n}[N] = {{0}};' -operation['loadstore'] = lambda n: f'if (localbuf{n}[0] % 2 == 0) localbuf{n}[0]++; ' - - - - -def find_line(content, target, filename): - res = 1 - for line in content.split('\n'): - if re.search(f'[^:]{target}', line): - #print(f'Found {target} at {line}') - return res - res += 1 - raise ValueError(f"Line target {target} not found in {filename}.") - - -def make_file(template, filename, replace): - output = template - filename = filename.replace("_MPI_", "_") - replace['filename'] = filename - # Replace all variables that don't have a ':' in their name - while re.search(r'@\{[^@:]*\}@', output): - m = re.search(r'@\{([^@:]*)\}@', output) - target = m.group(1) - #print(f"Replace @{{{target}}}@") - if target in replace.keys(): - output = re.sub(fr'@\{{{target}\}}@', replace[target], output) - #print(f"Replace {target} -> {replace[target]}") - else: - raise ValueError(f"Variable {target} used in template, but not defined.") - # Now replace all variables with a ':' in their name: line targets are like that, and we don't want to resolve them before the others change the lines - while re.search(r'@\{([^:@]*):([^@]*)\}@', output): - m = re.search(r'@\{([^:@]*):([^@]*)\}@', output) - (kind, target) = (m.group(1), m.group(2)) - if kind == 'line': - replace = f'{find_line(output, target, filename)}' - #print(f"Replace @{{line:{target}}}@ with '{replace}'") - output = re.sub(fr'@\{{line:{target}\}}@', replace, output) - else: - raise ValueError(f"Unknown variable kind: {kind}:{target}") - - if os.path.exists(filename): - with open(filename, 'r') as file: - prev = file.read().split('\n')[0] - prev = re.sub('^.*?scripts/', 'scripts/', prev) - prev = re.sub('. DO NOT EDIT.', '', prev) - now = output.split('\n')[0] - now = re.sub('^.*?scripts/', 'scripts/', now) - now = re.sub('. DO NOT EDIT.', '', now) - - print(f'WARNING: overwriting {filename}. Previously generated by: {prev}; regenerated by {now}') - - # Ready to output it - with open(filename, 'w') as outfile: - outfile.write(output) diff --git a/scripts/tools/itac.py b/scripts/tools/itac.py index 58a14b25da475ba7bc088802e52b8f818815bfb6..87069f709e1241cdf5aaebbdca0fd4dd93b6edb0 100644 --- a/scripts/tools/itac.py +++ b/scripts/tools/itac.py @@ -110,16 +110,16 @@ class Tool(AbstractTool): return "UNKNOWN" def parse(self, cachefile, logs_dir): - if os.path.exists(f'{cachefile}.timeout') or os.path.exists(f'{logs_dir}/itac/{cachefile}.timeout'): + if os.path.exists(f'{cachefile}.timeout') or os.path.exists(f'{logs_dir}/{cachefile}.timeout'): output = {} output["status"] = "timeout" return output - if not (os.path.exists(f'{cachefile}.txt') or os.path.exists(f'{logs_dir}/itac/{cachefile}.txt')): + if not (os.path.exists(f'{cachefile}.txt') or os.path.exists(f'{logs_dir}/{cachefile}.txt')): output = {} output["status"] = "failure" return output - with open(f'{cachefile}.txt' if os.path.exists(f'{cachefile}.txt') else f'{logs_dir}/itac/{cachefile}.txt', + with open(f'{cachefile}.txt' if os.path.exists(f'{cachefile}.txt') else f'{logs_dir}/{cachefile}.txt', 'r') as infile: output = infile.read() diff --git a/scripts/tools/must.py b/scripts/tools/must.py index 54d571528e3e049ad4804154dfb374ad771f5094..780bb422b9ab742b45a36f4b307c0b98413c63be 100644 --- a/scripts/tools/must.py +++ b/scripts/tools/must.py @@ -20,20 +20,20 @@ def must_filter(line, process): class V18(AbstractTool): def identify(self): - return "MUST v1.9.2 wrapper" + return "MUST v1.11.0 wrapper" def ensure_image(self): AbstractTool.ensure_image(self, "-x must") def build(self, rootdir, cached=True): - if cached and os.path.exists("/MBB-builds/MUST192/bin/mustrun"): + if cached and os.path.exists("/MBB-builds/MUST1_11_0/bin/mustrun"): os.environ['PATH'] = os.environ['PATH'] + \ - ":/MBB-builds/MUST192/bin/" - os.environ['OMPI_CC'] = "clang-14" + ":/MBB-builds/MUST1_11_0/bin/" + os.environ['OMPI_CC'] = "clang-19" return # MUST sometimes fails when reinstalling over the same dir - subprocess.run(f"rm -rf /MBB-builds/MUST192", shell=True, check=True) + subprocess.run(f"rm -rf /MBB-builds/MUST1_11_0", shell=True, check=True) # Build it here = os.getcwd() # Save where we were @@ -41,14 +41,13 @@ class V18(AbstractTool): f"rm -rf /tmp/build-must ; mkdir /tmp/build-must", shell=True, check=True) os.chdir("/tmp/build-must") subprocess.run( - f"wget https://hpc.rwth-aachen.de/must/files/MUST-v1.9.2.tar.gz", shell=True, check=True) + f"wget https://hpc.rwth-aachen.de/must/files/MUST-v1.11.0.tar.gz", shell=True, check=True) subprocess.run(f"tar xfz MUST-*.tar.gz", shell=True, check=True) subprocess.run(f"mkdir -p /tmp/build-must/build", shell=True, check=True) os.chdir("/tmp/build-must/build") - subprocess.run(f"CC=$(which gcc) CXX=$(which gcc++) cmake ../MUST-v1.9.2 -DCMAKE_INSTALL_PREFIX=/MBB-builds/MUST192 -DCMAKE_BUILD_TYPE=Release -DENABLE_FORTRAN=OFF -DENABLE_TYPEART=On", shell=True, check=True) - # subprocess.run(f"CC=$(which clang) CXX=$(which clang++) cmake ../MUST-v1.9.2 -DCMAKE_INSTALL_PREFIX=/MBB-builds/MUST192 -DCMAKE_BUILD_TYPE=Release -DENABLE_FORTRAN=OFF -DENABLE_TYPEART=On", shell=True, check=True) + subprocess.run(f"CC=$(which gcc) CXX=$(which gcc++) FC=$(which gfortran) cmake ../MUST-v1.11.0 -DCMAKE_INSTALL_PREFIX=/MBB-builds/MUST1_11_0 -DCMAKE_BUILD_TYPE=Release -DENABLE_FORTRAN=ON -DENABLE_TYPEART=On", shell=True, check=True) subprocess.run(f"make -j$(nproc) install VERBOSE=1", shell=True, check=True) subprocess.run( @@ -59,22 +58,30 @@ class V18(AbstractTool): os.chdir(here) def setup(self): - os.environ['PATH'] = os.environ['PATH'] + ":/MBB-builds/MUST192/bin/" + os.environ['PATH'] = os.environ['PATH'] + ":/MBB-builds/MUST1_11_0/bin/" os.environ['OMPI_ALLOW_RUN_AS_ROOT'] = "1" os.environ['OMPI_ALLOW_RUN_AS_ROOT_CONFIRM'] = "1" def run(self, execcmd, filename, binary, id, number, timeout, batchinfo, loglevel=logging.INFO): cachefile = f'{binary}_{id}' + if filename.endswith(".c"): + lang_args = "--must:language c --must:typeart" + else: + # Switch to --must:language fortran when MUST supports Fortran 2008. Until then: Workaround using MPICH and --must:language C (Internal C API call) + lang_args = "--must:language c" + execcmd = re.sub( - "mpirun", "mustrun --must:distributed --must:typeart --must:output json", execcmd) + "mpirun", f"mustrun --must:distributed {lang_args} --must:tsan --must:output json", execcmd) execcmd = re.sub('\${EXE}', f'./{binary}', execcmd) execcmd = re.sub('\$zero_buffer', "", execcmd) execcmd = re.sub('\$infty_buffer', "", execcmd) with tempfile.TemporaryDirectory() as tmpdirname: + _, file_ext = os.path.splitext(filename) + compiler = "typeart-mpicc -fsanitize=thread" if file_ext == ".c" else "must-tsan-fort --onreport-path none -cpp -ffree-line-length-0 -ffixed-line-length-0" ran = self.run_cmd( - buildcmd=f"typeart-mpicc -g -fPIC {filename} -o {tmpdirname}/{binary} -L/MBB-builds/MUST192/lib -lpnmpi", + buildcmd=f"{compiler} -g -fPIC {filename} -o {tmpdirname}/{binary} -L/MBB-builds/MUST1_11_0/lib -lpnmpi", execcmd=execcmd, cachefile=cachefile, filename=filename, @@ -198,6 +205,10 @@ class V18(AbstractTool): "MUST_ERROR_MPI_MULTIPLE_THREADS": ["TODO"], "MUST_ERROR_UNSUPPORTED": ["TODO"], "MUST_ERROR_OPENMP": ["TODO"], + "MUST_ERROR_WIN_UNKNOWN": ["InvalidParam"], + "MUST_ERROR_WIN_EPOCH": ["EpochLifeCycle"], + "MUST_ERROR_WIN_LOCK": ["EpochLifeCycle"], + "MUST_ERROR_WIN_NULL": ["InvalidParam"], "MUST_INFO_UNIMPLEMENTED_FEATURE": [], # Ignore warnings so far "MUST_WARNING_INTEGER_ZERO": [], @@ -228,12 +239,12 @@ class V18(AbstractTool): "MUST_WARNING_SELFOVERLAPPED": [], "MUST_WARNING_BUFFER_OUTSIZED": [], "MUST_WARNING_THREADLEVEL": [], - "MUST_WARNING_DATARACE": [] + "MUST_WARNING_DATARACE": ["LocalConcurrency", "GlobalConcurrency"], } def parse(self, cachefile, logs_dir): - json_files = [f'{cachefile}.json', f'{logs_dir}/must/{cachefile}.json'] - stdout_files = [f'{cachefile}.txt', f'{logs_dir}/must/{cachefile}.txt'] + json_files = [f'{cachefile}.json', f'{logs_dir}/{cachefile}.json'] + stdout_files = [f'{cachefile}.txt', f'{logs_dir}/{cachefile}.txt'] # find and parse json output json_output = None @@ -250,7 +261,7 @@ class V18(AbstractTool): output_string = ''.join(output_strings) # if nothing was found, parsing will not continue - if json_output is None or len(output_strings) == 0: + if json_output is None and "WARNING: ThreadSanitizer: data race" not in output_string: # check if signal handler of MUST was invoked (= crash) if re.search('caught signal nr', output_string): return {"status": "failure"} @@ -267,45 +278,56 @@ class V18(AbstractTool): return output_string output = {} - # TODO if MBB supports more than .c we need to give it the correct test file name here - test_file_name = cachefile.rsplit('_', 1)[0].strip() + ".c" + + test_file_name = cachefile.rsplit('_', 1)[0].strip() # list of all reported errors parsed_reports = [] # parse JSON output and convert to MBB format - for message in json_output["messages"]: + if json_output: + for message in json_output["messages"]: + parsed_report = {} + # skip any information or warning + if message["type"] == "Information" or (message["type"] == "Warning" and message["error_id"] != "MUST_WARNING_DATARACE"): + continue + + parsed_report["error_class"] = self.get_mbb_error_label()[ + message["error_id"]] + parsed_report["calls"] = [] + parsed_report["lines"] = [] + parsed_report["ranks"] = [] + + # extract reporting MPI call and reporting ranks + parsed_report["calls"].append(message["from"]["call"]) + parsed_report["ranks"] = message["from"]["ranks"] + + if message["from"]["stacktrace"] is not None: + # extract line numbers of the test file from reported MPI call + for stack_item in message["from"]["stacktrace"]: + if test_file_name in stack_item["file"]: + parsed_report["lines"].append(int(stack_item["line"])) + + # extract other affected calls and line numbers from references in error message + for reference in message["references"]: + parsed_report["calls"].append(reference["call"]) + for stack_item in reference["stacktrace"]: + if test_file_name in stack_item["file"]: + parsed_report["lines"].append(int(stack_item["line"])) + + parsed_reports.append(parsed_report) + + # HACK: Do not link onreport library for C code as it leads to a deadlock + # Parse data races from stdout instead + if "WARNING: ThreadSanitizer: data race" in output_string: parsed_report = {} - # skip any information or warning - if message["type"] == "Information" or message["type"] == "Warning": - continue - - parsed_report["error_class"] = self.get_mbb_error_label()[ - message["error_id"]] + parsed_report["error_class"] = ["LocalConcurrency", "GlobalConcurrency"] parsed_report["calls"] = [] - parsed_report["lines"] = [] parsed_report["ranks"] = [] - - # extract reporting MPI call and reporting ranks - parsed_report["calls"].append(message["from"]["call"]) - parsed_report["ranks"] = message["from"]["ranks"] - - if message["from"]["stacktrace"] is not None: - # extract line numbers of the test file from reported MPI call - for stack_item in message["from"]["stacktrace"]: - if test_file_name in stack_item["file"]: - parsed_report["lines"].append(int(stack_item["line"])) - - # extract other affected calls and line numbers from references in error message - for reference in message["references"]: - parsed_report["calls"].append(reference["call"]) - for stack_item in reference["stacktrace"]: - if test_file_name in stack_item["file"]: - parsed_report["lines"].append(int(stack_item["line"])) - + refs = set(re.findall(r"\.\w+:\w+", output_string)) + parsed_report["lines"] = [ref.split(":")[1] for ref in refs] parsed_reports.append(parsed_report) - # Check for timeout is if it exists if os.path.exists(f'{cachefile}.timeout') or os.path.exists(f'{logs_dir}/must/{cachefile}.timeout'): output["status"] = "timeout" diff --git a/scripts/tools/parcoach.py b/scripts/tools/parcoach.py index a40049f7e038d3dc621ff208a9c1e539ce05002d..b852908c1e81e8f8f4ddd238d98e91b26ad6a70d 100644 --- a/scripts/tools/parcoach.py +++ b/scripts/tools/parcoach.py @@ -91,12 +91,12 @@ class Tool(AbstractTool): def parse(self, cachefile, logs_dir): - if os.path.exists(f'{cachefile}.timeout') or os.path.exists(f'{logs_dir}/parcoach/{cachefile}.timeout'): + if os.path.exists(f'{cachefile}.timeout') or os.path.exists(f'{logs_dir}/{cachefile}.timeout'): outcome = 'timeout' - if not (os.path.exists(f'{cachefile}.txt') or os.path.exists(f'{logs_dir}/parcoach/{cachefile}.txt')): + if not (os.path.exists(f'{cachefile}.txt') or os.path.exists(f'{logs_dir}/{cachefile}.txt')): return 'failure' - with open(f'{cachefile}.txt' if os.path.exists(f'{cachefile}.txt') else f'{logs_dir}/parcoach/{cachefile}.txt', 'r') as infile: + with open(f'{cachefile}.txt' if os.path.exists(f'{cachefile}.txt') else f'{logs_dir}/{cachefile}.txt', 'r') as infile: output = infile.read()