Source code for schrodinger.application.phase.license
"""
Module for token checkouts in phase related backends.
NOTE: Tampering with licensing is a violation of the license agreement.
Copyright Schrodinger LLC, All Rights Reserved.
"""
import sys
from schrodinger import gpgpu
from schrodinger.job import jobcontrol
from schrodinger.utils import license
from schrodinger.utils import log
# Logging
logger = log.get_output_logger(__file__)
SHAPE_SCREEN_LICENSE_NAME = license.SHAPE_SCREEN
PHASE_DBSEARCH_LICENSE_ID = license.PHASE_DBSEARCH
[docs]def num_of_shape_screen_tokens(use_gpu: bool = False) -> int:
    """
    :param use_gpu: whether to checkout tokens for GPU usage or not
    :return: number of tokens to check out
    """
    CPU_SHAPE_SCREEN_TOKENS = 1
    GPU_SHAPE_SCREEN_TOKENS = 8
    if not use_gpu:
        return CPU_SHAPE_SCREEN_TOKENS
    backend = jobcontrol.get_backend()
    host = backend.getJob().HostEntry if backend else "localhost"
    return gpgpu.get_scaled_token_count(host, GPU_SHAPE_SCREEN_TOKENS) 
[docs]def checkout_phase_dbsearch_tokens(num_tokens: int = 1,
                                   want_exit: bool = True) -> license.License:
    """
    Checks out a PHASE_DBSEARCH license consuming the requested number
    of tokens.
    :param num_tokens: Number of tokens to check out
    :param want_exit: Whether to call exit on failure or raise RuntimeError
    :return: License consuming num_tokens PHASE_DBSEARCH tokens
    """
    tokens = license.License(PHASE_DBSEARCH_LICENSE_ID, num_tokens)
    if not tokens.isValid():
        msg = (f'{num_tokens}-token PHASE_DBSEARCH license is unavailable. '
               'Contact help@schrodinger.com to request an appropriate '
               'license.')
        if want_exit:
            logger.error(msg)
            sys.exit(1)
        else:
            raise RuntimeError(msg)
    return tokens 
[docs]def checkout_shape_screen_tokens(use_gpu: bool = False) -> license.License:
    """
    Checks out the appropriate number of tokens for a shape screening job.
    :param use_gpu: whether to checkout tokens for GPU usage or not
    :return: license token
    """
    tokens = license.License(SHAPE_SCREEN_LICENSE_NAME,
                             num_of_shape_screen_tokens(use_gpu))
    if not tokens.isValid():
        logger.error("SHAPE_SCREEN license token is unavailable. Contact "
                     "help@schrodinger.com to request additional licenses.")
        sys.exit(1)
    return tokens