ó
JÚPQc           @   sÂ  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 e	 j
 d ƒ d „  Z d „  Z d „  Z d „  Z d  d l Z d „  Z d d	 „ Z i i d
 d 6d 6i d d 6d 6Z d  d l Z d „  Z d „  Z e d d „ Z d „  Z d „  Z e e e e d d d „ Z d d „ Z e d k r¾e e j ƒ Z e j  r€e ƒ  n  e j! j" d ƒ Z# i  Z$ xN e# D]F Z% e j& d e% ƒ j' d ƒ Z( e e( e j) j* e j+ e% ƒ ƒ e$ e( <qŸWe j& d e j, ƒ j' d ƒ Z( e e( e j) j* e j+ e j, ƒ ƒ e$ d <e j d k rie e j e$ d e j- d e e. e ƒ ƒq¾e e j  e j/ e$ d e j0 d e j1 d e j- d  e j2 d e e j2 d k e ƒ ƒn  d S(!   iÿÿÿÿNi    c         C   sÜ  t  j d d ƒ } | j d t d t d t d t d t d t ƒ | j d	 d
 d d d d d ƒ| j d d
 d d t j d d ƒ| j d d
 d d d d d ƒ| j d d
 d d t j d d ƒ| j d d
 d d d d d ƒ| j d d
 d d d d d ƒ| j d  d
 d d d d d! ƒ| j d" d# d
 d d d d d$ ƒ| j d% d& d
 d' d d  d d( ƒ| j d) d* d
 d+ d d  d d, ƒ| j d- d
 d d d d d. ƒ| j d/ d
 d d d d d0 ƒ| j	 |  ƒ \ } } | S(1   Nt   descriptions    Run public tests on student codet   generateSolutionst	   edxOutputt
   muteOutputt   printTestCaset
   noGraphicst   graphicss   --test-directoryt   destt   testRoott   defaultt
   test_casest   helpsP   Root test directory which contains subdirectories corresponding to each questions   --student-codet   studentCodes*   comma separated list of student code filess   --code-directoryt   codeRoott    s8   Root directory containing the student and testClass codes   --test-case-codet   testCaseCodes3   class containing testClass classes for this projects   --generate-solutionst   actiont
   store_trues+   Write solutions generated to .solution files   --edx-outputs   Generate edX output filess   --mutes    Mute output from executing testss   --print-testss   -ps)   Print each test case before running them.s   --tests   -tt   runTests0   Run one particular test.  Relative to test root.s
   --questions   -qt   gradeQuestions   Grade one particular question.s   --no-graphicss%   No graphics display for pacman games.s
   --graphicss"   Display graphics for pacman games.(
   t   optparset   OptionParsert   set_defaultst   Falset
   add_optiont   projectParamst   STUDENT_CODE_DEFAULTt   PROJECT_TEST_CLASSESt   Nonet
   parse_args(   t   argvt   parsert   optionst   args(    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   readCommand   sh    .		c          C   sa   d GHd GHxP t  r\ t j j ƒ  j ƒ  }  |  d k r8 Pq |  d k rT t j d ƒ q d GHq Wd  S(   Ns7   WARNING: this action will overwrite any solution files.s*   Are you sure you want to proceed? (yes/no)t   yest   noi    s"   please answer either "yes" or "no"(   t   Truet   syst   stdint   readlinet   stript   exit(   t   ans(    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   confirmGenerateQ   s    	c         C   s¤   t  t ƒ } t  t j ƒ } x‚ t |  ƒ D]t } t |  | ƒ } t | d ƒ rR q( n  t  | ƒ | k rw t | d | ƒ q( t  | ƒ | k r( t | d | ƒ q( q( Wd  S(   Nt   __file__(   t   typeR,   R   t   Optiont   dirt   getattrt   hasattrt   setattr(   t   modulet   filenamet   functionTypet	   classTypet   it   o(    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   setModuleNameb   s     c         B   s/   e  j e ƒ } e e | j Ue | e ƒ | S(   N(   t   impt
   new_modulet   kt   moduleCodeDictt   __dict__R:   (   t   moduleSourcet   tmp(    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   loadModuleStringt   s    c         C   sB   t  | d ƒ - } t j |  | d |  d d t j f ƒ SWd  QXd  S(   Nt   rs   %s.pys   .py(   t   openR;   t   load_modulet	   PY_SOURCE(   t
   moduleNamet   filePatht   f(    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   loadModuleFile   s    R   c         C   s5   t  t j j | |  ƒ d ƒ  } | j ƒ  SWd QXd S(   s:   Read file from disk at specified path and return as stringRC   N(   RD   t   ost   patht   joint   read(   RL   t   roott   handle(    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   readFile†   s    !se  
      We noticed that your project threw an IndexError on q1.
      While many things may cause this, it may have been from
      assuming a certain number of successors from a state space
      or assuming a certain number of actions available from a given
      state. Try making your code more general (no hardcoded indices)
      and submit again!
    s   <type 'exceptions.IndexError'>t   q1s³  
        We noticed that your project threw an AttributeError on q3.
        While many things may cause this, it may have been from assuming
        a certain size or structure to the state space. For example, if you have
        a line of code assuming that the state is (x, y) and we run your code
        on a state space with (x, y, z), this error could be thrown. Try
        making your code more general and submit again!

    s"   <type 'exceptions.AttributeError'>t   q3c         C   st   t  |  ƒ } xa |  D]Y } | d d !d k r9 | | =q n  | | j d ƒ d k r | | j d ƒ | | <q q W| S(   Ni    i   t   __s   
(   t   dictt   findt   split(   t   dt   d2R=   (    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   splitStrings«   s    c         C   s\   t  j d d ƒ } d GHx |  d D] } d G| GHq" Wd GHx | d D] } d G| GHqE Wd  S(   Nt   indenti   s
   Test case:t   __raw_lines__s      |s	   Solution:(   t   pprintt   PrettyPrinter(   t   testDictt   solutionDictt   ppt   line(    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt	   printTest¶   s    c         C   s"  d d  l  } d d  l } x) | D]! } t t j t | | | ƒ q W| j |  d ƒ j ƒ  } | j |  d ƒ j ƒ  } t j	 j
 d |  ƒ }	 |	 | d <t t | d ƒ }
 t | d ƒ } | i d d	 6| ƒ } |
 | | ƒ } | ró t | | ƒ n  t j t j d
 g ƒ } | j | | | ƒ d  S(   Niÿÿÿÿs   .tests	   .solutions   %s.test_outputt   test_out_filet   classt   Questioni    t
   max_points(   Ni    (   t
   testParsert   testClassesR3   R&   t   modulest   __name__t
   TestParsert   parseRK   RL   RM   R1   t   projectTestClassesRc   t   gradingt   GradesR   t   PROJECT_NAMER   t   execute(   t   testNamet
   moduleDictR   t   displayRh   Ri   R4   R_   R`   Rd   t	   testClasst   questionClasst   questiont   testCaset   grades(    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyR   À   s     
c         C   sz   | g } |  j  t j j | | d ƒ ƒ j ƒ  } d | k rv | d j ƒ  } x' | D] } t |  | | ƒ | } qS Wn  | S(   Nt   CONFIGt   depends(   Rl   RK   RL   RM   Rm   RW   t
   getDepends(   Rh   R   Rx   t   allDepst   questionDictR|   RX   (    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyR}   Ù   s    	'c         C   sš   |  j  t j j | d ƒ ƒ j ƒ  } | d  k rm t |  | | ƒ } t | ƒ d k ri d d j | ƒ GHn  | Sd | k r‡ | d j ƒ  St	 t j
 | ƒ ƒ S(   NR{   i   s>   Note: due to dependencies, the following tests will be run: %st    t   order(   Rl   RK   RL   RM   Rm   R   R}   t   lenRW   t   sortedt   listdir(   Rh   R   t   questionToGradet   problemDictt	   questions(    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   getTestSubdirsä   s    $c	            sû  d d  l  ‰ d d  l }	 x) ˆ  D]! }
 t t j t |
 ˆ  |
 ƒ q Wg  } i  } t ˆ | | ƒ } x| D]û} t j j	 | | ƒ } t j j
 | ƒ si | d d k r­ qi n  ˆ j t j j	 | d ƒ ƒ j ƒ  } t |	 | d ƒ } | | | ƒ } | | | <t d „  t j | ƒ ƒ } t d „  | ƒ } xø t | ƒ D]ê } t j j	 | d | ƒ ‰ t j j	 | d	 | ƒ } t j j	 | d
 | ƒ } ˆ j ˆ ƒ j ƒ  } | j d d ƒ j ƒ  d k rÁq7n  | | d <t t | d ƒ } | | | ƒ } ‡  ‡ ‡ ‡ ‡ f d †  } | j | | | | ƒ ƒ q7Wd „  } t t j t | | | ƒ ƒ | j | | j ƒ  f ƒ qi Wt j t j | d | d | ƒ} | d  k ràxH | D]= } x4 | | j d d ƒ j ƒ  D] } | j | | ƒ q¿WqœWn  | j t j t ƒ | j  S(   Niÿÿÿÿi    t   .R{   Re   c         S   s   t  j d |  ƒ S(   Ns   [^#~.].*\.test\Z(   t   ret   match(   t   t(    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   <lambda>	  s    c         S   s   t  j d |  ƒ j d ƒ S(   Ns   (.*)\.test\Zi   (   RŠ   R‹   t   group(   RŒ   (    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyR   
  s    s   %s.tests   %s.solutions   %s.test_outputt   disabledt   falset   trueRd   c            sv   ˆ r ‡ ‡ ‡ f d †  Sˆ j  ˆ ƒ j ƒ  ‰ ˆ j  ˆ ƒ j ƒ  ‰  ˆ r_ ‡ ‡ ‡  ‡ f d †  S‡ ‡  ‡ f d †  Sd  S(   Nc            s   ˆ  j  ˆ ˆ ƒ S(   N(   t   writeSolution(   Rz   (   Ry   Rt   t   solution_file(    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyR     s    c            s"   t  ˆ ˆ ƒ p! ˆ j |  ˆ  ˆ ƒ S(   N(   Rc   Rr   (   Rz   (   Rt   R_   R`   Ry   (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyR     s    c            s   ˆ  j  |  ˆ ˆ ƒ S(   N(   Rr   (   Rz   (   Ry   R`   Rt   (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyR      s    (   Rl   Rm   (   Ry   R“   (   Rt   t	   test_fileR   R   Rh   (   R`   R“   Ry   R_   s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   makefun  s    c            s   ‡  f d †  S(   Nc            s   ˆ  j  |  ƒ S(   N(   Rr   (   Rz   (   Rx   (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyR   %  s    (    (   Rx   (    (   Rx   s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyR•   $  s    R   R   R|   R   (!   Rh   Ri   R3   R&   Rj   Rk   Rˆ   RK   RL   RM   t   isdirRl   Rm   R1   t   filterR„   t   mapRƒ   t   gett   lowerRn   t   addTestCaset   appendt   getMaxPointsRo   Rp   R   Rq   R   RW   t	   addPrereqt   gradet   points(   R   R   Rt   t   exceptionMapR   R   R   R…   Ru   Ri   R4   R‡   t   questionDictst   test_subdirst   qt   subdir_pathR   Rw   Rx   t   testsRŒ   R“   Rd   R_   Rv   Ry   R•   Rz   t   prereq(    (   Rt   R   Rh   R”   R   s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   evaluateñ   sN    #$

	!#c         C   s`   |  } | d  k r9 | j r$ t } n  | j r9 t } q9 n  | rR t j d d d ƒSt j ƒ  Sd  S(   Ni   t	   frameTimegš™™™™™¹?(	   R   R   R%   R   R   t   graphicsDisplayt   PacmanGraphicst   textDisplayt   NullGraphics(   t   graphicsByDefaultR    R   (    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt
   getDisplay4  s    			t   __main__t   ,s   .*?([^/]*)\.pyi   Rn   R   Ru   R   R   R…   (3   Ro   R;   R   RK   RŠ   R&   R   R¬   Rª   t   randomt   seedR"   R,   R:   RB   t
   py_compileRJ   RQ   t   ERROR_HINT_MAPR]   RZ   Rc   R   R   R   R}   Rˆ   R¨   R¯   Rk   R   R    R   R   RW   t	   codePathsRt   t   cpR‹   RŽ   RG   RL   RM   R   R   R   R%   R   R   R   R   (    (    (    s_   C:\Users\Nicholas\Desktop\CS188X Berkeley\05 Projects\02 multiagent-v2\multiagent\autograder.pyt   <module>   s^   	8							
			B	
)(+