Tell me about your experience with List vs tuple, Pandas, Numpy, and multithreading vs concurrency.
Implement summarize_batches(batches, max_workers) to demonstrate these concepts in one practical task. batches is a non-empty list of non-empty numeric lists, and the function must return one summary dictionary per batch in the original order. Use tuples for immutable worker inputs, NumPy and Pandas for calculations, and a thread-based concurrency approach.
batches is list[list[int | float]]; max_workers is an integer. Return list[dict], where each dictionary contains count, mean, and median.
def summarize_batches(batches, max_workers):