361
361
@test levels (x) == [" Q1: [-Inf, 3.0)" , " Q2: [3.0, 5.0]" ]
362
362
end
363
363
364
+ @testset " cut in corner cases" begin
365
+ # In this case, cut(x, quantile(x, (0:36)/36)) in R generates
366
+ # an empty "(143,172]" level
367
+ # and qcut(x, 36) in Polars misses that level.
368
+ # Our approach uses different breaks at 143 and 182
369
+ x = [23 , 23 , 60 , 76 , 84 , 95 , 101 , 108 , 111 , 133 , 137 , 143 , 143 , 143 , 182 ,
370
+ 206 , 214 , 241 , 258 , 262 , 280 , 289 , 303 , 312 , 321 , 323 , 352 , 353 , 354 ,
371
+ 368 , 369 , 373 , 374 , 384 , 385 , 386 , 387 , 392 , 405 , 406 , 410 , 421 , 430 ,
372
+ 430 , 431 , 442 , 464 , 474 , 478 , 479 , 496 , 516 , 530 , 534 , 549 , 554 , 568 ,
373
+ 575 , 589 , 590 , 591 , 592 , 595 , 596 , 603 , 625 , 632 , 632 , 638 , 640 , 640 ,
374
+ 645 , 648 , 690 , 704 , 748 , 758 , 771 , 772 , 803 , 835 , 839 , 853 , 869 , 873 ,
375
+ 874 , 887 , 911 , 920 , 923 , 928 , 933 , 943 , 945 , 945 , 947 , 951 , 965 , 978 , 980 ]
376
+
377
+ @test cut (x, 36 ) ==
378
+ [" Q17: [442, 474)" , " Q8: [280, 312)" , " Q2: [76, 101)" , " Q9: [312, 323)" ,
379
+ " Q14: [387, 406)" , " Q30: [835, 869)" , " Q17: [442, 474)" , " Q35: [947, 965)" ,
380
+ " Q2: [76, 101)" , " Q11: [354, 373)" , " Q32: [887, 923)" , " Q12: [373, 385)" ,
381
+ " Q24: [603, 638)" , " Q29: [772, 835)" , " Q24: [603, 638)" , " Q15: [406, 430)" ,
382
+ " Q11: [354, 373)" , " Q23: [592, 603)" , " Q3: [101, 133)" , " Q16: [430, 442)" ,
383
+ " Q34: [933, 947)" , " Q27: [648, 748)" , " Q28: [748, 772)" , " Q28: [748, 772)" ,
384
+ " Q21: [568, 589)" , " Q18: [474, 496)" , " Q32: [887, 923)" , " Q11: [354, 373)" ,
385
+ " Q7: [241, 280)" , " Q3: [101, 133)" , " Q19: [496, 534)" , " Q13: [385, 387)" ,
386
+ " Q36: [965, 980]" , " Q33: [923, 933)" , " Q16: [430, 442)" , " Q36: [965, 980]" ,
387
+ " Q27: [648, 748)" , " Q24: [603, 638)" , " Q32: [887, 923)" , " Q4: [133, 182)" ,
388
+ " Q22: [589, 592)" , " Q1: [23, 76)" , " Q5: [182, 206)" , " Q28: [748, 772)" ,
389
+ " Q30: [835, 869)" , " Q31: [869, 887)" , " Q22: [589, 592)" , " Q15: [406, 430)" ,
390
+ " Q31: [869, 887)" , " Q19: [496, 534)" , " Q26: [640, 648)" , " Q8: [280, 312)" ,
391
+ " Q18: [474, 496)" , " Q14: [387, 406)" , " Q7: [241, 280)" , " Q30: [835, 869)" ,
392
+ " Q3: [101, 133)" , " Q9: [312, 323)" , " Q4: [133, 182)" , " Q24: [603, 638)" ,
393
+ " Q20: [534, 568)" , " Q25: [638, 640)" , " Q20: [534, 568)" , " Q23: [592, 603)" ,
394
+ " Q12: [373, 385)" , " Q27: [648, 748)" , " Q29: [772, 835)" , " Q6: [206, 241)" ,
395
+ " Q34: [933, 947)" , " Q16: [430, 442)" , " Q26: [640, 648)" , " Q15: [406, 430)" ,
396
+ " Q12: [373, 385)" , " Q26: [640, 648)" , " Q19: [496, 534)" , " Q4: [133, 182)" ,
397
+ " Q34: [933, 947)" , " Q31: [869, 887)" , " Q10: [323, 354)" , " Q21: [568, 589)" ,
398
+ " Q4: [133, 182)" , " Q7: [241, 280)" , " Q35: [947, 965)" , " Q14: [387, 406)" ,
399
+ " Q18: [474, 496)" , " Q34: [933, 947)" , " Q20: [534, 568)" , " Q22: [589, 592)" ,
400
+ " Q33: [923, 933)" , " Q10: [323, 354)" , " Q13: [385, 387)" , " Q1: [23, 76)" ,
401
+ " Q36: [965, 980]" , " Q2: [76, 101)" , " Q23: [592, 603)" , " Q6: [206, 241)" ,
402
+ " Q1: [23, 76)" , " Q10: [323, 354)" , " Q4: [133, 182)" , " Q8: [280, 312)" ]
403
+
404
+ @test cut ([0 , 1 , 1 , 1 , 1 ], 2 ) ==
405
+ [" Q1: [0, 1)" , " Q2: [1, 1]" , " Q2: [1, 1]" , " Q2: [1, 1]" , " Q2: [1, 1]" ]
406
+
407
+ @test cut ([1 , 1 , 1 , 1 , 2 ], 2 ) ==
408
+ [" Q1: [1, 2)" , " Q1: [1, 2)" , " Q1: [1, 2)" , " Q1: [1, 2)" , " Q2: [2, 2]" ]
409
+ end
410
+
364
411
end
0 commit comments