code: def complexity_entropy_shannon(signal):
      
       # Check if string
      if not isinstance(signal, str):
          signal = list(signal)
  
      signal = np.array(signal)
  
  
      # Create a frequency data
      data_set = list(set(signal))
      freq_list = []
      for entry in data_set:
          counter = 0.
          for i in signal:
              if i == entry:
                  counter += 1
          freq_list.append(float(counter) / len(signal))
  
      # Shannon entropy
      shannon_entropy = 0.0
      for freq in freq_list:
          shannon_entropy += freq * np.log2(freq)
      shannon_entropy = -shannon_entropy
  
      return(shannon_entropy)
docs: Computes the shannon entropy. Copied from the `pyEntropy <https://github.com/nikdon/pyEntropy>`_ repo by tjugo.
  
      Parameters
      ----------
      signal : list or array
          List or array of values.
  
  
      Returns
      ----------
      shannon_entropy : float
          The Shannon Entropy as float value.
  
  
      Example
      ----------
      >>> import neurokit as nk
      >>>
      >>> signal = np.sin(np.log(np.random.sample(666)))
      >>> shannon_entropy = nk.complexity_entropy_shannon(signal)
  
      Notes
      ----------
      *Details*
  
      - **shannon entropy**: Entropy is a measure of unpredictability of the state, or equivalently, of its average information content.
  
  
      *Authors*
  
      - tjugo (https://github.com/nikdon)
  
      *Dependencies*
  
      - numpy
  
      *See Also*
  
      - pyEntropy package: https://github.com/nikdon/pyEntropy
  
      References
      -----------
      - None