o
    ,[hR                     @   s   d dl T dZG dd deZG dd deZG dd deZG d	d
 d
eZ	defddZ
defddZG dd deZG dd deZG dd deZG dd deZeeeegZdS )    )*z
a.k.a. Keynesian beauty contest.
Players all guess a number; whoever guesses closest to
2/3 of the average wins.
See https://en.wikipedia.org/wiki/Guess_2/3_of_the_average
c                   @   s$   e Zd ZdZdZdZedZdZdS )C   guess_two_thirdsd   N)	__name__
__module____qualname__ZPLAYERS_PER_GROUPZ
NUM_ROUNDSZNAME_IN_URLcuJACKPOT	GUESS_MAX r   r   i/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/experiment/guess_two_thirds/__init__.pyr      s    r   c                   @   s   e Zd ZdS )
SubsessionN)r   r   r	   r   r   r   r   r      s    r   c                   @   s$   e Zd Ze Ze Ze ZdS )GroupN)	r   r   r	   models
FloatFieldtwo_thirds_avgIntegerField
best_guessnum_winnersr   r   r   r   r      s    r   c                   @   s*   e Zd ZejdejddZejddZ	dS )Playerr   z#Please pick a number from 0 to 100:)minmaxlabelF)initialN)
r   r   r	   r   r   r   r   guessBooleanField	is_winnerr   r   r   r   r      s
    r   groupc                    s      }dd |D }dt| t| }t|d _t| fddd _ fdd|D }t| _|D ]}d	|_t	j
 j |_q6d S )
Nc                 S      g | ]}|j qS r   r   .0pr   r   r   
<listcomp>(       zset_payoffs.<locals>.<listcomp>gUUUUUU?   c                    s   t |  j S N)absr   r!   r   r   r   <lambda>+   s    zset_payoffs.<locals>.<lambda>)keyc                    s   g | ]
}|j  jkr|qS r   )r   r   r"   r*   r   r   r%   ,   s    T)get_playerssumlenroundr   r   r   r   r   r   r   payoff)r   playersZguessesr   Zwinnersr$   r   r*   r   set_payoffs&   s   
r3   c                 C   s   dd |   D S )Nc                 S   r    r   )r   )r#   gr   r   r   r%   4   r&   z*two_thirds_avg_history.<locals>.<listcomp>)in_previous_roundsr*   r   r   r   two_thirds_avg_history3   s   r6   c                   @      e Zd ZedefddZdS )Introductionplayerc                 C   s
   | j dkS )N   )round_number)r9   r   r   r   is_displayed9   s   
zIntroduction.is_displayedN)r   r   r	   staticmethodr   r<   r   r   r   r   r8   8       r8   c                   @   s(   e Zd ZdZdgZedefddZdS )Guessr9   r   c                 C   s   | j }tt|dS )N)r6   )r   dictr6   )r9   r   r   r   r   vars_for_templateB   s   zGuess.vars_for_templateN)r   r   r	   
form_modelform_fieldsr=   r   rA   r   r   r   r   r?   >   s
    r?   c                   @   s   e Zd ZeZdS )ResultsWaitPageN)r   r   r	   r3   after_all_players_arriver   r   r   r   rD   I   s    rD   c                   @   r7   )Resultsr9   c                 C   s&   | j }tdd | D }t|dS )Nc                 s   s    | ]}|j V  qd S r(   r!   r"   r   r   r   	<genexpr>R   s    z,Results.vars_for_template.<locals>.<genexpr>)sorted_guesses)r   sortedr-   r@   )r9   r   rH   r   r   r   rA   N   s   
zResults.vars_for_templateN)r   r   r	   r=   r   rA   r   r   r   r   rF   M   r>   rF   N)	otree.apidocBaseConstantsr   BaseSubsessionr   	BaseGroupr   
BasePlayerr   r3   r6   Pager8   r?   WaitPagerD   rF   page_sequencer   r   r   r   <module>   s    	