From 5e0090545f7f3d4f14fd56069bd304dd5c194b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Sierro?= Date: Mon, 20 Mar 2023 15:26:55 +0100 Subject: [PATCH] started big cleanup --- MANIFEST.in | 1 - README.md | 2 + formulas/main.tex | 34 ----- pyproject.toml | 26 ++++ requirements.txt | 6 - setup.cfg | 42 ------ setup.py | 7 +- src/scgenerator/cli/__init__.py | 0 src/scgenerator/cli/__main__.py | 4 - src/scgenerator/cli/cli.py | 248 -------------------------------- 10 files changed, 33 insertions(+), 337 deletions(-) delete mode 100644 MANIFEST.in delete mode 100644 formulas/main.tex create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 setup.cfg delete mode 100644 src/scgenerator/cli/__init__.py delete mode 100644 src/scgenerator/cli/__main__.py delete mode 100644 src/scgenerator/cli/cli.py diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index bd5a478..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1 +0,0 @@ -include src/scgenerator/data/* \ No newline at end of file diff --git a/README.md b/README.md index 4541f03..09f8f1e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# THIS README IS NOT UP TO DATE + It is recommended to import scgenerator in the following manner : `import scgenerator as sc` diff --git a/formulas/main.tex b/formulas/main.tex deleted file mode 100644 index c8e3f1f..0000000 --- a/formulas/main.tex +++ /dev/null @@ -1,34 +0,0 @@ -\documentclass[preview]{standalone} -\usepackage{siunitx} -\usepackage{tikz} -\usepackage[siunitx]{circuitikz} -\usepackage{babel} -\usepackage{acronym} -\newcommand{\At}{A(z, t)} -\newcommand{\Et}{E(z, t)} -\newcommand{\Ew}{\tilde{E}(z, \omega)} -\newcommand{\PNL}{\tilde{\mathrm{P}}^\mathrm{NL}} - -\begin{document} -Complex envelope such that $|A|^2$ is in W with E in V/m~: -\begin{equation} - \At = \sqrt{\frac12 \epsilon_0 c n A_\mathrm{eff}} \Et -\end{equation} - -Equations with E in V/m -\begin{equation} - \frac{\partial \Ew}{\partial z} = i\left(\beta(\omega) - \frac{\omega}{\nu} \right)\Ew + i \frac{\omega^2}{2c\epsilon_0 \beta(\omega)}\PNL(z, \omega) -\end{equation} - -\begin{equation} - \tau = t - \frac{z}{\nu} - \,, \quad \xi = z - \,, \quad \frac{\partial}{\partial z} = -\frac1{\nu}\frac{\partial}{\partial \tau} + \frac{\partial}{\partial \xi} = -\frac{i \omega}{\nu} + \frac{\partial}{\partial \xi} - \,, \quad \frac{\partial}{\partial t} = \frac{\partial}{\partial \tau} -\end{equation} -$\Rightarrow$ -\begin{equation} - \frac{\partial \Ew}{\partial z} = i\beta(\omega)\Ew + i \frac{\omega^2}{2c\epsilon_0 \beta(\omega)}\PNL(z, \omega) -\end{equation} - -\end{document} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..89d06eb --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,26 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[project] +name = "scgenerator" +version = "0.3.0" +description = "Simulate nonlinear pulse propagation in optical fibers" +readme = "README.md" +authors = [{ name = "Benoit Sierro", email = "benoit.sierro@iap.unibe.ch" }] +license = "MIT" +classifiers = [ + "License :: OSI Approved :: MIT", + "Programming Language :: Python :: 3", +] +requires-python = ">=3.10" +keywords = ["nonlinear", "fiber optics", "simulation", "runge-kutta"] +dependencies = ["numpy >= 1.23", "tomli", "numba", "pydantic", "tqdm"] + +[tool.ruff] +line-length = 100 +[tool.ruff.pydocstyle] +convention = "numpy" + +[tool.black] +line-length = 100 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index a0d470c..0000000 --- a/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -numpy -matplotlib -scipy -tomli -tomli-w -tqdm \ No newline at end of file diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 5f8d708..0000000 --- a/setup.cfg +++ /dev/null @@ -1,42 +0,0 @@ -[metadata] -name = scgenerator -version = 0.2.8dev -description = Simulated PCFs and supercontinuum generation ! -author = Benoit Sierro -author_email = benoit.sierro@iap.unibe.ch -long_description = file: README.md -long_description_content_type = text/markdown -keywords = supercontinuum, nonlinear optics, GNLSE -license = MIT -classifiers = - License :: OSI Approved :: MIT - Programming Language :: Python :: 3 - -[options] -zip_safe = False -include_package_data = True -packages = find: -package_dir = - = src -install_requires = - numpy - numba - matplotlib - scipy - tomli - tomli-w - tqdm - - -[options.package_data] -scgenerator = - data/hr_t.npz - data/materials.toml - -[options.packages.find] -where = src - -[options.entry_points] -console_scripts = - scgenerator = scgenerator.cli.cli:main - sc-submit = scgenerator.scripts.slurm_submit:main diff --git a/setup.py b/setup.py index fc1f76c..bac24a4 100644 --- a/setup.py +++ b/setup.py @@ -1,3 +1,6 @@ -from setuptools import setup +#!/usr/bin/env python -setup() \ No newline at end of file +import setuptools + +if __name__ == "__main__": + setuptools.setup() diff --git a/src/scgenerator/cli/__init__.py b/src/scgenerator/cli/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/scgenerator/cli/__main__.py b/src/scgenerator/cli/__main__.py deleted file mode 100644 index 9ae637f..0000000 --- a/src/scgenerator/cli/__main__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .cli import main - -if __name__ == "__main__": - main() diff --git a/src/scgenerator/cli/cli.py b/src/scgenerator/cli/cli.py deleted file mode 100644 index 363bd46..0000000 --- a/src/scgenerator/cli/cli.py +++ /dev/null @@ -1,248 +0,0 @@ -import argparse -import os -import re -from collections import ChainMap -from pathlib import Path - -import matplotlib.pyplot as plt -import numpy as np - -from .. import const, env, scripts, utils -from ..logger import get_logger -from ..physics.fiber import dispersion_coefficients -from ..physics.simulate import SequencialSimulations, run_simulation - -try: - import ray -except ImportError: - ray = None - - -def set_env_variables(cmd_line_args: dict[str, str]): - cm = ChainMap(cmd_line_args, os.environ) - for env_key in env.global_config: - k = env_key.replace(env.ENVIRON_KEY_BASE, "").lower() - v = cm.get(k) - if v is not None: - os.environ[env_key] = str(v) - - -def create_parser(): - parser = argparse.ArgumentParser(description="scgenerator command", prog="scgenerator") - subparsers = parser.add_subparsers(help="sub-command help") - - for key, args in env.global_config.items(): - names = ["--" + key.replace(env.ENVIRON_KEY_BASE, "").replace("_", "-").lower()] - if "short_name" in args: - names.append(args["short_name"]) - parser.add_argument( - *names, **{k: v for k, v in args.items() if k not in {"short_name", "type"}} - ) - parser.add_argument("--version", action="version", version=const.__version__) - - run_parser = subparsers.add_parser("run", help="run a simulation from a config file") - run_parser.add_argument("config", help="path(s) to the toml configuration file(s)") - run_parser.set_defaults(func=run_sim) - - merge_parser = subparsers.add_parser("merge", help="merge simulation results") - merge_parser.add_argument( - "path", help="path to the final simulation folder containing 'initial_config.toml'" - ) - merge_parser.set_defaults(func=merge) - - plot_parser = subparsers.add_parser("plot", help="generate basic plots of a simulation") - plot_parser.add_argument( - "sim_dir", - help="path to the root directory of the simulation (i.e. the " - "directory directly containing 'initial_config0.toml'", - ) - plot_parser.add_argument( - "spectrum_limits", - nargs=argparse.REMAINDER, - help="comma-separated list of left limit, right limit and unit. " - "One plot is made for each limit set provided. Example : 600,1200,nm or -2,2,ps", - ) - plot_parser.add_argument("--options", "-o", default=None) - plot_parser.add_argument( - "--show", action="store_true", help="show the plots instead of saving them" - ) - plot_parser.set_defaults(func=plot_all) - - dispersion_parser = subparsers.add_parser( - "dispersion", help="show the dispersion of the given config" - ) - dispersion_parser.add_argument("config", help="path to the config file") - dispersion_parser.add_argument( - "--limits", "-l", default=None, type=float, nargs=2, help="left and right limits in nm" - ) - dispersion_parser.set_defaults(func=plot_dispersion) - - init_pulse_plot_parser = subparsers.add_parser( - "plot-spec-field", help="plot the initial field and spectrum" - ) - init_pulse_plot_parser.add_argument("config", help="path to the config file") - init_pulse_plot_parser.add_argument( - "--wavelength-limits", - "-l", - default=None, - type=float, - nargs=2, - help="left and right limits in nm", - ) - init_pulse_plot_parser.add_argument( - "--time-limit", "-t", default=None, type=float, help="time axis limit in fs" - ) - init_pulse_plot_parser.set_defaults(func=plot_init_field_spec) - - init_plot_parser = subparsers.add_parser("plot-init", help="plot initial values") - init_plot_parser.add_argument("config", help="path to the config file") - init_plot_parser.add_argument( - "--dispersion-limits", - "-d", - default=None, - type=float, - nargs=2, - help="left and right limits for dispersion plots in nm", - ) - init_plot_parser.add_argument( - "--time-limit", "-t", default=None, type=float, help="time axis limit in fs" - ) - init_plot_parser.add_argument( - "--wavelength-limits", - "-l", - default=None, - nargs=2, - type=float, - help="wavelength axis limit in nm", - ) - init_plot_parser.set_defaults(func=plot_init) - - preview_parser = subparsers.add_parser("preview", help="preview a currently running simulation") - plc_hld = "XX" - preview_parser.add_argument( - "path", help=f"path to the directory containing {const.SPEC1_FN.format(plc_hld)!r}" - ) - preview_parser.add_argument( - "spectrum_limits", - nargs=argparse.REMAINDER, - help="comma-separated list of left limit, right limit and unit. " - "One plot is made for each limit set provided. Example : 600,1200,nm or -2,2,ps", - ) - preview_parser.set_defaults(func=preview) - - return parser - - -def main(): - parser = create_parser() - args = parser.parse_args() - - set_env_variables({k: v for k, v in vars(args).items() if v is not None}) - - args.func(args) - - logger = get_logger(__name__) - logger.info(f"dispersion cache : {dispersion_coefficients.cache_info()}") - - -def run_sim(args): - method = prep_ray() - run_simulation(args.config, method=method) - # if sys.platform == "darwin" and sys.stdout.isatty(): - # subprocess.run( - # [ - # "osascript", - # "-e", - # 'tell app "System Events" to display dialog "simulation finished !"', - # ], - # stdout=subprocess.DEVNULL, - # stderr=subprocess.DEVNULL, - # ) - - -def merge(args): - path_trees = utils.build_path_trees(Path(args.path)) - - output = env.output_path() - if output is None: - output = path_trees[0][-1][0].parent.name + " merged" - - utils.merge(output, path_trees) - - -def preview(args): - for path in utils.simulations_list(args.path): - lims = args.spectrum_limits or [None, "-10,10,ps"] - for lim in lims: - scripts.partial_plot(path, lim) - plt.show() - plt.close() - - -def prep_ray(): - logger = get_logger(__name__) - if ray: - if env.get(env.START_RAY): - init_str = ray.init() - elif not env.get(env.NO_RAY): - try: - init_str = ray.init( - address="auto", - _redis_password=os.environ.get("redis_password", "caco1234"), - ) - logger.info(init_str) - except ConnectionError as e: - logger.warning(e) - return SequencialSimulations if env.get(env.NO_RAY) else None - - -def plot_all(args): - opts = {} - if args.options is not None: - opts |= dict([o.split("=")[:2] for o in re.split("[, ]+", args.options)]) - root = Path(args.sim_dir).resolve() - scripts.plot_all(root, args.spectrum_limits, show=args.show, **opts) - - -def plot_init_field_spec(args): - if args.wavelength_limits is None: - l = None - else: - l = list(args.wavelength_limits) - - if args.time_limit is None: - t = None - else: - t = [-args.time_limit, args.time_limit] - - scripts.plot_init_field_spec(args.config, t, l) - - -def plot_init(args): - if args.wavelength_limits is None: - l = None - else: - l = list(args.wavelength_limits) - if args.dispersion_limits is None: - d = None - else: - d = list(args.dispersion_limits) - - if args.time_limit is None: - t = None - else: - t = [-args.time_limit, args.time_limit] - - scripts.plot_init(args.config, t, l, d) - - -def plot_dispersion(args): - if args.limits is None: - lims = None - else: - lims = 1e-9 * np.array(args.limits, dtype=float) - scripts.plot_dispersion(args.config, lims) - - -if __name__ == "__main__": - main()