From bc62e63e14cd116cda940193b81ba327e6675328 Mon Sep 17 00:00:00 2001 From: Mayeul Aubin Date: Tue, 20 May 2025 17:21:21 +0200 Subject: [PATCH 1/8] fixed field_to_field --- scripts/field_to_field.py | 41 +++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/scripts/field_to_field.py b/scripts/field_to_field.py index 236e283..dbb93a5 100644 --- a/scripts/field_to_field.py +++ b/scripts/field_to_field.py @@ -1,5 +1,5 @@ from pysbmy.density import mesh_to_mesh -from pysbmy.Field import Field, read_field +from pysbmy.field import Field, read_field import numpy as np import os @@ -8,23 +8,43 @@ def field_to_field( input_file:str, output_file:str, output_size:int|tuple[int,int,int]|list[int], + output_L:float|tuple[float,float,float]|list[float], output_dpm:float|tuple[float,float,float]|list[float], output_corner:tuple[float,float,float]|list[float], boundary_conditions:int, ): + ### Make sure all inputs are valid + if output_L is not None and output_dpm is not None: + raise ValueError("Either output_L or output_dpm can be specified, not both.") + if isinstance(output_size, int): output_size = (output_size, output_size, output_size) # N0, N1, N2 + elif len(output_size) == 1: + output_size = (output_size[0], output_size[0], output_size[0]) + + if output_L is not None: + if isinstance(output_L, float): + output_L = (output_L, output_L, output_L) + elif len(output_L) == 1: + output_L = (output_L[0], output_L[0], output_L[0]) - if isinstance(output_dpm, float): + if output_dpm is None: + if output_L is None: + output_dpm = (-1, -1, -1) + else: + output_dpm = (output_L[0] / output_size[0], output_L[1] / output_size[1], output_L[2] / output_size[2]) + elif isinstance(output_dpm, float): output_dpm = (output_dpm, output_dpm, output_dpm) # d0, d1, d2 - elif output_dpm is None: - output_dpm = (-1, -1, -1) + elif len(output_dpm) == 1: + output_dpm = (output_dpm[0], output_dpm[0], output_dpm[0]) if not os.path.exists(input_file): raise FileNotFoundError(f"Input file {input_file} does not exist.") + + # Read the input field print(f"Reading input field from {input_file}") input_field = read_field(input_file) @@ -59,9 +79,9 @@ def field_to_field( print(f"Output field size: {output_size[0]} x {output_size[1]} x {output_size[2]}") print(f"Input field dpm: {d0_in:.3f} x {d1_in:.3f} x {d2_in:.3f}") print(f"Output field dpm: {d0_out:.3f} x {d1_out:.3f} x {d2_out:.3f}") - print(f"Input field corner: {corner0:.1f} x {corner1:.1f} x {corner2:.1f}") - print(f"Output field corner: {output_corner[0]:.1f} x {output_corner[1]:.1f} x {output_corner[2]:.1f}") - print(f"Boundary conditions: {boundary_conditions}") + print(f"Input field corner: ({corner0:.1f}, {corner1:.1f}, {corner2:.1f})") + print(f"Output field corner: ({output_corner[0]:.1f}, {output_corner[1]:.1f}, {output_corner[2]:.1f})") + print(f"Boundary conditions: {'periodic' if boundary_conditions == 1 else 'non-periodic'}") print("-----------------------------------------") input_grid = input_field.data @@ -101,10 +121,11 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description="Convert a field from one size to another.") parser.add_argument("-i","--input_file", type=str, help="Input field file") parser.add_argument("-o","--output_file", type=str, help="Output field file") - parser.add_argument("-N","--output_size", type=int, nargs=3, help="Output field size (N0, N1, N2)") - parser.add_argument("-dpm","--output_dpm", type=float, nargs=3, default=None, help="Output field dpm (d0, d1, d2)") + parser.add_argument("-N","--output_size", type=int, nargs="+", help="Output field size (N0, N1, N2)") + parser.add_argument("-L","--output_L", type=float, nargs="+", default=None, help="Output field size (L0, L1, L2)") + parser.add_argument("-dpm","--output_dpm", type=float, nargs="+", default=None, help="Output field dpm (d0, d1, d2)") parser.add_argument("-corner","--output_corner", type=float, nargs=3, default=(0.,0.,0.), help="Output field corner (corner0, corner1, corner2)") parser.add_argument("-BC","--boundary_conditions", type=int, default=1, help="Boundary conditions (0: periodic, 1: non-periodic)") args = parser.parse_args() - field_to_field(args.input_file, args.output_file, args.output_size, args.output_dpm, args.output_corner, args.boundary_conditions) \ No newline at end of file + field_to_field(args.input_file, args.output_file, args.output_size, args.output_L, args.output_dpm, args.output_corner, args.boundary_conditions) \ No newline at end of file From 56efcface52ced01eab409c95bfe584012c252cd Mon Sep 17 00:00:00 2001 From: Mayeul Aubin Date: Tue, 20 May 2025 17:21:30 +0200 Subject: [PATCH 2/8] added print --- scripts/scola_submit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/scola_submit.py b/scripts/scola_submit.py index d0b1007..93758eb 100644 --- a/scripts/scola_submit.py +++ b/scripts/scola_submit.py @@ -445,6 +445,7 @@ def scola_submit(directory, job_status_categories, resubmit_count, error_count = check_previous_jobs(workdir,slurmdir,slurmfile,tilefile,sleep,job_ids_array,N_tiles**3+1,resubmit_count,error_count,MAX_RESUBMIT,MAX_ERRORS) + print_summary_job_status(job_status_categories, box, resubmit_count, error_count) # Now wait for all jobs to finish while len(job_status_categories['CP']) Date: Wed, 21 May 2025 10:41:28 +0200 Subject: [PATCH 3/8] tick fix + check that all files exist before starting --- analysis/slices.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/analysis/slices.py b/analysis/slices.py index 2febe16..e47eaff 100755 --- a/analysis/slices.py +++ b/analysis/slices.py @@ -1,6 +1,7 @@ import numpy as np import sys +import os sys.path.append('/home/aubin/Simbelmyne/sbmy_control/') fs = 18 @@ -10,11 +11,11 @@ def add_ax_ticks(ax, ticks, tick_labels): from matplotlib import ticker ax.set_xticks(ticks) ax.set_yticks(ticks) - ax.set_xticklabels(tick_labels) - ax.set_yticklabels(tick_labels) + ax.set_xticklabels([int(t) for t in tick_labels]) + ax.set_yticklabels([int(t) for t in tick_labels]) ax.set_xlabel('Mpc/h') - ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%d')) - ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%d')) + # ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%d')) # Does not work + # ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%d')) @@ -53,7 +54,7 @@ def plot_imshow_with_reference( data_list, sep = 10 if L[0] < 50 else 20 if L[0] < 100 else 50 if L[0]<250 else 100 if L[0] < 500 else 200 if L[0] < 1000 else 500 if L[0] < 2500 else 1000 ticks = [np.arange(0, l+1, sep)*len(dat)/l for l, dat in zip(L,data_list)] tick_labels = [np.arange(0, l+1, sep) for l in L] - + def score(data, reference): return np.linalg.norm(data-reference)/np.linalg.norm(reference) @@ -177,6 +178,8 @@ if __name__ == "__main__": ref_field = read_field(args.directory+args.reference) if args.reference is not None else None fields = [] for k,f in enumerate(args.filenames): + if not os.path.exists(args.directory+f): + raise FileNotFoundError(f"File {args.directory+f} does not exist.") if args.reference is not None and f == args.reference: fields.append(ref_field) # Simply copy the reference field instead of reading it again if args.labels is not None: From 4fa6ccc842223b4e61b588cf35d682fde6e8f294 Mon Sep 17 00:00:00 2001 From: Mayeul Aubin Date: Wed, 21 May 2025 10:56:20 +0200 Subject: [PATCH 4/8] check that files exist powerspectrum --- analysis/power_spectrum.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/analysis/power_spectrum.py b/analysis/power_spectrum.py index 9d44005..2cbc40f 100644 --- a/analysis/power_spectrum.py +++ b/analysis/power_spectrum.py @@ -1,4 +1,5 @@ import numpy as np +import os kmin = 1e-1 kmax = 2e0 @@ -286,6 +287,10 @@ if __name__ == "__main__": if not args.power_spectrum and not args.cross_correlation: print('You must choose between power_spectrum and cross_correlation.') exit() + + for _k,f in enumerate(args.filenames): + if not os.path.exists(args.directory+f): + raise FileNotFoundError(f"File {args.directory+f} does not exist.") if args.reference is not None: from pysbmy.field import read_field From 27f84fd50cf8ce6c96a23eb2cc4f4942464e35d2 Mon Sep 17 00:00:00 2001 From: Mayeul Aubin Date: Mon, 26 May 2025 10:19:58 +0200 Subject: [PATCH 5/8] typo --- scripts/field_to_field.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/field_to_field.py b/scripts/field_to_field.py index dbb93a5..b2bae83 100644 --- a/scripts/field_to_field.py +++ b/scripts/field_to_field.py @@ -125,7 +125,7 @@ if __name__ == "__main__": parser.add_argument("-L","--output_L", type=float, nargs="+", default=None, help="Output field size (L0, L1, L2)") parser.add_argument("-dpm","--output_dpm", type=float, nargs="+", default=None, help="Output field dpm (d0, d1, d2)") parser.add_argument("-corner","--output_corner", type=float, nargs=3, default=(0.,0.,0.), help="Output field corner (corner0, corner1, corner2)") - parser.add_argument("-BC","--boundary_conditions", type=int, default=1, help="Boundary conditions (0: periodic, 1: non-periodic)") + parser.add_argument("-BC","--boundary_conditions", type=int, default=1, help="Boundary conditions (1: periodic, 3: non-periodic)") args = parser.parse_args() field_to_field(args.input_file, args.output_file, args.output_size, args.output_L, args.output_dpm, args.output_corner, args.boundary_conditions) \ No newline at end of file From f487691e039e89fb71db3d8390a6bef5f6de9c67 Mon Sep 17 00:00:00 2001 From: Mayeul Aubin Date: Tue, 27 May 2025 10:54:18 +0200 Subject: [PATCH 6/8] fix on scola submit --- scripts/scola_submit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/scola_submit.py b/scripts/scola_submit.py index 93758eb..06a8702 100644 --- a/scripts/scola_submit.py +++ b/scripts/scola_submit.py @@ -255,7 +255,7 @@ def check_previous_jobs(workdir,slurmdir,slurmfile,tilefile,sleeptime,job_ids_ar if os.path.exists(workdir+f"{tilefile}{prev_box}.h5"): job_status_categories['CP'].append(prev_box) # Classify as completed else: - resubmit_job(slurmdir,slurmfile,job_ids_array,prev_box,resubmit_count,error_count,MAX_RESUBMIT,MAX_ERRORS) + resubmit_count, error_count = resubmit_job(slurmdir,slurmfile,job_ids_array,prev_box,resubmit_count,error_count,MAX_RESUBMIT,MAX_ERRORS) job_status_categories[status].append(prev_box) # Classify as failed # Sleep for a while before resubmitting the next job time.sleep(sleeptime) From 00124bbdcc26e18a7f76e44ffa1ec0b5075a704c Mon Sep 17 00:00:00 2001 From: Mayeul Aubin Date: Tue, 27 May 2025 14:46:17 +0200 Subject: [PATCH 7/8] changed all __main__ scripts to console_main() functions to be used as entry points --- __init__.py | Bin 1024 -> 0 bytes analysis/power_spectrum.py | 9 +++++++-- analysis/slices.py | 8 ++++++-- main.py | 9 +++++++-- scripts/convert_snapshot_to_density.py | 9 ++++++--- scripts/field_to_field.py | 9 ++++++--- scripts/gather_tiles.py | 10 +++++++--- scripts/scola_submit.py | 9 ++++++--- 8 files changed, 45 insertions(+), 18 deletions(-) diff --git a/__init__.py b/__init__.py index 06d7405020018ddf3cacee90fd4af10487da3d20..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 GIT binary patch literal 0 HcmV?d00001 literal 1024 ScmZQz7zLvtFd70QH3R?z00031 diff --git a/analysis/power_spectrum.py b/analysis/power_spectrum.py index 2cbc40f..f47466e 100644 --- a/analysis/power_spectrum.py +++ b/analysis/power_spectrum.py @@ -263,7 +263,9 @@ def get_ylims_and_yticks(ylims): return ylims, yticks -if __name__ == "__main__": + + +def console_main(): from argparse import ArgumentParser parser = ArgumentParser(description='Plot power spectra of fields') @@ -403,5 +405,8 @@ if __name__ == "__main__": fig.savefig(args.output) else: fig.savefig(args.directory+'power_spectrum.png') - + +if __name__ == "__main__": + console_main() + \ No newline at end of file diff --git a/analysis/slices.py b/analysis/slices.py index e47eaff..cb78bbc 100755 --- a/analysis/slices.py +++ b/analysis/slices.py @@ -149,8 +149,7 @@ def plot_imshow_diff(data_list, return fig, axes - -if __name__ == "__main__": +def console_main(): from argparse import ArgumentParser parser = ArgumentParser(description='Comparisons of fields slices.') @@ -223,3 +222,8 @@ if __name__ == "__main__": fig.savefig(args.output,bbox_inches='tight') else: fig.savefig(args.directory+'slices.jpg',bbox_inches='tight') + + + +if __name__ == "__main__": + console_main() diff --git a/main.py b/main.py index 357f93a..a3e7859 100644 --- a/main.py +++ b/main.py @@ -220,7 +220,7 @@ def check_consistency(card_dict, mode): raise ValueError(f"ModulePMCOLA is not 1: ModulePMCOLA={card_dict["ModulePMCOLA"]}") -if __name__ == "__main__": +def console_main(): from argparse import ArgumentParser from args_main import register_arguments_main from timestepping import register_arguments_timestepping, main_timestepping @@ -238,4 +238,9 @@ if __name__ == "__main__": register_arguments_card(parser) register_arguments_cosmo(parser) parsed_args = parser.parse_args() - main(parsed_args) \ No newline at end of file + main(parsed_args) + + +if __name__ == "__main__": + console_main() + \ No newline at end of file diff --git a/scripts/convert_snapshot_to_density.py b/scripts/convert_snapshot_to_density.py index aed11ee..dadefed 100644 --- a/scripts/convert_snapshot_to_density.py +++ b/scripts/convert_snapshot_to_density.py @@ -36,8 +36,7 @@ def convert_snapshot_to_density(snapshot_path, output_path, N=None, corner=(0.0, print("Done.") - -if __name__ == "__main__": +def console_main(): parser = argparse.ArgumentParser(description="Convert snapshot to density.") parser.add_argument( "-S", @@ -76,4 +75,8 @@ if __name__ == "__main__": output_path=args.output, N=args.N, corner=args.corner, - ) \ No newline at end of file + ) + + +if __name__ == "__main__": + console_main() \ No newline at end of file diff --git a/scripts/field_to_field.py b/scripts/field_to_field.py index b2bae83..c9137e2 100644 --- a/scripts/field_to_field.py +++ b/scripts/field_to_field.py @@ -115,8 +115,7 @@ def field_to_field( print("Done.") - -if __name__ == "__main__": +def console_main(): import argparse parser = argparse.ArgumentParser(description="Convert a field from one size to another.") parser.add_argument("-i","--input_file", type=str, help="Input field file") @@ -128,4 +127,8 @@ if __name__ == "__main__": parser.add_argument("-BC","--boundary_conditions", type=int, default=1, help="Boundary conditions (1: periodic, 3: non-periodic)") args = parser.parse_args() - field_to_field(args.input_file, args.output_file, args.output_size, args.output_L, args.output_dpm, args.output_corner, args.boundary_conditions) \ No newline at end of file + field_to_field(args.input_file, args.output_file, args.output_size, args.output_L, args.output_dpm, args.output_corner, args.boundary_conditions) + + +if __name__ == "__main__": + console_main() \ No newline at end of file diff --git a/scripts/gather_tiles.py b/scripts/gather_tiles.py index a71a273..13d3eda 100644 --- a/scripts/gather_tiles.py +++ b/scripts/gather_tiles.py @@ -99,8 +99,7 @@ def gather_tiles(folder, tile_base, L, Np, N_TILES, buffer): - -if __name__ == "__main__": +def console_main(): parser = argparse.ArgumentParser(description="Gather density from tiles.") parser.add_argument("-d","--folder", type=str, default="./", help="Folder containing the tiles") parser.add_argument("--tile_base", type=str, default="sCOLA_tile", help="Base name of the tiles") @@ -121,4 +120,9 @@ if __name__ == "__main__": Np_tile = Np//N_TILES dpm = L/Np_tile - gather_tiles(folder, tile_base, L, Np, N_TILES, buffer) \ No newline at end of file + gather_tiles(folder, tile_base, L, Np, N_TILES, buffer) + + + +if __name__ == "__main__": + console_main() \ No newline at end of file diff --git a/scripts/scola_submit.py b/scripts/scola_submit.py index 06a8702..e68e56f 100644 --- a/scripts/scola_submit.py +++ b/scripts/scola_submit.py @@ -462,9 +462,7 @@ def scola_submit(directory, - - -if __name__ == "__main__": +def console_main(): parser = argparse.ArgumentParser(description="Submit slurm jobs for sCOLA tiles.") parser.add_argument("-d", "--directory", type=str, default="./", help="Main directory where the output will be saved (if other dir and filenames are not specified).") @@ -496,4 +494,9 @@ if __name__ == "__main__": +if __name__ == "__main__": + console_main() + + + \ No newline at end of file From cd5546899780dffaf10b0746eabe0d5c2c8f7d7f Mon Sep 17 00:00:00 2001 From: Mayeul Aubin Date: Tue, 27 May 2025 14:49:20 +0200 Subject: [PATCH 8/8] reorganising all files as a pip installable package --- sbmy_control.egg-info/PKG-INFO | 35 ++++++++++++++++ sbmy_control.egg-info/SOURCES.txt | 30 +++++++++++++ sbmy_control.egg-info/dependency_links.txt | 1 + sbmy_control.egg-info/entry_points.txt | 8 ++++ sbmy_control.egg-info/requires.txt | 5 +++ sbmy_control.egg-info/top_level.txt | 1 + .gitignore => sbmy_control/.gitignore | 0 ICs.py => sbmy_control/ICs.py | 0 __init__.py => sbmy_control/__init__.py | 0 .../analysis}/__init__.py | 0 .../analysis}/colormaps.py | 0 .../analysis}/power_spectrum.py | 0 {analysis => sbmy_control/analysis}/slices.py | 0 args_main.py => sbmy_control/args_main.py | 0 .../cosmo_params.py | 0 low_level.py => sbmy_control/low_level.py | 0 main.py => sbmy_control/main.py | 0 monofonic.py => sbmy_control/monofonic.py | 0 .../parameters_card.py | 0 .../parameters_monofonic.py | 0 .../progress_bar.py | 0 scola.py => sbmy_control/scola.py | 0 {scripts => sbmy_control/scripts}/__init__.py | 0 .../scripts}/convert_snapshot_to_density.py | 0 .../scripts}/field_to_field.py | 0 .../scripts}/gather_tiles.py | 0 .../scripts}/scola_submit.py | 0 simbelmyne.py => sbmy_control/simbelmyne.py | 0 .../slurm_submission.py | 0 .../timestepping.py | 0 setup.py | 42 +++++++++++++++++++ 31 files changed, 122 insertions(+) create mode 100644 sbmy_control.egg-info/PKG-INFO create mode 100644 sbmy_control.egg-info/SOURCES.txt create mode 100644 sbmy_control.egg-info/dependency_links.txt create mode 100644 sbmy_control.egg-info/entry_points.txt create mode 100644 sbmy_control.egg-info/requires.txt create mode 100644 sbmy_control.egg-info/top_level.txt rename .gitignore => sbmy_control/.gitignore (100%) rename ICs.py => sbmy_control/ICs.py (100%) rename __init__.py => sbmy_control/__init__.py (100%) rename {analysis => sbmy_control/analysis}/__init__.py (100%) rename {analysis => sbmy_control/analysis}/colormaps.py (100%) rename {analysis => sbmy_control/analysis}/power_spectrum.py (100%) rename {analysis => sbmy_control/analysis}/slices.py (100%) rename args_main.py => sbmy_control/args_main.py (100%) rename cosmo_params.py => sbmy_control/cosmo_params.py (100%) rename low_level.py => sbmy_control/low_level.py (100%) rename main.py => sbmy_control/main.py (100%) rename monofonic.py => sbmy_control/monofonic.py (100%) rename parameters_card.py => sbmy_control/parameters_card.py (100%) rename parameters_monofonic.py => sbmy_control/parameters_monofonic.py (100%) rename progress_bar.py => sbmy_control/progress_bar.py (100%) rename scola.py => sbmy_control/scola.py (100%) rename {scripts => sbmy_control/scripts}/__init__.py (100%) rename {scripts => sbmy_control/scripts}/convert_snapshot_to_density.py (100%) rename {scripts => sbmy_control/scripts}/field_to_field.py (100%) rename {scripts => sbmy_control/scripts}/gather_tiles.py (100%) rename {scripts => sbmy_control/scripts}/scola_submit.py (100%) rename simbelmyne.py => sbmy_control/simbelmyne.py (100%) rename slurm_submission.py => sbmy_control/slurm_submission.py (100%) rename timestepping.py => sbmy_control/timestepping.py (100%) create mode 100644 setup.py diff --git a/sbmy_control.egg-info/PKG-INFO b/sbmy_control.egg-info/PKG-INFO new file mode 100644 index 0000000..f3ef9c4 --- /dev/null +++ b/sbmy_control.egg-info/PKG-INFO @@ -0,0 +1,35 @@ +Metadata-Version: 2.4 +Name: sbmy_control +Version: 0.1.0 +Summary: Simbelmyne control package +Home-page: https://git.aquila-consortium.org/maubin/sbmy_control +Author: Mayeul Aubin +Author-email: mayeul.aubin@iap.fr +License: GPL-3.0 +Classifier: Development Status :: 3 - Alpha +Classifier: Intended Audience :: Science/Research +Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Requires-Python: >=3.8 +Description-Content-Type: text/markdown +Requires-Dist: pysbmy +Requires-Dist: numpy +Requires-Dist: matplotlib +Requires-Dist: h5py +Requires-Dist: tqdm +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: description-content-type +Dynamic: home-page +Dynamic: license +Dynamic: requires-dist +Dynamic: requires-python +Dynamic: summary + +This package provides control functionalities for Simbelmyne. It allows to create automatically all the required files and scripts to run a N-body simulation with Simbelmyne, using monofonIC for initial conditions. The subpackage `analysis` provides tools to analyze the results of the simulation (slices and power spectra), while the subpackage `scripts` includes tools to handle snapshots, tiles and density fields. diff --git a/sbmy_control.egg-info/SOURCES.txt b/sbmy_control.egg-info/SOURCES.txt new file mode 100644 index 0000000..5fadffd --- /dev/null +++ b/sbmy_control.egg-info/SOURCES.txt @@ -0,0 +1,30 @@ +setup.py +sbmy_control/ICs.py +sbmy_control/__init__.py +sbmy_control/args_main.py +sbmy_control/cosmo_params.py +sbmy_control/low_level.py +sbmy_control/main.py +sbmy_control/monofonic.py +sbmy_control/parameters_card.py +sbmy_control/parameters_monofonic.py +sbmy_control/progress_bar.py +sbmy_control/scola.py +sbmy_control/simbelmyne.py +sbmy_control/slurm_submission.py +sbmy_control/timestepping.py +sbmy_control.egg-info/PKG-INFO +sbmy_control.egg-info/SOURCES.txt +sbmy_control.egg-info/dependency_links.txt +sbmy_control.egg-info/entry_points.txt +sbmy_control.egg-info/requires.txt +sbmy_control.egg-info/top_level.txt +sbmy_control/analysis/__init__.py +sbmy_control/analysis/colormaps.py +sbmy_control/analysis/power_spectrum.py +sbmy_control/analysis/slices.py +sbmy_control/scripts/__init__.py +sbmy_control/scripts/convert_snapshot_to_density.py +sbmy_control/scripts/field_to_field.py +sbmy_control/scripts/gather_tiles.py +sbmy_control/scripts/scola_submit.py \ No newline at end of file diff --git a/sbmy_control.egg-info/dependency_links.txt b/sbmy_control.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/sbmy_control.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/sbmy_control.egg-info/entry_points.txt b/sbmy_control.egg-info/entry_points.txt new file mode 100644 index 0000000..2481b2f --- /dev/null +++ b/sbmy_control.egg-info/entry_points.txt @@ -0,0 +1,8 @@ +[console_scripts] +convert_snapshot_to_density = sbmy_control.scripts.convert_snapshot_to_density:console_main +field_to_field = sbmy_control.scripts.field_to_field:console_main +gather_tiles = sbmy_control.scripts.gather_tiles:console_main +power_spectrum = sbmy_control.analysis.power_spectrum:console_main +sbmy_control = sbmy_control.main:console_main +scola_submit = sbmy_control.scripts.scola_submit:console_main +slices = sbmy_control.analysis.slices:console_main diff --git a/sbmy_control.egg-info/requires.txt b/sbmy_control.egg-info/requires.txt new file mode 100644 index 0000000..ad720a3 --- /dev/null +++ b/sbmy_control.egg-info/requires.txt @@ -0,0 +1,5 @@ +pysbmy +numpy +matplotlib +h5py +tqdm diff --git a/sbmy_control.egg-info/top_level.txt b/sbmy_control.egg-info/top_level.txt new file mode 100644 index 0000000..8f3970f --- /dev/null +++ b/sbmy_control.egg-info/top_level.txt @@ -0,0 +1 @@ +sbmy_control diff --git a/.gitignore b/sbmy_control/.gitignore similarity index 100% rename from .gitignore rename to sbmy_control/.gitignore diff --git a/ICs.py b/sbmy_control/ICs.py similarity index 100% rename from ICs.py rename to sbmy_control/ICs.py diff --git a/__init__.py b/sbmy_control/__init__.py similarity index 100% rename from __init__.py rename to sbmy_control/__init__.py diff --git a/analysis/__init__.py b/sbmy_control/analysis/__init__.py similarity index 100% rename from analysis/__init__.py rename to sbmy_control/analysis/__init__.py diff --git a/analysis/colormaps.py b/sbmy_control/analysis/colormaps.py similarity index 100% rename from analysis/colormaps.py rename to sbmy_control/analysis/colormaps.py diff --git a/analysis/power_spectrum.py b/sbmy_control/analysis/power_spectrum.py similarity index 100% rename from analysis/power_spectrum.py rename to sbmy_control/analysis/power_spectrum.py diff --git a/analysis/slices.py b/sbmy_control/analysis/slices.py similarity index 100% rename from analysis/slices.py rename to sbmy_control/analysis/slices.py diff --git a/args_main.py b/sbmy_control/args_main.py similarity index 100% rename from args_main.py rename to sbmy_control/args_main.py diff --git a/cosmo_params.py b/sbmy_control/cosmo_params.py similarity index 100% rename from cosmo_params.py rename to sbmy_control/cosmo_params.py diff --git a/low_level.py b/sbmy_control/low_level.py similarity index 100% rename from low_level.py rename to sbmy_control/low_level.py diff --git a/main.py b/sbmy_control/main.py similarity index 100% rename from main.py rename to sbmy_control/main.py diff --git a/monofonic.py b/sbmy_control/monofonic.py similarity index 100% rename from monofonic.py rename to sbmy_control/monofonic.py diff --git a/parameters_card.py b/sbmy_control/parameters_card.py similarity index 100% rename from parameters_card.py rename to sbmy_control/parameters_card.py diff --git a/parameters_monofonic.py b/sbmy_control/parameters_monofonic.py similarity index 100% rename from parameters_monofonic.py rename to sbmy_control/parameters_monofonic.py diff --git a/progress_bar.py b/sbmy_control/progress_bar.py similarity index 100% rename from progress_bar.py rename to sbmy_control/progress_bar.py diff --git a/scola.py b/sbmy_control/scola.py similarity index 100% rename from scola.py rename to sbmy_control/scola.py diff --git a/scripts/__init__.py b/sbmy_control/scripts/__init__.py similarity index 100% rename from scripts/__init__.py rename to sbmy_control/scripts/__init__.py diff --git a/scripts/convert_snapshot_to_density.py b/sbmy_control/scripts/convert_snapshot_to_density.py similarity index 100% rename from scripts/convert_snapshot_to_density.py rename to sbmy_control/scripts/convert_snapshot_to_density.py diff --git a/scripts/field_to_field.py b/sbmy_control/scripts/field_to_field.py similarity index 100% rename from scripts/field_to_field.py rename to sbmy_control/scripts/field_to_field.py diff --git a/scripts/gather_tiles.py b/sbmy_control/scripts/gather_tiles.py similarity index 100% rename from scripts/gather_tiles.py rename to sbmy_control/scripts/gather_tiles.py diff --git a/scripts/scola_submit.py b/sbmy_control/scripts/scola_submit.py similarity index 100% rename from scripts/scola_submit.py rename to sbmy_control/scripts/scola_submit.py diff --git a/simbelmyne.py b/sbmy_control/simbelmyne.py similarity index 100% rename from simbelmyne.py rename to sbmy_control/simbelmyne.py diff --git a/slurm_submission.py b/sbmy_control/slurm_submission.py similarity index 100% rename from slurm_submission.py rename to sbmy_control/slurm_submission.py diff --git a/timestepping.py b/sbmy_control/timestepping.py similarity index 100% rename from timestepping.py rename to sbmy_control/timestepping.py diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..ed3897f --- /dev/null +++ b/setup.py @@ -0,0 +1,42 @@ +from setuptools import setup, find_packages +setup( + name='sbmy_control', + version='0.1.0', + author='Mayeul Aubin', + author_email='mayeul.aubin@iap.fr', + description='Simbelmyne control package', + long_description='This package provides control functionalities for Simbelmyne. It allows to create automatically all the required files and scripts to run a N-body simulation with Simbelmyne, using monofonIC for initial conditions. The subpackage `analysis` provides tools to analyze the results of the simulation (slices and power spectra), while the subpackage `scripts` includes tools to handle snapshots, tiles and density fields.', + long_description_content_type='text/markdown', + url='https://git.aquila-consortium.org/maubin/sbmy_control', + packages=find_packages(), + install_requires=[ + 'pysbmy', + 'numpy', + 'matplotlib', + 'h5py', + 'tqdm', + ], + license='GPL-3.0', + classifiers=[ + 'Development Status :: 3 - Alpha', + 'Intended Audience :: Science/Research', + 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', + ], + python_requires='>=3.8', + entry_points={ + 'console_scripts': [ + 'sbmy_control=sbmy_control.main:console_main', + 'slices=sbmy_control.analysis.slices:console_main', + 'power_spectrum=sbmy_control.analysis.power_spectrum:console_main', + 'field_to_field=sbmy_control.scripts.field_to_field:console_main', + 'gather_tiles=sbmy_control.scripts.gather_tiles:console_main', + 'convert_snapshot_to_density=sbmy_control.scripts.convert_snapshot_to_density:console_main', + 'scola_submit=sbmy_control.scripts.scola_submit:console_main', + ], + }, +) \ No newline at end of file