
    hi                   :   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ d Zd	 Z G d
 de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d  d!e          Z G d" d#e          Z G d$ d%e          Z G d& d'e          Z G d( d)e          Z G d* d+e          Z d,S )-z8Composers for default chart XML for various chart types.    )annotations)deepcopyescape)XL_CHART_TYPE)	parse_xml)nsdeclsc                Z   t           }	 i |j        t          |j        t          |j        t          |j        t          |j        t          |j        t          |j	        t          |j        t          |j        t          |j        t          |j        t          |j        t           |j        t           |j        t&          |j        t&          |j        t&          |j        t&          |j        t&          |j        t&          |j        t4          |j        t4          |j        t:          |j        t:          |j        t:          |j         tB          |j"        tB          |j#        tB          |j$        tB          |j%        tB          i|          }n # tL          $ r tO          d| z            w xY w || |          S )z
    Factory function returning appropriate XML writer object for
    *chart_type*, loaded with *chart_type* and *chart_data*.
    z0XML writer for chart type %s not yet implemented)(r   AREA_AreaChartXmlWriterAREA_STACKEDAREA_STACKED_100BAR_CLUSTERED_BarChartXmlWriterBAR_STACKEDBAR_STACKED_100BUBBLE_BubbleChartXmlWriterBUBBLE_THREE_D_EFFECTCOLUMN_CLUSTEREDCOLUMN_STACKEDCOLUMN_STACKED_100DOUGHNUT_DoughnutChartXmlWriterDOUGHNUT_EXPLODEDLINE_LineChartXmlWriterLINE_MARKERSLINE_MARKERS_STACKEDLINE_MARKERS_STACKED_100LINE_STACKEDLINE_STACKED_100PIE_PieChartXmlWriterPIE_EXPLODEDRADAR_RadarChartXmlWriterRADAR_FILLEDRADAR_MARKERS
XY_SCATTER_XyChartXmlWriterXY_SCATTER_LINESXY_SCATTER_LINES_NO_MARKERSXY_SCATTER_SMOOTHXY_SCATTER_SMOOTH_NO_MARKERSKeyErrorNotImplementedError)
chart_type
chart_dataXL_CT
BuilderClss       l/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/pptx/chart/xmlwriter.pyChartXmlWriterr7      s   
 E!c
J+
 3
 "$7
 !3	

 1
 !#5
 L/
 ')>
 "$6
  "4
 $&8
 N3
 #%<
 J+
  3
  &(;!
" *,?#
$  3"$7I) 2K- 4!5/"$5-/@#%6.0A;
 
< =

>  c c c!"TWa"abbbc:j*---s   E7F Fc                   t           }|j        t          |j        t          |j        t
          |j        t
          |j        t
          |j        t
          |j	        t
          i
                    | t                    } ||          S )zQ
    Return a |_BaseSeriesXmlRewriter| subclass appropriate to *chart_type*.
    )r   r   _BubbleSeriesXmlRewriterr   r*   _XySeriesXmlRewriterr,   r-   r.   r/   get_CategorySeriesXmlRewriter)r2   r3   r4   RewriterClss       r6   SeriesXmlRewriterFactoryr>   8   sw     E 	.#%=. 4)+?!5*,@ 
c*011  ;z"""    c                  8     e Zd ZdZ fdZed             Z xZS )_BaseChartXmlWriterz
    Generates XML text (unicode) for a default chart, like the one added by
    PowerPoint when you click the *Add Column Chart* button on the ribbon.
    Differentiated XML for different chart types is provided by subclasses.
    c                    t          t          |                                            || _        || _        t          |          | _        d S N)superrA   __init___chart_type_chart_datalist_series_seq)selfr2   
series_seq	__class__s      r6   rE   z_BaseChartXmlWriter.__init__V   sF    !4((11333%%
++r?   c                     t          d          )z
        The full XML stream for the chart specified by this chart builder, as
        unicode text. This method must be overridden by each subclass.
        z%must be implemented by all subclassesr1   rJ   s    r6   xmlz_BaseChartXmlWriter.xml\   s     ""IJJJr?   )__name__
__module____qualname____doc__rE   propertyrP   __classcell__rL   s   @r6   rA   rA   O   sd         , , , , , K K XK K K K Kr?   rA   c                       e Zd ZdZd
 fd	Zed             Zd Zd Zed             Z	ed             Z
ed	             Z xZS )_BaseSeriesXmlWriterz9
    Provides shared members for series XML writers.
    Fc                r    t          t          |                                            || _        || _        d S rC   )rD   rY   rE   _series
_date_1904)rJ   series	date_1904rL   s      r6   rE   z_BaseSeriesXmlWriter.__init__j   s2    "D))22444#r?   c                4    t          | j        j                  S )z7
        The XML-escaped name for this series.
        )r   r[   namerO   s    r6   r`   z_BaseSeriesXmlWriter.nameo   s    
 dl'(((r?   c                N    |                      |          } dj        di |||dS )zh
        Return the ``<c:numRef>`` element specified by the parameters as
        unicode text.
        z            <c:numRef>
              <c:f>{wksht_ref}</c:f>
              <c:numCache>
                <c:formatCode>{number_format}</c:formatCode>
{pt_xml}              </c:numCache>
            </c:numRef>
)	wksht_refnumber_formatpt_xml )rd   format)rJ   rb   rc   valuesrd   s        r6   
numRef_xmlz_BaseSeriesXmlWriter.numRef_xmlv   sR    
 V$$( _ _ "+]V\]]_ _ 	_r?   c                    d                     t          |                    }d}t          |          D ]"\  }}|||                     ||          z  }#|S )a  
        Return the ``<c:ptCount>`` and sequence of ``<c:pt>`` elements
        corresponding to *values* as a single unicode text string.
        `c:ptCount` refers to the number of `c:pt` elements in this sequence.
        The `idx` attribute value for `c:pt` elements locates the data point
        in the overall data point sequence of the chart and is started at
        *offset*.
        z.                <c:ptCount val="{pt_count}"/>
)pt_countz`                <c:pt idx="{idx}">
                  <c:v>{value}</c:v>
                </c:pt>
N)idxvalue)rf   len	enumerate)rJ   rg   rP   pt_tmplrk   rl   s         r6   rd   z_BaseSeriesXmlWriter.pt_xml   su     AHHRUV\R]R]H^^( 	
 $F++ 	8 	8JC}7>>c>777CC
r?   c           
          | j         j        di | j        j        | j        dt          d          z  d}t          |          S )zg
        Return a ``<c:tx>`` oxml element for this series, containing the
        series name.
         %scrb   series_namer	   re   )_tx_tmplrf   r[   name_refr`   r	   r   rJ   rP   s     r6   txz_BaseSeriesXmlWriter.tx   sW     #dm" 
 
!\2#y 73<</ 
 
 ~~r?   c                L     | j         j        di | j        j        | j        ddS )z
        Return the ``<c:tx>`` (tx is short for 'text') element for this
        series as unicode text. This element contains the series name.
         rs   re   )ru   rf   r[   rv   r`   rO   s    r6   tx_xmlz_BaseSeriesXmlWriter.tx_xml   sA     $t}# 
 
!\2#y 
 
 	
r?   c                    	 dS )z
        The string formatting template for the ``<c:tx>`` element for this
        series, containing the series title and spreadsheet range reference.
        a>            <c:tx{nsdecls}>
            <c:strRef>
              <c:f>{wksht_ref}</c:f>
              <c:strCache>
                <c:ptCount val="1"/>
                <c:pt idx="0">
                  <c:v>{series_name}</c:v>
                </c:pt>
              </c:strCache>
            </c:strRef>
          </c:tx>
re   rO   s    r6   ru   z_BaseSeriesXmlWriter._tx_tmpl   s    
"	
 	
r?   )F)rQ   rR   rS   rT   rE   rU   r`   rh   rd   rx   r{   ru   rV   rW   s   @r6   rY   rY   e   s         $ $ $ $ $ $
 ) ) X)_ _ _   .   X 
 
 X
 
 
 X
 
 
 
 
r?   rY   c                  @     e Zd ZdZ fdZd Zd Zd Zd Zd Z	 xZ
S )_BaseSeriesXmlRewriterz.
    Base class for series XML rewriters.
    c                d    t          t          |                                            || _        d S rC   )rD   r~   rE   rG   )rJ   r3   rL   s     r6   rE   z_BaseSeriesXmlRewriter.__init__   s.    $d++44666%r?   c                    |j         |j        }}| j        }|                     |t	          |                     t          |j        |          D ]\  }}|                     |||           dS )a  
        Rewrite the series data under *chartSpace* using the chart data
        contents. All series-level formatting is left undisturbed. If
        the chart data contains fewer series than *chartSpace*, the extra
        series in *chartSpace* are deleted. If *chart_data* contains more
        series than the *chartSpace* element, new series are added to the
        last plot in the chart and series formatting is "cloned" from the
        last series in that plot.
        N)plotArear^   rG   _adjust_ser_countrm   zipsers_rewrite_ser_data)rJ   
chartSpacer   r^   r3   serseries_datas          r6   replace_series_dataz*_BaseSeriesXmlRewriter.replace_series_data   s     )1:3G)%
xZ999 #HM: > > 	@ 	@C""3Y????	@ 	@r?   c                Z    fd}j         }t          |          D ]} ||          }dS )z
        Add `c:ser` elements to the last xChart element in *plotArea*, cloned
        from the last `c:ser` child of that last xChart.
        c                    t          |           }j        |j        _        j        |j        _        |                     |           |S rC   )r   next_idxrk   val
next_orderorderaddnext)r   new_serr   s     r6   	clone_serz:_BaseSeriesXmlRewriter._add_cloned_sers.<locals>.clone_ser   s>    smmG&/GKO ( 3GMKK   Nr?   N)last_serrange)rJ   r   countr   r   _s    `    r6   _add_cloned_sersz'_BaseSeriesXmlRewriter._add_cloned_sers   sV    	 	 	 	 	 $u 	+ 	+A y**HH	+ 	+r?   c                    |t          |j                  z
  }|dk    r|                     ||           dS |dk     r%|                     |t	          |                     dS dS )a  
        Adjust the number of c:ser elements in *plotArea* to *new_ser_count*.
        Excess c:ser elements are deleted from the end, along with any xChart
        elements that are left empty as a result. Series elements are
        considered in xChart + series order. Any new c:ser elements required
        are added to the last xChart element and cloned from the last c:ser
        element in that xChart.
        r   N)rm   r   r   _trim_ser_count_byabs)rJ   r   new_ser_countser_count_diffs       r6   r   z(_BaseSeriesXmlRewriter._adjust_ser_count   sv     'X]););;A!!(N;;;;;a##Hc..A.ABBBBB  r?   c                     t          d          )zh
        Rewrite selected child elements of *ser* based on the values in
        *series_data*.
        z$must be implemented by each subclassrN   )rJ   r   r   r^   s       r6   r   z(_BaseSeriesXmlRewriter._rewrite_ser_data  s    
 ""HIIIr?   c                   |j         | d         }|D ]+}|                                }|                    |           ,d |                                D             }|D ]+}|                                }|                    |           ,dS )z
        Remove the last *count* ser elements from *plotArea*. Any xChart
        elements having no ser child elements after trimming are also
        removed.
        Nc                B    g | ]}t          |j                  d k    |S )r   )rm   r   ).0xCharts     r6   
<listcomp>z=_BaseSeriesXmlRewriter._trim_ser_count_by.<locals>.<listcomp>  s-    ___FV[IYIY]^I^I^I^I^I^r?   )r   	getparentremoveiter_xCharts)rJ   r   r   
extra_sersr   parentextra_xChartsr   s           r6   r   z)_BaseSeriesXmlRewriter._trim_ser_count_by  s     ]E677+
 	 	C]]__FMM#__h.C.C.E.E___# 	" 	"F%%''FMM&!!!!	" 	"r?   )rQ   rR   rS   rT   rE   r   r   r   r   r   rV   rW   s   @r6   r~   r~      s         & & & & &@ @ @ + + +"C C CJ J J" " " " " " "r?   r~   c                  j    e Zd ZdZed             Zed             Zed             Zed             ZdS )r   zS
    Provides specialized methods particular to the ``<c:areaChart>`` element.
    c                B     dj         di | j        | j        | j        dS )Na  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<c:chartSpace xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <c:date1904 val="0"/>
  <c:roundedCorners val="0"/>
  <c:chart>
    <c:autoTitleDeleted val="0"/>
    <c:plotArea>
      <c:layout/>
      <c:areaChart>
{grouping_xml}        <c:varyColors val="0"/>
{ser_xml}        <c:dLbls>
          <c:showLegendKey val="0"/>
          <c:showVal val="0"/>
          <c:showCatName val="0"/>
          <c:showSerName val="0"/>
          <c:showPercent val="0"/>
          <c:showBubbleSize val="0"/>
        </c:dLbls>
        <c:axId val="-2101159928"/>
        <c:axId val="-2100718248"/>
      </c:areaChart>
{cat_ax_xml}      <c:valAx>
        <c:axId val="-2100718248"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="l"/>
        <c:majorGridlines/>
        <c:numFmt formatCode="General" sourceLinked="1"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2101159928"/>
        <c:crosses val="autoZero"/>
        <c:crossBetween val="midCat"/>
      </c:valAx>
    </c:plotArea>
    <c:legend>
      <c:legendPos val="r"/>
      <c:layout/>
      <c:overlay val="0"/>
    </c:legend>
    <c:plotVisOnly val="1"/>
    <c:dispBlanksAs val="zero"/>
    <c:showDLblsOverMax val="0"/>
  </c:chart>
  <c:txPr>
    <a:bodyPr/>
    <a:lstStyle/>
    <a:p>
      <a:pPr>
        <a:defRPr sz="1800"/>
      </a:pPr>
      <a:endParaRPr/>
    </a:p>
  </c:txPr>
</c:chartSpace>
grouping_xmlser_xml
cat_ax_xmlre   rf   _grouping_xml_ser_xml_cat_ax_xmlrO   s    r6   rP   z_AreaChartXmlWriter.xml$  sQ    A? @ CG
 G
F !% 2=". EG
 G
 G	
r?   c                V    | j         j        }|j        r dj        di d|j        iS 	 dS )Na!        <c:dateAx>
        <c:axId val="-2101159928"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="b"/>
        <c:numFmt formatCode="{nf}" sourceLinked="1"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2100718248"/>
        <c:crosses val="autoZero"/>
        <c:auto val="1"/>
        <c:lblOffset val="100"/>
        <c:baseTimeUnit val="days"/>
      </c:dateAx>
nfa?        <c:catAx>
        <c:axId val="-2101159928"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="b"/>
        <c:numFmt formatCode="General" sourceLinked="1"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2100718248"/>
        <c:crosses val="autoZero"/>
        <c:auto val="1"/>
        <c:lblAlgn val="ctr"/>
        <c:lblOffset val="100"/>
        <c:noMultiLvlLbl val="0"/>
      </c:catAx>
re   rG   
categories	are_datesrf   rc   rJ   r   s     r6   r   z_AreaChartXmlWriter._cat_ax_xmlo  s\    %0
 	9&" %9 9$ j67%9 9 9*!	
 	
r?   c                n    t           j        dt           j        dt           j        di| j                 }d|z  S )NstandardstackedpercentStackedz        <c:grouping val="%s"/>
)r   r   r   r   rF   )rJ   r   s     r6   r   z!_AreaChartXmlWriter._grouping_xml  s>     
&	*,<
 
	
 2C77r?   c                    d}| j         D ]@}t          |          }| dj        di |j        |j        |j        |j        |j        dz  }A|S Nrz   z        <c:ser>
          <c:idx val="{ser_idx}"/>
          <c:order val="{ser_order}"/>
{tx_xml}{cat_xml}{val_xml}        </c:ser>
)ser_idx	ser_orderr{   cat_xmlval_xmlre   rG   _CategorySeriesXmlWriterrf   indexr{   r   r   rJ   rP   r]   
xml_writers       r6   r   z_AreaChartXmlWriter._ser_xml      & 	 	F1&99J %    &|!'(/)1)1   CC" 
r?   N)	rQ   rR   rS   rT   rU   rP   r   r   r   re   r?   r6   r   r     s          H
 H
 XH
T +
 +
 X+
Z 8 8 X8   X  r?   r   c                      e Zd ZdZed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zd
S )r   zR
    Provides specialized methods particular to the ``<c:barChart>`` element.
    c                f     dj         di | j        | j        | j        | j        | j        | j        dS )Na  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<c:chartSpace xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <c:date1904 val="0"/>
  <c:chart>
    <c:autoTitleDeleted val="0"/>
    <c:plotArea>
      <c:barChart>
{barDir_xml}{grouping_xml}{ser_xml}{overlap_xml}        <c:axId val="-2068027336"/>
        <c:axId val="-2113994440"/>
      </c:barChart>
{cat_ax_xml}      <c:valAx>
        <c:axId val="-2113994440"/>
        <c:scaling/>
        <c:delete val="0"/>
        <c:axPos val="{val_ax_pos}"/>
        <c:majorGridlines/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2068027336"/>
        <c:crosses val="autoZero"/>
      </c:valAx>
    </c:plotArea>
    <c:dispBlanksAs val="gap"/>
  </c:chart>
  <c:txPr>
    <a:bodyPr/>
    <a:lstStyle/>
    <a:p>
      <a:pPr>
        <a:defRPr sz="1800"/>
      </a:pPr>
      <a:endParaRPr lang="en-US"/>
    </a:p>
  </c:txPr>
</c:chartSpace>
)
barDir_xmlr   r   overlap_xmlr   
val_ax_posre   )rf   _barDir_xmlr   r   _overlap_xmlr   _val_ax_posrO   s    r6   rP   z_BarChartXmlWriter.xml  s]    -+ X [6
 6
^ #. $ 2=#0".". ]6
 6
 6	
r?   c                    t           }|j        |j        |j        f}|j        |j        |j        f}| j        |v rdS | j        |v rdS t          d| j        z            )Nz        <c:barDir val="bar"/>
z        <c:barDir val="col"/>
z"no _barDir_xml() for chart type %s)	r   r   r   r   r   r   r   rF   r1   )rJ   XL	bar_types	col_typess       r6   r   z_BarChartXmlWriter._barDir_xml  so    %r~r7IJ	("*;R=RS	y((44**44!"FIY"YZZZr?   c                    t           j        dt           j        dt           j        dt           j        dt           j        dt           j        di| j                 S )Nlbr   r   r   r   r   r   r   rF   rO   s    r6   _cat_ax_posz_BarChartXmlWriter._cat_ax_pos	  K     '%s)3*C(#,c
 
 	r?   c                    | j         j        }|j        r dj        di | j        |j        dS  dj        di d| j        iS )Na,        <c:dateAx>
        <c:axId val="-2068027336"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="{cat_ax_pos}"/>
        <c:numFmt formatCode="{nf}" sourceLinked="1"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2113994440"/>
        <c:crosses val="autoZero"/>
        <c:auto val="1"/>
        <c:lblOffset val="100"/>
        <c:baseTimeUnit val="days"/>
      </c:dateAx>
)
cat_ax_posr   a        <c:catAx>
        <c:axId val="-2068027336"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="{cat_ax_pos}"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2113994440"/>
        <c:crosses val="autoZero"/>
        <c:auto val="1"/>
        <c:lblAlgn val="ctr"/>
        <c:lblOffset val="100"/>
        <c:noMultiLvlLbl val="0"/>
      </c:catAx>
r   re   )rG   r   r   rf   r   rc   r   s     r6   r   z_BarChartXmlWriter._cat_ax_xml  s    %0
 	Y&" %Y Y$ '+&6j>VWW%Y Y Y(!" %5 5$ !$"23%5 5 	5r?   c                    t           }|j        |j        f}|j        |j        f}|j        |j        f}| j        |v rdS | j        |v rdS | j        |v rdS t          d| j        z            )Nz&        <c:grouping val="clustered"/>
$        <c:grouping val="stacked"/>
+        <c:grouping val="percentStacked"/>
$no _grouping_xml() for chart type %s)	r   r   r   r   r   r   r   rF   r1   )rJ   r   clustered_typesstacked_typespercentStacked_typess        r6   r   z _BarChartXmlWriter._grouping_xmlA  s    +R-@A):; " 2B4IJ..<<..::!555AA!"H4K["[\\\r?   c                ^    t           }|j        |j        |j        |j        f}| j        |v rdS dS )Nz        <c:overlap val="100"/>
rz   )r   r   r   r   r   rF   )rJ   r   r   s      r6   r   z_BarChartXmlWriter._overlap_xmlO  sB    N!	 
 33355rr?   c                    d}| j         D ]@}t          |          }| dj        di |j        |j        |j        |j        |j        dz  }A|S r   r   r   s       r6   r   z_BarChartXmlWriter._ser_xml\  r   r?   c                    t           j        dt           j        dt           j        dt           j        dt           j        dt           j        di| j                 S )Nr   r   r   rO   s    r6   r   z_BarChartXmlWriter._val_ax_post  r   r?   N)rQ   rR   rS   rT   rU   rP   r   r   r   r   r   r   r   re   r?   r6   r   r     s          7
 7
 X7
r [ [ X[   X *5 *5 X*5X ] ] X] 
 
 X
   X.   X  r?   r   c                  T    e Zd ZdZed             Zed             Zed             ZdS )r   z[
    Provides specialized methods particular to the ``<c:doughnutChart>``
    element.
    c                *     dj         di d| j        iS )Na  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<c:chartSpace xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <c:date1904 val="0"/>
  <c:roundedCorners val="0"/>
  <c:chart>
    <c:autoTitleDeleted val="0"/>
    <c:plotArea>
      <c:layout/>
      <c:doughnutChart>
        <c:varyColors val="1"/>
{ser_xml}        <c:dLbls>
          <c:showLegendKey val="0"/>
          <c:showVal val="0"/>
          <c:showCatName val="0"/>
          <c:showSerName val="0"/>
          <c:showPercent val="0"/>
          <c:showBubbleSize val="0"/>
          <c:showLeaderLines val="1"/>
        </c:dLbls>
        <c:firstSliceAng val="0"/>
        <c:holeSize val="50"/>
      </c:doughnutChart>
    </c:plotArea>
    <c:legend>
      <c:legendPos val="r"/>
      <c:layout/>
      <c:overlay val="0"/>
    </c:legend>
    <c:plotVisOnly val="1"/>
    <c:dispBlanksAs val="gap"/>
    <c:showDLblsOverMax val="0"/>
  </c:chart>
  <c:txPr>
    <a:bodyPr/>
    <a:lstStyle/>
    <a:p>
      <a:pPr>
        <a:defRPr sz="1800"/>
      </a:pPr>
      <a:endParaRPr/>
    </a:p>
  </c:txPr>
</c:chartSpace>
r   re   rf   r   rO   s    r6   rP   z_DoughnutChartXmlWriter.xml  s:    0. ^ a0/ 0/` t}-a0/ 0/ 0	/r?   c                4    | j         t          j        k    rdS dS Nz"          <c:explosion val="25"/>
rz   )rF   r   r   rO   s    r6   _explosion_xmlz&_DoughnutChartXmlWriter._explosion_xml  s    }>>>88rr?   c                    d}| j         D ]F}t          |          }| dj        di |j        |j        |j        | j        |j        |j        dz  }G|S )Nrz   z        <c:ser>
          <c:idx val="{ser_idx}"/>
          <c:order val="{ser_order}"/>
{tx_xml}{explosion_xml}{cat_xml}{val_xml}        </c:ser>
)r   r   r{   explosion_xmlr   r   re   )rG   r   rf   r   r{   r   r   r   r   s       r6   r   z _DoughnutChartXmlWriter._ser_xml  s    & 	 	F1&99J 	%    &|!'(/%)%8)1)1   CC& 
r?   NrQ   rR   rS   rT   rU   rP   r   r   re   r?   r6   r   r     sp         
 1/ 1/ X1/f   X
   X  r?   r   c                      e Zd ZdZed             Zed             Zed             Zed             Zed             Z	dS )r   zS
    Provides specialized methods particular to the ``<c:lineChart>`` element.
    c                B     dj         di | j        | j        | j        dS )Na`  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<c:chartSpace xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <c:date1904 val="0"/>
  <c:chart>
    <c:autoTitleDeleted val="0"/>
    <c:plotArea>
      <c:lineChart>
{grouping_xml}        <c:varyColors val="0"/>
{ser_xml}        <c:marker val="1"/>
        <c:smooth val="0"/>
        <c:axId val="2118791784"/>
        <c:axId val="2140495176"/>
      </c:lineChart>
{cat_ax_xml}      <c:valAx>
        <c:axId val="2140495176"/>
        <c:scaling/>
        <c:delete val="0"/>
        <c:axPos val="l"/>
        <c:majorGridlines/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="2118791784"/>
        <c:crosses val="autoZero"/>
      </c:valAx>
    </c:plotArea>
    <c:legend>
      <c:legendPos val="r"/>
      <c:layout/>
      <c:overlay val="0"/>
    </c:legend>
    <c:plotVisOnly val="1"/>
    <c:dispBlanksAs val="gap"/>
    <c:showDLblsOverMax val="0"/>
  </c:chart>
  <c:txPr>
    <a:bodyPr/>
    <a:lstStyle/>
    <a:p>
      <a:pPr>
        <a:defRPr sz="1800"/>
      </a:pPr>
      <a:endParaRPr lang="en-US"/>
    </a:p>
  </c:txPr>
</c:chartSpace>
r   re   r   rO   s    r6   rP   z_LineChartXmlWriter.xml  sK    53 h k;
 ;
n !% 2=". m;
 ;
 ;	
r?   c                V    | j         j        }|j        r dj        di d|j        iS 	 dS )Na        <c:dateAx>
        <c:axId val="2118791784"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="b"/>
        <c:numFmt formatCode="{nf}" sourceLinked="1"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="2140495176"/>
        <c:crosses val="autoZero"/>
        <c:auto val="1"/>
        <c:lblOffset val="100"/>
        <c:baseTimeUnit val="days"/>
      </c:dateAx>
r   a        <c:catAx>
        <c:axId val="2118791784"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="b"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="2140495176"/>
        <c:crosses val="autoZero"/>
        <c:auto val="1"/>
        <c:lblAlgn val="ctr"/>
        <c:lblOffset val="100"/>
        <c:noMultiLvlLbl val="0"/>
      </c:catAx>
re   r   r   s     r6   r   z_LineChartXmlWriter._cat_ax_xml  s\    %0
 	9&" %9 9$ j67%9 9 9*!	
 	
r?   c                    t           }|j        |j        f}|j        |j        f}|j        |j        f}| j        |v rdS | j        |v rdS | j        |v rdS t          d| j        z            )Nz%        <c:grouping val="standard"/>
r   r   r   )	r   r   r   r!   r   r"   r    rF   r1   )rJ   r   standard_typesr   r   s        r6   r   z!_LineChartXmlWriter._grouping_xmlL  s    '2?3"*AB " 3R5PQ~--;;..::!555AA!"H4K["[\\\r?   c                T    t           }|j        |j        |j        f}| j        |v r	 dS dS NzN          <c:marker>
            <c:symbol val="none"/>
          </c:marker>
rz   )r   r   r!   r"   rF   )rJ   r   no_marker_typess      r6   _marker_xmlz_LineChartXmlWriter._marker_xmlZ  s>    7BOR5HI..* 
 rr?   c                    d}| j         D ]F}t          |          }| dj        di |j        |j        |j        | j        |j        |j        dz  }G|S Nrz   z        <c:ser>
          <c:idx val="{ser_idx}"/>
          <c:order val="{ser_order}"/>
{tx_xml}{marker_xml}{cat_xml}{val_xml}          <c:smooth val="0"/>
        </c:ser>
)r   r   r{   
marker_xmlr   r   re   rG   r   rf   r   r{   r   r   r   r   s       r6   r   z_LineChartXmlWriter._ser_xmlf      & 	 	F1&99J 
%    &|!'(/"&"2)1)1   CC( 
r?   N)
rQ   rR   rS   rT   rU   rP   r   r   r   r   re   r?   r6   r   r     s          <
 <
 X<
| *
 *
 X*
X ] ] X] 	 	 X	   X  r?   r   c                  T    e Zd ZdZed             Zed             Zed             ZdS )r$   zR
    Provides specialized methods particular to the ``<c:pieChart>`` element.
    c                *     dj         di d| j        iS )Na  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<c:chartSpace xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <c:chart>
    <c:autoTitleDeleted val="0"/>
    <c:plotArea>
      <c:pieChart>
        <c:varyColors val="1"/>
{ser_xml}      </c:pieChart>
    </c:plotArea>
    <c:dispBlanksAs val="gap"/>
  </c:chart>
  <c:txPr>
    <a:bodyPr/>
    <a:lstStyle/>
    <a:p>
      <a:pPr>
        <a:defRPr sz="1800"/>
      </a:pPr>
      <a:endParaRPr lang="en-US"/>
    </a:p>
  </c:txPr>
</c:chartSpace>
r   re   r   rO   s    r6   rP   z_PieChartXmlWriter.xml  s6     4 7/ /6 t}-7/ / 	/r?   c                4    | j         t          j        k    rdS dS r   )rF   r   r%   rO   s    r6   r   z!_PieChartXmlWriter._explosion_xml  s    }99988rr?   c           	         t          | j        d                   } dj        di |j        | j        |j        |j        d}|S )Nr   z        <c:ser>
          <c:idx val="0"/>
          <c:order val="0"/>
{tx_xml}{explosion_xml}{cat_xml}{val_xml}        </c:ser>
)r{   r   r   r   re   )r   rG   rf   r{   r   r   r   )rJ   r   rP   s      r6   r   z_PieChartXmlWriter._ser_xml  sg    -d.>q.ABB
	! 
 
 %+!%!4%-%-	 
 
" 
r?   Nr   re   r?   r6   r$   r$     so          / / X/<   X
   X  r?   r$   c                  j    e Zd ZdZed             Zed             Zed             Zed             ZdS )r'   z;
    Generates XML for the ``<c:radarChart>`` element.
    c                6     dj         di | j        | j        dS )NaI	  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<c:chartSpace xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <c:date1904 val="0"/>
  <c:roundedCorners val="0"/>
  <mc:AlternateContent xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
    <mc:Choice xmlns:c14="http://schemas.microsoft.com/office/drawing/2007/8/2/chart" Requires="c14">
      <c14:style val="118"/>
    </mc:Choice>
    <mc:Fallback>
      <c:style val="18"/>
    </mc:Fallback>
  </mc:AlternateContent>
  <c:chart>
    <c:autoTitleDeleted val="0"/>
    <c:plotArea>
      <c:layout/>
      <c:radarChart>
        <c:radarStyle val="{radar_style}"/>
        <c:varyColors val="0"/>
{ser_xml}        <c:axId val="2073612648"/>
        <c:axId val="-2112772216"/>
      </c:radarChart>
      <c:catAx>
        <c:axId val="2073612648"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="b"/>
        <c:majorGridlines/>
        <c:numFmt formatCode="m/d/yy" sourceLinked="1"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2112772216"/>
        <c:crosses val="autoZero"/>
        <c:auto val="1"/>
        <c:lblAlgn val="ctr"/>
        <c:lblOffset val="100"/>
        <c:noMultiLvlLbl val="0"/>
      </c:catAx>
      <c:valAx>
        <c:axId val="-2112772216"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="l"/>
        <c:majorGridlines/>
        <c:numFmt formatCode="General" sourceLinked="1"/>
        <c:majorTickMark val="cross"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="2073612648"/>
        <c:crosses val="autoZero"/>
        <c:crossBetween val="between"/>
      </c:valAx>
    </c:plotArea>
    <c:plotVisOnly val="1"/>
    <c:dispBlanksAs val="gap"/>
    <c:showDLblsOverMax val="0"/>
  </c:chart>
  <c:txPr>
    <a:bodyPr/>
    <a:lstStyle/>
    <a:p>
      <a:pPr>
        <a:defRPr sz="1800"/>
      </a:pPr>
      <a:endParaRPr lang="en-US"/>
    </a:p>
  </c:txPr>
</c:chartSpace>
)radar_styler   re   )rf   _radar_styler   rO   s    r6   rP   z_RadarChartXmlWriter.xml  sL    PN ^ aPQ PQ` $(#4OOaPQ PQ P	Qr?   c                6    | j         t          j        k    r	 dS dS r   )rF   r   r&   rO   s    r6   r   z _RadarChartXmlWriter._marker_xml  s)    }222* 
 rr?   c                4    | j         t          j        k    rdS dS )Nfilledmarker)rF   r   r(   rO   s    r6   r  z!_RadarChartXmlWriter._radar_style&  s    }9998xr?   c                    d}| j         D ]F}t          |          }| dj        di |j        |j        |j        | j        |j        |j        dz  }G|S r   r   r   s       r6   r   z_RadarChartXmlWriter._ser_xml,  r   r?   N)	rQ   rR   rS   rT   rU   rP   r   r  r   re   r?   r6   r'   r'     s          QQ QQ XQQf   X   X
   X  r?   r'   c                      e Zd ZdZed             Zed             Zed             Zed             Zed             Z	dS )r+   z=
    Generates XML for the ``<c:scatterChart>`` element.
    c                ,    d| j         d| j        d}|S )Nag  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<c:chartSpace xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <c:chart>
    <c:plotArea>
      <c:scatterChart>
        <c:scatterStyle val="z$"/>
        <c:varyColors val="0"/>
a          <c:axId val="-2128940872"/>
        <c:axId val="-2129643912"/>
      </c:scatterChart>
      <c:valAx>
        <c:axId val="-2128940872"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="b"/>
        <c:numFmt formatCode="General" sourceLinked="1"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2129643912"/>
        <c:crosses val="autoZero"/>
        <c:crossBetween val="midCat"/>
      </c:valAx>
      <c:valAx>
        <c:axId val="-2129643912"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="l"/>
        <c:majorGridlines/>
        <c:numFmt formatCode="General" sourceLinked="1"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2128940872"/>
        <c:crosses val="autoZero"/>
        <c:crossBetween val="midCat"/>
      </c:valAx>
    </c:plotArea>
    <c:legend>
      <c:legendPos val="r"/>
      <c:layout/>
      <c:overlay val="0"/>
    </c:legend>
    <c:plotVisOnly val="1"/>
    <c:dispBlanksAs val="gap"/>
    <c:showDLblsOverMax val="0"/>
  </c:chart>
  <c:txPr>
    <a:bodyPr/>
    <a:lstStyle/>
    <a:p>
      <a:pPr>
        <a:defRPr sz="1800"/>
      </a:pPr>
      <a:endParaRPr lang="en-US"/>
    </a:p>
  </c:txPr>
</c:chartSpace>
)_scatterStyle_valr   rw   s     r6   rP   z_XyChartXmlWriter.xmlM  s,     J ###T]]]GC4H 
r?   c                N    t           j        t           j        f}| j        |v r	 dS dS r   )r   r-   r/   rF   )rJ   r   s     r6   r   z_XyChartXmlWriter._marker_xml  s=     56
 ..* 
 rr?   c                L    t           j        t           j        f}| j        |v rdS dS )NsmoothMarker
lineMarker)r   r.   r/   rF   )rJ   smooth_typess     r6   r  z#_XyChartXmlWriter._scatterStyle_val  s1     +6
 |++!>|r?   c                    d}| j         D ]L}t          |          }| dj        di |j        |j        |j        | j        | j        |j        |j        dz  }M|S )Nrz   z        <c:ser>
          <c:idx val="{ser_idx}"/>
          <c:order val="{ser_order}"/>
{tx_xml}{spPr_xml}{marker_xml}{xVal_xml}{yVal_xml}          <c:smooth val="0"/>
        </c:ser>
)r   r   r{   spPr_xmlr   xVal_xmlyVal_xmlre   )	rG   _XySeriesXmlWriterrf   r   r{   	_spPr_xmlr   r  r  r   s       r6   r   z_XyChartXmlWriter._ser_xml  s    & 	 	F+F33J 	%    &|!'(/ $"&"2 * 3 * 3   CC, 
r?   c                6    | j         t          j        k    r	 dS dS )Nzr          <c:spPr>
            <a:ln w="47625">
              <a:noFill/>
            </a:ln>
          </c:spPr>
rz   )rF   r   r*   rO   s    r6   r  z_XyChartXmlWriter._spPr_xml  s)    }777(  rr?   N)
rQ   rR   rS   rT   rU   rP   r   r  r   r  re   r?   r6   r+   r+   H  s          E E XEN   X   X   X8 	 	 X	 	 	r?   r+   c                  T    e Zd ZdZed             Zed             Zed             ZdS )r   zY
    Provides specialized methods particular to the ``<c:bubbleChart>``
    element.
    c                    d| j         z  }|S )Na  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<c:chartSpace xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <c:chart>
    <c:autoTitleDeleted val="0"/>
    <c:plotArea>
      <c:layout/>
      <c:bubbleChart>
        <c:varyColors val="0"/>
%s        <c:dLbls>
          <c:showLegendKey val="0"/>
          <c:showVal val="0"/>
          <c:showCatName val="0"/>
          <c:showSerName val="0"/>
          <c:showPercent val="0"/>
          <c:showBubbleSize val="0"/>
        </c:dLbls>
        <c:bubbleScale val="100"/>
        <c:showNegBubbles val="0"/>
        <c:axId val="-2115720072"/>
        <c:axId val="-2115723560"/>
      </c:bubbleChart>
      <c:valAx>
        <c:axId val="-2115720072"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="b"/>
        <c:numFmt formatCode="General" sourceLinked="1"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2115723560"/>
        <c:crosses val="autoZero"/>
        <c:crossBetween val="midCat"/>
      </c:valAx>
      <c:valAx>
        <c:axId val="-2115723560"/>
        <c:scaling>
          <c:orientation val="minMax"/>
        </c:scaling>
        <c:delete val="0"/>
        <c:axPos val="l"/>
        <c:majorGridlines/>
        <c:numFmt formatCode="General" sourceLinked="1"/>
        <c:majorTickMark val="out"/>
        <c:minorTickMark val="none"/>
        <c:tickLblPos val="nextTo"/>
        <c:crossAx val="-2115720072"/>
        <c:crosses val="autoZero"/>
        <c:crossBetween val="midCat"/>
      </c:valAx>
    </c:plotArea>
    <c:legend>
      <c:legendPos val="r"/>
      <c:layout/>
      <c:overlay val="0"/>
    </c:legend>
    <c:plotVisOnly val="1"/>
    <c:dispBlanksAs val="gap"/>
    <c:showDLblsOverMax val="0"/>
  </c:chart>
  <c:txPr>
    <a:bodyPr/>
    <a:lstStyle/>
    <a:p>
      <a:pPr>
        <a:defRPr sz="1800"/>
      </a:pPr>
      <a:endParaRPr lang="en-US"/>
    </a:p>
  </c:txPr>
</c:chartSpace>
)r   rw   s     r6   rP   z_BubbleChartXmlWriter.xml  s!    L Z M]N^ 
r?   c                4    | j         t          j        k    rdS dS )N10)rF   r   r   rO   s    r6   _bubble3D_valz#_BubbleChartXmlWriter._bubble3D_val0  s    }BBB3sr?   c                    d}| j         D ]L}t          |          }| dj        di |j        |j        |j        |j        |j        |j        | j        dz  }M|S )Nrz   z        <c:ser>
          <c:idx val="{ser_idx}"/>
          <c:order val="{ser_order}"/>
{tx_xml}          <c:invertIfNegative val="0"/>
{xVal_xml}{yVal_xml}{bubbleSize_xml}          <c:bubble3D val="{bubble3D_val}"/>
        </c:ser>
)r   r   r{   r  r  bubbleSize_xmlbubble3D_valre   )	rG   _BubbleSeriesXmlWriterrf   r   r{   r  r  r!  r  r   s       r6   r   z_BubbleChartXmlWriter._ser_xml6  s    & 	 	F/77J 	%    &|!'(/ * 3 * 3&0&?$($6   CC, 
r?   N)rQ   rR   rS   rT   rU   rP   r  r   re   r?   r6   r   r     ss         
 P P XPd   X
   X  r?   r   c                  
   e Zd ZdZed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zd	 Zed
             Zed             Zed             Zed             ZdS )r   zG
    Generates XML snippets particular to a category chart series.
    c                   | j         j        }|j        rNt           | j        j        di | j         j        |j        |j        | j	        dt          d          z  d          S |j        dk    rHt           | j        j        di | j         j        |j        | j        dt          d          z  d          S t           | j        j        di | j         j        |j        |                     |          dt          d          z  d          S )za
        Return the ``<c:cat>`` element XML for this series, as an oxml
        element.
        rq   rr   rb   rc   	cat_count
cat_pt_xmlr	      rb   r'  r(  r	   rb   r'  lvl_xmlr	   re   )r[   r   are_numericr   _numRef_cat_tmplrf   categories_refrc   
leaf_count_cat_num_pt_xmlr	   depth	_cat_tmpl_cat_pt_xml_multiLvl_cat_tmpl_lvl_xmlr   s     r6   catz_CategorySeriesXmlWriter.catY  sP    \,
! 	,%,  %)\%@)3)A%/%:&*&:#(73<<#7  
 
 
 q  %%  %)\%@%/%:&*&6#(73<<#7	  	 	 	 *D#*  !%!<!+!6#}}Z88$ws||3	  	
 	
 		
r?   c           
     h   | j         j        }|j        r1 | j        j        di | j         j        |j        |j        | j        ddS |j	        dk    r+ | j
        j        di | j         j        |j        | j        ddS  | j        j        di | j         j        |j        |                     |          ddS )z
        The unicode XML snippet for the ``<c:cat>`` element for this series,
        containing the category labels and spreadsheet reference.
        rz   r&  r)  r*  r+  re   )r[   r   r-  r.  rf   r/  rc   r0  r1  r2  r3  r4  r5  r6  r   s     r6   r   z _CategorySeriesXmlWriter.cat_xml  s    \,
! 		/4(/  !%!<%/%=!+!6"&"6!    q  (4>(  !%!<!+!6"&"2!	    .t&- 
 
!\8'2==44	 
 
 	
r?   c           
          | j         j        di dt          d          z  | j        j        | j        j        t          | j                  | j        d}t          |          S )zJ
        The ``<c:val>`` XML for this series, as an oxml element.
        rq   rr   r	   
values_refrc   	val_count
val_pt_xmlre   )		_val_tmplrf   r	   r[   r;  rc   rm   _val_pt_xmlr   rw   s     r6   r   z_CategorySeriesXmlWriter.val  sm    
 $dn# 
 
 73<</"l5!%!; ..". 
 
 ~~r?   c           
          | j         j        di d| j        j        | j        j        t          | j                  | j        dS )z
        Return the unicode XML snippet for the ``<c:val>`` element describing
        this series, containing the series values and their spreadsheet range
        reference.
        rz   r:  re   )r>  rf   r[   r;  rc   rm   r?  rO   s    r6   r   z _CategorySeriesXmlWriter.val_xml  sW     %t~$ 
 
"l5!%!; ..". 
 
 	
r?   c           
         d}t          | j        j                  D ]0\  }}| dj        di ||                    | j                  dz  }1|S )z
        The unicode XML snippet for the ``<c:pt>`` elements when category
        labels are numeric (including date type).
        rz   zj                <c:pt idx="{cat_idx}">
                  <c:v>{cat_lbl_str}</c:v>
                </c:pt>
)cat_idxcat_lbl_strre   )rn   r[   r   rf   numeric_str_valr\   rJ   rP   rk   categorys       r6   r1  z(_CategorySeriesXmlWriter._cat_num_pt_xml  s     &t|'>?? 
	 
	MC , 		 	  ##+#;#;DO#L#L 	 	 	CC 
r?   c                    d}t          | j        j                  D ]7\  }}| dj        di |t	          t          |j                            dz  }8|S )z|
        The unicode XML snippet for the ``<c:pt>`` elements containing the
        category names for this series.
        rz   zh                <c:pt idx="{cat_idx}">
                  <c:v>{cat_label}</c:v>
                </c:pt>
)rB  	cat_labelre   )rn   r[   r   rf   r   strlabelrE  s       r6   r4  z$_CategorySeriesXmlWriter._cat_pt_xml  s     &t|'>?? 	S 	SMC , 	S S $'VC<O<O5P5PQQ	S S SCC
 
r?   c                    	 dS )z
        The template for the ``<c:cat>`` element for this series, containing
        the category labels and spreadsheet reference.
        z          <c:cat{nsdecls}>
            <c:strRef>
              <c:f>{wksht_ref}</c:f>
              <c:strCache>
                <c:ptCount val="{cat_count}"/>
{cat_pt_xml}              </c:strCache>
            </c:strRef>
          </c:cat>
re   rO   s    r6   r3  z"_CategorySeriesXmlWriter._cat_tmpl      #
	
 
	
r?   c           
     Z    d }d}|j         D ]}| dj        di d ||          iz  }|S )zu
        The unicode XML snippet for the ``<c:lvl>`` elements containing
        multi-level category names.
        c                N    d}| D ]\  }}|d|t          d|z            fz  z  } |S )Nrz   z^                  <c:pt idx="%d">
                    <c:v>%s</c:v>
                  </c:pt>
z%sr   )levelrP   rk   r`   s       r6   
lvl_pt_xmlz5_CategorySeriesXmlWriter._lvl_xml.<locals>.lvl_pt_xml  sM    C" / /	T2 &--.	/ /
 Jr?   rz   z=                <c:lvl>
{lvl_pt_xml}                </c:lvl>
rP  re   )levelsrf   )rJ   r   rP  rP   rO  s        r6   r6  z!_CategorySeriesXmlWriter._lvl_xml  sl    	 	 	 & 	 	Ec[c  E!2!23  CC 
r?   c                    	 dS )z
        The template for the ``<c:cat>`` element for this series when there
        are multi-level (nested) categories.
        a            <c:cat{nsdecls}>
            <c:multiLvlStrRef>
              <c:f>{wksht_ref}</c:f>
              <c:multiLvlStrCache>
                <c:ptCount val="{cat_count}"/>
{lvl_xml}              </c:multiLvlStrCache>
            </c:multiLvlStrRef>
          </c:cat>
re   rO   s    r6   r5  z+_CategorySeriesXmlWriter._multiLvl_cat_tmpl  rL  r?   c                    	 dS )z
        The template for the ``<c:cat>`` element for this series when the
        labels are numeric (or date) values.
        a1            <c:cat{nsdecls}>
            <c:numRef>
              <c:f>{wksht_ref}</c:f>
              <c:numCache>
                <c:formatCode>{number_format}</c:formatCode>
                <c:ptCount val="{cat_count}"/>
{cat_pt_xml}              </c:numCache>
            </c:numRef>
          </c:cat>
re   rO   s    r6   r.  z)_CategorySeriesXmlWriter._numRef_cat_tmpl*      	#	
 	
r?   c           	     t    d}t          | j        j                  D ]\  }}|| dj        di ||dz  }|S )z{
        The unicode XML snippet containing the ``<c:pt>`` elements containing
        the values for this series.
        rz   Nzf                <c:pt idx="{val_idx:d}">
                  <c:v>{value}</c:v>
                </c:pt>
)val_idxrl   re   )rn   r[   rg   rf   )rJ   rP   rk   rl   s       r6   r?  z$_CategorySeriesXmlWriter._val_pt_xml=  st     #DL$788 	9 	9JC} , 	9 9 $'77	9 9 9CC
 
r?   c                    	 dS )z
        The template for the ``<c:val>`` element for this series, containing
        the series values and their spreadsheet range reference.
        a2            <c:val{nsdecls}>
            <c:numRef>
              <c:f>{values_ref}</c:f>
              <c:numCache>
                <c:formatCode>{number_format}</c:formatCode>
                <c:ptCount val="{val_count}"/>
{val_pt_xml}              </c:numCache>
            </c:numRef>
          </c:val>
re   rO   s    r6   r>  z"_CategorySeriesXmlWriter._val_tmplN  rT  r?   N)rQ   rR   rS   rT   rU   r7  r   r   r   r1  r4  r3  r6  r5  r.  r?  r>  re   r?   r6   r   r   T  sX         )
 )
 X)
V #
 #
 X#
J   X 
 
 X
    X&   X 
 
 X
"  . 
 
 X
" 
 
 X
$   X  
 
 X
 
 
r?   r   c                      e Zd ZdZed             Zed             Zed             Zed             Zed             Z	ed             Z
dS )	r  z<
    Generates XML snippets particular to an XY series.
    c           
          | j         j        di dt          d          z  |                     | j        j        | j        j        | j        j                  d}t          |          S )z
        Return the ``<c:xVal>`` element for this series as an oxml element.
        This element contains the X values for this series.
        rq   rr   r	   rh   re   )	
_xVal_tmplrf   r	   rh   r[   x_values_refrc   x_valuesr   rw   s     r6   xValz_XySeriesXmlWriter.xValg  s     %do$ 	
 	
 73<</"ooL-L.L)  	
 	
 ~~r?   c           
          | j         j        di d|                     | j        j        | j        j        | j        j                  dS )z
        Return the ``<c:xVal>`` element for this series as unicode text. This
        element contains the X values for this series.
        rz   rZ  re   )r[  rf   rh   r[   r\  rc   r]  rO   s    r6   r  z_XySeriesXmlWriter.xVal_xmly  ]     &t% 	
 	
"ooL-L.L)  	
 	
 		
r?   c           
          | j         j        di dt          d          z  |                     | j        j        | j        j        | j        j                  d}t          |          S )z
        Return the ``<c:yVal>`` element for this series as an oxml element.
        This element contains the Y values for this series.
        rq   rr   rZ  re   )	
_yVal_tmplrf   r	   rh   r[   y_values_refrc   y_valuesr   rw   s     r6   yValz_XySeriesXmlWriter.yVal  r_  r?   c           
          | j         j        di d|                     | j        j        | j        j        | j        j                  dS )z
        Return the ``<c:yVal>`` element for this series as unicode text. This
        element contains the Y values for this series.
        rz   rZ  re   )rc  rf   rh   r[   rd  rc   re  rO   s    r6   r  z_XySeriesXmlWriter.yVal_xml  ra  r?   c                    dS )z
        The template for the ``<c:xVal>`` element for this series, containing
        the X values and their spreadsheet range reference.
        z<          <c:xVal{nsdecls}>
{numRef_xml}          </c:xVal>
re   rO   s    r6   r[  z_XySeriesXmlWriter._xVal_tmpl       VUr?   c                    dS )z
        The template for the ``<c:yVal>`` element for this series, containing
        the Y values and their spreadsheet range reference.
        z<          <c:yVal{nsdecls}>
{numRef_xml}          </c:yVal>
re   rO   s    r6   rc  z_XySeriesXmlWriter._yVal_tmpl  ri  r?   N)rQ   rR   rS   rT   rU   r^  r  rf  r  r[  rc  re   r?   r6   r  r  b  s            X" 
 
 X
    X" 
 
 X
  V V XV V V XV V Vr?   r  c                  T    e Zd ZdZed             Zed             Zed             ZdS )r#  zE
    Generates XML snippets particular to a bubble chart series.
    c           
          | j         j        di dt          d          z  |                     | j        j        | j        j        | j        j                  d}t          |          S )z
        Return the ``<c:bubbleSize>`` element for this series as an oxml
        element. This element contains the bubble size values for this
        series.
        rq   rr   rZ  re   )	_bubbleSize_tmplrf   r	   rh   r[   bubble_sizes_refrc   bubble_sizesr   rw   s     r6   
bubbleSizez!_BubbleSeriesXmlWriter.bubbleSize  st     +d#* 	
 	
 73<</"ooL1L.L-  	
 	
 ~~r?   c           
          | j         j        di d|                     | j        j        | j        j        | j        j                  dS )z
        Return the ``<c:bubbleSize>`` element for this series as unicode
        text. This element contains the bubble size values for all the
        data points in the chart.
        rz   rZ  re   )rm  rf   rh   r[   rn  rc   ro  rO   s    r6   r!  z%_BubbleSeriesXmlWriter.bubbleSize_xml  s^     ,t$+ 	
 	
"ooL1L.L-  	
 	
 		
r?   c                    dS )z
        The template for the ``<c:bubbleSize>`` element for this series,
        containing the bubble size values and their spreadsheet range
        reference.
        zH          <c:bubbleSize{nsdecls}>
{numRef_xml}          </c:bubbleSize>
re   rO   s    r6   rm  z'_BubbleSeriesXmlWriter._bubbleSize_tmpl  s     bar?   N)rQ   rR   rS   rT   rU   rp  r!  rm  re   r?   r6   r#  r#    st            X$ 
 
 X
" b b Xb b br?   r#  c                      e Zd ZdZd ZdS )r9   z7
    A series rewriter suitable for bubble charts.
    c                   |                                  |                                 |                                 |                                 t	          |          }|                    |j                   |                    |j                   |	                    |j
                   |                    |j                   dS z
        Rewrite the ``<c:tx>``, ``<c:cat>`` and ``<c:val>`` child elements
        of *ser* based on the values in *series_data*.
        N)
_remove_tx_remove_xVal_remove_yVal_remove_bubbleSizer#  
_insert_txrx   _insert_xValr^  _insert_yValrf  _insert_bubbleSizerp  rJ   r   r   r^   r   s        r6   r   z*_BubbleSeriesXmlRewriter._rewrite_ser_data  s    
 	   +K88
z}%%%))))))z455555r?   NrQ   rR   rS   rT   r   re   r?   r6   r9   r9     s-         6 6 6 6 6r?   r9   c                      e Zd ZdZd ZdS )r<   z9
    A series rewriter suitable for category charts.
    c                :   |                                  |                                 |                                 t          ||          }|                    |j                   |                    |j                   |                    |j	                   dS ru  )
rv  _remove_cat_remove_valr   rz  rx   _insert_catr7  _insert_valr   r~  s        r6   r   z,_CategorySeriesXmlRewriter._rewrite_ser_data  s    
 	-k9EE
z}%%%
'''
'''''r?   Nr  re   r?   r6   r<   r<   	  s-         ( ( ( ( (r?   r<   c                      e Zd ZdZd ZdS )r:   zB
    A series rewriter suitable for XY (aka. scatter) charts.
    c                8   |                                  |                                 |                                 t          |          }|                    |j                   |                    |j                   |                    |j	                   dS )z
        Rewrite the ``<c:tx>``, ``<c:xVal>`` and ``<c:yVal>`` child elements
        of *ser* based on the values in *series_data*.
        N)
rv  rw  rx  r  rz  rx   r{  r^  r|  rf  r~  s        r6   r   z&_XySeriesXmlRewriter._rewrite_ser_data#  s    
 	'44
z}%%%))))))))r?   Nr  re   r?   r6   r:   r:     s-         * * * * *r?   r:   N)!rT   
__future__r   copyr   xml.sax.saxutilsr   pptx.enum.chartr   	pptx.oxmlr   pptx.oxml.nsr	   r7   r>   objectrA   rY   r~   r   r   r   r   r$   r'   r+   r   r   r  r#  r9   r<   r:   re   r?   r6   <module>r     s   > > " " " " " "       # # # # # # ) ) ) ) ) )                  (. (. (.V# # #.K K K K K& K K K,g
 g
 g
 g
 g
6 g
 g
 g
TM" M" M" M" M"V M" M" M"`] ] ] ] ]- ] ] ]@~ ~ ~ ~ ~, ~ ~ ~BX X X X X1 X X Xvd d d d d- d d dN> > > > >, > > >BB B B B B. B B BJL L L L L+ L L L^z z z z z- z z zzK
 K
 K
 K
 K
3 K
 K
 K
\YV YV YV YV YV- YV YV YVx1b 1b 1b 1b 1b/ 1b 1b 1bh6 6 6 6 65 6 6 6.( ( ( ( (!7 ( ( (** * * * *1 * * * * *r?   