Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
ba3d2e6
Remove data_files entry
benoit-dubreuil Jun 29, 2022
3bc144e
Added default util
benoit-dubreuil Jun 29, 2022
e260acc
Added SingularityConfig class
benoit-dubreuil Jun 29, 2022
d7d6966
Format
benoit-dubreuil Jun 29, 2022
d6cf37f
Integrated SingularityConfig into legacy runner
benoit-dubreuil Jun 29, 2022
49d6d9f
Format
benoit-dubreuil Jun 29, 2022
14481bd
Format
benoit-dubreuil Jun 29, 2022
0bde314
Added singularity exec attribute to config
benoit-dubreuil Jun 29, 2022
8714a5e
Typo
benoit-dubreuil Jun 29, 2022
45247c0
Refactored config to include singularity attr
benoit-dubreuil Jun 29, 2022
825e4dc
Final integration of config in legacy runner
benoit-dubreuil Jun 29, 2022
2240b49
Final integration of config in new runner
benoit-dubreuil Jun 29, 2022
53b84fa
Removed deprecated config files
benoit-dubreuil Jun 29, 2022
19ef8c8
Import SingularityConfig when importing runner pkg
benoit-dubreuil Jun 29, 2022
d0bb89a
Bumped version
benoit-dubreuil Jun 29, 2022
f5b1a30
Merge pull request #1 from benoit-dubreuil/improv/remove-top-level-co…
benoit-dubreuil Jun 29, 2022
5839e78
Prefixed module with `_` so it has a different name than its pkg
benoit-dubreuil Jul 1, 2022
59019ef
Prefixed module with `_` so it has a different name than its pkg
benoit-dubreuil Jul 1, 2022
73b58f8
Prefixed module with `_` so it has a different name than its pkg
benoit-dubreuil Jul 1, 2022
54fe017
Merge pull request #2 from benoit-dubreuil/fix/modules-same-name-as-pkg
benoit-dubreuil Jul 1, 2022
bd10859
Bumped version
benoit-dubreuil Jul 1, 2022
109f4b4
Fragment os imports
benoit-dubreuil Jul 3, 2022
ec44af8
Use import instead of import-from for os.path.basename
benoit-dubreuil Jul 3, 2022
60960b1
Use import instead of import-from for os.path
benoit-dubreuil Jul 3, 2022
ed2d7b6
Fixed `_create_outputs` name shadowing of `os.path` due to param `path`
benoit-dubreuil Jul 3, 2022
9db96aa
Followed recommendation to make `_create_outputs` static
benoit-dubreuil Jul 3, 2022
b112af3
Merge pull request #3 from benoit-dubreuil/fix/param-import-same-names
benoit-dubreuil Jul 3, 2022
bcf88b5
Bumped version
benoit-dubreuil Jul 3, 2022
b786c19
Fixed str.join of Path results in an error
benoit-dubreuil Jul 4, 2022
26edbb5
Fixed str.join of Path results in an error
benoit-dubreuil Jul 4, 2022
d0348f9
Merge pull request #4 from benoit-dubreuil/fix/str-join-takes-path
benoit-dubreuil Jul 4, 2022
f7f73f5
Bumped version
benoit-dubreuil Jul 4, 2022
a36600c
Use Path instead of PurePath
benoit-dubreuil Jul 4, 2022
d078335
Merge branch 'fix/pathlib-compatibility'
benoit-dubreuil Jul 4, 2022
d009dae
Added PathLike typing
benoit-dubreuil Jul 4, 2022
1bde0a5
Time to switch to pathlib only
benoit-dubreuil Jul 4, 2022
f3f55f9
Format
benoit-dubreuil Jul 4, 2022
cce35f8
Use pathlib in geomtetry_handler
benoit-dubreuil Jul 4, 2022
3de9dbe
Added typing to generate_json_configuration_files
benoit-dubreuil Jul 4, 2022
d7a10b2
`__file__` is optional; use `__name__` instead
benoit-dubreuil Jul 4, 2022
c982378
Resolve simulation path
benoit-dubreuil Jul 4, 2022
bc90825
logger var should be private
benoit-dubreuil Jul 4, 2022
7dfa1f6
Catch resolve exception
benoit-dubreuil Jul 4, 2022
0c7b2c8
Use pathlib in `logging`
benoit-dubreuil Jul 4, 2022
09824b1
Replaced `file_path` and `base_file` for typed `file`
benoit-dubreuil Jul 4, 2022
20a6322
Finally, decided to keep API
benoit-dubreuil Jul 4, 2022
d26f367
Type annotate paths in SimulationInfos
benoit-dubreuil Jul 4, 2022
6aeaab4
Format
benoit-dubreuil Jul 4, 2022
69b40ae
Fixed filename type hints
benoit-dubreuil Jul 4, 2022
7d826aa
Integrated pathlib into legacy runner
benoit-dubreuil Jul 4, 2022
a7ae7a1
Format
benoit-dubreuil Jul 5, 2022
ec4100e
Replaced `os.path.join` for `pathlib`'s `/` operator
benoit-dubreuil Jul 5, 2022
730a607
Replaced `os.path.join` for `pathlib`'s `/` operator
benoit-dubreuil Jul 5, 2022
b340772
Removed all usage of `os` in simulation runner
benoit-dubreuil Jul 5, 2022
a1b1508
Integrated pathlib into documentation
benoit-dubreuil Jul 5, 2022
aafb90e
Replaced `exists` usage in legacy runner
benoit-dubreuil Jul 5, 2022
0f2f49d
Format
benoit-dubreuil Jul 5, 2022
fde952c
Fixed bad join due to type!
benoit-dubreuil Jul 5, 2022
05c2c5a
Fixed bad join due to type!
benoit-dubreuil Jul 5, 2022
671abb5
Bumped version
benoit-dubreuil Jul 5, 2022
1691a23
Merge branch 'master' into feature/path-use-pathlib
benoit-dubreuil Jul 5, 2022
556618d
Replaced `os` usage by `pathlib` in `datastore`
benoit-dubreuil Jul 5, 2022
3d4cb67
Replaced `os` usage with`path` in simulation handler
benoit-dubreuil Jul 5, 2022
0755582
Added more path type hints
benoit-dubreuil Jul 5, 2022
15f77e6
Added type hints for infos in runners
benoit-dubreuil Jul 5, 2022
52d4bcd
Fixed open path
benoit-dubreuil Jul 5, 2022
5e6976d
No need to check args namespace
benoit-dubreuil Jul 5, 2022
4aedd0b
Useless params
benoit-dubreuil Jul 5, 2022
83de825
Integrated pathlib into scripts
benoit-dubreuil Jul 5, 2022
8f47edf
Removed `os` usage in `scripts`
benoit-dubreuil Jul 5, 2022
3da34a1
Resolve paths in runners
benoit-dubreuil Jul 5, 2022
ab3bfa2
Fixed phatom output names
benoit-dubreuil Jul 5, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions config.json

This file was deleted.

13 changes: 0 additions & 13 deletions config.py

This file was deleted.

15 changes: 7 additions & 8 deletions scripts/geometry_factory.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
#!/usr/bin/env python

import argparse
import pathlib
from math import pi
from os import makedirs
from tempfile import mkdtemp

from simulator.factory import GeometryFactory, Plane


resolution = [10, 10, 10]
spacing = [2, 2, 2]

Expand Down Expand Up @@ -42,7 +41,7 @@
]


def get_geometry_parameters(output_folder, output_naming):
def get_geometry_parameters(output_folder: pathlib.Path, output_naming: str):
geometry_handler = GeometryFactory.get_geometry_handler(resolution, spacing)

bundle1 = GeometryFactory.create_bundle(
Expand Down Expand Up @@ -76,15 +75,15 @@ def get_geometry_parameters(output_folder, output_naming):
if __name__ == "__main__":
parser = argparse.ArgumentParser("Geometry Factory Example Script")
parser.add_argument(
"--out", type=str, required=False, help="Output directory for the files"
"--out", type=pathlib.Path, help="Output directory for the files"
)

args = parser.parse_args()
if "out" in args and args.out:
dest = args.out
makedirs(args.out, exist_ok=True)
if args.out:
dest: pathlib.Path = args.out
dest.mkdir(parents=True, exist_ok=True)
else:
dest = mkdtemp(prefix="geo_factory")
dest = pathlib.Path(mkdtemp(prefix="geo_factory"))

print("Script execution results are in : {}".format(dest))
get_geometry_parameters(dest, "geometry")
15 changes: 7 additions & 8 deletions scripts/geometry_factory_multi_cluster.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
#!/usr/bin/env python3

import argparse
import pathlib
from math import pi
from os import makedirs
from tempfile import mkdtemp

from simulator.factory import GeometryFactory, Plane


resolution = [10, 10, 10]
spacing = [2, 2, 2]

Expand Down Expand Up @@ -43,7 +42,7 @@
]


def run_multi_clusters(output_folder, output_naming):
def run_multi_clusters(output_folder: pathlib.Path, output_naming: str):
geometry_handler = GeometryFactory.get_geometry_handler(resolution, spacing)

bundle1 = GeometryFactory.create_bundle(
Expand Down Expand Up @@ -87,15 +86,15 @@ def run_multi_clusters(output_folder, output_naming):
if __name__ == "__main__":
parser = argparse.ArgumentParser("Geometry Multi Clusters Example Script")
parser.add_argument(
"--out", type=str, required=False, help="Output directory for the files"
"--out", type=pathlib.Path, help="Output directory for the files"
)

args = parser.parse_args()
if "out" in args and args.out:
dest = args.out
makedirs(args.out, exist_ok=True)
if args.out:
dest: pathlib.Path = args.out
dest.mkdir(parents=True, exist_ok=True)
else:
dest = mkdtemp(prefix="geo_factory_mc")
dest = pathlib.Path(mkdtemp(prefix="geo_factory_mc"))

print("Script execution results are in : {}".format(dest))
run_multi_clusters(dest, "multi_clusters")
14 changes: 7 additions & 7 deletions scripts/simulation_factory.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env python

import argparse
from os import makedirs
import pathlib
from tempfile import mkdtemp
from random import uniform

Expand All @@ -12,7 +12,7 @@
from simulator.utils.test_helpers import GeometryHelper


def get_simulation_parameters(output_folder, output_naming):
def get_simulation_parameters(output_folder: pathlib.Path, output_naming: str):
fiber_compartment = SimulationFactory.generate_fiber_stick_compartment(
0.007, 900, 80, SimulationFactory.CompartmentType.INTRA_AXONAL
)
Expand Down Expand Up @@ -71,15 +71,15 @@ def get_simulation_parameters(output_folder, output_naming):
if __name__ == "__main__":
parser = argparse.ArgumentParser("Simulation Factory Example Script")
parser.add_argument(
"--out", type=str, required=False, help="Output directory for the files"
"--out", type=pathlib.Path, help="Output directory for the files"
)

args = parser.parse_args()
if "out" in args and args.out:
dest = args.out
makedirs(args.out, exist_ok=True)
if args.out:
dest: pathlib.Path = args.out
dest.mkdir(parents=True, exist_ok=True)
else:
dest = mkdtemp(prefix="sim_factory")
dest = pathlib.Path(mkdtemp(prefix="sim_factory"))

print("Script execution results are in : {}".format(dest))
get_simulation_parameters(dest, "simulation")
17 changes: 8 additions & 9 deletions scripts/simulation_runner.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
#!/usr/bin/env python3

import argparse
from os import makedirs
from os.path import join
import pathlib
from tempfile import mkdtemp

from scripts.geometry_factory import get_geometry_parameters
from scripts.simulation_factory import get_simulation_parameters
from simulator.runner.legacy import SimulationRunner


def run_simulation(output_folder):
def run_simulation(output_folder: pathlib.Path):
geometry_parameters = get_geometry_parameters(
output_folder, "runner_test_geometry"
)
Expand All @@ -32,7 +31,7 @@ def run_simulation(output_folder):
output_folder, "runner_test_simulation_standalone"
)

standalone_output = join(output_folder, "standalone_test")
standalone_output = output_folder / "standalone_test"

runner.run_simulation_standalone(
standalone_output, output_folder, simulation_parameters, "standalone"
Expand All @@ -42,15 +41,15 @@ def run_simulation(output_folder):
if __name__ == "__main__":
parser = argparse.ArgumentParser("Simulation Runner Example Script")
parser.add_argument(
"--out", type=str, required=False, help="Output directory for the files"
"--out", type=pathlib.Path, help="Output directory for the files"
)

args = parser.parse_args()
if "out" in args and args.out:
dest = args.out
makedirs(args.out, exist_ok=True)
if args.out:
dest: pathlib.Path = args.out
dest.mkdir(parents=True, exist_ok=True)
else:
dest = mkdtemp(prefix="sim_runner")
dest = pathlib.Path(mkdtemp(prefix="sim_runner"))

print("Script execution results are in : {}".format(dest))
run_simulation(dest)
28 changes: 13 additions & 15 deletions scripts/wall_effect.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
#!/usr/bin/env python3

import argparse
import pathlib
from math import pi, sqrt
from os import makedirs
from os.path import join
from tempfile import mkdtemp

from numpy import mean

from simulator.factory import GeometryFactory, Plane, SimulationFactory
from simulator.runner.legacy import SimulationRunner


resolution = [40, 40, 40]
spacing = [1, 1, 1]
point_per_centroid = 30
Expand All @@ -26,7 +24,7 @@
cluster_center = [0.5, 0.5, 0.5]


def create_geometry(output_folder, output_naming, fibers_per_bundle):
def create_geometry(output_folder: pathlib.Path, output_naming: str, fibers_per_bundle):
geometry_handler = GeometryFactory.get_geometry_handler(resolution, spacing)

bundle1 = GeometryFactory.create_bundle(
Expand Down Expand Up @@ -54,7 +52,7 @@ def create_geometry(output_folder, output_naming, fibers_per_bundle):


def create_split_geometry(
output_folder, output_naming, fibers_per_bundle, rotation=None
output_folder: pathlib.Path, output_naming: str, fibers_per_bundle, rotation=None
):
geometry_handler = GeometryFactory.get_geometry_handler(resolution, spacing)

Expand Down Expand Up @@ -142,7 +140,7 @@ def create_simulation_b1000(geometry_handler, output_folder, output_naming):


def create_simulation_multishell(
geometry_handler, output_folder, output_naming
geometry_handler, output_folder, output_naming
):
base_multishell_simulation_handler = get_base_simulation_handler(
geometry_handler
Expand All @@ -166,18 +164,18 @@ def create_simulation_multishell(
if __name__ == "__main__":
parser = argparse.ArgumentParser("Wall Effect Example Script")
parser.add_argument(
"--out", type=str, required=False, help="Output directory for the files"
"--out", type=pathlib.Path, help="Output directory for the files"
)

args = parser.parse_args()
if "out" in args and args.out:
dest = args.out
makedirs(args.out, exist_ok=True)
dest: pathlib.Path = args.out
dest.mkdir(parents=True, exist_ok=True)
else:
dest = mkdtemp(prefix="wall_effect")
dest = pathlib.Path(mkdtemp(prefix="wall_effect"))

print("Script execution results are in : {}".format(dest))
makedirs(join(dest, "runner_outputs"), exist_ok=True)
(dest / "runner_outputs").mkdir(parents=True, exist_ok=True)

geometry_infos, geometry_handler = create_geometry(
dest, "geometry", n_fibers_per_bundle
Expand All @@ -189,7 +187,7 @@ def create_simulation_multishell(

SimulationRunner(
"simulation_b1000", geometry_infos, simulation_b1000_infos
).run(join(dest, "runner_outputs"), relative_fiber_compartment=False)
).run(dest / "runner_outputs", relative_fiber_compartment=False)

geometry_infos, geometry_handler = create_split_geometry(
dest, "geometry_split_b1", 3000
Expand All @@ -201,7 +199,7 @@ def create_simulation_multishell(

SimulationRunner(
"simulation_split_b1_b1000", geometry_infos, simulation_b1000_infos
).run(join(dest, "runner_outputs"))
).run(dest / "runner_outputs")

geometry_infos, geometry_handler = create_split_geometry(
dest, "geometry_split_b2", 3000, pi
Expand All @@ -213,12 +211,12 @@ def create_simulation_multishell(

SimulationRunner(
"simulation_split_b2_b1000", geometry_infos, simulation_b1000_infos
).run(join(dest, "runner_outputs"))
).run(dest / "runner_outputs")

simulation_multishell_infos = create_simulation_multishell(
geometry_handler, dest, "simulation_multishell"
)

SimulationRunner(
"simulation_multishell", geometry_infos, simulation_b1000_infos
).run(join(dest, "runner_outputs"))
).run(dest / "runner_outputs")
4 changes: 1 addition & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,16 @@

from simulator.utils.setup.documentation import DocCommand


if __name__ == "__main__":
setup(
name="simulation_generator",
version="1.0.0",
version="1.0.5",
packages=find_packages(exclude=("tests", "tests.*")),
url="",
license="",
author="avcaron",
author_email="",
description="",
data_files=[(".", ["config.py", "config.json"])],
scripts=list(
filter(lambda s: "init" not in s, glob.glob("scripts/*.py"))
),
Expand Down
7 changes: 7 additions & 0 deletions simulator/default.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import typing
import pathlib

SINGULARITY_PATH: typing.Final[pathlib.Path] = pathlib.Path()
SINGULARITY_NAME: typing.Final[str] = "voxsim_singularity_latest.sif"
SINGULARITY: typing.Final[pathlib.Path] = SINGULARITY_PATH / SINGULARITY_NAME
SINGULARITY_EXEC: typing.Final[str] = "singularity"
2 changes: 1 addition & 1 deletion simulator/factory/common/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
from .common import AttributeAsDictClass
from ._common import AttributeAsDictClass
File renamed without changes.
2 changes: 1 addition & 1 deletion simulator/factory/geometry_factory/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
from .geometry_factory import GeometryFactory
from ._geometry_factory import GeometryFactory
from simulator.factory.geometry_factory.utils.plane import Plane
from simulator.factory.geometry_factory.utils.rotation import Rotation
File renamed without changes.
32 changes: 20 additions & 12 deletions simulator/factory/geometry_factory/handlers/geometry_handler.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import logging
import pathlib

from copy import deepcopy
from os import makedirs, path

from ..features.ORM.config_builder import ConfigBuilder
from .geometry_infos import GeometryInfos

_logger = logging.getLogger(__name__)


class GeometryHandler:

def __init__(self, resolution, spacing, clusters=None, spheres=None):
self._parameters_dict = {
"resolution": resolution,
Expand Down Expand Up @@ -73,15 +78,21 @@ def _get_number_of_clusters(self):
return len(self._parameters_dict["clusters"])

def generate_json_configuration_files(
self, output_naming, simulation_path=""
):
if not path.exists(simulation_path):
makedirs(simulation_path, exist_ok=True)
self, output_naming: str, simulation_path: pathlib.Path = pathlib.Path()
) -> GeometryInfos:
simulation_path.mkdir(parents=True, exist_ok=True)

try:
simulation_path = simulation_path.resolve(strict=True)
except FileNotFoundError as exc:
_logger.exception(
f"simulation_path does not exist, even after the creation of its directories: {simulation_path}",
exc_info=exc)
raise exc

with open(
path.join(simulation_path, output_naming + "_base.json"), "w+"
simulation_path / (output_naming + "_base.json"), "w+"
) as base_file:

world = ConfigBuilder.create_world(
len(self.get_resolution()), self.get_resolution()
)
Expand Down Expand Up @@ -109,11 +120,8 @@ def generate_json_configuration_files(

for cluster_idx in range(len(self._parameters_dict["clusters"])):
with open(
path.join(
simulation_path,
output_naming + "_f_{}.vspl".format(cluster_idx),
),
"w+",
simulation_path / (output_naming + "_f_{}.vspl".format(cluster_idx)),
"w+",
) as f:
f.write(
self._parameters_dict["clusters"][cluster_idx].serialize()
Expand Down
Loading