docs: def raw_to_phy(sensor, device, raw_signal, resolution, option):
      """
      -----
      Brief
      -----
      Function for converting raw units to physical units.
  
      -----------
      Description
      -----------
      Each sensor and device has a specific transfer function that models the inputs to outputs. This transfer function
      is, thus, used in order to convert the raw units that are measured to physical units that originated the data.
  
      This functions makes the conversion of raw units to physical units, using the information of sensor and device.
  
      ----------
      Parameters
      ----------
      sensor : str
          Sensor label:
          - "ECG"
          - "EMG"
          - "TEMP"
          - "BVP"
          - "SpO2.HEAD"
          - "SpO2.FING"
          - "SpO2.ARM"
  
      device : str
          Plux device label:
          - "bioplux"
          - "bioplux_exp"
          - "biosignalsplux"
          - "rachimeter"
          - "channeller"
          - "swifter"
          - "ddme_openbanplux"
  
      raw_signal : list
          Raw signal samples.
  
      resolution : int
          Resolution selected during acquisition.
  
      option : str (optional)
          Output units (only available in certain sensors):
          - "mV"
          - "V"
          - "C" (Celsius)
          - "K" (Kelvin)
          - "Ohm"
          - "A"
          - "uA"
          (When is not applicable a warning message is raised).
  
      Returns
      -------
      out : list
          Signal in the new scale.
      """
      raw_signal = numpy.array(raw_signal)
  
      # Check if resolution has the correct data format.
      if not isinstance(resolution, int):
          raise RuntimeError("The specified resolution needs to be an integer.")
  
      out = None
      if sensor == "TEMP":
          vcc = 3.0
          available_dev_1 = ["bioplux", "bioplux_exp", "biosignalsplux", "rachimeter", "channeller",
                             "swifter", "ddme_openbanplux"]
          available_dev_2 = ["bitalino", "bitalino_rev", "bitalino_riot"]
          if option == "Ohm":
              if device in available_dev_1:
                  out = (1e4 * raw_signal) / (2**resolution - raw_signal)
              else:
                  raise RuntimeError("The output specified unit does not have a defined transfer "
                                     "function for the used device.")
          elif option == "K":
              a_0 = 1.12764514e-3
              a_1 = 2.34282709e-4
              a_2 = 8.77303013e-8
              out = 1 / (a_0 + a_1 * numpy.log(raw_to_phy(sensor, device, list(raw_signal),
                                                          resolution, option="Ohm")) + a_2 *
                         ((numpy.log(raw_to_phy(sensor, device, list(raw_signal), resolution,
                                                option="Ohm"))) ** 3))
          elif option == "C":
              if device in available_dev_1:
                  out = numpy.array(raw_to_phy(sensor, device, list(raw_signal), resolution,
                                               option="K")) - 273.15
              elif device in available_dev_2:
                  out = ((raw_signal / (2 ** resolution)) * vcc - 0.5) * 100
              else:
                  raise RuntimeError("The output specified unit does not have a defined transfer "
                                     "function for the used device.")
          else:
              raise RuntimeError("The selected output unit is invalid for the sensor under analysis.")
  
      elif sensor == "EMG":
          available_dev_1 = ["bioplux", "bioplux_exp", "biosignalsplux", "rachimeter", "channeller",
                             "swifter", "ddme_openbanplux"]
          available_dev_2 = ["bitalino"]
          available_dev_3 = ["bitalino_rev", "bitalino_riot"]
          if option == "mV":
              vcc = 3.0
              if device in available_dev_1:
                  offset = 0.5
                  gain = 1
              elif device in available_dev_2:
                  offset = 0.5
                  gain = 1.008
              elif device in available_dev_3:
                  offset = 0.5
                  gain = 1.009
              else:
                  raise RuntimeError("The output specified unit does not have a defined transfer "
                                     "function for the used device.")
              out = (raw_signal * vcc / (2 ** resolution) - vcc * offset) / gain
  
          elif option == "V":
              out = numpy.array(raw_to_phy(sensor, device, list(raw_signal), resolution,
                                           option="mV")) / 1000
  
      elif sensor == "ECG":
          available_dev_1 = ["bioplux", "bioplux_exp", "biosignalsplux", "rachimeter", "channeller",
                             "swifter", "ddme_openbanplux"]
          available_dev_2 = ["bitalino", "bitalino_rev", "bitalino_riot"]
          if option == "mV":
              vcc = 3.0
              if device in available_dev_1:
                  offset = 0.5
                  gain = 1.019
              elif device in available_dev_2:
                  offset = 0.5
                  gain = 1.1
              else:
                  raise RuntimeError("The output specified unit does not have a defined transfer "
                                     "function for the used device.")
              out = (raw_signal * vcc / (2 ** resolution) - vcc * offset) / gain
  
          elif option == "V":
              out = numpy.array(raw_to_phy(sensor, device, list(raw_signal), resolution,
                                           option="mV")) / 1000
  
      elif sensor == "BVP":
          available_dev_1 = ["bioplux", "bioplux_exp", "biosignalsplux", "rachimeter", "channeller",
                             "swifter", "ddme_openbanplux"]
          if option == "uA":
              vcc = 3.0
              if device in available_dev_1:
                  offset = 0
                  gain = 0.190060606
              else:
                  raise RuntimeError("The output specified unit does not have a defined transfer "
                                     "function for the used device.")
              out = (raw_signal * vcc / (2 ** resolution) - vcc * offset) / gain
  
          elif option == "A":
              out = numpy.array(raw_to_phy(sensor, device, list(raw_signal), resolution,
                                           option="uA")) * 1e-6
  
      elif sensor in ["SpO2.ARM", "SpO2.HEAD", "SpO2.FING"]:
          available_dev_1 = ["channeller", "biosignalsplux", "swifter"]
  
          scale_factor = None
          if "ARM" in sensor or "FING" in sensor:
              scale_factor = 1.2
          elif "HEAD" in sensor:
              scale_factor = 0.15
  
          if option == "uA":
              if device in available_dev_1:
                  out = scale_factor * (raw_signal / (2 ** resolution))
              else:
                  raise RuntimeError("The output specified unit does not have a defined transfer "
                                     "function for the used device.")
  
          elif option == "A":
              out = numpy.array(raw_to_phy(sensor, device, list(raw_signal), resolution,
                                           option="uA")) * 1e-6
  
      elif sensor == "ACC":
          available_dev_1 = ["bioplux", "bioplux_exp", "biosignalsplux", "rachimeter", "channeller",
                             "swifter", "ddme_openbanplux"]
          if option == "g":
              if device in available_dev_1:
                  Cm = 28000.0
                  CM = 38000.0
              else:
                  raise RuntimeError("The output specified unit does not have a defined transfer "
                                     "function for the used device.")
  
              out = 2.0*((2**(16.0 - resolution) * raw_signal - Cm) / (CM - Cm)) - 1.0
  
      else:
          raise RuntimeError("The specified sensor is not valid or for now is not available for unit "
                             "conversion.")
  
      return out