ó
mÜJ]c           @` sê  d  d l  m Z m Z m Z d  d l Z e d  d l Z d  d l m Z d  d l m Z d  d l	 m
 Z
 d  d l m Z m Z m Z m Z m Z d  d l m Z m Z m Z d  d l m Z m Z m Z d  d	 l m Z d  d l j j Z d
 Z d e  f d „  ƒ  YZ! d e  f d „  ƒ  YZ" d e  f d „  ƒ  YZ# d „  Z$ d „  Z% d „  Z& d „  Z' d e  f d „  ƒ  YZ( d e( e  f d „  ƒ  YZ) d e( e  f d „  ƒ  YZ* d „  Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d  „  Z0 d! „  Z1 d" „  Z2 d S(#   i    (   t   absolute_importt   divisiont   print_functionN(   t   patch(   t   check_integrity(   t   figure(   t   GlyphRenderert   Labelt   Plott
   LinearAxist   CustomJS(   t   FactorRanget   DataRange1dt   Range1d(   t   CategoricalScalet   LinearScalet   LogScale(   t   PanToolsó   
You are attempting to set `plot.legend.location` on a plot that has zero legends added, this will have no effect.

Before legend properties can be set, you must add a Legend explicitly, or call a glyph method with the 'legend' parameter set.
t   TestPlotLegendPropertyc           B` s   e  Z d  „  Z d „  Z RS(   c         C` s§   t  d d ƒ } | j } t | t j ƒ s0 t ‚ t | ƒ d k sH t ‚ | j d d g d d g d d	 ƒ| j } t | t j ƒ s‹ t ‚ t | ƒ d k s£ t ‚ d  S(
   Nt   toolst    i    i   i   i   i   t   legendt   foo(   R   R   t
   isinstancet   bmpt   _list_attr_splatt   AssertionErrort   lent   circle(   t   selft   plott   x(    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt
   test_basic5   s    	"	c         C` so   t  d d ƒ } t j t ƒ K } d | j _ t | ƒ d k sE t ‚ | d j j	 d t
 k se t ‚ Wd  QXd  S(   NR   R   t   abovei   i    (   R   t   pytestt   warnst   UserWarningR   t   locationR   R   t   messaget   argst   _LEGEND_EMPTY_WARNING(   R   R   R#   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_warnign?   s
    (   t   __name__t
   __module__R    R)   (    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyR   3   s   	
t   TestPlotSelectc           B` s’   e  Z d  „  Z e d ƒ d „  ƒ Z e d ƒ d „  ƒ Z e d ƒ d „  ƒ Z e d ƒ d „  ƒ Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z RS(   c         C` sA   t  d d ƒ |  _ |  j j d d d g d d d g d d ƒd  S(   NR   t   pani   i   i   t   nameR   (   R   t   _plotR   (   R   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   setup_methodH   s    s   bokeh.models.plots.findc         C` sI   |  j  j d ƒ | j s t ‚ | j d d t d d ƒ k sE t ‚ d  S(   NR   i    i   R.   (   R/   t   selectt   calledR   t	   call_argst   dict(   R   t	   mock_find(    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_string_argL   s    c         C` sI   |  j  j t ƒ | j s t ‚ | j d d t d t ƒ k sE t ‚ d  S(   Ni    i   t   type(   R/   R1   R   R2   R   R3   R4   (   R   R5   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_type_argR   s    c         C` sU   t  d d d t ƒ } |  j j |   | j s4 t ‚ | j d d | k sQ t ‚ d  S(   NR.   R   R7   i    i   (   R4   R   R/   R1   R2   R   R3   (   R   R5   t   kw(    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_kwargsX   s    c         C` sX   t  d d d t ƒ } |  j j d | ƒ | j s7 t ‚ | j d d | k sT t ‚ d  S(   NR.   R   R7   t   selectori    i   (   R4   R   R/   R1   R2   R   R3   (   R   R5   R9   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_single_selector_kwarg_   s    c      	   C` sY   t  j t ƒ ) } |  j j d t d d ƒ d d ƒ Wd  QXd t | j ƒ k sU t ‚ d  S(   NR;   R   t   barsJ   when passing 'selector' keyword arg, not other keyword args may be present(	   R"   t   raisest	   TypeErrorR/   R1   R4   t   strt   valueR   (   R   t   exc(    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt$   test_selector_kwarg_and_extra_kwargsf   s    (c         C` sG   t  j t ƒ  } |  j j d ƒ Wd  QXd t | j ƒ k sC t ‚ d  S(   Ni
   s5   selector must be a dictionary, string or plot object.(   R"   R>   R?   R/   R1   R@   RA   R   (   R   RB   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_bad_arg_typek   s    c         C` sJ   t  j t ƒ  } |  j j d d ƒ Wd  QXd t | j ƒ k sF t ‚ d  S(   NR   R=   s/   select accepts at most ONE positional argument.(   R"   R>   R?   R/   R1   R@   RA   R   (   R   RB   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_too_many_argsp   s    c         C` sD   t  j t ƒ  } |  j j ƒ  Wd  QXd t | j ƒ k s@ t ‚ d  S(   NsC   select requires EITHER a positional argument, OR keyword arguments.(   R"   R>   R?   R/   R1   R@   RA   R   (   R   RB   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_no_inputu   s    c         C` sM   t  j t ƒ  } |  j j d d t ƒWd  QXd t | j ƒ k sI t ‚ d  S(   NR   R7   sM   select accepts EITHER a positional argument, OR keyword arguments (not both).(	   R"   R>   R?   R/   R1   R   R@   RA   R   (   R   RB   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_arg_and_kwargz   s    (   R*   R+   R0   R   R6   R8   R:   R<   RC   RD   RE   RF   RG   (    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyR,   F   s   					t   TestPlotValidationc           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C` sv   t  ƒ  } g  | _ t j d ƒ  } t | g ƒ Wd  QX| j j d k sO t ‚ | j j d d j	 d ƒ sr t ‚ d  S(   Ns   bokeh.core.validation.check.logi   i    s1   W-1000 (MISSING_RENDERERS): Plot has no renderers(
   R   t	   rendererst   mockR   R   t   warningt
   call_countR   R3   t
   startswith(   R   t   pt   mock_logger(    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_missing_renderers   s    		c         C` sß   t  ƒ  } d  | _ t j d ƒ  } t | g ƒ Wd  QX| j j d k sO t ‚ | j j	 d d j
 d ƒ sr t ‚ d  | _ t j d ƒ  } t | g ƒ Wd  QX| j j d k s¸ t ‚ | j j	 d d j
 d ƒ sÛ t ‚ d  S(   Ns   bokeh.core.validation.check.logi   i    sD   E-1008 (REQUIRED_SCALE): A required Scale object is missing: x_scalesM   E-1008 (REQUIRED_SCALE): A required Scale object is missing: x_scale, y_scale(   R   t   Nonet   x_scaleRJ   R   R   t   errorRL   R   R3   RM   t   y_scale(   R   RN   RO   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_missing_scale‰   s    		#	c         C` sß   t  ƒ  } d  | _ t j d ƒ  } t | g ƒ Wd  QX| j j d k sO t ‚ | j j	 d d j
 d ƒ sr t ‚ d  | _ t j d ƒ  } t | g ƒ Wd  QX| j j d k s¸ t ‚ | j j	 d d j
 d ƒ sÛ t ‚ d  S(   Ns   bokeh.core.validation.check.logi   i    sD   E-1004 (REQUIRED_RANGE): A required Range object is missing: x_rangesM   E-1004 (REQUIRED_RANGE): A required Range object is missing: x_range, y_range(   R   RQ   t   x_rangeRJ   R   R   RS   RL   R   R3   RM   t   y_range(   R   RN   RO   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_missing_range—   s    		#	c      	   C` sÍ  t  ƒ  } d | j _ t j d ƒ  } t | g ƒ Wd  QX| j j d k sR t ‚ | j j	 d d j
 d ƒ su t ‚ t  ƒ  } t ƒ  | j d <d | j _ t j d ƒ  } t | g ƒ Wd  QX| j j d k s× t ‚ | j j	 d d j
 d ƒ sú t ‚ | j j	 d d j d ƒ d	 k s#t ‚ t  ƒ  t  ƒ  } } t ƒ  | j d <d | j _ t d
 d d i | d 6ƒ | j _ | | j ƒ  k sŒt ‚ t j d ƒ  } t | g ƒ Wd  QX| j j d k sÉt ‚ d  S(   Nt   junks   bokeh.core.validation.check.logi   i    s’   E-1020 (BAD_EXTRA_RANGE_NAME): An extra range name is configued with a name that does not correspond to any range: x_range_name='junk' [LinearAxisR   sŒ   E-1020 (BAD_EXTRA_RANGE_NAME): An extra range name is configued with a name that does not correspond to any range: x_range_name='junk' [Gridt   Gridi   t   codeR   R'   t   dep(   R   t   xaxist   x_range_nameRJ   R   R   RS   RL   R   R3   RM   R   t   extra_x_rangest   gridt   countR
   RV   t   callbackt
   references(   R   RN   RO   R\   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_bad_extra_range_name¥   s0    		)"(   R*   R+   RP   RU   RX   Rd   (    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyRH      s   			c          C` s3   t  ƒ  }  t j t ƒ  |  j t ƒ  ƒ Wd  QXd  S(   N(   R   R"   R>   t
   ValueErrort
   add_layoutR   (   R   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt/   test_plot_add_layout_raises_error_if_not_renderÅ   s    	c          C` s8   t  ƒ  }  t ƒ  } |  j | ƒ | |  j k s4 t ‚ d  S(   N(   R   R   Rf   t   centerR   (   R   t   label(    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt1   test_plot_add_layout_adds_label_to_plot_renderersË   s    		c          C` s;   t  ƒ  }  t ƒ  } |  j | d ƒ | |  j k s7 t ‚ d  S(   Nt   left(   R   R	   Rf   Rk   R   (   R   t   axis(    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt>   test_plot_add_layout_adds_axis_to_renderers_and_side_renderersÒ   s    		c          C` s"   t  ƒ  }  |  j d  k s t ‚ d  S(   N(   R   t   sizing_modeRQ   R   (   R   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt-   test_sizing_mode_property_is_fixed_by_defaultÙ   s    	t   BaseTwinAxisc           B` s8   e  Z d  Z d „  Z d „  Z d „  Z e d „  ƒ Z RS(   s#   Base class for testing extra rangesc         C` sE   t  ƒ  } t | d j | ƒ ƒ } |  j ƒ  | d <| d sA t ‚ d  S(   Ns   extra_{}_rangest	   foo_range(   R   t   getattrt   formatt   get_range_instanceR   (   R   t	   axis_nameR   t	   range_obj(    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   verify_axisá   s    	c         C` s   |  j  d ƒ d  S(   NR   (   Rw   (   R   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_x_rangeç   s    c         C` s   |  j  d ƒ d  S(   Nt   y(   Rw   (   R   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_y_rangeê   s    c           C` s
   t  ‚ d  S(   N(   t   NotImplementedError(    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyRt   í   s    (   R*   R+   t   __doc__Rw   Rx   Rz   t   staticmethodRt   (    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyRp   Þ   s
   			t   TestCategoricalTwinAxisc           B` s   e  Z d  Z e d „  ƒ Z RS(   s4   Test whether extra x and y ranges can be categoricalc           C` s   t  d d ƒ S(   NR   R=   (   R   (    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyRt   õ   s    (   R*   R+   R|   R}   Rt   (    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyR~   ò   s   t   TestLinearTwinAxisc           B` s   e  Z d  Z e d „  ƒ Z RS(   s0   Test whether extra x and y ranges can be Range1dc           C` s   t  d d ƒ S(   Ni    i*   (   R   (    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyRt   ý   s    (   R*   R+   R|   R}   Rt   (    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyR   ú   s   c          C` s%   t  ƒ  }  |  j j d k s! t ‚ d  S(   NR   (   R   t   titlet   textR   (   R   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt8   test_plot_with_no_title_specified_creates_an_empty_title  s    	c           C` sŸ   t  t j d ƒ t ƒ s t ‚ t  t j d ƒ t ƒ s< t ‚ t  t j d ƒ t ƒ sZ t ‚ t  t j d ƒ t ƒ sx t ‚ t j t	 ƒ  t j d ƒ Wd  QXd  S(   Nt   autot   lineart   logt   categoricalt   malformed_type(
   R   R   t   _scaleR   R   R   R   R"   R>   Re   (    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   test_plot__scale_classmethod  s    c          C` s+   t  ƒ  }  |  j ƒ  } | g  k s' t ‚ d  S(   N(   R   t   _check_required_scaleR   (   R   t   check(    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt%   test__check_required_scale_has_scales  s    	c          C` s7   t  d d  d d  ƒ }  |  j ƒ  } | g  k s3 t ‚ d  S(   NRR   RT   (   R   RQ   RŠ   R   (   R   R‹   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt)   test__check_required_scale_missing_scales  s    c          C` sv   t  d t ƒ  d t ƒ  ƒ }  |  j ƒ  } | g  k s9 t ‚ t  d t ƒ  d t ƒ  ƒ }  |  j ƒ  } | g  k sr t ‚ d  S(   NRR   RV   RT   RW   (   R   R   R   t"   _check_compatible_scale_and_rangesR   R   R   (   R   R‹   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt6   test__check_compatible_scale_and_ranges_compat_numeric  s    c          C` s=   t  d t ƒ  d t ƒ  ƒ }  |  j ƒ  } | g  k s9 t ‚ d  S(   NRR   RV   (   R   R   R   RŽ   R   (   R   R‹   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt5   test__check_compatible_scale_and_ranges_compat_factor'  s    c          C` s=   t  d t ƒ  d t ƒ  ƒ }  |  j ƒ  } | g  k s9 t ‚ d  S(   NRR   RV   (   R   R   R   RŽ   R   (   R   R‹   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pytO   test__check_compatible_scale_and_ranges_incompat_numeric_scale_and_factor_range-  s    c          C` s=   t  d t ƒ  d t ƒ  ƒ }  |  j ƒ  } | g  k s9 t ‚ d  S(   NRR   RV   (   R   R   R   RŽ   R   (   R   R‹   (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pytO   test__check_compatible_scale_and_ranges_incompat_factor_scale_and_numeric_range3  s    (3   t
   __future__R    R   R   R"   RJ   R   t   bokeh.core.validationR   t   bokeh.plottingR   t   bokeh.modelsR   R   R   R	   R
   t   bokeh.models.rangesR   R   R   t   bokeh.models.scalesR   R   R   t   bokeh.models.toolsR   t   bokeh.models.plotst   modelst   plotsR   R(   t   objectR   R,   RH   Rg   Rj   Rm   Ro   Rp   R~   R   R‚   R‰   RŒ   R   R   R   R‘   R’   (    (    (    s<   lib/python2.7/site-packages/bokeh/models/tests/test_plots.pyt   <module>   s<    (
9F												