
    ,hY                       d Z ddlmZmZ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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$y.)/z:
Composers for default chart XML for various chart types.
    )absolute_importprint_functionunicode_literals)deepcopyescape   )
to_unicode)XL_CHART_TYPE)	parse_xml)nsdeclsc                 (   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&        |j0                  t&        |j2                  t4        |j6                  t4        |j8                  t:        |j<                  t:        |j>                  t:        |j@                  tB        |jD                  tB        |jF                  tB        |jH                  tB        |jJ                  tB        i|    } || |      S # tL        $ r tO        d| z        w xY w)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       V/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/pptx/chart/xmlwriter.pyChartXmlWriterr;      s   
 E#

JJ+
 3
 ""$7
 !3	

 1
 !!#5
 LL/
 '')>
 ""$6
   "4
 $$&8
 NN3
 ##%<
 JJ+
  3
  &&(;!
" **,?#
$  3""$7II) 2KK- 4!5/""$5--/@##%6..0A;
< =
F j*--	  
!>K
 	

s   G(G9 9Hc                 *   t         }|j                  t        |j                  t        |j                  t
        |j                  t
        |j                  t
        |j                  t
        |j                  t
        ij                  | t              } ||      S )zQ
    Return a |_BaseSeriesXmlRewriter| subclass appropriate to *chart_type*.
    )r   r   _BubbleSeriesXmlRewriterr   r.   _XySeriesXmlRewriterr0   r1   r2   r3   get_CategorySeriesXmlRewriter)r6   r7   r8   RewriterClss       r:   SeriesXmlRewriterFactoryrB   ?   s     E 	.##%=. 4))+?!5**,@ 
c*01  z""    c                   2     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                 f    t         t        |           || _        || _        t        |      | _        y N)superrE   __init___chart_type_chart_datalist_series_seq)selfr6   
series_seq	__class__s      r:   rI   z_BaseChartXmlWriter.__init__]   s.    !413%%
+rC   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r5   rN   s    r:   xmlz_BaseChartXmlWriter.xmlc   s     ""IJJrC   )__name__
__module____qualname____doc__rI   propertyrT   __classcell__rP   s   @r:   rE   rE   V   s#    , K KrC   rE   c                   p     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.
    c                 F    t         t        |           || _        || _        y rG   )rH   r]   rI   _series
_date_1904)rN   series	date_1904rP   s      r:   rI   z_BaseSeriesXmlWriter.__init__q   s    "D24#rC   c                 @    t        | j                  j                        S )z7
        The XML-escaped name for this series.
        )r   r_   namerS   s    r:   rd   z_BaseSeriesXmlWriter.namev   s    
 dll''((rC   c                 P    | j                  |      } 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 )rh   format)rN   rf   rg   valuesrh   s        r:   
numRef_xmlz_BaseSeriesXmlWriter.numRef_xml}   s?    
 V$( &

 &QWX

 
	
rC   c                     dj                  t        |            }d}t        |      D ]  \  }}|	||j                  ||      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>
)idxvalue)rj   len	enumerate)rN   rk   rT   pt_tmplro   rp   s         r:   rh   z_BaseSeriesXmlWriter.pt_xml   sl     AHH[ I 

( 	
 $F+ 	8JC}7>>c>77C	8
 
rC   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rf   series_namer   ri   )_tx_tmplrj   r_   name_refrd   r   r   rN   rT   s     r:   txz_BaseSeriesXmlWriter.tx   sP     #dmm"" 
!\\22#yy 73</
 ~rC   c                 ~     | 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.
         rw   ri   )ry   rj   r_   rz   rd   rS   s    r:   tx_xmlz_BaseSeriesXmlWriter.tx_xml   s>     $t}}## 
!\\22#yy
 	
rC   c                      	 y)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>
ri   rS   s    r:   ry   z_BaseSeriesXmlWriter._tx_tmpl   s    
"	
rC   )F)rU   rV   rW   rX   rI   rY   rd   rl   rh   r|   r   ry   rZ   r[   s   @r:   r]   r]   l   sg    $
 ) )
$2   
 
 
 
rC   r]   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                 8    t         t        |           || _        y rG   )rH   r   rI   rK   )rN   r7   rP   s     r:   rI   z_BaseSeriesXmlRewriter.__init__   s    $d46%rC   c                     |j                   |j                  }}| j                  }| j                  |t	        |             t        |j                  |      D ]  \  }}| j                  |||        y)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)plotArearb   rK   _adjust_ser_countrq   zipsers_rewrite_ser_data)rN   
chartSpacer   rb   r7   serseries_datas          r:   replace_series_dataz*_BaseSeriesXmlRewriter.replace_series_data   sk     )11:3G3G)%%
xZ9 #HMM: > 	@C""3Y?	@rC   c                 X    fd}j                   }t        |      D ]
  } ||      } y)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
                  _        | j                  |       |S rG   )r   next_idxro   val
next_orderorderaddnext)r   new_serr   s     r:   	clone_serz:_BaseSeriesXmlRewriter._add_cloned_sers.<locals>.clone_ser   s@    smG&//GKKO ( 3 3GMMKK NrC   N)last_serrange)rN   r   countr   r   _s    `    r:   _add_cloned_sersz'_BaseSeriesXmlRewriter._add_cloned_sers   s2    	 $$u 	+A *H	+rC   c                     |t        |j                        z
  }|dkD  r| j                  ||       y|dk  r| j                  |t	        |             yy)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)rq   r   r   _trim_ser_count_byabs)rN   r   new_ser_countser_count_diffs       r:   r   z(_BaseSeriesXmlRewriter._adjust_ser_count  sQ     'X]]);;A!!(N;a##Hc..AB  rC   c                     t        d      )zh
        Rewrite selected child elements of *ser* based on the values in
        *series_data*.
        z$must be implemented by each subclassrR   )rN   r   r   rb   s       r:   r   z(_BaseSeriesXmlRewriter._rewrite_ser_data  s    
 ""HIIrC   c                 :   |j                   | d }|D ]#  }|j                         }|j                  |       % |j                         D cg c]  }t	        |j                         dk(  s| }}|D ]#  }|j                         }|j                  |       % yc c}w )z
        Remove the last *count* ser elements from *plotArea*. Any xChart
        elements having no ser child elements after trimming are also
        removed.
        Nr   )r   	getparentremoveiter_xChartsrq   )rN   r   r   
extra_sersr   parentxChartextra_xChartss           r:   r   z)_BaseSeriesXmlRewriter._trim_ser_count_by  s     ]]E67+
 	C]]_FMM#	 "*!6!6!8
C<LPQ<QF
 
 $ 	"F%%'FMM&!	"
s   B)B)rU   rV   rW   rX   rI   r   r   r   r   r   rZ   r[   s   @r:   r   r      s)    &@ +"CJ"rC   r   c                   P    e Zd ZdZed        Zed        Zed        Zed        Zy)r   zS
    Provides specialized methods particular to the ``<c:areaChart>`` element.
    c                 j     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_xmlri   rj   _grouping_xml_ser_xml_cat_ax_xmlrS   s    r:   rT   z_AreaChartXmlWriter.xml1  sJ    A? @ &CG
F !% 2 2=="..EG
 G	
rC   c                     | j                   j                  }|j                  r dj                  di d|j                  iS 	 y)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>
ri   rK   
categories	are_datesrj   rg   rN   r   s     r:   r   z_AreaChartXmlWriter._cat_ax_xml|  sV    %%00
&" f%9$ j667%9 9*!	
rC   c                     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   rJ   )rN   r   s     r:   r   z!_AreaChartXmlWriter._grouping_xml  sJ     
&&	**,<
 

	
 2C77rC   c                     d}| j                   D ]Z  }t        |      }| dj                  di |j                  |j                  |j                  |j
                  |j                  dz  }\ |S Nr~   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_xmlri   rK   _CategorySeriesXmlWriterrj   indexr   r   r   rN   rT   ra   
xml_writers       r:   r   z_AreaChartXmlWriter._ser_xml      && 	F1&9J % f  &||!'(//)11)11 C	& 
rC   N)	rU   rV   rW   rX   rY   rT   r   r   r   ri   rC   r:   r   r   ,  s[     H
 H
T +
 +
Z 8 8  rC   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y
)r   zR
    Provides specialized methods particular to the ``<c:barChart>`` element.
    c                      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_posri   )rj   _barDir_xmlr   r   _overlap_xmlr   _val_ax_posrS   s    r:   rT   z_BarChartXmlWriter.xml  sa    -+ X &[6
^ #.. $ 2 2==#00".."..]6
 6	
rC   c                    t         }|j                  |j                  |j                  f}|j                  |j
                  |j                  f}| j                  |v ry| j                  |v ry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   rJ   r5   )rN   XL	bar_types	col_typess       r:   r   z_BarChartXmlWriter._barDir_xml  s~    %%r~~r7I7IJ	(("*;*;R=R=RS	y(4*4!043C3CC
 	
rC   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   rJ   rS   s    r:   _cat_ax_posz_BarChartXmlWriter._cat_ax_pos  `     ''%%s))3**C((#,,c
 

 	rC   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   ri   )rK   r   r   rj   r   rg   r   s     r:   r   z_BarChartXmlWriter._cat_ax_xml#  s    %%00
&" f%Y$ '+&6&6j>V>VW%Y Y(!" &%5$ !$"2"23%5 	5rC   c                 (   t         }|j                  |j                  f}|j                  |j                  f}|j
                  |j                  f}| j                  |v ry| j                  |v ry| j                  |v ry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   rJ   r5   )rN   r   clustered_typesstacked_typespercentStacked_typess        r:   r   z _BarChartXmlWriter._grouping_xmlP  s    ++R-@-@A):):; " 2 2B4I4IJ.<.:!55A!2T5E5EE
 	
rC   c                     t         }|j                  |j                  |j                  |j                  f}| j
                  |v ryy)Nz        <c:overlap val="100"/>
r~   )r   r   r   r   r   rJ   )rN   r   r   s      r:   r   z_BarChartXmlWriter._overlap_xml`  sH    NN!!	 
 335rC   c                     d}| j                   D ]Z  }t        |      }| dj                  di |j                  |j                  |j                  |j
                  |j                  dz  }\ |S r   r   r   s       r:   r   z_BarChartXmlWriter._ser_xmlm  r   rC   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   rS   s    r:   r   z_BarChartXmlWriter._val_ax_pos  r   rC   N)rU   rV   rW   rX   rY   rT   r   r   r   r   r   r   r   ri   rC   r:   r   r     s     7
 7
r 

 

   *5 *5X 
 
 
 
  .  rC   r   c                   @    e Zd ZdZed        Zed        Zed        Zy)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   ri   rj   r   rS   s    r:   rT   z_DoughnutChartXmlWriter.xml  s4    0. ^ &a0/` t}}-a0/ 0	/rC   c                 @    | j                   t        j                  k(  ryyNz"          <c:explosion val="25"/>
r~   )rJ   r   r   rS   s    r:   _explosion_xmlz&_DoughnutChartXmlWriter._explosion_xml  s    }>>>8rC   c                     d}| j                   D ]e  }t        |      }| dj                  di |j                  |j                  |j                  | j
                  |j                  |j                  dz  }g |S )Nr~   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   ri   )rK   r   rj   r   r   r   r   r   r   s       r:   r   z _DoughnutChartXmlWriter._ser_xml  s    && 	F1&9J 	% f  &||!'(//%)%8%8)11)11 C	* 
rC   NrU   rV   rW   rX   rY   rT   r   r   ri   rC   r:   r   r     sD    
 1/ 1/f  
  rC   r   c                   `    e Zd ZdZed        Zed        Zed        Zed        Zed        Z	y)r!   zS
    Provides specialized methods particular to the ``<c:lineChart>`` element.
    c                 j     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   ri   r   rS   s    r:   rT   z_LineChartXmlWriter.xml  sF    53 h &k;
n !% 2 2=="..m;
 ;	
rC   c                     | j                   j                  }|j                  r dj                  di d|j                  iS 	 y)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>
ri   r   r   s     r:   r   z_LineChartXmlWriter._cat_ax_xml0  sV    %%00
&" f%9$ j667%9 9*!	
rC   c                 (   t         }|j                  |j                  f}|j                  |j                  f}|j
                  |j                  f}| j                  |v ry| j                  |v ry| j                  |v ryt        d| j                  z        )Nz%        <c:grouping val="standard"/>
r   r   r   )	r   r    r"   r%   r#   r&   r$   rJ   r5   )rN   r   standard_typesr   r   s        r:   r   z!_LineChartXmlWriter._grouping_xml]  s    ''2??3"*A*AB " 3 3R5P5PQ~-;.:!55A!2T5E5EE
 	
rC   c                 v    t         }|j                  |j                  |j                  f}| j                  |v r	 yyNzN          <c:marker>
            <c:symbol val="none"/>
          </c:marker>
r~   )r   r    r%   r&   rJ   )rN   r   no_marker_typess      r:   _marker_xmlz_LineChartXmlWriter._marker_xmlm  s>    77BOOR5H5HI.*
 rC   c                     d}| j                   D ]e  }t        |      }| dj                  di |j                  |j                  |j                  | j
                  |j                  |j                  dz  }g |S Nr~   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   ri   rK   r   rj   r   r   r   r   r   r   s       r:   r   z_LineChartXmlWriter._ser_xmly      && 	F1&9J 
% f  &||!'(//"&"2"2)11)11 C	, 
rC   N)
rU   rV   rW   rX   rY   rT   r   r   r   r   ri   rC   r:   r!   r!     sm     <
 <
| *
 *
X 
 
 	 	  rC   r!   c                   @    e Zd ZdZed        Zed        Zed        Zy)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   ri   r   rS   s    r:   rT   z_PieChartXmlWriter.xml  s0     4 &7/6 t}}-7/ 	/rC   c                 @    | j                   t        j                  k(  ryyr   )rJ   r   r)   rS   s    r:   r   z!_PieChartXmlWriter._explosion_xml  s    }9998rC   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   ri   )r   rK   rj   r   r   r   r   )rN   r   rT   s      r:   r   z_PieChartXmlWriter._ser_xml  sf    -d.>.>q.AB
	! &
 %++!%!4!4%--%--	
" 
rC   Nr   ri   rC   r:   r(   r(     sC     / /<  
  rC   r(   c                   P    e Zd ZdZed        Zed        Zed        Zed        Zy)r+   z;
    Generates XML for the ``<c:radarChart>`` element.
    c                 T     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   ri   )rj   _radar_styler   rS   s    r:   rT   z_RadarChartXmlWriter.xml  sB    PN ^ &aPQ` $(#4#4OaPQ P	QrC   c                 B    | j                   t        j                  k(  r	 yyr   )rJ   r   r*   rS   s    r:   r   z _RadarChartXmlWriter._marker_xml/  s%    }222*
 rC   c                 @    | j                   t        j                  k(  ryy)Nfilledmarker)rJ   r   r,   rS   s    r:   r  z!_RadarChartXmlWriter._radar_style9  s    }999rC   c                     d}| j                   D ]e  }t        |      }| dj                  di |j                  |j                  |j                  | j
                  |j                  |j                  dz  }g |S r   r   r   s       r:   r   z_RadarChartXmlWriter._ser_xml?  r   rC   N)	rU   rV   rW   rX   rY   rT   r   r  r   ri   rC   r:   r+   r+     s\     QQ QQf    
  rC   r+   c                   `    e Zd ZdZed        Zed        Zed        Zed        Zed        Z	y)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   r{   s     r:   rT   z_XyChartXmlWriter.xml`  s%    J ##T]]GC4H 
rC   c                 d    t         j                  t         j                  f}| j                  |v r	 yyr   )r   r1   r3   rJ   )rN   r   s     r:   r   z_XyChartXmlWriter._marker_xml  s<     5566
 .*
 rC   c                 b    t         j                  t         j                  f}| j                  |v ryy)NsmoothMarker
lineMarker)r   r2   r3   rJ   )rN   smooth_typess     r:   r  z#_XyChartXmlWriter._scatterStyle_val  s3     ++66
 |+!rC   c                    d}| j                   D ]p  }t        |      }| dj                  di |j                  |j                  |j                  | j
                  | j                  |j                  |j                  dz  }r |S )Nr~   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_xmlri   )	rK   _XySeriesXmlWriterrj   r   r   	_spPr_xmlr   r  r  r   s       r:   r   z_XyChartXmlWriter._ser_xml  s    && 	F+F3J 	% f  &||!'(// $"&"2"2 * 3 3 * 3 3 C	0 
rC   c                 B    | j                   t        j                  k(  r	 yy)Nzr          <c:spPr>
            <a:ln w="47625">
              <a:noFill/>
            </a:ln>
          </c:spPr>
r~   )rJ   r   r.   rS   s    r:   r  z_XyChartXmlWriter._spPr_xml  s%    }777( rC   N)
rU   rV   rW   rX   rY   rT   r   r  r   r  ri   rC   r:   r/   r/   [  sn     E EN      8 	 	rC   r/   c                   @    e Zd ZdZed        Zed        Zed        Zy)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   r{   s     r:   rT   z_BubbleChartXmlWriter.xml  s#    L Z MM]N^ 
rC   c                 @    | j                   t        j                  k(  ryy)N10)rJ   r   r   rS   s    r:   _bubble3D_valz#_BubbleChartXmlWriter._bubble3D_valC  s    }BBBrC   c                    d}| j                   D ]p  }t        |      }| dj                  di |j                  |j                  |j                  |j
                  |j                  |j                  | j                  dz  }r |S )Nr~   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_valri   )	rK   _BubbleSeriesXmlWriterrj   r   r   r  r  r"  r   r   s       r:   r   z_BubbleChartXmlWriter._ser_xmlI  s    && 	F/7J 	% f  &||!'(// * 3 3 * 3 3&0&?&?$($6$6 C	0 
rC   N)rU   rV   rW   rX   rY   rT   r   r   ri   rC   r:   r   r     sF    
 P Pd  
  rC   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y)r   zG
    Generates XML snippets particular to a category chart series.
    c                    | j                   j                  }|j                  rit         | j                  j
                  di | j                   j                  |j                  |j                  | j                  dt        d      z  d      S |j                  dk(  r^t         | j                  j
                  di | j                   j                  |j                  | j                  dt        d      z  d      S t         | j                  j
                  di | j                   j                  |j                  | j                  |      dt        d      z  d      S )za
        Return the ``<c:cat>`` element XML for this series, as an oxml
        element.
        ru   rv   rf   rg   	cat_count
cat_pt_xmlr      rf   r(  r)  r   rf   r(  lvl_xmlr   ri   )r_   r   are_numericr   _numRef_cat_tmplrj   categories_refrg   
leaf_count_cat_num_pt_xmlr   depth	_cat_tmpl_cat_pt_xml_multiLvl_cat_tmpl_lvl_xmlr   s     r:   catz_CategorySeriesXmlWriter.catl  s@    \\,,
!!,%%,, %)\\%@%@)3)A)A%/%:%:&*&:&:#(73<#7
 
 q %%% %)\\%@%@%/%:%:&*&6&6#(73<#7		 	 *D##** !%!<!<!+!6!6#}}Z8$ws|3		
 		
rC   c           
      :   | j                   j                  }|j                  rT | j                  j                  di | j                   j
                  |j                  |j                  | j                  ddS |j                  dk(  rI | j                  j                  di | j                   j
                  |j                  | j                  ddS  | j                  j                  di | j                   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.
        r~   r'  r*  r+  r,  ri   )r_   r   r.  r/  rj   r0  rg   r1  r2  r3  r4  r5  r6  r7  r   s     r:   r   z _CategorySeriesXmlWriter.cat_xml  s    \\,,
!!/4((// !%!<!<%/%=%=!+!6!6"&"6"6!  q (4>>(( !%!<!<!+!6!6"&"2"2!	  .t&&-- 
!\\88'22==4	
 	
rC   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.
        ru   rv   r   
values_refrg   	val_count
val_pt_xmlri   )		_val_tmplrj   r   r_   r<  rg   rq   _val_pt_xmlr   r{   s     r:   r   z_CategorySeriesXmlWriter.val  sk    
 $dnn## 
 73</"ll55!%!;!; ."..
 ~rC   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.
        r~   r;  ri   )r?  rj   r_   r<  rg   rq   r@  rS   s    r:   r   z _CategorySeriesXmlWriter.val_xml  sY     %t~~$$ 
"ll55!%!;!; ."..
 	
rC   c           
          d}t        | j                  j                        D ]6  \  }}| dj                  di ||j	                  | j
                        dz  }8 |S )z
        The unicode XML snippet for the ``<c:pt>`` elements when category
        labels are numeric (including date type).
        r~   zj                <c:pt idx="{cat_idx}">
                  <c:v>{cat_lbl_str}</c:v>
                </c:pt>
)cat_idxcat_lbl_strri   )rr   r_   r   rj   numeric_str_valr`   rN   rT   ro   categorys       r:   r2  z(_CategorySeriesXmlWriter._cat_num_pt_xml  ss     &t||'>'>? 
	MC , f		  ##+#;#;DOO#L	 	C
	 
rC   c                     d}t        | j                  j                        D ]9  \  }}| dj                  di |t	        t        |j                              dz  }; |S )z|
        The unicode XML snippet for the ``<c:pt>`` elements containing the
        category names for this series.
        r~   zh                <c:pt idx="{cat_idx}">
                  <c:v>{cat_label}</c:v>
                </c:pt>
)rC  	cat_labelri   )rr   r_   r   rj   r   r
   labelrF  s       r:   r5  z$_CategorySeriesXmlWriter._cat_pt_xml  so     &t||'>'>? 	MC , f	
 "z(..7Q0RS C	 
rC   c                      	 y)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>
ri   rS   s    r:   r4  z"_CategorySeriesXmlWriter._cat_tmpl      #
	
rC   c           
      l    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                 J    d}| D ]  \  }}|d|t        d|z        fz  z  } |S )Nr~   z^                  <c:pt idx="%d">
                    <c:v>%s</c:v>
                  </c:pt>
z%sr   )levelrT   ro   rd   s       r:   
lvl_pt_xmlz5_CategorySeriesXmlWriter._lvl_xml.<locals>.lvl_pt_xml  sH    C" /	T2 &-.	/ // JrC   r~   z=                <c:lvl>
{lvl_pt_xml}                </c:lvl>
rP  ri   )levelsrj   )rN   r   rP  rT   rO  s        r:   r7  z!_CategorySeriesXmlWriter._lvl_xml  sX    	 && 	:E Wf:$j&78: :C	: 
rC   c                      	 y)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>
ri   rS   s    r:   r6  z+_CategorySeriesXmlWriter._multiLvl_cat_tmpl-  rL  rC   c                      	 y)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>
ri   rS   s    r:   r/  z)_CategorySeriesXmlWriter._numRef_cat_tmpl?      	#	
rC   c           	          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.
        r~   zf                <c:pt idx="{val_idx:d}">
                  <c:v>{value}</c:v>
                </c:pt>
)val_idxrp   ri   )rr   r_   rk   rj   )rN   rT   ro   rp   s       r:   r@  z$_CategorySeriesXmlWriter._val_pt_xmlR  si     #DLL$7$78 	9JC} , f	9 $'7	9 9C	9 
rC   c                      	 y)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>
ri   rS   s    r:   r?  z"_CategorySeriesXmlWriter._val_tmplc  rT  rC   N)rU   rV   rW   rX   rY   r8  r   r   r   r2  r5  r4  r7  r6  r/  r@  r?  ri   rC   r:   r   r   g  s     )
 )
V #
 #
J   
 
   &    
 
". 
 
" 
 
$    
 
rC   r   c                   p    e Zd ZdZed        Zed        Zed        Zed        Zed        Z	ed        Z
y)	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                  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.
        ru   rv   r   rl   ri   )	
_xVal_tmplrj   r   rl   r_   x_values_refrg   x_valuesr   r{   s     r:   xValz_XySeriesXmlWriter.xVal|  o     %doo$$ 	
 73</"ooLL--LL..LL))	
 ~rC   c           
           | j                   j                  di d| j                  | 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.
        r~   rZ  ri   )r[  rj   rl   r_   r\  rg   r]  rS   s    r:   r  z_XySeriesXmlWriter.xVal_xml  ]     &t%% 	
"ooLL--LL..LL))	
 		
rC   c           
          | j                   j                  di dt        d      z  | j                  | 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.
        ru   rv   rZ  ri   )	
_yVal_tmplrj   r   rl   r_   y_values_refrg   y_valuesr   r{   s     r:   yValz_XySeriesXmlWriter.yVal  r_  rC   c           
           | j                   j                  di d| j                  | 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.
        r~   rZ  ri   )rc  rj   rl   r_   rd  rg   re  rS   s    r:   r  z_XySeriesXmlWriter.yVal_xml  ra  rC   c                      y)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>
ri   rS   s    r:   r[  z_XySeriesXmlWriter._xVal_tmpl       VrC   c                      y)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>
ri   rS   s    r:   rc  z_XySeriesXmlWriter._yVal_tmpl  ri  rC   N)rU   rV   rW   rX   rY   r^  r  rf  r  r[  rc  ri   rC   r:   r  r  w  s      " 
 
   " 
 
  V V V VrC   r  c                   @    e Zd ZdZed        Zed        Zed        Zy)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                  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.
        ru   rv   rZ  ri   )	_bubbleSize_tmplrj   r   rl   r_   bubble_sizes_refrg   bubble_sizesr   r{   s     r:   
bubbleSizez!_BubbleSeriesXmlWriter.bubbleSize  sq     +d##** 	
 73</"ooLL11LL..LL--	
 ~rC   c           
           | j                   j                  di d| j                  | 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.
        r~   rZ  ri   )rm  rj   rl   r_   rn  rg   ro  rS   s    r:   r"  z%_BubbleSeriesXmlWriter.bubbleSize_xml  s_     ,t$$++ 	
"ooLL11LL..LL--	
 		
rC   c                      	 y)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>
ri   rS   s    r:   rm  z'_BubbleSeriesXmlWriter._bubbleSize_tmpl  s    *	
rC   N)rU   rV   rW   rX   rY   rp  r"  rm  ri   rC   r:   r$  r$    sC      $ 
 
" 

 

rC   r$  c                       e Zd ZdZd Zy)r=   z7
    A series rewriter suitable for bubble charts.
    c                 r   |j                          |j                          |j                          |j                          t	        |      }|j                  |j                         |j                  |j                         |j                  |j                         |j                  |j                         y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_txr|   _insert_xValr^  _insert_yValrf  _insert_bubbleSizerp  rN   r   r   rb   r   s        r:   r   z*_BubbleSeriesXmlRewriter._rewrite_ser_data  s    
 	 +K8
z}}%))z445rC   NrU   rV   rW   rX   r   ri   rC   r:   r=   r=     s    6rC   r=   c                       e Zd ZdZd Zy)r@   z9
    A series rewriter suitable for category charts.
    c                    |j                          |j                          |j                          t        ||      }|j	                  |j
                         |j                  |j                         |j                  |j                         yru  )
rv  _remove_cat_remove_valr   rz  r|   _insert_catr8  _insert_valr   r~  s        r:   r   z,_CategorySeriesXmlRewriter._rewrite_ser_data'  s^    
 	-k9E
z}}%
'
'rC   Nr  ri   rC   r:   r@   r@   "  s    (rC   r@   c                       e Zd ZdZd Zy)r>   zB
    A series rewriter suitable for XY (aka. scatter) charts.
    c                    |j                          |j                          |j                          t        |      }|j	                  |j
                         |j                  |j                         |j                  |j                         y)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  r|   r{  r^  r|  rf  r~  s        r:   r   z&_XySeriesXmlRewriter._rewrite_ser_data<  sd    
 	'4
z}}%))rC   Nr  ri   rC   r:   r>   r>   7  s    *rC   r>   N)%rX   
__future__r   r   r   copyr   xml.sax.saxutilsr   compatr
   
enum.chartr   oxmlr   oxml.nsr   r;   rB   objectrE   r]   r   r   r   r   r!   r(   r+   r/   r   r   r  r$  r=   r@   r>   ri   rC   r:   <module>r     s1   I H  #  &  *.Z#.K& K,k
6 k
\O"V O"d]- ]@B, BJX1 Xvf- fR>, >BB. BJL+ L^z- zzM
3 M
`YV- YVx5
/ 5
p65 6.(!7 (**1 *rC   