Get diversity score for a program using cache and reference set Args: program: The program to calculate diversity for Returns: Diversity score (cached or newly computed)
(self, program: Program)
| 2071 | return diversity |
| 2072 | |
| 2073 | def _get_cached_diversity(self, program: Program) -> float: |
| 2074 | """ |
| 2075 | Get diversity score for a program using cache and reference set |
| 2076 | |
| 2077 | Args: |
| 2078 | program: The program to calculate diversity for |
| 2079 | |
| 2080 | Returns: |
| 2081 | Diversity score (cached or newly computed) |
| 2082 | """ |
| 2083 | code_hash = hash(program.code) |
| 2084 | |
| 2085 | # Check cache first |
| 2086 | if code_hash in self.diversity_cache: |
| 2087 | return self.diversity_cache[code_hash]["value"] |
| 2088 | |
| 2089 | # Update reference set if needed |
| 2090 | if ( |
| 2091 | not self.diversity_reference_set |
| 2092 | or len(self.diversity_reference_set) < self.diversity_reference_size |
| 2093 | ): |
| 2094 | self._update_diversity_reference_set() |
| 2095 | |
| 2096 | # Compute diversity against reference set |
| 2097 | diversity_scores = [] |
| 2098 | for ref_code in self.diversity_reference_set: |
| 2099 | if ref_code != program.code: # Don't compare with itself |
| 2100 | diversity_scores.append(self._fast_code_diversity(program.code, ref_code)) |
| 2101 | |
| 2102 | diversity = ( |
| 2103 | sum(diversity_scores) / max(1, len(diversity_scores)) if diversity_scores else 0.0 |
| 2104 | ) |
| 2105 | |
| 2106 | # Cache the result with LRU eviction |
| 2107 | self._cache_diversity_value(code_hash, diversity) |
| 2108 | |
| 2109 | return diversity |
| 2110 | |
| 2111 | def _update_diversity_reference_set(self) -> None: |
| 2112 | """Update the reference set for diversity calculation""" |
no test coverage detected