| import math |
| import random |
| from typing import List, Tuple |
|
|
| def calculate_factorial(n: int) -> int: |
| """Calculate factorial of a number recursively.""" |
| if n <= 1: |
| return 1 |
| return n * calculate_factorial(n - 1) |
|
|
| def fibonacci_sequence(n: int) -> List[int]: |
| """Generate fibonacci sequence up to n terms.""" |
| if n <= 0: |
| return [] |
| elif n == 1: |
| return [0] |
| elif n == 2: |
| return [0, 1] |
| |
| sequence = [0, 1] |
| for i in range(2, n): |
| sequence.append(sequence[i-1] + sequence[i-2]) |
| return sequence |
|
|
| def is_prime(num: int) -> bool: |
| """Check if a number is prime.""" |
| if num < 2: |
| return False |
| if num == 2: |
| return True |
| if num % 2 == 0: |
| return False |
| |
| for i in range(3, int(math.sqrt(num)) + 1, 2): |
| if num % i == 0: |
| return False |
| return True |
|
|
| def find_primes_in_range(start: int, end: int) -> List[int]: |
| """Find all prime numbers in a given range.""" |
| primes = [] |
| for num in range(start, end + 1): |
| if is_prime(num): |
| primes.append(num) |
| return primes |
|
|
| def calculate_statistics(numbers: List[float]) -> dict: |
| """Calculate basic statistics for a list of numbers.""" |
| if not numbers: |
| return {"error": "Empty list provided"} |
| |
| n = len(numbers) |
| mean = sum(numbers) / n |
| sorted_nums = sorted(numbers) |
| |
| |
| if n % 2 == 0: |
| median = (sorted_nums[n//2 - 1] + sorted_nums[n//2]) / 2 |
| else: |
| median = sorted_nums[n//2] |
| |
| |
| variance = sum((x - mean) ** 2 for x in numbers) / n |
| std_dev = math.sqrt(variance) |
| |
| return { |
| "count": n, |
| "mean": mean, |
| "median": median, |
| "min": min(numbers), |
| "max": max(numbers), |
| "variance": variance, |
| "std_deviation": std_dev |
| } |
|
|
| def monte_carlo_pi(iterations: int) -> float: |
| """Estimate Pi using Monte Carlo method.""" |
| inside_circle = 0 |
| |
| for _ in range(iterations): |
| x, y = random.random(), random.random() |
| if x*x + y*y <= 1: |
| inside_circle += 1 |
| |
| return 4 * inside_circle / iterations |
|
|
| def process_data_pipeline(data: List[int]) -> dict: |
| """Complex data processing pipeline demonstrating function calls.""" |
| |
| positive_data = [] |
| for x in data: |
| if x > 0: |
| positive_data.append(x) |
| |
| |
| primes_in_data = [] |
| for x in positive_data: |
| if is_prime(x): |
| primes_in_data.append(x) |
| |
| |
| positive_data_floats = [] |
| for x in positive_data: |
| positive_data_floats.append(float(x)) |
| stats = calculate_statistics(positive_data_floats) |
| |
| |
| max_val = max(positive_data) if positive_data else 0 |
| fib_count = min(max_val, 20) |
| fib_sequence = fibonacci_sequence(fib_count) |
| |
| |
| small_numbers = [] |
| for x in positive_data: |
| if x <= 10: |
| small_numbers.append(x) |
| factorials = {} |
| for x in small_numbers: |
| factorials[x] = calculate_factorial(x) |
| |
| return { |
| "original_count": len(data), |
| "positive_count": len(positive_data), |
| "primes_found": primes_in_data, |
| "statistics": stats, |
| "fibonacci_sequence": fib_sequence, |
| "factorials": factorials, |
| "pi_estimate": monte_carlo_pi(1000) |
| } |
|
|
| def main(): |
| """Main function demonstrating the pipeline.""" |
| sample_data = [1, 2, 3, 5, 8, 13, 21, -1, 0, 17, 19, 23] |
| result = process_data_pipeline(sample_data) |
| print(f"Processing complete: {len(result)} metrics calculated") |
| return result |
|
|
| if __name__ == "__main__": |
| main() |