Coalition's risk-processing pipeline receives an array of integer event scores. Find the length of the longest contiguous subarray in which every value is a qualifying prime.
A value qualifies when it is non-negative, prime, and either even or happy. A happy number eventually reaches 1 when repeatedly replaced by the sum of the squares of its decimal digits. Values that enter the cycle 4, 16, 37, 58, 89, 145, 42, 20 are not happy.
Because a qualifying run must contain only valid values, scan the array and track the current run length, resetting it whenever a value fails the predicate. The input values can be as large as unsigned 64-bit integers, so use deterministic Miller-Rabin primality testing rather than trial division through the square root.
Implement longest_happy_prime_run(nums), where nums is a list of integers. Return an integer representing the maximum length of a contiguous subarray whose values all qualify. Return 0 when no value qualifies.
def longest_happy_prime_run(nums):