
    NcgHy              	          d dl Z d dlmZ 	 e j                  ZdZdZdZdZ	 e
di dg dd	eed
gdeedgdeedgdeedd
gdeedd
gdeedgdeedgdeedgdeedgdeedgdeedgdeedgd eed!gd"ee	d#d$gd%eed&gd'eed(gd)eed*gd+eed,gd-ee	d.gd/g d0d1eed2d3gd4eed5d6gd7eed8d9gd:eed;d<gd=eed>d?gd@eedAdBgdCeedDgdEdFdGgdHeedIgdJeedKgdLeedMgdNeedOgdPeedQgdRdSdTgdUeedVgdWg dXdYg dZd[eed\gd]eed^gd_g d`daeedbgdceeddgdeg dfdgdhdigdjdhdkgdleedmgdneedogdpg dqdrg dsdtg dudvg dwdxg dydzg d{d|g d}d~g ddg ddg ddddgdddgdddgdddgdddgdddgdddgdddgdddgdddgdddgdddgdddgdddgdddgdddgdddgdg ddg ddg ddg ddg ddg ddg ddg ddddgdg ddg dâdddgdg dȢdg dʢdg d̢dg d΢dg dТdg dҢdg dԢdg d֢dg dآdg dڢdddgdddgdddgdddgdddgdddgdg ddg ddg ddg ddddgdddgdddgdddgdddgd g ddg ddg ddg ddg d	d
g ddg ddg dZddZy# e$ r e j
                  ZY w xY w(      N)TextWrapperz"str or int or Series or array-likezSEither a name of a column in `data_frame`, or a pandas Series or array_like object.z+list of str or int, or Series or array-likezPEither names of columns in `data_frame`, or pandas Series, or array_like objects
data_frame)zDataFrame or array-like or dictzUThis argument needs to be passed for column names (and not keyword names) to be used.zEArray-like and dict are transformed internally to a pandas DataFrame.z\Optional: if missing, a DataFrame gets constructed under the hood using the other arguments.xzkValues from this column or array_like are used to position marks along the x axis in cartesian coordinates.yzkValues from this column or array_like are used to position marks along the y axis in cartesian coordinates.zzkValues from this column or array_like are used to position marks along the z axis in cartesian coordinates.x_startz
(required)x_endaziValues from this column or array_like are used to position marks along the a axis in ternary coordinates.bziValues from this column or array_like are used to position marks along the b axis in ternary coordinates.cziValues from this column or array_like are used to position marks along the c axis in ternary coordinates.rzlValues from this column or array_like are used to position marks along the radial axis in polar coordinates.thetazmValues from this column or array_like are used to position marks along the angular axis in polar coordinates.valueszSValues from this column or array_like are used to set values associated to sectors.parentszYValues from this column or array_like are used as parents in sunburst and treemap charts.idszDValues from this column or array_like are used to set ids of sectorspathzsList of columns names or columns of a rectangular dataframe defining the hierarchy of sectors, from root to leaves.z7An error is raised if path AND ids or parents is passedlatz`Values from this column or array_like are used to position marks according to latitude on a map.lonzaValues from this column or array_like are used to position marks according to longitude on a map.	locationszyValues from this column or array_like are to be interpreted according to `locationmode` and mapped to longitude/latitude.basezOValues from this column or array_like are used to position the base of the bar.
dimensionszFValues from these columns are used for multidimensional visualization.dimensions_max_cardinality)zint (default 50)zWhen `dimensions` is `None` and `data_frame` is provided, columns with more than this number of unique values are excluded from the output.z%Not used when `dimensions` is passed.error_xzIValues from this column or array_like are used to size x-axis error bars.zzIf `error_x_minus` is `None`, error bars will be symmetrical, otherwise `error_x` is used for the positive direction only.error_x_minuszcValues from this column or array_like are used to size x-axis error bars in the negative direction.zIgnored if `error_x` is `None`.error_yzIValues from this column or array_like are used to size y-axis error bars.zzIf `error_y_minus` is `None`, error bars will be symmetrical, otherwise `error_y` is used for the positive direction only.error_y_minuszcValues from this column or array_like are used to size y-axis error bars in the negative direction.zIgnored if `error_y` is `None`.error_zzIValues from this column or array_like are used to size z-axis error bars.zzIf `error_z_minus` is `None`, error bars will be symmetrical, otherwise `error_z` is used for the positive direction only.error_z_minuszcValues from this column or array_like are used to size z-axis error bars in the negative direction.zIgnored if `error_z` is `None`.colorzHValues from this column or array_like are used to assign color to marks.opacityfloatz4Value between 0 and 1. Sets the opacity for markers.	line_dashzPValues from this column or array_like are used to assign dash-patterns to lines.
line_groupzXValues from this column or array_like are used to group rows of `data_frame` into lines.symbolzJValues from this column or array_like are used to assign symbols to marks.pattern_shapezQValues from this column or array_like are used to assign pattern shapes to marks.sizezDValues from this column or array_like are used to assign mark sizes.radiuszint (default is 30)z+Sets the radius of influence of each point.
hover_namezJValues from this column or array_like appear in bold in the hover tooltip.
hover_data)
z<str, or list of str or int, or Series or array-like, or dictzLEither a name or list of names of columns in `data_frame`, or pandas Series,zor array_like objectszNor a dict with column names as keys, with values True (for default formatting)z>False (in order to remove this column from hover information),z3or a formatting string, for example ':.3f' or '|%a'z0or list-like data to appear in the hover tooltipz<or tuples with a bool or formatting string as first element,z7and list-like data to appear in hover as second elementzDValues from these columns appear as extra data in the hover tooltip.custom_data)z3str, or list of str or int, or Series or array-likez`Either name or list of names of columns in `data_frame`, or pandas Series, or array_like objectszValues from these columns are extra data, to be used in widgets or Dash callbacks for example. This data is not user-visible but is included in events emitted by the figure (lasso selection etc.)textzJValues from this column or array_like appear in the figure as text labels.nameszEValues from this column or array_like are used as labels for sectors.locationmode)strz0One of 'ISO-3', 'USA-states', or 'country names'z[Determines the set of locations used to match entries in `locations` to regions on the map.	facet_rowznValues from this column or array_like are used to assign marks to facetted subplots in the vertical direction.	facet_colzpValues from this column or array_like are used to assign marks to facetted subplots in the horizontal direction.facet_col_wrap)intz Maximum number of facet columns.zVWraps the column variable at this width, so that the column facets span multiple rows.zDIgnored if 0, and forced to 0 if `facet_row` or a `marginal` is set.facet_row_spacingzfloat between 0 and 1z`Spacing between facet rows, in paper units. Default is 0.03 or 0.07 when facet_col_wrap is used.facet_col_spacingz>Spacing between facet columns, in paper units Default is 0.02.animation_framezSValues from this column or array_like are used to assign marks to animation frames.animation_groupzValues from this column or array_like are used to provide object-constancy across animation frames: rows with matching `animation_group`s will be treated as if they describe the same object in each frame.symbol_sequence)list of strz.Strings should define valid plotly.js symbols.zWhen `symbol` is set, values in that column are assigned symbols by cycling through `symbol_sequence` in the order described in `category_orders`, unless the value of `symbol` is a key in `symbol_map`.
symbol_map)0dict with str keys and str values (default `{}`)z-String values should define plotly.js symbolszlUsed to override `symbol_sequence` to assign a specific symbols to marks corresponding with specific values.zHKeys in `symbol_map` should be values in the column denoted by `symbol`.zAlternatively, if the values of `symbol` are valid symbol names, the string `'identity'` may be passed to cause them to be used directly.line_dash_map)r:   z.Strings values define plotly.js dash-patterns.zvUsed to override `line_dash_sequences` to assign a specific dash-patterns to lines corresponding with specific values.zNKeys in `line_dash_map` should be values in the column denoted by `line_dash`.zAlternatively, if the values of `line_dash` are valid line-dash names, the string `'identity'` may be passed to cause them to be used directly.line_dash_sequence)r8   z4Strings should define valid plotly.js dash-patterns.zWhen `line_dash` is set, values in that column are assigned dash-patterns by cycling through `line_dash_sequence` in the order described in `category_orders`, unless the value of `line_dash` is a key in `line_dash_map`.pattern_shape_map)r:   z0Strings values define plotly.js patterns-shapes.z|Used to override `pattern_shape_sequences` to assign a specific patterns-shapes to lines corresponding with specific values.zVKeys in `pattern_shape_map` should be values in the column denoted by `pattern_shape`.zAlternatively, if the values of `pattern_shape` are valid patterns-shapes names, the string `'identity'` may be passed to cause them to be used directly.pattern_shape_sequence)r8   z6Strings should define valid plotly.js patterns-shapes.zWhen `pattern_shape` is set, values in that column are assigned patterns-shapes by cycling through `pattern_shape_sequence` in the order described in `category_orders`, unless the value of `pattern_shape` is a key in `pattern_shape_map`.color_discrete_sequence)r8   z'Strings should define valid CSS-colors.a  When `color` is set and the values in the corresponding column are not numeric, values in that column are assigned colors by cycling through `color_discrete_sequence` in the order described in `category_orders`, unless the value of `color` is a key in `color_discrete_map`.zVarious useful color sequences are available in the `plotly.express.colors` submodules, specifically `plotly.express.colors.qualitative`.color_discrete_map)r:   z,String values should define valid CSS-colorszsUsed to override `color_discrete_sequence` to assign a specific colors to marks corresponding with specific values.zOKeys in `color_discrete_map` should be values in the column denoted by `color`.zAlternatively, if the values of `color` are valid colors, the string `'identity'` may be passed to cause them to be used directly.color_continuous_scale)r8   z&Strings should define valid CSS-colorszmThis list is used to build a continuous color scale when the column denoted by `color` contains numeric data.zVarious useful color scales are available in the `plotly.express.colors` submodules, specifically `plotly.express.colors.sequential`, `plotly.express.colors.diverging` and `plotly.express.colors.cyclical`.color_continuous_midpoint)znumber (default `None`)zWIf set, computes the bounds of the continuous color scale to have the desired midpoint.zSetting this value is recommended when using `plotly.express.colors.diverging` color scales as the inputs to `color_continuous_scale`.size_maxzint (default `20`)z,Set the maximum mark size when using `size`.markerszboolean (default `False`)z&If `True`, markers are shown on lines.lineszboolean (default `True`)zKIf `False`, lines are not drawn (forced to `True` if `markers` is `False`).log_xz=If `True`, the x-axis is log-scaled in cartesian coordinates.log_yz=If `True`, the y-axis is log-scaled in cartesian coordinates.log_zz=If `True`, the z-axis is log-scaled in cartesian coordinates.log_rz>If `True`, the radial axis is log-scaled in polar coordinates.range_xzlist of two numberszKIf provided, overrides auto-scaling on the x-axis in cartesian coordinates.range_yzKIf provided, overrides auto-scaling on the y-axis in cartesian coordinates.range_zzKIf provided, overrides auto-scaling on the z-axis in cartesian coordinates.range_colorzBIf provided, overrides auto-scaling on the continuous color scale.range_rzLIf provided, overrides auto-scaling on the radial axis in polar coordinates.range_thetazMIf provided, overrides auto-scaling on the angular axis in polar coordinates.titler.   zThe figure title.templatez<str or dict or plotly.graph_objects.layout.Template instancezNThe figure template name (must be a key in plotly.io.templates) or definition.widthzint (default `None`)zThe figure width in pixels.heightzThe figure height in pixels.labels)r:   z[By default, column names are used in the figure for axis titles, legend entries and hovers.z,This parameter allows this to be overridden.zThe keys of this dict should correspond to column names, and the values should correspond to the desired label to be displayed.category_orders)z8dict with str keys and list of str values (default `{}`)zBy default, in Python 3.6+, the order of categorical values in axes, legends and facets depends on the order in which these values are first encountered in `data_frame` (and no order is guaranteed by default in Python below 3.6).zIThis parameter is used to force a specific ordering of values per column.zThe keys of this dict should correspond to column names, and the values should be lists of strings corresponding to the specific display order desired.marginal)r.   6One of `'rug'`, `'box'`, `'violin'`, or `'histogram'`.zQIf set, a subplot is drawn alongside the main plot, visualizing the distribution.
marginal_x)r.   rW   zZIf set, a horizontal subplot is drawn above the main plot, visualizing the x-distribution.
marginal_y)r.   rW   zbIf set, a vertical subplot is drawn to the right of the main plot, visualizing the y-distribution.	trendline)	r.   zBOne of `'ols'`, `'lowess'`, `'rolling'`, `'expanding'` or `'ewm'`.ziIf `'ols'`, an Ordinary Least Squares regression line will be drawn for each discrete-color/symbol group.zpIf `'lowess`', a Locally Weighted Scatterplot Smoothing line will be drawn for each discrete-color/symbol group.zyIf `'rolling`', a Rolling (e.g. rolling average, rolling median) line will be drawn for each discrete-color/symbol group.zIf `'expanding`', an Expanding (e.g. expanding average, expanding sum) line will be drawn for each discrete-color/symbol group.zIf `'ewm`', an Exponentially Weighted Moment (e.g. exponentially-weighted moving average) line will be drawn for each discrete-color/symbol group.zxSee the docstrings for the functions in `plotly.express.trendline_functions` for more details on these functions and howz8to configure them with the `trendline_options` argument.trendline_options)dictz_Options passed as the first argument to the function from `plotly.express.trendline_functions` z"named in the `trendline` argument.trendline_color_override)r.   zValid CSS color.zIf provided, and if `trendline` is set, all trendlines will be drawn in this color rather than in the same color as the traces from which they draw their inputs.trendline_scopez8str (one of `'trace'` or `'overall'`, default `'trace'`)zIf `'trace'`, then one trendline is drawn per trace (i.e. per color, symbol, facet, animation frame etc) and if `'overall'` then one trendline is computed for the entire dataset, and replicated across all facets.render_mode)r.   z7One of `'auto'`, `'svg'` or `'webgl'`, default `'auto'`z,Controls the browser API used to draw marks.zm`'svg'` is appropriate for figures of less than 1000 data points, and will allow for fully-vectorized output.zn`'webgl'` is likely necessary for acceptable performance above 1000 points but rasterizes part of the output. z,`'auto'` uses heuristics to choose the mode.	direction)r.   zFOne of '`counterclockwise'` or `'clockwise'`. Default is `'clockwise'`zLSets the direction in which increasing values of the angular axis are drawn.start_anglezint (default `90`)zTSets start angle for the angular axis, with 0 being due east and 90 being due north.histfunc)zBstr (default `'count'` if no arguments are provided, else `'sum'`)z8One of `'count'`, `'sum'`, `'avg'`, `'min'`, or `'max'`.z^Function used to aggregate values for summarization (note: can be normalized with `histnorm`).histnorm)str (default `None`)zLOne of `'percent'`, `'probability'`, `'density'`, or `'probability density'`z2If `None`, the output of `histfunc` is used as is.z|If `'probability'`, the output of `histfunc` for a given bin is divided by the sum of the output of `histfunc` for all bins.zIf `'percent'`, the output of `histfunc` for a given bin is divided by the sum of the output of `histfunc` for all bins and multiplied by 100.z[If `'density'`, the output of `histfunc` for a given bin is divided by the size of the bin.zIf `'probability density'`, the output of `histfunc` for a given bin is normalized such that it corresponds to the probability that a random event whose distribution is described by the output of `histfunc` will fall into that bin.barnorm)rd   #One of `'fraction'` or `'percent'`.zgIf `'fraction'`, the value of each bar is divided by the sum of all values at that location coordinate.B`'percent'` is the same but multiplied by 100 to show percentages.<`None` will stack up all values at each location coordinate.	groupnorm)rd   rf   ziIf `'fraction'`, the value of each point is divided by the sum of all values at that location coordinate.rg   rh   barmode)zstr (default `'relative'`)z-One of `'group'`, `'overlay'` or `'relative'`ziIn `'relative'` mode, bars are stacked above zero for positive values and below zero for negative values.z:In `'overlay'` mode, bars are drawn on top of one another.z5In `'group'` mode, bars are placed beside each other.boxmode)str (default `'group'`)One of `'group'` or `'overlay'`z;In `'overlay'` mode, boxes are on drawn top of one another.z6In `'group'` mode, boxes are placed beside each other.
violinmode)rl   rm   z=In `'overlay'` mode, violins are on drawn top of one another.z8In `'group'` mode, violins are placed beside each other.	stripmode)rl   rm   z<In `'overlay'` mode, strips are on drawn top of one another.z7In `'group'` mode, strips are placed beside each other.zoom)zint (default `8`)zBetween 0 and 20.zSets map zoom level.orientation)z8str, one of `'h'` for horizontal or `'v'` for vertical. zS(default `'v'` if `x` and `y` are provided and both continous or both categorical, zNotherwise `'v'`(`'h'`) if `x`(`y`) is categorical and `y`(`x`) is continuous, z5otherwise `'v'`(`'h'`) if only `x`(`y`) is provided) 
line_closezKIf `True`, an extra line segment is drawn between the first and last point.
line_shapezstr (default `'linear'`)zBOne of `'linear'`, `'spline'`, `'hv'`, `'vh'`, `'hvh'`, or `'vhv'`	fitboundszstr (default `False`).z)One of `False`, `locations` or `geojson`.basemap_visibleboolzForce the basemap visibility.scopezstr (default `'world'`).zOne of `'world'`, `'usa'`, `'europe'`, `'asia'`, `'africa'`, `'north america'`, or `'south america'`Default is `'world'` unless `projection` is set to `'albers usa'`, which forces `'usa'`.
projectionzstr a  One of `'equirectangular'`, `'mercator'`, `'orthographic'`, `'natural earth'`, `'kavrayskiy7'`, `'miller'`, `'robinson'`, `'eckert4'`, `'azimuthal equal area'`, `'azimuthal equidistant'`, `'conic equal area'`, `'conic conformal'`, `'conic equidistant'`, `'gnomonic'`, `'stereographic'`, `'mollweide'`, `'hammer'`, `'transverse mercator'`, `'albers usa'`, `'winkel tripel'`, `'aitoff'`, or `'sinusoidal'`Default depends on `scope`.center)r\   z!Dict keys are `'lat'` and `'lon'`z!Sets the center point of the map.	map_style)zstr (default `'basic'`)zIdentifier of base map style.a+  Allowed values are `'basic'`, `'carto-darkmatter'`, `'carto-darkmatter-nolabels'`, `'carto-positron'`, `'carto-positron-nolabels'`, `'carto-voyager'`, `'carto-voyager-nolabels'`, `'dark'`, `'light'`, `'open-street-map'`, `'outdoors'`, `'satellite'`, `'satellite-streets'`, `'streets'`, `'white-bg'`.mapbox_style)z/str (default `'basic'`, needs Mapbox API token)zIdentifier of base map style, some of which require a Mapbox or Stadia Maps API token to be set using `plotly.express.set_mapbox_access_token()`.z|Allowed values which do not require a token are `'open-street-map'`, `'white-bg'`, `'carto-positron'`, `'carto-darkmatter'`.zAllowed values which require a Mapbox API token are `'basic'`, `'streets'`, `'outdoors'`, `'light'`, `'dark'`, `'satellite'`, `'satellite-streets'`.zuAllowed values which require a Stadia Maps API token are `'stamen-terrain'`, `'stamen-toner'`, `'stamen-watercolor'`.points)z%str or boolean (default `'outliers'`)z@One of `'outliers'`, `'suspectedoutliers'`, `'all'`, or `False`.MIf `'outliers'`, only the sample points lying outside the whiskers are shown.zIf `'suspectedoutliers'`, all outlier points are shown and those less than 4*Q1-3*Q3 or greater than 4*Q3-3*Q1 are highlighted with the marker's `'outliercolor'`.r}   z(If `'all'`, all sample points are shown.z_If `False`, no sample points are shown and the whiskers extend to the full range of the sample.boxz.If `True`, boxes are drawn inside the violins.notchedz(If `True`, boxes are drawn with notches.geojsonzGeoJSON-formatted dictz[Must contain a Polygon feature collection, with IDs, which are references from `locations`.featureidkeyzstr (default: `'id'`)zPath to field in GeoJSON feature object with which to match the values passed in to `locations`.The most common alternative to the default is of the form `'properties.<key>`.
cumulativez+If `True`, histogram values are cumulative.nbins)r2   Positive integer.zSets the number of bins.nbinsx)r2   r   z)Sets the number of bins along the x axis.nbinsy)r2   r   z)Sets the number of bins along the y axis.branchvalues)r.   z'total' or 'remainder'a1  Determines how the items in `values` are summed. Whenset to 'total', items in `values` are taken to be valueof all its descendants. When set to 'remainder', itemsin `values` corresponding to the root and the branches:sectors are taken to be the extra part not part of thesum of the values at their leaves.maxdepth)r2   zPositive integerzzSets the number of rendered sectors from any given `level`. Set `maxdepth` to -1 to render all thelevels in the hierarchy.ecdfnorm)z*string or `None` (default `'probability'`)z%One of `'probability'` or `'percent'`z-If `None`, values will be raw counts or sums.zGIf `'probability', values will be probabilities normalized from 0 to 1.zCIf `'percent', values will be percentages normalized from 0 to 100.ecdfmode)zstring (default `'standard'`)z6One of `'standard'`, `'complementary'` or `'reversed'`z[If `'standard'`, the ECDF is plotted such that values represent data at or below the point.zZIf `'complementary'`, the CCDF is plotted such that values represent data above the point.zhIf `'reversed'`, a variant of the CCDF is plotted such that values represent data at or above the point.	text_auto)z bool or string (default `False`)zeIf `True` or a string, the x or y or z values will be displayed as text, depending on the orientationz[A string like `'.2f'` will be interpreted as a `texttemplate` numeric formatting directive.c                    |i n|}|i n|}t        ddd      }| j                  xs ddz   }t        |       d   D ]  }|j                  |      rt	        ||         }n+t	        t
        |         }|j                  |      r|||   z  }|dd  }|t
        v s||v r$|j                  dj                  |xs d            nd	}|d   }	||d
|	d|dz  } |dz  }|dz  }|S )NK   z    )rR   initial_indentsubsequent_indent z
Parameters
----------
r       z (documentation missing from map)z: 
z
Returns
-------
z    plotly.graph_objects.Figure)r   __doc__getfullargspecgetlistdocsfilljoin)
fnoverride_dictappend_dicttwresultparam	param_docparam_desc_list
param_desc
param_types
             N/var/www/html/bid-api/venv/lib/python3.12/site-packages/plotly/express/_doc.pymake_docstringr   c  s   '/B]M#+"K	2f	OBjjB">>F#A&U#]512IT%[)Iu%[//	#AB- } 6 GGCHH_2343 	 q\
E:zBB '  $$F
//FM     )NN)inspecttextwrapr   r   AttributeError
getargspeccolref_typecolref_desccolref_list_typecolref_list_descr\   r   r   r   r   r   <module>r      sH	     (++N
 3c@ V   O	O	 	uO	 	uO	$ 	u#O	. 	u	-O	: 	u	9O	F 	sEO	P 	sOO	Z 	sYO	d 	vcO	n 	wmO	x 	]wO	B 	cAO	L 	N	KO	V 	}A	
UO	b 	j	aO	l 	k	kO	v 	 	DuO	@ 	Y
O	J 	PIO	R SO	` 	S 	E	_O	l 	m)	kO	x 	S 	E	wO	D 	m)	CO	P 	S 	E	OO	\ 	m)	[O	h 	RgO	p LMqO	t 	ZsO	~ 	b}O	H 	TGO	R 	[QO	\ 	N
[O	d "#PQeO	h 	TgO	pqO	HIO	T 	T
SO	^ 	O]O	fgO	r 	xqO	| 	z{O	DEO	R 	 jQO	Z 	 HYO	b 	]aO	l 	 	WkO	tuO	~O	LMO	Z[O	deO	rsO	|}O	H	I	O	V	W	O	b	c	O	l	 #$RSm	O	n	 )*RSo	O	r	 	#Uq	O	z	 	$Gy	O	B
 	$GA
O	J
 	$GI
O	R
 	$HQ
O	Z
 	UY
O	b
 	Ua
O	j
 	Ui
O	r
 	Lq
O	z
 	Vy
O	B 	WAO	H %
&IO	L 	GXKO	R "#@
ASO	T #$BCUO	VWO	bcO	noO	xyO	BCO	L
MO	bcO	lmO	x 	C 	_wO	~O	NOO	Z 	^YO	`aO	jkO	|}O	JKO	XYO	fgO	rsO	~O	J 
LKO	LMO	Z 	$UYO	b 	#LaO	h ()TUiO	j <=kO	n 	#	cmO	x 		&wO	@AO	JKO	TUO	bcO	t 
%&VWuO	v )*TUwO	z 	!eyO	B 	 	YAO	L 	$5KO	R CSO	T UUO	V UWO	X	YO	lmO	xyO	FGO	TUO	d{  (''N(s   K KK