i(t_chartt_cellst_markstNonet_selected_cellttkintertToplevelt_rootttitletbindtdestroyt _init_quittFramet _init_matrixt _init_listt_init_numedgest_numedges_labelt _callbackst _num_edgestdraw(R(tparenttchartttoplevelRDt show_numedges((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt__init__es$       cCs>tj|ddd|j}|jdddddd dS( NttexttQuittcommandtsidetbottomtexpanditfilltnone(RAtButtonRFtpack(R(troottquit((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRGsc Cstj|dddd}|jddddd d d d d dtj|dddddd|_|jjdddddS(NtborderitrelieftsunkenRZiR[R\tpadxitpadyiRXttoptwidthitheightt backgroundtwhite(RARHR^tCanvast_canvas(R(R_tcframe((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRIs ( cCs;tj|dd|_|jjdddddddS( NRUs0 edgesRZiR[R\RXRf(RAtLabelRLR^(R(R_((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRKsc Csst|gdddd|_|jjddddd d d d |d }|jjd||jjdS(NRgiRhiRXRfRZiR[tbothReicSs|jd|dS(Ntselect(t_fire_callbacks(tedgeR(((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pytcbsRp(Rt_listR^t add_callbacktfocus(R(R_Rs((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRJs % cGs;|jdkrdSy|jjWnnXd|_dS(N(RCR?RF(R(te((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRFscCs2||jk r.||_d|_|jndS(Ni(R<RNRO(R(RQ((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt set_charts  c Cs|jdkrdSt|j}gt|D]%}gt|D] }d^qB^q/}x1|jD]&}||j|jcd7iidtgray50RRttagR(RCR?RltdeleteR<t num_leavestintR~t create_texttreprt create_linetcreate_rectangleR=ttag_bindt tag_lowerR(R(t LEFT_MARGINt BOT_MARGINt TOP_MARGINtcRtdxtdyR5RttRstxmaxtymax((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRO sL    #+$$ ; !   cOs|jj||dS(N(RCR^(R(Rtkwargs((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR^<sN(R8R9t__doc__tTruetFalseRTRGRIRKRJRFRxRRRRuR?RRqRRRRRRRROR^(((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR;as0        %             2tChartResultsViewcBszeZedZd dZdZdZdZdZ dZ dZ dZ d Z d Zd ZRS( cCs||_||_g|_d|_g|_d|_d|_|rtj ||_ |j j d|j j d|j ntj||_ |rAtj|j }|jdddddd tj|d d d |j jdd tj|d dd |jjddtj|d dd |jjddnt|j dd|_|jjdddddd|jdS(Ni s!Chart Parser Application: Resultss RXRYRZiR[txRURVRWtrights Print AlltleftsPrint Selectiont closeenoughiRfiRo(R<t_grammart_treest_yt _treewidgetsR?t _selectiont _selectboxRARBRCRDRERFRHR^R]t print_alltprint_selectionRt_cframeR(R(RPRQtgrammarRRtbuttons((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRTDs0       cCs|jdkrdS|dk rf|j|jjkr>dS|jd|jjfkrfdSnxB|jj|jjD]%}||j kr|j |qqWdS(Ni( RCR?R-RRR|R<RtparsesRt_add(R(Rrtparse((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRfs !"cCs|jj||jj}t||}|jj||jj|d|j|j|j |j dd|_dS(Ni i( RR,RtcanvasRRt add_widgetRt bind_clickt_clicktbbox(R(RRt treewidget((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRqsc Cs}|jj}|jdk r1|j|jn||_|j\}}}}|j||||dddd|_dS(NRgiRzs#088(RRRR?RRRR(R(twidgetRtx1ty1tx2ty2((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs cCsW||jds (Rt _emptychartt _left_namet _right_namet _left_chartt _right_chartt_chartst _out_chartR?t _operatorRAtTkRCRDRERFt _init_menubart_init_chartviewst _init_dividert _init_buttonst_init_bindingst load_chart(R(tchart_filenamestfaketoktfilename((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRTs(        cGs;|jdkrdSy|jjWnnXd|_dS(N(RCR?RF(R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRFscOsdS|jj||(N(RCtmainloop(R(RR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRsc Cstj|}tj|dd}|jddddddd|j|jdd dd ddd|j|j|jdd dd d|jdd |jddddd|tj|dd}|jddd|jdd|jddd|j dd|jddd|j dd|j|jddd|j |jddddd||j j d|dS(NttearoffiRs Load Chartt acceleratorsCtrl-oR RWs Save OutputsCtrl-stExitisCtrl-xtFiletmenut Intersectiont+tUniont*t DifferenceRs Swap ChartstCompare(RAtMenut add_commandtload_chart_dialogtsave_chart_dialogt add_separatorRFt add_cascadet _intersectiont_uniont _differencet _swapchartsRCtconfig(R(R_tmenubartfilemenutopmenu((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR"s2      cCs;tj|dddd}|jddddd ddS( NRaiRbRcRXRfR[Rtipady(RARHR^(R(R_tdivider((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRCsc Csd$}d%}tj|dd}|jdddd d d tj|d d dd}|jdddddddd d d t|t|jjd|j|_|jjddddd dt ||j dt dt |_ |j jdddddddd d d |j jd|j|j jd|j|j jtj|dddd ddd ||_|jjddddddtj|d d dd}|jdddddddd d d t|t|jjd|j|_|jjddddd dt ||j dt dt |_|jjdddddddd d d |jjd|j|jjd|j|jjtj|dd!dd ddd |jddddddtj|d d dd}|jdddddddd d d tj|dd"|_|jjdddd#t ||j dt dt |_|jjdddddddd d d |jjd|j|jjd|j|jjdS(&NRiR%Ris#c0c0c0RXRfRZiR[RoRaiRbtgrooveRRdiReiRWiRRRRSRYRpRRUt RgRt=tOutputi (ssymboli(s helveticai(RARHR^RRRRt _select_leftt_left_selectorR;RRRt _left_matrixRut select_edgeRRRnt _op_labelt _select_rightt_right_selectort _right_matrixt _out_labelt _out_matrix(R(R_topfontteqfonttframet cv1_framet cv2_framet out_frame((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRGs^('   ('   (  c Cstj|}|jddddddddtj|d d d |jjdd tj|d d d |jjdd tj|d dd |jjdd tj|ddjdd tj|d dd |jjdd tj|d dd |jjdddS(NRXRYReiR[RRZiRUR RWRRRRgis Swap ChartssDetatch OutputR( RARHR^R]RRRRt _detatch_out(R(R_R((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs"cCs|jd|jdS(Ns (RER(R(R_((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRscCsV||_|j||_|jj|j|dkrH|jjn|jdS(NR?(RRRR)RxRt _apply_op(R(tname((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR's   cCsV||_|j||_|jj|j|dkrH|jjn|jdS(NR?(RRRR.RxRR8(R(R9((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR,s   cCsX|jdkr|jn8|jdkr8|jn|jdkrT|jndS(NRRR(RRRR(R(((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR8s   s Pickle files.pickles All filesRcGstd|jdd}|s"dSy/t|d}tj|j|WdQXWn0tk r}tjj dd||fnXdS(Nt filetypestdefaultextensions.pickletwbsError Saving ChartsUnable to open file: %r %s( RtCHART_FILE_TYPEStopentpickletdumpRt ExceptionRARR(R(RRtoutfileRw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs  cGsjtd|jdd}|s"dSy|j|Wn0tk re}tjjdd||fnXdS(NR:R;s.picklesError Loading ChartsUnable to open file: %r %s(RR=RRARARR(R(RRRw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs  cCst|d}tj|}WdQXtjj|}|jdrU|d }n|jdrq|d }n||j|<|jj ||j j ||j |j kr|jj |n%|j|j kr|j j |ndS(Ntrbs.pickleis.charti(R>R?tloadtostpathtbasenametendswithRR(taddR-RRRR(R(RtinfileRQR9((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs   cCs+|jj|jj|jjdS(N(R)RR.R0(R(((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt_update_chartviewss  cCs||jkr"|jj|n |jj||jkrQ|jj|n |jj||jkr|jj|n |jjdS(N(RR)RRRR.RR0(R(Rr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR*s  cCs=|jj|||jj|||jj||dS(N(R)RR.R0(R(R5R((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRscCso|jsdSt|jj}x3|jD](}||jkr/|j|gq/q/W|jd|dS(NR(t _checkcompatRRttokensRtinsertt_update(R(t out_chartRr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs cCso|jsdSt|jj}x3|jD](}||jkr/|j|gq/q/W|jd|dS(NR(RLRRRMRRNRO(R(RPRr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs cCs|jsdSt|jj}x!|jD]}|j|gq/Wx!|jD]}|j|gqSW|jd|dS(NR(RLRRRMRNRRO(R(RPRr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs cCs7|j|j}}|jj||jj|dS(N(RRR(RR-(R(RR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRscCs|jj|jjks`|jj|jjks`|j|jks`|j|jkr|j|_|jj|j|jjd|j d  &   !  <          t ChartViewcBseZdZdZdZdZdZd+dZdZ dddd Z d Z d Z d Z d ZdZdZdZdZd+dZdZdZddZdZdZd+d+dZddZd+dZddZdZdZd Zd!Z d"Z!d+d#Z"d$Z#d%Z$dd&Z%d'Z&d(Z'd+d)Z(d*Z)RS(,s A component for viewing charts. This is used by ``ChartParserApp`` to allow students to interactively experiment with various chart parsing techniques. It is also used by ``Chart.draw()``. :ivar _chart: The chart that we are giving a view of. This chart may be modified; after it is modified, you should call ``update``. :ivar _sentence: The list of tokens that the chart spans. :ivar _root: The root window. :ivar _chart_canvas: The canvas we're using to display the chart itself. :ivar _tree_canvas: The canvas we're using to display the tree that each edge spans. May be None, if we're not displaying trees. :ivar _sentence_canvas: The canvas we're using to display the sentence text. May be None, if we're not displaying the sentence text. :ivar _edgetags: A dictionary mapping from edges to the tags of the canvas elements (lines, etc) used to display that edge. The values of this dictionary have the form ``(linetag, rhstag1, dottag, rhstag2, lhstag)``. :ivar _treetags: A list of all the tags that make up the tree; used to erase the tree (without erasing the loclines). :ivar _chart_height: The height of the chart canvas. :ivar _sentence_height: The height of the sentence canvas. :ivar _tree_height: The height of the tree :ivar _text_height: The height of a text string (in the normal font). :ivar _edgelevels: A list of edges at each level of the chart (the top level is the 0th element). This list is used to remember where edges should be drawn; and to make sure that no edges are overlapping on the chart view. :ivar _unitsize: Pixel size of one unit (from the location). This is determined by the span of the chart's location, and the width of the chart display canvas. :ivar _fontsize: The current font size :ivar _marks: A dictionary from edges to marks. Marks are strings, specifying colors (e.g. 'green'). i i i(c Ksu|jdd}|jdd}|jdd|_||_i|_g|_i|_i|_g|_d!|_ d|_ g|_ d|_ |d!krt j}|jd|d}|d }|jd |t j|d d d |} | jdd||_n ||_|j||j|j\|_|_d|jdN("tgett _fontsizeR<RMt _edgelevelst _edgetagsR>t _treetoksR?t_treetoks_edget_treetoks_indext _tree_tagst_compactRARRDRER]R^RCt _init_fontst _sb_canvast _chart_sbt _chart_canvasRHRkt_sentence_canvast_tree_sbt _tree_canvast_analyzeROt_resizet_growt _configure( R(RQR_tkwRVRWRfRYRZtbRmtsbR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRTsX                           cCstjjddddd|j|_tjjddd|j|_tjjdtjd|_|jd|jdS(NtfamilyR%tweightR&tsizeRs*Font( RARtFontR_t _boldfontt_fontR]t_sysfontt option_add(R(R_((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRgs "tyRoRYcCstj|dddd}|jd|d|d|tj|dd }tj|d d }|jdd dd |jddd|dd|j|d<|j|d<||fS(sK Helper for __init__: construct a canvas with a scrollbar. RbR]RaiR[RZRXRis#e0e0e0torienttverticalRR}RtyesRWtyscrollcommand(RARHR^Rkt ScrollbartyviewR(R(R_RZR[RXRmRRt((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRhs  cGs|jjddddS(Ntscrollitunits(RjR(R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt scroll_upscGs|jjddddS(NRiR(RjR(R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt scroll_downscGs|jjddddS(NRitpages(RjR(R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pytpage_upscGs|jjddddS(NRiR(RjR(R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt page_downscCs|jj}tt|jd||jtjd}|jjd||jjd|jd|dtj||_|j dk r|j |j dRnRpROt erase_treeRoRat _add_edge(R(RQRr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR*s         cCs|j\}}x|j|D]{}|j\}}||koO|kns||kok|kns||ko|ko|knr tSq WtS(s Return True if the given edge overlaps with any edge on the given level. This is used by _add_edge to figure out what level a new edge should be added to. (R|R`RR(R(Rrtlvlts1te1t otheredgets2te2((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt_edge_conflictDs _c Cs`|j}t|tr|j}g}xR|jD]D}t|trh|jt|jq7|jt |q7Wdj |}n|j}d}x||fD]}|j ddd|d|j dddd }|j |} |j|| d } t|jd } t|j| | |_t|j| d | d |_qWd S(s Given a new edge, recalculate: - _text_height - _unitsize (if the edge text is too big for the current _unitsize, then increase _unitsize) R$RiRURRtnwtjustifyRiiiN(RjR1R R-R0R R,tstrRRtjoinRRyRRRtlengthRt _text_height( R(RrRR-trhseltsR6R0tsRRRgtedgelen((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt _analyze_edgeQs*      icCs(t|trdS||jkr&dS|j||j|js|jj|gt|jd}|j |||j dSd}xt rx3|t|jkr|jjg|j qW||kr|j || r|j|j|Pn|d7}qW|j ||dS(s Add a single edge to the ChartView: - Call analyze_edge to recalculate display parameters - Find an available level - Call _draw_edge Nii( R1RRaRRpRfR`R,R}t _draw_edgeRoRR(R(RrtminlvlR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRss,      cCsd}x:tt|jD]#}||j|kr|}PqqW|dkrSdS|d|j}|jd}|jjdd|jdkr|jjdt |||jndS(Nii tmovetog?i( R?R~R}R`t_chart_level_sizeRRjRt _chart_heighttfloat(R(RrtlevelR5R}R((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs   c Cs|j}|j|jtj}|j|jtj}||krf|td|jd7}n|d|j}|j||||dddd}t |t rg}xR|j D]D} t | t r|j t| jq|j t| qW|j} n g}d} d j|| } d j|| } |j|d|d | d |jd d } |j| dd}|j| d|j| dd}|j|d|d|d|d}|j|d|d | d |jd d }|j||d|d t|jd dd |j}|| |||f|j|<||d}|j| d||j|d||j|d||j|d||j|d||j|dS(s6 Draw a single edge on the ChartView. iiiRtlastRgiiR$RURRRiiRcSs|jd|dS(NRp(Rq(RR(Rr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRsss N(RjRRRURRRRRR1R R0R R,RRRR"RRRzRt create_ovalR-RyRaRt _color_edge(R(RrRRRRR}tlinetagR0R6tpostrhs1trhs2trhstag1tdotxtdotytdottagtrhstag2tlhstagRs((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRsN  $  ((  ) cCs||jkrdS|j}|dk r|dk r||jkrS|j|}n|j|}|j|dd||j|dd||j|dd|d||j|dd||j|dd|dS|jj}||jkr|j|j|n|jrL|j d|fkrL|j|d d n8t |t rq|j|d d n|j|d ddS(s Color in an edge with the given colors. If no colors are specified, use intelligent defaults (dependent on selection, etc.) NiR[iiRziis#084s#042s#48cs#246s#00fs#008( RaRjR?R>RR<RRR2R|R1R(R(Rrt linecolort textcolorRttagsR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs,  $s#0dfcCs||j|<|j|dS(s Mark an edge N(R>R(R(RrR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs cCsf|dkrKt|jj}i|_x5|D]}|j|q1Wn|j|=|j|dS(s/ Unmark an edge (or all edges) N(R?RR>RR(R(Rrtold_marked_edges((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR s    cCs|j|j||dS(N(RR(R(RrR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs c Cs>d}d}|j}x|jjD]}|jdddt|d|jdddd}|j|}|j||d tj }t ||}t ||d |d }q%W||_ ||_ |j d tj |_x$|jjD]}|j|qW|j d |_d tj|j |_|jd S( s Analyze the sentence string, to figure out how big a unit needs to be, How big the tree should be, etc. iFiRURRRRRiiiN(RjR<tleavesRRRzRRRUt _LEAF_SPACINGRRRRRRRRt_TREE_LEVEL_SIZEt _tree_heightRo( R(tunitsizet text_heightRtleafRRRgRr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRns,      cCs|j}|jj|jtjd}t|j}|d|j|_ dd||j f|d<|j rdd||j f|j d(R}RbRmRURR<RRRRyReR,RR~Rdtcreate_polygonR( R(RRRRRt_R}R5RR[Rs((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs(    +c Csv|j}tj}g}xz|D]r}t|trc|j|||d\}}|j|q|jd|d|jd||d7}qW|rt|t |} n'd|d|jd|} |d7}|tj |j } |j | | dddddt |jdd d |j} |jj| | tj |j } xt||D]\} }t|tr|r|j| | |j | | d ddd } |jj| nt|tr| r|j| | |j | | d ddd dd} |jj| nt|tsb|j| | |j | dd ddd } |jj| qbqbW| |fS(s :param index: The index of the first leaf in the tree. :return: The index of the first leaf after the tree. iiRRRtcenterRUR[s#042RRgs#084s#048Rs2 3i'(RmRURR1R RR,RtsumR}RRRRRRyRetzipR(R(ttreetoktindextdepthRRtchild_xsRtchild_xtnodextnodeyRtchildytchildx((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRsD   $  cCs|jr&|jjd|jn|jrL|jjd|jn|jjdi|_xEtt|j D].}x%|j |D]}|j ||qWq{Wx|j D]}|j |qW|j dS(s1 Draw everything (from scratch). RN(RmRRVRkRRjRaR~R}R`RR<RR(R(RRr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyROs     cCsd|jj|i|d5Z?RS(<sChart Parser ApplicationcCsW|j||d|_ytj|_|jj||jjd|jtj|j}tj|j}tj|j}|j dddd|j dddd|j dddddd |j |j|j |j ||j ||j||jd|_d|_|jWnd GH|jnXdS( Ns RXRYR[R\RRoRZisError creating Tree View(t _init_parserR?RCRARRDRERFRHR^Rgt_init_animationt_init_chartviewt_init_rulelabelRRt_matrixt_resultsR(R(RRMRDtframe3tframe2tframe1((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRTZs2         cGs-|jdkrdS|jjd|_dS(N(RCR?RF(R(R((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRFs cOs$tr dS|jj||dS(s Enter the Tkinter mainloop. This function must be called if this demo is created from a non-interactive program (e.g. from a secript); otherwise, the demo will close as soon as the script completes. N(RRCR(R(RR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs cCs ||_||_|jdS(N(Rt_tokenst _reset_parser(R(RRM((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs  cCs|t|j|_|jj|j|jj|_x#tj|j|jD]}qSW|jj |_ d|_ dS(N( RRt_cpt initializeRRQR<RRtstept_cpstepR?R(R(t _new_edge((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs"cCstjjdtjd|_|jd|jtj||_|jj|jj dtjjddddd|jj |_ tjjddd|jj |_ dS(NRs*FontRwRuR%RvR&( RARRxR]R{R|tIntVart_sizeRtcgetR^RyRz(R(R_((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRgs"cCsWtj|j|_|jjdtj|j|_|jjdd|_dS(Niii(RARRCt_stepRt_animatet _animating(R(((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs cCs;t|j|dddd|_|jjd|jdS(NRViRWRp(RUR<t_cvRut_click_cv_edge(R(RP((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRsc Csd}tj|d|d|j|_tj|dddddd d|j|_|jjd d |jjd d tj|d |jdd }|jd ddS(NsLast edge generated by:RURRgi(RbR#RRRXRtvariabletStepR(RARnRyt _rulelabel1t _rulelabel2R^t CheckbuttonR (R(RPtruletxtR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs  c Cstj|}tj|}|jdddd|jddddtj|ddd d d d d |jjddtj|ddd d d d d |jjddtj|ddd d d d d |jjddtj|ddd d d d d |jjddtj|ddd dd d d |jjddtj|ddd dd d d |j jddtj|ddjddtj|ddd dd d d |j jddtj|ddjddtj|ddd dd d d |j jddtj|ddjddtj|ddd dd d d |j jdddS(NRXRYR[RRfR\RUs Reset ParserRis#90c0d0RR{RWRsTop Down StrategyRsBottom Up StrategysBottom Up Left-Corner StrategysTop Down Init Rules#90f090sTop Down Predict RuleRgisBottom Up Predict Rules"Bottom Up Left-Corner Predict RulesFundamental Rule( RARHR^R]tresetttop_down_strategytbottom_up_strategytbottom_up_leftcorner_strategyt top_down_initttop_down_predictt bottom_uptbottom_up_leftcornert fundamental(R(RPRR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRsD         cCs|jjd|jj|jjd|jj|jjd|jj|jjd|jj|jjd|j|jjd|j|jjd|j|jjd|j |jjd |j |jjd |j |jjd |j |jjd |j |jjd |j|jjd|j|jjd|j|jjd|j|jjd|jd|jjd|jd|jjd|jd|jjd|jddS(Nsssss s ss s s RRsRss s RcSs |jdS(Ni(R(Rwta((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pytsR%cSs |jdS(Ni(R(RwR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR sRcSs |jdS(Ni(R(RwR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR sRcSs|j|j S(N(RR^(RwR((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR s(RCRERRRRRRFthelpt save_chartRRRRRt_stop_animationt edit_grammart edit_sentenceR R (R(((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs(c Cstj|j}tj|dd}|jddddd|jdd|jdd ddd|jdd |jdd ddd|jdd |j|jdd d|j|jddd|j |j|jddddd|j dd|j ddddd|tj|dd}|jddddd|j dd|jddddd|j dd|j ddddd|tj|dd}|jddddd|j|jddddd|j|j ddddd|tj|dd}|jddddd|jdd|jdd ddd|jdd!|jdd"ddd|jdd#|j|jdd$d|j|jdd%d|j|jdd&d|j|jdd'd|j|jdd(d|j|j dd)ddd|tj|dd}|jdd*ddd+|jdd,|j|jdd-ddd+|jd.d|jdd/ddd+|jd.ddd0|jdd1ddd+|jd.d2dd3|jdd4ddd+|jd.d5dd6|j dd7ddd|tj|dd}|jdd8d+|jddd.d9d|j|jdd:d+|jddd.d;d|j|jdd<d+|jddd.d=d|j|jdd>d+|jddd.d?d|j|jdd@d+|jddd.dAd|j|j ddBddd|tj|dd}|jddCddd|j|jddDddd|jddE|j ddFddd||jj d|dS(GNRiRs Save ChartR RWR sCtrl-ss Load ChartsCtrl-os Reset ChartsCtrl-rs Save Grammars Load GrammarR isCtrl-xR R s Edit GrammarisCtrl-gs Edit TextsCtrl-ttEdits Chart MatrixitResultstViewsTop Down StrategyRsBottom Up StrategyRssBottom Up Left-Corner StrategyRsBottom Up RulesBottom Up Left-Corner RulesTop Down Init RulesTop Down Predict RulesFundamental RuletApplyRRRs No AnimationtvaluesSlow AnimationRsNormal AnimationiR%sFast AnimationiRtAnimatetTinyi tSmalli tMediumitLargeitHugeitZoomtAboutt InstructionstF1tHelp(!RARRCRR"RRRt save_grammart load_grammarRFRR$R%t view_matrixt view_resultsRRRRRRRRtadd_checkbuttonR tadd_radiobuttonR R tresizetaboutR!R( R(RRteditmenutviewmenutrulemenut animatemenutzoommenuthelpmenu((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs                    cCs0||jkr|j|n |jjdS(N(Rt _select_edgeRR(R(Rr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRscCs!|j||jj|dS(N(RDRR(R(Rr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt_select_matrix_edges cCsh||_|jj|d|jj||jrH|jj|n|jrd|jj|ndS(Ns#f00(RRRRVRR(R(Rr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRDs   cCs@d|_|jj|jj|jr<|jjndS(N(R?RRRRR(R(((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt_deselect_edges     cCs|j|jj|jj|jj||jj|d|jj||jro|jjn|jr|jj|n|jr|jj|n|j r|j j|ndS(Ns#0df( t _display_ruleRtcurrent_chartruleRRRVRRRR(R(Rr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt_show_new_edges     cGskd|_y/t|jdtp!djddddWn,t|jdtpSdjddnXdS(NisHelp: Chart Parser ApplicationRRgiKRtfixed(R RRCRtstrip(R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR!s  # cGs!dd}tjjd|dS(NsNLTK Chart Parser Application sWritten by Edward LopersAbout: Chart Parser Application(RARtshowinfo(R(RwtABOUT((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR=ss Pickle files.pickles All filesRsPlaintext grammar files.cfgcGstd|jdd}|s"dSyt|d}tj|}WdQX||_|jj||jr|jj |n|jr|jj n|j r|j j |n|j j |Wn-t k r}tjjdd|nXdS(sLoad a chart from a pickle fileR:R;s.pickleNRCsError Loading ChartsUnable to open file: %r(RR=R>R?RDR<RRRRxRRRRARARR(R(RRRJRQRw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs(      cGstd|jdd}|s"dSy/t|d}tj|j|WdQXWn-tk r}tjj dd|nXdS(sSave a chart to a pickle fileR:R;s.pickleNR<sError Saving ChartsUnable to open file: %r( RR=R>R?R@R<RARARR(R(RRRBRw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR"s  cGstd|jdd}|s"dSyw|jdr^t|d}tj|}WdQXn-t|d}tj|j}WdQX|j |Wn*t k r}t j j dd |nXdS( s!Load a grammar from a pickle fileR:R;s.cfgNs.pickleRCtrsError Loading GrammarsUnable to open file: %r(RtGRAMMAR_FILE_TYPESRHR>R?RDRt fromstringtreadRRARARR(R(RRRJRRw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR7s  c Gsptd|jdd}|s"dSy|jdrkt|d#}tj|j|jf|WdQXnt|d}|jj }g|D]'}|j |jj kr|^q}g|D]'}|j |jj kr|^q}x|D]}|j d|qWx|D]}|j d|qWWdQXWn*t k rk} tjjdd |nXdS( NR:R;s.cfgs.pickleR<Rs%s sError Saving GrammarsUnable to open file: %r(RRORHR>R?R@R<RRt productionsR-RtwriteRARARR( R(RRRBtprodstpRtresttprodRw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR6s& %44   cGsd|_|j|jj|j|jrE|jj|jn|jr^|jjn|jr}|jj|jndS(Ni( R RRRR<RRxRR(R(R((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRs     cGst|j|j|jdS(N(RRCRR(R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR$scCs9||_|jj||jr5|jj|ndS(N(RRRR(R(R((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR!s  cGs>dj|j}d}d}t|j|||j|dS(NR$s Edit TextsEnter a new sentence to parse.(RRRRCt set_sentence(R(RwtsentenceRDtinstr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR%&scCs#t|j|_|jdS(N(RtsplitRR(R(RY((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRX,scGsQ|jdk r|jjnt|j|j|_|jjd|jdS(NRp(RR?RFR;RCR<RuRE(R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR84scGsA|jdk r|jjnt|j|j|j|_dS(N(RR?RFRRCR<R(R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR99scCs#d|_|j|jjdS(Ni(R RR R^(R(((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR<Bs cCsb|jj||jjdt| |jjdt| |jjdt| dS(NRw(RRRzRRRyR{(R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRFscCst|jjS(N(RR R^(R(((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyRLscCsY|jrd|_dS|jd|jjr|j}|dk r|dk r|jj||g|j}|dkr|j j d|_qqU|jj||jn|jj||j jrd|_|j ncx!|j D]}|dkrPqqW|j j|jr<|jjn|jrU|jjndS(Nii(R RGR?R R^RRt set_strategyt_apply_strategyRRR t_animate_strategyRRRR(R(tstrategyt edge_strategyt selectiontnewedgeRr((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pytapply_strategySs4              cGs d|_dS(Ni(R (R(Rw((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR#xsicCs|jdkrdS|jdk r|jjdksO|jjdkrSdS|jjdkr|jjd|jq|jjdkr|jjd|jq|jjd|jndS(Niii iii( R R]R?R R^R RCtafterR^(R(tspeed((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR^{s*cCs/t|j}|dk r+|j|n|S(N(tnextRR?RI(R(tnew_edge((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyR]s cCsH|dkrd|jd NP VP VP -> VP PP | V NP | V NP -> Det N | NP PP PP -> P NP # Lexical productions. NP -> 'John' | 'I' Det -> 'the' | 'my' | 'a' N -> 'dog' | 'cookie' | 'table' | 'cake' | 'fork' V -> 'ate' | 'saw' P -> 'on' | 'under' | 'with' s*John ate the cake on the table with a forksJohn ate the cake on the tables grammar= (s t,t)s tokens = %rs,Calling "ChartParserApp(grammar, tokens)"...(RRPRR[RRRRR(RtsentRMRh((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pytapps  t__main__Rt(9Rt nltk.compattnltkR?ttkinter.filedialogRRRAtmathtos.pathREt tkinter.fontttkinter.messageboxtnltk.parse.chartRRRRRRRR R R t nltk.treeR t nltk.grammarR Rt nltk.utilRtnltk.draw.utilRRRRRRt nltk.drawRRRRtobjectR;RRRURRRRRRRtR8t__all__(((sj/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/app/chartparser_app.pyt"sB     F. a