Parse kernels from file.
(self, file: Path)
| 199 | return None |
| 200 | |
| 201 | def _parse_kernels(self, file: Path) -> List[Dict[str, Any]]: |
| 202 | """Parse kernels from file.""" |
| 203 | try: |
| 204 | with open(file, 'r', encoding='utf-8', errors='ignore') as f: |
| 205 | content = f.read() |
| 206 | |
| 207 | pattern = r'__global__\s+(?:void|[\w\<\>\*\&]+)\s+(\w+)\s*\((.*?)\)' |
| 208 | matches = re.finditer(pattern, content, re.MULTILINE) |
| 209 | |
| 210 | kernels = [] |
| 211 | for match in matches: |
| 212 | name = match.group(1) |
| 213 | params = match.group(2).strip() |
| 214 | line = content[:match.start()].count('\n') + 1 |
| 215 | |
| 216 | # Extract full kernel |
| 217 | start = match.end() |
| 218 | brace_count = 0 |
| 219 | end = start |
| 220 | in_kernel = False |
| 221 | |
| 222 | for i, char in enumerate(content[start:], start): |
| 223 | if char == '{': |
| 224 | brace_count += 1 |
| 225 | in_kernel = True |
| 226 | elif char == '}': |
| 227 | brace_count -= 1 |
| 228 | if in_kernel and brace_count == 0: |
| 229 | end = i + 1 |
| 230 | break |
| 231 | |
| 232 | code = content[match.start():end] |
| 233 | |
| 234 | kernels.append({ |
| 235 | 'name': name, |
| 236 | 'params': params, |
| 237 | 'line': line, |
| 238 | 'code': code |
| 239 | }) |
| 240 | |
| 241 | return kernels |
| 242 | except Exception as e: |
| 243 | return [] |
| 244 | |
| 245 | def _select_kernels(self, kernels: List[Dict]) -> List[Dict]: |
| 246 | """Select kernels with checkboxes.""" |
no test coverage detected