コード例 #1
0
ファイル: proxy_verifier.py プロジェクト: WINNY1/Proxy-Pool
 def __init__(self, loop=None, post=False):
     self._loop = loop or asyncio.get_event_loop()
     self._method = 'POST' if post else 'GET'
     self.finished = 0
     self.sem = asyncio.Semaphore(100, loop=self._loop)
     self.https_judge = Judge('https://httpbin.skactor.tk/anything')
     self.http_judge = Judge('http://httpbin.skactor.tk:8080/anything')
コード例 #2
0
    def get_content(self):
        # 1.提取基本文本块
        self.parser = Parser(self.url)
        ns_list = self.parser.ns()
        self.title = self.parser.get_title()
        # 2.文本串分块
        self.partitioner = Partitioner()
        blocks = self.partitioner.partition(ns_list)

        # 3.抽取正文块,副产品为分析信息
        self.judge = Judge(self.title.string, ns_list)
        res = self.judge.select(blocks, ns_list)

        flag = res['flag']
        cblock = res['block']
        confidence = res['confidence']
        detail = res['detail']
        #if flag:
        content = cblock.to_str()
        (srcs, images) = self.get_images(cblock)
        cblock = self.insert_images(cblock, images)
        content_with_format = cblock.to_str_with_format()
        #else:
        #    content = ""
        #    content_with_format = ""
        #    srcs = None
        return (flag, self.title.string.strip(), content, content_with_format,
                srcs, confidence, detail)
コード例 #3
0
def main():
    if len(sys.argv) <= 1:
        raise Exception("Check your arguments please!")

    project_dir = sys.argv[1]
    user_dataset = []

    def get_user_dataset():
        sort_input_path = sys.argv[2]
        sort_output_path = sys.argv[3]
        freq_input_path = sys.argv[4]
        freq_output_path = sys.argv[5]
        matmul_input_path = sys.argv[6]
        matmul_output_path = sys.argv[7]
        user_dataset.append(sort_input_path)
        user_dataset.append(sort_output_path)
        user_dataset.append(freq_input_path)
        user_dataset.append(freq_output_path)
        user_dataset.append(matmul_input_path)
        user_dataset.append(matmul_output_path)

    get_user_dataset()

    server_dataset = []

    def get_server_dataset():
        server_sort_input_file = "./datasets/sorting/sort.in"
        server_sort_output_file = "./datasets/sorting/sort.out"
        server_freq_input_file = "./datasets/freq/freq.in"
        server_freq_output_file = "./datasets/freq/freq.out"
        server_matmul_input_file = "./datasets/matmul/matmul.in"
        server_matmul_output_file = "./datasets/matmul/matmul.out"
        server_dataset.append(server_sort_input_file)
        server_dataset.append(server_sort_output_file)
        server_dataset.append(server_freq_input_file)
        server_dataset.append(server_freq_output_file)
        server_dataset.append(server_matmul_input_file)
        server_dataset.append(server_matmul_output_file)

    get_server_dataset()

    if len(server_dataset) != len(user_dataset):
        raise Exception("User and Server datasets aren't equal size!")

    for i in range(len(server_dataset)):
        judge = Judge(server_dataset[i], user_dataset[i])

        if not judge.check():
            raise Exception("Files ", server_dataset[i], "and",
                            user_dataset[i], "aren't matched!")
コード例 #4
0
def test_judge_part2():
    judge = Judge()

    stop = 5000000
    genA = generatorAPart2(65, stop)
    genB = generatorBPart2(8921, stop)

    for _ in range(stop):
        valueA = next(genA)
        valueB = next(genB)

        judge.compare(valueA, valueB)

    assert judge.getCount() == 309
コード例 #5
0
def main():
    judge = Judge()

    stop = 40000000
    genA = generatorA(512, stop)
    genB = generatorB(191, stop)

    for _ in range(stop):
        valueA = next(genA)
        valueB = next(genB)

        judge.compare(valueA, valueB)

    print(judge.getCount())
コード例 #6
0
ファイル: node.py プロジェクト: Czocher/zebra-node
    def judge(self, submission):
        logging.info(
            "Starting to judge submission: "
            "id {id} pid {problem} language {language}.".format(**submission)
        )
        task = self.get_task(submission['problem'])
        judge = Judge(task, submission)
        judge.start()
        judge.join()

        logging.info("Judging of submission {id} finished.".format(
            **submission
        ))

        return (judge.results, judge.compilation_log)
コード例 #7
0
def test_RPSXGame():
    p1 = Player('p1', bot=True)
    bot = Player('p2', bot=True)
    game = RPSXGame(p1, bot, Judge())
    for i in range(10):
        game.play()
    plp('test_RPSXGame()')
コード例 #8
0
    def get_content(self):
         # 1.提取基本文本块
        self.parser = Parser(self.url)
        ns_list = self.parser.ns()
        self.title = self.parser.get_title()
        # 2.文本串分块
        self.partitioner = Partitioner()
        blocks = self.partitioner.partition(ns_list) 

        # 3.抽取正文块,副产品为分析信息
        self.judge = Judge( self.title.string,ns_list )
        res = self.judge.select( blocks,ns_list )   

        flag = res['flag']
        cblock = res['block']
        confidence = res['confidence']
        detail = res['detail']
        #if flag:
        content = cblock.to_str()
        (srcs,images) = self.get_images( cblock )
        cblock = self.insert_images(cblock,images)
        content_with_format = cblock.to_str_with_format()
        #else:
        #    content = ""
        #    content_with_format = ""
        #    srcs = None
        return (flag,self.title.string.strip(),content,content_with_format,srcs,confidence,detail)
コード例 #9
0
ファイル: jari.py プロジェクト: Mr-Phoebe/BOJ-V2
def daemon():
    def callback(ch, method, properties, body):
        print " [x] Received judge request %r" % (body,) # for debug
        s = Sub()
        try:
            s.getSub(body)
            c = Compile()
            c.compile(s)
        except Exception, e:
            print 'compile err| ', Exception, ':', e # for debug

        if s.status == jcnf.SUB_STATUS['judging']:
            try:
                j = Judge()
                j.judge(s)
            except Exception, e:
                print 'judge err| ', Exception, ':', e # for debug
コード例 #10
0
def daemon():
    def callback(ch, method, properties, body):
        print " [x] Received judge request %r" % (body, )  # for debug
        s = Sub()
        try:
            s.getSub(body)
            c = Compile()
            c.compile(s)
        except Exception, e:
            print 'compile err| ', Exception, ':', e  # for debug

        if s.status == jcnf.SUB_STATUS['judging']:
            try:
                j = Judge()
                j.judge(s)
            except Exception, e:
                print 'judge err| ', Exception, ':', e  # for debug
コード例 #11
0
class GatekeeperHandler(ProxyHandler):
	"""
	Uses classifiers and judges to modify HTTP requests before they are
	passed on (to the browser or to the web).
	"""
	judge = Judge()
	update_filename = path.join(path.dirname(path.dirname(path.realpath(__file__))), 'precommitment', 'has_changed')
	print "\nReady to start processing requests.\n"

	def mitm_request(self, data):
		"""Modifies requests."""

		# NOTE we always allow requests through -- we only categorize and judge responses
		# this could be changed

		url = self.headers['Host'] + self.path
		trimmed_url = trim_to(url, 40)

		log_request(url, self.command)

		s_print('>> to: %s' % trimmed_url)

		# check for updates
		if path.isfile(self.update_filename):
			new_access_level = open(self.update_filename, "r").read().strip()
			system("rm -f " + self.update_filename)
			s_print("\n\nUPDATING ACCESS LEVEL: %s\n" % new_access_level)
			self.judge.load_access_rules(new_access_level)
			global CLASSIFIER
			CLASSIFIER.reload() # throw away old classifier, create a new one (because e.g. maybe we added a temporarily_blocked entry)

		return data

	def mitm_response(self, data):
		"""Modifies responses."""

		url = self.headers['Host'] + self.path
		trimmed_url = trim_to(url, 40)

		s_print('<< judging: %s' % trimmed_url)

		global CLASSIFIER
		categories = CLASSIFIER.classify(self, data)
		judgment, info = self.judge.render_judgment(categories)

		log_response(url, categories, judgment, info, self.command)

		s_print("<< %s\nJudged:\t%s => %s (%s)\n" % (trimmed_url, categories, judgment, info))

		if judgment == "BLOCK":
			return refuse(categories, info)
		elif judgment == "DELAY":
			sleep(float(info))
			return data
		elif judgment == "ALLOW":
			return data
		else:
			raise Exception("Unrecognized judgment: %s (%s)" % (judgment, info))
コード例 #12
0
    def play_game(self):
        log.info("Game started")
        
        current_player, prev_player = 'W', 'B'
        incorrect_move_attempted = False
        not_all_moves_requested = False

        while not incorrect_move_attempted and \
                Judge.return_winner(self.board) == None:
            log.info(current_player + ' players turn')
            dice_results = self.double_dice()
            log.info("Dice results : " + str(dice_results))

            if not Judge.has_possible_moves(self.board, current_player,
                    dice_results):
                log.info("no possible moves with this dice results, " \
                    "skipping player")
                current_player, prev_player = prev_player, current_player
                continue

            board_copy = deepcopy(self.board)
            dices_copy = deepcopy(dice_results)
            moves = self.players[current_player].make_moves(board_copy,
                    dices_copy)
            
            log.info("Player wants to make moves: " + str(moves))

            for move in moves:
                if Judge.check_move(self.board, move):
                    dice_results.remove(move[2])
                    Judge.execute_move(self.board, move)
                else:
                    log.error(str(move) + " is invalid")
                    incorrect_move_attempted = True
                    break
            
            if Judge.has_possible_moves(self.board,
                                        current_player,
                                        dice_results):
                log.error("Player did not make all the possible moves")
                not_all_moves_requested = True
                break

            current_player, prev_player = prev_player, current_player

        if incorrect_move_attempted:
            log.error(str(prev_player) + " player has won, due to " \
                "incorrect move of the opponent")
            winner = prev_player
        elif not_all_moves_requested:
            log.error(str(prev_player) + " player has won, due to " \
                "opponent not requesting all possible moves")
            winner = prev_player
        else: 
            winner = Judge.return_winner(self.board)
            log.info(str(winner) + " player has won")
        
        log.info("Game ended")

        return winner
コード例 #13
0
ファイル: web.py プロジェクト: amoghn4/pythons4
 def post(self):
     try:
         payload = json.loads(self.request.body)
     except ValueError:
         raise
     if "id" not in payload or 'src' not in payload:
         raise Exception("Argument missing")
     pid = int(payload['id'])
     src = payload['src']
     judge = Judge(pid, src, mode="inline")
     ok, msg = judge.run_tests()
 
     if not ok:
         ret = json.dumps({"pass":False, "msg": msg})
     else:
         ret = json.dumps({"pass":True})
     self.set_header("content-type", "application/json")
     self.write(ret)
コード例 #14
0
def set_content():
    content_valid = False
    content_type, content = None, None
    while not content_valid:
        content_input = input(
            "\nPlease type in the absolute path of the "
            "file/directory\nIf you want to select "
            "multiple files, please add four colons(::::) "
            "between the file paths.\nDo not choose multiple"
            " directories or a combination of files and "
            "directories.\nYou can type in 'exit()' to exit.")
        check_user_exit(content_input)
        content = content_input.split("::::")
        judge = Judge(content)
        content_type, content = judge.judge_content()
        if content_type <= 0:
            print(
                "Wrong value received!\nDetails: {} Please Try again.".format(
                    content))
        else:
            content_valid = True
    return content_type, content
コード例 #15
0
class GameManager(object):
    
    @classmethod
    def for_options(cls, options):
        subclasses = LeafSubclassRetriever(cls).value()
        manager_class = filter(lambda subclass: subclass.handles(options),
                               subclasses)[0]
        return manager_class(options)
    
    @classmethod
    def handles(cls, options):
        raise NotImplementedError('Subclass responsibility')    
    
    def __init__(self, options):
        self.options = options
        self.judge = Judge(self)
        
    def get_programs(self):
        return [self.options.prog1, self.options.prog2]      
        
    def start(self):
        self.judge.run()
        
    def end(self):
        logging.log(logging.INFO,
                    'Batalla finalizada! Mostrando resultados...')        
        self.display_results()        
    
    def process_actions(self, actions):
        raise NotImplementedError('Subclass responsibility')
    
    def process_soldiers(self, soldiers):
        raise NotImplementedError('Subclass responsibility')
    
    def display_results(self):
        raise NotImplementedError('Subclass responsibility')
コード例 #16
0
    def get_timeline(self, api, t_name):
        judge = Judge()
        try:

            for tweet in api.user_timeline(id=t_name, count=self.__num):
                #for tweet in api.user_timeline(id = Twitterkey.id, count = self.__num):
                if judge.my_timeline_multi(tweet):
                    try:
                        self.__status_media[self.__count] = tweet
                        self.__count += 1
                    except:
                        pass

                elif judge.my_timeline_single(tweet):
                    try:
                        self.__status_media[self.__count] = tweet
                        self.__count += 1
                    except:
                        pass
        except tp.error.TweepError:
            for _ in tqdm(range(15 * 60)):
                time.sleep(1)

        return self.__status_media
コード例 #17
0
ファイル: main.py プロジェクト: anitejb/jshs-scheduling
def create_judge_roster(csv_filename):
    with open(csv_filename, encoding="utf-8") as csvfile:
        judge_roster = list()
        csvreader = csv.DictReader(csvfile)

        # Create an entry in the roster for each judge with their contact details, preferred categories, and availability
        for row in csvreader:
            if not any(row.values()):
                continue

            new_presentation_availability = list()
            for column_name, times_selected in row.items():
                if column_name not in JudgeColumnNames.JUDGE_AVAILABILITY_COLUMN_NAMES:
                    continue
                column_date = column_name_to_date(column_name)
                if times_selected:
                    for time_slot in times_selected.split(","):
                        if not time_slot:
                            continue
                        index_at_00_min = date_and_time_to_index(
                            column_date,
                            time_slot_to_time(time_slot),
                        )
                        new_presentation_availability.append(index_at_00_min)
                        new_presentation_availability.append(index_at_00_min +
                                                             0.5)

            new_judge = Judge(
                judge_id=csvreader.
                line_num,  # using the line number as a sequential ID field for each judge
                first=row[JudgeColumnNames.FIRST_NAME],
                last=row[JudgeColumnNames.LAST_NAME],
                email=row[JudgeColumnNames.EMAIL],
                phone=row[JudgeColumnNames.PHONE],
                preferred_categories=[
                    JUDGE_CATEGORIES[category] for category in JUDGE_CATEGORIES
                    if category in row[JudgeColumnNames.PREFERRED_CATEGORIES]
                ],
                is_paper_reviewer=row[
                    JudgeColumnNames.IS_PAPER_REVIEWER] == "Yes",
                presentation_availability=new_presentation_availability,
            )
            judge_roster.append(new_judge)

    return judge_roster
コード例 #18
0
ファイル: main.py プロジェクト: jvmncs/safe-debates
def main(args):
    """main man"""
    # reproducibility
    if args.seed is not None:
        torch.manual_seed(
            args.seed)  # unsure if this works with SparseMNIST right now
        np.random.seed(args.seed)

    # cuda
    args.use_cuda = not args.no_cuda and torch.cuda.is_available()
    args.device = torch.device("cuda" if args.use_cuda else "cpu")

    # data
    dataset = MNIST('./data/', train=False, transform=ToTensor())
    kwargs = {'num_workers': 1}
    if args.use_cuda:
        kwargs['pin_memory'] = True
    data_loader = DataLoader(dataset, args.batch_size, shuffle=True, **kwargs)
    if args.rounds is None:
        args.rounds = len(dataset) // args.batch_size

    # load judge
    judge_state = torch.load(args.checkpoint)['state_dict']

    # debate game
    judge = Judge().to(args.device)
    judge.load_state_dict(judge_state)
    judge.eval()
    helper = Agent(honest=True, args=args)
    liar = Agent(honest=False, args=args)
    debate = Debate((helper, liar), data_loader, args)

    total_meter = AverageMeter()
    class_meters = [AverageMeter() for i in range(10)]

    # TODO precommit logic
    for _ in range(args.rounds):
        print("starting round {}".format(_))
        helper.precommit_(None, None)
        liar.precommit_(None, None)
        result = debate.play(judge, args.device)
        track_stats_(total_meter, class_meters, result['helper']['preds'],
                     result['helper']['wins'], result['labels'],
                     args.precommit)

    print('Total accuracy: {}'.format(total_meter.avg))
    print('Accuracy per class\n==============================================')
    for i in range(10):
        print('Digit {}: {}'.format(i, class_meters[i].avg))
コード例 #19
0
ファイル: frame.py プロジェクト: Pycz/SeaWarCrazy
        def start_judge(self):
            if self.bot1_path and self.bot2_path:
                try:
                    self.play_thread_alive[0] = True
                    if self.judge:
                        self.judge.__del__()

                    tp = self.get_turn_pause()
                    rp = self.get_round_pause()
                    if not (tp is None) and not(rp is None):
                        self.judge = Judge(self.bot1_path, self.bot2_path,
                                       tp,
                                       rp,
                                       self.lock,
                                       self.play_thread_alive)
                        self.bot1_name = self.judge.bot1.name
                        wx.CallAfter(self.l_bot1_name.SetLabel, self.bot1_name + " (1)")
                        self.bot2_name = self.judge.bot2.name
                        wx.CallAfter(self.l_bot2_name.SetLabel, self.bot2_name + " (2)")
                except:
                    self.flush_all_to_default()
                    self.str_for_statusbar = "Error! You choose wrong file or file isn't a Bot program"
コード例 #20
0
ファイル: sudoku.py プロジェクト: camilatoth/finalproject
class Sudoku(object):
	def __init__(self):
		self.board = Board()
		self.input_reader = InputReader()
		self.judge = Judge(self.board)


	def start_game(self):
		print "Welcome to Sudoku!"

		while not self.board.is_game_over():
			self.board.print_board()
			move = self.input_reader.read_move()
			
			if move.is_quit():
				quit()

			if self.judge.is_valid_move(move.row_index, move.col_index, move.number):
				self.board.place_number(move.row_index, move.col_index, move.number)

			else:
				print "That is not a valid movement. Try again!"
コード例 #21
0
ファイル: rpsxserver.py プロジェクト: IAmBullsaw/rpsXTREME
    def handle_match_request(self, cs, p):
        pl('handling match request from {}'.format(str(p)))
        if self.has_players():
            pl('setting up normal match...')
            raise Exception(NotImplemented)
        else:
            pl('setting up bot match...')
            p2 = Player("Gunhilda", bot=True)

            ## Whos responsibility is this?
            # probably servers, right?
            # - think so, since it is the one serving the match and rules etc.
            if not p.has_moves_left():
                p.reset_moves()

            match = RPSXGame(p, p2, Judge(), bot=True)
            # One more match
            self.stats.add_match()

            self.send_cmd(cs, Command.OK)

            pl('match set up')
            self.handle_bot_match(cs, match, p2)
コード例 #22
0
ファイル: rpsxtreme.py プロジェクト: IAmBullsaw/rpsXTREME
def test():
    print("Testing game")
    print("0 = draw, -1 = p1 won, +1 = p2 won")
    p1 = Player('p1')
    p2 = Player('p2')
    match = RPSXGame(p1, p2, Judge())
    match.set_p1_move(Move.ROCK)
    match.set_p2_move(Move.PAPER)
    match.play()  # P2 should win
    score = match.get_snapshot().split(':')[2]
    pl(score)
    match.set_p1_move(Move.ROCK)
    match.set_p2_move(Move.ROCK)
    match.play()  # Should be a tie
    score = match.get_snapshot().split(':')[2]
    pl(score)
    match.set_p1_move(Move.ROCK)
    match.set_p2_move(Move.SCISSORS)
    match.play()  # P1 should win
    score = match.get_snapshot().split(':')[2]
    pl(score)
    match.finish()
    winner = match.get_winner()
    pl("Winner is: {}".format(winner))
コード例 #23
0
ファイル: main.py プロジェクト: seanwu506/CodeCraft-2019
def main():
    trainIndex = 2
    rootPath = '../../exam_map/train' + str(trainIndex)
    carPath = os.path.join(rootPath, 'car.txt')
    roadPath = os.path.join(rootPath, 'road.txt')
    crossPath = os.path.join(rootPath, 'cross.txt')
    answerPath = os.path.join(rootPath, 'answer.txt')
    presetAnswerPath = os.path.join(rootPath, 'presetAnswer.txt')
    start = time.time()

    carsDict = read_car(carPath)
    roadsDict = read_road(roadPath)
    crossesDict = read_cross(crossPath, roadsDict)
    read_answer(carsDict, answerPath, presetAnswerPath)
    judge = Judge(carsDict, roadsDict, crossesDict)
    judge.init()
    judge.judge()

    print("total run time: ", time.time() - start)
    print("map {} done!".format(trainIndex))
コード例 #24
0
 def __init__(self, options):
     self.options = options
     self.judge = Judge(self)
コード例 #25
0
ファイル: server.py プロジェクト: ilinum/utacm_icpc_autojudge
    with open(os.path.join(options.contest_dir, 'config.txt'), 'r') as in_file:
        contest_cfg = eval(in_file.read())
        
        seconds = contest_cfg['duration'] % 60
        minutes = contest_cfg['duration'] / 60 % 60
        hours = contest_cfg['duration'] / 60 / 60 % 60

        logger.debug("Duration: %02d:%02d:%02d" % (hours, minutes, seconds))
        logger.debug("Problems: " + str(contest_cfg['prob_ids']))
        logger.debug("Penalty: %d points / wrong submission" % contest_cfg['penalty'])

    problems = {prob_id: Problem(prob_id, options.contest_dir, logger)
                        for prob_id in contest_cfg['prob_ids']}
    contest = Contest(options.delay, contest_cfg['duration'], options.minutes_in,
                      contest_cfg['prob_ids'], contest_cfg['penalty'], logger)
    judge = Judge(contest, problems, options.contest_dir, options.num_judges, logger)

    application = web.Application(
        [
            (r'/', IndexHandler),
            (r'/index.html', IndexHandler),
            (r'/auth/login', AuthLoginHandler),
            (r'/auth/logout', AuthLogoutHandler),
            (r'/api/v1/admin/(.*)', AdminHandler),
            (r'/api/v1/log/(.*)', LogHandler),
            (r'/api/v1/metadata', MetadataHandler),
            (r'/api/v1/updates', UpdatesHandler),
            (r'/api/v1/submit/(.*)/solution', SubmitSolutionHandler),
            (r'/api/v1/submit/(.*)/clarification', SubmitClarificationHandler),
            (r'/api/v1/outputs/(.*)', OutputFileHandler),
            (r'/api/v1/errors/(.*)', ErrorFileHandler),
コード例 #26
0
import os
import sys
from judge import Judge
from constants import *
import json

#team_id, sub_id, lang_id, q_no, time_limit

try:
    if len(sys.argv) != 6:
        raise ValueError("Invalid number of arguments!")
    team_id = str(sys.argv[1])
    sub_id = int(sys.argv[2])
    lang_id = int(sys.argv[3])
    q_no = int(sys.argv[4])
    time_limit = int(sys.argv[5])
    judge_obj = Judge(team_id, sub_id, lang_id, q_no, time_limit)
    result = judge_obj.generate_result()
    if result is None:
        raise Exception("Invalid result generated")
    path_to_team = os.path.join(PATH_TO_SUBMISSION, str(team_id))
    path_to_sub_id = os.path.join(path_to_team, str(sub_id))
    path_to_result = os.path.join(path_to_sub_id, RESULT_FILE)
    json.dump(result, open(path_to_result, 'w'))

except Exception as e:
    print(e)
コード例 #27
0
#!/usr/bin/env python

import sys, os

try:
    from judge import Judge
    from judge import STDIO, FILE
except:
    path = os.path.realpath(__file__)
    path = os.path.split(path)[0]
    path = os.path.join(path, "..")
    path = os.path.join(path, "..")
    sys.path.append(path)
    from judge import Judge
    from judge import STDIO, FILE

if __name__ == "__main__":
    judge = Judge()
    judge.add_test(["sh", "1.sh", "yes"], "yesyes", style=STDIO)
    judge.add_test([
        "sh",
        "1.sh",
    ], "error", style=STDIO)
    judge.run()
コード例 #28
0
ファイル: train_judge.py プロジェクト: jvmncs/safe-debates
def main(args):
    # reproducibility
    if args.seed is not None:
        torch.manual_seed(
            args.seed)  # don't think this works with SparseMNIST right now
        np.random.seed(args.seed)
    if not os.path.isdir(args.checkpoint):
        mkdir_p(args.checkpoint)
    if args.checkpoint_filename is None:
        checkpoint_file = args.checkpoint + str(datetime.now())[:-10]
    else:
        checkpoint_file = args.checkpoint + args.checkpoint_filename

    # cuda
    args.use_cuda = not args.no_cuda and torch.cuda.is_available()
    device = torch.device("cuda" if args.use_cuda else "cpu")

    # eval?
    args.evaluate = args.val_batches > 0

    # prep sparse mnist
    if not args.evaluate:
        train_loader, _, test_loader = prepare_data(args)
    else:
        train_loader, val_loader, test_loader = prepare_data(args)

    # machinery
    model = Judge().to(device)
    optimizer = torch.optim.Adam(model.parameters(), lr=args.lr)

    # setup validation metrics we want to track for tracking best model over training run
    best_val_loss = float('inf')
    best_val_acc = 0

    print('\n================== TRAINING ==================')
    model.train()  # set model to training mode

    # set up training metrics we want to track
    correct = 0
    train_num = args.batches * args.batch_size

    # timer
    time0 = time.time()

    for ix, (
            sparse, img,
            label) in enumerate(train_loader):  # iterate over training batches
        sparse, label = sparse.to(device), label.to(
            device)  # get data, send to gpu if needed
        optimizer.zero_grad(
        )  # clear parameter gradients from previous training update
        logits = model(sparse)  # forward pass
        loss = F.cross_entropy(logits, label)  # calculate network loss
        loss.backward()  # backward pass
        optimizer.step(
        )  # take an optimization step to update model's parameters

        pred = logits.max(1, keepdim=True)[1]  # get the index of the max logit
        correct += pred.eq(
            label.view_as(pred)).sum().item()  # add to running total of hits

        if ix % args.log_interval == 0:  # maybe log current metrics to terminal
            print('Train: [{}/{} ({:.0f}%)]\tLoss: {:.6f}\t\
                Accuracy: {:.2f}%\tTime: {:0f} min, {:.2f} s'.format(
                (ix + 1) * len(sparse), train_num,
                100. * ix / len(train_loader), loss.item(),
                100. * correct / ((ix + 1) * len(sparse)),
                (time.time() - time0) // 60, (time.time() - time0) % 60))

    print(
        'Train Accuracy: {}/{} ({:.2f}%)\tTrain Time: {:0f} minutes, {:2f} seconds\n'
        .format(correct, train_num, 100. * correct / train_num,
                (time.time() - time0) // 60, (time.time() - time0) % 60))

    if args.evaluate:
        print('\n================== VALIDATION ==================')
        model.eval()

        # set up validation metrics we want to track
        val_loss = 0.
        val_correct = 0
        val_num = args.eval_batch_size * args.val_batches

        # disable autograd here (replaces volatile flag from v0.3.1 and earlier)
        with torch.no_grad():
            for sparse, img, label in val_loader:
                sparse, label = sparse.to(device), label.to(device)
                logits = model(sparse)

                val_loss += F.cross_entropy(logits, label,
                                            size_average=False).item()

                pred = logits.max(1, keepdim=True)[1]
                val_correct += pred.eq(label.view_as(pred)).sum().item()

        # update current evaluation metrics
        val_loss /= val_num
        val_acc = 100. * val_correct / val_num
        print(
            '\nValidation set: Average loss: {:.4f}, Accuracy: {}/{} ({:.2f}%)\n'
            .format(val_loss, val_correct, val_num, val_acc))

        is_best = val_acc > best_val_acc
        if is_best:
            best_val_acc = val_acc
            best_val_loss = val_loss  # note this is val_loss of best model w.r.t. accuracy,
            # not the best val_loss throughout training

        # create checkpoint dictionary and save it;
        # if is_best, copy the file over to the file containing best model for this run
        state = {
            'state_dict': model.state_dict(),
            'optimizer_state': optimizer.state_dict(),
            'val_loss': val_loss,
            'val_acc': val_acc,
        }
        save_checkpoint(state, is_best, checkpoint_file)

    print('\n================== TESTING ==================')
    check = torch.load(checkpoint_file + '-best.pth.tar')
    model.load_state_dict(check['state_dict'])
    model.eval()

    test_loss = 0.
    test_correct = 0
    test_num = args.eval_batch_size * args.test_batches

    # disable autograd here (replaces volatile flag from v0.3.1 and earlier)
    with torch.no_grad():
        for sparse, img, label in test_loader:
            sparse, label = sparse.to(device), label.to(device)
            logits = model(sparse)
            test_loss += F.cross_entropy(logits, label,
                                         size_average=False).item()
            pred = logits.max(
                1, keepdim=True)[1]  # get the index of the max logit
            test_correct += pred.eq(label.view_as(pred)).sum().item()

    test_loss /= test_num
    print('Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.2f}%)\n'.format(
        test_loss, test_correct, test_num, 100. * test_correct / test_num))

    print('Final model stored at "{}".'.format(checkpoint_file +
                                               '-best.pth.tar'))
コード例 #29
0
def create_tree(verbose=False):
    """
    Parameters
    ----------
    verbose: boolean
    Returns
    -------
    tree: DecisionTree
    """
    # Load the data.
    trips = load_data()  #loads data
    arrival_times_df = load_arrival_times(trips)

    # Assume nan means that the train is late.
    arrival_times_df.fillna(value=30, inplace=True)

    # Split the data into training and testing sets.
    training_dates = []
    tuning_dates = []
    testing_dates = []

    last_training_day = datetime.datetime.strptime('2016-04-30', '%Y-%m-%d')
    last_tuning_day = datetime.datetime.strptime('2017-04-30', '%Y-%m-%d')

    for datestr in arrival_times_df.columns:
        this_date = datetime.datetime.strptime(datestr, '%Y-%m-%d')
        if this_date <= last_training_day:
            training_dates.append(datestr)
        if this_date <= last_tuning_day:
            tuning_dates.append(datestr)
        else:
            testing_dates.append(datestr)

    training_df = arrival_times_df.loc[:, training_dates]
    tuning_df = arrival_times_df.loc[:, tuning_dates]
    testing_df = arrival_times_df.loc[:, testing_dates]

    training_features_df = create_features(list(training_df.columns))
    judge = Judge(training_df)

    # Tune our hyperparameter.
    # Iterate over values for n_min.
    best_tuning_score = 1e10
    best_n_min = 0
    best_tree = None
    for n_min in range(10, 100, 10):

        tree = DecisionTree(err_fn=judge.find_total_absolute_deviation,
                            n_min=n_min)
        tree.fit(training_features_df)
        training_score = evaluate(tree, training_df)
        tuning_score = evaluate(tree, tuning_df)

        if tuning_score < best_tuning_score:
            best_tuning_score = tuning_score
            best_n_min = n_min
            best_tree = tree

        if verbose:
            print('n_min', n_min)
            print('training', training_score)
            print('tuning', tuning_score)
            tree.render()

    testing_score = evaluate(best_tree, testing_df)

    if verbose:
        print('best_n_min', best_n_min)
        print('best_tuning', best_tuning_score)
        print('testing score', testing_score)

    return best_tree
コード例 #30
0
ファイル: run.py プロジェクト: shihuaxing/scir-training-day
#!/usr/bin/env python

import sys, os

try:
    from judge import Judge
    from judge import STDIO, FILE
except:
    path = os.path.realpath(__file__)
    path = os.path.split(path)[0]
    path = os.path.join(path, "..")
    path = os.path.join(path, "..")
    sys.path.append(path)
    from judge import Judge
    from judge import STDIO, FILE

if __name__ == "__main__":
    judge = Judge()
    judge.add_test([
        "sh",
        "1.sh",
    ], "11", style=STDIO)
    judge.add_test([
        "sh",
        "2.sh",
    ], "17", style=STDIO)
    #judge.add_test(["sh", "3.sh",], "b\ne",     style=STDIO)
    #judge.add_test(["sh", "4.sh",], "4.out",    style=FILE)
    judge.run()
コード例 #31
0
ファイル: test.py プロジェクト: Mr-Phoebe/BOJ-V2
#!/usr/bin/env python
import time
from compile import Compile
from sub import Sub
from judge import Judge
c = Compile()
s = Sub()
s.sid = 1
s.lang = 'g++'
c.compile(s)
print 'ce:'+s.ce
print 'status:'+str(s.status)
s.pid = 15
s.case_cnt = 1
s.time_lim = 1000
s.mem_lim = 10240
s.case_lim = [{'time':1000, 'mem':4000},]
j = Judge()
j.judge(s)
print 'status:'+str(s.status)
print s.case_res

コード例 #32
0
ファイル: overview.py プロジェクト: keyvankhademi/tps-web
 def _get_params_form_class(self, task_type_name):
     task_type = Judge.get_judge().get_task_type(task_type_name)
     return task_type.get_parameters_form()
コード例 #33
0
ファイル: main.py プロジェクト: fredvol/paralogger
 def load_judge_file(self, judge_path="judge1.json"):
     try:
         self.judge = Judge(judge_path)
     except Exception as ex:
         logger.error(ex)
コード例 #34
0
        minutes = contest_cfg['duration'] / 60 % 60
        hours = contest_cfg['duration'] / 60 / 60 % 60

        logger.debug("Duration: %02d:%02d:%02d" % (hours, minutes, seconds))
        logger.debug("Problems: " + str(contest_cfg['prob_ids']))
        logger.debug("Penalty: %d points / wrong submission" %
                     contest_cfg['penalty'])

    problems = {
        prob_id: Problem(prob_id, options.contest_dir, logger)
        for prob_id in contest_cfg['prob_ids']
    }
    contest = Contest(options.delay, contest_cfg['duration'],
                      options.minutes_in, contest_cfg['prob_ids'],
                      contest_cfg['penalty'], logger)
    judge = Judge(contest, problems, options.contest_dir, options.num_judges,
                  logger)

    application = web.Application(
        [
            (r'/', IndexHandler),
            (r'/index.html', IndexHandler),
            (r'/auth/login', AuthLoginHandler),
            (r'/auth/logout', AuthLogoutHandler),
            (r'/api/v1/admin/(.*)', AdminHandler),
            (r'/api/v1/log/(.*)', LogHandler),
            (r'/api/v1/metadata', MetadataHandler),
            (r'/api/v1/updates', UpdatesHandler),
            (r'/api/v1/submit/(.*)/solution', SubmitSolutionHandler),
            (r'/api/v1/submit/(.*)/clarification', SubmitClarificationHandler),
            (r'/api/v1/errors/(.*)', ErrorFileHandler),
        ],
コード例 #35
0
    #由于cv2.imwrite不支持保存图片到中文路径,用以下方法代替cv2.imwrite
    cv2.imencode('.jpg', general_crop)[1].tofile(general_img)

    #返回零件号的精确截图
    accurate_crop = extract_part(general_crop)
    name_img = os.path.join(os.path.dirname(__file__), "accurate_crop",
                            'part' + str(index) + '.jpg')

    #保存零件号截图
    #cv2.imwrite(name_img,accurate_crop)
    #由于cv2.imwrite不支持保存图片到中文路径,用以下方法代替cv2.imwrite
    cv2.imencode('.jpg', accurate_crop)[1].tofile(name_img)

    #识别图片零件号
    part_num = tran_text(name_img)
    models = Judge(part_num)
    part_nums.append([part_num, models])

output = os.path.join(path, "output")
#清空所有文件夹及其内部的文件
shutil.rmtree(os.path.join(output, "2GW"))
os.mkdir(os.path.join(output, "2GW"))
shutil.rmtree(os.path.join(output, "2HX"))
os.mkdir(os.path.join(output, "2HX"))
shutil.rmtree(os.path.join(output, "2LD"))
os.mkdir(os.path.join(output, "2LD"))
shutil.rmtree(os.path.join(output, "2QJ"))
os.mkdir(os.path.join(output, "2QJ"))
shutil.rmtree(os.path.join(output, "2SV"))
os.mkdir(os.path.join(output, "2SV"))
shutil.rmtree(os.path.join(output, "2YS"))
コード例 #36
0
 def __init__(self):
     self.judge = Judge() #need to pause it
     self.initGame()
コード例 #37
0
import shutil
from config import config
from judge import Judge
import logging
import math
import inspect
import ctypes
import time
from tkinter import messagebox

logging.basicConfig(
    level=logging.ERROR,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    filename='log/error.log')
logger = logging.getLogger(__name__)
judge_handler = Judge()


def _async_raise(tid, exctype):
    """raises the exception, performs cleanup if needed"""
    tid = ctypes.c_long(tid)
    if not inspect.isclass(exctype):
        exctype = type(exctype)
    res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid,
                                                     ctypes.py_object(exctype))
    if res == 0:
        raise ValueError("invalid thread id")
    elif res != 1:
        # """if it returns a number greater than one, you're in trouble,
        # and you should call it again with exc=NULL to revert the effect"""
        ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
コード例 #38
0
ファイル: run.py プロジェクト: 52nlp/scir-training-day
#!/usr/bin/env python

import sys, os

try:
    from judge import Judge
    from judge import STDIO, FILE
except:
    path = os.path.realpath(__file__)
    path = os.path.split(path)[0]
    path = os.path.join(path, "..")
    path = os.path.join(path, "..")
    sys.path.append(path)
    from judge import Judge
    from judge import STDIO, FILE

if __name__=="__main__":
    judge = Judge()
    judge.add_test(["sh", "1.sh",], "11",       style=STDIO)
    judge.add_test(["sh", "2.sh",], "17",       style=STDIO)
    judge.add_test(["sh", "3.sh",], "b\ne",     style=STDIO)
    judge.add_test(["sh", "4.sh",], "4.out",    style=FILE)
    judge.run()
コード例 #39
0
ファイル: run.py プロジェクト: niuox/scir-training-day
#!/usr/bin/env python

import sys, os

try:
    from judge import Judge
    from judge import STDIO, FILE
except:
    path = os.path.realpath(__file__)
    path = os.path.split(path)[0]
    path = os.path.join(path, "..")
    path = os.path.join(path, "..")
    sys.path.append(path)
    from judge import Judge
    from judge import STDIO, FILE

if __name__ == "__main__":
    judge = Judge()
    judge.add_test(["sh", "1.sh"], "11", style=STDIO)
    judge.add_test(["sh", "2.sh"], "17", style=STDIO)
    # judge.add_test(["sh", "3.sh",], "b\ne",     style=STDIO)
    # judge.add_test(["sh", "4.sh",], "4.out",    style=FILE)
    judge.run()
    sources = list({"lastfm", "discogs", "tagtraum"} - {target})
    dataset_path = os.path.join(utils.FOLDS_DIR,
                                "{0}_4-fold_by_artist.tsv".format(target))
    dhelper = DataHelper(sources, target, dataset_path=dataset_path)
    print(dhelper.dataset_df)

    source_tags = [
        f"{source}:{el}" for source in sources
        for el in utils.corpus_genres_for_source(dhelper.dataset_df, source)
    ]
    target_tags = [
        f"{target}:{el}"
        for el in utils.corpus_genres_for_source(dhelper.dataset_df, target)
    ]
    tm = TagManager.get(sources, target, source_tags, target_tags)
    judge = Judge()
    print("The judge was initialized")

    translators = {}
    tr = DbpMappingTranslator(
        tm, ''.join([
            utils.ISMIR2019_TRANSLATION_TABLES_DIR, "distance_table_dbpedia_",
            target
        ]))
    translators['baseline'] = tr

    models = {}
    models['avg_init'] = ''.join(
        [utils.ACOUSTICBRAINZ_EMBS_DIR, "/avg_initial_embs.csv"])
    models['avg_retro_unweighted'] = ''.join(
        [utils.ACOUSTICBRAINZ_EMBS_DIR, "/avg_retro_unweighted_embs.csv"])
コード例 #41
0
ファイル: main.py プロジェクト: fredvol/paralogger
class Prog(QtGui.QMainWindow):
    """This is the MAIN program, this is the start point,
     nothing should be calle from doutside of this class.
    
    Arguments:
        QtGui.QMainWindow {QMainWindow object } -- QMainWindow legacy
    
    Returns:
        [None] -- Just run until it closed
    """
    def __init__(self):
        super().__init__(None)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.timer = QtCore.QTimer(self)

        #set up the log tab
        logTextBox = QTextEditLogger(self)

        logTextBox.setFormatter(
            logging.Formatter(
                '"%(asctime)s - %(levelname)s \t- %(module)s \t- %(funcName)s ::  %(message)s"'
            ))
        logging.getLogger().addHandler(logTextBox)
        layout_log = QtWidgets.QVBoxLayout()
        layout_log.addWidget(logTextBox.widget)
        self.ui.tab_log.setLayout(layout_log)
        logger.info("--- Start ---")
        logger.info("Python : " + str(sys.version))
        logger.info("Prog  version : " + str(__version__))
        logger.info("-------")

        #Set up variable
        self.flight = None
        self.visualizer_3d = None
        self.judge = None
        self.load_judge_file()

        #add Action
        self.ui.actionOpen.triggered.connect(self.open_pickle_file)
        self.ui.actionSave_as.triggered.connect(self.save_pickle_file)
        self.ui.actionimport.triggered.connect(self.import_log_window)
        self.ui.actionVersion.triggered.connect(self.about_popup)
        self.ui.actionHelp.triggered.connect(self.openUrl_help)
        self.ui.actiondebug_open.triggered.connect(self.debug)

        self.ui.treeWidget.itemClicked.connect(self.onTreeItemClicked)
        self.ui.treeWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.ui.treeWidget.customContextMenuRequested.connect(self.openMenu)

        #setup Qtree
        self.ui.treeWidget.setHeaderLabels(["Name", "Kind", "Id"])

        #setup table view detail section
        self.ui.model = QtGui.QStandardItemModel(self)
        self.ui.tableView.setModel(self.ui.model)
        self.ui.model.dataChanged.connect(self.on_datachange_model)

        #setup iteractive console
        ## build an initial namespace for console commands to be executed in (this is optional;
        ## the user can always import these modules manually)
        namespace = {'prog': self, "Kind": Kind}
        ## initial text to display in the console
        text = " This is an interactive python console \n the following namespace are imported:\n" + str(
            list(namespace.keys())) + " \n  Go, play."

        self.c = pyqtgraph.console.ConsoleWidget(namespace=namespace,
                                                 text=text)
        mainLayout_console = QtWidgets.QVBoxLayout()
        mainLayout_console.addWidget(self.c)
        self.ui.tab_console.setLayout(mainLayout_console)
        logger.info(" interactive console ready")

    def debug(self):
        ''' only use for speed up de developement
        '''
        self.open_pickle_file(
            "samples/Flight2_gourdon_v0-2-0.pkl")  #linux path

    def load_judge_file(self, judge_path="judge1.json"):
        try:
            self.judge = Judge(judge_path)
        except Exception as ex:
            logger.error(ex)

    def open_pickle_file(self, filename=None):
        """Function to import a file already saved, format is classic python pickle .pkl
        
        Keyword Arguments:
            filename {[str]} -- if a path is given the browse dialog do not open ( use for debug function) (default: {None})
        
        Returns:
            [None] -- But saved the nex loaded flight in the main self.Flight object.
        """

        if filename == False:
            filename = QtGui.QFileDialog.getOpenFileName(
                self, 'Open pickler File', "", 'Pickle Files (*.pkl)')

        if isinstance(filename, tuple):
            filename = filename[0]
        if filename:
            try:
                logger.info(" importing : " + str(filename))
                self.file_name = filename
                self.id = 0
                with open(filename, 'rb') as pickle_file:
                    self.flight = pickle.load(pickle_file)

                #Check for version of the opened file
                if hasattr(self.flight, 'flight_version'):
                    if int(self.flight.flight_version
                           ) < __pickle_file_version__:
                        logger.info(" !! Importing Old file format: " +
                                    str(self.flight.flight_version) +
                                    " current is: " +
                                    str(__pickle_file_version__))
                else:
                    logger.info(
                        " !! Importing a file without flight_version info: version can not be checked "
                    )

                self.update_project_tree()

            except Exception as ex:
                logger.error(ex)

    def save_pickle_file(self):
        """Save the current self.Flight object to a pickle file. (.pkl)
        """
        try:
            tuple_saved_file = QtGui.QFileDialog.getSaveFileName(
                self, 'Save File', '', 'Pickle(*.pkl)')
            name_saved_file = tuple_saved_file[0] + '.pkl'
            logger.info("Saving as : " + name_saved_file[0] + '.pkl')
            with open(name_saved_file, "wb") as f:
                pickle.dump(self.flight, f)

        except Exception as ex:
            logger.error(ex)

    def import_log_window(self):
        """Function will display a other dialog to fill for loading a raw  log file
        the dialog will auto close when the import is finish.
        """
        widget_import_new = import_log_diaglog()
        widget_import_new.exec_()
        logger.debug("back in main prog")
        try:  # try to copy the flight object from the dialog windows to the main Flight object
            self.flight = widget_import_new.imported_Flight
            self.update_project_tree()
        except Exception as ex:
            logger.warning(ex)

    def about_popup(self):
        """ About section 
        Display various info for debug and system details
        TODO ; having a better list of the enviroment module and their version.
        """

        # from https://stackoverflow.com/questions/54447535/how-to-fix-typeerror-in-qtwidgets-qmessagebox-for-popup-messag
        cwd = os.path.dirname(os.path.abspath(__file__))

        log_content = getSystemInfo()

        msg = QtWidgets.QMessageBox()
        msg.setIcon(QtWidgets.QMessageBox.Information)
        msg.setText("Version : " + str(__version__) + "\n"
                    "pkl file version: " + str(log_file_name) + "\n"
                    "Log file name: " + str(__pickle_file_version__) + "\n"
                    "curent working directory: " + str(cwd))
        msg.setInformativeText(
            "More info on :\nhttps://github.com/fredvol/paralogger ")
        msg.setWindowTitle("About")
        msg.setDetailedText(log_content)
        msg.setStandardButtons(
            QtWidgets.QMessageBox.Ok)  #| QtWidgets.QMessageBox.Cancel)

        retval = msg.exec_()

    def openUrl_help(self):
        """Open github page in browser
        """
        url = QtCore.QUrl('https://github.com/fredvol/paralogger')
        if not QtGui.QDesktopServices.openUrl(url):
            QtGui.QMessageBox.warning(self, 'Open Url', 'Could not open url')

    ### TREE VIEW  ###
    # Tree view will display the flight and all the sections attach to.

    def update_project_tree(self):
        """repopulated the tree view , to show modif.
        """
        logger.info("update_project_tree")
        tw = self.ui.treeWidget
        tw.clear()
        if self.flight != None:
            l1 = QtWidgets.QTreeWidgetItem(
                [self.flight.glider, "--", self.flight.id])

            for sect in self.flight.sections:
                l1_child = QtWidgets.QTreeWidgetItem([
                    str(sect.start) + " - " + str(sect.end),
                    str(sect.kind.value), sect.id
                ])
                l1.addChild(l1_child)

            tw.addTopLevelItem(l1)
            tw.expandAll()
        else:
            logger.info(" Flight  is empty, nothing to display")

    def get_level_from_index(self, indexes):
        """Return the level in the treeview
        level 0 = Flight
        level 1 = Section
        
        Arguments:
            indexes {[QModelIndex]} -- not realy clear for me !
        
        Returns:
            level [Int]  -- The level of the cliked item
        """

        if len(indexes) > 0:
            level = 0
            index = indexes[0]
            while index.parent().isValid():
                index = index.parent()
                level += 1
        else:
            level = -1

        return level

    @QtCore.pyqtSlot(QtWidgets.QTreeWidgetItem, int)
    def onTreeItemClicked(self, it, col):
        """function trigered when an object is cliked on the tree view
        This a central function which dispath the work to the other objects .
        
        Arguments:
            it {QTreeWidgetItem} -- item cliked
            col {int} -- index of  columns cliked
        """

        indexes = self.ui.treeWidget.selectedIndexes()

        level = self.get_level_from_index(indexes)

        if level >= 0:  # if a Flight or a Section
            uid = it.text(2)  # The text of the node.
            logger.debug("clicked: " + str(it) + ", " + str(col) + ", " +
                         str(uid) + " level: " + str(level))
        else:
            uid = None

        #Job dispatching
        if level == 0:  # flight  level
            self.populate(uid, level)
            self.display_tab_Table(None)

        elif level == 1:  # section level
            #update all tabs
            self.display_tab_graph(uid)
            self.display_tab_Table(uid)
            self.display_tab_3D(uid)
            self.display_tab_analysis(uid)

            self.populate(uid, level)

    def openMenu(self, position):
        """Open contextual menu in tree View widget
        
        Arguments:
            position {[type]} -- [description]
        """
        indexes = self.ui.treeWidget.selectedIndexes()
        item = self.ui.treeWidget.itemAt(position)

        menu = QtWidgets.QMenu()

        level = self.get_level_from_index(indexes)
        if level > 0 and item != None:
            uid = item.text(2)  # The UId of teh object

        if level == 0:  # Flight
            action_add = menu.addAction(self.tr("Add Section"))
            action_add.triggered.connect(self.add_section)
            action_refresh = menu.addAction(self.tr("Refresh"))
            action_refresh.triggered.connect(self.update_project_tree)

            action_export_csv = menu.addAction('Export CSV')
            action_export_csv.triggered.connect(
                lambda: self.export_df(expformat="csv"))

            action_export_xls = menu.addAction('Export XLSX')
            action_export_xls.triggered.connect(
                lambda: self.export_df(expformat="xlsx"))

            action_export_xls = menu.addAction('Export device parameters')
            action_export_xls.triggered.connect(self.export_device_param)

        elif level == 1:  #Section
            action_export_csv = menu.addAction('Export CSV')
            action_export_csv.triggered.connect(
                lambda: self.export_df(uid, expformat="csv"))

            action_export_xls = menu.addAction('Export XLSX')
            action_export_xls.triggered.connect(
                lambda: self.export_df(uid, expformat="xlsx"))

            action_del = menu.addAction('Delete')
            action_del.triggered.connect(lambda: self.delete_section(uid))

            action_refresh = menu.addAction(self.tr("Refresh"))
            action_refresh.triggered.connect(self.update_project_tree)

        menu.exec_(self.ui.treeWidget.viewport().mapToGlobal(position))

    def delete_section(self, uid):
        """Delete the a Section from the self.Flight and refresh
        
        Arguments:
            uid {Str} -- Uid of the Section to delete
        """
        logger.info("delete section :" + str(uid))
        self.flight.delete_section(uid)
        self.update_project_tree()

    def add_section(self):
        """Add a section in self.Flight
        By default  there start from 0 to the end.
        """
        logger.info("add section")
        self.flight.add_general_section()
        self.update_project_tree()

    def export_device_param(self):
        """ Export the internal parameters of the PX4 
        TODO  not avaible if not PX4 filter
        """

        df_param = self.flight.data[0].device_param
        tuple_export_file = QtGui.QFileDialog.getSaveFileName(
            self, 'csv_file', '', '.csv')
        name_export_file = tuple_export_file[0] + '.csv'
        with open(name_export_file, 'w', newline="") as csv_file:
            writer = csv.writer(csv_file)
            for key, value in df_param.items():
                writer.writerow([key, value])

        logger.info("Device parameters exported : " + str(name_export_file))

    def export_df(self, uid=None, expformat="csv"):
        """Export Dataframe  in different format
        
        Keyword Arguments:
            uid {str} -- Uid of the Section to export (default: {None})
            expformat {str} -- Format to export [csv , xlsx] (default: {"csv"})
        
        If UID is None then export the flight ( maybe change to use the level info, to be consitent)
        """
        # TODO add multi sheet( xlsx) or file (csv) if multi data_file in flight
        if uid != None:  # if it is a section
            df_to_export = self.flight.apply_section(uid)
        else:  # if not section passed , then export main df
            df_to_export = self.flight.get_df_by_position(Position.PILOT)[0]
        try:
            tuple_export_file = QtGui.QFileDialog.getSaveFileName(
                self, 'Export Dataframe File', '', '.' + str(expformat))
            name_export_file = tuple_export_file[0] + '.' + str(expformat)
            if expformat == 'csv':
                df_to_export.to_csv(name_export_file)
            elif expformat == 'xlsx':
                logger.info(
                    "Exporting to Excel can take a while, coffee time ...")
                df_to_export.to_excel(name_export_file)
            logger.info("Exported as : " + name_export_file)
        except Exception as ex:
            logger.error(ex)

    #### TAB WIDGET ACTIONS ###
    # This section manage all the Tab ins the view part of the main windows.

    def display_tab_3D(self, uid):
        """Call the Tab_3d.py  and generated a 3D view .
        
        Arguments:
            uid {str} -- id of the Section to display
        Nothing append if Flight is selected, only for Sections

        TODO reload data when other section are cliked ( only display the first cliked one)
        """

        df_to_plot = self.flight.apply_section(uid)
        ####

        self.visualizer_3d = Visualizer3D(self.ui.tab_3d)
        self.visualizer_3d.animation(df_to_plot, True, timer=self.timer)
        #empty actual area if exist
        if len(self.ui.tab_3d.children()) > 0:
            layout = self.ui.tab_3d.children()[0]
            deleteItemsOfLayout(layout)

            layout.addWidget(self.visualizer_3d.area)

        else:
            mainLayout = QtWidgets.QVBoxLayout()
            mainLayout.addWidget(self.visualizer_3d.area)
            self.ui.tab_3d.setLayout(mainLayout)

    def display_tab_analysis(self, uid):
        logger.debug(" in display_tab_analysis")
        logger.debug(self.judge)

        df_to_analysis = self.flight.apply_section(uid)
        section = self.flight.section_by_id(uid)

        logger.debug(section)
        logger.debug(df_to_analysis.info())

        if self.judge != None:
            hash_judge, hash_dict_crit = self.judge.hash_state()
            self.ui.label_judge_file.setText(str(self.judge))
            self.ui.label_hash_judge_value.setText(hash_judge)
            self.ui.label_hash_crit_value.setText(hash_dict_crit)

            table_analysis = self.ui.tableWidget_analysis

            result_section = self.judge.run(df_to_analysis, section.kind.value)

            column_name = ["Test", "Value", "unit", "Grade"]
            column_count = (len(column_name))

            table_analysis.setColumnCount(column_count)

            table_analysis.setHorizontalHeaderLabels(column_name)

            for key, value in result_section.items():
                currentRowCount = table_analysis.rowCount()

                table_analysis.insertRow(currentRowCount)
                table_analysis.setItem(currentRowCount, 0,
                                       QtGui.QTableWidgetItem(str(key)))
                table_analysis.setItem(
                    currentRowCount, 1,
                    QtGui.QTableWidgetItem(str(value["value"])))
                table_analysis.setItem(
                    currentRowCount, 2,
                    QtGui.QTableWidgetItem(str(value["unit"])))
                table_analysis.setItem(
                    currentRowCount, 3,
                    QtGui.QTableWidgetItem(str(value["grade"])))

    def display_tab_Table(self, uid):
        """ Display the Pilot dataframe  in a table
        
        Arguments:
            uid {str} -- id of the Section to display

        For Flight and Section.
        ! only for dataframe  at pilot position
        TODO : Manage if no pilot position is available
        """
        try:
            if uid != None:  # if it is a section
                df_to_plot = self.flight.apply_section(uid)
            else:  # if not section passed , then plot main df
                df_to_plot = self.flight.get_df_by_position(Position.PILOT)[0]

            model = pandasTableModel(df_to_plot)
            if len(self.ui.tab_table.children()) > 0:
                self.ui.tab_table.children()[1].setModel(model)
            else:
                mainLayout = QtWidgets.QVBoxLayout()

                view = QtWidgets.QTableView()
                view.setModel(model)

                mainLayout.addWidget(view)

                self.ui.tab_table.setLayout(mainLayout)
        except Exception as ex:
            logger.warning(ex)
            pass

    def display_tab_graph(self, uid):
        """PLot different Graph 

        Arguments:
            uid {str} -- id of the Section to display
        
        Work only for Section
        TODO: Display full Flight with the section part Highlighted.
        """

        df_to_plot = self.flight.apply_section(uid)
        inside_widget = generated_layout(df_to_plot)

        #empty actual area if exist
        if len(self.ui.tab_graph.children()) > 0:
            print("layout not empty")
            layout = self.ui.tab_graph.children()[0]
            deleteItemsOfLayout(layout)
            # Old code for deleting item
            # for i in reversed(range(layout.count())):
            #     widgetToRemove = layout.itemAt(i).widget()
            #     # remove it from the layout list
            #     layout.removeWidget(widgetToRemove)
            #     # remove it from the gui
            #     widgetToRemove.setParent(None)

            layout.addWidget(inside_widget)

        else:
            mainLayout = QtWidgets.QVBoxLayout()
            mainLayout.addWidget(inside_widget)
            self.ui.tab_graph.setLayout(mainLayout)

    ## DETAILS OBJECT

    def on_datachange_model(self, signal):
        """Function use to update the self.Flight object  when a value is changed in the Detail table view
        
        Arguments:
            signal {QModelIndex} -- Index of the modified cell

        TODO block the edition of enum type ( kind , device , position) or even better implement combobox on GUI
        """
        row = signal.row()  # retrieves row of cell that was double clicked
        column = signal.column(
        )  # retrieves column of cell that was double clicked
        cell_dict = self.ui.model.itemData(
            signal)  # returns dict value of signal
        cell_value = cell_dict.get(0)  # retrieve value from dict

        uid = self.ui.model.itemData(signal.sibling(0, 1)).get(0)

        index = signal.sibling(row, 0)
        index_dict = self.ui.model.itemData(index)
        index_value = index_dict.get(0)
        logger.debug(
            'Edited Row {}, Col {} value: {} index_value: {}, uid: {}'.format(
                row, column, cell_value, index_value, uid))

        ## Update the Data model ( self.flight) from the changed done in self.ui_model
        if self.flight.id == uid:
            setattr(self.flight, index_value, cell_value)
        else:
            for sect in self.flight.sections:
                if sect.id == uid:
                    setattr(sect, index_value, cell_value)

        ## Update tree view:
        self.update_project_tree()

    def populate(self, uid, level):
        """ Add data in the Table view , via model 
        Exxtract a Dict of of a object properties.
        ! model only accepts strings - must convert.
 
        Arguments:
            uid {str} -- ID of the object to display
            level {int} -- object cliked level ( FLight or Section)
        """

        logger.debug("display_properties of: " + str(uid))
        self.ui.model.clear()  # Clear th UI model notthe self.Flight

        if level == 0:
            dict_to_display = vars(self.flight)
        elif level == 1:
            dict_to_display = vars(self.flight.section_by_id(uid))

        for name, value in dict_to_display.items():
            row = []
            cell_name = QtGui.QStandardItem(str(name))

            if isinstance(value, Kind):
                cell_value = QtGui.QStandardItem(str(value))
                # TODO  display combobox with a list of option (QItemDelegate? )

            else:
                cell_value = QtGui.QStandardItem(str(value))

            row.append(cell_name)
            row.append(cell_value)

            self.ui.model.appendRow(row)
コード例 #42
0
ファイル: problem.py プロジェクト: keyvankhademi/tps-web
 def get_judge(self):
     return Judge.get_judge()
コード例 #43
0
ファイル: sudoku.py プロジェクト: camilatoth/finalproject
	def __init__(self):
		self.board = Board()
		self.input_reader = InputReader()
		self.judge = Judge(self.board)
コード例 #44
0
class Scraper:
    def __init__(self,url):
        self.url = url          # 要分析的url
        self.block_li = []      # 网页所包含的文本块列表
        self.title = ''
        #重置记录
        self.recorder = Recorder()
        self.recorder.reset()
        
    # 从正文前后和其中中提取图片,只取第一个
    # 只取图片大小足够大的
    def get_images(self,block):
        imgs = []
        
        # 设定image搜索起点
        if self.title != self.parser.soup.title:
            start = self.title
        else:
            # title不在正文中,向上扩展image搜索范围
            # 向下扩展image搜索范围
            start = block.text_list()[0]        
            while start.previous:
                start = start.previous
                if not isinstance(start,NavigableString) and start.name in BLOCK_TAGS:
                    break
                
        # 设定image搜索终点
        end = block.text_list()[-1]
        while end.next:
            end = end.next
            if not isinstance(end,NavigableString) and end.name in BLOCK_TAGS:
                break

        while start!=end:
            if not isinstance(start,NavigableString) and start.name=='img':
                imgs.append( start ) 
            start = start.next
        return self.filter_images( imgs )

    def filter_images( self,imgs ):
        srcs = []
        images = []
        for img in imgs:
            if img.has_key('src'):
                src = img['src']
                if not src.lower().startswith('http://'):
                    src = relative2absolute( self.url,src )
                    # 判断图片大小,太小不要
                try:
                    im = urlopen( src ).read()
                    if len(im)>MIN_IMG_SIZE:
                        srcs.append( src )
                        #img['src'] = src
                        images.append( img )
                except IOError:
                    pass
        return (srcs,images)
    # 如果图像出现在block中,则添加图像和图像p内的ns
    def insert_images(self,block,images):
        start = self.title
        end = block.text_list()[-1]
        behind_img = False
        #block.print_ns()

        i = 0                   # 记录block中文本编号
        while start!=end:
            if not isinstance(start,NavigableString) :
                if start.name=='img' and start in images:
                    src = start['src']
                    if not src.lower().startswith('http://'):
                        start['src'] = relative2absolute( self.url,src )
                    #print i,":",str(start),"[]"
                    block.insert( i,start ) 
                    #block.print_ns()
                    i += 1
                    behind_img = True
                elif start.name=='br':
                    #print i,":",str(start),"[]"
                    # 加入换行符
                    block.insert( i,start ) 
                    #block.print_ns()
                    i += 1
                elif start.name in BLOCK_TAGS:
                    behind_img = False
            # NavigableString
            elif start.string.strip():
                # 已经在正文块中
                if start in block.text_list():
                    #print i,":",start.string
                    i += 1 
                    behind_img = False
                # 不在正文块中,在图片后的兄弟文本
                elif behind_img:
                    #print i,":",start.string,"[]"
                    block.insert( i,start )
                    #block.print_ns()
                    i += 1
            start = start.next
    
        return block
    # 执行流程,返回提取到的正文
    def get_content(self):
         # 1.提取基本文本块
        self.parser = Parser(self.url)
        ns_list = self.parser.ns()
        self.title = self.parser.get_title()
        # 2.文本串分块
        self.partitioner = Partitioner()
        blocks = self.partitioner.partition(ns_list) 

        # 3.抽取正文块,副产品为分析信息
        self.judge = Judge( self.title.string,ns_list )
        res = self.judge.select( blocks,ns_list )   

        flag = res['flag']
        cblock = res['block']
        confidence = res['confidence']
        detail = res['detail']
        #if flag:
        content = cblock.to_str()
        (srcs,images) = self.get_images( cblock )
        cblock = self.insert_images(cblock,images)
        content_with_format = cblock.to_str_with_format()
        #else:
        #    content = ""
        #    content_with_format = ""
        #    srcs = None
        return (flag,self.title.string.strip(),content,content_with_format,srcs,confidence,detail)
コード例 #45
0
import sys, os

try:
    from judge import Judge
    from judge import STDIO, FILE
except:
    path = os.path.realpath(__file__)
    path = os.path.split(path)[0]
    path = os.path.join(path, "..")
    path = os.path.join(path, "..")
    sys.path.append(path)
    from judge import Judge
    from judge import STDIO, FILE

if __name__ == "__main__":
    judge = Judge()
    judge.add_test([
        "sh",
        "1.sh",
    ], "11", style=STDIO)
    judge.add_test([
        "sh",
        "2.sh",
    ], "17", style=STDIO)
    judge.add_test([
        "sh",
        "3.sh",
    ], "b\ne", style=STDIO)
    judge.add_test([
        "sh",
        "4.sh",
コード例 #46
0
ファイル: frame.py プロジェクト: Pycz/SeaWarCrazy
class MyFrame(wx.Frame):

        def __init__(self):
            wx.Frame.__init__(self, None, -1, size=(790, 620), title = "SeaWar Judge", pos = (300, 60))
            self.panel = wx.Panel(self, -1)
            self.judge = None
            self.field_top = 30
            self.field_left = 30
            self.field_down = self.field_top + 400
            self.field1 = Field( Map(), self.panel, (self.field_left, self.field_top), 30)
            self.field2 = Field( Map(), self.panel, (400, self.field_top), 30)


            self.b_add_bot1 = wx.Button(self.panel, -1, "Choose bot 1", pos = (self.field_left + 30,
                                                                               self.field_down),
                                        size = (300, 40))

            self.Bind(wx.EVT_BUTTON, self.on_add_bot1, self.b_add_bot1)

            self.b_add_bot2 = wx.Button(self.panel, -1, "Choose bot 2", pos = (430,
                                                                               self.field_down),
                                        size = (300, 40))

            self.Bind(wx.EVT_BUTTON, self.on_add_bot2, self.b_add_bot2)


            wildcard = "Python files (*.py)|*.py|All files (*.*)|*.*"
            self.dialog = wx.FileDialog(None, "Choose a bot executable", os.getcwd(),
                                   "", wildcard, wx.OPEN)

            self.bot1_path = None
            self.bot2_path = None

            self.bot1_name = None
            self.bot2_name = None

            self.l_bot1_name = wx.StaticText(self.panel, -1, "?BOT1?", pos = (self.field_left + self.field1.size,
                                                                               self.field_top - 20))

            self.l_bot2_name = wx.StaticText(self.panel, -1, "?BOT2?", pos = (400 + self.field2.size,
                                                                               self.field_top - 20))

            self.big_font = wx.Font(18, wx.DEFAULT, wx.DEFAULT, wx.DEFAULT)
            self.small_font = wx.Font(8, wx.DEFAULT, wx.DEFAULT, wx.DEFAULT)
            self.bold_font = wx.Font(40, wx.DEFAULT, wx.DEFAULT, wx.BOLD)
            self.l_bot1_name.SetForegroundColour("Green")
            self.l_bot2_name.SetForegroundColour("Red")
            self.l_bot1_name.SetFont(self.big_font)
            self.l_bot2_name.SetFont(self.big_font)


            self.l_bot1_wins = wx.StaticText(self.panel, -1, "0", pos = (self.field_left + 70,
                                                                               self.field_down - 70))

            self.l_wins = wx.StaticText(self.panel, -1, ":", pos = (390, self.field_down - 70))
            self.l_wins.SetFont(self.bold_font)
            self.l_wins.SetForegroundColour("Blue")

            self.l_bot2_wins = wx.StaticText(self.panel, -1, "0", pos = (470, self.field_down - 70))
            self.l_bot1_wins.SetFont(self.bold_font)
            self.l_bot2_wins.SetFont(self.bold_font)
            self.l_bot1_wins.SetForegroundColour("Green")
            self.l_bot2_wins.SetForegroundColour("Red")

            self.winlist = [0, 0, 0]
            self.maplist = [Map(), Map(), 0]

            self.b_start_chemp = wx.Button(self.panel, -1, "START!", pos = (self.field_left + 240,
                                                                               self.field_down + 60),
                                                                        size = (250, 100))

            self.b_start_chemp.SetFont(self.bold_font)

            self.Bind(wx.EVT_BUTTON, self.on_start_chemp, self.b_start_chemp)



            self.c_rounds = wx.SpinCtrl(self.panel,
                                        -1,
                                        value = '',
                                        pos = (self.field_left + 630, self.field_down + 55),
                                        size = (70, 30),
                                        style = wx.SP_ARROW_KEYS,
                                        min = 1,
                                        max = 10000,
                                        initial = 1)

            self.l_rounds = wx.StaticText(self.panel, -1, "How many rounds:",
                                          pos = (self.field_left + 500, self.field_down + 65))

            self.c_round_pause = wx.TextCtrl(self.panel, -1, value = "0",
                                             pos = (self.field_left + 630, self.field_down + 95),
                                             size = (70, 30),
                                             validator = Is_Float_and_time())

            self.l_round_pause = wx.StaticText(self.panel, -1, "Pause between rounds:",
                                          pos = (self.field_left + 500, self.field_down + 105))

            self.l_round_pause.SetFont(self.small_font)

            self.l_turn_pause = wx.StaticText(self.panel, -1, "Pause between turns:",
                                          pos = (self.field_left + 500, self.field_down + 145))

            self.l_turn_pause.SetFont(self.small_font)

            self.c_turn_pause = wx.TextCtrl(self.panel, -1, value = "0",
                                             pos = (self.field_left + 630, self.field_down + 135),
                                             size = (70, 30),
                                             validator = Is_Float_and_time())

            self.b_pause_play = wx.Button(self.panel, -1, "Pause", pos = (self.field_left + 30,
                                                                               self.field_down + 120),
                                                                        size = (65, 40))

            self.Bind(wx.EVT_BUTTON, self.on_pause_play, self.b_pause_play)

            self.b_stop = wx.Button(self.panel, -1, "STOP", pos = (self.field_left + 95,
                                                                               self.field_down + 120),
                                                                        size = (65, 40))

            self.Bind(wx.EVT_BUTTON, self.on_stop, self.b_stop)

            self.b_flush = wx.Button(self.panel, -1, "Default", pos = (self.field_left + 165,
                                                                               self.field_down + 120),
                                                                        size = (65, 40))

            self.Bind(wx.EVT_BUTTON, self.on_default, self.b_flush)

            self.g_progress = wx.Gauge(self.panel, -1, 100,
                                        pos = (self.field_left + 30, self.field_down + 70),
                                        size = (200, 40),
                                        style = wx.GA_HORIZONTAL)

            self.status_bar = self.CreateStatusBar()
            self.status_bar.SetStatusText('Hello there! Choose bots and click "START!"')

            self.lock = threading.Lock()
            self.running = True


            self.Bind(wx.EVT_CLOSE, self.on_close, self)

            self.enable_disable_set = [self.b_add_bot1,
                                       self.b_add_bot2,
                                       self.b_start_chemp,
                                       self.b_flush,
                                       self.c_round_pause,
                                       self.c_rounds,
                                       self.c_turn_pause]

            self.play_thread_alive = [True, ]
            self.str_for_statusbar = 'Hello! Choose bots and press "START!"'

            self.make_elements_active(False, *[self.b_pause_play, self.b_stop])

            self.judge = None

            self.supe = superthreading
            self.supe.frame = self

            self.is_computing = False

            self.graphic_tread = threading.Thread(target = self.refresh)
            self.graphic_tread.daemon = True
            self.graphic_tread.start()


        def make_elements_active(self, active = False, *els):
            for el in els:
                wx.CallAfter(el.Enable, active)

        def on_stop(self, event):
            self.play_thread_alive[0] = False
            self.str_for_statusbar = "Stopping..."


        def on_default(self, event):
            self.flush_all_to_default()
            self.str_for_statusbar = "All settings flushed to default"

        def on_pause_play(self, event):
            if self.b_pause_play.GetLabel() == "Play":
                self.lock.release()
                wx.CallAfter(self.b_pause_play.SetLabel, "Pause")
                self.str_for_statusbar = "Computing... "

            else:
                wx.CallAfter(self.b_pause_play.SetLabel, "Play")
                self.lock.acquire()
                self.str_for_statusbar = "Computing paused... "


        def on_close(self, event):
            self.play_thread_alive[0] = False
            self.running = False
            wx.Exit()

        def flush_for_start(self):
            self.make_elements_active(True, *self.enable_disable_set)
            wx.CallAfter(self.b_pause_play.SetLabel, "Pause")


            self.lock.acquire()
            self.winlist[0] = 0
            self.winlist[1] = 0
            self.winlist[2] = 0
            self.maplist[0] = Map()
            self.maplist[1] = Map()
            self.maplist[2] = 0
            self.lock.release()

            wx.CallAfter(self.l_bot1_wins.SetLabel, "0")
            wx.CallAfter(self.l_bot2_wins.SetLabel, "0")


            wx.CallAfter(self.g_progress.SetRange, 100)
            wx.CallAfter(self.g_progress.SetValue, 0)


        def flush_all_to_default(self):
            self.make_elements_active(True, *self.enable_disable_set)
            wx.CallAfter(self.b_pause_play.SetLabel, "Pause")
            self.judge = None
            self.bot1_path = None
            self.bot2_path = None
            self.bot1_name = None
            self.bot2_name = None

            self.lock.acquire()
            self.winlist[0] = 0
            self.winlist[1] = 0
            self.winlist[2] = 0
            self.maplist[0] = Map()
            self.maplist[1] = Map()
            self.maplist[2] = 0
            self.lock.release()

            wx.CallAfter(self.l_bot1_name.SetLabel, "?BOT1?")
            wx.CallAfter(self.l_bot2_name.SetLabel, "?BOT2?")
            wx.CallAfter(self.l_bot1_wins.SetLabel, "0")
            wx.CallAfter(self.l_bot2_wins.SetLabel, "0")

            wx.CallAfter(self.b_add_bot1.SetLabel, "Choose bot 1")
            wx.CallAfter(self.b_add_bot2.SetLabel, "Choose bot 2")

            wx.CallAfter(self.c_round_pause.SetValue, "0")
            wx.CallAfter(self.c_rounds.SetValue, 1)
            wx.CallAfter(self.c_turn_pause.SetValue, "0")

            wx.CallAfter(self.g_progress.SetRange, 100)
            wx.CallAfter(self.g_progress.SetValue, 0)


            #self.lock.release()


        def get_round_pause(self):
            x = self.c_round_pause.GetValue()
            try:
                x = float(x)
                if 0 <= x <= 3:
                    return x
                else:
                    wx.CallAfter(self.c_round_pause.SetValue, str(min(x, 3) if x > 3 else max(0, x)))
                    self.str_for_statusbar = "Warning! Pause must be between 0 and 3 sec! "
                    return float(min(x, 3) if x > 3 else max(0, x))
            except:
                self.str_for_statusbar = "Error! Pause must be a float number between 0 and 3 sec! "
                wx.CallAfter(self.c_round_pause.SetValue, str(0))
                return 0.0


        def get_turn_pause(self):
            x = self.c_turn_pause.GetValue()
            try:
                x = float(x)
                if 0 <= x <= 3:
                    return x
                else:
                    wx.CallAfter(self.c_turn_pause.SetValue, str(min(x, 3) if x > 3 else max(0, x)))
                    self.str_for_statusbar = "Warning! Pause must be between 0 and 3 sec! "
                    return float(min(x, 3) if x > 3 else max(0, x))
            except:
                self.str_for_statusbar = "Error! Pause must be a float number between 0 and 3 sec! "
                wx.CallAfter(self.c_turn_pause.SetValue, str(0))
                return 0.0



        def start_judge(self):
            if self.bot1_path and self.bot2_path:
                try:
                    self.play_thread_alive[0] = True
                    if self.judge:
                        self.judge.__del__()

                    tp = self.get_turn_pause()
                    rp = self.get_round_pause()
                    if not (tp is None) and not(rp is None):
                        self.judge = Judge(self.bot1_path, self.bot2_path,
                                       tp,
                                       rp,
                                       self.lock,
                                       self.play_thread_alive)
                        self.bot1_name = self.judge.bot1.name
                        wx.CallAfter(self.l_bot1_name.SetLabel, self.bot1_name + " (1)")
                        self.bot2_name = self.judge.bot2.name
                        wx.CallAfter(self.l_bot2_name.SetLabel, self.bot2_name + " (2)")
                except:
                    self.flush_all_to_default()
                    self.str_for_statusbar = "Error! You choose wrong file or file isn't a Bot program"


        def on_add_bot1(self, event):
            if self.b_add_bot1.GetLabel() != "OK":
                if self.dialog.ShowModal() == wx.ID_OK:
                    self.bot1_path = self.dialog.GetPath()
                    wx.CallAfter(self.b_add_bot1.SetLabel, "OK")
                    self.start_judge()
                    self.str_for_statusbar = "Bot 1 choosed"



        def on_add_bot2(self, event):
            if self.b_add_bot2.GetLabel() != "OK":
                if self.dialog.ShowModal() == wx.ID_OK:
                    self.bot2_path = self.dialog.GetPath()
                    wx.CallAfter(self.b_add_bot2.SetLabel, "OK")
                    self.start_judge()
                    self.str_for_statusbar = "Bot 2 choosed"



        def start_chemp(self, *args):
            self.flush_for_start()
            self.is_computing = True

            self.make_elements_active(False, *self.enable_disable_set)
            self.make_elements_active(True, *[self.b_pause_play, self.b_stop])
            wx.CallAfter(self.g_progress.SetRange, args[0])
            wx.CallAfter(self.g_progress.SetValue, 0)
            self.start_judge()
            self.str_for_statusbar = "Computing..."
            try:
                self.judge.play_championship(*args)
            except:
                pass
            self.make_elements_active(True, *self.enable_disable_set)
            self.make_elements_active(False, *[self.b_pause_play, self.b_stop])

            self.is_computing = False
            if not self.play_thread_alive[0]:
                self.str_for_statusbar = "Stopped."
            else:
                self.str_for_statusbar = "Complete!"


        def on_start_chemp(self, event):
            if self.judge:
                t = threading.Thread(target = self.start_chemp,
                                      args = (self.c_rounds.GetValue(), self.maplist, self.winlist))
                #self.judge.play_championship(3, self.maplist, self.winlist)
                t.start()


        def refresh(self):
            qmap = 0
            qwin = 0
            while self.running:
                self.lock.acquire()

                if self.maplist[2] != qmap:
                    qmap = self.maplist[2]
                    wx.CallAfter(self.field1.make_empty, self.maplist[0])
                    wx.CallAfter(self.field2.make_empty, self.maplist[1])
                    #self.field1.make_empty(self.maplist[0])
                    #self.field2.make_empty(self.maplist[1])
                if self.winlist[2] != qwin:
                    qwin = self.winlist[2]
                    wx.CallAfter(self.l_bot1_wins.SetLabel, str(self.winlist[0]))
                    wx.CallAfter(self.l_bot2_wins.SetLabel, str(self.winlist[1]))

                wx.CallAfter(self.g_progress.SetValue, self.winlist[2])
                if self.is_computing:
                    wx.CallAfter(self.status_bar.SetStatusText, self.str_for_statusbar +
                                 " Now on %d round" % (self.winlist[2]+1, ) )
                else:
                    wx.CallAfter(self.status_bar.SetStatusText, self.str_for_statusbar)
                wx.CallAfter(self.field1.refresh)
                wx.CallAfter(self.field2.refresh)

                #self.Refresh()

                self.lock.release()
                time.sleep(0.1)
コード例 #47
0
class Bloody99:
    def __init__(self):
        self.judge = Judge() #need to pause it
        self.initGame()

    def loadImg(self):
        self.background_img_file = 'Image/Nostalgy.gif'
        self.beginning_bg_file = 'Image/AIposter.gif'
        self.cardImgFileName = list()
        self.cardImgFileName.append('Image/01s.gif')
        self.cardImgFileName.append('Image/02s.gif')
        self.cardImgFileName.append('Image/03s.gif')
        self.cardImgFileName.append('Image/04s.gif')
        self.cardImgFileName.append('Image/05s.gif')
        self.cardImgFileName.append('Image/06s.gif')
        self.cardImgFileName.append('Image/07s.gif')
        self.cardImgFileName.append('Image/08s.gif')
        self.cardImgFileName.append('Image/09s.gif')
        self.cardImgFileName.append('Image/10s.gif')
        self.cardImgFileName.append('Image/11s.gif')
        self.cardImgFileName.append('Image/12s.gif')
        self.cardImgFileName.append('Image/13s.gif')
        self.cardImgFileName.append('Image/01h.gif')
        self.cardImgFileName.append('Image/02h.gif')
        self.cardImgFileName.append('Image/03h.gif')
        self.cardImgFileName.append('Image/04h.gif')
        self.cardImgFileName.append('Image/05h.gif')
        self.cardImgFileName.append('Image/06h.gif')
        self.cardImgFileName.append('Image/07h.gif')
        self.cardImgFileName.append('Image/08h.gif')
        self.cardImgFileName.append('Image/09h.gif')
        self.cardImgFileName.append('Image/10h.gif')
        self.cardImgFileName.append('Image/11h.gif')
        self.cardImgFileName.append('Image/12h.gif')
        self.cardImgFileName.append('Image/13h.gif')
        self.cardImgFileName.append('Image/01d.gif')
        self.cardImgFileName.append('Image/02d.gif')
        self.cardImgFileName.append('Image/03d.gif')
        self.cardImgFileName.append('Image/04d.gif')
        self.cardImgFileName.append('Image/05d.gif')
        self.cardImgFileName.append('Image/06d.gif')
        self.cardImgFileName.append('Image/07d.gif')
        self.cardImgFileName.append('Image/08d.gif')
        self.cardImgFileName.append('Image/09d.gif')
        self.cardImgFileName.append('Image/10d.gif')
        self.cardImgFileName.append('Image/11d.gif')
        self.cardImgFileName.append('Image/12d.gif')
        self.cardImgFileName.append('Image/13d.gif')
        self.cardImgFileName.append('Image/01c.gif')
        self.cardImgFileName.append('Image/02c.gif')
        self.cardImgFileName.append('Image/03c.gif')
        self.cardImgFileName.append('Image/04c.gif')
        self.cardImgFileName.append('Image/05c.gif')
        self.cardImgFileName.append('Image/06c.gif')
        self.cardImgFileName.append('Image/07c.gif')
        self.cardImgFileName.append('Image/08c.gif')
        self.cardImgFileName.append('Image/09c.gif')
        self.cardImgFileName.append('Image/10c.gif')
        self.cardImgFileName.append('Image/11c.gif')
        self.cardImgFileName.append('Image/12c.gif')
        self.cardImgFileName.append('Image/13c.gif')
        self.iBack_Card = 'Image/back101.gif'
        # load the image
        self.background = pygame.image.load(self.background_img_file).convert()
        self.beginning_bg = pygame.image.load(self.beginning_bg_file).convert()
        self.cardImg = list()
        for i in range(0, len(self.cardImgFileName)):
            self.cardImg.append(pygame.image.load(self.cardImgFileName[i]).convert())
        self.Back_Card = pygame.image.load(self.iBack_Card).convert()
        self.Back_Card90 = pygame.transform.rotate(self.Back_Card , 90)
        self.Back_Cardn90 = pygame.transform.rotate(self.Back_Card , -90)

    def initPos(self):
        self.player_card_x = SCREEN_SIZE[0]/2 - self.Back_Card90.get_width() 
        self.player_card_y = SCREEN_SIZE[1] - self.cardImg[0].get_height()
        self.p2_card_x = SCREEN_SIZE[0] - self.Back_Card90.get_width() - 10
        self.p2_card_y = SCREEN_SIZE[1]/2 - self.cardImg[0].get_height()
        self.p3_card_x = SCREEN_SIZE[0]/2 - self.Back_Card90.get_width()
        self.p3_card_y = 10 
        self.p4_card_x = 10
        self.p4_card_y = SCREEN_SIZE[1]/2 - self.cardImg[0].get_height()
        self.click_move_x = self.cardImg[0].get_width()/6
        self.click_move_y = self.cardImg[0].get_height()/6

    def num_to_cards(self, num):
        return self.cardImg[num-1]

    def runGame(self):
        i = 1 
        self.prevCard = list()
        log = logger("bloody99.txt")
        self.fill_background()
        for k in range(i):
            pygame.display.update()
            self.judge = Judge()
            self.judge._possibleActions_ = list()
            self.judge.initBoard()
            self.judge.rand4Cards()
            self.fill_background()
            self.resetCardPos()
            if self.judge.isDead[0] == False:
                self.display_player1()
            elif self.judge.isDead[1] == False:
                self.display_player2()
            elif self.judge.isDead[2] == False:
                self.display_player3()
            elif self.judge.isDead[3] == False:
                self.display_player4()
            pygame.display.update()
            
            while not self.judge.isGameFinished():
                self.judge._possibleActions_ = self.judge.getAction()
                if len(self.judge._possibleActions_) == 0:
                    self.judge.setDead(self.judge.current_player)
                    self.judge.changeNextPlayer()
                    continue
                self.fill_background()
                self.resetCardPos()
                self.display_allPlayers()
                self.display_desktop(self.prevCard)
                pygame.display.update()
                state = PlayerState(self.judge.history, self.judge._possibleActions_, self.judge.card[self.judge.current_player-1], len(self.judge.card[0]), len(self.judge.card[1]), len(self.judge.card[2]), len(self.judge.card[3]), len(self.judge.mountain), self.judge.point, self.judge.clock_wise, self.judge.small_h[self.judge.current_player-1]) #get playerstate
                
                if self.judge.player[self.judge.current_player-1].__class__.__name__ == "HumanAgent":
                    click = True
                    while click:
                        for event in pygame.event.get():
                            if event.type == QUIT:
                                pygame.quit()
                                exit()
                            if event.type == MOUSEBUTTONDOWN:
                                if event.button == 1:
                                    self.clickCard(pygame.mouse.get_pos())
                                if event.button == 3:
                                    cards_used = []
                                    for cardIdx in range(len(self.card_clicked_list)):
                                        if self.card_clicked_list[cardIdx] == 1:
                                            cards_used.append(self.judge.card[self.judge.current_player-1][cardIdx])
                                    a = self.judge.player[self.judge.current_player-1].pygameGenmove(self.judge.current_player, cards_used)
                                    a.user = self.judge.current_player
                                    a.victim = self.chooseVictim(a)
                                    if self.judge.checkRule(a) == True and len(cards_used) > 0:
                                        click = False
                                        for v in a.cards_used:
                                            a.cardValue += 13 if (v % 13 == 0) else v % 13
                                        self.fill_background()
                                        self.resetCardPos()
                                        self.display_allPlayers()
                                        self.display_desktop(self.prevCard)
                                        pygame.display.update()       
                                        if a.cardValue == 9:
                                            self.exchangeCards(a.user, a.victim, a.cards_used)
                                            pygame.time.delay(300) 
                                        self.judge.doAction(a)                
                                        if a.cardValue == 7:
                                            self.pickOneCard(a.user, a.victim)
                                            pygame.time.delay(300) 
                                            self.getOneCard(a.user, a.victim)
                                            pygame.time.delay(300) 
                                        self.fill_background()
                                        self.resetCardPos()
                                        self.display_allPlayers()
                                        self.prevCard = a.cards_used
                                        self.display_desktop(self.prevCard)
                                        pygame.display.update()
                                        break
                                    elif self.judge.checkRule(a) == False and len(cards_used) > 0:
                                        font = pygame.font.Font(None, 40)
                                        text = font.render("ILLEGAL MOVE!!", 1, white)
                                        self.window.blit(text, (self.desk_mid_x*2/3+20, self.desk_mid_y-50))   
                                        pygame.display.update()
                                        continue
                                    else:
                                        self.fill_background()
                                        self.resetCardPos()
                                        self.display_allPlayers()
                                        self.display_desktop(self.prevCard)
                                        pygame.display.update()                                        
                                        continue
                else:                          
                    a = self.judge.player[self.judge.current_player-1].genmove(state)
                    for v in a.cards_used:
                        a.cardValue += 13 if (v % 13 == 0) else v % 13
                    self.fill_background()
                    self.resetCardPos()
                    self.display_allPlayers()
                    self.display_desktop(self.prevCard)
                    pygame.display.update()       
                    if a.cardValue == 9:
                        self.exchangeCards(a.user, a.victim, a.cards_used)
                        pygame.time.delay(300) 
                    self.judge.doAction(a)                
                    if a.cardValue == 7:
                        self.pickOneCard(a.user, a.victim)
                        pygame.time.delay(600) 
                        self.getOneCard(a.user, a.victim)
                        pygame.time.delay(600) 
                    else:
                        pygame.time.delay(1500) 
                    self.fill_background()
                    self.resetCardPos()
                    self.display_allPlayers()
                    self.prevCard = a.cards_used
                    self.display_desktop(self.prevCard)
                    pygame.display.update()
                
            winner = 0
            for i in range(4):
                if self.judge.isDead[i] == False:
                    winner = i
            if winner == 0:
                s = "South "
            elif winner == 1:
                s = "East "
            elif winner == 2:
                s = "North "
            else:
                s = "West "
            if self.judge.player[winner].__class__.__name__ == "HumanAgent":
                font = pygame.font.Font(None, 40)
                text = font.render("You Win!", 1, white)
                self.window.blit(text, (self.desk_mid_x - 20, self.desk_mid_y/2+50))   
                pygame.display.update()
            else:
                font = pygame.font.Font(None, 40)
                #text = font.render(s + ": " + self.judge.player[winner].__class__.__name__ + " is the WINNER!!", 1, white)
                text = font.render(s + "is the WINNER!!", 1, white)
                self.window.blit(text, (self.desk_mid_x*2/3-50, self.desk_mid_y/2+50))   
                pygame.display.update()
            g = Game(i, self.judge.player, str(winner+1))
            log.logGame(g)
        pygame.time.delay(2500) 
        self.screen.blit(self.beginning_bg, (0, 0))
        pygame.display.update()
        clock.tick(60)

    def fill_background(self):
        for y in range(0, SCREEN_SIZE[1], self.background.get_height()):
            for x in range(0, SCREEN_SIZE[0], self.background.get_width()):
                self.window.blit(self.background, (x, y))

    def resetCardPos(self):
        self.player_card_pos = [[0 for x in range(2)] for x in range(len(self.judge.card[0]))]
        for i in range(0, len(self.judge.card[0])):
            self.player_card_pos[i][0] = self.player_card_x + i*self.Back_Card.get_width()/2
            self.player_card_pos[i][1] = self.player_card_y 
        self.card_clicked_list = [0 for x in range(len(self.judge.card[0]))]        
        self.p2_card_pos = [[0 for x in range(2)] for x in range(len(self.judge.card[1]))]
        self.p3_card_pos = [[0 for x in range(2)] for x in range(len(self.judge.card[2]))]
        self.p4_card_pos = [[0 for x in range(2)] for x in range(len(self.judge.card[3]))]
        for i in range(0, len(self.judge.card[1])):
            self.p2_card_pos[i][0] = self.p2_card_x
            self.p2_card_pos[i][1] = self.p2_card_y + i*self.Back_Card90.get_height()/2
        for i in range(0, len(self.judge.card[2])):
            self.p3_card_pos[i][0] = self.p3_card_x + i*self.Back_Card.get_width()/2
            self.p3_card_pos[i][1] = self.p3_card_y
        for i in range(0, len(self.judge.card[3])):
            self.p4_card_pos[i][0] = self.p4_card_x
            self.p4_card_pos[i][1] = self.p4_card_y + i*self.Back_Cardn90.get_height()/2

    def display_allPlayers(self):
        self.display_player1()
        self.display_player2()
        self.display_player3()
        self.display_player4()

    def display_player1(self, skipIdx = list()):        
        if len(skipIdx) > 0:
            for x in range(0, len(self.judge.card[0])):
                skip = False
                for i in range(0, len(skipIdx)):
                    if skipIdx[i] != x:
                        continue
                    else:
                        skip = True
                        break
                if skip != True:
                    self.window.blit(self.num_to_cards(self.judge.card[0][x]), (self.player_card_pos[x][0], self.player_card_pos[x][1]))
        else:
            for x in range(0, len(self.judge.card[0])):
                self.window.blit(self.num_to_cards(self.judge.card[0][x]), (self.player_card_pos[x][0], self.player_card_pos[x][1]))
        font = pygame.font.Font(None, 30)
        if self.judge.current_player == 1:
            word = "South: " + self.judge.player[0].__class__.__name__ 
            text = font.render(word, 1, blue)
            self.window.blit(text, (self.player_card_x,self.player_card_y-50))

    def display_player2(self, skipIdx = list()):
        if len(skipIdx) > 0:
            for x in range(0, len(self.judge.card[1])):
                skip = False
                for i in range(0, len(skipIdx)):
                    if skipIdx[i] != x:
                        continue
                    else:
                        skip = True
                        break
                if skip != True:
                    self.window.blit(self.Back_Card90, (self.p2_card_pos[x][0], self.p2_card_pos[x][1]))
        else:
            for x in range(0, len(self.judge.card[1])):
                self.window.blit(self.Back_Card90, (self.p2_card_pos[x][0], self.p2_card_pos[x][1]))
        if self.judge.current_player == 2:
            font = pygame.font.Font(None, 30)
            #word = "East: " + self.judge.player[1].__class__.__name__ 
            word = "East" 
            text = font.render(word, 1, blue)
            self.window.blit(text, (self.p2_card_x-80, self.p2_card_y-50))

    def display_player3(self, skipIdx = list()):
        if len(skipIdx) > 0:
            for x in range(0, len(self.judge.card[2])):
                skip = False
                for i in range(0, len(skipIdx)):
                    if skipIdx[i] != x:
                        continue
                    else:
                        skip = True
                        break
                if skip != True:
                    self.window.blit(self.Back_Card, (self.p3_card_pos[x][0], self.p3_card_pos[x][1]))
        else:
            for x in range(0, len(self.judge.card[2])):
                self.window.blit(self.Back_Card, (self.p3_card_pos[x][0], self.p3_card_pos[x][1]))
        if self.judge.current_player == 3:
            font = pygame.font.Font(None, 30)
            #word = "North: " + self.judge.player[2].__class__.__name__ 
            word = "North" 
            text = font.render(word, 1, blue)
            self.window.blit(text, (self.p3_card_x, self.p3_card_y + self.Back_Card90.get_width()))

    def display_player4(self, skipIdx = list()):
        if len(skipIdx) > 0:
            for x in range(0, len(self.judge.card[3])):
                skip = False
                for i in range(0, len(skipIdx)):
                    if skipIdx[i] != x:
                        continue
                    else:
                        skip = True
                        break
                if skip != True:
                    self.window.blit(self.Back_Cardn90, (self.p4_card_pos[x][0], self.p4_card_pos[x][1]))
        else:
            for x in range(0, len(self.judge.card[3])):
                self.window.blit(self.Back_Cardn90, (self.p4_card_pos[x][0], self.p4_card_pos[x][1]))
        if self.judge.current_player == 4:
            font = pygame.font.Font(None, 30)
            #word = "West: " + self.judge.player[3].__class__.__name__ 
            word = "West" 
            text = font.render(word, 1, blue)
            self.window.blit(text, (self.p4_card_x, self.p4_card_y-50))

    def display_desktop(self, cards):
        self.desk_card_pos = [[0 for x in range(2)] for x in range(len(cards))]
        self.desk_mid_x = SCREEN_SIZE[0]/2 - len(cards)*self.cardImg[0].get_width()/2
        self.desk_mid_y = SCREEN_SIZE[1]/2 - self.cardImg[0].get_height()/2
        for i in range(0, len(cards)):
            self.desk_card_pos[i][0] = self.desk_mid_x + i*self.cardImg[0].get_width()
            self.desk_card_pos[i][1] = self.desk_mid_y
        for i in range(0, len(cards)):
            self.window.blit(self.num_to_cards(cards[i]), (self.desk_card_pos[i][0], self.desk_card_pos[i][1]))
        font = pygame.font.Font(None, 40)
        text = font.render("Point: " + str(self.judge.point), 1, white)
        self.window.blit(text, (SCREEN_SIZE[0]-150,10))
        
    def clickCard(self, mousePos):
        for i in range(0, len(self.judge.card[0])):
            if i == len(self.judge.card[0])-1:
                x = 1
            else:
                x = 0
            if self.player_card_x <= mousePos[0] < self.player_card_x + (i+1+x)*self.cardImg[0].get_width()/2:
                if self.card_clicked_list[i] == 0:
                    # choose the card
                    if self.player_card_y <= mousePos[1] < self.player_card_y + self.cardImg[0].get_height():
                        self.moveCard_player([0,-1], i)
                        self.card_clicked_list[i] = 1
                        break                
                elif self.card_clicked_list[i] == 1:
                    # cancel the choosed card
                    if self.player_card_y - self.click_move_y <= mousePos[1] < self.player_card_y - self.click_move_y + self.cardImg[0].get_height():
                        self.moveCard_player([0,1], i)
                        self.card_clicked_list[i] = 0
                        break

    def moveCard_player(self, dist, idx, skipIdx = list(), skipDuo = (-1,list())):
        oldy = self.player_card_pos[idx][1]
        while abs(self.player_card_pos[idx][1] - oldy) <= self.click_move_y:
            self.player_card_pos[idx][0] += dist[0]
            self.player_card_pos[idx][1] += dist[1]
            self.fill_background()
            self.display_player1(skipIdx)
            if skipDuo[0] == -1:
                self.display_player2()
                self.display_player3()
                self.display_player4()
            elif skipDuo[0] == 2:
                self.display_player2(skipDuo[1])
                self.display_player3()
                self.display_player4()
            elif skipDuo[0] == 3:
                self.display_player3(skipDuo[1])
                self.display_player2()
                self.display_player4()
            elif skipDuo[0] == 4:
                self.display_player4(skipDuo[1])
                self.display_player2()
                self.display_player3()
            self.display_desktop(self.prevCard)
            clock.tick(60)
            pygame.display.update()

    def moveCard_p2(self, dist, idx, skipIdx = list(), skipDuo = (-1,list())):
        oldx = self.p2_card_pos[idx][0]
        while abs(self.p2_card_pos[idx][0] - oldx) <= self.click_move_x:
            self.p2_card_pos[idx][0] += dist[0]
            self.p2_card_pos[idx][1] += dist[1]
            self.fill_background()
            self.display_player2(skipIdx)
            if skipDuo[0] == -1:
                self.display_player1()
                self.display_player3()
                self.display_player4()
            elif skipDuo[0] == 1:
                self.display_player1(skipDuo[1])
                self.display_player3()
                self.display_player4()
            elif skipDuo[0] == 3:
                self.display_player3(skipDuo[1])
                self.display_player1()
                self.display_player4()
            elif skipDuo[0] == 4:
                self.display_player4(skipDuo[1])
                self.display_player1()
                self.display_player3()
            self.display_desktop(self.prevCard)
            clock.tick(60)
            pygame.display.update()

    def moveCard_p3(self, dist, idx, skipIdx = list(), skipDuo = (-1,list())):
        oldy = self.p3_card_pos[idx][1]
        while abs(self.p3_card_pos[idx][1] - oldy) <= self.click_move_y:
            self.p3_card_pos[idx][0] += dist[0]
            self.p3_card_pos[idx][1] += dist[1]
            self.fill_background()
            self.display_player3(skipIdx)
            if skipDuo[0] == -1:
                self.display_player1()
                self.display_player2()
                self.display_player4()
            elif skipDuo[0] == 1:
                self.display_player1(skipDuo[1])
                self.display_player2()
                self.display_player4()
            elif skipDuo[0] == 2:
                self.display_player2(skipDuo[1])
                self.display_player1()
                self.display_player4()
            elif skipDuo[0] == 4:
                self.display_player4(skipDuo[1])
                self.display_player1()
                self.display_player2()
            self.display_desktop(self.prevCard)
            clock.tick(60)
            pygame.display.update()

    def moveCard_p4(self, dist, idx, skipIdx = list(), skipDuo = (-1,list())):
        oldx = self.p4_card_pos[idx][0]
        while abs(self.p4_card_pos[idx][0] - oldx) <= self.click_move_x:
            self.p4_card_pos[idx][0] += dist[0]
            self.p4_card_pos[idx][1] += dist[1]
            self.fill_background()
            self.display_player4(skipIdx)
            if skipDuo[0] == -1:
                self.display_player1()
                self.display_player2()
                self.display_player3()
            elif skipDuo[0] == 1:
                self.display_player1(skipDuo[1])
                self.display_player2()
                self.display_player3()
            elif skipDuo[0] == 2:
                self.display_player2(skipDuo[1])
                self.display_player1()
                self.display_player3()
            elif skipDuo[0] == 3:
                self.display_player3(skipDuo[1])
                self.display_player1()
                self.display_player2()
            self.display_desktop(self.prevCard)
            clock.tick(60)
            pygame.display.update()

    def chooseVictim(self, action):
        # 5 7 9(!= user)  10 12 (-1 -2) click the button then set the action.victim to it.
        cardvalue = 0
        for card in action.cards_used:
            if card % 13 != 0:
                cardvalue += card % 13
            else:
                cardvalue += 13
        if cardvalue > 13 or cardvalue < 1:
            return 0
        elif cardvalue == 5:
            w, h = 100, 50                        
            if self.judge.isDead[0] == False:
                button(self.screen, "South",self.player_card_x, self.player_card_y, w, h, green, bright_green)
            if self.judge.isDead[1] == False:
                button(self.screen, "East",self.p2_card_x, self.p2_card_y, w, h, green, bright_green)
            if self.judge.isDead[2] == False:
                button(self.screen, "North",self.p3_card_x, self.p3_card_y, w, h, green, bright_green)
            if self.judge.isDead[3] == False:
                button(self.screen, "West", self.p4_card_x, self.p4_card_y, w, h, green, bright_green)
            pygame.display.update()
            click = True
            while click:
                for event in pygame.event.get():
                    if event.type == QUIT:
                        pygame.quit()
                        exit()
                    if event.type == MOUSEBUTTONDOWN:
                        if event.button == 1:
                            click = False
                            mousePos = pygame.mouse.get_pos()
                            if self.judge.isDead[0] == False and self.player_card_x < mousePos[0] < self.player_card_x + w and self.player_card_y < mousePos[1] < self.player_card_y + h:
                                victim = 1
                            elif self.judge.isDead[1] == False and self.p2_card_x < mousePos[0] < self.p2_card_x + w and self.p2_card_y < mousePos[1] < self.p2_card_y + h:
                                victim = 2
                            elif self.judge.isDead[2] == False and self.p3_card_x < mousePos[0] < self.p3_card_x + w and self.p3_card_y < mousePos[1] < self.p3_card_y + h:
                                victim = 3
                            elif self.judge.isDead[3] == False and self.p4_card_x < mousePos[0] < self.p4_card_x + w and self.p4_card_y < mousePos[1] < self.p4_card_y + h:
                                victim = 4
                            else:
                                click = True
            pygame.display.update()
            return victim
        elif cardvalue == 7 or cardvalue == 9:
            w, h = 100, 50            
            if self.judge.isDead[1] == False:
                button(self.screen, "East",self.p2_card_x, self.p2_card_y, w, h, green, bright_green)
            if self.judge.isDead[2] == False:
                button(self.screen, "North",self.p3_card_x, self.p3_card_y, w, h, green, bright_green)
            if self.judge.isDead[3] == False:
                button(self.screen, "West", self.p4_card_x, self.p4_card_y, w, h, green, bright_green)
            pygame.display.update()
            click = True
            while click:
                for event in pygame.event.get():
                    if event.type == QUIT:
                        pygame.quit()
                        exit()
                    if event.type == MOUSEBUTTONDOWN:
                        if event.button == 1:
                            click = False
                            mousePos = pygame.mouse.get_pos()
                            if self.judge.isDead[1] == False and self.p2_card_x < mousePos[0] < self.p2_card_x + w and self.p2_card_y < mousePos[1] < self.p2_card_y + h:
                                victim = 2
                            elif self.judge.isDead[2] == False and self.p3_card_x < mousePos[0] < self.p3_card_x + w and self.p3_card_y < mousePos[1] < self.p3_card_y + h:
                                victim = 3
                            elif self.judge.isDead[3] == False and self.p4_card_x < mousePos[0] < self.p4_card_x + w and self.p4_card_y < mousePos[1] < self.p4_card_y + h:
                                victim = 4
                            else:
                                click = True
            pygame.display.update()
            return victim
        elif cardvalue == 10 or cardvalue == 12:
            w, h = 100, 50            
            value = 10 if cardvalue == 10 else 20
            button(self.screen, "+"+str(value), SCREEN_SIZE[0]/3-w/2, SCREEN_SIZE[1]/2 , w, h, green, bright_green)
            button(self.screen, "-"+str(value), 2*SCREEN_SIZE[0]/3-w/2, SCREEN_SIZE[1]/2 , w, h, green, bright_green)
            pygame.display.update()
            click = True
            while click:
                for event in pygame.event.get():
                    if event.type == QUIT:
                        pygame.quit()
                        exit()
                    if event.type == MOUSEBUTTONDOWN:
                        if event.button == 1:
                            click = False
                            mousePos = pygame.mouse.get_pos()
                            if SCREEN_SIZE[0]/3-w/2 < mousePos[0] < SCREEN_SIZE[0]/3-w/2 + w and SCREEN_SIZE[1]/2 < mousePos[1] < SCREEN_SIZE[1]/2 + h:
                                victim = -1
                            elif 2*SCREEN_SIZE[0]/3-w/2 < mousePos[0] < 2*SCREEN_SIZE[0]/3-w/2 + w and SCREEN_SIZE[1]/2 < mousePos[1] < SCREEN_SIZE[1]/2 + h:
                                victim = -2
                            else:
                                click = True
            return victim
        if cardvalue == 10 or cardvalue == 12:
            button(self.screen, "-"+str(cardvalue), SCREEN_SIZE[1]/3, SCREEN_SIZE[0]/2 , 100, 50, green, bright_green)
            button(self.screen, "+"+str(cardvalue), 2*SCREEN_SIZE[1]/3, SCREEN_SIZE[0]/2 , 100, 50, green, bright_green)
            pygame.display.update()
            return -1

    def pickOneCard(self, userIdx, victim):
        i = self.judge.p
        if victim == 1:
            self.moveCard_player([0,-1], i, [], [userIdx, [len(self.judge.card[userIdx-1])-1]])
        elif victim == 2:
            self.moveCard_p2([-1,0], i, [], [userIdx, [len(self.judge.card[userIdx-1])-1]])
        elif victim == 3:
            self.moveCard_p3([0,1], i, [], [userIdx, [len(self.judge.card[userIdx-1])-1]])
        elif victim == 4:
            self.moveCard_p4([1,0], i, [], [userIdx, [len(self.judge.card[userIdx-1])-1]])

    def getOneCard(self, userIdx, victim):
        self.fill_background()
        self.resetCardPos()
        self.display_desktop(self.prevCard)
        if userIdx == 1:
            self.player_card_pos[len(self.judge.card[userIdx-1])-1][1] -= self.click_move_y * 3
            self.display_player1()
            self.display_player2()
            self.display_player3()
            self.display_player4()
            self.moveCard_player([0,1], len(self.judge.card[0])-1)
        elif userIdx == 2:
            self.p2_card_pos[len(self.judge.card[userIdx-1])-1][0] -= self.click_move_x * 3
            self.display_player1()
            self.display_player2()
            self.display_player3()
            self.display_player4()
            self.moveCard_p2([1,0], len(self.judge.card[1])-1)
        elif userIdx == 3:
            self.p3_card_pos[len(self.judge.card[userIdx-1])-1][1] += self.click_move_x * 3
            self.display_player1()
            self.display_player2()
            self.display_player3()
            self.display_player4()
            self.moveCard_p3([0,-1], len(self.judge.card[2])-1)
        elif userIdx == 4:
            self.p4_card_pos[len(self.judge.card[userIdx-1])-1][0] += self.click_move_x * 3
            self.display_player1()
            self.display_player2()
            self.display_player3()
            self.display_player4()
            self.moveCard_p4([-1,0], len(self.judge.card[3])-1)
        pygame.display.update()
    
    def exchangeCards(self, userIdx, victim, cards_used):
        self.fill_background()
        self.prevCard = cards_used
        userSkipCard = list()
        for x in range(0, len(self.judge.card[userIdx-1])):
            for y in range(0, len(cards_used)):
                if self.judge.card[userIdx-1][x] == cards_used[y]:
                    userSkipCard.append(x)
        self.resetCardPos()
        self.display_desktop(self.prevCard)
        if userIdx == 1:
            for i in range(0, len(self.judge.card[userIdx-1])):
                self.moveCard_player([0,-1], i, userSkipCard)
        elif userIdx == 2:
            for i in range(0, len(self.judge.card[userIdx-1])):
                self.moveCard_p2([-1,0], i, userSkipCard)
        elif userIdx == 3:
            for i in range(0, len(self.judge.card[userIdx-1])):
                self.moveCard_p3([0,1], i, userSkipCard)
        elif userIdx == 4:
            for i in range(0, len(self.judge.card[userIdx-1])):
                self.moveCard_p4([1,0], i, userSkipCard)
        if victim == 1:
            for i in range(0, len(self.judge.card[victim-1])):
                self.moveCard_player([0,-1], i, [], [userIdx, userSkipCard])
        elif victim == 2:
            for i in range(0, len(self.judge.card[victim-1])):
                self.moveCard_p2([-1,0], i, [], [userIdx, userSkipCard])
        elif victim == 3:
            for i in range(0, len(self.judge.card[victim-1])):
                self.moveCard_p3([0,1], i, [], [userIdx, userSkipCard])
        elif victim == 4:
            for i in range(0, len(self.judge.card[victim-1])):
                self.moveCard_p4([1,0], i, [], [userIdx, userSkipCard])
        pygame.display.update()       

    def initGame(self):
        pygame.init()
        pygame.display.set_caption('Bloody99')

        self.window = pygame.display.set_mode((SCREEN_SIZE[0], SCREEN_SIZE[1]))
        self.screen = pygame.display.get_surface()
        self.loadImg()
        self.initPos()
        pos = (0, 0)
        self.screen.blit(self.beginning_bg, (0, 0))

        intro = True
        while intro:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()
            # things need to update
            button(self.screen, "START!",100,400,200,50,green,bright_green,self.runGame)
            button(self.screen, "QUIT",100,500,200,50,red,bright_red,quitGame)
            pygame.display.update()
            clock.tick(15)
コード例 #48
0
 def runGame(self):
     i = 1 
     self.prevCard = list()
     log = logger("bloody99.txt")
     self.fill_background()
     for k in range(i):
         pygame.display.update()
         self.judge = Judge()
         self.judge._possibleActions_ = list()
         self.judge.initBoard()
         self.judge.rand4Cards()
         self.fill_background()
         self.resetCardPos()
         if self.judge.isDead[0] == False:
             self.display_player1()
         elif self.judge.isDead[1] == False:
             self.display_player2()
         elif self.judge.isDead[2] == False:
             self.display_player3()
         elif self.judge.isDead[3] == False:
             self.display_player4()
         pygame.display.update()
         
         while not self.judge.isGameFinished():
             self.judge._possibleActions_ = self.judge.getAction()
             if len(self.judge._possibleActions_) == 0:
                 self.judge.setDead(self.judge.current_player)
                 self.judge.changeNextPlayer()
                 continue
             self.fill_background()
             self.resetCardPos()
             self.display_allPlayers()
             self.display_desktop(self.prevCard)
             pygame.display.update()
             state = PlayerState(self.judge.history, self.judge._possibleActions_, self.judge.card[self.judge.current_player-1], len(self.judge.card[0]), len(self.judge.card[1]), len(self.judge.card[2]), len(self.judge.card[3]), len(self.judge.mountain), self.judge.point, self.judge.clock_wise, self.judge.small_h[self.judge.current_player-1]) #get playerstate
             
             if self.judge.player[self.judge.current_player-1].__class__.__name__ == "HumanAgent":
                 click = True
                 while click:
                     for event in pygame.event.get():
                         if event.type == QUIT:
                             pygame.quit()
                             exit()
                         if event.type == MOUSEBUTTONDOWN:
                             if event.button == 1:
                                 self.clickCard(pygame.mouse.get_pos())
                             if event.button == 3:
                                 cards_used = []
                                 for cardIdx in range(len(self.card_clicked_list)):
                                     if self.card_clicked_list[cardIdx] == 1:
                                         cards_used.append(self.judge.card[self.judge.current_player-1][cardIdx])
                                 a = self.judge.player[self.judge.current_player-1].pygameGenmove(self.judge.current_player, cards_used)
                                 a.user = self.judge.current_player
                                 a.victim = self.chooseVictim(a)
                                 if self.judge.checkRule(a) == True and len(cards_used) > 0:
                                     click = False
                                     for v in a.cards_used:
                                         a.cardValue += 13 if (v % 13 == 0) else v % 13
                                     self.fill_background()
                                     self.resetCardPos()
                                     self.display_allPlayers()
                                     self.display_desktop(self.prevCard)
                                     pygame.display.update()       
                                     if a.cardValue == 9:
                                         self.exchangeCards(a.user, a.victim, a.cards_used)
                                         pygame.time.delay(300) 
                                     self.judge.doAction(a)                
                                     if a.cardValue == 7:
                                         self.pickOneCard(a.user, a.victim)
                                         pygame.time.delay(300) 
                                         self.getOneCard(a.user, a.victim)
                                         pygame.time.delay(300) 
                                     self.fill_background()
                                     self.resetCardPos()
                                     self.display_allPlayers()
                                     self.prevCard = a.cards_used
                                     self.display_desktop(self.prevCard)
                                     pygame.display.update()
                                     break
                                 elif self.judge.checkRule(a) == False and len(cards_used) > 0:
                                     font = pygame.font.Font(None, 40)
                                     text = font.render("ILLEGAL MOVE!!", 1, white)
                                     self.window.blit(text, (self.desk_mid_x*2/3+20, self.desk_mid_y-50))   
                                     pygame.display.update()
                                     continue
                                 else:
                                     self.fill_background()
                                     self.resetCardPos()
                                     self.display_allPlayers()
                                     self.display_desktop(self.prevCard)
                                     pygame.display.update()                                        
                                     continue
             else:                          
                 a = self.judge.player[self.judge.current_player-1].genmove(state)
                 for v in a.cards_used:
                     a.cardValue += 13 if (v % 13 == 0) else v % 13
                 self.fill_background()
                 self.resetCardPos()
                 self.display_allPlayers()
                 self.display_desktop(self.prevCard)
                 pygame.display.update()       
                 if a.cardValue == 9:
                     self.exchangeCards(a.user, a.victim, a.cards_used)
                     pygame.time.delay(300) 
                 self.judge.doAction(a)                
                 if a.cardValue == 7:
                     self.pickOneCard(a.user, a.victim)
                     pygame.time.delay(600) 
                     self.getOneCard(a.user, a.victim)
                     pygame.time.delay(600) 
                 else:
                     pygame.time.delay(1500) 
                 self.fill_background()
                 self.resetCardPos()
                 self.display_allPlayers()
                 self.prevCard = a.cards_used
                 self.display_desktop(self.prevCard)
                 pygame.display.update()
             
         winner = 0
         for i in range(4):
             if self.judge.isDead[i] == False:
                 winner = i
         if winner == 0:
             s = "South "
         elif winner == 1:
             s = "East "
         elif winner == 2:
             s = "North "
         else:
             s = "West "
         if self.judge.player[winner].__class__.__name__ == "HumanAgent":
             font = pygame.font.Font(None, 40)
             text = font.render("You Win!", 1, white)
             self.window.blit(text, (self.desk_mid_x - 20, self.desk_mid_y/2+50))   
             pygame.display.update()
         else:
             font = pygame.font.Font(None, 40)
             #text = font.render(s + ": " + self.judge.player[winner].__class__.__name__ + " is the WINNER!!", 1, white)
             text = font.render(s + "is the WINNER!!", 1, white)
             self.window.blit(text, (self.desk_mid_x*2/3-50, self.desk_mid_y/2+50))   
             pygame.display.update()
         g = Game(i, self.judge.player, str(winner+1))
         log.logGame(g)
     pygame.time.delay(2500) 
     self.screen.blit(self.beginning_bg, (0, 0))
     pygame.display.update()
     clock.tick(60)
コード例 #49
0
ファイル: run.py プロジェクト: 52nlp/scir-training-day
#!/usr/bin/env python

import sys, os

try:
    from judge import Judge
    from judge import STDIO, FILE
except:
    path = os.path.realpath(__file__)
    path = os.path.split(path)[0]
    path = os.path.join(path, "..")
    path = os.path.join(path, "..")
    sys.path.append(path)
    from judge import Judge
    from judge import STDIO, FILE

if __name__=="__main__":
    judge = Judge()
    judge.add_test(["sh", "1.sh", "yes"], "yesyes", style=STDIO)
    judge.add_test(["sh", "1.sh",], "error", style=STDIO)
    judge.run()