Skip to content

Commit

Permalink
Merge 0c2544b into 7bb4a48
Browse files Browse the repository at this point in the history
  • Loading branch information
jernsting committed Nov 25, 2022
2 parents 7bb4a48 + 0c2544b commit 31a3259
Show file tree
Hide file tree
Showing 10 changed files with 100 additions and 73 deletions.
14 changes: 8 additions & 6 deletions .github/workflows/python-deploy_to_pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,17 @@ on:
jobs:
deploy:
name: Build and publish to PyPI
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.7.6
uses: actions/setup-python@v2
- uses: actions/checkout@v3
with:
python-version: 3.7.6
fetch-depth: 0
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: 3.9
- name: Install pypa/build
run: pip install build
run: pip install build pbr wheel
- name: Build a binary wheel and a source tarball
run: python -m build --sdist --wheel --outdir dist/ .
- name: Publish distribution to PyPI
Expand Down
32 changes: 15 additions & 17 deletions .github/workflows/python-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,37 @@ on:
jobs:
pytest:
name: Run PHOTONAI_neuro tests
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v2
- name: Set up Python 3.7.6
uses: actions/setup-python@v2
- uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: 3.7.6
python-version: 3.9
- name: Install dependencies
run: |
pip install wheel flake8
python setup.py egg_info
pip install pytest pytest-cov coveralls -r photonai_neuro.egg-info/requires.txt
pip install pytest pytest-cov coveralls -r requirements.txt
- name: Test with pytest
run: |
PYTHONPATH=./ pytest ./test --cov=./photonai_neuro --tb=long
PYTHONPATH=./ pytest ./test --cov-report lcov:./coverage/lcov.info --cov=./photonai_neuro --tb=long
- name: Coveralls
run: coveralls
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

deploy:
name: Build and publish to TestPyPI
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
needs: pytest
if: github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.7.6
uses: actions/setup-python@v2
- uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: 3.7.6
python-version: 3.9
- name: Replace version number with commit hash
run: |
dt=$(date '+%Y.%m.%d.%H.%M.%S')
Expand Down
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
[![PHOTONAI_neuro tests + TestPyPI deployment @master](https://github.com/wwu-mmll/photonai_neuro/actions/workflows/python-test.yml/badge.svg)](https://github.com/wwu-mmll/photonai_neuro/actions/workflows/python-test.yml)
[![Coverage Status](https://coveralls.io/repos/github/wwu-mmll/photonai_neuro/badge.svg?branch=master)](https://coveralls.io/github/wwu-mmll/photonai_neuro?branch=master)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=wwu-mmll_photonai_neuro&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=wwu-mmll_photonai_neuro)
![GitHub](https://img.shields.io/github/license/wwu-mmll/photonai_neuro)
[![Twitter URL](https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Ftwitter.com%2Fwwu_mmll)](https://twitter.com/wwu_mmll)
# PHOTONAI Neuro
PHOTONAI Neuro is an add-on module to simplify machine learning analyses for multimodal Magnetic Resonance Imaging (MRI)
with PHOTONAI.
Overall, this module combines the functionality of the famous [Nilearn](https://nilearn.github.io) package
with the pipeline structure of [PHOTONAI](https://photon-ai.com).

## Project setup
Install the latest version directly from Github:
Install the latest version directly via pip:
```
pip install git+https://github.com/wwu-mmll/photonai_neuro
pip install photonai-neuro
```

## Features
Expand Down
42 changes: 29 additions & 13 deletions photonai_neuro/__init__.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,39 @@
import os
from datetime import datetime

from photonai.base import PhotonRegistry
from photonai.photonlogger import logger

from .util import register_photonai_neuro


# REGISTRATION
current_path = os.path.dirname(os.path.abspath(__file__))
registered_file = os.path.join(current_path, "registered")
logger.info("Checking Neuro Module Registration")
if not os.path.isfile(registered_file):
logger.info("Registering Neuro Module")
register_photonai_neuro()
with open(os.path.join(registered_file), "w") as f:
f.write(str(datetime.now()))
from .version import __version__

from .atlas_mapper import AtlasMapper
from .brain_mask import BrainMask
from .brain_atlas import BrainAtlas
from .atlas_library import AtlasLibrary
from .neuro_branch import NeuroBranch


# REGISTRATION
def do_register(current_path, registered_file): # pragma: no cover
reg = PhotonRegistry()
reg.add_module(os.path.join(current_path, "photonai_neuro.json"))
with open(os.path.join(registered_file), "w") as f:
f.write(str(__version__))


def register(): # pragma: no cover
current_path = os.path.dirname(os.path.abspath(__file__))
registered_file = os.path.join(current_path, "registered")
logger.info("Checking Neuro Module Registration")
if not os.path.isfile(registered_file): # pragma: no cover
logger.info("Registering Neuro Module")
do_register(current_path=current_path, registered_file=registered_file)
else:
with open(os.path.join(registered_file), "r") as f:
if f.read() == __version__:
logger.info("Current version already registered")
else:
logger.info("Updating Neuro Module")
do_register(current_path=current_path, registered_file=registered_file)


register()
4 changes: 4 additions & 0 deletions photonai_neuro/neuro_branch.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ def __iadd__(self, pipe_element: PipelineElement):
self
"""
if pipe_element.name not in NeuroBranch.NEURO_ELEMENTS:
# reload
PhotonRegistry.ELEMENT_DICTIONARY = PhotonRegistry().get_package_info()
NeuroBranch.NEURO_ELEMENTS = PhotonRegistry().get_package_info(['photonai_neuro'])
if pipe_element.name in NeuroBranch.NEURO_ELEMENTS:
# as the neuro branch is parallelized and processes several images subsequently on
# different cores, we need to stop the children to process on several cores as well
Expand Down
3 changes: 3 additions & 0 deletions photonai_neuro/version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from pbr.version import VersionInfo

__version__ = VersionInfo('photonai_neuro').release_string()
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ pandas
photonai
scikit-learn
scikit-image
pbr
24 changes: 24 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
[metadata]
name = photonai_neuro
description-file = README.md
author = PHOTONAI Team
author_email = hahnt@uni-muenster.de
url = https://www.photon-ai.com/
license = GPLv3
long_description_content_type = text/markdown
project_urls:
Source Code = https://github.com/wwu-mmll/photonai_neuro
Bug Tracker = https://github.com/wwu-mmll/photonai_neuro/issues
download_url = https://pypi.org/project/photonai_neuro/#files
keywords =
machine learning
neuroimaging
MRI
classifiers =
License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Topic :: Software Development :: Libraries :: Python Modules
Topic :: Scientific/Engineering :: Artificial Intelligence
Intended Audience :: Science/Research

[files]
package = photonai_neuro
32 changes: 2 additions & 30 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,5 @@
try:
from setuptools import setup, find_packages
except ImportError:
from ez_setup import use_setuptools
use_setuptools()
from setuptools import setup, find_packages


__version__ = '0.1.0'
from setuptools import setup

setup(
name='photonai_neuro',
packages=find_packages(),
include_package_data=True,
version=__version__,
description="""
PHOTONAI NEURO
The Neuro Module enables loading and preprocessing neuroimaging data such as structural and
functional Magnetic Resonance Imaging (MRI) data.
In addition, it supports a range of advanced feature extraction and feature engineering as well as atlas-based analyses.
""",
author='PHOTONAI Team',
author_email='hahnt@wwu.de',
url='https://github.com/mmll-wwu/photonai_neuro.git',
download_url='https://github.com/wwu-mmll/photonai_neuro/archive/' + __version__ + '.tar.gz',
keywords=['machine learning', 'neuroimaging', 'MRI'],
classifiers=[],
install_requires=[
'photonai',
'nibabel',
'nilearn',
'scikit-image']
pbr=True
)
12 changes: 7 additions & 5 deletions test/test_atlas_mapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,13 @@ def create_hyperpipe(self):
@staticmethod
def create_data():
n_subjects = 20
dataset_files = fetch_oasis_vbm(n_subjects=n_subjects)
_ = dataset_files.ext_vars['age'].astype(float)
gender = dataset_files.ext_vars['mf'].astype(str)
y = np.array(gender)
X = np.array(dataset_files.gray_matter_maps)
y = [0]
while len(np.unique(y)) == 1:
dataset_files = fetch_oasis_vbm(n_subjects=n_subjects)
_ = dataset_files.ext_vars['age'].astype(float)
gender = dataset_files.ext_vars['mf'].astype(str)
y = np.array(gender)
X = np.array(dataset_files.gray_matter_maps)
return X, y

def test_fit_reload_all(self):
Expand Down

0 comments on commit 31a3259

Please sign in to comment.