66#include < utility>
77#include < vector>
88
9+ #include < sdsl/vectors.hpp>
910#include < sdsl/wavelet_trees.hpp>
1011
1112#include < pybind11/pybind11.h>
@@ -388,22 +389,186 @@ inline auto add_wt_int(py::module& m, std::string&& base_name)
388389 return cls;
389390}
390391
392+ template <class bit_vector =sdsl::bit_vector>
393+ inline auto add_wm_int (py::module & m, std::string&& base_name)
394+ {
395+ auto cls = add_wavelet_class<sdsl::wm_int<bit_vector>>(
396+ m, (" WaveletMatrixInt" + base_name).c_str (), doc_wm_int);
397+ m.attr (" wavelet_matrix_int" ).attr (" __setitem__" )(base_name, cls);
398+
399+ return cls;
400+ }
401+
402+ template <class bit_vector =sdsl::bit_vector>
403+ inline auto add_wt_huff (py::module & m, std::string&& base_name)
404+ {
405+ auto cls = add_wavelet_class<sdsl::wt_huff<bit_vector>>(
406+ m, (" WaveletTreeHuffman" + base_name).c_str (), doc_wt_huff);
407+ m.attr (" wavelet_tree_huffman" ).attr (" __setitem__" )(base_name, cls);
408+
409+ return cls;
410+ }
411+
412+ template <class bit_vector =sdsl::bit_vector>
413+ inline auto add_wt_huff_int (py::module & m, std::string&& base_name)
414+ {
415+ auto cls = add_wavelet_class<sdsl::wt_huff_int<bit_vector>>(
416+ m, (" WaveletTreeHuffmanInt" + base_name).c_str (), doc_wt_huff);
417+ m.attr (" wavelet_tree_huffman_int" ).attr (" __setitem__" )(base_name, cls);
418+
419+ return cls;
420+ }
421+
422+
423+ template <class bit_vector =sdsl::bit_vector>
424+ inline auto add_wt_hutu (py::module & m, std::string&& base_name)
425+ {
426+ auto cls = add_wavelet_class<sdsl::wt_hutu<bit_vector>>(
427+ m, (" WaveletTreeHuTucker" + base_name).c_str (), doc_wt_hutu);
428+ m.attr (" wavelet_tree_hu_tucker" ).attr (" __setitem__" )(base_name, cls);
429+
430+ return cls;
431+ }
432+
433+ template <class bit_vector =sdsl::bit_vector>
434+ inline auto add_wt_hutu_int (py::module & m, std::string&& base_name)
435+ {
436+ auto cls = add_wavelet_class<sdsl::wt_hutu_int<bit_vector>>(
437+ m, (" WaveletTreeHuTuckerInt" + base_name).c_str (), doc_wt_hutu);
438+ m.attr (" wavelet_tree_hu_tucker_int" ).attr (" __setitem__" )(base_name, cls);
439+
440+ return cls;
441+ }
442+
443+
444+ template <class bit_vector =sdsl::bit_vector>
445+ inline auto add_wt_blcd (py::module & m, std::string&& base_name)
446+ {
447+ auto cls = add_wavelet_class<sdsl::wt_blcd<bit_vector>>(
448+ m, (" WaveletTreeBalanced" + base_name).c_str (), doc_wt_blcd);
449+ m.attr (" wavelet_tree_balanced" ).attr (" __setitem__" )(base_name, cls);
450+
451+ return cls;
452+ }
453+
454+
455+ template <class bit_vector =sdsl::bit_vector>
456+ inline auto add_wt_blcd_int (py::module & m, std::string&& base_name)
457+ {
458+ auto cls = add_wavelet_class<sdsl::wt_huff_int<bit_vector>>(
459+ m, (" WaveletTreeBalancedInt" + base_name).c_str (), doc_wt_blcd);
460+ m.attr (" wavelet_tree_balanced_int" ).attr (" __setitem__" )(base_name, cls);
461+
462+ return cls;
463+ }
464+
391465
392466template <class bit_vector =sdsl::bit_vector>
393467inline auto add_wt_int (py::module & m, const std::string& base_name)
394468{ return add_wt_int<bit_vector>(m, std::string (base_name)); }
395469
396470
471+ template <class bit_vector =sdsl::bit_vector>
472+ inline auto add_wm_int (py::module & m, const std::string& base_name)
473+ { return add_wm_int<bit_vector>(m, std::string (base_name)); }
474+
475+
476+ template <class bit_vector =sdsl::bit_vector>
477+ inline auto add_wt_huff (py::module & m, const std::string& base_name)
478+ { return add_wt_huff<bit_vector>(m, std::string (base_name)); }
479+
480+ template <class bit_vector =sdsl::bit_vector>
481+ inline auto add_wt_huff_int (py::module & m, const std::string& base_name)
482+ { return add_wt_huff_int<bit_vector>(m, std::string (base_name)); }
483+
484+ template <class bit_vector =sdsl::bit_vector>
485+ inline auto add_wt_hutu (py::module & m, const std::string& base_name)
486+ { return add_wt_hutu<bit_vector>(m, std::string (base_name)); }
487+
488+ template <class bit_vector =sdsl::bit_vector>
489+ inline auto add_wt_hutu_int (py::module & m, const std::string& base_name)
490+ { return add_wt_hutu_int<bit_vector>(m, std::string (base_name)); }
491+
492+ template <class bit_vector =sdsl::bit_vector>
493+ inline auto add_wt_blcd (py::module & m, const std::string& base_name)
494+ { return add_wt_blcd<bit_vector>(m, std::string (base_name)); }
495+
496+ template <class bit_vector =sdsl::bit_vector>
497+ inline auto add_wt_blcd_int (py::module & m, const std::string& base_name)
498+ { return add_wt_blcd_int<bit_vector>(m, std::string (base_name)); }
499+
500+
397501template <class bit_vector =sdsl::bit_vector>
398502inline auto add_wt_int (py::module & m, const py::class_<bit_vector>& base)
399503{
400504 auto base_name = py::cast<std::string>(base.attr (" __name__" ));
401-
402505 auto cls = add_wt_int<bit_vector>(m, base_name);
403-
404- m.attr (" wavelet_tree_int" ).attr (" __setitem__" )(base_name, cls);
405506 m.attr (" wavelet_tree_int_by_base" ).attr (" __setitem__" )(base, cls);
507+ return cls;
508+ }
509+
510+
511+ template <class bit_vector =sdsl::bit_vector>
512+ inline auto add_wm_int (py::module & m, const py::class_<bit_vector>& base)
513+ {
514+ auto base_name = py::cast<std::string>(base.attr (" __name__" ));
515+ auto cls = add_wm_int<bit_vector>(m, base_name);
516+ m.attr (" wavelet_matrix_int_by_base" ).attr (" __setitem__" )(base, cls);
517+ return cls;
518+ }
519+
520+ template <class bit_vector =sdsl::bit_vector>
521+ inline auto add_wt_huff (py::module & m, const py::class_<bit_vector>& base)
522+ {
523+ auto base_name = py::cast<std::string>(base.attr (" __name__" ));
524+ auto cls = add_wt_huff<bit_vector>(m, base_name);
525+ m.attr (" wavelet_tree_huffman_by_base" ).attr (" __setitem__" )(base, cls);
526+ return cls;
527+ }
528+
529+ template <class bit_vector =sdsl::bit_vector>
530+ inline auto add_wt_huff_int (py::module & m, const py::class_<bit_vector>& base)
531+ {
532+ auto base_name = py::cast<std::string>(base.attr (" __name__" ));
533+ auto cls = add_wt_huff_int<bit_vector>(m, base_name);
534+ m.attr (" wavelet_tree_huffman_int_by_base" ).attr (" __setitem__" )(base, cls);
535+ return cls;
536+ }
537+
538+ template <class bit_vector =sdsl::bit_vector>
539+ inline auto add_wt_hutu (py::module & m, const py::class_<bit_vector>& base)
540+ {
541+ auto base_name = py::cast<std::string>(base.attr (" __name__" ));
542+ auto cls = add_wt_hutu<bit_vector>(m, base_name);
543+ m.attr (" wavelet_tree_hu_tucker_by_base" ).attr (" __setitem__" )(base, cls);
544+ return cls;
545+ }
406546
547+ template <class bit_vector =sdsl::bit_vector>
548+ inline auto add_wt_hutu_int (py::module & m, const py::class_<bit_vector>& base)
549+ {
550+ auto base_name = py::cast<std::string>(base.attr (" __name__" ));
551+ auto cls = add_wt_hutu_int<bit_vector>(m, base_name);
552+ m.attr (" wavelet_tree_hu_tucker_int_by_base" ).attr (" __setitem__" )(base, cls);
553+ return cls;
554+ }
555+
556+
557+ template <class bit_vector =sdsl::bit_vector>
558+ inline auto add_wt_blcd (py::module & m, const py::class_<bit_vector>& base)
559+ {
560+ auto base_name = py::cast<std::string>(base.attr (" __name__" ));
561+ auto cls = add_wt_blcd<bit_vector>(m, base_name);
562+ m.attr (" wavelet_tree_balanced_by_base" ).attr (" __setitem__" )(base, cls);
563+ return cls;
564+ }
565+
566+ template <class bit_vector =sdsl::bit_vector>
567+ inline auto add_wt_blcd_int (py::module & m, const py::class_<bit_vector>& base)
568+ {
569+ auto base_name = py::cast<std::string>(base.attr (" __name__" ));
570+ auto cls = add_wt_blcd_int<bit_vector>(m, base_name);
571+ m.attr (" wavelet_tree_balanced_int_by_base" ).attr (" __setitem__" )(base, cls);
407572 return cls;
408573}
409574
@@ -415,30 +580,70 @@ inline auto add_wavelet(py::module& m,
415580 m.attr (" all_wavelet_trees" ) = py::list ();
416581 m.attr (" wavelet_tree_int" ) = py::dict ();
417582 m.attr (" wavelet_tree_int_by_base" ) = py::dict ();
583+ m.attr (" wavelet_matrix_int" ) = py::dict ();
584+ m.attr (" wavelet_matrix_int_by_base" ) = py::dict ();
585+ m.attr (" wavelet_tree_huffman" ) = py::dict ();
586+ m.attr (" wavelet_tree_huffman_by_base" ) = py::dict ();
587+ m.attr (" wavelet_tree_huffman_int" ) = py::dict ();
588+ m.attr (" wavelet_tree_huffman_int_by_base" ) = py::dict ();
589+ m.attr (" wavelet_tree_hu_tucker" ) = py::dict ();
590+ m.attr (" wavelet_tree_hu_tucker_by_base" ) = py::dict ();
591+ m.attr (" wavelet_tree_hu_tucker_int" ) = py::dict ();
592+ m.attr (" wavelet_tree_hu_tucker_int_by_base" ) = py::dict ();
593+ m.attr (" wavelet_tree_balanced" ) = py::dict ();
594+ m.attr (" wavelet_tree_balanced_by_base" ) = py::dict ();
595+ m.attr (" wavelet_tree_balanced_int" ) = py::dict ();
596+ m.attr (" wavelet_tree_balanced_int_by_base" ) = py::dict ();
418597
419598 return std::make_tuple (
420599 add_wt_int<>(m, " " ),
421600 add_wt_int (m, std::get<0 >(t)),
422- add_wt_int (m, std::get<3 >(t)),
423- // add_wt_int(m, std::get<5>(t)),
424- add_wt_int (m, std::get<6 >(t)),
425- add_wt_int (m, std::get<8 >(t)),
426- add_wt_int (m, std::get<10 >(t)),
427- add_wavelet_class<sdsl::wm_int<>>(m, " WaveletMatrixInt" , doc_wm_int),
428-
429- add_wavelet_class<sdsl::wt_gmr_rs<>>(m, " WaveletTreeGMRrs" ,
601+ add_wt_int (m, std::get<1 >(t)),
602+ add_wt_int (m, std::get<2 >(t)),
603+
604+ add_wm_int<>(m, " " ),
605+ add_wm_int (m, std::get<0 >(t)),
606+ add_wm_int (m, std::get<1 >(t)),
607+ add_wm_int (m, std::get<2 >(t)),
608+
609+ add_wt_huff<>(m, " " ),
610+ add_wt_huff (m, std::get<0 >(t)),
611+ add_wt_huff (m, std::get<1 >(t)),
612+ add_wt_huff (m, std::get<2 >(t)),
613+
614+ add_wt_huff_int<>(m, " " ),
615+ add_wt_huff_int (m, std::get<0 >(t)),
616+ add_wt_huff_int (m, std::get<1 >(t)),
617+ add_wt_huff_int (m, std::get<2 >(t)),
618+
619+ add_wt_hutu<>(m, " " ),
620+ add_wt_hutu (m, std::get<0 >(t)),
621+ add_wt_hutu (m, std::get<1 >(t)),
622+ add_wt_hutu (m, std::get<2 >(t)),
623+
624+ add_wt_hutu_int<>(m, " " ),
625+ add_wt_hutu_int (m, std::get<0 >(t)),
626+ add_wt_hutu_int (m, std::get<1 >(t)),
627+ add_wt_hutu_int (m, std::get<2 >(t)),
628+
629+ add_wt_blcd<>(m, " " ),
630+ add_wt_blcd (m, std::get<0 >(t)),
631+ add_wt_blcd (m, std::get<1 >(t)),
632+ add_wt_blcd (m, std::get<2 >(t)),
633+
634+ add_wt_blcd_int<>(m, " " ),
635+ add_wt_blcd_int (m, std::get<0 >(t)),
636+ add_wt_blcd_int (m, std::get<1 >(t)),
637+ add_wt_blcd_int (m, std::get<2 >(t)),
638+
639+ add_wavelet_class<sdsl::wt_gmr_rs<>>(m, " WaveletTreeGMRrankselect" ,
430640 doc_wt_gmr_rs),
431- add_wavelet_class<sdsl::wt_gmr<>>(m, " WaveletTreeGMR" , doc_wt_gmr),
432- add_wavelet_class<sdsl::wt_huff<>>(m, " WaveletTreeHuffman" ,
433- doc_wt_huff),
434- add_wavelet_class<sdsl::wt_huff_int<>>(m, " WaveletTreeHuffmanInt" ,
435- doc_wt_huff),
436- add_wavelet_class<sdsl::wt_blcd<>>(m, " WaveletTreeBlcd" , doc_wt_blcd),
437- add_wavelet_class<sdsl::wt_blcd_int<>>(m, " WaveletTreeBlcdInt" ,
438- doc_wt_blcd),
439- add_wavelet_class<sdsl::wt_hutu<>>(m, " WaveletTreeHuTucker" ,
440- doc_wt_hutu),
441- add_wavelet_class<sdsl::wt_hutu_int<>>(m, " WaveletTreeHuTuckerInt" ,
442- doc_wt_hutu),
641+ add_wavelet_class<sdsl::wt_gmr_rs<sdsl::enc_vector<>>>(
642+ m, " WaveletTreeGMRrankselectEnc" , doc_wt_gmr_rs),
643+ add_wavelet_class<sdsl::wt_gmr<>>(m, " WaveletTreeGolynskiMunroRao" ,
644+ doc_wt_gmr),
645+ add_wavelet_class<sdsl::wt_gmr<sdsl::enc_vector<>>>(
646+ m, " WaveletTreeGolynskiMunroRaoEnc" , doc_wt_gmr),
647+
443648 add_wavelet_class<sdsl::wt_ap<>>(m, " WaveletTreeAP" , doc_wt_ap));
444649}
0 commit comments