Это не работает правильно, потому что, как вы упомянули в ваших комментариях, вы обращаетесь с ryb, как если бы он был rgb при преобразовании его в hsl.
Когда вы запускаете приведенный выше код со значениями: красный = 255, зеленый = 0, синий = 0
Возвращает значения: красный = 255, желтый = 0, синий = 0
Принимая комплимент: красный = 0, желтый = 255, синий = 255
Если вы затем передадите это в функцию, предназначенную для преобразования rgb в hsl, она будет рассчитана так, как если бы вы говорили преобразовать: red = 0, green = 255, blue = 255
Какой голубой.
Вам нужно либо преобразовать обратно из ryb в rgb, либо получить функцию, предназначенную для преобразования ryb в hsl.