()
| 242 | |
| 243 | |
| 244 | def main() -> None: |
| 245 | args = parse_args() |
| 246 | |
| 247 | neo_callers_path = Path(args.neo_callers) |
| 248 | kuzu_callers_path = Path(args.kuzu_callers) |
| 249 | neo_deps_path = Path(args.neo_deps) |
| 250 | kuzu_deps_path = Path(args.kuzu_deps) |
| 251 | neo_content_path = Path(args.neo_content) |
| 252 | kuzu_content_path = Path(args.kuzu_content) |
| 253 | |
| 254 | for p in [ |
| 255 | neo_callers_path, |
| 256 | kuzu_callers_path, |
| 257 | neo_deps_path, |
| 258 | kuzu_deps_path, |
| 259 | neo_content_path, |
| 260 | kuzu_content_path, |
| 261 | ]: |
| 262 | ensure_exists(p) |
| 263 | |
| 264 | callers_cmp = compare_text(neo_callers_path, kuzu_callers_path, lowercase=args.lowercase) |
| 265 | content_cmp = compare_text(neo_content_path, kuzu_content_path, lowercase=args.lowercase) |
| 266 | |
| 267 | neo_deps = load_json(neo_deps_path) |
| 268 | kuzu_deps = load_json(kuzu_deps_path) |
| 269 | deps_cmp = compare_json_recursive(neo_deps, kuzu_deps) |
| 270 | |
| 271 | deps_entities_neo = extract_entities(neo_deps) |
| 272 | deps_entities_kuzu = extract_entities(kuzu_deps) |
| 273 | deps_similarity = jaccard_similarity(deps_entities_neo, deps_entities_kuzu) |
| 274 | |
| 275 | severity = classify_severity(callers_cmp, deps_cmp, content_cmp) |
| 276 | |
| 277 | print("=== CALLERS ===") |
| 278 | print(f"Neo4j unique: {callers_cmp['neo_unique']}") |
| 279 | print(f"Kuzu unique: {callers_cmp['kuzu_unique']}") |
| 280 | print(f"Similarity: {callers_cmp['similarity_percent']:.2f}%") |
| 281 | print_list("Missing in Kuzu", callers_cmp["missing_in_kuzu"], args.max_items) |
| 282 | print_list("Extra in Kuzu", callers_cmp["extra_in_kuzu"], args.max_items) |
| 283 | print() |
| 284 | |
| 285 | print("=== DEPS ===") |
| 286 | print(f"Similarity: {deps_similarity:.2f}%") |
| 287 | print_list("Missing entries in Kuzu", deps_cmp["missing_entries"], args.max_items) |
| 288 | print_list("Extra entries in Kuzu", deps_cmp["extra_entries"], args.max_items) |
| 289 | print_list("Value differences", deps_cmp["value_differences"], args.max_items) |
| 290 | print() |
| 291 | |
| 292 | print("=== CONTENT ===") |
| 293 | print(f"Neo4j unique: {content_cmp['neo_unique']}") |
| 294 | print(f"Kuzu unique: {content_cmp['kuzu_unique']}") |
| 295 | print(f"Similarity: {content_cmp['similarity_percent']:.2f}%") |
| 296 | print_list("Duplicate entries in Kuzu", content_cmp["duplicates_in_kuzu"], args.max_items) |
| 297 | print_list("Missing matches in Kuzu", content_cmp["missing_in_kuzu"], args.max_items) |
| 298 | print_list("Extra matches in Kuzu", content_cmp["extra_in_kuzu"], args.max_items) |
| 299 | print() |
| 300 | |
| 301 | print("=== SEVERITY SUMMARY ===") |
no test coverage detected