a
    i                     @   s   d Z ddlZddlmZmZmZ dddZddd	Zd d
dZd!ddZ	d"ddZ
d#ddZd$ddZd%ddZd&ddZd'ddZdd Zg dZdS )(a<  
Learning & Educational Activity Events
Activity events focused on learning and skill development (ages 6-100)

Events:
- onlineCourse: Take an online course to learn new skills (ages 16-100)
- learnLanguage: Start learning a new language (ages 10-100)
- codingBootcamp: Join a coding bootcamp (ages 16-50)
- musicLessons: Learn a musical instrument (ages 6-100)
- cookingClasses: Take cooking classes (ages 12-100)

Progress Events:
- onlineCourseProgress: Track progress in online course
- languageLearningProgress: Track language learning milestones
- codingBootcampProgress: Track bootcamp progress and completion
- musicLessonsProgress: Track musical skill development
- cookingClassProgress: Track cooking skill improvement

These events integrate with the ActivityRecord system:
- Create ActivityRecords to track progress and performance
- Performance affected by focus (Work Hard = faster learning, Slack Off = slower)
- Achievements added for milestones
- Some activities unlock new jobs or improve job performance
- Finite duration for courses (bootcamp ends after N weeks)
    N)messageFunctionquestionFunctionanswerOptionmessageFc                 C   s  d}|| j vo4| jjdko4| jjdko4dt d k}t| jdrh| jjrhd| jjj d d	d
ddg}ng d}t|}d| d}|dkrtddddtdddtdddtdddg}t	||| ||S |dkr|ddl
m}	m}
 |d dkr| j jd8  _| j jd7  _| j jd7  _|	d | d!| j d"| jd#}||_d$|_d%|_| jj| | jj|
d&d'| d(| jd)d*td+d,|jid- | jd.| d/ n|d dkr,| j jd07  _| j jd17  _|	d2| d!| j d3| jd#}||_d4|_d%|_| jj| | jd5| d6 nP|d dkr`| j jd77  _| jd8| d9 n| j jd8  _| jd: d;S )<z7Take an online course to learn new skills (ages 16-100)onlineCourse   d        job	Advanced z TechniqueszLeadership & ManagementzData AnalysisDigital MarketingzProject Management)zWeb DevelopmentzGraphic DesignzBusiness Analyticsr   ZPhotographyz%You want to take an online course in z	. Enroll?answerzYes, paid course!Zpaiddata	moneyCostzFree course insteadfreer   zSelf-study without courseselfNot interestednor   ActivityRecordoneTimeEventr         Zonlinecourse__online_courseidtypedate<   BalancedOnline Course Progress CheckHow's your z course going?daysFromNow    course_record_idtitler   r!   dateTypedateModifiercompletionFunccompletionArgscompletionKwargsz(You enrolled in a paid online course in zS! The structured curriculum and expert instruction will help you learn efficiently.
      Zonlinecourse_free_online_course_free(   z!You found a great free course in zB! It might take more self-discipline, but you're excited to learn.   zYou decide to teach yourself zK through free resources. It's a slower path, but you enjoy the flexibility.z<You decided learning a new skill isn't a priority right now.N)askedQuestionscageYearsrandomhasattrr   r+   choicer   r   	functionsr   r   money	happinessintelligencer!   levelperformancefocusactivityRecordsappendoneTimeEventsonlineCourseProgressr   messageQueue)playerr    r   responsefnamecheckZcourse_topicsZcourse_topicanswerOptionsr   r   course_recordr(   r(   ;/var/www/lichun.app/lichun/ws/events/activities/learning.pyr      s    








r   c                 C   sF  d| }d}| j jD ]}|j|kr|} q.q|s6dS ddddd}||jd}	td|j|	 |_|jdkr,| j  jd	7  _| j  jd7  _|j	
d
|j  t| j dr| j jr| j jD ]L}
|
jdkr|
j| j jjkrtd|
jd |
_| j
d|j d  qq| j
d|j d n|jdkr| j  jd7  _| j  jd7  _| j
d|j d | j j
tdd|j d| jddtdd|jid n|jdkr| j  jd7  _| j
d|j d | j j
tdd|j d | jddtdd|jid n6| j  jd8  _| j  jd7  _| j
d!|j d" dS )#z Progress check for online courseZonlineCourseProgress_N   r   r   r1   	Work Hardr#   	Slack Off	Socializer      
Completed r   zCompleting the z* course has improved your job performance!z'Congratulations! You've completed your z\ course with a strong understanding of the material. This new knowledge will serve you well!K   z)You're making excellent progress in your z- course! You're really grasping the concepts.zOnline Course Final CheckzFinal stretch of your z course!r&      r(   r)   r*   2   z&You're making steady progress in your z course. Keep at it!r$   zContinuing your z coursez'You're struggling to keep up with your zF course. You might need to put in more effort or consider dropping it.)r7   rC   r   getrB   minrA   r?   r>   achievementsrD   r@   r:   r   r    rG   rE   r   r!   rF   stress)rH   r    r   rI   r)   rJ   rM   record	focus_mapprogress_gain
job_recordr(   r(   rN   rF   x   sx    

rF   c                 C   s  ddl m} d}|| jvo@| jjdko@| jjdko@dt d k}g d}t|}d	| d
}|dkrtddddtddddtdddtdddg}	t||| ||	S |dkrddl m	}
m
} |d dkr| j jd8  _| j jd7  _| j jd7  _|
d| d| j d| jd}||_d|_d|_g |_| jj| | jj|| j| dd d!gd"| jj td#d$d% | jj|| d&d'| d(| jd)d*td+d,|jid- | jd.| d/ n|d dkr\| j jd8  _| j jd7  _| j jd07  _|
d1| d| j d2| jd}||_d|_d|_| jj| | jd3| d4 nP|d dkr| j jd57  _| jd6| d7 n| j jd8  _| jd8 d9S ):z+Start learning a new language (ages 10-100)r   	schedulerlearnLanguager1   r   r	   r
   )
ZSpanishZFrenchzMandarin ChineseJapaneseZGermanZItalianZ
PortugueseKoreanZArabicRussianzYou want to learn z. Start?r   zYes, formal classes!classes   r   zUse language appappzStudy on ownr   r   zToo hardr   r   r   r   Z	language_r   language_learningr   r#    Classz
twice-weekeveningZlanguageschoolr"   Z   locationduration Learning Progressr%   z learning going?r&   8   r(   language_record_idr*   zYou enrolled in formal zL classes! Having a teacher and classmates will make learning more effective.r2   Zlanguage_app_language_learning_appzYou downloaded a zK learning app! A few minutes of practice each day should help you progress.r5   z>You gathered textbooks and online resources to teach yourself z.. It'll be challenging, but you're determined!z?You decided learning a new language is too difficult right now.N)r<   rb   r6   r7   r8   r9   r;   r   r   r   r   r=   socialr?   r!   r@   rA   rB   r[   rC   rD   	schedulesr   randintrE   languageLearningProgressrG   r>   )rH   r    r   rI   rb   rJ   rK   	languageslanguagerL   r   r   language_recordr(   r(   rN   rc      s    









rc   c                    s  d| }d}| j jD ]}|j|kr|} q.q|s6dS ddddd}|jdkrTd	}	nd
}	t||jd|	 }
td|j|
 |_|j	}|jdkrdt
|jvr| j  jd7  _| j  jd7  _|jd|  t| j drh| j jrh| j jj t fdddD rh| j jD ]P}|jdkr|j| j jjkrtd|jd |_| jd| d  qhq| jd| d nn|jdkrdt
|jvr| j  jd7  _| j  jd7  _|jd|  | jd| d | j jt| dd | d!| jd"d#td$d%|jid& n|jd'krd(t
|jvr| j  jd7  _| j  jd7  _|jd)|  | jd*| d+ | j jt| dd,| d-| jd"d#td$d%|jid& n2|jd.krVd/t
|jvrV| j  jd7  _| j  jd7  _|jd0|  | jd1| d2 | j jt| dd3| | jd"d#td$d%|jid& n|jd.k r| j  jd47  _|jd5kr| j  jd48  _| jd6| d7 n| jd8| d9 | j jt| dd:| | jd"d;td$d%|jid& dS )<z"Track language learning milestonesZlanguageLearningProgress_Nr   r1   r2      rP   rt   333333?      ?r   rm   ZFluent   #   z
Fluent in r   c                 3   s   | ]}| v V  qd S )Nr(   ).0wordZ	job_titler(   rN   	<genexpr>^      z+languageLearningProgress.<locals>.<genexpr>)ZTeacherZ
TranslatorZDiplomatZInternationalrT   zYour fluency in z0 has significantly boosted your job performance!z$Amazing! You've achieved fluency in za! You can now comfortably speak, read, and write in the language. This is a major accomplishment!rV   ZAdvancedr   z$You've reached an advanced level in zH! You can hold complex conversations and understand most native content.rq   zApproaching fluency in !r&   T   r(   rs   r*   rX   ZIntermediatezIntermediate z(You've reached an intermediate level in z@! You can handle everyday conversations with growing confidence.Continuing z studiesrO   
ElementaryzElementary z&You've reached an elementary level in z<! You can introduce yourself and handle basic conversations.zProgressing in r   rR   zYour z[ progress is slow. You might need to dedicate more time to studying if you want to improve.z You're building a foundation in z+. The beginning is always the hardest part!Building skills in rr   )r7   rC   r   r    intrY   rB   rZ   rA   r@   strr[   r?   r>   rD   r:   r   r+   anyrG   rE   r   r!   rx   )rH   r    r   rI   rs   rJ   r{   r]   r^   progress_multiplierr_   rz   r`   r(   r   rN   rx   2  s    






rx   c                 C   s  d}|| j vo4| jjdko4| jjdko4dt d k}g d}t|}d| d}|d	krtd
ddddtdddddtdddtdddg}t||| ||S |d	krddlm}	m	}
m
} |d dkr| j jd8  _| j jd8  _| j jd7  _|	d| d| j d| jd}||_d|_d |_g |_| jj| | jj|| j| d!d"d#gd$| jj td%d&d' | jj|
d(d)| d*| jd+d,td-|jd.d/d0 | jd1| d2 nN|d dkr| j jd8  _| j jd8  _| j jd37  _|	d4| d| j d5| jd}||_d|_d |_| jj| | jj|| j| d!d6d7gd$| jj td8d9d' | jj|
d:d;| d<| jd+d=td-|jd.d/d0 | jd>| d? nP|d dkr| j jd@7  _| jdA| dB n| j jd38  _| jdC dDS )Ez#Join a coding bootcamp (ages 16-50)codingBootcampr   rX   r	   r
   )zFull-Stack Web DevelopmentzData Science & Machine LearningzMobile App DevelopmentZCybersecurityzDevOps Engineeringz
There's a z bootcamp starting. Interested?r   zYes, full-time bootcamp!Zfulltimei  r4   )r   r   
energyCostzPart-time evening classesZparttimei  rT   zLearn coding online freeonliner   z
Not for mer   r   )r   r   rb   r   r1   Z	bootcamp_r   coding_bootcampr   r#   z	 BootcampweekdaymorningZbootcampih  i  rn   zBootcamp MidpointzYou're halfway through the 
 bootcamp!r&   *   r(   midpointbootcamp_record_idstager*   z'You enrolled in an intensive full-time z^ bootcamp! The next few months will be exhausting but you'll gain valuable programming skills.r   Zbootcamp_pt_coding_bootcamp_parttimezthree-times-weekrl         zBootcamp Progress CheckzChecking in on your z bootcamp progressF   z$You signed up for part-time evening z\ classes! It'll be challenging to balance with everything else, but you're excited to learn.r2   z+You found free coding tutorials online for zJ. It'll take longer without structure, but you can learn at your own pace.z@You decided coding isn't something you want to pursue right now.N)r6   r7   r8   r9   r;   r   r   r<   r   r   rb   r=   energyr?   r!   r@   rA   rB   r[   rC   rD   rv   r   rw   rE   codingBootcampProgressrG   r>   )rH   r    r   rI   rJ   rK   ZspecializationsspecializationrL   r   r   rb   bootcamp_recordr(   r(   rN   r     s    














r   r   c                    sx  d| d| }d}| j jD ]}|j|kr|} q4q|s<dS ddddd}	|jd	krZd
}
nd}
t|	|jd|
 }td|j| |_|j	 |dkr|jdkr| j  j
d7  _
| j  jd7  _|jd   | jd  d n|jdkr*| j  j
d7  _
| j  jd7  _| jd  d nD| j  j
d7  _
| j  jd8  _| j  jd7  _| jd  d ddlm} |jdkrdnd}| j j|dd  d| jd|td |jd!d"d# n|d!krt|jd$kr| j  j
d%7  _
| j  jd%7  _| j  jd7  _|jd&    fd'd(| j jD | j _g d)}| jd*  d+  d, t| j d-rv| j jd.krt| jd/ n|jd0kr| j  j
d7  _
| j  jd7  _| j  jd7  _|jd1    fd2d(| j jD | j _| jd3  d4 nr| j  j
d7  _
| j  jd8  _| j  jd7  _|jd1  d5  fd6d(| j jD | j _| jd7  d8 dS )9z&Track bootcamp progress and completionZcodingBootcampProgress_r   Nr   rT   r   r   rP   r   gffffff?r~   r   r   r   zExcellent Progress - zYou're excelling in the z= bootcamp! Your instructors are impressed with your progress.rX   r1   z$You're making solid progress in the z  bootcamp. Keep pushing through!z$You're struggling to keep up in the z> bootcamp. The pace is intense and you're feeling overwhelmed.r   r   r   r   zBootcamp GraduationzFinal days of r   r&   r(   
completionr   r*   P   r4   zGraduated with Honors - c                    s   g | ]} |j vr|qS r(   r+   r   sr   r(   rN   
<listcomp>  r   z*codingBootcampProgress.<locals>.<listcomp>)zSoftware EngineerzData ScientistzMobile DeveloperzSecurity AnalystzDevOps Engineerz(Congratulations! You graduated from the zD bootcamp with honors! You now have the skills to pursue careers in .r   workzUWith your new skills, you should consider applying for entry-level positions in tech!r"   rU   c                    s   g | ]} |j vr|qS r(   r   r   r   r(   rN   r     r   zYou graduated from the zd bootcamp! You have a solid foundation in programming and are ready to start your career transition.z (with difficulty)c                    s   g | ]} |j vr|qS r(   r   r   r   r(   rN   r     r   zYou completed the zy bootcamp, but it was a real struggle. You learned some things, but feel you need more practice before feeling job-ready.)r7   rC   r   r    r   rY   rB   rZ   rA   r@   r?   r>   r[   rD   rG   r\   r<   r   rE   r!   r   prestigerv   r:   
occupation)rH   r    r   rI   r   r   rJ   r   r]   r^   r   r_   r   Zcompletion_daysZtech_job_titlesr(   r   rN   r   9  s    






r   c                 C   s  ddl m} d}|| jvo@| jjdko@| jjdko@dt d k}| jjdk rXg d	}n| jjd
k rng d}ng d}t|}d| d}|dkrtddddtdddtddddtdddg}	t||| ||	S |dkrddl m	}
m
} |d dkr| j jd8  _| j jd7  _| j jd8  _|
d| d| j d | jd!}||_d|_d"|_g |_| jj| | jj|| j|  d#d$d%gd&| jj td'd(d) | jj||  d*d+| d,| jd-d.td/d0|jid1 | jd2| d3 n|d dkr| j jd47  _| j jd58  _|
d6| d| j d7| jd!}||_d|_d"|_| jj| | jd8| d9 n`|d dkr| j jd8  _| j jd7  _| jd:| d; n| j jd58  _| jd< d=S )>z'Learn a musical instrument (ages 6-100)r   ra   musicLessons   r   r	   r
   r1   )pianoviolinZukuleleZrecorder   )r   guitarr   drums	saxophoneZtrumpet)r   r   r   r   r   zbass guitarZcellozYou want to learn to play the z. Take lessons?r   zYes, professional teacher!teacherr   zLearn from YouTubeZyoutuber   zBuy instrument, figure it outr      r   r   r   r   rO   Zmusic_r   music_lessonsr   r#   z Lessonsweekly	afternoonZmusicschool-   r"   rn   z Progress Checkr%   z playing coming along?r&   rm   r(   music_record_idr*   zYou signed up for professional zW lessons! Having a teacher will help you develop proper technique and avoid bad habits.r   r   Zmusic_youtube_music_self_taughtzYou're learning zb from YouTube tutorials! It's free and flexible, though progress might be slower without feedback.zYou bought a zb and are teaching yourself! It'll be a journey of trial and error, but you enjoy the independence.z;You decided learning an instrument isn't for you right now.N)r<   rb   r6   r7   r8   r9   r;   r   r   r   r   r=   r>   r\   r!   r@   rA   rB   r[   rC   rD   rv   r+   r   rw   rE   musicLessonsProgressrG   )rH   r    r   rI   rb   rJ   rK   Zinstruments
instrumentrL   r   r   music_recordr(   r(   rN   r     s    











r   c                 C   s  d| }d}| j jD ]}|j|kr|} q.q|s6dS ddddd}|jdkrTd	}	nd
}	t||jd|	 }
td|j|
 |_|j	}|jdkr<dt
|jvr<| j  jd7  _| j  jd7  _| j  jd8  _|jd| d | jd| d t dk rtdd}| j  j|7  _| jd| d n|jdkrdt
|jvr| j  jd7  _| j  jd7  _| j  jd8  _|jd| d | jd| d  d!d"lm} | j j||  d#d$| | jd%d&td'd(|jid) n|jdkrd*t
|jvr| j  jd+7  _| j  jd8  _|jd,| d | jd-| d. d!d"lm} | j j||  d#d/| d0| jd%d&td'd(|jid) nH|jdkrVd1t
|jvrV| j  jd7  _| j  jd28  _|jd3| d | jd4| d5 d!d"lm} | j j||  d#d6| | jd%dtd'd(|jid) n| j  jd7  _| j  jd28  _|jd7kr| jd8| d9 n| jd:| d; d!d"lm} | j j||  d#d<| | jd%dtd'd(|jid) dS )=zTrack musical skill developmentZmusicLessonsProgress_N   r|   r5   r   rP   r         ?r~   r   rm   ZMasterrX   rT   zMaster z PlayerzYou've achieved mastery of the zn! You can play complex pieces with emotion and technical perfection. People are moved when they hear you play.333333?r   i  z@Your skill has opened up performance opportunities! You earned $z from a recent gig.rV   Expertr   r1   r   zExpert zYou've become an expert zN player! You can tackle difficult pieces and your playing sounds professional.r   r   z	 ProgresszAdvancing toward mastery of r&   x   r(   r   r*   ZSkilledrO   zSkilled zYou've become a skilled zV player! You can play intermediate pieces confidently and your playing brings you joy.r   z	 practiceZAmateurr   zAmateur zYou're now an amateur zG player! You can play simple songs and you're starting to sound decent.zProgressing with rR   zYou're not practicing the z9 much. Without consistent practice, it's hard to improve.z'You're making steady progress with the z?. Your fingers are getting more comfortable with the movements.zBuilding skills on )r7   rC   r   r    r   rY   rB   rZ   rA   r@   r   r[   r>   r   r\   rD   rG   r9   rw   r=   r<   r   rE   r+   r!   r   )rH   r    r   rI   r   rJ   r   r]   r^   r   r_   r   Zperformance_earningsr   r(   r(   rN   r     s    



r   c                 C   s  ddl m} d}|| jvo@| jjdko@| jjdko@dt d k}| jjdk rXg d	}ng d
}t|}| d}|dkrtddddtdddtdddtdddg}	t||| ||	S |dkrddl m	}
m
} |d dkr| j jd8  _| j jd7  _| j jd7  _|
d| d| j d| jd}||_d|_d |_g |_| jj| | jj|| j| d!d"d#gd$| jj td%d&d' | jj|d(d)| d*| jd+d,td-d.|jid/ | jd0| d1 n|d dkrP| j jd7  _| j jd27  _|
d3| d| j d4| jd}d5|_d|_d |_| jj| | jd6 nH|d dkr|| j jd77  _| jd8 n| j jd78  _| jd9 d:S );z"Take cooking classes (ages 12-100)r   ra   cookingClassesr   r   r	   r
   r   )zBasic Cooking SkillszBaking FundamentalszTeen Chef Program)zItalian CuisinezFrench CookingzAsian FusionzBaking & PastryzVegetarian CookingzCulinary Techniquesz1 classes are available at community center. Join?r   zYes, sign up!signuprV   r   zLearn from cookbooksZbooksr   zWatch cooking videosvideosr   r   r   r   rT   r1   Zcooking_r   cooking_classesr   r#   rk   r   rl   Zcommunitycenterrm   r   rn   zCooking Class ProgresszHow are your z classes going?r&   r   r(   cooking_record_idr*   zYou enrolled in zX classes! You'll learn new techniques and recipes while meeting fellow food enthusiasts.r2   Zcooking_books_cooking_self_taughtzHome CookingzeYou checked out some cookbooks from the library. You'll teach yourself by trying new recipes at home.r   zkYou found some cooking channels online. Watching chefs in action is a great way to pick up tips and tricks.z5You decided cooking classes aren't for you right now.N)r<   rb   r6   r7   r8   r9   r;   r   r   r   r   r=   r>   ru   r!   r@   rA   rB   r[   rC   rD   rv   r   rw   rE   cookingClassProgressrG   r?   )rH   r    r   rI   rb   rJ   rK   class_types
class_typerL   r   r   cooking_recordr(   r(   rN   r     s    












r   c                 C   s  d| }d}| j jD ]}|j|kr|} q.q|s6dS ddddd}|jdkrTd	}	nd
}	t||jd|	 }
td|j|
 |_|j	}|jdkr:dt
|jvr:| j  jd7  _| j  jd7  _| j  jd7  _|jd|  | jd| d t dk rtdd}| j  j|7  _| jd| d n|jdkrdt
|jvr| j  jd7  _| j  jd7  _|jd|  | jd| d ddlm} | j j|d d!| | jd"d#td$d%|jid& n|jd'krd(t
|jvr| j  jd7  _| j  jd7  _| j  jd7  _|jd)|  | jd*| d+ ddlm} | j j|d d,| | jd"d#td$d%|jid& n4|jdkr>d-t
|jvr>| j  jd.7  _| j  jd/7  _| j  jd.7  _|jd0|  | jd1| d2 ddlm} | j j|d d3| | jd"d4td$d%|jid& n| j  jd7  _|jd5krp| jd6| d7 n| jd8| d9 ddlm} | j j|d d:| d;| jd"d4td$d%|jid& dS )<zTrack cooking skill improvementZcookingClassProgress_Nr   r1   r2   r   rP   r   r}   r~   r   rm   zMaster Chefr   rO   zMaster Chef - zYou've become a master chef in z! Your dishes are restaurant-quality. Friends and family rave about your cooking, and you save money by cooking amazing meals at home.g?rh   i,  zrYour cooking skills are so good that you've started earning money from catering or selling baked goods! You made $z this month.rV   r   r   zExpert Cook - zYou've become an expert in zX! You can prepare complex dishes with confidence and people love when you cook for them.r   r   zCooking ProgresszContinuing to master r&   rr   r(   r   r*   rX   Z
ProficientzProficient Cook - zYou're now proficient in zM! You can cook a variety of dishes well and enjoy experimenting with recipes.zAdvancing in Z	CompetentrT   r   zCompetent Cook - z$You're becoming a competent cook in zK! You can follow recipes successfully and your meals are consistently good.r   r   rR   z)You're not putting much effort into your z> classes. Without practice, it's hard to improve your cooking.zYou're learning the basics of z(. Every class teaches you something new!r   z classes)r7   rC   r   r    r   rY   rB   rZ   rA   r@   r   r[   r>   ru   r   rD   rG   r9   rw   r=   r<   r   rE   r!   r   )rH   r    r   rI   r   rJ   r   r]   r^   r   r_   r   Zside_incomer   r(   r(   rN   r     s    



r   c                 C   s   g d}|j D ]}|j|v r|jdkr:td|jd |_q|jdkrXtd|jd |_q|jdkrvtd|jd |_q|jd	krtd|jd
 |_qdS )aH  
    Updates learning activity performance based on focus level.

    This function should be called during the game loop to update performance
    for all active learning activities (similar to handleEducation and handleJob).

    Performance modifiers by focus:
    - Work Hard: +1 per tick (faster learning)
    - Balanced: +0.5 per tick (steady learning)
    - Slack Off: +0.1 per tick (minimal learning)
    - Socialize: +0.3 per tick (some learning, but distracted)

    Args:
        player: The player object
        person: The person whose learning activities to update
    )
r   r3   rj   rt   r   r   r   r   r   r   rQ   r   r	   r#   r   rS   r   rR   g?N)rC   r    rB   rZ   rA   )rH   personZlearning_activity_typesr]   r(   r(   rN   handleLearningActivities  s    





r   )r   rF   rc   rx   r   r   r   r   r   r   r   )r   FF)r   FFN)r   FF)r   FFN)r   FF)r   FFNr   )r   FF)r   FFN)r   FF)r   FFN)__doc__r9   Zevents.baser   r   r   r   rF   rc   rx   r   r   r   r   r   r   r   __all__r(   r(   r(   rN   <module>   s"   
Y
V
d
 
{
o
h
 
f
 &