From 45991e6284e6abcc01bafeb8b2b4962a6af8e8f8 Mon Sep 17 00:00:00 2001 From: Tim O'Donnell Date: Fri, 16 Sep 2016 13:27:21 -0400 Subject: [PATCH] fix subtle python 2 issues --- mhcflurry/__init__.py | 5 ++--- .../class1_allele_specific/class1_binding_predictor.py | 10 +++++++++- mhcflurry/class1_allele_specific/cross_validation.py | 7 +++++-- .../class1_allele_specific/cv_and_train_command.py | 6 +++++- mhcflurry/class1_allele_specific/load.py | 6 +++++- mhcflurry/class1_allele_specific/scoring.py | 7 +++++-- mhcflurry/class1_allele_specific/train.py | 9 ++++++--- mhcflurry/downloads_command.py | 6 +++++- mhcflurry/hyperparameters.py | 6 +++++- 9 files changed, 47 insertions(+), 15 deletions(-) diff --git a/mhcflurry/__init__.py b/mhcflurry/__init__.py index 1c13e2fa..3a443300 100644 --- a/mhcflurry/__init__.py +++ b/mhcflurry/__init__.py @@ -12,8 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -from . import class1_allele_specific -from .class1_allele_specific import Class1BindingPredictor +from .class1_allele_specific.class1_binding_predictor import ( + Class1BindingPredictor) from .predict import predict from .package_metadata import __version__ from . import parallelism @@ -22,7 +22,6 @@ __all__ = [ "Class1BindingPredictor", - "class1_allele_specific", "predict", "parallelism", "__version__", diff --git a/mhcflurry/class1_allele_specific/class1_binding_predictor.py b/mhcflurry/class1_allele_specific/class1_binding_predictor.py index 8029225c..3f68385c 100644 --- a/mhcflurry/class1_allele_specific/class1_binding_predictor.py +++ b/mhcflurry/class1_allele_specific/class1_binding_predictor.py @@ -22,6 +22,7 @@ ) import tempfile +import os import numpy as np @@ -121,9 +122,16 @@ def __getstate__(self): def __setstate__(self, state): model_bytes = state.pop('model_bytes') self.__dict__.update(state) - with tempfile.NamedTemporaryFile(suffix='.hdf5', delete=True) as fd: + fd = tempfile.NamedTemporaryFile(suffix='.hdf5', delete=False) + try: fd.write(model_bytes) + + # HDF5 has issues when the file is open multiple times, so we close + # it here before loading it into keras. + fd.close() self.model = keras.models.load_model(fd.name) + finally: + os.unlink(fd.name) def get_weights(self): """ diff --git a/mhcflurry/class1_allele_specific/cross_validation.py b/mhcflurry/class1_allele_specific/cross_validation.py index 219ef8c0..b02ea0ed 100644 --- a/mhcflurry/class1_allele_specific/cross_validation.py +++ b/mhcflurry/class1_allele_specific/cross_validation.py @@ -12,8 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -from __future__ import absolute_import - +from __future__ import ( + print_function, + division, + absolute_import, +) import collections import logging diff --git a/mhcflurry/class1_allele_specific/cv_and_train_command.py b/mhcflurry/class1_allele_specific/cv_and_train_command.py index d946a27a..29615bb1 100644 --- a/mhcflurry/class1_allele_specific/cv_and_train_command.py +++ b/mhcflurry/class1_allele_specific/cv_and_train_command.py @@ -36,7 +36,11 @@ the 'spawn' or 'forkserver' modes. See: https://pythonhosted.org/joblib/parallel.html#bad-interaction-of-multiprocessing-and-third-party-libraries ''' - +from __future__ import ( + print_function, + division, + absolute_import, +) import sys import argparse import json diff --git a/mhcflurry/class1_allele_specific/load.py b/mhcflurry/class1_allele_specific/load.py index f9abd7ca..8ee0f1d2 100644 --- a/mhcflurry/class1_allele_specific/load.py +++ b/mhcflurry/class1_allele_specific/load.py @@ -14,7 +14,11 @@ ''' Load predictors ''' - +from __future__ import ( + print_function, + division, + absolute_import, +) import pickle from os.path import join diff --git a/mhcflurry/class1_allele_specific/scoring.py b/mhcflurry/class1_allele_specific/scoring.py index ebb14cff..e50ba83a 100644 --- a/mhcflurry/class1_allele_specific/scoring.py +++ b/mhcflurry/class1_allele_specific/scoring.py @@ -1,5 +1,8 @@ -from __future__ import absolute_import - +from __future__ import ( + print_function, + division, + absolute_import, +) import sklearn import numpy import scipy diff --git a/mhcflurry/class1_allele_specific/train.py b/mhcflurry/class1_allele_specific/train.py index 0c6d2858..c59719b3 100644 --- a/mhcflurry/class1_allele_specific/train.py +++ b/mhcflurry/class1_allele_specific/train.py @@ -12,8 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -from __future__ import absolute_import - +from __future__ import ( + print_function, + division, + absolute_import, +) import collections import logging import time @@ -277,7 +280,7 @@ def train_across_models_and_folds( pandas.DataFrame ''' if cartesian_product_of_folds_and_models: - tasks_per_model = int(math.ceil(len(folds) / folds_per_task)) + tasks_per_model = int(math.ceil(float(len(folds)) / folds_per_task)) fold_index_groups = [[] for _ in range(tasks_per_model)] index_group = 0 for index in range(len(folds)): diff --git a/mhcflurry/downloads_command.py b/mhcflurry/downloads_command.py index 40aa1c25..1f162357 100644 --- a/mhcflurry/downloads_command.py +++ b/mhcflurry/downloads_command.py @@ -28,7 +28,11 @@ Summarize available and fetched downloads: $ mhcflurry-downloads info ''' - +from __future__ import ( + print_function, + division, + absolute_import, +) import sys import argparse import logging diff --git a/mhcflurry/hyperparameters.py b/mhcflurry/hyperparameters.py index 36d3f72f..c0ddaab4 100644 --- a/mhcflurry/hyperparameters.py +++ b/mhcflurry/hyperparameters.py @@ -11,7 +11,11 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - +from __future__ import ( + print_function, + division, + absolute_import, +) import itertools