code: def value_counts(
      values,
      sort=True,
      ascending=False,
      normalize=False,
      bins=None,
      dropna=True,
  ):
      """
      Compute a histogram of the counts of non-null values.
  
      Parameters
      ----------
      values : ndarray (1-d)
      sort : boolean, default True
          Sort by values
      ascending : boolean, default False
          Sort in ascending order
      normalize: boolean, default False
          If True then compute a relative histogram
      bins : integer, optional
          Rather than count values, group them into half-open bins,
          convenience for pd.cut, only works with numeric data
      dropna : boolean, default True
          Don't include counts of NaN
  
      Returns
      -------
      value_counts : Series
  
      """
      from pandas.core.series import Series, Index
  
      name = getattr(values, "name", None)
  
      if bins is not None:
          try:
              from pandas.core.reshape.tile import cut
  
              values = Series(values)
              ii = cut(values, bins, include_lowest=True)
          except TypeError:
              raise TypeError(
                  "bins argument only works with numeric data."
              )
  
          # count, remove nulls (from the index), and but the bins
          result = ii.value_counts(dropna=dropna)
          result = result[result.index.notna()]
          result.index = result.index.astype("interval")
          result = result.sort_index()
  
          # if we are dropna and we have NO values
          if dropna and (result.values == 0).all():
              result = result.iloc[0:0]
  
          # normalizing is by len of all (regardless of dropna)
          counts = np.array([len(ii)])
  
      else:
          if is_extension_array_dtype(values) or is_sparse(values):
              # handle Categorical and sparse,
              result = Series(values)._values.value_counts(
                  dropna=dropna
              )
              result.name = name
              counts = result.values
  
          else:
              keys, counts = _value_counts_arraylike(values, dropna)
  
              if not isinstance(keys, Index):
                  keys = Index(keys)
              result = Series(counts, index=keys, name=name)
  
      if sort:
          result = result.sort_values(ascending=ascending)
  
      if normalize:
          result = result / float(counts.sum())
  
      return result
  
imports: from __future__ import division
  from textwrap import dedent
  from warnings import catch_warnings, simplefilter, warn
  import numpy
  from pandas._libs import algos, hashtable, lib
  from pandas._libs.tslib import iNaT
  from pandas.util._decorators import Appender, Substitution, deprecate_kwarg
  from pandas.core.dtypes.cast import construct_1d_object_array_from_listlike, maybe_promote
  from pandas.core.dtypes.common import ensure_float64, ensure_int64, ensure_object, ensure_platform_int, ensure_uint64, is_array_like, is_bool_dtype, is_categorical_dtype, is_complex_dtype, is_datetime64_any_dtype, is_datetime64tz_dtype, is_datetimelike, is_extension_array_dtype, is_float_dtype, is_integer_dtype, is_interval_dtype, is_list_like, is_numeric_dtype, is_object_dtype, is_period_dtype, is_scalar, is_signed_integer_dtype, is_sparse, is_timedelta64_dtype, is_unsigned_integer_dtype, needs_i8_conversion
  from pandas.core.dtypes.generic import ABCIndex, ABCIndexClass, ABCSeries
  from pandas.core.dtypes.missing import isna, na_value_for_dtype
  from pandas.core import common
label_desc: Use image node_id 11 for calling a global function with example usage: value_counts(values, sort, ascending, normalize, bins, dropna) and returns: result