From c6e5981ddd785829de6fc2019a8016b50b7732a3 Mon Sep 17 00:00:00 2001 From: Pringled Date: Mon, 18 May 2026 12:01:11 +0200 Subject: [PATCH 1/8] Fix --- .../results/semble-hybrid-1ef37271eb84.json | 1396 +++++++++++++++++ src/semble/index/file_walker.py | 21 +- tests/test_file_walker.py | 30 +- 3 files changed, 1417 insertions(+), 30 deletions(-) create mode 100644 benchmarks/results/semble-hybrid-1ef37271eb84.json diff --git a/benchmarks/results/semble-hybrid-1ef37271eb84.json b/benchmarks/results/semble-hybrid-1ef37271eb84.json new file mode 100644 index 0000000..f7b0505 --- /dev/null +++ b/benchmarks/results/semble-hybrid-1ef37271eb84.json @@ -0,0 +1,1396 @@ +{ + "tool": "semble-hybrid", + "model": "minishlab/potion-code-16M", + "summary": { + "ndcg10": 0.8529, + "tokens": 3196.0, + "p50_ms": 1.156, + "p90_ms": 4.811, + "p95_ms": 5.389, + "p99_ms": 6.275, + "index_ms": 483.3, + "by_category": { + "architecture": 0.802, + "semantic": 0.8447, + "symbol": 0.9594 + } + }, + "by_language": { + "bash": { + "repos": 3, + "tokens": 2828.0, + "ndcg10": 0.8443, + "p50_ms": 0.517, + "p90_ms": 0.578, + "p95_ms": 0.61, + "p99_ms": 0.622, + "index_ms": 135.0 + }, + "c": { + "repos": 3, + "tokens": 3163.0, + "ndcg10": 0.7421, + "p50_ms": 0.728, + "p90_ms": 0.82, + "p95_ms": 0.829, + "p99_ms": 0.886, + "index_ms": 1467.7 + }, + "cpp": { + "repos": 3, + "tokens": 2991.0, + "ndcg10": 0.895, + "p50_ms": 0.762, + "p90_ms": 8.017, + "p95_ms": 9.19, + "p99_ms": 9.698, + "index_ms": 1474.5 + }, + "csharp": { + "repos": 3, + "tokens": 2654.0, + "ndcg10": 0.8823, + "p50_ms": 4.986, + "p90_ms": 6.4, + "p95_ms": 7.286, + "p99_ms": 8.393, + "index_ms": 436.2 + }, + "elixir": { + "repos": 3, + "tokens": 5811.0, + "ndcg10": 0.8951, + "p50_ms": 0.508, + "p90_ms": 4.634, + "p95_ms": 5.023, + "p99_ms": 5.434, + "index_ms": 196.0 + }, + "go": { + "repos": 3, + "tokens": 3673.0, + "ndcg10": 0.8907, + "p50_ms": 0.551, + "p90_ms": 3.889, + "p95_ms": 4.207, + "p99_ms": 5.422, + "index_ms": 153.1 + }, + "haskell": { + "repos": 3, + "tokens": 3147.0, + "ndcg10": 0.745, + "p50_ms": 1.894, + "p90_ms": 7.13, + "p95_ms": 8.291, + "p99_ms": 10.316, + "index_ms": 501.4 + }, + "java": { + "repos": 3, + "tokens": 3186.0, + "ndcg10": 0.8534, + "p50_ms": 0.946, + "p90_ms": 9.775, + "p95_ms": 11.708, + "p99_ms": 13.185, + "index_ms": 949.3 + }, + "javascript": { + "repos": 3, + "tokens": 2825.0, + "ndcg10": 0.8977, + "p50_ms": 0.427, + "p90_ms": 1.685, + "p95_ms": 1.759, + "p99_ms": 2.693, + "index_ms": 34.8 + }, + "kotlin": { + "repos": 3, + "tokens": 4085.0, + "ndcg10": 0.8197, + "p50_ms": 1.318, + "p90_ms": 6.02, + "p95_ms": 6.349, + "p99_ms": 7.093, + "index_ms": 231.9 + }, + "lua": { + "repos": 3, + "tokens": 3202.0, + "ndcg10": 0.8368, + "p50_ms": 0.542, + "p90_ms": 0.589, + "p95_ms": 0.665, + "p99_ms": 1.496, + "index_ms": 348.2 + }, + "php": { + "repos": 3, + "tokens": 2713.0, + "ndcg10": 0.8611, + "p50_ms": 0.77, + "p90_ms": 6.084, + "p95_ms": 6.121, + "p99_ms": 6.237, + "index_ms": 704.9 + }, + "python": { + "repos": 9, + "tokens": 3075.0, + "ndcg10": 0.8642, + "p50_ms": 0.466, + "p90_ms": 3.502, + "p95_ms": 3.828, + "p99_ms": 4.288, + "index_ms": 146.5 + }, + "ruby": { + "repos": 3, + "tokens": 2685.0, + "ndcg10": 0.9059, + "p50_ms": 0.514, + "p90_ms": 4.334, + "p95_ms": 5.31, + "p99_ms": 5.666, + "index_ms": 105.3 + }, + "rust": { + "repos": 3, + "tokens": 3248.0, + "ndcg10": 0.8553, + "p50_ms": 0.77, + "p90_ms": 5.578, + "p95_ms": 6.256, + "p99_ms": 7.113, + "index_ms": 493.4 + }, + "scala": { + "repos": 3, + "tokens": 3000.0, + "ndcg10": 0.9091, + "p50_ms": 2.249, + "p90_ms": 5.153, + "p95_ms": 6.363, + "p99_ms": 7.345, + "index_ms": 378.7 + }, + "swift": { + "repos": 3, + "tokens": 2946.0, + "ndcg10": 0.8599, + "p50_ms": 1.332, + "p90_ms": 4.855, + "p95_ms": 5.553, + "p99_ms": 6.351, + "index_ms": 184.2 + }, + "typescript": { + "repos": 3, + "tokens": 2868.0, + "ndcg10": 0.7128, + "p50_ms": 3.191, + "p90_ms": 5.513, + "p95_ms": 5.806, + "p99_ms": 7.939, + "index_ms": 460.4 + }, + "zig": { + "repos": 3, + "tokens": 2857.0, + "ndcg10": 0.9113, + "p50_ms": 0.866, + "p90_ms": 9.466, + "p95_ms": 10.35, + "p99_ms": 13.023, + "index_ms": 1454.6 + } + }, + "repos": [ + { + "repo": "abseil-cpp", + "language": "cpp", + "mode": "hybrid", + "chunks": 8604, + "tokens": 2987, + "ndcg5": 0.9002968226739917, + "ndcg10": 0.9099681428548552, + "p50_ms": 1.2746875290758908, + "p90_ms": 18.870687839807943, + "p95_ms": 19.314839542494155, + "p99_ms": 20.57400071818847, + "index_ms": 3788.858167012222, + "by_category": { + "architecture": 1.0, + "semantic": 0.9132908571398067, + "symbol": 0.8333333333333334 + } + }, + { + "repo": "aeson", + "language": "haskell", + "mode": "hybrid", + "chunks": 393, + "tokens": 3731, + "ndcg5": 0.7420624189796883, + "ndcg10": 0.7619528590399762, + "p50_ms": 4.345353983808309, + "p90_ms": 8.78784200176597, + "p95_ms": 11.002091973205102, + "p99_ms": 16.898551174090233, + "index_ms": 172.85270802676678, + "by_category": { + "architecture": 0.5896918237758785, + "semantic": 0.8193732041280086 + } + }, + { + "repo": "aiohttp", + "language": "python", + "mode": "hybrid", + "chunks": 746, + "tokens": 3007, + "ndcg5": 0.8208189387032997, + "ndcg10": 0.857392320967274, + "p50_ms": 0.5606249906122684, + "p90_ms": 4.290167009457946, + "p95_ms": 4.86554199596867, + "p99_ms": 5.764141201507301, + "index_ms": 242.50729096820578, + "by_category": { + "architecture": 0.888343919545452, + "semantic": 0.7540923670549543, + "symbol": 1.0 + } + }, + { + "repo": "alamofire", + "language": "swift", + "mode": "hybrid", + "chunks": 655, + "tokens": 3131, + "ndcg5": 0.9635059068184884, + "ndcg10": 0.9635059068184884, + "p50_ms": 0.592937518376857, + "p90_ms": 4.483936890028418, + "p95_ms": 4.885431248112583, + "p99_ms": 5.889486262458375, + "index_ms": 234.74458401324227, + "by_category": { + "architecture": 0.9732402630493958, + "semantic": 0.94094521338378, + "symbol": 1.0 + } + }, + { + "repo": "axios", + "language": "javascript", + "mode": "hybrid", + "chunks": 168, + "tokens": 2420, + "ndcg5": 0.8587075709912144, + "ndcg10": 0.8696279428321226, + "p50_ms": 0.5746875249315053, + "p90_ms": 2.5875127932522446, + "p95_ms": 2.5953999866032973, + "p99_ms": 2.6850800059037283, + "index_ms": 59.68175001908094, + "by_category": { + "architecture": 0.6030687082608802, + "semantic": 0.9308017017042276, + "symbol": 1.0 + } + }, + { + "repo": "axum", + "language": "rust", + "mode": "hybrid", + "chunks": 515, + "tokens": 3235, + "ndcg5": 0.7517782560805999, + "ndcg10": 0.7826029997030854, + "p50_ms": 0.5967084725853056, + "p90_ms": 4.248862492386252, + "p95_ms": 4.458437455468813, + "p99_ms": 6.209287515957837, + "index_ms": 181.65166699327528, + "by_category": { + "architecture": 0.663762511293996, + "semantic": 0.8348152134004999, + "symbol": 0.7718216255952429 + } + }, + { + "repo": "bash-it", + "language": "bash", + "mode": "hybrid", + "chunks": 735, + "tokens": 2426, + "ndcg5": 0.643538201019909, + "ndcg10": 0.6852833164833028, + "p50_ms": 0.7782710017636418, + "p90_ms": 0.8988163259346039, + "p95_ms": 0.9753389342222363, + "p99_ms": 0.9779678110498935, + "index_ms": 299.61779102450237, + "by_category": { + "architecture": 1.0, + "semantic": 0.631798727688293, + "symbol": 0.6984565739436487 + } + }, + { + "repo": "bats-core", + "language": "bash", + "mode": "hybrid", + "chunks": 48, + "tokens": 2986, + "ndcg5": 0.8477197786179612, + "ndcg10": 0.8477197786179612, + "p50_ms": 0.3793749783653766, + "p90_ms": 0.404746166896075, + "p95_ms": 0.40851520316209644, + "p99_ms": 0.43786943133454764, + "index_ms": 16.550500004086643, + "by_category": { + "architecture": 0.6703622950309012, + "semantic": 0.9432199620879166 + } + }, + { + "repo": "cats", + "language": "scala", + "mode": "hybrid", + "chunks": 1262, + "tokens": 2797, + "ndcg5": 0.9113147192765458, + "ndcg10": 0.9113147192765458, + "p50_ms": 2.2390420199371874, + "p90_ms": 5.898645322304223, + "p95_ms": 8.303690218599513, + "p99_ms": 8.919004440540446, + "index_ms": 615.2757909731008, + "by_category": { + "architecture": 0.8065735963827292, + "semantic": 0.9, + "symbol": 1.0 + } + }, + { + "repo": "chi", + "language": "go", + "mode": "hybrid", + "chunks": 263, + "tokens": 2603, + "ndcg5": 0.8205558097806902, + "ndcg10": 0.853282094626217, + "p50_ms": 0.6015210237819701, + "p90_ms": 2.915516699431464, + "p95_ms": 3.020809791632928, + "p99_ms": 3.071328357909806, + "index_ms": 97.81854198081419, + "by_category": { + "architecture": 0.6828696993548315, + "semantic": 0.9589921948412731, + "symbol": 0.8769765845238192 + } + }, + { + "repo": "circe", + "language": "scala", + "mode": "hybrid", + "chunks": 197, + "tokens": 3207, + "ndcg5": 0.8591297799361982, + "ndcg10": 0.8591297799361982, + "p50_ms": 0.5369999562390149, + "p90_ms": 4.279075376689433, + "p95_ms": 5.2525589242577535, + "p99_ms": 5.9174782037734985, + "index_ms": 93.85795798152685, + "by_category": { + "architecture": 0.7261859507142916, + "semantic": 0.8811396422923916, + "symbol": 1.0 + } + }, + { + "repo": "click", + "language": "python", + "mode": "hybrid", + "chunks": 315, + "tokens": 3388, + "ndcg5": 1.0, + "ndcg10": 1.0, + "p50_ms": 0.40458349394612014, + "p90_ms": 3.2604664098471403, + "p95_ms": 3.3521981647936627, + "p99_ms": 3.3602724078809842, + "index_ms": 98.5586250317283, + "by_category": { + "architecture": 1.0, + "semantic": 1.0, + "symbol": 1.0 + } + }, + { + "repo": "cobra", + "language": "go", + "mode": "hybrid", + "chunks": 398, + "tokens": 5293, + "ndcg5": 0.9590790148145552, + "ndcg10": 0.9590790148145552, + "p50_ms": 0.5218964943196625, + "p90_ms": 5.0319077097810805, + "p95_ms": 5.380845497711565, + "p99_ms": 8.924535496043967, + "index_ms": 138.25779099715874, + "by_category": { + "architecture": 1.0, + "semantic": 0.9255982087537366, + "symbol": 1.0 + } + }, + { + "repo": "commons-lang", + "language": "java", + "mode": "hybrid", + "chunks": 3176, + "tokens": 3252, + "ndcg5": 0.8696123574829959, + "ndcg10": 0.8958857274902101, + "p50_ms": 0.7442089845426381, + "p90_ms": 11.881292040925473, + "p95_ms": 16.55699999537319, + "p99_ms": 17.091566394083202, + "index_ms": 1011.1169579904526, + "by_category": { + "architecture": 0.7216293209723186, + "semantic": 0.9034794510269613, + "symbol": 1.0 + } + }, + { + "repo": "curl", + "language": "c", + "mode": "hybrid", + "chunks": 4485, + "tokens": 2977, + "ndcg5": 0.6059541823122645, + "ndcg10": 0.7042297304400422, + "p50_ms": 0.7807915098965168, + "p90_ms": 0.8694411197211593, + "p95_ms": 0.8753961708862336, + "p99_ms": 0.9453792555723338, + "index_ms": 1471.200708008837, + "by_category": { + "architecture": 0.6509413349725708, + "semantic": 0.7478293267316096 + } + }, + { + "repo": "dapper", + "language": "csharp", + "mode": "hybrid", + "chunks": 422, + "tokens": 2497, + "ndcg5": 0.8574356157188727, + "ndcg10": 0.8741022823855396, + "p50_ms": 3.2964999845717102, + "p90_ms": 4.690729797584939, + "p95_ms": 6.36416074994486, + "p99_ms": 8.216565721086223, + "index_ms": 175.34208303550258, + "by_category": { + "architecture": 0.7217132018086354, + "semantic": 0.8919379108058652, + "symbol": 1.0 + } + }, + { + "repo": "ecto", + "language": "elixir", + "mode": "hybrid", + "chunks": 764, + "tokens": 5419, + "ndcg5": 0.8890941716165459, + "ndcg10": 0.9078419183064419, + "p50_ms": 0.4859999753534794, + "p90_ms": 6.374892208259553, + "p95_ms": 6.677291693631559, + "p99_ms": 6.959291941020638, + "index_ms": 284.1236660024151, + "by_category": { + "architecture": 1.0, + "semantic": 0.8936974380193028, + "symbol": 0.8769765845238192 + } + }, + { + "repo": "exposed", + "language": "kotlin", + "mode": "hybrid", + "chunks": 748, + "tokens": 2910, + "ndcg5": 0.6721248511673115, + "ndcg10": 0.7154638415285817, + "p50_ms": 0.8599789580330253, + "p90_ms": 5.716424377169461, + "p95_ms": 6.22687915165443, + "p99_ms": 6.28964222560171, + "index_ms": 256.928666960448, + "by_category": { + "architecture": 0.6547543623015969, + "semantic": 0.6675009816904887, + "symbol": 1.0 + } + }, + { + "repo": "express", + "language": "javascript", + "mode": "hybrid", + "chunks": 52, + "tokens": 3222, + "ndcg5": 0.8828459250958742, + "ndcg10": 0.9097317116419653, + "p50_ms": 0.303854001685977, + "p90_ms": 0.33322080271318555, + "p95_ms": 0.43520597100723674, + "p99_ms": 1.90387481881771, + "index_ms": 17.993958026636392, + "by_category": { + "architecture": 0.8135191761199004, + "semantic": 0.95, + "symbol": 1.0 + } + }, + { + "repo": "fastapi", + "language": "python", + "mode": "hybrid", + "chunks": 602, + "tokens": 2771, + "ndcg5": 0.7720650033558547, + "ndcg10": 0.8110148544315884, + "p50_ms": 0.48660399625077844, + "p90_ms": 3.658462798921392, + "p95_ms": 4.097402046318166, + "p99_ms": 4.453113199560902, + "index_ms": 187.48650001361966, + "by_category": { + "architecture": 0.752227327035497, + "semantic": 0.744338224922911, + "symbol": 1.0 + } + }, + { + "repo": "flask", + "language": "python", + "mode": "hybrid", + "chunks": 295, + "tokens": 3091, + "ndcg5": 0.8557211782963206, + "ndcg10": 0.8645104971905857, + "p50_ms": 0.40208303835242987, + "p90_ms": 2.8060830081813037, + "p95_ms": 3.013957990333438, + "p99_ms": 3.5790587775409226, + "index_ms": 87.27650000946596, + "by_category": { + "architecture": 0.844478447513369, + "semantic": 0.875474919603933, + "symbol": 0.8710490642551528 + } + }, + { + "repo": "fmtlib", + "language": "cpp", + "mode": "hybrid", + "chunks": 483, + "tokens": 2937, + "ndcg5": 0.9346268032608155, + "ndcg10": 0.9346268032608155, + "p50_ms": 0.42558350833132863, + "p90_ms": 0.8071082644164604, + "p95_ms": 3.4780392452375963, + "p99_ms": 3.5514742514351383, + "index_ms": 329.65800003148615, + "by_category": { + "architecture": 0.8769765845238192, + "semantic": 0.9329718794032036, + "symbol": 1.0 + } + }, + { + "repo": "gin", + "language": "go", + "mode": "hybrid", + "chunks": 576, + "tokens": 3122, + "ndcg5": 0.8596409794466148, + "ndcg10": 0.8596409794466148, + "p50_ms": 0.5282500060275197, + "p90_ms": 3.719820821424947, + "p95_ms": 4.218808049336076, + "p99_ms": 4.2697287909686565, + "index_ms": 223.32900000037625, + "by_category": { + "architecture": 0.9696354815039873, + "semantic": 0.7613642454462158, + "symbol": 1.0 + } + }, + { + "repo": "gson", + "language": "java", + "mode": "hybrid", + "chunks": 1472, + "tokens": 3451, + "ndcg5": 0.8981274659106212, + "ndcg10": 0.8981274659106212, + "p50_ms": 1.020479016005993, + "p90_ms": 6.899687193799765, + "p95_ms": 7.481064557214269, + "p99_ms": 9.857046539545987, + "index_ms": 489.2370830057189, + "by_category": { + "architecture": 0.6751724527673773, + "semantic": 0.9261859507142916, + "symbol": 1.0 + } + }, + { + "repo": "guzzle", + "language": "php", + "mode": "hybrid", + "chunks": 208, + "tokens": 2789, + "ndcg5": 0.932845925095874, + "ndcg10": 0.932845925095874, + "p50_ms": 0.5426875140983611, + "p90_ms": 3.073246107669547, + "p95_ms": 3.145808036788367, + "p99_ms": 3.417128819855861, + "index_ms": 69.19812498381361, + "by_category": { + "architecture": 1.0, + "semantic": 0.8966860386090373, + "symbol": 1.0 + } + }, + { + "repo": "http4s", + "language": "scala", + "mode": "hybrid", + "chunks": 974, + "tokens": 2995, + "ndcg5": 0.9569537411240482, + "ndcg10": 0.9569537411240482, + "p50_ms": 3.9706045063212514, + "p90_ms": 5.281511868815869, + "p95_ms": 5.532581216539258, + "p99_ms": 7.198216225369831, + "index_ms": 426.96349998004735, + "by_category": { + "architecture": 0.9590717717793499, + "semantic": 0.9472756790816368, + "symbol": 1.0 + } + }, + { + "repo": "httpx", + "language": "python", + "mode": "hybrid", + "chunks": 248, + "tokens": 3071, + "ndcg5": 0.8558604034079137, + "ndcg10": 0.8655928985311748, + "p50_ms": 0.4295419785194099, + "p90_ms": 2.715375041589141, + "p95_ms": 3.066917008254677, + "p99_ms": 3.2679834053851664, + "index_ms": 76.43537502735853, + "by_category": { + "architecture": 0.804418536224494, + "semantic": 0.8385023461759126, + "symbol": 1.0 + } + }, + { + "repo": "jackson-databind", + "language": "java", + "mode": "hybrid", + "chunks": 4635, + "tokens": 2854, + "ndcg5": 0.7271911875419426, + "ndcg10": 0.7661410386176761, + "p50_ms": 1.071958482498303, + "p90_ms": 10.54547920357436, + "p95_ms": 11.086256580892952, + "p99_ms": 12.605718544218687, + "index_ms": 1347.555167041719, + "by_category": { + "architecture": 0.6226294385530917, + "semantic": 0.708679883333827, + "symbol": 0.9719257715972703 + } + }, + { + "repo": "kotlinx-coroutines", + "language": "kotlin", + "mode": "hybrid", + "chunks": 891, + "tokens": 5691, + "ndcg5": 0.9258891280402999, + "ndcg10": 0.9258891280402999, + "p50_ms": 2.256354026030749, + "p90_ms": 7.340583915356547, + "p95_ms": 7.7377267531119305, + "p99_ms": 9.73871174966916, + "index_ms": 300.549375009723, + "by_category": { + "architecture": 0.8333333333333334, + "semantic": 0.9298416114861429, + "symbol": 1.0 + } + }, + { + "repo": "ktor", + "language": "kotlin", + "mode": "hybrid", + "chunks": 425, + "tokens": 3653, + "ndcg5": 0.7900720626804801, + "ndcg10": 0.817659101188055, + "p50_ms": 0.8371044823434204, + "p90_ms": 5.0042045302689075, + "p95_ms": 5.0830273976316676, + "p99_ms": 5.250005490961485, + "index_ms": 138.27158301137388, + "by_category": { + "architecture": 0.8100730714340207, + "semantic": 0.668952931960422, + "symbol": 1.0 + } + }, + { + "repo": "laravel-framework", + "language": "php", + "mode": "hybrid", + "chunks": 6257, + "tokens": 2712, + "ndcg5": 0.7270004576052422, + "ndcg10": 0.767053986066706, + "p50_ms": 1.0372915130574256, + "p90_ms": 11.667175003094599, + "p95_ms": 11.682587495306507, + "p99_ms": 11.721917485119775, + "index_ms": 1917.2291250433773, + "by_category": { + "architecture": 0.7179954576115433, + "semantic": 0.7426868627202068, + "symbol": 0.9077324383928644 + } + }, + { + "repo": "lazy.nvim", + "language": "lua", + "mode": "hybrid", + "chunks": 302, + "tokens": 3068, + "ndcg5": 0.6946394630357187, + "ndcg10": 0.7263576294855845, + "p50_ms": 0.5528954789042473, + "p90_ms": 0.5808047775644809, + "p95_ms": 0.6075565703213216, + "p99_ms": 0.6761777494102715, + "index_ms": 109.14766701171175, + "by_category": { + "architecture": 0.8459052436406065, + "semantic": 0.6285459451769299 + } + }, + { + "repo": "libuv", + "language": "c", + "mode": "hybrid", + "chunks": 1361, + "tokens": 3079, + "ndcg5": 0.5424282114366414, + "ndcg10": 0.6060468408375095, + "p50_ms": 0.5730625125579536, + "p90_ms": 0.6877204752527177, + "p95_ms": 0.6922017520992086, + "p99_ms": 0.7586067490046843, + "index_ms": 430.87920802645385, + "by_category": { + "architecture": 0.43067655807339306, + "semantic": 0.5939033477042664, + "symbol": 1.0 + } + }, + { + "repo": "messagepack-csharp", + "language": "csharp", + "mode": "hybrid", + "chunks": 1145, + "tokens": 2653, + "ndcg5": 0.874427588278496, + "ndcg10": 0.8920487559320669, + "p50_ms": 4.126771003939211, + "p90_ms": 5.454899667529389, + "p95_ms": 5.68265835463535, + "p99_ms": 5.715465256362222, + "index_ms": 419.19729101937264, + "by_category": { + "architecture": 0.6736862264229985, + "semantic": 0.9051366903277052, + "symbol": 1.0 + } + }, + { + "repo": "mini.nvim", + "language": "lua", + "mode": "hybrid", + "chunks": 2172, + "tokens": 3478, + "ndcg5": 0.9815464876785729, + "ndcg10": 0.9815464876785729, + "p50_ms": 0.5558955017477274, + "p90_ms": 0.5967079952824861, + "p95_ms": 0.6162309844512492, + "p99_ms": 0.6222797988448292, + "index_ms": 760.9028329607099, + "by_category": { + "architecture": 1.0, + "semantic": 0.9769331095982161 + } + }, + { + "repo": "model2vec", + "language": "python", + "mode": "hybrid", + "chunks": 108, + "tokens": 3196, + "ndcg5": 0.6512217603364261, + "ndcg10": 0.6723612520567586, + "p50_ms": 0.4304999893065542, + "p90_ms": 2.391620195703582, + "p95_ms": 2.846868394408375, + "p99_ms": 2.915806493256241, + "index_ms": 39.54004205297679, + "by_category": { + "architecture": 0.6144216780370446, + "semantic": 0.6646273294875858, + "symbol": 0.8333333333333334 + } + }, + { + "repo": "monolog", + "language": "php", + "mode": "hybrid", + "chunks": 421, + "tokens": 2639, + "ndcg5": 0.8745181254051755, + "ndcg10": 0.8833800897443777, + "p50_ms": 0.7286665204446763, + "p90_ms": 3.51297048619017, + "p95_ms": 3.5356579610379413, + "p99_ms": 3.5709980089450255, + "index_ms": 128.2083750120364, + "by_category": { + "architecture": 0.6108909204244194, + "semantic": 0.9613147192765459, + "symbol": 1.0 + } + }, + { + "repo": "newtonsoft-json", + "language": "csharp", + "mode": "hybrid", + "chunks": 2217, + "tokens": 2812, + "ndcg5": 0.8806128427182248, + "ndcg10": 0.8806128427182248, + "p50_ms": 7.535895972978324, + "p90_ms": 9.055170818464832, + "p95_ms": 9.8115184053313, + "p99_ms": 11.246937265386803, + "index_ms": 713.9998750062659, + "by_category": { + "architecture": 0.9251084237866075, + "semantic": 0.8237823919677136, + "symbol": 1.0 + } + }, + { + "repo": "nlohmann-json", + "language": "cpp", + "mode": "hybrid", + "chunks": 811, + "tokens": 3048, + "ndcg5": 0.8295386627570916, + "ndcg10": 0.8404590345979999, + "p50_ms": 0.5867915169801563, + "p90_ms": 4.374066327000038, + "p95_ms": 4.777984775137156, + "p99_ms": 4.969030588399619, + "index_ms": 305.1326249842532, + "by_category": { + "architecture": 0.7951420120034352, + "semantic": 0.8243186607935954, + "symbol": 1.0 + } + }, + { + "repo": "nvm", + "language": "bash", + "mode": "hybrid", + "chunks": 154, + "tokens": 3072, + "ndcg5": 1.0, + "ndcg10": 1.0, + "p50_ms": 0.39450000622309744, + "p90_ms": 0.42946600588038564, + "p95_ms": 0.4459035728359595, + "p99_ms": 0.44951430812943727, + "index_ms": 88.7383749941364, + "by_category": { + "architecture": 1.0, + "semantic": 1.0 + } + }, + { + "repo": "pandoc", + "language": "haskell", + "mode": "hybrid", + "chunks": 3122, + "tokens": 2677, + "ndcg5": 0.6270750787545916, + "ndcg10": 0.6587932452044573, + "p50_ms": 0.9604375227354467, + "p90_ms": 9.437154681654649, + "p95_ms": 10.568428589613177, + "p99_ms": 10.671219283831306, + "index_ms": 1285.146292007994, + "by_category": { + "architecture": 0.6368991050595311, + "semantic": 0.673389338634408 + } + }, + { + "repo": "phoenix", + "language": "elixir", + "mode": "hybrid", + "chunks": 559, + "tokens": 6561, + "ndcg5": 0.8696694218045175, + "ndcg10": 0.8696694218045175, + "p50_ms": 0.5579999997280538, + "p90_ms": 4.238775034900755, + "p95_ms": 4.784570896299554, + "p99_ms": 5.250381376827136, + "index_ms": 199.10866697318852, + "by_category": { + "architecture": 0.8214210289682636, + "semantic": 0.8758471076530654, + "symbol": 1.0 + } + }, + { + "repo": "plug", + "language": "elixir", + "mode": "hybrid", + "chunks": 280, + "tokens": 5453, + "ndcg5": 0.9077324383928644, + "ndcg10": 0.9077324383928644, + "p50_ms": 0.48027103184722364, + "p90_ms": 3.287567046936602, + "p95_ms": 3.6066399305127566, + "p99_ms": 4.092627975624054, + "index_ms": 104.83441705582663, + "by_category": { + "architecture": 1.0, + "semantic": 0.868189197704092, + "symbol": 1.0 + } + }, + { + "repo": "pydantic", + "language": "python", + "mode": "hybrid", + "chunks": 1533, + "tokens": 3259, + "ndcg5": 0.7779397805814576, + "ndcg10": 0.7990792723017901, + "p50_ms": 0.6054374971427023, + "p90_ms": 6.336283718701452, + "p95_ms": 6.735448545077817, + "p99_ms": 8.665689743356776, + "index_ms": 465.1143330265768, + "by_category": { + "architecture": 0.7133473647659958, + "semantic": 0.7946530173877968, + "symbol": 0.9261859507142916 + } + }, + { + "repo": "rack", + "language": "ruby", + "mode": "hybrid", + "chunks": 256, + "tokens": 2716, + "ndcg5": 0.9200892395358251, + "ndcg10": 0.9200892395358251, + "p50_ms": 0.47762549365870655, + "p90_ms": 3.772771108197049, + "p95_ms": 5.01115978695452, + "p99_ms": 6.015264773741362, + "index_ms": 94.51370796887204, + "by_category": { + "architecture": 1.0, + "semantic": 0.8561606311644849, + "symbol": 1.0 + } + }, + { + "repo": "rails", + "language": "ruby", + "mode": "hybrid", + "chunks": 498, + "tokens": 2508, + "ndcg5": 0.8445678978178954, + "ndcg10": 0.8445678978178954, + "p50_ms": 0.6935414858162403, + "p90_ms": 4.116908303694802, + "p95_ms": 5.801968448213302, + "p99_ms": 5.811627290095203, + "index_ms": 194.20991698279977, + "by_category": { + "architecture": 0.845500808108813, + "semantic": 0.8596832229722856, + "symbol": 0.8160170306431477 + } + }, + { + "repo": "redis", + "language": "c", + "mode": "hybrid", + "chunks": 6367, + "tokens": 3434, + "ndcg5": 0.9158764682653967, + "ndcg10": 0.9158764682653967, + "p50_ms": 0.8312914869748056, + "p90_ms": 0.9042125020641834, + "p95_ms": 0.9195478720357642, + "p99_ms": 0.9525759628741071, + "index_ms": 2501.0848339879885, + "by_category": { + "architecture": 0.9430676558073394, + "semantic": 0.8886852807234542 + } + }, + { + "repo": "redux", + "language": "javascript", + "mode": "hybrid", + "chunks": 53, + "tokens": 2834, + "ndcg5": 0.8863147192765458, + "ndcg10": 0.9137963988128106, + "p50_ms": 0.40202049422077835, + "p90_ms": 2.1349457616452128, + "p95_ms": 2.2465829591965316, + "p99_ms": 3.489182998309841, + "index_ms": 26.678042020648718, + "by_category": { + "architecture": 0.9032867981913646, + "semantic": 0.872911909678669, + "symbol": 1.0 + } + }, + { + "repo": "requests", + "language": "python", + "mode": "hybrid", + "chunks": 169, + "tokens": 3016, + "ndcg5": 0.9652540586697873, + "ndcg10": 0.9652540586697873, + "p50_ms": 0.4053539887536317, + "p90_ms": 3.1276957888621837, + "p95_ms": 3.21979756699875, + "p99_ms": 3.2591594965197146, + "index_ms": 52.03520797658712, + "by_category": { + "architecture": 0.9709908720694624, + "semantic": 0.9385181336136883, + "symbol": 1.0 + } + }, + { + "repo": "serde", + "language": "rust", + "mode": "hybrid", + "chunks": 1178, + "tokens": 3017, + "ndcg5": 0.7965338279036697, + "ndcg10": 0.8301174310983572, + "p50_ms": 0.9700204827822745, + "p90_ms": 5.669062200468036, + "p95_ms": 7.11783338629175, + "p99_ms": 7.459200248704291, + "index_ms": 388.14374996582046, + "by_category": { + "architecture": 0.8543823750838853, + "semantic": 0.6764208118547154, + "symbol": 1.0 + } + }, + { + "repo": "sinatra", + "language": "ruby", + "mode": "hybrid", + "chunks": 70, + "tokens": 2831, + "ndcg5": 0.9530803155822426, + "ndcg10": 0.9530803155822426, + "p50_ms": 0.3712085308507085, + "p90_ms": 5.111400003079325, + "p95_ms": 5.117387473001145, + "p99_ms": 5.1707775256363675, + "index_ms": 27.08620799239725, + "by_category": { + "architecture": 0.8123212623289702, + "semantic": 1.0, + "symbol": 1.0 + } + }, + { + "repo": "snapkit", + "language": "swift", + "mode": "hybrid", + "chunks": 107, + "tokens": 3153, + "ndcg5": 0.7723856192940887, + "ndcg10": 0.7872645734184941, + "p50_ms": 2.6728750090114772, + "p90_ms": 5.857749795541169, + "p95_ms": 7.4549162061884955, + "p99_ms": 8.843716061674055, + "index_ms": 37.03895799117163, + "by_category": { + "architecture": 0.6399069297160626, + "semantic": 0.7592455236131767, + "symbol": 1.0 + } + }, + { + "repo": "starlette", + "language": "python", + "mode": "hybrid", + "chunks": 214, + "tokens": 2876, + "ndcg5": 0.9339593901316886, + "ndcg10": 0.9427487090259538, + "p50_ms": 0.4671249771490693, + "p90_ms": 2.9285409837029874, + "p95_ms": 3.256249998230487, + "p99_ms": 3.3224828192032874, + "index_ms": 69.54912503715605, + "by_category": { + "architecture": 0.8907020808677296, + "semantic": 1.0, + "symbol": 1.0 + } + }, + { + "repo": "telescope.nvim", + "language": "lua", + "mode": "hybrid", + "chunks": 544, + "tokens": 3061, + "ndcg5": 0.8024434932958862, + "ndcg10": 0.8024434932958862, + "p50_ms": 0.5177290004212409, + "p90_ms": 0.5900085670873523, + "p95_ms": 0.771351784351284, + "p99_ms": 3.1903367344057147, + "index_ms": 174.5349169941619, + "by_category": { + "architecture": 0.8805425336407291, + "semantic": 0.760390163879432 + } + }, + { + "repo": "tokio", + "language": "rust", + "mode": "hybrid", + "chunks": 2758, + "tokens": 3492, + "ndcg5": 0.9438607657669025, + "ndcg10": 0.9530895506058809, + "p50_ms": 0.7439789769705385, + "p90_ms": 6.81560360826552, + "p95_ms": 7.191891927504912, + "p99_ms": 7.6703111466486, + "index_ms": 910.5068750213832, + "by_category": { + "architecture": 0.8436318353529363, + "semantic": 1.0, + "symbol": 1.0 + } + }, + { + "repo": "trpc", + "language": "typescript", + "mode": "hybrid", + "chunks": 363, + "tokens": 2942, + "ndcg5": 0.8117219727220212, + "ndcg10": 0.8318711294019078, + "p50_ms": 3.289271000539884, + "p90_ms": 4.194062814349309, + "p95_ms": 4.342343780444937, + "p99_ms": 6.200068747857582, + "index_ms": 116.80875002639368, + "by_category": { + "architecture": 0.7751964340658473, + "semantic": 0.7765501593587683, + "symbol": 1.0 + } + }, + { + "repo": "vapor", + "language": "swift", + "mode": "hybrid", + "chunks": 796, + "tokens": 2553, + "ndcg5": 0.7740663550396519, + "ndcg10": 0.828789449954672, + "p50_ms": 0.7312500092666596, + "p90_ms": 4.2243000119924545, + "p95_ms": 4.319356250925921, + "p99_ms": 4.3209712411044165, + "index_ms": 280.9126250213012, + "by_category": { + "architecture": 0.5394794582550125, + "semantic": 0.8540964731663144, + "symbol": 1.0 + } + }, + { + "repo": "vitest", + "language": "typescript", + "mode": "hybrid", + "chunks": 1090, + "tokens": 2797, + "ndcg5": 0.6573465818787765, + "ndcg10": 0.6929673005895788, + "p50_ms": 0.7455210143234581, + "p90_ms": 5.160912469727919, + "p95_ms": 5.681008330429907, + "p99_ms": 8.177735236822624, + "index_ms": 353.1795000308193, + "by_category": { + "architecture": 0.6132788343159646, + "semantic": 0.6862493865749392, + "symbol": 0.8769765845238192 + } + }, + { + "repo": "xmonad", + "language": "haskell", + "mode": "hybrid", + "chunks": 124, + "tokens": 3034, + "ndcg5": 0.8039694436225424, + "ndcg10": 0.8141885635019669, + "p50_ms": 0.37720802356489, + "p90_ms": 3.16575828474015, + "p95_ms": 3.3024975971784443, + "p99_ms": 3.3790995448362082, + "index_ms": 46.22841702075675, + "by_category": { + "architecture": 0.7691051895584848, + "semantic": 0.8442441461309548 + } + }, + { + "repo": "zig", + "language": "zig", + "mode": "hybrid", + "chunks": 13307, + "tokens": 3112, + "ndcg5": 0.9196394630357186, + "ndcg10": 0.9196394630357186, + "p50_ms": 1.4825209800619632, + "p90_ms": 24.460865999571983, + "p95_ms": 26.72400350274984, + "p99_ms": 30.26503348082769, + "index_ms": 3681.8602090352215, + "by_category": { + "architecture": 0.7103099178571526, + "semantic": 0.9565799710084067 + } + }, + { + "repo": "zig-clap", + "language": "zig", + "mode": "hybrid", + "chunks": 100, + "tokens": 2525, + "ndcg5": 0.9380929753571458, + "ndcg10": 0.9380929753571458, + "p50_ms": 0.4560630186460912, + "p90_ms": 3.0955628026276827, + "p95_ms": 3.15549788356293, + "p99_ms": 3.225765992538072, + "index_ms": 55.30970898689702, + "by_category": { + "architecture": 1.0, + "semantic": 0.9312144170634953 + } + }, + { + "repo": "zls", + "language": "zig", + "mode": "hybrid", + "chunks": 1319, + "tokens": 2934, + "ndcg5": 0.8761859507142915, + "ndcg10": 0.8761859507142915, + "p50_ms": 0.6602709763683379, + "p90_ms": 0.8430673042312266, + "p95_ms": 1.1700148752424906, + "p99_ms": 5.577602965058752, + "index_ms": 626.7347910325043, + "by_category": { + "architecture": 0.804418536224494, + "semantic": 0.9148299431318748 + } + }, + { + "repo": "zod", + "language": "typescript", + "mode": "hybrid", + "chunks": 1812, + "tokens": 2865, + "ndcg5": 0.595861623462428, + "ndcg10": 0.6136719828178292, + "p50_ms": 5.538687517400831, + "p90_ms": 7.184083387255669, + "p95_ms": 7.393750676419588, + "p99_ms": 9.440683729480948, + "index_ms": 911.2771659856662, + "by_category": { + "architecture": 0.6297620990369716, + "semantic": 0.586420115895172, + "symbol": 0.7103099178571526 + } + } + ] +} diff --git a/src/semble/index/file_walker.py b/src/semble/index/file_walker.py index db4ceba..ca86559 100644 --- a/src/semble/index/file_walker.py +++ b/src/semble/index/file_walker.py @@ -61,23 +61,17 @@ def walk_files(root: Path, extensions: Sequence[str], ignore: Sequence[str] | No :yield: Path to each file under root matching the criteria. :ytype: Path """ - # This should be a list. Traversal is done in order, so the order matters. - ignored = [] - extensions_as_patterns = [f"!*{ext}" for ext in extensions] - ignored.extend(extensions_as_patterns) - ignored.extend(sorted(_DEFAULT_IGNORED_DIRS)) - # Always give user patterns preference - ignored.extend(ignore or []) - base_spec = GitIgnoreSpec.from_lines(ignored, backend="simple") + extensions_set = frozenset(extensions) + dir_patterns = list(sorted(_DEFAULT_IGNORED_DIRS)) + list(ignore or []) + base_spec = GitIgnoreSpec.from_lines(dir_patterns, backend="simple") s = IgnoreSpec(base=root, spec=base_spec) - yield from _walk(root, [s]) + yield from _walk(root, [s], extensions_set) def _is_ignored(path: Path, specs: list[IgnoreSpec]) -> bool: """Check if a path is ignored by any of the provided ignore specs.""" is_dir = path.is_dir() - # Everything starts off as unignored - ignored = not is_dir + ignored = False for ignore_spec in specs: try: @@ -107,6 +101,7 @@ def _is_ignored(path: Path, specs: list[IgnoreSpec]) -> bool: def _walk( directory: Path, inherited_specs: list[IgnoreSpec], + extensions: frozenset[str], ) -> Iterator[Path]: """Recursive function for walking files under a directory.""" spec = _load_ignore_for_dir(directory) @@ -124,6 +119,6 @@ def _walk( continue if item.is_dir(): - yield from _walk(item, inherited_specs) - elif item.is_file(): + yield from _walk(item, inherited_specs, extensions) + elif item.is_file() and item.suffix.lower() in extensions: yield item diff --git a/tests/test_file_walker.py b/tests/test_file_walker.py index b93fb1d..d0d7b5e 100644 --- a/tests/test_file_walker.py +++ b/tests/test_file_walker.py @@ -83,17 +83,11 @@ def test_walk_files_prunes_ignored_dirs(tmp_path: Path) -> None: def test_is_ignored_skips_spec_with_unrelated_base(tmp_path: Path) -> None: - """An IgnoreSpec whose base is not an ancestor of the path is silently skipped. - - Files default to ignored in _is_ignored. When the first spec has an - unrelated base, the ValueError is caught and the spec is skipped without - crashing. A second spec with the correct base can still un-ignore the file. - """ + """An IgnoreSpec whose base is not an ancestor of the path is silently skipped.""" from pathspec import GitIgnoreSpec from semble.index.file_walker import IgnoreSpec, _is_ignored - # Create two unrelated directory trees project_a = tmp_path / "project_a" project_b = tmp_path / "project_b" project_a.mkdir() @@ -102,24 +96,26 @@ def test_is_ignored_skips_spec_with_unrelated_base(tmp_path: Path) -> None: target_file = project_a / "keep.py" target_file.write_text("x = 1\n") - # Spec rooted at project_b — unrelated to target_file + # Spec rooted at project_b — unrelated to target_file; silently skipped, no crash. unrelated_spec = IgnoreSpec( base=project_b, spec=GitIgnoreSpec.from_lines(["*.py"]), ) + assert _is_ignored(target_file, [unrelated_spec]) is False - # With only the unrelated spec the file stays in its default state (ignored) - # and, crucially, no exception is raised. - assert _is_ignored(target_file, [unrelated_spec]) is True - - # Spec rooted at project_a that un-ignores .py files - matching_spec = IgnoreSpec( + # A matching spec can still ignore the file. + ignore_spec = IgnoreSpec( base=project_a, - spec=GitIgnoreSpec.from_lines(["!*.py"]), + spec=GitIgnoreSpec.from_lines(["*.py"]), ) + assert _is_ignored(target_file, [ignore_spec]) is True - # The unrelated spec is safely skipped; the matching spec un-ignores the file. - assert _is_ignored(target_file, [unrelated_spec, matching_spec]) is False + # The unrelated spec is safely skipped; the negation spec un-ignores the file. + negate_spec = IgnoreSpec( + base=project_a, + spec=GitIgnoreSpec.from_lines(["*.py", "!keep.py"]), + ) + assert _is_ignored(target_file, [unrelated_spec, negate_spec]) is False def test_walk_files_skips_symlinks(tmp_path: Path) -> None: From 6929a179d67a3e855e33f6ed397f7abb4a4c4a30 Mon Sep 17 00:00:00 2001 From: Pringled Date: Mon, 18 May 2026 12:05:43 +0200 Subject: [PATCH 2/8] Update test --- tests/test_file_walker.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/tests/test_file_walker.py b/tests/test_file_walker.py index d0d7b5e..c6731f7 100644 --- a/tests/test_file_walker.py +++ b/tests/test_file_walker.py @@ -83,11 +83,17 @@ def test_walk_files_prunes_ignored_dirs(tmp_path: Path) -> None: def test_is_ignored_skips_spec_with_unrelated_base(tmp_path: Path) -> None: - """An IgnoreSpec whose base is not an ancestor of the path is silently skipped.""" + """An IgnoreSpec whose base is not an ancestor of the path is silently skipped. + + When the first spec has an unrelated base, the ValueError is caught and the + spec is skipped without crashing. A second spec with the correct base can + still ignore the file. + """ from pathspec import GitIgnoreSpec from semble.index.file_walker import IgnoreSpec, _is_ignored + # Create two unrelated directory trees project_a = tmp_path / "project_a" project_b = tmp_path / "project_b" project_a.mkdir() @@ -96,26 +102,24 @@ def test_is_ignored_skips_spec_with_unrelated_base(tmp_path: Path) -> None: target_file = project_a / "keep.py" target_file.write_text("x = 1\n") - # Spec rooted at project_b — unrelated to target_file; silently skipped, no crash. + # Spec rooted at project_b — unrelated to target_file unrelated_spec = IgnoreSpec( base=project_b, spec=GitIgnoreSpec.from_lines(["*.py"]), ) + + # With only the unrelated spec the file is not ignored (spec is skipped), + # and, crucially, no exception is raised. assert _is_ignored(target_file, [unrelated_spec]) is False - # A matching spec can still ignore the file. - ignore_spec = IgnoreSpec( + # Spec rooted at project_a that ignores .py files + matching_spec = IgnoreSpec( base=project_a, spec=GitIgnoreSpec.from_lines(["*.py"]), ) - assert _is_ignored(target_file, [ignore_spec]) is True - # The unrelated spec is safely skipped; the negation spec un-ignores the file. - negate_spec = IgnoreSpec( - base=project_a, - spec=GitIgnoreSpec.from_lines(["*.py", "!keep.py"]), - ) - assert _is_ignored(target_file, [unrelated_spec, negate_spec]) is False + # The unrelated spec is safely skipped; the matching spec ignores the file. + assert _is_ignored(target_file, [unrelated_spec, matching_spec]) is True def test_walk_files_skips_symlinks(tmp_path: Path) -> None: From b1a725c2b49aebede811b04b844f4daf16317ebf Mon Sep 17 00:00:00 2001 From: Pringled Date: Mon, 18 May 2026 13:20:30 +0200 Subject: [PATCH 3/8] Even better fix --- src/semble/index/file_walker.py | 16 +++-- tests/test_file_walker.py | 27 +++++++- uv.lock | 118 ++++++++++++++++---------------- 3 files changed, 95 insertions(+), 66 deletions(-) diff --git a/src/semble/index/file_walker.py b/src/semble/index/file_walker.py index ca86559..3446418 100644 --- a/src/semble/index/file_walker.py +++ b/src/semble/index/file_walker.py @@ -68,11 +68,11 @@ def walk_files(root: Path, extensions: Sequence[str], ignore: Sequence[str] | No yield from _walk(root, [s], extensions_set) -def _is_ignored(path: Path, specs: list[IgnoreSpec]) -> bool: +def _is_ignored(path: Path, specs: list[IgnoreSpec]) -> tuple[bool, bool]: """Check if a path is ignored by any of the provided ignore specs.""" is_dir = path.is_dir() ignored = False - + found = False for ignore_spec in specs: try: # If there is no relative path, this is invalid. @@ -94,8 +94,13 @@ def _is_ignored(path: Path, specs: list[IgnoreSpec]) -> bool: if pattern.match_file(relative_str) is not None: ignored = pattern.include + # Only set found for file-specific negation patterns. Directory + # patterns (e.g. !vendor/) un-ignore the directory but should not + # bypass extension filtering for individual files inside it. + pat = pattern.pattern + found = not ignored and not (isinstance(pat, str) and pat.rstrip().endswith("/")) - return ignored + return ignored, found def _walk( @@ -115,10 +120,11 @@ def _walk( # Don't follow symlinks if item.is_symlink(): continue - if _is_ignored(item, inherited_specs): + is_ignored, found = _is_ignored(item, inherited_specs) + if is_ignored: continue if item.is_dir(): yield from _walk(item, inherited_specs, extensions) - elif item.is_file() and item.suffix.lower() in extensions: + elif item.is_file() and (found or item.suffix.lower() in extensions): yield item diff --git a/tests/test_file_walker.py b/tests/test_file_walker.py index c6731f7..07b79ff 100644 --- a/tests/test_file_walker.py +++ b/tests/test_file_walker.py @@ -110,7 +110,8 @@ def test_is_ignored_skips_spec_with_unrelated_base(tmp_path: Path) -> None: # With only the unrelated spec the file is not ignored (spec is skipped), # and, crucially, no exception is raised. - assert _is_ignored(target_file, [unrelated_spec]) is False + ignored, _ = _is_ignored(target_file, [unrelated_spec]) + assert ignored is False # Spec rooted at project_a that ignores .py files matching_spec = IgnoreSpec( @@ -119,7 +120,29 @@ def test_is_ignored_skips_spec_with_unrelated_base(tmp_path: Path) -> None: ) # The unrelated spec is safely skipped; the matching spec ignores the file. - assert _is_ignored(target_file, [unrelated_spec, matching_spec]) is True + ignored, _ = _is_ignored(target_file, [unrelated_spec, matching_spec]) + assert ignored is True + + +def test_walk_files_explicit_include_bypasses_extension_filter(tmp_path: Path) -> None: + """A file explicitly un-ignored via a negation pattern is yielded even if its extension is not in the list.""" + _touch(tmp_path / "special.kjs") + _touch(tmp_path / "other.kjs") + _touch(tmp_path / "main.py") + (tmp_path / ".sembleignore").write_text("*.kjs\n!special.kjs\n") + + found = {p.relative_to(tmp_path).as_posix() for p in walk_files(tmp_path, [".py"])} + assert found == {"main.py", "special.kjs"} + + +def test_walk_files_directory_include_keeps_extension_filter(tmp_path: Path) -> None: + """A directory negation allows traversal but does not include unsupported files.""" + _touch(tmp_path / "vendor" / "special.kjs") + _touch(tmp_path / "vendor" / "main.py") + (tmp_path / ".sembleignore").write_text("*\n!vendor/\n") + + found = {p.relative_to(tmp_path).as_posix() for p in walk_files(tmp_path, [".py"])} + assert found == {"vendor/main.py"} def test_walk_files_skips_symlinks(tmp_path: Path) -> None: diff --git a/uv.lock b/uv.lock index ef3a139..7ff1da5 100644 --- a/uv.lock +++ b/uv.lock @@ -10,7 +10,7 @@ resolution-markers = [ [options] exclude-newer = "0001-01-01T00:00:00Z" # This has no effect and is included for backwards compatibility when using relative exclude-newer values. -exclude-newer-span = "P3D" +exclude-newer-span = "P1W" [[package]] name = "annotated-doc" @@ -1544,7 +1544,7 @@ wheels = [ [[package]] name = "mypy" -version = "2.1.0" +version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ast-serialize" }, @@ -1554,51 +1554,51 @@ dependencies = [ { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/15/cca9d88503549ed6fedeaa1d448cdddd542ee8a490232d732e278036fbf2/mypy-2.1.0.tar.gz", hash = "sha256:81e76ad12c2d804512e9b13240d1588316531bfba07558286078bfbce9613633", size = 3898359, upload-time = "2026-05-11T18:37:36.237Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/71/d351dca3e9b30da2328ee9d445c88b8388072808ebfbc49eb69d30b67749/mypy-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:11a6beb180257a805961aea9ec591bbd0bd17f1e18d35b8456d57aee5bedfedc", size = 14778792, upload-time = "2026-05-11T18:36:23.605Z" }, - { url = "https://files.pythonhosted.org/packages/2f/45/7d51594b644c17c0bcf74ed8cd5fc33b324276d708e8506f220b70dab9d9/mypy-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ef78c1d306bbf9a8a12f526c44902c9c28dffd6c52c52bf6a72641ce18d3849", size = 13645739, upload-time = "2026-05-11T18:37:22.752Z" }, - { url = "https://files.pythonhosted.org/packages/65/01/455c31b170e9468265074840bf18863a8482a24103fdaabe4e199392aa5f/mypy-2.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c209a90853081ff01d01ee895cafe10f7db1474e0d95beaeef0f6c1db9119bbd", size = 14074199, upload-time = "2026-05-11T18:35:09.292Z" }, - { url = "https://files.pythonhosted.org/packages/41/5a/93093f0b29a9e982deafde698f740a2eb2e05886e79ccf0594c7fd5413a3/mypy-2.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47cebf61abde7c088a4e27718a8b13a81655686b2e9c251f5c0915a802248166", size = 14953128, upload-time = "2026-05-11T18:31:57.678Z" }, - { url = "https://files.pythonhosted.org/packages/7f/2f/a196f5331d96170ad3d28f144d2aba690d4b2911381f68d51e489c7ab82a/mypy-2.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d57a90ae5e872138a425ec328edbc9b235d1934c4377881a33ec05b341acc9a8", size = 15249378, upload-time = "2026-05-11T18:33:00.101Z" }, - { url = "https://files.pythonhosted.org/packages/54/de/94d321cc12da9f71341ac0c270efbed5c725750c7b4c334d957de9a087d9/mypy-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:aea7f7a8a55b459c34275fc468ada6ca7c173a5e43a68f5dbe588a563d8a06b8", size = 11060994, upload-time = "2026-05-11T18:33:18.848Z" }, - { url = "https://files.pythonhosted.org/packages/e1/62/0c27ca55219a7c764a7fb88c7bb2b7b2f9780ade8bbf16bc8ed8400eef6b/mypy-2.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:c989640253f0d76843e9c6c1bbf4bd48c5e85ada61bde4beb37cb3eca035685e", size = 9976743, upload-time = "2026-05-11T18:31:25.554Z" }, - { url = "https://files.pythonhosted.org/packages/0a/a1/639f3024794a2a15899cb90707fe02e044c4412794c39c5769fd3df2e2ef/mypy-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a683016b16fe2f572dc04c72be7ee0504ac1605a265d0200f5cea695fb788f41", size = 14691685, upload-time = "2026-05-11T18:33:27.973Z" }, - { url = "https://files.pythonhosted.org/packages/3b/08/9a585dea4325f20d8b80dc78623fa50d1fd2173b710f6237afd6ba6ab39b/mypy-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a293c534adb55271fef24a26da04b855540a8c13cc07bc5917b9fd2c394f2ca", size = 13555165, upload-time = "2026-05-11T18:32:16.107Z" }, - { url = "https://files.pythonhosted.org/packages/81/dc/7c42cc9c6cb01e8eb09961f1f738741d3e9c7e9d5c5b30ec69222625cd5f/mypy-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7406f4d048e71e576f5356d317e5b0a9e666dfd966bd99f9d14ca06e1a341538", size = 13994376, upload-time = "2026-05-11T18:32:39.256Z" }, - { url = "https://files.pythonhosted.org/packages/d4/fa/285946c33bce716e082c11dfeee9ee196eaf1f5042efb3581a31f9f205e4/mypy-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e0210d626fc8b31ccc90233754c7bc90e1f43205e85d96387f7db1285b55c398", size = 14864618, upload-time = "2026-05-11T18:34:49.765Z" }, - { url = "https://files.pythonhosted.org/packages/2b/83/82397f48af6c27e295d57979ded8490c9829040152cf7571b2f026aeb9a0/mypy-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3712c20deed54e814eaaa825603bada8ea1c390670a397c95b98405347acc563", size = 15102063, upload-time = "2026-05-11T18:34:05.855Z" }, - { url = "https://files.pythonhosted.org/packages/40/68/b02dec39057b88eb03dc0aa854732e26e8361f34f9d0e20c7614967d1eba/mypy-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fcaa0e479066e31f7cceb6a3bea39cb22b2ff51a6b2f24f193d19179ba17c389", size = 11060564, upload-time = "2026-05-11T18:35:36.494Z" }, - { url = "https://files.pythonhosted.org/packages/cf/a8/ea3dcbef31f99b634f2ee23bb0321cbc8c1b388b76a861eb849f13c347dc/mypy-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:0b1a5260c95aa443083f9ed3592662941951bca3d4ca224a5dc517c38b7cf666", size = 9966983, upload-time = "2026-05-11T18:37:14.139Z" }, - { url = "https://files.pythonhosted.org/packages/95/b1/55861beb5c339b44f9a2ba92df9e2cb1eeb4ae1eee674cdf7772c797778b/mypy-2.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:244358bf1c0da7722230bce60683d52e8e9fd030554926f15b747a84efb5b3af", size = 14874381, upload-time = "2026-05-11T18:37:31.784Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b3/b7f770114b7d0ac92d0f76e8d93c2780844a70488a90e91821927850da86/mypy-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ec7c57657493c7a75534df2751c8ae2cda383c16ecc55d2106c54476b1b16f6", size = 13665501, upload-time = "2026-05-11T18:34:23.063Z" }, - { url = "https://files.pythonhosted.org/packages/b6/f3/8ae2037967e2126689a0c11d99e2b707134a565191e92c60ca2572aec60a/mypy-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8161b6ff4392410023224f0969d17db93e1e154bc3e4ba62598e720723ae211", size = 14045750, upload-time = "2026-05-11T18:31:48.151Z" }, - { url = "https://files.pythonhosted.org/packages/a0/32/615eb5911859e43d054941b0d0a7d06cfa2870eba86529cf385b052b111c/mypy-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf03e12003084a67395184d3eb8cbd6a489dc3655b5664b28c210a9e2403ab0b", size = 15061630, upload-time = "2026-05-11T18:37:06.898Z" }, - { url = "https://files.pythonhosted.org/packages/d4/03/4eafbfff8bfab1b87082741eae6e6a624028c984e6708b73bce2a8570c9d/mypy-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:20509760fd791c51579d573153407d226385ec1f8bcce55d730b354f3336bc22", size = 15288831, upload-time = "2026-05-11T18:31:18.07Z" }, - { url = "https://files.pythonhosted.org/packages/99/ee/919661478e5891a3c96e549c036e467e64563ab85995b10c53c8358e16a3/mypy-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:6753d0c1fdd6b1a23b9e4f283ce80b2153b724adcb2653b20b85a8a28ac6436b", size = 11135228, upload-time = "2026-05-11T18:34:31.23Z" }, - { url = "https://files.pythonhosted.org/packages/24/0a/6a12b9782ca0831a553192f351679f4548abc9d19a7cc93bb7feb02084c7/mypy-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:98ebb6589bb3b6d0c6f0c459d53ca55b8091fbc13d277c4041c885392e8195e8", size = 10040684, upload-time = "2026-05-11T18:36:48.199Z" }, - { url = "https://files.pythonhosted.org/packages/6e/dd/c7191469c777f07689c032a8f7326e393ea34c92d6d76eb7ce5ba57ea66d/mypy-2.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35aac3bb114e03888f535d5eb51b8bafbb3266586b599da1940f9b1be3ec5bd5", size = 14852174, upload-time = "2026-05-11T18:31:38.929Z" }, - { url = "https://files.pythonhosted.org/packages/55/8c/aed55408879043d72bb9135f4d0d19a02b886dd569631e113e3d2706cb8d/mypy-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8de55a8c861f2a49331f807be98d90caeceeef520bde13d43a160207f8af613e", size = 13651542, upload-time = "2026-05-11T18:36:04.636Z" }, - { url = "https://files.pythonhosted.org/packages/3a/8e/f371a824b1f1fa8ea6e3dbb8703d232977d572be2329554a3bc4d960302f/mypy-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5fdf2941a07434af755837d9880f7d7d25f1dacb1af9dcd4b9b66f2220a3024e", size = 14033929, upload-time = "2026-05-11T18:35:55.742Z" }, - { url = "https://files.pythonhosted.org/packages/94/21/f54be870d6dd53a82c674407e0f8eed7174b05ec78d42e5abd7b42e84fd5/mypy-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e195b817c13f02352a9c124301f9f30f078405444679b6753c1b96b6eed37285", size = 15039200, upload-time = "2026-05-11T18:33:10.281Z" }, - { url = "https://files.pythonhosted.org/packages/17/99/bf21748626a40ce59fd29a39386ab46afec88b7bd2f0fa6c3a97c995523f/mypy-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5431d42af987ebd92ba2f71d45c85ed41d8e6ca9f5fd209a69f68f707d2469e5", size = 15272690, upload-time = "2026-05-11T18:32:07.205Z" }, - { url = "https://files.pythonhosted.org/packages/d6/d7/9e90d2cf47100bea550ed2bc7b0d4de3a62181d84d5e37da0003e8462637/mypy-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:767fe8c66dc3e01e19e1737d4c38ebefead16125e1b8e58ad421903b376f5c65", size = 11147435, upload-time = "2026-05-11T18:33:56.477Z" }, - { url = "https://files.pythonhosted.org/packages/ec/46/e5c449e858798e35ffc90946282a27c62a77be743fe17480e4977374eb91/mypy-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:ecfe70d43775ab99562ab128ce49854a362044c9f894961f68f898c23cb7429d", size = 10035052, upload-time = "2026-05-11T18:32:30.049Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ca/b279a672e874aedd5498ae25f722dacc8aa86bbffb939b3f97cbb1cf6686/mypy-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7354c5a7f69d9345c3d6e69921d57088eea3ddeeb6b20d34c1b3855b02c36ec2", size = 14848422, upload-time = "2026-05-11T18:35:45.984Z" }, - { url = "https://files.pythonhosted.org/packages/27/e6/3efe56c631d959b9b4454e208b0ac4b7f4f58b404c89f8bec7b49efdfc21/mypy-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:49890d4f76ac9e06ec117f9e09f3174da70a620a0c300953d8595c926e80947f", size = 13677374, upload-time = "2026-05-11T18:36:57.188Z" }, - { url = "https://files.pythonhosted.org/packages/84/7f/8107ea87a44fd1f1b59882442f033c9c3488c127201b1d1d15f1cbd6022e/mypy-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:761be68e023ef5d94678772396a8af1220030f80837a3afd8d0aef3b419666f4", size = 14055743, upload-time = "2026-05-11T18:35:18.361Z" }, - { url = "https://files.pythonhosted.org/packages/51/4d/b6d34db183133b83761b9199a82d31557cdbb70a380d8c3b3438e11882a3/mypy-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c90345fc182dc363b891350457ec69c35140858538f38b4540845afcc32b1aef", size = 15020937, upload-time = "2026-05-11T18:34:59.618Z" }, - { url = "https://files.pythonhosted.org/packages/ff/d7/f08360c691d758acb02f45022c34d98b92892f4ea756644e1000d4b9f3d8/mypy-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b84802e7b5a6daf1f5e15bc9fcd7ddae77be13981ffab037f1c67bb84d67d135", size = 15253371, upload-time = "2026-05-11T18:36:41.081Z" }, - { url = "https://files.pythonhosted.org/packages/67/1b/09460a13719530a19bce27bd3bc8449e83569dd2ba7faf51c9c3c30c0b61/mypy-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:022c771234936ceac541ebaf836fe9e2abeb3f5e09aff21588fe543ff006fe21", size = 11326429, upload-time = "2026-05-11T18:34:13.526Z" }, - { url = "https://files.pythonhosted.org/packages/40/62/75dbf0f82f7b6680340efc614af29dd0b3c17b8a4f1cd09b8bd2fd6bc814/mypy-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:498207db725cec88829a6a5c2fc771205fd043719ef98bc49aba8fb9fc4e6d57", size = 10218799, upload-time = "2026-05-11T18:32:23.491Z" }, - { url = "https://files.pythonhosted.org/packages/b2/66/caca04ed7d972fb6eb6dd1ccd6df1de5c38fae8c5b3dc1c4e8e0d85ee6b9/mypy-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7d5e5cad0efeba72b93cd17490cc0d69c5ac9ca132994fe3fb0314808aeeb83e", size = 15923458, upload-time = "2026-05-11T18:35:28.64Z" }, - { url = "https://files.pythonhosted.org/packages/ed/52/2d90cbe49d014b13ed7ff337930c30bad35893fe38a1e4641e756bb62191/mypy-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ff715050c127d724fd260a2e666e7747fdd83511c0c47d449d98238970aef780", size = 14757697, upload-time = "2026-05-11T18:36:14.208Z" }, - { url = "https://files.pythonhosted.org/packages/ac/37/d98f4a14e081b238992d0ed96b6d39c7cc0148c9699eb71eaa68629665ea/mypy-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:82208da9e09414d520e912d3e462d454854bed0810b71540bb016dcbca7308fd", size = 15405638, upload-time = "2026-05-11T18:33:48.249Z" }, - { url = "https://files.pythonhosted.org/packages/a3/c2/15c46613b24a84fad2aea1248bf9619b99c2767ae9071fe224c179a0b7d4/mypy-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e79ebc1b904b84f0310dff7469655a9c36c7a68bddb37bdd42b67a332df61d08", size = 16215852, upload-time = "2026-05-11T18:32:50.296Z" }, - { url = "https://files.pythonhosted.org/packages/5c/90/9c16a57f482c76d25f6379762b56bbf65c711d8158cf271fb2802cfb0640/mypy-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e583edc957cfb0deb142079162ae826f58449b116c1d442f2d91c69d9fced081", size = 16452695, upload-time = "2026-05-11T18:33:38.182Z" }, - { url = "https://files.pythonhosted.org/packages/0f/4c/215a4eeb63cacc5f17f516691ea7285d11e249802b942476bff15922a314/mypy-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b33b6cd332695bba180d55e717a79d3038e479a2c49cc5eb3d53603409b9a5d7", size = 12866622, upload-time = "2026-05-11T18:34:39.945Z" }, - { url = "https://files.pythonhosted.org/packages/4b/50/1043e1db5f455ffe4c9ab22747cd8ca2bc492b1e4f4e21b130a44ee2b217/mypy-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:4f910fe825376a7b66ef7ca8c98e5a149e8cd64c19ae71d84047a74ee060d4e6", size = 10610798, upload-time = "2026-05-11T18:36:31.444Z" }, - { url = "https://files.pythonhosted.org/packages/0d/2a/13ca1f292f6db1b98ff495ef3467736b331621c5917cad984b7043e7348d/mypy-2.1.0-py3-none-any.whl", hash = "sha256:a663814603a5c563fb87a4f96fb473eeb30d1f5a4885afcf44f9db000a366289", size = 2693302, upload-time = "2026-05-11T18:31:29.246Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/cf/dc/7e6d49f04fca40b9dd5c752a51a432ffe67fb45200702bc9eee0cb4bbb26/mypy-2.0.0.tar.gz", hash = "sha256:1a9e3900ac5c40f1fe813506c7739da6e6f0eab2729067ebd94bfb0bbba53532", size = 3869036, upload-time = "2026-05-06T19:26:43.22Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/1e/9983d2d5b5d2dc3677177bcf0fa6b25185ecf750cc0559e02199625a31c5/mypy-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:65d6f22d643bccaeb182d41d2a9f0990a05a871673c4ae3f97d4931eca0d2294", size = 14663140, upload-time = "2026-05-06T19:25:59.474Z" }, + { url = "https://files.pythonhosted.org/packages/69/bc/b4009c91d3ced13c8f406acf47bbe56365025cd21bf6585cd1e87375a708/mypy-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:106650bce72114f43019bf72197296f51c2cd47adfa9d073ea2976c247a404c5", size = 13526733, upload-time = "2026-05-06T19:22:56.425Z" }, + { url = "https://files.pythonhosted.org/packages/f0/99/2403cb0ceeb1552f70e70e779e3d0713b24f84c7ca0e9e14b2b7bc684cf0/mypy-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c734b7eb89a4cc4ec347f8187ffa730e2b59693407bc93dcb878183037f80a17", size = 13951940, upload-time = "2026-05-06T19:24:43.45Z" }, + { url = "https://files.pythonhosted.org/packages/1d/f7/4848a14c2667b6eb62841c9aeb7e1f6479613b1ef9a65564fe1f5518a35b/mypy-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd9e60388944d0f1432a2419ab938a78d5658df1d143a7172cfe1a197276cf49", size = 14833983, upload-time = "2026-05-06T19:23:16.827Z" }, + { url = "https://files.pythonhosted.org/packages/ec/28/c51831f9f1c6e46cbce765bd0a18981b84696e40bd1eea14e0a08494af44/mypy-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f95e3890666c3be41af7a7179f4872341c08e90c161ba8e7a08a21f9be92c131", size = 15135591, upload-time = "2026-05-06T19:24:32.96Z" }, + { url = "https://files.pythonhosted.org/packages/40/7f/3c25e503a94f9ec18352464551bc6c506dee2bca93c6d0e0b5568eefc269/mypy-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:e8e8709ce1b1046b8aad77a506dd01491157102dd727128c0b374b5025c7d769", size = 10983019, upload-time = "2026-05-06T19:20:30.942Z" }, + { url = "https://files.pythonhosted.org/packages/75/da/5cf833fd3b53fd4b5797e55dc16fb7efab16fddbc7205d49ff65b15d554e/mypy-2.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:0165968759c99ab79dc1a9f8aaec18e93a1bedcf7c13edd70e68dd3d5faf17cb", size = 9914165, upload-time = "2026-05-06T19:21:49.165Z" }, + { url = "https://files.pythonhosted.org/packages/8b/1e/268b81393b81d64683f670680215553e70ae92c55805915b3440080e05e4/mypy-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17b7222e9fdfd352e61fb3131da117e55cc465f701ff232f1bd97a02bbad91f", size = 14580849, upload-time = "2026-05-06T19:23:06.567Z" }, + { url = "https://files.pythonhosted.org/packages/6e/32/d159a8002d9e5c44e59ece9d641a26956c89be5b6827f819d9a9dc678c65/mypy-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc0a61adea1a5ffc2d47a4dc4bb180d8103f477fc2a90a1cdcbb168c2cc6caff", size = 13444955, upload-time = "2026-05-06T19:25:11.982Z" }, + { url = "https://files.pythonhosted.org/packages/cd/5d/3b28d5a2799591da0ee5490418e94497eaf5d701e42d8b001b5e17a9b3d6/mypy-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8578f857b519993d065e5805290b71467ebfae772407a5f57e823755e4fdb850", size = 13873124, upload-time = "2026-05-06T19:20:39.684Z" }, + { url = "https://files.pythonhosted.org/packages/60/23/f40f723955617b814d5ddc1154d8938b77aaf6926c2dbf72846e8943a0b7/mypy-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:33f668a37a650df60f7b825c1ac61e6baadd4ac3c89519e929badde58d28edf5", size = 14748822, upload-time = "2026-05-06T19:25:30.972Z" }, + { url = "https://files.pythonhosted.org/packages/d6/16/eded971224a483e422a141ffd580c00e1b919df8e529f06d03a4a987878c/mypy-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29ea6da86c8c5e9addd48fa6e624f467341b3814f54ded871b28980468686dea", size = 14992675, upload-time = "2026-05-06T19:23:34.511Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6a/1cbd7290f00b4dbaa4c4502e53ac05645ea635e4d1e3dcd42687c2fc39cd/mypy-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:904baa0124ebbccf0c7ba94f722cf9186ee30478f5e5b11432ffc8929248ee55", size = 10983628, upload-time = "2026-05-06T19:26:39.48Z" }, + { url = "https://files.pythonhosted.org/packages/83/3f/8caa9bcc2636cd512642050747466b695fa2540d7040544fd7ddb721d671/mypy-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:440165501295e523bf1e5d3e411b62b367b901c65610938e75f0e56ba0462461", size = 9906041, upload-time = "2026-05-06T19:24:03.199Z" }, + { url = "https://files.pythonhosted.org/packages/f6/4b/f6cd12ef1eb63be1c342da3e8ca811d2280276177f6de4ef20cb2366d79b/mypy-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:660790551c988e69d8bf7a35c8b4149edeb22f4a339165702be843532e9dcdb5", size = 14756610, upload-time = "2026-05-06T19:26:19.221Z" }, + { url = "https://files.pythonhosted.org/packages/32/73/67d09ca28bee21feaca264b2a680cf2d300bcc2071136ad064928324c843/mypy-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7a15bf92cd8781f8e72f69ffa7e30d1f434402d065ee1ecd5223ef2ef100f914", size = 13554270, upload-time = "2026-05-06T19:26:08.977Z" }, + { url = "https://files.pythonhosted.org/packages/61/b3/44718b5c6b1b5a27440ff2effe6a1be0fa2a190c0f4e2e21a83728416f95/mypy-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ff370b43d7def05bbcd2f5267f0bcda72dd6a552ef2ea9375b02d6fe06da270", size = 13924663, upload-time = "2026-05-06T19:21:24.932Z" }, + { url = "https://files.pythonhosted.org/packages/6a/2b/bbb9cc5773f946846a7c340097e59bcf84095437dda0d56bb4f6cf1f6541/mypy-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:37bd246590a018e5a11703b7b09c39d47ede3df5ba3fa863c5b8590b465beb01", size = 14946862, upload-time = "2026-05-06T19:24:23.023Z" }, + { url = "https://files.pythonhosted.org/packages/43/25/e9318566f443a5130b4ff0ad3367ee6c4c4c49ff083fe5214a7318c18282/mypy-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cce87e92214fac8bf8feb8a680d0c1b6fb748d50e9b57fbb13e4b1d83a3ed19b", size = 15175090, upload-time = "2026-05-06T19:26:28.794Z" }, + { url = "https://files.pythonhosted.org/packages/67/65/2ec28c834f21e164c33bc296a7db538ad50c74f83e517c7a0be95ff6de86/mypy-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:e19e9cb69b66a4141009d24898259914fa2b71d026de0b46edf9fafdbf4fd46e", size = 11052899, upload-time = "2026-05-06T19:25:39.084Z" }, + { url = "https://files.pythonhosted.org/packages/9e/72/d1ec625cfc9bd101c07a6834ef1f94e820296f8fdbad2eb03f50e0983f8c/mypy-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:b021614cb08d44785b025982163ec3c39c94bff766ead071fa9e82b4ef6f62cd", size = 9972935, upload-time = "2026-05-06T19:23:24.204Z" }, + { url = "https://files.pythonhosted.org/packages/e5/c6/996a1e535e5d0d597c3b1460fc962733091f885f312e749350eb2ac10965/mypy-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ef5f581b61240d1cc629b12f8df6565ed6ffac0d82ed745eef7833222ab50b9", size = 14737259, upload-time = "2026-05-06T19:20:23.081Z" }, + { url = "https://files.pythonhosted.org/packages/94/c5/0f9460e26b77f434bd53f47d1ce32a3cd4580c92a5331fa5dfc059f9421a/mypy-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20e3470a165dbc249bdfbe8d1c5172727ef22688cffc279f8c3aa264ab9d4d9a", size = 13538377, upload-time = "2026-05-06T19:21:08.804Z" }, + { url = "https://files.pythonhosted.org/packages/b2/3e/8ea2f8dd1e5c9c279fb3c28193bdb850adf4d3d8172880abad829eced609/mypy-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224ba142eee8b4d65d4db657cb1fc22abec30b135ded6ab297302ba1f62e505d", size = 13914264, upload-time = "2026-05-06T19:24:12.875Z" }, + { url = "https://files.pythonhosted.org/packages/be/ce/78bd3b8520f676acee9dab48ea71473e68f6d5cf14b59fbd800bea50a92b/mypy-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e879ad8a03908ff74d15e8a9b42bf049918e6798d52c011011f1873d0b5877e", size = 14926761, upload-time = "2026-05-06T19:20:12.846Z" }, + { url = "https://files.pythonhosted.org/packages/61/ef/b52fa340522da3d22e669117c3b83155c2660f7cdc035856958fbfffb224/mypy-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:65c5c15bcbd18d6fe927cc55c459597a3517d69cc3123f067be3b020010e115e", size = 15157014, upload-time = "2026-05-06T19:25:49.78Z" }, + { url = "https://files.pythonhosted.org/packages/7a/0c/dde7614250c6d017936c7aa3bb63b9b52c7cfd298d3f1be9be45f307870b/mypy-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:d1a068acd7c9fb77e9f8923f1556f2f49d6d7895821121b8d97fa5642b9c52f5", size = 11067049, upload-time = "2026-05-06T19:21:16.116Z" }, + { url = "https://files.pythonhosted.org/packages/27/ec/1d6af4830a94a285442db19caa02f160cc1a255e4f324eec5458e6c2bafb/mypy-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:ef9d96da1ddffbc21f27d3939319b6846d12393baa17c4d2f3e81e040e73ce2c", size = 9967903, upload-time = "2026-05-06T19:22:15.52Z" }, + { url = "https://files.pythonhosted.org/packages/ce/2c/6fefe954207860aed6eeb91776795e64a257d3ce0360862288984ce121f5/mypy-2.0.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c918c64e8ce36557851b0347f84eb12f1965d3a06813c36df253eb0c0afd1d82", size = 14729633, upload-time = "2026-05-06T19:24:53.383Z" }, + { url = "https://files.pythonhosted.org/packages/23/d6/d336f5b820af189eb0390cce21de62d264c0a4e64713dfbe81bfc4fc7739/mypy-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:301f1a8ccc7d79b542ee218b28bb49443a83e194eb3d10da63ff1649e5aa5d34", size = 13559524, upload-time = "2026-05-06T19:22:24.906Z" }, + { url = "https://files.pythonhosted.org/packages/af/a6/d7bb54fde1770f0484e5fbdbdce37a41e95ed0a1cd493ec60ead111e356c/mypy-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fdf4ef489d44ce350bac3fd699907834e551d4c934e9cc862ef201215ab1558d", size = 13936018, upload-time = "2026-05-06T19:25:02.992Z" }, + { url = "https://files.pythonhosted.org/packages/7d/ba/5be51316b91e6a6bf6e3a8adb3de500e7e1fb5bf9491743b8cbc81a34a2c/mypy-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cde2d0989f912fc850890f727d0d76495e7a6c5bdd9912a1efdb64952b4398d", size = 14910712, upload-time = "2026-05-06T19:25:21.83Z" }, + { url = "https://files.pythonhosted.org/packages/b7/37/e2c8c3b373e20ebfb66e6c83a99027fd67df4ec43b08879f74e822d2dc4c/mypy-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cdf05693c231a14fe37dbfce192a3a1372c26a833af4a80f550547742952e719", size = 15141499, upload-time = "2026-05-06T19:20:50.924Z" }, + { url = "https://files.pythonhosted.org/packages/12/36/07756f933e00416d912e35878cfcf89a593a3350a885691c0bb85ae0226a/mypy-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:73aee2da33a2237e66cbe84a94780e53599847e86bb3aa7b93e405e8cd9905f2", size = 11240511, upload-time = "2026-05-06T19:21:32.39Z" }, + { url = "https://files.pythonhosted.org/packages/70/05/79ac1f20f2397353f3845f7b8bb5d8006cda7c8ef9092f04f9de3c6135f2/mypy-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:1f6dcd8f39971f41edab2728c877c4ac8b50ad3c387ff2770423b79a05d23910", size = 10149336, upload-time = "2026-05-06T19:22:08.383Z" }, + { url = "https://files.pythonhosted.org/packages/53/e0/0db84e0ebbad6e99e566c68e4b465784f2a2294f7719e8db9d509ef23087/mypy-2.0.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a04e980b9275c76159da66c6e1723c7798306f9802b31bdaf9358d0c84030ce8", size = 15797362, upload-time = "2026-05-06T19:22:00.835Z" }, + { url = "https://files.pythonhosted.org/packages/0a/a4/14cc0768164dd53bec48aa41a20270b18df9bf72aa5054278bf133608315/mypy-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:33f9cf4825469b2bc73c53ba55f6d9a9b4cdb60f9e6e228745581520f29b8771", size = 14635914, upload-time = "2026-05-06T19:23:43.675Z" }, + { url = "https://files.pythonhosted.org/packages/08/48/d866a3e23b4dc5974c77d9cf65a435bf22de01a84dd4620917950e233960/mypy-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191675c3c7dc2a5c7722a035a6909c277f14046c5e4e02aa5fbf65f8524f08ad", size = 15270866, upload-time = "2026-05-06T19:22:34.756Z" }, + { url = "https://files.pythonhosted.org/packages/71/eb/de9ef94958eb2078a6b908ceb247757dc384d3a238d3bd6ed7d81de5eaf8/mypy-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c3d26c4321a3b06fc9f04c741e0733af693f82d823f8e64e47b2e63b7f19fa84", size = 16093131, upload-time = "2026-05-06T19:23:56.541Z" }, + { url = "https://files.pythonhosted.org/packages/ad/07/0ab2c1a9d26e90942612724cbd5788f16b7810c5dd39bfcf79286c6c4524/mypy-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bbcbc4d5917ca6ce12de70e051de7f533e3bf92d548b41a38a2232a6fe356525", size = 16330685, upload-time = "2026-05-06T19:21:42.037Z" }, + { url = "https://files.pythonhosted.org/packages/a6/8f/46f85d1371a5be642dad263828118ae1efd536d91d8bd2000c68acff3920/mypy-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:dbc6ba6d40572ae49268531565793a8f07eac7fc65ad76d482c9b4c8765b6043", size = 12752017, upload-time = "2026-05-06T19:22:44.002Z" }, + { url = "https://files.pythonhosted.org/packages/7a/e6/94ca48800cac19eb28a58188a768aaec0d16cac0f373915f073058ab0855/mypy-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:77926029dfcb7e1a3ecb0acb2ddbb24ca36be03f7d623e1759ad5376be8f6c01", size = 10527097, upload-time = "2026-05-06T19:20:58.973Z" }, + { url = "https://files.pythonhosted.org/packages/5c/14/fd0694aa594d6e9f9fd16ce821be2eff295197a273262ef56ddcc1388d68/mypy-2.0.0-py3-none-any.whl", hash = "sha256:8a92b2be3146b4fa1f062af7eb05574cbf3e6eb8e1f14704af1075423144e4e5", size = 2673434, upload-time = "2026-05-06T19:26:32.856Z" }, ] [[package]] @@ -2679,7 +2679,7 @@ wheels = [ [[package]] name = "requests" -version = "2.34.0" +version = "2.33.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, @@ -2687,9 +2687,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/43/b8/7a707d60fea4c49094e40262cc0e2ca6c768cca21587e34d3f705afec47e/requests-2.34.0.tar.gz", hash = "sha256:7d62fe92f50eb82c529b0916bb445afa1531a566fc8f35ffdc64446e771b856a", size = 142436, upload-time = "2026-05-11T19:29:51.717Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.whl", hash = "sha256:917520a21b767485ce7c588f4ebb917c436b24a31231b44228715eaeb5a52c60", size = 73021, upload-time = "2026-05-11T19:29:49.923Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" }, ] [[package]] @@ -3180,7 +3180,7 @@ provides-extras = ["mcp", "benchmark", "dev"] [[package]] name = "sentence-transformers" -version = "5.5.0" +version = "5.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, @@ -3195,9 +3195,9 @@ dependencies = [ { name = "transformers" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2c/27/16d127a61303e05847d878b23687f3371868c76e738557fa80b4373a8c2b/sentence_transformers-5.5.0.tar.gz", hash = "sha256:9cec675e68bfe09d07466d1f13ab06d1d79d60a0f45b154baf433bde6ae159cb", size = 444908, upload-time = "2026-05-12T14:05:42.383Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4d/68/7f98c221940ce783b492ad6140384daf2e2918cd7175009d6a362c22b9ee/sentence_transformers-5.4.1.tar.gz", hash = "sha256:436bcb1182a0ff42a8fb2b1c43498a70d0a75b688d182f2cd0d1dd115af61ddc", size = 428910, upload-time = "2026-04-14T13:34:59.006Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/55/20/18416624bcbae866ec0b111979766cebabe8e5ff7563ab953ecbaf3ff9e7/sentence_transformers-5.5.0-py3-none-any.whl", hash = "sha256:75313fdcc2397ec4b58297c25d6187fcca5a6b2aeb09570a72eff5a3223d8d58", size = 588665, upload-time = "2026-05-12T14:05:40.899Z" }, + { url = "https://files.pythonhosted.org/packages/c5/d9/3a9b6f2ccdedc9dc00fe37b2fc58f58f8efbff44565cf4bf39d8568bb13a/sentence_transformers-5.4.1-py3-none-any.whl", hash = "sha256:a6d640fc363849b63affb8e140e9d328feabab86f83d58ac3e16b1c28140b790", size = 571311, upload-time = "2026-04-14T13:34:57.731Z" }, ] [[package]] @@ -3238,15 +3238,15 @@ wheels = [ [[package]] name = "sse-starlette" -version = "3.4.4" +version = "3.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "starlette" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f7/2b/58abc2d1fd397e7dde08e947e05c884d8ef2f78d5e2588c17a12d42d6994/sse_starlette-3.4.4.tar.gz", hash = "sha256:07e0fa0460138baf25cdd5fb28683472c3995dc1642225191b3832d62526bcb0", size = 31819, upload-time = "2026-05-12T17:37:17.019Z" } +sdist = { url = "https://files.pythonhosted.org/packages/38/82/10cdfab4ab663a6b6bd624d33f55b2cfa41af5105be033a6d5d135a92c5f/sse_starlette-3.4.2.tar.gz", hash = "sha256:2f9a7f51ed84395a0427fb9f66cb1ec11f7899d977a72cbc9070b962a2e14489", size = 35236, upload-time = "2026-05-06T19:42:13.727Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/67/805710444ea8cc75fbf70b920ed431a560c4bf9c57f7d5a3117213189399/sse_starlette-3.4.4-py3-none-any.whl", hash = "sha256:3f4dd50d8aed2771a091f3a83000323fc3844541c16b4fe585ae2420cc6df973", size = 16514, upload-time = "2026-05-12T17:37:15.601Z" }, + { url = "https://files.pythonhosted.org/packages/c1/27/351c71e803c56090d8d3bf9520422debeb8ed938871fd4f7ef519805a6c5/sse_starlette-3.4.2-py3-none-any.whl", hash = "sha256:6ea5d35b7ce979a3de5a0db5f77fe886b1616e4b3e1ad93fba502bd9b5fb662f", size = 16516, upload-time = "2026-05-06T19:42:12.201Z" }, ] [[package]] @@ -3681,7 +3681,7 @@ wheels = [ [[package]] name = "virtualenv" -version = "21.3.2" +version = "21.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, @@ -3690,9 +3690,9 @@ dependencies = [ { name = "python-discovery" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/69/e1/665267cea4767debd19f584667a9197c2098b5e7f67a502da9f3a086ab37/virtualenv-21.3.2.tar.gz", hash = "sha256:3ecda97894a6fc1c53106356f488690e5c86278c1f693f3fc0805ac85a513686", size = 7613810, upload-time = "2026-05-12T14:44:18.01Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/0d/915c02c94d207b85580eb09bffab54438a709e7288524094fe781da526c2/virtualenv-21.3.1.tar.gz", hash = "sha256:c2305bc1fddeec40699b8370d13f8d431b0701f00ce895061ce493aeded4426b", size = 7613791, upload-time = "2026-05-05T01:34:31.402Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl", hash = "sha256:c58ea748fa50bb2a4367da5ba3d30b02458ed40b4ea888faad94021f3309f764", size = 7594558, upload-time = "2026-05-12T14:44:15.193Z" }, + { url = "https://files.pythonhosted.org/packages/b1/4f/f71e641e504111a5a74e3a20bc52d01bd86788b22699dd3fee1c63253cf6/virtualenv-21.3.1-py3-none-any.whl", hash = "sha256:d1a71cf58f2f9228fff23a1f6ec15d39785c6b32e03658d104974247145edd35", size = 7594539, upload-time = "2026-05-05T01:34:28.98Z" }, ] [[package]] From f55433389b78d80a8e8faa92805e63ee321a4daf Mon Sep 17 00:00:00 2001 From: Pringled Date: Mon, 18 May 2026 13:22:38 +0200 Subject: [PATCH 4/8] Update test --- tests/test_file_walker.py | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/tests/test_file_walker.py b/tests/test_file_walker.py index 07b79ff..ce196a2 100644 --- a/tests/test_file_walker.py +++ b/tests/test_file_walker.py @@ -56,6 +56,20 @@ def _touch(path: Path, content: str = "x = 1\n") -> None: "out/*\n!out/deep/keep.py\n", set(), ), + # Explicit file negation bypasses extension filter: !special.kjs is yielded even if .kjs is not in extensions. + ( + ["special.kjs", "other.kjs", "main.py"], + None, + "*.kjs\n!special.kjs\n", + {"main.py", "special.kjs"}, + ), + # Directory negation does NOT bypass extension filter: files inside vendor/ still need a matching extension. + ( + ["vendor/special.kjs", "vendor/main.py"], + None, + "*\n!vendor/\n", + {"vendor/main.py"}, + ), ], ) def test_walk_files_filtering( @@ -124,27 +138,6 @@ def test_is_ignored_skips_spec_with_unrelated_base(tmp_path: Path) -> None: assert ignored is True -def test_walk_files_explicit_include_bypasses_extension_filter(tmp_path: Path) -> None: - """A file explicitly un-ignored via a negation pattern is yielded even if its extension is not in the list.""" - _touch(tmp_path / "special.kjs") - _touch(tmp_path / "other.kjs") - _touch(tmp_path / "main.py") - (tmp_path / ".sembleignore").write_text("*.kjs\n!special.kjs\n") - - found = {p.relative_to(tmp_path).as_posix() for p in walk_files(tmp_path, [".py"])} - assert found == {"main.py", "special.kjs"} - - -def test_walk_files_directory_include_keeps_extension_filter(tmp_path: Path) -> None: - """A directory negation allows traversal but does not include unsupported files.""" - _touch(tmp_path / "vendor" / "special.kjs") - _touch(tmp_path / "vendor" / "main.py") - (tmp_path / ".sembleignore").write_text("*\n!vendor/\n") - - found = {p.relative_to(tmp_path).as_posix() for p in walk_files(tmp_path, [".py"])} - assert found == {"vendor/main.py"} - - def test_walk_files_skips_symlinks(tmp_path: Path) -> None: """Symlinked files and directories are skipped; real paths are still walked.""" # Real directory with a file From 96a634075dc96569e2d4bd8ac103ed3e2e705f7d Mon Sep 17 00:00:00 2001 From: Pringled Date: Mon, 18 May 2026 13:37:39 +0200 Subject: [PATCH 5/8] Fix even more things --- src/semble/index/file_walker.py | 11 ++++++----- tests/test_file_walker.py | 7 +++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/semble/index/file_walker.py b/src/semble/index/file_walker.py index 3446418..4a6fbc5 100644 --- a/src/semble/index/file_walker.py +++ b/src/semble/index/file_walker.py @@ -94,11 +94,12 @@ def _is_ignored(path: Path, specs: list[IgnoreSpec]) -> tuple[bool, bool]: if pattern.match_file(relative_str) is not None: ignored = pattern.include - # Only set found for file-specific negation patterns. Directory - # patterns (e.g. !vendor/) un-ignore the directory but should not - # bypass extension filtering for individual files inside it. - pat = pattern.pattern - found = not ignored and not (isinstance(pat, str) and pat.rstrip().endswith("/")) + # Bypass extension filter only for negation patterns with a file + # extension suffix (e.g. !special.kjs, !*.py). Patterns without + # a suffix (e.g. !vendor/, !.github/*) target directories or + # broad globs and should not bypass extension filtering. + pat = pattern.pattern or "" + found = not ignored and bool(Path(pat.rstrip("/")).suffix) return ignored, found diff --git a/tests/test_file_walker.py b/tests/test_file_walker.py index ce196a2..184293b 100644 --- a/tests/test_file_walker.py +++ b/tests/test_file_walker.py @@ -63,6 +63,13 @@ def _touch(path: Path, content: str = "x = 1\n") -> None: "*.kjs\n!special.kjs\n", {"main.py", "special.kjs"}, ), + # Glob negation without suffix does NOT bypass extension filter. + ( + [".github/workflows/ci.yaml", "src/main.py"], + None, + "!.github/*\n", + {"src/main.py"}, + ), # Directory negation does NOT bypass extension filter: files inside vendor/ still need a matching extension. ( ["vendor/special.kjs", "vendor/main.py"], From 394ef8d7a247efd2a6728546581c7176161688ee Mon Sep 17 00:00:00 2001 From: Pringled Date: Mon, 18 May 2026 13:42:46 +0200 Subject: [PATCH 6/8] Remove file --- .../results/semble-hybrid-1ef37271eb84.json | 1396 ----------------- 1 file changed, 1396 deletions(-) delete mode 100644 benchmarks/results/semble-hybrid-1ef37271eb84.json diff --git a/benchmarks/results/semble-hybrid-1ef37271eb84.json b/benchmarks/results/semble-hybrid-1ef37271eb84.json deleted file mode 100644 index f7b0505..0000000 --- a/benchmarks/results/semble-hybrid-1ef37271eb84.json +++ /dev/null @@ -1,1396 +0,0 @@ -{ - "tool": "semble-hybrid", - "model": "minishlab/potion-code-16M", - "summary": { - "ndcg10": 0.8529, - "tokens": 3196.0, - "p50_ms": 1.156, - "p90_ms": 4.811, - "p95_ms": 5.389, - "p99_ms": 6.275, - "index_ms": 483.3, - "by_category": { - "architecture": 0.802, - "semantic": 0.8447, - "symbol": 0.9594 - } - }, - "by_language": { - "bash": { - "repos": 3, - "tokens": 2828.0, - "ndcg10": 0.8443, - "p50_ms": 0.517, - "p90_ms": 0.578, - "p95_ms": 0.61, - "p99_ms": 0.622, - "index_ms": 135.0 - }, - "c": { - "repos": 3, - "tokens": 3163.0, - "ndcg10": 0.7421, - "p50_ms": 0.728, - "p90_ms": 0.82, - "p95_ms": 0.829, - "p99_ms": 0.886, - "index_ms": 1467.7 - }, - "cpp": { - "repos": 3, - "tokens": 2991.0, - "ndcg10": 0.895, - "p50_ms": 0.762, - "p90_ms": 8.017, - "p95_ms": 9.19, - "p99_ms": 9.698, - "index_ms": 1474.5 - }, - "csharp": { - "repos": 3, - "tokens": 2654.0, - "ndcg10": 0.8823, - "p50_ms": 4.986, - "p90_ms": 6.4, - "p95_ms": 7.286, - "p99_ms": 8.393, - "index_ms": 436.2 - }, - "elixir": { - "repos": 3, - "tokens": 5811.0, - "ndcg10": 0.8951, - "p50_ms": 0.508, - "p90_ms": 4.634, - "p95_ms": 5.023, - "p99_ms": 5.434, - "index_ms": 196.0 - }, - "go": { - "repos": 3, - "tokens": 3673.0, - "ndcg10": 0.8907, - "p50_ms": 0.551, - "p90_ms": 3.889, - "p95_ms": 4.207, - "p99_ms": 5.422, - "index_ms": 153.1 - }, - "haskell": { - "repos": 3, - "tokens": 3147.0, - "ndcg10": 0.745, - "p50_ms": 1.894, - "p90_ms": 7.13, - "p95_ms": 8.291, - "p99_ms": 10.316, - "index_ms": 501.4 - }, - "java": { - "repos": 3, - "tokens": 3186.0, - "ndcg10": 0.8534, - "p50_ms": 0.946, - "p90_ms": 9.775, - "p95_ms": 11.708, - "p99_ms": 13.185, - "index_ms": 949.3 - }, - "javascript": { - "repos": 3, - "tokens": 2825.0, - "ndcg10": 0.8977, - "p50_ms": 0.427, - "p90_ms": 1.685, - "p95_ms": 1.759, - "p99_ms": 2.693, - "index_ms": 34.8 - }, - "kotlin": { - "repos": 3, - "tokens": 4085.0, - "ndcg10": 0.8197, - "p50_ms": 1.318, - "p90_ms": 6.02, - "p95_ms": 6.349, - "p99_ms": 7.093, - "index_ms": 231.9 - }, - "lua": { - "repos": 3, - "tokens": 3202.0, - "ndcg10": 0.8368, - "p50_ms": 0.542, - "p90_ms": 0.589, - "p95_ms": 0.665, - "p99_ms": 1.496, - "index_ms": 348.2 - }, - "php": { - "repos": 3, - "tokens": 2713.0, - "ndcg10": 0.8611, - "p50_ms": 0.77, - "p90_ms": 6.084, - "p95_ms": 6.121, - "p99_ms": 6.237, - "index_ms": 704.9 - }, - "python": { - "repos": 9, - "tokens": 3075.0, - "ndcg10": 0.8642, - "p50_ms": 0.466, - "p90_ms": 3.502, - "p95_ms": 3.828, - "p99_ms": 4.288, - "index_ms": 146.5 - }, - "ruby": { - "repos": 3, - "tokens": 2685.0, - "ndcg10": 0.9059, - "p50_ms": 0.514, - "p90_ms": 4.334, - "p95_ms": 5.31, - "p99_ms": 5.666, - "index_ms": 105.3 - }, - "rust": { - "repos": 3, - "tokens": 3248.0, - "ndcg10": 0.8553, - "p50_ms": 0.77, - "p90_ms": 5.578, - "p95_ms": 6.256, - "p99_ms": 7.113, - "index_ms": 493.4 - }, - "scala": { - "repos": 3, - "tokens": 3000.0, - "ndcg10": 0.9091, - "p50_ms": 2.249, - "p90_ms": 5.153, - "p95_ms": 6.363, - "p99_ms": 7.345, - "index_ms": 378.7 - }, - "swift": { - "repos": 3, - "tokens": 2946.0, - "ndcg10": 0.8599, - "p50_ms": 1.332, - "p90_ms": 4.855, - "p95_ms": 5.553, - "p99_ms": 6.351, - "index_ms": 184.2 - }, - "typescript": { - "repos": 3, - "tokens": 2868.0, - "ndcg10": 0.7128, - "p50_ms": 3.191, - "p90_ms": 5.513, - "p95_ms": 5.806, - "p99_ms": 7.939, - "index_ms": 460.4 - }, - "zig": { - "repos": 3, - "tokens": 2857.0, - "ndcg10": 0.9113, - "p50_ms": 0.866, - "p90_ms": 9.466, - "p95_ms": 10.35, - "p99_ms": 13.023, - "index_ms": 1454.6 - } - }, - "repos": [ - { - "repo": "abseil-cpp", - "language": "cpp", - "mode": "hybrid", - "chunks": 8604, - "tokens": 2987, - "ndcg5": 0.9002968226739917, - "ndcg10": 0.9099681428548552, - "p50_ms": 1.2746875290758908, - "p90_ms": 18.870687839807943, - "p95_ms": 19.314839542494155, - "p99_ms": 20.57400071818847, - "index_ms": 3788.858167012222, - "by_category": { - "architecture": 1.0, - "semantic": 0.9132908571398067, - "symbol": 0.8333333333333334 - } - }, - { - "repo": "aeson", - "language": "haskell", - "mode": "hybrid", - "chunks": 393, - "tokens": 3731, - "ndcg5": 0.7420624189796883, - "ndcg10": 0.7619528590399762, - "p50_ms": 4.345353983808309, - "p90_ms": 8.78784200176597, - "p95_ms": 11.002091973205102, - "p99_ms": 16.898551174090233, - "index_ms": 172.85270802676678, - "by_category": { - "architecture": 0.5896918237758785, - "semantic": 0.8193732041280086 - } - }, - { - "repo": "aiohttp", - "language": "python", - "mode": "hybrid", - "chunks": 746, - "tokens": 3007, - "ndcg5": 0.8208189387032997, - "ndcg10": 0.857392320967274, - "p50_ms": 0.5606249906122684, - "p90_ms": 4.290167009457946, - "p95_ms": 4.86554199596867, - "p99_ms": 5.764141201507301, - "index_ms": 242.50729096820578, - "by_category": { - "architecture": 0.888343919545452, - "semantic": 0.7540923670549543, - "symbol": 1.0 - } - }, - { - "repo": "alamofire", - "language": "swift", - "mode": "hybrid", - "chunks": 655, - "tokens": 3131, - "ndcg5": 0.9635059068184884, - "ndcg10": 0.9635059068184884, - "p50_ms": 0.592937518376857, - "p90_ms": 4.483936890028418, - "p95_ms": 4.885431248112583, - "p99_ms": 5.889486262458375, - "index_ms": 234.74458401324227, - "by_category": { - "architecture": 0.9732402630493958, - "semantic": 0.94094521338378, - "symbol": 1.0 - } - }, - { - "repo": "axios", - "language": "javascript", - "mode": "hybrid", - "chunks": 168, - "tokens": 2420, - "ndcg5": 0.8587075709912144, - "ndcg10": 0.8696279428321226, - "p50_ms": 0.5746875249315053, - "p90_ms": 2.5875127932522446, - "p95_ms": 2.5953999866032973, - "p99_ms": 2.6850800059037283, - "index_ms": 59.68175001908094, - "by_category": { - "architecture": 0.6030687082608802, - "semantic": 0.9308017017042276, - "symbol": 1.0 - } - }, - { - "repo": "axum", - "language": "rust", - "mode": "hybrid", - "chunks": 515, - "tokens": 3235, - "ndcg5": 0.7517782560805999, - "ndcg10": 0.7826029997030854, - "p50_ms": 0.5967084725853056, - "p90_ms": 4.248862492386252, - "p95_ms": 4.458437455468813, - "p99_ms": 6.209287515957837, - "index_ms": 181.65166699327528, - "by_category": { - "architecture": 0.663762511293996, - "semantic": 0.8348152134004999, - "symbol": 0.7718216255952429 - } - }, - { - "repo": "bash-it", - "language": "bash", - "mode": "hybrid", - "chunks": 735, - "tokens": 2426, - "ndcg5": 0.643538201019909, - "ndcg10": 0.6852833164833028, - "p50_ms": 0.7782710017636418, - "p90_ms": 0.8988163259346039, - "p95_ms": 0.9753389342222363, - "p99_ms": 0.9779678110498935, - "index_ms": 299.61779102450237, - "by_category": { - "architecture": 1.0, - "semantic": 0.631798727688293, - "symbol": 0.6984565739436487 - } - }, - { - "repo": "bats-core", - "language": "bash", - "mode": "hybrid", - "chunks": 48, - "tokens": 2986, - "ndcg5": 0.8477197786179612, - "ndcg10": 0.8477197786179612, - "p50_ms": 0.3793749783653766, - "p90_ms": 0.404746166896075, - "p95_ms": 0.40851520316209644, - "p99_ms": 0.43786943133454764, - "index_ms": 16.550500004086643, - "by_category": { - "architecture": 0.6703622950309012, - "semantic": 0.9432199620879166 - } - }, - { - "repo": "cats", - "language": "scala", - "mode": "hybrid", - "chunks": 1262, - "tokens": 2797, - "ndcg5": 0.9113147192765458, - "ndcg10": 0.9113147192765458, - "p50_ms": 2.2390420199371874, - "p90_ms": 5.898645322304223, - "p95_ms": 8.303690218599513, - "p99_ms": 8.919004440540446, - "index_ms": 615.2757909731008, - "by_category": { - "architecture": 0.8065735963827292, - "semantic": 0.9, - "symbol": 1.0 - } - }, - { - "repo": "chi", - "language": "go", - "mode": "hybrid", - "chunks": 263, - "tokens": 2603, - "ndcg5": 0.8205558097806902, - "ndcg10": 0.853282094626217, - "p50_ms": 0.6015210237819701, - "p90_ms": 2.915516699431464, - "p95_ms": 3.020809791632928, - "p99_ms": 3.071328357909806, - "index_ms": 97.81854198081419, - "by_category": { - "architecture": 0.6828696993548315, - "semantic": 0.9589921948412731, - "symbol": 0.8769765845238192 - } - }, - { - "repo": "circe", - "language": "scala", - "mode": "hybrid", - "chunks": 197, - "tokens": 3207, - "ndcg5": 0.8591297799361982, - "ndcg10": 0.8591297799361982, - "p50_ms": 0.5369999562390149, - "p90_ms": 4.279075376689433, - "p95_ms": 5.2525589242577535, - "p99_ms": 5.9174782037734985, - "index_ms": 93.85795798152685, - "by_category": { - "architecture": 0.7261859507142916, - "semantic": 0.8811396422923916, - "symbol": 1.0 - } - }, - { - "repo": "click", - "language": "python", - "mode": "hybrid", - "chunks": 315, - "tokens": 3388, - "ndcg5": 1.0, - "ndcg10": 1.0, - "p50_ms": 0.40458349394612014, - "p90_ms": 3.2604664098471403, - "p95_ms": 3.3521981647936627, - "p99_ms": 3.3602724078809842, - "index_ms": 98.5586250317283, - "by_category": { - "architecture": 1.0, - "semantic": 1.0, - "symbol": 1.0 - } - }, - { - "repo": "cobra", - "language": "go", - "mode": "hybrid", - "chunks": 398, - "tokens": 5293, - "ndcg5": 0.9590790148145552, - "ndcg10": 0.9590790148145552, - "p50_ms": 0.5218964943196625, - "p90_ms": 5.0319077097810805, - "p95_ms": 5.380845497711565, - "p99_ms": 8.924535496043967, - "index_ms": 138.25779099715874, - "by_category": { - "architecture": 1.0, - "semantic": 0.9255982087537366, - "symbol": 1.0 - } - }, - { - "repo": "commons-lang", - "language": "java", - "mode": "hybrid", - "chunks": 3176, - "tokens": 3252, - "ndcg5": 0.8696123574829959, - "ndcg10": 0.8958857274902101, - "p50_ms": 0.7442089845426381, - "p90_ms": 11.881292040925473, - "p95_ms": 16.55699999537319, - "p99_ms": 17.091566394083202, - "index_ms": 1011.1169579904526, - "by_category": { - "architecture": 0.7216293209723186, - "semantic": 0.9034794510269613, - "symbol": 1.0 - } - }, - { - "repo": "curl", - "language": "c", - "mode": "hybrid", - "chunks": 4485, - "tokens": 2977, - "ndcg5": 0.6059541823122645, - "ndcg10": 0.7042297304400422, - "p50_ms": 0.7807915098965168, - "p90_ms": 0.8694411197211593, - "p95_ms": 0.8753961708862336, - "p99_ms": 0.9453792555723338, - "index_ms": 1471.200708008837, - "by_category": { - "architecture": 0.6509413349725708, - "semantic": 0.7478293267316096 - } - }, - { - "repo": "dapper", - "language": "csharp", - "mode": "hybrid", - "chunks": 422, - "tokens": 2497, - "ndcg5": 0.8574356157188727, - "ndcg10": 0.8741022823855396, - "p50_ms": 3.2964999845717102, - "p90_ms": 4.690729797584939, - "p95_ms": 6.36416074994486, - "p99_ms": 8.216565721086223, - "index_ms": 175.34208303550258, - "by_category": { - "architecture": 0.7217132018086354, - "semantic": 0.8919379108058652, - "symbol": 1.0 - } - }, - { - "repo": "ecto", - "language": "elixir", - "mode": "hybrid", - "chunks": 764, - "tokens": 5419, - "ndcg5": 0.8890941716165459, - "ndcg10": 0.9078419183064419, - "p50_ms": 0.4859999753534794, - "p90_ms": 6.374892208259553, - "p95_ms": 6.677291693631559, - "p99_ms": 6.959291941020638, - "index_ms": 284.1236660024151, - "by_category": { - "architecture": 1.0, - "semantic": 0.8936974380193028, - "symbol": 0.8769765845238192 - } - }, - { - "repo": "exposed", - "language": "kotlin", - "mode": "hybrid", - "chunks": 748, - "tokens": 2910, - "ndcg5": 0.6721248511673115, - "ndcg10": 0.7154638415285817, - "p50_ms": 0.8599789580330253, - "p90_ms": 5.716424377169461, - "p95_ms": 6.22687915165443, - "p99_ms": 6.28964222560171, - "index_ms": 256.928666960448, - "by_category": { - "architecture": 0.6547543623015969, - "semantic": 0.6675009816904887, - "symbol": 1.0 - } - }, - { - "repo": "express", - "language": "javascript", - "mode": "hybrid", - "chunks": 52, - "tokens": 3222, - "ndcg5": 0.8828459250958742, - "ndcg10": 0.9097317116419653, - "p50_ms": 0.303854001685977, - "p90_ms": 0.33322080271318555, - "p95_ms": 0.43520597100723674, - "p99_ms": 1.90387481881771, - "index_ms": 17.993958026636392, - "by_category": { - "architecture": 0.8135191761199004, - "semantic": 0.95, - "symbol": 1.0 - } - }, - { - "repo": "fastapi", - "language": "python", - "mode": "hybrid", - "chunks": 602, - "tokens": 2771, - "ndcg5": 0.7720650033558547, - "ndcg10": 0.8110148544315884, - "p50_ms": 0.48660399625077844, - "p90_ms": 3.658462798921392, - "p95_ms": 4.097402046318166, - "p99_ms": 4.453113199560902, - "index_ms": 187.48650001361966, - "by_category": { - "architecture": 0.752227327035497, - "semantic": 0.744338224922911, - "symbol": 1.0 - } - }, - { - "repo": "flask", - "language": "python", - "mode": "hybrid", - "chunks": 295, - "tokens": 3091, - "ndcg5": 0.8557211782963206, - "ndcg10": 0.8645104971905857, - "p50_ms": 0.40208303835242987, - "p90_ms": 2.8060830081813037, - "p95_ms": 3.013957990333438, - "p99_ms": 3.5790587775409226, - "index_ms": 87.27650000946596, - "by_category": { - "architecture": 0.844478447513369, - "semantic": 0.875474919603933, - "symbol": 0.8710490642551528 - } - }, - { - "repo": "fmtlib", - "language": "cpp", - "mode": "hybrid", - "chunks": 483, - "tokens": 2937, - "ndcg5": 0.9346268032608155, - "ndcg10": 0.9346268032608155, - "p50_ms": 0.42558350833132863, - "p90_ms": 0.8071082644164604, - "p95_ms": 3.4780392452375963, - "p99_ms": 3.5514742514351383, - "index_ms": 329.65800003148615, - "by_category": { - "architecture": 0.8769765845238192, - "semantic": 0.9329718794032036, - "symbol": 1.0 - } - }, - { - "repo": "gin", - "language": "go", - "mode": "hybrid", - "chunks": 576, - "tokens": 3122, - "ndcg5": 0.8596409794466148, - "ndcg10": 0.8596409794466148, - "p50_ms": 0.5282500060275197, - "p90_ms": 3.719820821424947, - "p95_ms": 4.218808049336076, - "p99_ms": 4.2697287909686565, - "index_ms": 223.32900000037625, - "by_category": { - "architecture": 0.9696354815039873, - "semantic": 0.7613642454462158, - "symbol": 1.0 - } - }, - { - "repo": "gson", - "language": "java", - "mode": "hybrid", - "chunks": 1472, - "tokens": 3451, - "ndcg5": 0.8981274659106212, - "ndcg10": 0.8981274659106212, - "p50_ms": 1.020479016005993, - "p90_ms": 6.899687193799765, - "p95_ms": 7.481064557214269, - "p99_ms": 9.857046539545987, - "index_ms": 489.2370830057189, - "by_category": { - "architecture": 0.6751724527673773, - "semantic": 0.9261859507142916, - "symbol": 1.0 - } - }, - { - "repo": "guzzle", - "language": "php", - "mode": "hybrid", - "chunks": 208, - "tokens": 2789, - "ndcg5": 0.932845925095874, - "ndcg10": 0.932845925095874, - "p50_ms": 0.5426875140983611, - "p90_ms": 3.073246107669547, - "p95_ms": 3.145808036788367, - "p99_ms": 3.417128819855861, - "index_ms": 69.19812498381361, - "by_category": { - "architecture": 1.0, - "semantic": 0.8966860386090373, - "symbol": 1.0 - } - }, - { - "repo": "http4s", - "language": "scala", - "mode": "hybrid", - "chunks": 974, - "tokens": 2995, - "ndcg5": 0.9569537411240482, - "ndcg10": 0.9569537411240482, - "p50_ms": 3.9706045063212514, - "p90_ms": 5.281511868815869, - "p95_ms": 5.532581216539258, - "p99_ms": 7.198216225369831, - "index_ms": 426.96349998004735, - "by_category": { - "architecture": 0.9590717717793499, - "semantic": 0.9472756790816368, - "symbol": 1.0 - } - }, - { - "repo": "httpx", - "language": "python", - "mode": "hybrid", - "chunks": 248, - "tokens": 3071, - "ndcg5": 0.8558604034079137, - "ndcg10": 0.8655928985311748, - "p50_ms": 0.4295419785194099, - "p90_ms": 2.715375041589141, - "p95_ms": 3.066917008254677, - "p99_ms": 3.2679834053851664, - "index_ms": 76.43537502735853, - "by_category": { - "architecture": 0.804418536224494, - "semantic": 0.8385023461759126, - "symbol": 1.0 - } - }, - { - "repo": "jackson-databind", - "language": "java", - "mode": "hybrid", - "chunks": 4635, - "tokens": 2854, - "ndcg5": 0.7271911875419426, - "ndcg10": 0.7661410386176761, - "p50_ms": 1.071958482498303, - "p90_ms": 10.54547920357436, - "p95_ms": 11.086256580892952, - "p99_ms": 12.605718544218687, - "index_ms": 1347.555167041719, - "by_category": { - "architecture": 0.6226294385530917, - "semantic": 0.708679883333827, - "symbol": 0.9719257715972703 - } - }, - { - "repo": "kotlinx-coroutines", - "language": "kotlin", - "mode": "hybrid", - "chunks": 891, - "tokens": 5691, - "ndcg5": 0.9258891280402999, - "ndcg10": 0.9258891280402999, - "p50_ms": 2.256354026030749, - "p90_ms": 7.340583915356547, - "p95_ms": 7.7377267531119305, - "p99_ms": 9.73871174966916, - "index_ms": 300.549375009723, - "by_category": { - "architecture": 0.8333333333333334, - "semantic": 0.9298416114861429, - "symbol": 1.0 - } - }, - { - "repo": "ktor", - "language": "kotlin", - "mode": "hybrid", - "chunks": 425, - "tokens": 3653, - "ndcg5": 0.7900720626804801, - "ndcg10": 0.817659101188055, - "p50_ms": 0.8371044823434204, - "p90_ms": 5.0042045302689075, - "p95_ms": 5.0830273976316676, - "p99_ms": 5.250005490961485, - "index_ms": 138.27158301137388, - "by_category": { - "architecture": 0.8100730714340207, - "semantic": 0.668952931960422, - "symbol": 1.0 - } - }, - { - "repo": "laravel-framework", - "language": "php", - "mode": "hybrid", - "chunks": 6257, - "tokens": 2712, - "ndcg5": 0.7270004576052422, - "ndcg10": 0.767053986066706, - "p50_ms": 1.0372915130574256, - "p90_ms": 11.667175003094599, - "p95_ms": 11.682587495306507, - "p99_ms": 11.721917485119775, - "index_ms": 1917.2291250433773, - "by_category": { - "architecture": 0.7179954576115433, - "semantic": 0.7426868627202068, - "symbol": 0.9077324383928644 - } - }, - { - "repo": "lazy.nvim", - "language": "lua", - "mode": "hybrid", - "chunks": 302, - "tokens": 3068, - "ndcg5": 0.6946394630357187, - "ndcg10": 0.7263576294855845, - "p50_ms": 0.5528954789042473, - "p90_ms": 0.5808047775644809, - "p95_ms": 0.6075565703213216, - "p99_ms": 0.6761777494102715, - "index_ms": 109.14766701171175, - "by_category": { - "architecture": 0.8459052436406065, - "semantic": 0.6285459451769299 - } - }, - { - "repo": "libuv", - "language": "c", - "mode": "hybrid", - "chunks": 1361, - "tokens": 3079, - "ndcg5": 0.5424282114366414, - "ndcg10": 0.6060468408375095, - "p50_ms": 0.5730625125579536, - "p90_ms": 0.6877204752527177, - "p95_ms": 0.6922017520992086, - "p99_ms": 0.7586067490046843, - "index_ms": 430.87920802645385, - "by_category": { - "architecture": 0.43067655807339306, - "semantic": 0.5939033477042664, - "symbol": 1.0 - } - }, - { - "repo": "messagepack-csharp", - "language": "csharp", - "mode": "hybrid", - "chunks": 1145, - "tokens": 2653, - "ndcg5": 0.874427588278496, - "ndcg10": 0.8920487559320669, - "p50_ms": 4.126771003939211, - "p90_ms": 5.454899667529389, - "p95_ms": 5.68265835463535, - "p99_ms": 5.715465256362222, - "index_ms": 419.19729101937264, - "by_category": { - "architecture": 0.6736862264229985, - "semantic": 0.9051366903277052, - "symbol": 1.0 - } - }, - { - "repo": "mini.nvim", - "language": "lua", - "mode": "hybrid", - "chunks": 2172, - "tokens": 3478, - "ndcg5": 0.9815464876785729, - "ndcg10": 0.9815464876785729, - "p50_ms": 0.5558955017477274, - "p90_ms": 0.5967079952824861, - "p95_ms": 0.6162309844512492, - "p99_ms": 0.6222797988448292, - "index_ms": 760.9028329607099, - "by_category": { - "architecture": 1.0, - "semantic": 0.9769331095982161 - } - }, - { - "repo": "model2vec", - "language": "python", - "mode": "hybrid", - "chunks": 108, - "tokens": 3196, - "ndcg5": 0.6512217603364261, - "ndcg10": 0.6723612520567586, - "p50_ms": 0.4304999893065542, - "p90_ms": 2.391620195703582, - "p95_ms": 2.846868394408375, - "p99_ms": 2.915806493256241, - "index_ms": 39.54004205297679, - "by_category": { - "architecture": 0.6144216780370446, - "semantic": 0.6646273294875858, - "symbol": 0.8333333333333334 - } - }, - { - "repo": "monolog", - "language": "php", - "mode": "hybrid", - "chunks": 421, - "tokens": 2639, - "ndcg5": 0.8745181254051755, - "ndcg10": 0.8833800897443777, - "p50_ms": 0.7286665204446763, - "p90_ms": 3.51297048619017, - "p95_ms": 3.5356579610379413, - "p99_ms": 3.5709980089450255, - "index_ms": 128.2083750120364, - "by_category": { - "architecture": 0.6108909204244194, - "semantic": 0.9613147192765459, - "symbol": 1.0 - } - }, - { - "repo": "newtonsoft-json", - "language": "csharp", - "mode": "hybrid", - "chunks": 2217, - "tokens": 2812, - "ndcg5": 0.8806128427182248, - "ndcg10": 0.8806128427182248, - "p50_ms": 7.535895972978324, - "p90_ms": 9.055170818464832, - "p95_ms": 9.8115184053313, - "p99_ms": 11.246937265386803, - "index_ms": 713.9998750062659, - "by_category": { - "architecture": 0.9251084237866075, - "semantic": 0.8237823919677136, - "symbol": 1.0 - } - }, - { - "repo": "nlohmann-json", - "language": "cpp", - "mode": "hybrid", - "chunks": 811, - "tokens": 3048, - "ndcg5": 0.8295386627570916, - "ndcg10": 0.8404590345979999, - "p50_ms": 0.5867915169801563, - "p90_ms": 4.374066327000038, - "p95_ms": 4.777984775137156, - "p99_ms": 4.969030588399619, - "index_ms": 305.1326249842532, - "by_category": { - "architecture": 0.7951420120034352, - "semantic": 0.8243186607935954, - "symbol": 1.0 - } - }, - { - "repo": "nvm", - "language": "bash", - "mode": "hybrid", - "chunks": 154, - "tokens": 3072, - "ndcg5": 1.0, - "ndcg10": 1.0, - "p50_ms": 0.39450000622309744, - "p90_ms": 0.42946600588038564, - "p95_ms": 0.4459035728359595, - "p99_ms": 0.44951430812943727, - "index_ms": 88.7383749941364, - "by_category": { - "architecture": 1.0, - "semantic": 1.0 - } - }, - { - "repo": "pandoc", - "language": "haskell", - "mode": "hybrid", - "chunks": 3122, - "tokens": 2677, - "ndcg5": 0.6270750787545916, - "ndcg10": 0.6587932452044573, - "p50_ms": 0.9604375227354467, - "p90_ms": 9.437154681654649, - "p95_ms": 10.568428589613177, - "p99_ms": 10.671219283831306, - "index_ms": 1285.146292007994, - "by_category": { - "architecture": 0.6368991050595311, - "semantic": 0.673389338634408 - } - }, - { - "repo": "phoenix", - "language": "elixir", - "mode": "hybrid", - "chunks": 559, - "tokens": 6561, - "ndcg5": 0.8696694218045175, - "ndcg10": 0.8696694218045175, - "p50_ms": 0.5579999997280538, - "p90_ms": 4.238775034900755, - "p95_ms": 4.784570896299554, - "p99_ms": 5.250381376827136, - "index_ms": 199.10866697318852, - "by_category": { - "architecture": 0.8214210289682636, - "semantic": 0.8758471076530654, - "symbol": 1.0 - } - }, - { - "repo": "plug", - "language": "elixir", - "mode": "hybrid", - "chunks": 280, - "tokens": 5453, - "ndcg5": 0.9077324383928644, - "ndcg10": 0.9077324383928644, - "p50_ms": 0.48027103184722364, - "p90_ms": 3.287567046936602, - "p95_ms": 3.6066399305127566, - "p99_ms": 4.092627975624054, - "index_ms": 104.83441705582663, - "by_category": { - "architecture": 1.0, - "semantic": 0.868189197704092, - "symbol": 1.0 - } - }, - { - "repo": "pydantic", - "language": "python", - "mode": "hybrid", - "chunks": 1533, - "tokens": 3259, - "ndcg5": 0.7779397805814576, - "ndcg10": 0.7990792723017901, - "p50_ms": 0.6054374971427023, - "p90_ms": 6.336283718701452, - "p95_ms": 6.735448545077817, - "p99_ms": 8.665689743356776, - "index_ms": 465.1143330265768, - "by_category": { - "architecture": 0.7133473647659958, - "semantic": 0.7946530173877968, - "symbol": 0.9261859507142916 - } - }, - { - "repo": "rack", - "language": "ruby", - "mode": "hybrid", - "chunks": 256, - "tokens": 2716, - "ndcg5": 0.9200892395358251, - "ndcg10": 0.9200892395358251, - "p50_ms": 0.47762549365870655, - "p90_ms": 3.772771108197049, - "p95_ms": 5.01115978695452, - "p99_ms": 6.015264773741362, - "index_ms": 94.51370796887204, - "by_category": { - "architecture": 1.0, - "semantic": 0.8561606311644849, - "symbol": 1.0 - } - }, - { - "repo": "rails", - "language": "ruby", - "mode": "hybrid", - "chunks": 498, - "tokens": 2508, - "ndcg5": 0.8445678978178954, - "ndcg10": 0.8445678978178954, - "p50_ms": 0.6935414858162403, - "p90_ms": 4.116908303694802, - "p95_ms": 5.801968448213302, - "p99_ms": 5.811627290095203, - "index_ms": 194.20991698279977, - "by_category": { - "architecture": 0.845500808108813, - "semantic": 0.8596832229722856, - "symbol": 0.8160170306431477 - } - }, - { - "repo": "redis", - "language": "c", - "mode": "hybrid", - "chunks": 6367, - "tokens": 3434, - "ndcg5": 0.9158764682653967, - "ndcg10": 0.9158764682653967, - "p50_ms": 0.8312914869748056, - "p90_ms": 0.9042125020641834, - "p95_ms": 0.9195478720357642, - "p99_ms": 0.9525759628741071, - "index_ms": 2501.0848339879885, - "by_category": { - "architecture": 0.9430676558073394, - "semantic": 0.8886852807234542 - } - }, - { - "repo": "redux", - "language": "javascript", - "mode": "hybrid", - "chunks": 53, - "tokens": 2834, - "ndcg5": 0.8863147192765458, - "ndcg10": 0.9137963988128106, - "p50_ms": 0.40202049422077835, - "p90_ms": 2.1349457616452128, - "p95_ms": 2.2465829591965316, - "p99_ms": 3.489182998309841, - "index_ms": 26.678042020648718, - "by_category": { - "architecture": 0.9032867981913646, - "semantic": 0.872911909678669, - "symbol": 1.0 - } - }, - { - "repo": "requests", - "language": "python", - "mode": "hybrid", - "chunks": 169, - "tokens": 3016, - "ndcg5": 0.9652540586697873, - "ndcg10": 0.9652540586697873, - "p50_ms": 0.4053539887536317, - "p90_ms": 3.1276957888621837, - "p95_ms": 3.21979756699875, - "p99_ms": 3.2591594965197146, - "index_ms": 52.03520797658712, - "by_category": { - "architecture": 0.9709908720694624, - "semantic": 0.9385181336136883, - "symbol": 1.0 - } - }, - { - "repo": "serde", - "language": "rust", - "mode": "hybrid", - "chunks": 1178, - "tokens": 3017, - "ndcg5": 0.7965338279036697, - "ndcg10": 0.8301174310983572, - "p50_ms": 0.9700204827822745, - "p90_ms": 5.669062200468036, - "p95_ms": 7.11783338629175, - "p99_ms": 7.459200248704291, - "index_ms": 388.14374996582046, - "by_category": { - "architecture": 0.8543823750838853, - "semantic": 0.6764208118547154, - "symbol": 1.0 - } - }, - { - "repo": "sinatra", - "language": "ruby", - "mode": "hybrid", - "chunks": 70, - "tokens": 2831, - "ndcg5": 0.9530803155822426, - "ndcg10": 0.9530803155822426, - "p50_ms": 0.3712085308507085, - "p90_ms": 5.111400003079325, - "p95_ms": 5.117387473001145, - "p99_ms": 5.1707775256363675, - "index_ms": 27.08620799239725, - "by_category": { - "architecture": 0.8123212623289702, - "semantic": 1.0, - "symbol": 1.0 - } - }, - { - "repo": "snapkit", - "language": "swift", - "mode": "hybrid", - "chunks": 107, - "tokens": 3153, - "ndcg5": 0.7723856192940887, - "ndcg10": 0.7872645734184941, - "p50_ms": 2.6728750090114772, - "p90_ms": 5.857749795541169, - "p95_ms": 7.4549162061884955, - "p99_ms": 8.843716061674055, - "index_ms": 37.03895799117163, - "by_category": { - "architecture": 0.6399069297160626, - "semantic": 0.7592455236131767, - "symbol": 1.0 - } - }, - { - "repo": "starlette", - "language": "python", - "mode": "hybrid", - "chunks": 214, - "tokens": 2876, - "ndcg5": 0.9339593901316886, - "ndcg10": 0.9427487090259538, - "p50_ms": 0.4671249771490693, - "p90_ms": 2.9285409837029874, - "p95_ms": 3.256249998230487, - "p99_ms": 3.3224828192032874, - "index_ms": 69.54912503715605, - "by_category": { - "architecture": 0.8907020808677296, - "semantic": 1.0, - "symbol": 1.0 - } - }, - { - "repo": "telescope.nvim", - "language": "lua", - "mode": "hybrid", - "chunks": 544, - "tokens": 3061, - "ndcg5": 0.8024434932958862, - "ndcg10": 0.8024434932958862, - "p50_ms": 0.5177290004212409, - "p90_ms": 0.5900085670873523, - "p95_ms": 0.771351784351284, - "p99_ms": 3.1903367344057147, - "index_ms": 174.5349169941619, - "by_category": { - "architecture": 0.8805425336407291, - "semantic": 0.760390163879432 - } - }, - { - "repo": "tokio", - "language": "rust", - "mode": "hybrid", - "chunks": 2758, - "tokens": 3492, - "ndcg5": 0.9438607657669025, - "ndcg10": 0.9530895506058809, - "p50_ms": 0.7439789769705385, - "p90_ms": 6.81560360826552, - "p95_ms": 7.191891927504912, - "p99_ms": 7.6703111466486, - "index_ms": 910.5068750213832, - "by_category": { - "architecture": 0.8436318353529363, - "semantic": 1.0, - "symbol": 1.0 - } - }, - { - "repo": "trpc", - "language": "typescript", - "mode": "hybrid", - "chunks": 363, - "tokens": 2942, - "ndcg5": 0.8117219727220212, - "ndcg10": 0.8318711294019078, - "p50_ms": 3.289271000539884, - "p90_ms": 4.194062814349309, - "p95_ms": 4.342343780444937, - "p99_ms": 6.200068747857582, - "index_ms": 116.80875002639368, - "by_category": { - "architecture": 0.7751964340658473, - "semantic": 0.7765501593587683, - "symbol": 1.0 - } - }, - { - "repo": "vapor", - "language": "swift", - "mode": "hybrid", - "chunks": 796, - "tokens": 2553, - "ndcg5": 0.7740663550396519, - "ndcg10": 0.828789449954672, - "p50_ms": 0.7312500092666596, - "p90_ms": 4.2243000119924545, - "p95_ms": 4.319356250925921, - "p99_ms": 4.3209712411044165, - "index_ms": 280.9126250213012, - "by_category": { - "architecture": 0.5394794582550125, - "semantic": 0.8540964731663144, - "symbol": 1.0 - } - }, - { - "repo": "vitest", - "language": "typescript", - "mode": "hybrid", - "chunks": 1090, - "tokens": 2797, - "ndcg5": 0.6573465818787765, - "ndcg10": 0.6929673005895788, - "p50_ms": 0.7455210143234581, - "p90_ms": 5.160912469727919, - "p95_ms": 5.681008330429907, - "p99_ms": 8.177735236822624, - "index_ms": 353.1795000308193, - "by_category": { - "architecture": 0.6132788343159646, - "semantic": 0.6862493865749392, - "symbol": 0.8769765845238192 - } - }, - { - "repo": "xmonad", - "language": "haskell", - "mode": "hybrid", - "chunks": 124, - "tokens": 3034, - "ndcg5": 0.8039694436225424, - "ndcg10": 0.8141885635019669, - "p50_ms": 0.37720802356489, - "p90_ms": 3.16575828474015, - "p95_ms": 3.3024975971784443, - "p99_ms": 3.3790995448362082, - "index_ms": 46.22841702075675, - "by_category": { - "architecture": 0.7691051895584848, - "semantic": 0.8442441461309548 - } - }, - { - "repo": "zig", - "language": "zig", - "mode": "hybrid", - "chunks": 13307, - "tokens": 3112, - "ndcg5": 0.9196394630357186, - "ndcg10": 0.9196394630357186, - "p50_ms": 1.4825209800619632, - "p90_ms": 24.460865999571983, - "p95_ms": 26.72400350274984, - "p99_ms": 30.26503348082769, - "index_ms": 3681.8602090352215, - "by_category": { - "architecture": 0.7103099178571526, - "semantic": 0.9565799710084067 - } - }, - { - "repo": "zig-clap", - "language": "zig", - "mode": "hybrid", - "chunks": 100, - "tokens": 2525, - "ndcg5": 0.9380929753571458, - "ndcg10": 0.9380929753571458, - "p50_ms": 0.4560630186460912, - "p90_ms": 3.0955628026276827, - "p95_ms": 3.15549788356293, - "p99_ms": 3.225765992538072, - "index_ms": 55.30970898689702, - "by_category": { - "architecture": 1.0, - "semantic": 0.9312144170634953 - } - }, - { - "repo": "zls", - "language": "zig", - "mode": "hybrid", - "chunks": 1319, - "tokens": 2934, - "ndcg5": 0.8761859507142915, - "ndcg10": 0.8761859507142915, - "p50_ms": 0.6602709763683379, - "p90_ms": 0.8430673042312266, - "p95_ms": 1.1700148752424906, - "p99_ms": 5.577602965058752, - "index_ms": 626.7347910325043, - "by_category": { - "architecture": 0.804418536224494, - "semantic": 0.9148299431318748 - } - }, - { - "repo": "zod", - "language": "typescript", - "mode": "hybrid", - "chunks": 1812, - "tokens": 2865, - "ndcg5": 0.595861623462428, - "ndcg10": 0.6136719828178292, - "p50_ms": 5.538687517400831, - "p90_ms": 7.184083387255669, - "p95_ms": 7.393750676419588, - "p99_ms": 9.440683729480948, - "index_ms": 911.2771659856662, - "by_category": { - "architecture": 0.6297620990369716, - "semantic": 0.586420115895172, - "symbol": 0.7103099178571526 - } - } - ] -} From e88e947b72ca95329d9d4e04fe8f9aebcfd360d0 Mon Sep 17 00:00:00 2001 From: Pringled Date: Mon, 18 May 2026 13:46:23 +0200 Subject: [PATCH 7/8] Bump version --- src/semble/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/semble/version.py b/src/semble/version.py index e656ac0..d054e10 100644 --- a/src/semble/version.py +++ b/src/semble/version.py @@ -1,2 +1,2 @@ -__version_triple__ = (0, 1, 7) +__version_triple__ = (0, 1, 8) __version__ = ".".join(map(str, __version_triple__)) From 8776769589eb89bdd66827f194365eec402e849f Mon Sep 17 00:00:00 2001 From: Pringled Date: Mon, 18 May 2026 14:04:15 +0200 Subject: [PATCH 8/8] Restore uv lock --- uv.lock | 118 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/uv.lock b/uv.lock index 7ff1da5..ef3a139 100644 --- a/uv.lock +++ b/uv.lock @@ -10,7 +10,7 @@ resolution-markers = [ [options] exclude-newer = "0001-01-01T00:00:00Z" # This has no effect and is included for backwards compatibility when using relative exclude-newer values. -exclude-newer-span = "P1W" +exclude-newer-span = "P3D" [[package]] name = "annotated-doc" @@ -1544,7 +1544,7 @@ wheels = [ [[package]] name = "mypy" -version = "2.0.0" +version = "2.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ast-serialize" }, @@ -1554,51 +1554,51 @@ dependencies = [ { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cf/dc/7e6d49f04fca40b9dd5c752a51a432ffe67fb45200702bc9eee0cb4bbb26/mypy-2.0.0.tar.gz", hash = "sha256:1a9e3900ac5c40f1fe813506c7739da6e6f0eab2729067ebd94bfb0bbba53532", size = 3869036, upload-time = "2026-05-06T19:26:43.22Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/49/1e/9983d2d5b5d2dc3677177bcf0fa6b25185ecf750cc0559e02199625a31c5/mypy-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:65d6f22d643bccaeb182d41d2a9f0990a05a871673c4ae3f97d4931eca0d2294", size = 14663140, upload-time = "2026-05-06T19:25:59.474Z" }, - { url = "https://files.pythonhosted.org/packages/69/bc/b4009c91d3ced13c8f406acf47bbe56365025cd21bf6585cd1e87375a708/mypy-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:106650bce72114f43019bf72197296f51c2cd47adfa9d073ea2976c247a404c5", size = 13526733, upload-time = "2026-05-06T19:22:56.425Z" }, - { url = "https://files.pythonhosted.org/packages/f0/99/2403cb0ceeb1552f70e70e779e3d0713b24f84c7ca0e9e14b2b7bc684cf0/mypy-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c734b7eb89a4cc4ec347f8187ffa730e2b59693407bc93dcb878183037f80a17", size = 13951940, upload-time = "2026-05-06T19:24:43.45Z" }, - { url = "https://files.pythonhosted.org/packages/1d/f7/4848a14c2667b6eb62841c9aeb7e1f6479613b1ef9a65564fe1f5518a35b/mypy-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd9e60388944d0f1432a2419ab938a78d5658df1d143a7172cfe1a197276cf49", size = 14833983, upload-time = "2026-05-06T19:23:16.827Z" }, - { url = "https://files.pythonhosted.org/packages/ec/28/c51831f9f1c6e46cbce765bd0a18981b84696e40bd1eea14e0a08494af44/mypy-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f95e3890666c3be41af7a7179f4872341c08e90c161ba8e7a08a21f9be92c131", size = 15135591, upload-time = "2026-05-06T19:24:32.96Z" }, - { url = "https://files.pythonhosted.org/packages/40/7f/3c25e503a94f9ec18352464551bc6c506dee2bca93c6d0e0b5568eefc269/mypy-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:e8e8709ce1b1046b8aad77a506dd01491157102dd727128c0b374b5025c7d769", size = 10983019, upload-time = "2026-05-06T19:20:30.942Z" }, - { url = "https://files.pythonhosted.org/packages/75/da/5cf833fd3b53fd4b5797e55dc16fb7efab16fddbc7205d49ff65b15d554e/mypy-2.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:0165968759c99ab79dc1a9f8aaec18e93a1bedcf7c13edd70e68dd3d5faf17cb", size = 9914165, upload-time = "2026-05-06T19:21:49.165Z" }, - { url = "https://files.pythonhosted.org/packages/8b/1e/268b81393b81d64683f670680215553e70ae92c55805915b3440080e05e4/mypy-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17b7222e9fdfd352e61fb3131da117e55cc465f701ff232f1bd97a02bbad91f", size = 14580849, upload-time = "2026-05-06T19:23:06.567Z" }, - { url = "https://files.pythonhosted.org/packages/6e/32/d159a8002d9e5c44e59ece9d641a26956c89be5b6827f819d9a9dc678c65/mypy-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc0a61adea1a5ffc2d47a4dc4bb180d8103f477fc2a90a1cdcbb168c2cc6caff", size = 13444955, upload-time = "2026-05-06T19:25:11.982Z" }, - { url = "https://files.pythonhosted.org/packages/cd/5d/3b28d5a2799591da0ee5490418e94497eaf5d701e42d8b001b5e17a9b3d6/mypy-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8578f857b519993d065e5805290b71467ebfae772407a5f57e823755e4fdb850", size = 13873124, upload-time = "2026-05-06T19:20:39.684Z" }, - { url = "https://files.pythonhosted.org/packages/60/23/f40f723955617b814d5ddc1154d8938b77aaf6926c2dbf72846e8943a0b7/mypy-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:33f668a37a650df60f7b825c1ac61e6baadd4ac3c89519e929badde58d28edf5", size = 14748822, upload-time = "2026-05-06T19:25:30.972Z" }, - { url = "https://files.pythonhosted.org/packages/d6/16/eded971224a483e422a141ffd580c00e1b919df8e529f06d03a4a987878c/mypy-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29ea6da86c8c5e9addd48fa6e624f467341b3814f54ded871b28980468686dea", size = 14992675, upload-time = "2026-05-06T19:23:34.511Z" }, - { url = "https://files.pythonhosted.org/packages/ea/6a/1cbd7290f00b4dbaa4c4502e53ac05645ea635e4d1e3dcd42687c2fc39cd/mypy-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:904baa0124ebbccf0c7ba94f722cf9186ee30478f5e5b11432ffc8929248ee55", size = 10983628, upload-time = "2026-05-06T19:26:39.48Z" }, - { url = "https://files.pythonhosted.org/packages/83/3f/8caa9bcc2636cd512642050747466b695fa2540d7040544fd7ddb721d671/mypy-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:440165501295e523bf1e5d3e411b62b367b901c65610938e75f0e56ba0462461", size = 9906041, upload-time = "2026-05-06T19:24:03.199Z" }, - { url = "https://files.pythonhosted.org/packages/f6/4b/f6cd12ef1eb63be1c342da3e8ca811d2280276177f6de4ef20cb2366d79b/mypy-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:660790551c988e69d8bf7a35c8b4149edeb22f4a339165702be843532e9dcdb5", size = 14756610, upload-time = "2026-05-06T19:26:19.221Z" }, - { url = "https://files.pythonhosted.org/packages/32/73/67d09ca28bee21feaca264b2a680cf2d300bcc2071136ad064928324c843/mypy-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7a15bf92cd8781f8e72f69ffa7e30d1f434402d065ee1ecd5223ef2ef100f914", size = 13554270, upload-time = "2026-05-06T19:26:08.977Z" }, - { url = "https://files.pythonhosted.org/packages/61/b3/44718b5c6b1b5a27440ff2effe6a1be0fa2a190c0f4e2e21a83728416f95/mypy-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ff370b43d7def05bbcd2f5267f0bcda72dd6a552ef2ea9375b02d6fe06da270", size = 13924663, upload-time = "2026-05-06T19:21:24.932Z" }, - { url = "https://files.pythonhosted.org/packages/6a/2b/bbb9cc5773f946846a7c340097e59bcf84095437dda0d56bb4f6cf1f6541/mypy-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:37bd246590a018e5a11703b7b09c39d47ede3df5ba3fa863c5b8590b465beb01", size = 14946862, upload-time = "2026-05-06T19:24:23.023Z" }, - { url = "https://files.pythonhosted.org/packages/43/25/e9318566f443a5130b4ff0ad3367ee6c4c4c49ff083fe5214a7318c18282/mypy-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cce87e92214fac8bf8feb8a680d0c1b6fb748d50e9b57fbb13e4b1d83a3ed19b", size = 15175090, upload-time = "2026-05-06T19:26:28.794Z" }, - { url = "https://files.pythonhosted.org/packages/67/65/2ec28c834f21e164c33bc296a7db538ad50c74f83e517c7a0be95ff6de86/mypy-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:e19e9cb69b66a4141009d24898259914fa2b71d026de0b46edf9fafdbf4fd46e", size = 11052899, upload-time = "2026-05-06T19:25:39.084Z" }, - { url = "https://files.pythonhosted.org/packages/9e/72/d1ec625cfc9bd101c07a6834ef1f94e820296f8fdbad2eb03f50e0983f8c/mypy-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:b021614cb08d44785b025982163ec3c39c94bff766ead071fa9e82b4ef6f62cd", size = 9972935, upload-time = "2026-05-06T19:23:24.204Z" }, - { url = "https://files.pythonhosted.org/packages/e5/c6/996a1e535e5d0d597c3b1460fc962733091f885f312e749350eb2ac10965/mypy-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ef5f581b61240d1cc629b12f8df6565ed6ffac0d82ed745eef7833222ab50b9", size = 14737259, upload-time = "2026-05-06T19:20:23.081Z" }, - { url = "https://files.pythonhosted.org/packages/94/c5/0f9460e26b77f434bd53f47d1ce32a3cd4580c92a5331fa5dfc059f9421a/mypy-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20e3470a165dbc249bdfbe8d1c5172727ef22688cffc279f8c3aa264ab9d4d9a", size = 13538377, upload-time = "2026-05-06T19:21:08.804Z" }, - { url = "https://files.pythonhosted.org/packages/b2/3e/8ea2f8dd1e5c9c279fb3c28193bdb850adf4d3d8172880abad829eced609/mypy-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224ba142eee8b4d65d4db657cb1fc22abec30b135ded6ab297302ba1f62e505d", size = 13914264, upload-time = "2026-05-06T19:24:12.875Z" }, - { url = "https://files.pythonhosted.org/packages/be/ce/78bd3b8520f676acee9dab48ea71473e68f6d5cf14b59fbd800bea50a92b/mypy-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e879ad8a03908ff74d15e8a9b42bf049918e6798d52c011011f1873d0b5877e", size = 14926761, upload-time = "2026-05-06T19:20:12.846Z" }, - { url = "https://files.pythonhosted.org/packages/61/ef/b52fa340522da3d22e669117c3b83155c2660f7cdc035856958fbfffb224/mypy-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:65c5c15bcbd18d6fe927cc55c459597a3517d69cc3123f067be3b020010e115e", size = 15157014, upload-time = "2026-05-06T19:25:49.78Z" }, - { url = "https://files.pythonhosted.org/packages/7a/0c/dde7614250c6d017936c7aa3bb63b9b52c7cfd298d3f1be9be45f307870b/mypy-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:d1a068acd7c9fb77e9f8923f1556f2f49d6d7895821121b8d97fa5642b9c52f5", size = 11067049, upload-time = "2026-05-06T19:21:16.116Z" }, - { url = "https://files.pythonhosted.org/packages/27/ec/1d6af4830a94a285442db19caa02f160cc1a255e4f324eec5458e6c2bafb/mypy-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:ef9d96da1ddffbc21f27d3939319b6846d12393baa17c4d2f3e81e040e73ce2c", size = 9967903, upload-time = "2026-05-06T19:22:15.52Z" }, - { url = "https://files.pythonhosted.org/packages/ce/2c/6fefe954207860aed6eeb91776795e64a257d3ce0360862288984ce121f5/mypy-2.0.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c918c64e8ce36557851b0347f84eb12f1965d3a06813c36df253eb0c0afd1d82", size = 14729633, upload-time = "2026-05-06T19:24:53.383Z" }, - { url = "https://files.pythonhosted.org/packages/23/d6/d336f5b820af189eb0390cce21de62d264c0a4e64713dfbe81bfc4fc7739/mypy-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:301f1a8ccc7d79b542ee218b28bb49443a83e194eb3d10da63ff1649e5aa5d34", size = 13559524, upload-time = "2026-05-06T19:22:24.906Z" }, - { url = "https://files.pythonhosted.org/packages/af/a6/d7bb54fde1770f0484e5fbdbdce37a41e95ed0a1cd493ec60ead111e356c/mypy-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fdf4ef489d44ce350bac3fd699907834e551d4c934e9cc862ef201215ab1558d", size = 13936018, upload-time = "2026-05-06T19:25:02.992Z" }, - { url = "https://files.pythonhosted.org/packages/7d/ba/5be51316b91e6a6bf6e3a8adb3de500e7e1fb5bf9491743b8cbc81a34a2c/mypy-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cde2d0989f912fc850890f727d0d76495e7a6c5bdd9912a1efdb64952b4398d", size = 14910712, upload-time = "2026-05-06T19:25:21.83Z" }, - { url = "https://files.pythonhosted.org/packages/b7/37/e2c8c3b373e20ebfb66e6c83a99027fd67df4ec43b08879f74e822d2dc4c/mypy-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cdf05693c231a14fe37dbfce192a3a1372c26a833af4a80f550547742952e719", size = 15141499, upload-time = "2026-05-06T19:20:50.924Z" }, - { url = "https://files.pythonhosted.org/packages/12/36/07756f933e00416d912e35878cfcf89a593a3350a885691c0bb85ae0226a/mypy-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:73aee2da33a2237e66cbe84a94780e53599847e86bb3aa7b93e405e8cd9905f2", size = 11240511, upload-time = "2026-05-06T19:21:32.39Z" }, - { url = "https://files.pythonhosted.org/packages/70/05/79ac1f20f2397353f3845f7b8bb5d8006cda7c8ef9092f04f9de3c6135f2/mypy-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:1f6dcd8f39971f41edab2728c877c4ac8b50ad3c387ff2770423b79a05d23910", size = 10149336, upload-time = "2026-05-06T19:22:08.383Z" }, - { url = "https://files.pythonhosted.org/packages/53/e0/0db84e0ebbad6e99e566c68e4b465784f2a2294f7719e8db9d509ef23087/mypy-2.0.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a04e980b9275c76159da66c6e1723c7798306f9802b31bdaf9358d0c84030ce8", size = 15797362, upload-time = "2026-05-06T19:22:00.835Z" }, - { url = "https://files.pythonhosted.org/packages/0a/a4/14cc0768164dd53bec48aa41a20270b18df9bf72aa5054278bf133608315/mypy-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:33f9cf4825469b2bc73c53ba55f6d9a9b4cdb60f9e6e228745581520f29b8771", size = 14635914, upload-time = "2026-05-06T19:23:43.675Z" }, - { url = "https://files.pythonhosted.org/packages/08/48/d866a3e23b4dc5974c77d9cf65a435bf22de01a84dd4620917950e233960/mypy-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191675c3c7dc2a5c7722a035a6909c277f14046c5e4e02aa5fbf65f8524f08ad", size = 15270866, upload-time = "2026-05-06T19:22:34.756Z" }, - { url = "https://files.pythonhosted.org/packages/71/eb/de9ef94958eb2078a6b908ceb247757dc384d3a238d3bd6ed7d81de5eaf8/mypy-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c3d26c4321a3b06fc9f04c741e0733af693f82d823f8e64e47b2e63b7f19fa84", size = 16093131, upload-time = "2026-05-06T19:23:56.541Z" }, - { url = "https://files.pythonhosted.org/packages/ad/07/0ab2c1a9d26e90942612724cbd5788f16b7810c5dd39bfcf79286c6c4524/mypy-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bbcbc4d5917ca6ce12de70e051de7f533e3bf92d548b41a38a2232a6fe356525", size = 16330685, upload-time = "2026-05-06T19:21:42.037Z" }, - { url = "https://files.pythonhosted.org/packages/a6/8f/46f85d1371a5be642dad263828118ae1efd536d91d8bd2000c68acff3920/mypy-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:dbc6ba6d40572ae49268531565793a8f07eac7fc65ad76d482c9b4c8765b6043", size = 12752017, upload-time = "2026-05-06T19:22:44.002Z" }, - { url = "https://files.pythonhosted.org/packages/7a/e6/94ca48800cac19eb28a58188a768aaec0d16cac0f373915f073058ab0855/mypy-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:77926029dfcb7e1a3ecb0acb2ddbb24ca36be03f7d623e1759ad5376be8f6c01", size = 10527097, upload-time = "2026-05-06T19:20:58.973Z" }, - { url = "https://files.pythonhosted.org/packages/5c/14/fd0694aa594d6e9f9fd16ce821be2eff295197a273262ef56ddcc1388d68/mypy-2.0.0-py3-none-any.whl", hash = "sha256:8a92b2be3146b4fa1f062af7eb05574cbf3e6eb8e1f14704af1075423144e4e5", size = 2673434, upload-time = "2026-05-06T19:26:32.856Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/82/15/cca9d88503549ed6fedeaa1d448cdddd542ee8a490232d732e278036fbf2/mypy-2.1.0.tar.gz", hash = "sha256:81e76ad12c2d804512e9b13240d1588316531bfba07558286078bfbce9613633", size = 3898359, upload-time = "2026-05-11T18:37:36.237Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/71/d351dca3e9b30da2328ee9d445c88b8388072808ebfbc49eb69d30b67749/mypy-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:11a6beb180257a805961aea9ec591bbd0bd17f1e18d35b8456d57aee5bedfedc", size = 14778792, upload-time = "2026-05-11T18:36:23.605Z" }, + { url = "https://files.pythonhosted.org/packages/2f/45/7d51594b644c17c0bcf74ed8cd5fc33b324276d708e8506f220b70dab9d9/mypy-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ef78c1d306bbf9a8a12f526c44902c9c28dffd6c52c52bf6a72641ce18d3849", size = 13645739, upload-time = "2026-05-11T18:37:22.752Z" }, + { url = "https://files.pythonhosted.org/packages/65/01/455c31b170e9468265074840bf18863a8482a24103fdaabe4e199392aa5f/mypy-2.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c209a90853081ff01d01ee895cafe10f7db1474e0d95beaeef0f6c1db9119bbd", size = 14074199, upload-time = "2026-05-11T18:35:09.292Z" }, + { url = "https://files.pythonhosted.org/packages/41/5a/93093f0b29a9e982deafde698f740a2eb2e05886e79ccf0594c7fd5413a3/mypy-2.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47cebf61abde7c088a4e27718a8b13a81655686b2e9c251f5c0915a802248166", size = 14953128, upload-time = "2026-05-11T18:31:57.678Z" }, + { url = "https://files.pythonhosted.org/packages/7f/2f/a196f5331d96170ad3d28f144d2aba690d4b2911381f68d51e489c7ab82a/mypy-2.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d57a90ae5e872138a425ec328edbc9b235d1934c4377881a33ec05b341acc9a8", size = 15249378, upload-time = "2026-05-11T18:33:00.101Z" }, + { url = "https://files.pythonhosted.org/packages/54/de/94d321cc12da9f71341ac0c270efbed5c725750c7b4c334d957de9a087d9/mypy-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:aea7f7a8a55b459c34275fc468ada6ca7c173a5e43a68f5dbe588a563d8a06b8", size = 11060994, upload-time = "2026-05-11T18:33:18.848Z" }, + { url = "https://files.pythonhosted.org/packages/e1/62/0c27ca55219a7c764a7fb88c7bb2b7b2f9780ade8bbf16bc8ed8400eef6b/mypy-2.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:c989640253f0d76843e9c6c1bbf4bd48c5e85ada61bde4beb37cb3eca035685e", size = 9976743, upload-time = "2026-05-11T18:31:25.554Z" }, + { url = "https://files.pythonhosted.org/packages/0a/a1/639f3024794a2a15899cb90707fe02e044c4412794c39c5769fd3df2e2ef/mypy-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a683016b16fe2f572dc04c72be7ee0504ac1605a265d0200f5cea695fb788f41", size = 14691685, upload-time = "2026-05-11T18:33:27.973Z" }, + { url = "https://files.pythonhosted.org/packages/3b/08/9a585dea4325f20d8b80dc78623fa50d1fd2173b710f6237afd6ba6ab39b/mypy-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a293c534adb55271fef24a26da04b855540a8c13cc07bc5917b9fd2c394f2ca", size = 13555165, upload-time = "2026-05-11T18:32:16.107Z" }, + { url = "https://files.pythonhosted.org/packages/81/dc/7c42cc9c6cb01e8eb09961f1f738741d3e9c7e9d5c5b30ec69222625cd5f/mypy-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7406f4d048e71e576f5356d317e5b0a9e666dfd966bd99f9d14ca06e1a341538", size = 13994376, upload-time = "2026-05-11T18:32:39.256Z" }, + { url = "https://files.pythonhosted.org/packages/d4/fa/285946c33bce716e082c11dfeee9ee196eaf1f5042efb3581a31f9f205e4/mypy-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e0210d626fc8b31ccc90233754c7bc90e1f43205e85d96387f7db1285b55c398", size = 14864618, upload-time = "2026-05-11T18:34:49.765Z" }, + { url = "https://files.pythonhosted.org/packages/2b/83/82397f48af6c27e295d57979ded8490c9829040152cf7571b2f026aeb9a0/mypy-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3712c20deed54e814eaaa825603bada8ea1c390670a397c95b98405347acc563", size = 15102063, upload-time = "2026-05-11T18:34:05.855Z" }, + { url = "https://files.pythonhosted.org/packages/40/68/b02dec39057b88eb03dc0aa854732e26e8361f34f9d0e20c7614967d1eba/mypy-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fcaa0e479066e31f7cceb6a3bea39cb22b2ff51a6b2f24f193d19179ba17c389", size = 11060564, upload-time = "2026-05-11T18:35:36.494Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a8/ea3dcbef31f99b634f2ee23bb0321cbc8c1b388b76a861eb849f13c347dc/mypy-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:0b1a5260c95aa443083f9ed3592662941951bca3d4ca224a5dc517c38b7cf666", size = 9966983, upload-time = "2026-05-11T18:37:14.139Z" }, + { url = "https://files.pythonhosted.org/packages/95/b1/55861beb5c339b44f9a2ba92df9e2cb1eeb4ae1eee674cdf7772c797778b/mypy-2.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:244358bf1c0da7722230bce60683d52e8e9fd030554926f15b747a84efb5b3af", size = 14874381, upload-time = "2026-05-11T18:37:31.784Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b3/b7f770114b7d0ac92d0f76e8d93c2780844a70488a90e91821927850da86/mypy-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ec7c57657493c7a75534df2751c8ae2cda383c16ecc55d2106c54476b1b16f6", size = 13665501, upload-time = "2026-05-11T18:34:23.063Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f3/8ae2037967e2126689a0c11d99e2b707134a565191e92c60ca2572aec60a/mypy-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8161b6ff4392410023224f0969d17db93e1e154bc3e4ba62598e720723ae211", size = 14045750, upload-time = "2026-05-11T18:31:48.151Z" }, + { url = "https://files.pythonhosted.org/packages/a0/32/615eb5911859e43d054941b0d0a7d06cfa2870eba86529cf385b052b111c/mypy-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf03e12003084a67395184d3eb8cbd6a489dc3655b5664b28c210a9e2403ab0b", size = 15061630, upload-time = "2026-05-11T18:37:06.898Z" }, + { url = "https://files.pythonhosted.org/packages/d4/03/4eafbfff8bfab1b87082741eae6e6a624028c984e6708b73bce2a8570c9d/mypy-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:20509760fd791c51579d573153407d226385ec1f8bcce55d730b354f3336bc22", size = 15288831, upload-time = "2026-05-11T18:31:18.07Z" }, + { url = "https://files.pythonhosted.org/packages/99/ee/919661478e5891a3c96e549c036e467e64563ab85995b10c53c8358e16a3/mypy-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:6753d0c1fdd6b1a23b9e4f283ce80b2153b724adcb2653b20b85a8a28ac6436b", size = 11135228, upload-time = "2026-05-11T18:34:31.23Z" }, + { url = "https://files.pythonhosted.org/packages/24/0a/6a12b9782ca0831a553192f351679f4548abc9d19a7cc93bb7feb02084c7/mypy-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:98ebb6589bb3b6d0c6f0c459d53ca55b8091fbc13d277c4041c885392e8195e8", size = 10040684, upload-time = "2026-05-11T18:36:48.199Z" }, + { url = "https://files.pythonhosted.org/packages/6e/dd/c7191469c777f07689c032a8f7326e393ea34c92d6d76eb7ce5ba57ea66d/mypy-2.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35aac3bb114e03888f535d5eb51b8bafbb3266586b599da1940f9b1be3ec5bd5", size = 14852174, upload-time = "2026-05-11T18:31:38.929Z" }, + { url = "https://files.pythonhosted.org/packages/55/8c/aed55408879043d72bb9135f4d0d19a02b886dd569631e113e3d2706cb8d/mypy-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8de55a8c861f2a49331f807be98d90caeceeef520bde13d43a160207f8af613e", size = 13651542, upload-time = "2026-05-11T18:36:04.636Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8e/f371a824b1f1fa8ea6e3dbb8703d232977d572be2329554a3bc4d960302f/mypy-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5fdf2941a07434af755837d9880f7d7d25f1dacb1af9dcd4b9b66f2220a3024e", size = 14033929, upload-time = "2026-05-11T18:35:55.742Z" }, + { url = "https://files.pythonhosted.org/packages/94/21/f54be870d6dd53a82c674407e0f8eed7174b05ec78d42e5abd7b42e84fd5/mypy-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e195b817c13f02352a9c124301f9f30f078405444679b6753c1b96b6eed37285", size = 15039200, upload-time = "2026-05-11T18:33:10.281Z" }, + { url = "https://files.pythonhosted.org/packages/17/99/bf21748626a40ce59fd29a39386ab46afec88b7bd2f0fa6c3a97c995523f/mypy-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5431d42af987ebd92ba2f71d45c85ed41d8e6ca9f5fd209a69f68f707d2469e5", size = 15272690, upload-time = "2026-05-11T18:32:07.205Z" }, + { url = "https://files.pythonhosted.org/packages/d6/d7/9e90d2cf47100bea550ed2bc7b0d4de3a62181d84d5e37da0003e8462637/mypy-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:767fe8c66dc3e01e19e1737d4c38ebefead16125e1b8e58ad421903b376f5c65", size = 11147435, upload-time = "2026-05-11T18:33:56.477Z" }, + { url = "https://files.pythonhosted.org/packages/ec/46/e5c449e858798e35ffc90946282a27c62a77be743fe17480e4977374eb91/mypy-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:ecfe70d43775ab99562ab128ce49854a362044c9f894961f68f898c23cb7429d", size = 10035052, upload-time = "2026-05-11T18:32:30.049Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ca/b279a672e874aedd5498ae25f722dacc8aa86bbffb939b3f97cbb1cf6686/mypy-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7354c5a7f69d9345c3d6e69921d57088eea3ddeeb6b20d34c1b3855b02c36ec2", size = 14848422, upload-time = "2026-05-11T18:35:45.984Z" }, + { url = "https://files.pythonhosted.org/packages/27/e6/3efe56c631d959b9b4454e208b0ac4b7f4f58b404c89f8bec7b49efdfc21/mypy-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:49890d4f76ac9e06ec117f9e09f3174da70a620a0c300953d8595c926e80947f", size = 13677374, upload-time = "2026-05-11T18:36:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/84/7f/8107ea87a44fd1f1b59882442f033c9c3488c127201b1d1d15f1cbd6022e/mypy-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:761be68e023ef5d94678772396a8af1220030f80837a3afd8d0aef3b419666f4", size = 14055743, upload-time = "2026-05-11T18:35:18.361Z" }, + { url = "https://files.pythonhosted.org/packages/51/4d/b6d34db183133b83761b9199a82d31557cdbb70a380d8c3b3438e11882a3/mypy-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c90345fc182dc363b891350457ec69c35140858538f38b4540845afcc32b1aef", size = 15020937, upload-time = "2026-05-11T18:34:59.618Z" }, + { url = "https://files.pythonhosted.org/packages/ff/d7/f08360c691d758acb02f45022c34d98b92892f4ea756644e1000d4b9f3d8/mypy-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b84802e7b5a6daf1f5e15bc9fcd7ddae77be13981ffab037f1c67bb84d67d135", size = 15253371, upload-time = "2026-05-11T18:36:41.081Z" }, + { url = "https://files.pythonhosted.org/packages/67/1b/09460a13719530a19bce27bd3bc8449e83569dd2ba7faf51c9c3c30c0b61/mypy-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:022c771234936ceac541ebaf836fe9e2abeb3f5e09aff21588fe543ff006fe21", size = 11326429, upload-time = "2026-05-11T18:34:13.526Z" }, + { url = "https://files.pythonhosted.org/packages/40/62/75dbf0f82f7b6680340efc614af29dd0b3c17b8a4f1cd09b8bd2fd6bc814/mypy-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:498207db725cec88829a6a5c2fc771205fd043719ef98bc49aba8fb9fc4e6d57", size = 10218799, upload-time = "2026-05-11T18:32:23.491Z" }, + { url = "https://files.pythonhosted.org/packages/b2/66/caca04ed7d972fb6eb6dd1ccd6df1de5c38fae8c5b3dc1c4e8e0d85ee6b9/mypy-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7d5e5cad0efeba72b93cd17490cc0d69c5ac9ca132994fe3fb0314808aeeb83e", size = 15923458, upload-time = "2026-05-11T18:35:28.64Z" }, + { url = "https://files.pythonhosted.org/packages/ed/52/2d90cbe49d014b13ed7ff337930c30bad35893fe38a1e4641e756bb62191/mypy-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ff715050c127d724fd260a2e666e7747fdd83511c0c47d449d98238970aef780", size = 14757697, upload-time = "2026-05-11T18:36:14.208Z" }, + { url = "https://files.pythonhosted.org/packages/ac/37/d98f4a14e081b238992d0ed96b6d39c7cc0148c9699eb71eaa68629665ea/mypy-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:82208da9e09414d520e912d3e462d454854bed0810b71540bb016dcbca7308fd", size = 15405638, upload-time = "2026-05-11T18:33:48.249Z" }, + { url = "https://files.pythonhosted.org/packages/a3/c2/15c46613b24a84fad2aea1248bf9619b99c2767ae9071fe224c179a0b7d4/mypy-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e79ebc1b904b84f0310dff7469655a9c36c7a68bddb37bdd42b67a332df61d08", size = 16215852, upload-time = "2026-05-11T18:32:50.296Z" }, + { url = "https://files.pythonhosted.org/packages/5c/90/9c16a57f482c76d25f6379762b56bbf65c711d8158cf271fb2802cfb0640/mypy-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e583edc957cfb0deb142079162ae826f58449b116c1d442f2d91c69d9fced081", size = 16452695, upload-time = "2026-05-11T18:33:38.182Z" }, + { url = "https://files.pythonhosted.org/packages/0f/4c/215a4eeb63cacc5f17f516691ea7285d11e249802b942476bff15922a314/mypy-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b33b6cd332695bba180d55e717a79d3038e479a2c49cc5eb3d53603409b9a5d7", size = 12866622, upload-time = "2026-05-11T18:34:39.945Z" }, + { url = "https://files.pythonhosted.org/packages/4b/50/1043e1db5f455ffe4c9ab22747cd8ca2bc492b1e4f4e21b130a44ee2b217/mypy-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:4f910fe825376a7b66ef7ca8c98e5a149e8cd64c19ae71d84047a74ee060d4e6", size = 10610798, upload-time = "2026-05-11T18:36:31.444Z" }, + { url = "https://files.pythonhosted.org/packages/0d/2a/13ca1f292f6db1b98ff495ef3467736b331621c5917cad984b7043e7348d/mypy-2.1.0-py3-none-any.whl", hash = "sha256:a663814603a5c563fb87a4f96fb473eeb30d1f5a4885afcf44f9db000a366289", size = 2693302, upload-time = "2026-05-11T18:31:29.246Z" }, ] [[package]] @@ -2679,7 +2679,7 @@ wheels = [ [[package]] name = "requests" -version = "2.33.1" +version = "2.34.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, @@ -2687,9 +2687,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/b8/7a707d60fea4c49094e40262cc0e2ca6c768cca21587e34d3f705afec47e/requests-2.34.0.tar.gz", hash = "sha256:7d62fe92f50eb82c529b0916bb445afa1531a566fc8f35ffdc64446e771b856a", size = 142436, upload-time = "2026-05-11T19:29:51.717Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.whl", hash = "sha256:917520a21b767485ce7c588f4ebb917c436b24a31231b44228715eaeb5a52c60", size = 73021, upload-time = "2026-05-11T19:29:49.923Z" }, ] [[package]] @@ -3180,7 +3180,7 @@ provides-extras = ["mcp", "benchmark", "dev"] [[package]] name = "sentence-transformers" -version = "5.4.1" +version = "5.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, @@ -3195,9 +3195,9 @@ dependencies = [ { name = "transformers" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4d/68/7f98c221940ce783b492ad6140384daf2e2918cd7175009d6a362c22b9ee/sentence_transformers-5.4.1.tar.gz", hash = "sha256:436bcb1182a0ff42a8fb2b1c43498a70d0a75b688d182f2cd0d1dd115af61ddc", size = 428910, upload-time = "2026-04-14T13:34:59.006Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/27/16d127a61303e05847d878b23687f3371868c76e738557fa80b4373a8c2b/sentence_transformers-5.5.0.tar.gz", hash = "sha256:9cec675e68bfe09d07466d1f13ab06d1d79d60a0f45b154baf433bde6ae159cb", size = 444908, upload-time = "2026-05-12T14:05:42.383Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/d9/3a9b6f2ccdedc9dc00fe37b2fc58f58f8efbff44565cf4bf39d8568bb13a/sentence_transformers-5.4.1-py3-none-any.whl", hash = "sha256:a6d640fc363849b63affb8e140e9d328feabab86f83d58ac3e16b1c28140b790", size = 571311, upload-time = "2026-04-14T13:34:57.731Z" }, + { url = "https://files.pythonhosted.org/packages/55/20/18416624bcbae866ec0b111979766cebabe8e5ff7563ab953ecbaf3ff9e7/sentence_transformers-5.5.0-py3-none-any.whl", hash = "sha256:75313fdcc2397ec4b58297c25d6187fcca5a6b2aeb09570a72eff5a3223d8d58", size = 588665, upload-time = "2026-05-12T14:05:40.899Z" }, ] [[package]] @@ -3238,15 +3238,15 @@ wheels = [ [[package]] name = "sse-starlette" -version = "3.4.2" +version = "3.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "starlette" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/82/10cdfab4ab663a6b6bd624d33f55b2cfa41af5105be033a6d5d135a92c5f/sse_starlette-3.4.2.tar.gz", hash = "sha256:2f9a7f51ed84395a0427fb9f66cb1ec11f7899d977a72cbc9070b962a2e14489", size = 35236, upload-time = "2026-05-06T19:42:13.727Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/2b/58abc2d1fd397e7dde08e947e05c884d8ef2f78d5e2588c17a12d42d6994/sse_starlette-3.4.4.tar.gz", hash = "sha256:07e0fa0460138baf25cdd5fb28683472c3995dc1642225191b3832d62526bcb0", size = 31819, upload-time = "2026-05-12T17:37:17.019Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/27/351c71e803c56090d8d3bf9520422debeb8ed938871fd4f7ef519805a6c5/sse_starlette-3.4.2-py3-none-any.whl", hash = "sha256:6ea5d35b7ce979a3de5a0db5f77fe886b1616e4b3e1ad93fba502bd9b5fb662f", size = 16516, upload-time = "2026-05-06T19:42:12.201Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/805710444ea8cc75fbf70b920ed431a560c4bf9c57f7d5a3117213189399/sse_starlette-3.4.4-py3-none-any.whl", hash = "sha256:3f4dd50d8aed2771a091f3a83000323fc3844541c16b4fe585ae2420cc6df973", size = 16514, upload-time = "2026-05-12T17:37:15.601Z" }, ] [[package]] @@ -3681,7 +3681,7 @@ wheels = [ [[package]] name = "virtualenv" -version = "21.3.1" +version = "21.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, @@ -3690,9 +3690,9 @@ dependencies = [ { name = "python-discovery" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ec/0d/915c02c94d207b85580eb09bffab54438a709e7288524094fe781da526c2/virtualenv-21.3.1.tar.gz", hash = "sha256:c2305bc1fddeec40699b8370d13f8d431b0701f00ce895061ce493aeded4426b", size = 7613791, upload-time = "2026-05-05T01:34:31.402Z" } +sdist = { url = "https://files.pythonhosted.org/packages/69/e1/665267cea4767debd19f584667a9197c2098b5e7f67a502da9f3a086ab37/virtualenv-21.3.2.tar.gz", hash = "sha256:3ecda97894a6fc1c53106356f488690e5c86278c1f693f3fc0805ac85a513686", size = 7613810, upload-time = "2026-05-12T14:44:18.01Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/4f/f71e641e504111a5a74e3a20bc52d01bd86788b22699dd3fee1c63253cf6/virtualenv-21.3.1-py3-none-any.whl", hash = "sha256:d1a71cf58f2f9228fff23a1f6ec15d39785c6b32e03658d104974247145edd35", size = 7594539, upload-time = "2026-05-05T01:34:28.98Z" }, + { url = "https://files.pythonhosted.org/packages/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl", hash = "sha256:c58ea748fa50bb2a4367da5ba3d30b02458ed40b4ea888faad94021f3309f764", size = 7594558, upload-time = "2026-05-12T14:44:15.193Z" }, ] [[package]]