# Path: lib/util.py
# STATUS_NORMAL=1
# STATUS_MAX_MEMORY_EXCEEDED=2
# STATUS_MAX_RUNTIME_EXCEEDED=3
# MAX_LEN_OUT = 10000
# def runAndMeasure(command,detailed=True,maxtime=0,maxmem=0):
# def runSimple(command):
# def runAndMeasureInternal(return_queue,command,maxtime=0,maxmem=0):
# def runInternal(control_queue,command,max_memory):
# def measureProcess(queue, initial_pids, command, measurement_interval=1, max_runtime=0, max_memory=0, debug=False):
# 	def extendTargets(targets, proc):
# 	def killTargets(targets):
# 	def updateTargets(targets, metrics):
# 	def updateMetrics(target, metrics):
# def loadConfig(name, parent_dir="", already_included=[]):
# def setCallDir(d):
# def setRootDir(d):
# def enterCallDir():
# def enterRootDir():
# def getRootDir():
# def nl2br(text):
# def msg(text="", level=1):
# def yes_no(b):
# def md5(text):
# def merge(x, y):
# def formatFilesize(n):
# def percent(val, base, offset=0):
# def abs_path(path):
# def get_sam_header_line_count(filename):
# def is_sam_sorted(filename):
# def sort_sam(filename,threads=1):
# def sort_sam_picard(filename,threads=-1):
# def line_count(filename):
# def sanitize_string(s):
# def makeExportDropdown(plot_id,csv_filename):
# def parseMD(md,seq):


import copy
import subprocess
import os
import time
import hashlib
import traceback
import sys
import resource
import yaml
from lib import util
				"Error occured executing pipeline " + event + ": " + str(e) + ", traceback: " + traceback.format_exc(),
				"Test " + self.getName(), event)

		except KeyboardInterrupt:
			raise KeyboardInterrupt

		finally:
			self.restoreWorkingDirectory()

		return result

	def run(self):
		start_time = time.time()
		self.executePipeline("init")
		self.executePipeline("cleanup")

		self.was_run = True
		self.executePipeline("main")

		end_time = time.time()
		self.run_time = end_time - start_time
		self.finished_run = True

	def sub(self,command,description="",detailed=False):
		result = util.runAndMeasure(command, detailed, self.mate._("sub_max_runtime"), self.mate._("sub_max_memory"))
		status=result["status"]

		if status != util.STATUS_NORMAL:
			if status == util.STATUS_MAX_MEMORY_EXCEEDED:
				self.error("Subprocess exceeded maximum allowed memory: %s" % command)

# Path: lib/util.py
# STATUS_NORMAL=1
# STATUS_MAX_MEMORY_EXCEEDED=2
# STATUS_MAX_RUNTIME_EXCEEDED=3
# MAX_LEN_OUT = 10000
# def runAndMeasure(command,detailed=True,maxtime=0,maxmem=0):
# def runSimple(command):
# def runAndMeasureInternal(return_queue,command,maxtime=0,maxmem=0):
# def runInternal(control_queue,command,max_memory):
# def measureProcess(queue, initial_pids, command, measurement_interval=1, max_runtime=0, max_memory=0, debug=False):
# 	def extendTargets(targets, proc):
# 	def killTargets(targets):
# 	def updateTargets(targets, metrics):
# 	def updateMetrics(target, metrics):
# def loadConfig(name, parent_dir="", already_included=[]):
# def setCallDir(d):
# def setRootDir(d):
# def enterCallDir():
# def enterRootDir():
# def getRootDir():
# def nl2br(text):
# def msg(text="", level=1):
# def yes_no(b):
# def md5(text):
# def merge(x, y):
# def formatFilesize(n):
# def percent(val, base, offset=0):
# def abs_path(path):
# def get_sam_header_line_count(filename):
# def is_sam_sorted(filename):
# def sort_sam(filename,threads=1):
# def sort_sam_picard(filename,threads=-1):
# def line_count(filename):
# def sanitize_string(s):
# def makeExportDropdown(plot_id,csv_filename):
# def parseMD(md,seq):


# Path: lib/test.py
import copy
import subprocess
import os
import time
import hashlib
import traceback
import sys
import resource
import yaml
from lib import util

				"Error occured executing pipeline " + event + ": " + str(e) + ", traceback: " + traceback.format_exc(),
				"Test " + self.getName(), event)

		except KeyboardInterrupt:
			raise KeyboardInterrupt

		finally:
			self.restoreWorkingDirectory()

		return result

	def run(self):
		start_time = time.time()
		self.executePipeline("init")
		self.executePipeline("cleanup")

		self.was_run = True
		self.executePipeline("main")

		end_time = time.time()
		self.run_time = end_time - start_time
		self.finished_run = True

	def sub(self,command,description="",detailed=False):
		result = util.runAndMeasure(command, detailed, self.mate._("sub_max_runtime"), self.mate._("sub_max_memory"))
		status=result["status"]

		if status != util.STATUS_NORMAL:
			if status == util.STATUS_MAX_MEMORY_EXCEEDED:
				self.error("Subprocess exceeded maximum allowed memory: %s" % command)

			elif status == util.STATUS_MAX_RUNTIME_EXCEEDED: