@@ -541,3 +541,84 @@ def test_cleanup_closepoly():
541541 cleaned = p .cleaned (remove_nans = True )
542542 assert len (cleaned ) == 1
543543 assert cleaned .codes [0 ] == Path .STOP
544+
545+
546+ def test_interpolated_moveto ():
547+ # Initial path has two subpaths with two LINETOs each
548+ vertices = np .array ([[0 , 0 ],
549+ [0 , 1 ],
550+ [1 , 2 ],
551+ [4 , 4 ],
552+ [4 , 5 ],
553+ [5 , 5 ]])
554+ codes = [Path .MOVETO , Path .LINETO , Path .LINETO ] * 2
555+
556+ path = Path (vertices , codes )
557+ result = path .interpolated (3 )
558+
559+ # Result should have two subpaths with six LINETOs each
560+ expected_subpath_codes = [Path .MOVETO ] + [Path .LINETO ] * 6
561+ np .testing .assert_array_equal (result .codes , expected_subpath_codes * 2 )
562+
563+
564+ def test_interpolated_closepoly ():
565+ codes = [Path .MOVETO ] + [Path .LINETO ]* 2 + [Path .CLOSEPOLY ]
566+ vertices = [(4 , 3 ), (5 , 4 ), (5 , 3 ), (0 , 0 )]
567+
568+ path = Path (vertices , codes )
569+ result = path .interpolated (2 )
570+
571+ expected_vertices = np .array ([[4 , 3 ],
572+ [4.5 , 3.5 ],
573+ [5 , 4 ],
574+ [5 , 3.5 ],
575+ [5 , 3 ],
576+ [4.5 , 3 ],
577+ [4 , 3 ]])
578+ expected_codes = [Path .MOVETO ] + [Path .LINETO ]* 5 + [Path .CLOSEPOLY ]
579+
580+ np .testing .assert_allclose (result .vertices , expected_vertices )
581+ np .testing .assert_array_equal (result .codes , expected_codes )
582+
583+ # Usually closepoly is the last vertex but does not have to be.
584+ codes += [Path .LINETO ]
585+ vertices += [(2 , 1 )]
586+
587+ path = Path (vertices , codes )
588+ result = path .interpolated (2 )
589+
590+ extra_expected_vertices = np .array ([[3 , 2 ],
591+ [2 , 1 ]])
592+ expected_vertices = np .concatenate ([expected_vertices , extra_expected_vertices ])
593+
594+ expected_codes += [Path .LINETO ] * 2
595+
596+ np .testing .assert_allclose (result .vertices , expected_vertices )
597+ np .testing .assert_array_equal (result .codes , expected_codes )
598+
599+
600+ def test_interpolated_moveto_closepoly ():
601+ # Initial path has two closed subpaths
602+ codes = ([Path .MOVETO ] + [Path .LINETO ]* 2 + [Path .CLOSEPOLY ]) * 2
603+ vertices = [(4 , 3 ), (5 , 4 ), (5 , 3 ), (0 , 0 ), (8 , 6 ), (10 , 8 ), (10 , 6 ), (0 , 0 )]
604+
605+ path = Path (vertices , codes )
606+ result = path .interpolated (2 )
607+
608+ expected_vertices1 = np .array ([[4 , 3 ],
609+ [4.5 , 3.5 ],
610+ [5 , 4 ],
611+ [5 , 3.5 ],
612+ [5 , 3 ],
613+ [4.5 , 3 ],
614+ [4 , 3 ]])
615+ expected_vertices = np .concatenate ([expected_vertices1 , expected_vertices1 * 2 ])
616+ expected_codes = ([Path .MOVETO ] + [Path .LINETO ]* 5 + [Path .CLOSEPOLY ]) * 2
617+
618+ np .testing .assert_allclose (result .vertices , expected_vertices )
619+ np .testing .assert_array_equal (result .codes , expected_codes )
620+
621+
622+ def test_interpolated_empty_path ():
623+ path = Path (np .zeros ((0 , 2 )))
624+ assert path .interpolated (42 ) is path
0 commit comments