# Path: ensembler/core.py
# class MPIState:
# class DummyMPIState:
# class DummyMPIComm:
# class literal_str(str): pass
# class LogFile:
# class ManualOverrides:
# class TargetManualOverrides:
# class TemplateManualOverrides:
# class RefinementManualOverrides:
# class ProjectMetadata:
#     def __init__(self):
#     def __init__(self):
#     def Barrier(self):
#     def bcast(self, obj, root=0):
#     def gather(self, obj, root=0):
# def change_style(style, representer):
#     def new_representer(dumper, data):
# def get_utcnow_formatted():
# def strf_timedelta(delta_t):
# def check_project_toplevel_dir(raise_exception=True):
#     def __init__(self, log_filepath):
#     def log(self, new_log_data={}):
#     def __init__(self, manual_overrides_filepath=None):
#     def __init__(self, manual_overrides_yaml):
#     def __init__(self, manual_overrides_yaml):
#     def __init__(self, manual_overrides_yaml):
# def gen_metadata_filename(ensembler_stage, metadata_file_index):
#     def __init__(self, project_stage='init', target_id=None, project_toplevel_dir='.'):
#     def add_all_prev_metadata(self, project_stage):
#     def add_prev_metadata(self, project_stage):
#     def determine_latest_metadata_filepath(self, project_stage):
#     def metadata_dir_mapper(self, project_stage, target_id=None):
#     def metadata_file_basename_mapper(self, project_stage):
#     def determine_latest_metadata_file_index(self, project_stage):
#     def gen_metadata_filepath_from_dir_index_and_file_basename(self, dirpath, file_basename, index):
#     def add_data(self, data, project_stage=None):
#     def add_iteration_number_to_metadata(self, iter_number):
#     def write(self):
# def encode_url_query(uniprot_query):
#     def replace_all(text, replace_dict):
# def xpath_match_regex_case_sensitive(context, attrib_values, regex_str):
# def xpath_match_regex_case_insensitive(context, attrib_values, regex_str):
# def sequnwrap(sequence):
# def seqwrap(sequence, add_star=False):
# def construct_fasta_str(id, seq):
# def get_targets():
# def get_templates_resolved_seq():
# def get_templates_full_seq():
# def get_targets_and_templates():
# def find_loopmodel_executable():
# def check_ensembler_modeling_stage_first_model_file_exists(ensembler_stage, targetid):
# def check_ensembler_modeling_stage_metadata_exists(ensembler_stage, targetid):
# def check_ensembler_modeling_stage_complete(ensembler_stage, targetid):
# def get_most_advanced_ensembler_modeling_stage(targetid):
# def get_valid_model_ids(ensembler_stage, targetid):
# def select_templates_by_seqid_cutoff(targetid, seqid_cutoff=None):
# def select_templates_by_validation_score(targetid,
#                                          validation_score_cutoff=None,
#                                          validation_score_percentile=None
#                                          ):


import contextlib
import os
import gzip
import logging
import functools
import shutil
import tempfile
import ensembler
            import traceback
            import ipdb; ipdb.set_trace()
from pkg_resources import resource_filename
from ensembler.core import logger, mpistate
        os.makedirs(dirpath)
        if not quiet:
            logger.info('Created directory "%s"' % dirpath)
    except OSError as e:
        if e.errno == 17:
            logger.debug('Directory "%s" already exists - will not overwrite' % dirpath)
        else:
            raise


def file_exists_and_not_empty(filepath):
    if os.path.exists(filepath):
        if os.path.getsize(filepath) > 0:
            return True
    return False


def set_loglevel(loglevel):
    """
    Set minimum level for logging
    >>> set_loglevel('info')   # log all messages except debugging messages. This is generally the default.
    >>> set_loglevel('debug')   # log all messages, including debugging messages

    Parameters
    ----------
    loglevel: str
        {debug|info|warning|error|critical}
    """
    if loglevel is not None:
        loglevel_obj = getattr(logging, loglevel.upper())

# Path: ensembler/core.py
# class MPIState:
# class DummyMPIState:
# class DummyMPIComm:
# class literal_str(str): pass
# class LogFile:
# class ManualOverrides:
# class TargetManualOverrides:
# class TemplateManualOverrides:
# class RefinementManualOverrides:
# class ProjectMetadata:
#     def __init__(self):
#     def __init__(self):
#     def Barrier(self):
#     def bcast(self, obj, root=0):
#     def gather(self, obj, root=0):
# def change_style(style, representer):
#     def new_representer(dumper, data):
# def get_utcnow_formatted():
# def strf_timedelta(delta_t):
# def check_project_toplevel_dir(raise_exception=True):
#     def __init__(self, log_filepath):
#     def log(self, new_log_data={}):
#     def __init__(self, manual_overrides_filepath=None):
#     def __init__(self, manual_overrides_yaml):
#     def __init__(self, manual_overrides_yaml):
#     def __init__(self, manual_overrides_yaml):
# def gen_metadata_filename(ensembler_stage, metadata_file_index):
#     def __init__(self, project_stage='init', target_id=None, project_toplevel_dir='.'):
#     def add_all_prev_metadata(self, project_stage):
#     def add_prev_metadata(self, project_stage):
#     def determine_latest_metadata_filepath(self, project_stage):
#     def metadata_dir_mapper(self, project_stage, target_id=None):
#     def metadata_file_basename_mapper(self, project_stage):
#     def determine_latest_metadata_file_index(self, project_stage):
#     def gen_metadata_filepath_from_dir_index_and_file_basename(self, dirpath, file_basename, index):
#     def add_data(self, data, project_stage=None):
#     def add_iteration_number_to_metadata(self, iter_number):
#     def write(self):
# def encode_url_query(uniprot_query):
#     def replace_all(text, replace_dict):
# def xpath_match_regex_case_sensitive(context, attrib_values, regex_str):
# def xpath_match_regex_case_insensitive(context, attrib_values, regex_str):
# def sequnwrap(sequence):
# def seqwrap(sequence, add_star=False):
# def construct_fasta_str(id, seq):
# def get_targets():
# def get_templates_resolved_seq():
# def get_templates_full_seq():
# def get_targets_and_templates():
# def find_loopmodel_executable():
# def check_ensembler_modeling_stage_first_model_file_exists(ensembler_stage, targetid):
# def check_ensembler_modeling_stage_metadata_exists(ensembler_stage, targetid):
# def check_ensembler_modeling_stage_complete(ensembler_stage, targetid):
# def get_most_advanced_ensembler_modeling_stage(targetid):
# def get_valid_model_ids(ensembler_stage, targetid):
# def select_templates_by_seqid_cutoff(targetid, seqid_cutoff=None):
# def select_templates_by_validation_score(targetid,
#                                          validation_score_cutoff=None,
#                                          validation_score_percentile=None
#                                          ):


# Path: ensembler/utils.py
import contextlib
import os
import gzip
import logging
import functools
import shutil
import tempfile
import ensembler
            import traceback
            import ipdb; ipdb.set_trace()
from pkg_resources import resource_filename
from ensembler.core import logger, mpistate

        os.makedirs(dirpath)
        if not quiet:
            logger.info('Created directory "%s"' % dirpath)
    except OSError as e:
        if e.errno == 17:
            logger.debug('Directory "%s" already exists - will not overwrite' % dirpath)
        else:
            raise


def file_exists_and_not_empty(filepath):
    if os.path.exists(filepath):
        if os.path.getsize(filepath) > 0:
            return True
    return False


def set_loglevel(loglevel):
    """
    Set minimum level for logging
    >>> set_loglevel('info')   # log all messages except debugging messages. This is generally the default.
    >>> set_loglevel('debug')   # log all messages, including debugging messages

    Parameters
    ----------
    loglevel: str
        {debug|info|warning|error|critical}
    """
    if loglevel is not None:
        loglevel_obj = getattr(logging, loglevel.upper())

        logger.setLevel(loglevel_obj)