multiarrangement 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- coverlib/__init__.py +1 -0
- coverlib/api.py +71 -0
- coverlib/cache.py +53 -0
- coverlib/cli.py +50 -0
- coverlib/combinatorics.py +40 -0
- coverlib/fetchers.py +65 -0
- coverlib/optimizer.py +239 -0
- coverlib/repair.py +68 -0
- multiarrangement/__init__.py +488 -0
- multiarrangement/adaptive/__init__.py +18 -0
- multiarrangement/adaptive/adaptive_experiment.py +221 -0
- multiarrangement/adaptive/lift_weakest.py +577 -0
- multiarrangement/cli.py +393 -0
- multiarrangement/core/__init__.py +6 -0
- multiarrangement/core/batch_generator.py +947 -0
- multiarrangement/core/experiment.py +225 -0
- multiarrangement/data/__init__.py +1 -0
- multiarrangement/data/batches_15videos_batchsize8.txt +6 -0
- multiarrangement/data/batches_24videos_batchsize8.txt +15 -0
- multiarrangement/data/batches_30videos_batchsize8.txt +22 -0
- multiarrangement/data/batches_58videos_batchsize8.txt +77 -0
- multiarrangement/data/img1.PNG +0 -0
- multiarrangement/examples/__init__.py +2 -0
- multiarrangement/examples/ltw_audio.py +38 -0
- multiarrangement/examples/ltw_video.py +34 -0
- multiarrangement/examples/setcover_audio.py +35 -0
- multiarrangement/examples/setcover_video.py +31 -0
- multiarrangement/experiment_runner.py +940 -0
- multiarrangement/ljcr_cache/v15_k8_t2.txt +6 -0
- multiarrangement/optimize_cover_flex.py +868 -0
- multiarrangement/optimize_cover_pure.py +804 -0
- multiarrangement/results.py +114 -0
- multiarrangement/try.py +24 -0
- multiarrangement/ui/__init__.py +6 -0
- multiarrangement/ui/fullscreen_interface.py +255 -0
- multiarrangement/ui/interface.py +577 -0
- multiarrangement/utils/__init__.py +7 -0
- multiarrangement/utils/data_processing.py +294 -0
- multiarrangement/utils/file_utils.py +200 -0
- multiarrangement/utils/video_processing.py +414 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (10).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (11).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (12).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (13).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (14).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (15).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (16).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (2).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (3).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (4).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (5).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (6).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (7).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (8).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15audios/1 - Copy (9).mp3 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/002_M.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/004_F.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/005_M.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/007_F.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/008_M.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/012_F.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/013_M.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/015_F.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/017_F.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/020_M.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/021_F.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/028_M.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/031_F.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/035_M.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/15videos/036_F.avi +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/demovids/Done.mp4 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/demovids/Doubleclick.mp4 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/demovids/Same.mkv +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/demovids/drag.mp4 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/demovids/similar.mp4 +0 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v100_k8_t2.txt +1 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v10_k3_t2.txt +17 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v10_k4_t2.txt +9 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v10_k5_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v10_k6_t2.txt +4 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v10_k7_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v10_k8_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v10_k9_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v11_k10_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v11_k3_t2.txt +19 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v11_k4_t2.txt +11 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v11_k5_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v11_k6_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v11_k7_t2.txt +4 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v11_k8_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v11_k9_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v12_k10_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v12_k3_t2.txt +24 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v12_k4_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v12_k5_t2.txt +9 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v12_k6_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v12_k7_t2.txt +5 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v12_k8_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v12_k9_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v13_k10_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v13_k3_t2.txt +26 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v13_k4_t2.txt +13 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v13_k5_t2.txt +10 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v13_k6_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v13_k7_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v13_k8_t2.txt +4 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v13_k9_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v14_k10_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v14_k3_t2.txt +33 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v14_k4_t2.txt +18 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v14_k5_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v14_k6_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v14_k7_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v14_k8_t2.txt +5 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v14_k9_t2.txt +4 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v15_k10_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v15_k3_t2.txt +35 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v15_k4_t2.txt +19 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v15_k5_t2.txt +13 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v15_k6_t2.txt +10 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v15_k7_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v15_k8_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v15_k9_t2.txt +4 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v16_k10_t2.txt +4 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v16_k3_t2.txt +43 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v16_k4_t2.txt +20 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v16_k5_t2.txt +15 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v16_k6_t2.txt +10 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v16_k7_t2.txt +8 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v16_k8_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v16_k9_t2.txt +5 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v17_k10_t2.txt +5 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v17_k3_t2.txt +46 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v17_k4_t2.txt +26 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v17_k5_t2.txt +16 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v17_k6_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v17_k7_t2.txt +9 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v17_k8_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v17_k9_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v18_k10_t2.txt +5 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v18_k3_t2.txt +54 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v18_k4_t2.txt +27 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v18_k5_t2.txt +18 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v18_k6_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v18_k7_t2.txt +10 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v18_k8_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v18_k9_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v19_k10_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v19_k3_t2.txt +57 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v19_k4_t2.txt +31 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v19_k5_t2.txt +19 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v19_k6_t2.txt +15 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v19_k7_t2.txt +11 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v19_k8_t2.txt +9 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v19_k9_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v20_k10_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v20_k3_t2.txt +67 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v20_k4_t2.txt +35 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v20_k5_t2.txt +21 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v20_k6_t2.txt +16 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v20_k7_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v20_k8_t2.txt +9 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v20_k9_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v21_k10_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v21_k3_t2.txt +70 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v21_k4_t2.txt +37 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v21_k5_t2.txt +21 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v21_k6_t2.txt +17 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v21_k7_t2.txt +13 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v21_k8_t2.txt +11 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v21_k9_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v22_k10_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v22_k3_t2.txt +81 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v22_k4_t2.txt +39 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v22_k5_t2.txt +27 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v22_k6_t2.txt +19 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v22_k7_t2.txt +13 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v22_k8_t2.txt +11 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v22_k9_t2.txt +9 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v23_k10_t2.txt +8 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v23_k3_t2.txt +85 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v23_k4_t2.txt +46 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v23_k5_t2.txt +28 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v23_k6_t2.txt +21 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v23_k7_t2.txt +16 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v23_k8_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v23_k9_t2.txt +10 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v24_k10_t2.txt +8 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v24_k3_t2.txt +96 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v24_k4_t2.txt +48 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v24_k5_t2.txt +30 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v24_k6_t2.txt +22 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v24_k7_t2.txt +17 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v24_k8_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v24_k9_t2.txt +11 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v25_k10_t2.txt +10 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v25_k3_t2.txt +100 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v25_k4_t2.txt +50 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v25_k5_t2.txt +30 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v25_k6_t2.txt +23 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v25_k7_t2.txt +18 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v25_k8_t2.txt +13 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v25_k9_t2.txt +11 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v26_k10_t2.txt +10 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v26_k3_t2.txt +113 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v26_k4_t2.txt +59 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v26_k5_t2.txt +37 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v26_k6_t2.txt +24 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v26_k7_t2.txt +19 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v26_k8_t2.txt +13 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v26_k9_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v27_k10_t2.txt +11 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v27_k3_t2.txt +117 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v27_k4_t2.txt +61 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v27_k5_t2.txt +38 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v27_k6_t2.txt +27 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v27_k7_t2.txt +20 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v27_k8_t2.txt +17 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v27_k9_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v28_k10_t2.txt +11 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v28_k3_t2.txt +131 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v28_k4_t2.txt +63 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v28_k5_t2.txt +40 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v28_k6_t2.txt +28 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v28_k7_t2.txt +22 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v28_k8_t2.txt +17 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v28_k9_t2.txt +14 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v29_k10_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v29_k3_t2.txt +136 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v29_k4_t2.txt +73 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v29_k5_t2.txt +43 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v29_k6_t2.txt +30 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v29_k7_t2.txt +23 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v29_k8_t2.txt +18 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v29_k9_t2.txt +14 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v30_k10_t2.txt +13 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v30_k3_t2.txt +150 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v30_k4_t2.txt +75 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v30_k5_t2.txt +48 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v30_k6_t2.txt +31 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v30_k7_t2.txt +25 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v30_k8_t2.txt +19 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v30_k9_t2.txt +15 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v31_k10_t2.txt +13 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v31_k3_t2.txt +155 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v31_k4_t2.txt +78 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v31_k5_t2.txt +50 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v31_k6_t2.txt +31 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v31_k7_t2.txt +26 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v31_k8_t2.txt +20 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v31_k9_t2.txt +17 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v32_k10_t2.txt +14 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v32_k3_t2.txt +171 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v32_k4_t2.txt +88 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v32_k5_t2.txt +52 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v32_k6_t2.txt +38 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v32_k7_t2.txt +28 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v32_k8_t2.txt +20 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v32_k9_t2.txt +18 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v33_k10_t2.txt +15 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v33_k3_t2.txt +176 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v33_k4_t2.txt +91 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v33_k5_t2.txt +55 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v33_k6_t2.txt +39 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v33_k7_t2.txt +30 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v33_k8_t2.txt +24 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v33_k9_t2.txt +18 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v34_k10_t2.txt +16 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v34_k3_t2.txt +193 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v34_k4_t2.txt +94 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v34_k5_t2.txt +62 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v34_k6_t2.txt +40 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v34_k7_t2.txt +31 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v34_k8_t2.txt +25 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v34_k9_t2.txt +19 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v35_k10_t2.txt +17 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v35_k3_t2.txt +199 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v35_k4_t2.txt +105 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v35_k5_t2.txt +63 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v35_k6_t2.txt +42 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v35_k7_t2.txt +32 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v35_k8_t2.txt +26 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v35_k9_t2.txt +20 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v36_k10_t2.txt +18 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v36_k3_t2.txt +216 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v36_k4_t2.txt +108 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v36_k5_t2.txt +66 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v36_k6_t2.txt +47 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v36_k7_t2.txt +33 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v36_k8_t2.txt +27 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v36_k9_t2.txt +21 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v37_k10_t2.txt +19 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v37_k3_t2.txt +222 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v37_k4_t2.txt +111 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v37_k5_t2.txt +68 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v37_k6_t2.txt +50 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v37_k7_t2.txt +35 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v37_k8_t2.txt +28 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v37_k9_t2.txt +21 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v38_k10_t2.txt +19 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v38_k3_t2.txt +241 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v38_k4_t2.txt +124 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v38_k5_t2.txt +76 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v38_k6_t2.txt +51 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v38_k7_t2.txt +39 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v38_k8_t2.txt +29 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v38_k9_t2.txt +25 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v39_k10_t2.txt +20 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v39_k3_t2.txt +247 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v39_k4_t2.txt +127 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v39_k5_t2.txt +78 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v39_k6_t2.txt +54 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v39_k7_t2.txt +39 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v39_k8_t2.txt +32 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v39_k9_t2.txt +26 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v40_k10_t2.txt +21 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v40_k3_t2.txt +267 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v40_k4_t2.txt +130 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v40_k5_t2.txt +82 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v40_k6_t2.txt +55 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v40_k7_t2.txt +40 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v40_k8_t2.txt +33 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v40_k9_t2.txt +26 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v41_k10_t2.txt +21 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v41_k3_t2.txt +274 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v41_k4_t2.txt +144 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v41_k5_t2.txt +82 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v41_k6_t2.txt +59 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v41_k7_t2.txt +43 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v41_k8_t2.txt +34 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v41_k9_t2.txt +28 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v42_k10_t2.txt +21 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v42_k3_t2.txt +294 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v42_k4_t2.txt +147 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v42_k5_t2.txt +93 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v42_k6_t2.txt +63 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v42_k7_t2.txt +46 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v42_k8_t2.txt +35 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v42_k9_t2.txt +29 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v43_k10_t2.txt +26 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v43_k3_t2.txt +301 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v43_k4_t2.txt +151 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v43_k5_t2.txt +95 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v43_k6_t2.txt +65 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v43_k7_t2.txt +49 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v43_k8_t2.txt +37 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v43_k9_t2.txt +30 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v44_k10_t2.txt +26 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v44_k3_t2.txt +323 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v44_k4_t2.txt +165 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v44_k5_t2.txt +99 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v44_k6_t2.txt +67 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v44_k7_t2.txt +51 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v44_k8_t2.txt +39 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v44_k9_t2.txt +30 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v45_k10_t2.txt +27 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v45_k3_t2.txt +330 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v45_k4_t2.txt +169 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v45_k5_t2.txt +99 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v45_k6_t2.txt +70 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v45_k7_t2.txt +52 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v45_k8_t2.txt +42 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v45_k9_t2.txt +33 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v46_k10_t2.txt +28 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v46_k3_t2.txt +353 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v46_k4_t2.txt +173 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v46_k5_t2.txt +111 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v46_k6_t2.txt +73 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v46_k7_t2.txt +53 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v46_k8_t2.txt +43 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v46_k9_t2.txt +34 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v47_k10_t2.txt +29 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v47_k3_t2.txt +361 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v47_k4_t2.txt +188 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v47_k5_t2.txt +113 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v47_k6_t2.txt +79 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v47_k7_t2.txt +56 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v47_k8_t2.txt +44 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v47_k9_t2.txt +35 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v48_k10_t2.txt +30 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v48_k3_t2.txt +384 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v48_k4_t2.txt +192 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v48_k5_t2.txt +117 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v48_k6_t2.txt +80 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v48_k7_t2.txt +56 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v48_k8_t2.txt +47 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v48_k9_t2.txt +37 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v49_k10_t2.txt +30 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v49_k3_t2.txt +392 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v49_k4_t2.txt +196 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v49_k5_t2.txt +122 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v49_k6_t2.txt +82 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v49_k7_t2.txt +56 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v49_k8_t2.txt +49 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v49_k9_t2.txt +38 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v4_k3_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v50_k10_t2.txt +30 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v50_k3_t2.txt +417 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v50_k4_t2.txt +213 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v50_k5_t2.txt +130 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v50_k6_t2.txt +87 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v50_k7_t2.txt +65 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v50_k8_t2.txt +49 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v50_k9_t2.txt +40 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v51_k10_t2.txt +35 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v51_k3_t2.txt +425 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v51_k4_t2.txt +217 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v51_k5_t2.txt +135 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v51_k6_t2.txt +90 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v51_k7_t2.txt +66 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v51_k8_t2.txt +51 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v51_k9_t2.txt +41 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v52_k10_t2.txt +36 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v52_k3_t2.txt +451 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v52_k4_t2.txt +221 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v52_k5_t2.txt +136 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v52_k6_t2.txt +96 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v52_k7_t2.txt +68 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v52_k8_t2.txt +54 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v52_k9_t2.txt +44 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v53_k10_t2.txt +37 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v53_k3_t2.txt +460 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v53_k4_t2.txt +239 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v53_k5_t2.txt +140 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v53_k6_t2.txt +98 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v53_k7_t2.txt +70 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v53_k8_t2.txt +56 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v53_k9_t2.txt +45 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v54_k10_t2.txt +38 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v54_k3_t2.txt +486 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v54_k4_t2.txt +243 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v54_k5_t2.txt +152 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v54_k6_t2.txt +99 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v54_k7_t2.txt +73 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v54_k8_t2.txt +57 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v54_k9_t2.txt +46 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v55_k10_t2.txt +39 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v55_k3_t2.txt +495 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v55_k4_t2.txt +248 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v55_k5_t2.txt +154 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v55_k6_t2.txt +105 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v55_k7_t2.txt +76 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v55_k8_t2.txt +57 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v55_k9_t2.txt +49 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v56_k10_t2.txt +40 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v56_k3_t2.txt +523 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v56_k4_t2.txt +266 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v56_k5_t2.txt +157 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v56_k6_t2.txt +110 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v56_k7_t2.txt +80 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v56_k8_t2.txt +57 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v56_k9_t2.txt +49 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v57_k10_t2.txt +42 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v57_k3_t2.txt +532 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v57_k4_t2.txt +271 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v57_k5_t2.txt +161 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v57_k6_t2.txt +114 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v57_k7_t2.txt +82 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v57_k8_t2.txt +57 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v57_k9_t2.txt +51 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v58_k10_t2.txt +43 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v58_k3_t2.txt +561 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v58_k4_t2.txt +276 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v58_k5_t2.txt +174 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v58_k6_t2.txt +117 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v58_k7_t2.txt +84 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v58_k8_t2.txt +66 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v58_k9_t2.txt +52 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v59_k10_t2.txt +48 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v59_k3_t2.txt +571 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v59_k4_t2.txt +295 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v59_k5_t2.txt +177 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v59_k6_t2.txt +119 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v59_k7_t2.txt +86 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v59_k8_t2.txt +67 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v59_k9_t2.txt +55 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v5_k3_t2.txt +4 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v5_k4_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v60_k10_t2.txt +48 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v60_k3_t2.txt +600 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v60_k4_t2.txt +300 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v60_k5_t2.txt +180 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v60_k6_t2.txt +128 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v60_k7_t2.txt +91 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v60_k8_t2.txt +68 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v60_k9_t2.txt +57 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v61_k10_t2.txt +49 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v61_k3_t2.txt +610 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v61_k4_t2.txt +305 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v61_k5_t2.txt +183 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v61_k6_t2.txt +132 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v61_k7_t2.txt +95 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v61_k8_t2.txt +71 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v61_k9_t2.txt +57 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v62_k10_t2.txt +50 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v62_k3_t2.txt +641 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v62_k4_t2.txt +326 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v62_k5_t2.txt +199 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v62_k6_t2.txt +135 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v62_k7_t2.txt +98 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v62_k8_t2.txt +72 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v62_k9_t2.txt +58 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v63_k10_t2.txt +51 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v63_k3_t2.txt +651 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v63_k4_t2.txt +331 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v63_k5_t2.txt +202 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v63_k6_t2.txt +140 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v63_k7_t2.txt +100 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v63_k8_t2.txt +72 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v63_k9_t2.txt +59 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v64_k10_t2.txt +52 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v64_k3_t2.txt +683 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v64_k4_t2.txt +336 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v64_k5_t2.txt +205 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v64_k6_t2.txt +142 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v64_k7_t2.txt +102 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v64_k8_t2.txt +72 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v64_k9_t2.txt +60 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v65_k10_t2.txt +53 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v65_k3_t2.txt +694 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v65_k4_t2.txt +358 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v65_k5_t2.txt +208 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v65_k6_t2.txt +143 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v65_k7_t2.txt +103 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v65_k8_t2.txt +82 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v65_k9_t2.txt +61 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v66_k10_t2.txt +54 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v66_k3_t2.txt +726 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v66_k4_t2.txt +363 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v66_k5_t2.txt +225 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v66_k6_t2.txt +143 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v66_k7_t2.txt +110 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v66_k8_t2.txt +83 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v66_k9_t2.txt +68 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v67_k10_t2.txt +57 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v67_k3_t2.txt +737 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v67_k4_t2.txt +369 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v67_k5_t2.txt +228 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v67_k6_t2.txt +157 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v67_k7_t2.txt +115 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v67_k8_t2.txt +85 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v67_k9_t2.txt +69 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v68_k10_t2.txt +58 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v68_k3_t2.txt +771 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v68_k4_t2.txt +391 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v68_k5_t2.txt +232 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v68_k6_t2.txt +160 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v68_k7_t2.txt +118 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v68_k8_t2.txt +88 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v68_k9_t2.txt +71 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v69_k10_t2.txt +59 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v69_k3_t2.txt +782 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v69_k4_t2.txt +397 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v69_k5_t2.txt +237 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v69_k6_t2.txt +163 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v69_k7_t2.txt +121 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v69_k8_t2.txt +90 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v69_k9_t2.txt +72 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v6_k3_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v6_k4_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v6_k5_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v70_k10_t2.txt +60 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v70_k3_t2.txt +817 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v70_k4_t2.txt +403 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v70_k5_t2.txt +252 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v70_k6_t2.txt +172 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v70_k7_t2.txt +124 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v70_k8_t2.txt +92 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v70_k9_t2.txt +73 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v71_k10_t2.txt +61 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v71_k3_t2.txt +829 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v71_k4_t2.txt +426 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v71_k5_t2.txt +257 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v71_k6_t2.txt +177 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v71_k7_t2.txt +127 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v71_k8_t2.txt +96 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v71_k9_t2.txt +73 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v72_k10_t2.txt +62 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v72_k3_t2.txt +864 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v72_k4_t2.txt +432 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v72_k5_t2.txt +260 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v72_k6_t2.txt +180 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v72_k7_t2.txt +135 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v72_k8_t2.txt +99 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v72_k9_t2.txt +73 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v73_k10_t2.txt +64 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v73_k3_t2.txt +876 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v73_k4_t2.txt +438 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v73_k5_t2.txt +268 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v73_k6_t2.txt +185 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v73_k7_t2.txt +137 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v73_k8_t2.txt +101 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v73_k9_t2.txt +73 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v74_k10_t2.txt +68 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v74_k3_t2.txt +913 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v74_k4_t2.txt +463 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v74_k5_t2.txt +282 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v74_k6_t2.txt +186 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v74_k7_t2.txt +140 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v74_k8_t2.txt +103 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v74_k9_t2.txt +83 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v75_k10_t2.txt +71 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v75_k3_t2.txt +925 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v75_k4_t2.txt +469 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v75_k5_t2.txt +285 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v75_k6_t2.txt +190 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v75_k7_t2.txt +142 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v75_k8_t2.txt +105 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v75_k9_t2.txt +84 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v76_k10_t2.txt +72 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v76_k3_t2.txt +963 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v76_k4_t2.txt +475 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v76_k5_t2.txt +289 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v76_k6_t2.txt +190 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v76_k7_t2.txt +144 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v76_k8_t2.txt +110 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v76_k9_t2.txt +86 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v77_k10_t2.txt +73 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v77_k3_t2.txt +976 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v77_k4_t2.txt +501 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v77_k5_t2.txt +296 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v77_k6_t2.txt +206 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v77_k7_t2.txt +148 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v77_k8_t2.txt +115 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v77_k9_t2.txt +88 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v78_k10_t2.txt +74 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v78_k3_t2.txt +1014 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v78_k4_t2.txt +507 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v78_k5_t2.txt +312 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v78_k6_t2.txt +209 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v78_k7_t2.txt +153 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v78_k8_t2.txt +119 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v78_k9_t2.txt +90 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v79_k10_t2.txt +75 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v79_k3_t2.txt +1027 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v79_k4_t2.txt +514 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v79_k5_t2.txt +316 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v79_k6_t2.txt +211 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v79_k7_t2.txt +158 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v79_k8_t2.txt +121 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v79_k9_t2.txt +90 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v7_k3_t2.txt +7 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v7_k4_t2.txt +5 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v7_k5_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v7_k6_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v80_k10_t2.txt +75 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v80_k3_t2.txt +1067 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v80_k4_t2.txt +540 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v80_k5_t2.txt +320 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v80_k6_t2.txt +216 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v80_k7_t2.txt +161 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v80_k8_t2.txt +124 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v80_k9_t2.txt +90 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v81_k10_t2.txt +76 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v81_k3_t2.txt +1080 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v81_k4_t2.txt +547 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v81_k5_t2.txt +324 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v81_k6_t2.txt +218 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v81_k7_t2.txt +163 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v81_k8_t2.txt +127 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v81_k9_t2.txt +90 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v82_k10_t2.txt +77 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v82_k3_t2.txt +1121 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v82_k4_t2.txt +554 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v82_k5_t2.txt +345 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v82_k6_t2.txt +233 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v82_k7_t2.txt +169 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v82_k8_t2.txt +131 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v82_k9_t2.txt +101 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v83_k10_t2.txt +85 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v83_k3_t2.txt +1135 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v83_k4_t2.txt +581 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v83_k5_t2.txt +349 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v83_k6_t2.txt +236 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v83_k7_t2.txt +173 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v83_k8_t2.txt +135 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v83_k9_t2.txt +102 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v84_k10_t2.txt +86 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v84_k3_t2.txt +1176 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v84_k4_t2.txt +588 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v84_k5_t2.txt +353 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v84_k6_t2.txt +238 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v84_k7_t2.txt +177 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v84_k8_t2.txt +137 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v84_k9_t2.txt +104 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v85_k10_t2.txt +88 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v85_k3_t2.txt +1190 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v85_k4_t2.txt +595 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v85_k5_t2.txt +357 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v85_k6_t2.txt +252 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v85_k7_t2.txt +182 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v85_k8_t2.txt +139 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v85_k9_t2.txt +107 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v86_k10_t2.txt +90 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v86_k3_t2.txt +1233 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v86_k4_t2.txt +624 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v86_k5_t2.txt +379 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v86_k6_t2.txt +259 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v86_k7_t2.txt +186 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v86_k8_t2.txt +141 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v86_k9_t2.txt +110 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v87_k10_t2.txt +90 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v87_k3_t2.txt +1247 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v87_k4_t2.txt +631 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v87_k5_t2.txt +383 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v87_k6_t2.txt +261 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v87_k7_t2.txt +187 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v87_k8_t2.txt +143 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v87_k9_t2.txt +113 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v88_k10_t2.txt +91 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v88_k3_t2.txt +1291 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v88_k4_t2.txt +638 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v88_k5_t2.txt +388 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v88_k6_t2.txt +264 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v88_k7_t2.txt +193 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v88_k8_t2.txt +145 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v88_k9_t2.txt +118 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v89_k10_t2.txt +91 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v89_k3_t2.txt +1306 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v89_k4_t2.txt +668 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v89_k5_t2.txt +393 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v89_k6_t2.txt +267 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v89_k7_t2.txt +195 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v89_k8_t2.txt +145 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v89_k9_t2.txt +121 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v8_k3_t2.txt +11 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v8_k4_t2.txt +6 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v8_k5_t2.txt +4 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v8_k6_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v8_k7_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v90_k10_t2.txt +91 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v90_k3_t2.txt +1350 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v90_k4_t2.txt +675 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v90_k5_t2.txt +414 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v90_k6_t2.txt +273 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v90_k7_t2.txt +195 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v90_k8_t2.txt +152 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v90_k9_t2.txt +123 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v91_k10_t2.txt +91 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v91_k3_t2.txt +1365 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v91_k4_t2.txt +683 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v91_k5_t2.txt +419 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v91_k6_t2.txt +273 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v91_k7_t2.txt +195 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v91_k8_t2.txt +158 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v91_k9_t2.txt +126 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v92_k10_t2.txt +102 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v92_k3_t2.txt +1411 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v92_k4_t2.txt +713 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v92_k5_t2.txt +424 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v92_k6_t2.txt +292 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v92_k7_t2.txt +211 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v92_k8_t2.txt +162 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v92_k9_t2.txt +127 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v93_k10_t2.txt +103 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v93_k3_t2.txt +1426 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v93_k4_t2.txt +721 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v93_k5_t2.txt +429 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v93_k6_t2.txt +295 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v93_k7_t2.txt +213 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v93_k8_t2.txt +165 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v93_k9_t2.txt +128 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v94_k10_t2.txt +104 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v94_k3_t2.txt +1473 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v94_k4_t2.txt +729 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v94_k5_t2.txt +452 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v94_k6_t2.txt +303 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v94_k7_t2.txt +218 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v94_k8_t2.txt +167 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v94_k9_t2.txt +130 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v95_k10_t2.txt +107 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v95_k3_t2.txt +1489 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v95_k4_t2.txt +760 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v95_k5_t2.txt +456 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v95_k6_t2.txt +304 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v95_k7_t2.txt +225 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v95_k8_t2.txt +170 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v95_k9_t2.txt +132 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v96_k10_t2.txt +110 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v96_k3_t2.txt +1536 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v96_k4_t2.txt +768 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v96_k5_t2.txt +462 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v96_k6_t2.txt +304 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v96_k7_t2.txt +227 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v96_k8_t2.txt +174 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v96_k9_t2.txt +136 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v97_k10_t2.txt +114 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v97_k3_t2.txt +1552 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v97_k4_t2.txt +776 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v97_k5_t2.txt +466 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v97_k6_t2.txt +324 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v97_k7_t2.txt +229 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v97_k8_t2.txt +181 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v97_k9_t2.txt +140 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v98_k10_t2.txt +119 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v98_k3_t2.txt +1601 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v98_k4_t2.txt +809 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v98_k5_t2.txt +490 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v98_k6_t2.txt +327 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v98_k7_t2.txt +242 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v98_k8_t2.txt +185 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v98_k9_t2.txt +142 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v99_k10_t2.txt +122 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v99_k3_t2.txt +1617 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v99_k4_t2.txt +817 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v99_k5_t2.txt +495 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v99_k6_t2.txt +336 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v99_k7_t2.txt +246 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v99_k8_t2.txt +190 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v99_k9_t2.txt +143 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v9_k3_t2.txt +12 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v9_k4_t2.txt +8 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v9_k5_t2.txt +5 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v9_k6_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v9_k7_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/ljcr_cache/v9_k8_t2.txt +3 -0
- multiarrangement-0.1.0.data/data/multiarrangement/sample_audio/sample1.wav +1 -0
- multiarrangement-0.1.0.data/data/multiarrangement/sample_audio/sample2.mp3 +1 -0
- multiarrangement-0.1.0.data/data/multiarrangement/sample_audio/sample3.ogg +1 -0
- multiarrangement-0.1.0.data/data/multiarrangement/sample_audio/sample4.flac +1 -0
- multiarrangement-0.1.0.dist-info/METADATA +274 -0
- multiarrangement-0.1.0.dist-info/RECORD +826 -0
- multiarrangement-0.1.0.dist-info/WHEEL +5 -0
- multiarrangement-0.1.0.dist-info/entry_points.txt +10 -0
- multiarrangement-0.1.0.dist-info/licenses/LICENSE +21 -0
- multiarrangement-0.1.0.dist-info/top_level.txt +2 -0
coverlib/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .api import generate_cover, CoverResult
|
coverlib/api.py
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Dict, List, Optional, Tuple
|
|
5
|
+
from .combinatorics import block_pairs, schonheim_lb
|
|
6
|
+
from .fetchers import fetch_ljcr_cover
|
|
7
|
+
from .cache import get_seed_blocks, save_blocks_file
|
|
8
|
+
from .optimizer import CoverOptimizer
|
|
9
|
+
|
|
10
|
+
@dataclass
|
|
11
|
+
class CoverResult:
|
|
12
|
+
v: int
|
|
13
|
+
k: int
|
|
14
|
+
blocks: List[Tuple[int,...]] # 0-based
|
|
15
|
+
b: int
|
|
16
|
+
lmax: int
|
|
17
|
+
hist: Dict[int,int]
|
|
18
|
+
sumsq: int
|
|
19
|
+
|
|
20
|
+
def generate_cover(
|
|
21
|
+
v: int,
|
|
22
|
+
k: int,
|
|
23
|
+
*,
|
|
24
|
+
passes: int = 12,
|
|
25
|
+
greedy_trials: int = 2,
|
|
26
|
+
forbid_above: int = 2,
|
|
27
|
+
group_rounds: int = 12,
|
|
28
|
+
group_time: float = 10.0,
|
|
29
|
+
group_cands: int = 100,
|
|
30
|
+
cache_dir: Optional[str] = None,
|
|
31
|
+
offline_only: bool = False,
|
|
32
|
+
seed_file: Optional[str] = None,
|
|
33
|
+
seed: int = 12345,
|
|
34
|
+
) -> CoverResult:
|
|
35
|
+
"""High-level API: fetch/cache seed, then rebalance and return result (0-based blocks)."""
|
|
36
|
+
from .repair import coverage_from_blocks # local import to avoid cycles
|
|
37
|
+
|
|
38
|
+
if seed_file:
|
|
39
|
+
path = Path(seed_file)
|
|
40
|
+
from .cache import read_blocks_file
|
|
41
|
+
blocks = read_blocks_file(path, v, k)
|
|
42
|
+
else:
|
|
43
|
+
if cache_dir:
|
|
44
|
+
cache = Path(cache_dir)
|
|
45
|
+
else:
|
|
46
|
+
try:
|
|
47
|
+
import multiarrangement
|
|
48
|
+
cache = Path(multiarrangement.__file__).parent / "ljcr_cache"
|
|
49
|
+
except Exception:
|
|
50
|
+
cache = Path("ljcr_cache")
|
|
51
|
+
blocks = get_seed_blocks(v, k, cache, offline_first=True, offline_only=offline_only, fetcher=fetch_ljcr_cover)
|
|
52
|
+
|
|
53
|
+
counts, _ = coverage_from_blocks(v, blocks)
|
|
54
|
+
if min(counts) < 1:
|
|
55
|
+
from .repair import repair_to_coverage
|
|
56
|
+
blocks = repair_to_coverage(v, k, blocks)
|
|
57
|
+
|
|
58
|
+
opt = CoverOptimizer(v, blocks, seed=seed)
|
|
59
|
+
forbid = None if forbid_above < 0 else forbid_above
|
|
60
|
+
opt.local_search(passes=passes, forbid_above=forbid, greedy_trials=greedy_trials)
|
|
61
|
+
|
|
62
|
+
improved = True
|
|
63
|
+
r = group_rounds
|
|
64
|
+
while r>0 and improved:
|
|
65
|
+
r -= 1
|
|
66
|
+
lnow = opt.lambda_max()
|
|
67
|
+
if lnow <= 2: break
|
|
68
|
+
improved = opt.reduce_lmax_group(target=lnow-1, time_limit=group_time,
|
|
69
|
+
max_pairs_considered=20, candidates_per_block=group_cands)
|
|
70
|
+
|
|
71
|
+
return CoverResult(v=v, k=k, blocks=opt.blocks, b=len(opt.blocks), lmax=opt.lambda_max(), hist=opt.histogram(), sumsq=opt.sumsq())
|
coverlib/cache.py
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import List, Tuple
|
|
4
|
+
|
|
5
|
+
__all__ = ["cache_path", "read_blocks_file", "save_blocks_file", "get_seed_blocks"]
|
|
6
|
+
|
|
7
|
+
def cache_path(cache_dir: Path, v: int, k: int) -> Path:
|
|
8
|
+
cache_dir.mkdir(parents=True, exist_ok=True)
|
|
9
|
+
return cache_dir / f"v{v}_k{k}_t2.txt"
|
|
10
|
+
|
|
11
|
+
def read_blocks_file(path: Path, v: int, k: int) -> List[Tuple[int,...]]:
|
|
12
|
+
blocks: List[Tuple[int,...]] = []
|
|
13
|
+
if not path.exists(): return blocks
|
|
14
|
+
with path.open("r", encoding="utf-8") as f:
|
|
15
|
+
for ln in f:
|
|
16
|
+
ln = ln.strip().replace(",", " ")
|
|
17
|
+
if not ln or ln.startswith("#"): continue
|
|
18
|
+
nums = [int(x) for x in ln.split()]
|
|
19
|
+
if len(nums) != k: continue
|
|
20
|
+
blocks.append(tuple(sorted(nums)))
|
|
21
|
+
if not blocks: return []
|
|
22
|
+
zero_based = any(0 in b for b in blocks)
|
|
23
|
+
if not zero_based:
|
|
24
|
+
blocks = [tuple(x-1 for x in b) for b in blocks]
|
|
25
|
+
for b in blocks:
|
|
26
|
+
if any(x < 0 or x >= v for x in b):
|
|
27
|
+
raise ValueError(f"{path}: item out of range for v={v}.")
|
|
28
|
+
return blocks
|
|
29
|
+
|
|
30
|
+
def save_blocks_file(path: Path, blocks: List[Tuple[int,...]], indexing: str = "zero") -> None:
|
|
31
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
32
|
+
with path.open("w", encoding="utf-8") as f:
|
|
33
|
+
for b in blocks:
|
|
34
|
+
if indexing == "one":
|
|
35
|
+
f.write(" ".join(str(x+1) for x in b) + "\n")
|
|
36
|
+
else:
|
|
37
|
+
f.write(" ".join(str(x) for x in b) + "\n")
|
|
38
|
+
|
|
39
|
+
def get_seed_blocks(v: int, k: int, cache_dir: Path, offline_first: bool, offline_only: bool,
|
|
40
|
+
fetcher) -> List[Tuple[int,...]]:
|
|
41
|
+
p = cache_path(cache_dir, v, k)
|
|
42
|
+
if offline_first or offline_only:
|
|
43
|
+
blocks = read_blocks_file(p, v, k)
|
|
44
|
+
if blocks:
|
|
45
|
+
print(f"Loaded seed from cache: {p} (blocks={len(blocks)})")
|
|
46
|
+
return blocks
|
|
47
|
+
if offline_only:
|
|
48
|
+
raise RuntimeError(f"Cache miss and offline-only enabled. Expected: {p}")
|
|
49
|
+
print(f"Cache miss for (v={v},k={k}). Fetching from LJCR…")
|
|
50
|
+
blocks = fetcher(v, k)
|
|
51
|
+
save_blocks_file(p, blocks, indexing="zero")
|
|
52
|
+
print(f"Saved LJCR seed to cache: {p}")
|
|
53
|
+
return blocks
|
coverlib/cli.py
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import argparse
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from .api import generate_cover
|
|
5
|
+
from .combinatorics import schonheim_lb
|
|
6
|
+
|
|
7
|
+
def main():
|
|
8
|
+
ap = argparse.ArgumentParser(description="covergen: cache-first LJCR (v,k,2) rebalancer (fixed-b)")
|
|
9
|
+
ap.add_argument("--v", type=int, required=True)
|
|
10
|
+
ap.add_argument("--k", type=int, required=True)
|
|
11
|
+
ap.add_argument("--passes", type=int, default=12)
|
|
12
|
+
ap.add_argument("--greedy-trials", type=int, default=2)
|
|
13
|
+
ap.add_argument("--forbid-above", type=int, default=2)
|
|
14
|
+
ap.add_argument("--group-rounds", type=int, default=12)
|
|
15
|
+
ap.add_argument("--group-time", type=float, default=10.0)
|
|
16
|
+
ap.add_argument("--group-cands", type=int, default=100)
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
# Prefer packaged cache under multiarrangement/ljcr_cache if available
|
|
19
|
+
try:
|
|
20
|
+
import multiarrangement
|
|
21
|
+
default_cache = str((Path(multiarrangement.__file__).parent / "ljcr_cache").resolve())
|
|
22
|
+
except Exception:
|
|
23
|
+
default_cache = str((Path(__file__).parent.parent / "ljcr_cache").resolve())
|
|
24
|
+
ap.add_argument("--cache-dir", type=str, default=default_cache)
|
|
25
|
+
ap.add_argument("--offline-only", action="store_true")
|
|
26
|
+
ap.add_argument("--seed-file", type=str, default=None)
|
|
27
|
+
ap.add_argument("--outfile", type=str, default=None)
|
|
28
|
+
args = ap.parse_args()
|
|
29
|
+
|
|
30
|
+
res = generate_cover(
|
|
31
|
+
args.v, args.k,
|
|
32
|
+
passes=args.passes, greedy_trials=args.greedy_trials,
|
|
33
|
+
forbid_above=args.forbid_above,
|
|
34
|
+
group_rounds=args.group_rounds, group_time=args.group_time, group_cands=args.group_cands,
|
|
35
|
+
cache_dir=args.cache_dir, offline_only=args.offline_only, seed_file=args.seed_file,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
P = args.v*(args.v-1)//2
|
|
39
|
+
avg_lambda = res.b * (args.k*(args.k-1)//2) / P
|
|
40
|
+
print(f"Seed (after repair/prune): b={res.b}, Schönheim≥{schonheim_lb(args.v,args.k)}, avg λ={avg_lambda:.3f}")
|
|
41
|
+
print("Final λ_max:", res.lmax, "hist:", res.hist, "sumsq:", res.sumsq)
|
|
42
|
+
|
|
43
|
+
out = Path(args.outfile or f"rebalance_v{args.v}_k{args.k}.txt")
|
|
44
|
+
with out.open("w", encoding="utf-8") as f:
|
|
45
|
+
for blk in res.blocks:
|
|
46
|
+
f.write(" ".join(str(x) for x in blk) + "\n") # 0-based output by default
|
|
47
|
+
print("Saved improved cover to", out)
|
|
48
|
+
|
|
49
|
+
if __name__ == "__main__":
|
|
50
|
+
main()
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import math
|
|
3
|
+
from typing import Dict, List, Tuple
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"pair_index", "invert_pair_index", "block_pairs", "schonheim_lb", "histogram"
|
|
7
|
+
]
|
|
8
|
+
|
|
9
|
+
def pair_index(i: int, j: int, v: int) -> int:
|
|
10
|
+
if i > j: i, j = j, i
|
|
11
|
+
prior = i * (v - 1) - (i * (i - 1)) // 2
|
|
12
|
+
return prior + (j - i - 1)
|
|
13
|
+
|
|
14
|
+
def invert_pair_index(p: int, v: int) -> Tuple[int,int]:
|
|
15
|
+
acc = 0
|
|
16
|
+
for i in range(v - 1):
|
|
17
|
+
row = v - 1 - i
|
|
18
|
+
if p < acc + row:
|
|
19
|
+
j = i + 1 + (p - acc)
|
|
20
|
+
return i, j
|
|
21
|
+
acc += row
|
|
22
|
+
raise ValueError("pair index out of range")
|
|
23
|
+
|
|
24
|
+
def block_pairs(block: Tuple[int,...], v: int) -> Tuple[int,...]:
|
|
25
|
+
k = len(block)
|
|
26
|
+
out: List[int] = []
|
|
27
|
+
for a in range(k):
|
|
28
|
+
ia = block[a]
|
|
29
|
+
for b in range(a+1, k):
|
|
30
|
+
ib = block[b]
|
|
31
|
+
out.append(pair_index(ia, ib, v))
|
|
32
|
+
return tuple(out)
|
|
33
|
+
|
|
34
|
+
def schonheim_lb(v: int, k: int) -> int:
|
|
35
|
+
return math.ceil((v / k) * math.ceil((v - 1) / (k - 1)))
|
|
36
|
+
|
|
37
|
+
def histogram(counts: List[int]) -> Dict[int,int]:
|
|
38
|
+
h: Dict[int,int] = {}
|
|
39
|
+
for c in counts: h[c] = h.get(c,0) + 1
|
|
40
|
+
return dict(sorted(h.items()))
|
coverlib/fetchers.py
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import html, re, urllib.request
|
|
3
|
+
from typing import List, Tuple
|
|
4
|
+
|
|
5
|
+
LJCR_URL = "https://ljcr.dmgordon.org/cover/show_cover.php?v={v}&k={k}&t=2"
|
|
6
|
+
_INT_RE = re.compile(r"-?\d+")
|
|
7
|
+
|
|
8
|
+
__all__ = ["fetch_ljcr_cover"]
|
|
9
|
+
|
|
10
|
+
def fetch_ljcr_cover(v: int, k: int) -> List[Tuple[int,...]]:
|
|
11
|
+
url = LJCR_URL.format(v=v, k=k)
|
|
12
|
+
try:
|
|
13
|
+
with urllib.request.urlopen(url, timeout=30) as resp:
|
|
14
|
+
data = resp.read().decode("utf-8", errors="replace")
|
|
15
|
+
except Exception as e:
|
|
16
|
+
raise RuntimeError(f"Failed to fetch LJCR page: {e} | URL: {url}")
|
|
17
|
+
|
|
18
|
+
text = html.unescape(data)
|
|
19
|
+
blocks: List[Tuple[int,...]] = []
|
|
20
|
+
|
|
21
|
+
# Strategy 1: parse <pre>/<code>
|
|
22
|
+
for tag in ("pre","code"):
|
|
23
|
+
for m in re.finditer(fr"(?is)<{tag}[^>]*>(.*?)</{tag}>", text):
|
|
24
|
+
for line in m.group(1).splitlines():
|
|
25
|
+
nums = [int(x) for x in _INT_RE.findall(line)]
|
|
26
|
+
if len(nums) == k:
|
|
27
|
+
blk = tuple(sorted(x-1 for x in nums))
|
|
28
|
+
if all(0 <= x < v for x in blk):
|
|
29
|
+
blocks.append(blk)
|
|
30
|
+
if blocks: return blocks
|
|
31
|
+
|
|
32
|
+
# Strategy 2: per-line fallback
|
|
33
|
+
for line in text.splitlines():
|
|
34
|
+
nums = [int(x) for x in _INT_RE.findall(line)]
|
|
35
|
+
if len(nums) == k:
|
|
36
|
+
blk = tuple(sorted(x-1 for x in nums))
|
|
37
|
+
if all(0 <= x < v for x in blk):
|
|
38
|
+
blocks.append(blk)
|
|
39
|
+
if blocks: return blocks
|
|
40
|
+
|
|
41
|
+
# Strategy 3: collect long run after first block-ish line
|
|
42
|
+
allints: List[int] = []
|
|
43
|
+
seen_first = False
|
|
44
|
+
for line in text.splitlines():
|
|
45
|
+
nums = [int(x) for x in _INT_RE.findall(line)]
|
|
46
|
+
if not nums: continue
|
|
47
|
+
if not seen_first and len(nums) == k:
|
|
48
|
+
seen_first = True; allints.extend(nums)
|
|
49
|
+
elif seen_first:
|
|
50
|
+
allints.extend(nums)
|
|
51
|
+
if allints:
|
|
52
|
+
for i in range(0, len(allints), k):
|
|
53
|
+
chunk = allints[i:i+k]
|
|
54
|
+
if len(chunk) != k: continue
|
|
55
|
+
blk = tuple(sorted(x-1 for x in chunk))
|
|
56
|
+
if all(0 <= x < v for x in blk):
|
|
57
|
+
blocks.append(blk)
|
|
58
|
+
if not blocks:
|
|
59
|
+
raise RuntimeError(f"Could not parse any {k}-tuples from LJCR page for (v={v},k={k}). URL: {url}")
|
|
60
|
+
|
|
61
|
+
# sanity: uniform k
|
|
62
|
+
ks = {len(b) for b in blocks}
|
|
63
|
+
if len(ks) != 1 or list(ks)[0] != k:
|
|
64
|
+
raise RuntimeError(f"Parsed blocks have inconsistent k: {ks}")
|
|
65
|
+
return blocks
|
coverlib/optimizer.py
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import random, time
|
|
3
|
+
from typing import Dict, List, Optional, Set, Tuple
|
|
4
|
+
from .combinatorics import block_pairs, invert_pair_index, pair_index, histogram
|
|
5
|
+
|
|
6
|
+
__all__ = ["CoverOptimizer"]
|
|
7
|
+
|
|
8
|
+
class CoverOptimizer:
|
|
9
|
+
"""Fixed-b cover rebalancer (pure stdlib).
|
|
10
|
+
- Keeps coverage (pair_count >= 1 for all pairs).
|
|
11
|
+
- Improves lexicographically: lambda_max then sumsq.
|
|
12
|
+
- Has 1-opt (coverage-preserving) and a multi-block DFS swap to lower lambda_max.
|
|
13
|
+
"""
|
|
14
|
+
def __init__(self, v: int, blocks: List[Tuple[int,...]], seed: int = 12345):
|
|
15
|
+
self.v=v; self.blocks=[tuple(sorted(b)) for b in blocks]; self.k=len(self.blocks[0])
|
|
16
|
+
random.seed(seed)
|
|
17
|
+
self.P = v*(v-1)//2
|
|
18
|
+
self.block_pairs = [block_pairs(b, v) for b in self.blocks]
|
|
19
|
+
self.pair_count = [0]*self.P
|
|
20
|
+
for pp in self.block_pairs:
|
|
21
|
+
for p in pp: self.pair_count[p]+=1
|
|
22
|
+
if min(self.pair_count) < 1:
|
|
23
|
+
raise ValueError("Seed cover does not cover all pairs.")
|
|
24
|
+
|
|
25
|
+
def lambda_max(self)->int: return max(self.pair_count)
|
|
26
|
+
def sumsq(self)->int: return sum(c*c for c in self.pair_count)
|
|
27
|
+
def histogram(self)->Dict[int,int]: return histogram(self.pair_count)
|
|
28
|
+
|
|
29
|
+
def try_replace_block(self, idx:int, *, forbid_above:Optional[int]=2, greedy_trials:int=1) -> bool:
|
|
30
|
+
v,k = self.v,self.k
|
|
31
|
+
old_block = self.blocks[idx]
|
|
32
|
+
old_pairs = set(self.block_pairs[idx])
|
|
33
|
+
critical = [p for p in old_pairs if self.pair_count[p]==1]
|
|
34
|
+
if not critical: return False
|
|
35
|
+
required: Set[int] = set()
|
|
36
|
+
for p in critical:
|
|
37
|
+
i,j = invert_pair_index(p, v); required.add(i); required.add(j)
|
|
38
|
+
if len(required)>k: return False
|
|
39
|
+
|
|
40
|
+
best_eval = (self.lambda_max(), self.sumsq())
|
|
41
|
+
best_cand: Optional[Tuple[int,...]] = None
|
|
42
|
+
|
|
43
|
+
def add_cost(x:int, cur:Tuple[int,...])->int:
|
|
44
|
+
cost=0
|
|
45
|
+
for y in cur:
|
|
46
|
+
if x==y: continue
|
|
47
|
+
c=self.pair_count[pair_index(x,y,v)]
|
|
48
|
+
cost += 1 + 2*c
|
|
49
|
+
return cost
|
|
50
|
+
|
|
51
|
+
trials=max(1,greedy_trials)
|
|
52
|
+
for _ in range(trials):
|
|
53
|
+
S=sorted(required)
|
|
54
|
+
while len(S)<k:
|
|
55
|
+
best_x=None; best_c=None
|
|
56
|
+
for x in range(v):
|
|
57
|
+
if x in S: continue
|
|
58
|
+
c=add_cost(x, tuple(S))
|
|
59
|
+
if best_c is None or c<best_c or (c==best_c and random.random()<0.2):
|
|
60
|
+
best_c=c; best_x=x
|
|
61
|
+
if best_x is None: break
|
|
62
|
+
S.append(best_x)
|
|
63
|
+
if len(S)!=k: continue
|
|
64
|
+
cand=tuple(sorted(S))
|
|
65
|
+
if cand==old_block: continue
|
|
66
|
+
cand_pairs=set(block_pairs(cand, v))
|
|
67
|
+
removed_only = old_pairs - cand_pairs
|
|
68
|
+
added_only = cand_pairs - old_pairs
|
|
69
|
+
if any(self.pair_count[p]==1 for p in removed_only): continue
|
|
70
|
+
if forbid_above is not None and any(self.pair_count[p]+1 > forbid_above for p in added_only): continue
|
|
71
|
+
|
|
72
|
+
cur_lmax=self.lambda_max(); cur_sumsq=self.sumsq()
|
|
73
|
+
delta=0
|
|
74
|
+
for p in removed_only: delta += 1 - 2*self.pair_count[p]
|
|
75
|
+
for p in added_only: delta += 1 + 2*self.pair_count[p]
|
|
76
|
+
new_sumsq = cur_sumsq + delta
|
|
77
|
+
|
|
78
|
+
maybe_inc = any(self.pair_count[p]+1 > cur_lmax for p in added_only)
|
|
79
|
+
maybe_dec = any(self.pair_count[p] == cur_lmax for p in removed_only)
|
|
80
|
+
if maybe_inc or maybe_dec:
|
|
81
|
+
changed={}
|
|
82
|
+
for p in removed_only: changed[p]=self.pair_count[p]-1
|
|
83
|
+
for p in added_only: changed[p]=changed.get(p,self.pair_count[p])+1
|
|
84
|
+
new_lmax=0
|
|
85
|
+
for p in range(self.P):
|
|
86
|
+
c = changed[p] if p in changed else self.pair_count[p]
|
|
87
|
+
if c>new_lmax: new_lmax=c
|
|
88
|
+
else:
|
|
89
|
+
new_lmax=cur_lmax
|
|
90
|
+
|
|
91
|
+
if (new_lmax, new_sumsq) < best_eval:
|
|
92
|
+
best_eval=(new_lmax,new_sumsq); best_cand=cand
|
|
93
|
+
|
|
94
|
+
if best_cand is None: return False
|
|
95
|
+
cand_pairs = set(block_pairs(best_cand, v))
|
|
96
|
+
removed_only = set(self.block_pairs[idx]) - cand_pairs
|
|
97
|
+
added_only = cand_pairs - set(self.block_pairs[idx])
|
|
98
|
+
for p in removed_only: self.pair_count[p]-=1
|
|
99
|
+
for p in added_only: self.pair_count[p]+=1
|
|
100
|
+
self.blocks[idx]=best_cand
|
|
101
|
+
self.block_pairs[idx]=tuple(sorted(cand_pairs))
|
|
102
|
+
assert min(self.pair_count)>=1
|
|
103
|
+
return True
|
|
104
|
+
|
|
105
|
+
def local_search(self, passes:int=8, forbid_above:Optional[int]=2, greedy_trials:int=2)->None:
|
|
106
|
+
for _ in range(passes):
|
|
107
|
+
improved=False
|
|
108
|
+
lmax=self.lambda_max()
|
|
109
|
+
idxs=list(range(len(self.blocks)))
|
|
110
|
+
idxs.sort(key=lambda i: sum(1 for p in self.block_pairs[i] if self.pair_count[p]==lmax), reverse=True)
|
|
111
|
+
for i in idxs:
|
|
112
|
+
if self.try_replace_block(i, forbid_above=forbid_above, greedy_trials=greedy_trials):
|
|
113
|
+
improved=True
|
|
114
|
+
if not improved: break
|
|
115
|
+
|
|
116
|
+
# group DFS (same approach you used)
|
|
117
|
+
def reduce_lmax_group(self, target:int, time_limit:float=15.0, max_pairs_considered:int=20,
|
|
118
|
+
candidates_per_block:int=100, rng=random) -> bool:
|
|
119
|
+
start = time.time()
|
|
120
|
+
v,k = self.v,self.k
|
|
121
|
+
lmax = self.lambda_max()
|
|
122
|
+
if lmax <= target: return False
|
|
123
|
+
offenders = [p for p,c in enumerate(self.pair_count) if c==lmax]
|
|
124
|
+
rng.shuffle(offenders); offenders = offenders[:max_pairs_considered]
|
|
125
|
+
avoid_hi = {p for p,c in enumerate(self.pair_count) if c>=lmax-1}
|
|
126
|
+
from .combinatorics import block_pairs as bp
|
|
127
|
+
|
|
128
|
+
for p0 in offenders:
|
|
129
|
+
if time.time()-start > time_limit: break
|
|
130
|
+
idxs = [i for i,bp_ in enumerate(self.block_pairs) if p0 in bp_]
|
|
131
|
+
if not idxs: continue
|
|
132
|
+
count_out = self.pair_count[:]
|
|
133
|
+
for i in idxs:
|
|
134
|
+
for q in self.block_pairs[i]: count_out[q]-=1
|
|
135
|
+
if any(c > target for c in count_out):
|
|
136
|
+
continue
|
|
137
|
+
critical = {q for q in range(self.P) if count_out[q]==0}
|
|
138
|
+
|
|
139
|
+
cand_lists: List[List[Tuple[int,...]]] = []
|
|
140
|
+
cand_pairs: List[List[Set[int]]] = []
|
|
141
|
+
for i in idxs:
|
|
142
|
+
s: Set[Tuple[int,...]] = set(); tries = 0
|
|
143
|
+
while len(s) < candidates_per_block and tries < candidates_per_block*20:
|
|
144
|
+
tries += 1; S: List[int] = []
|
|
145
|
+
while len(S) < k:
|
|
146
|
+
best_x=None; best_sc=None
|
|
147
|
+
for x in range(v):
|
|
148
|
+
if x in S: continue
|
|
149
|
+
sc = 0.0
|
|
150
|
+
for y in S:
|
|
151
|
+
q = pair_index(x,y,v)
|
|
152
|
+
if q in critical: sc += 5.0
|
|
153
|
+
if q in avoid_hi: sc -= 2.0
|
|
154
|
+
sc += rng.random()*0.1
|
|
155
|
+
if best_sc is None or sc>best_sc:
|
|
156
|
+
best_sc, best_x = sc, x
|
|
157
|
+
if best_x is None: break
|
|
158
|
+
S.append(best_x)
|
|
159
|
+
if len(S)!=k: continue
|
|
160
|
+
blk = tuple(sorted(S)); pp = set(bp(blk, v))
|
|
161
|
+
if p0 in pp: continue
|
|
162
|
+
s.add(blk)
|
|
163
|
+
lst = list(s)
|
|
164
|
+
if not lst:
|
|
165
|
+
orig = set(self.blocks[i])
|
|
166
|
+
while len(s) < min(20, candidates_per_block):
|
|
167
|
+
S = set(orig)
|
|
168
|
+
if len(S)>=2:
|
|
169
|
+
S = set(random.sample(list(S), k-2))
|
|
170
|
+
while len(S) < k:
|
|
171
|
+
S.add(rng.randrange(v))
|
|
172
|
+
blk = tuple(sorted(S)); pp = set(bp(blk,v))
|
|
173
|
+
if p0 in pp: continue
|
|
174
|
+
s.add(blk)
|
|
175
|
+
lst = list(s)
|
|
176
|
+
cand_lists.append(lst)
|
|
177
|
+
cand_pairs.append([set(bp(blk,v)) for blk in lst])
|
|
178
|
+
|
|
179
|
+
temp = count_out[:]
|
|
180
|
+
critical_list = sorted(list(critical))
|
|
181
|
+
need = {q:1 for q in critical_list}
|
|
182
|
+
cover_pos = {q:set() for q in critical_list}
|
|
183
|
+
for pos in range(len(idxs)):
|
|
184
|
+
for m,pp in enumerate(cand_pairs[pos]):
|
|
185
|
+
for q in critical_list:
|
|
186
|
+
if q in pp: cover_pos[q].add(pos)
|
|
187
|
+
if any(len(cover_pos[q])==0 for q in critical_list):
|
|
188
|
+
continue
|
|
189
|
+
|
|
190
|
+
solution = [None]*len(idxs)
|
|
191
|
+
deadline = start + time_limit
|
|
192
|
+
|
|
193
|
+
def dfs(pos:int)->bool:
|
|
194
|
+
if time.time() > deadline: return False
|
|
195
|
+
if pos == len(idxs):
|
|
196
|
+
return True
|
|
197
|
+
order = list(range(len(cand_lists[pos])))
|
|
198
|
+
order.sort(key=lambda m: (
|
|
199
|
+
sum(temp[q] for q in cand_pairs[pos][m] if temp[q] >= target-1),
|
|
200
|
+
-sum(1 for q in cand_pairs[pos][m] if q in need and need[q]>0)
|
|
201
|
+
))
|
|
202
|
+
for m in order:
|
|
203
|
+
pp = cand_pairs[pos][m]
|
|
204
|
+
if any(temp[q]+1 > target for q in pp):
|
|
205
|
+
continue
|
|
206
|
+
ok=True
|
|
207
|
+
for q in critical_list:
|
|
208
|
+
if need[q]<=0: continue
|
|
209
|
+
possible = any( (q in cand_pairs[p2][mm]) for p2 in range(pos, len(idxs)) for mm in range(len(cand_lists[p2])) )
|
|
210
|
+
if not possible: ok=False; break
|
|
211
|
+
if not ok: continue
|
|
212
|
+
|
|
213
|
+
for q in pp: temp[q]+=1
|
|
214
|
+
changed=[]
|
|
215
|
+
for q in pp:
|
|
216
|
+
if q in need and need[q]>0:
|
|
217
|
+
need[q]-=1; changed.append(q)
|
|
218
|
+
|
|
219
|
+
solution[pos]=m
|
|
220
|
+
if dfs(pos+1): return True
|
|
221
|
+
|
|
222
|
+
solution[pos]=None
|
|
223
|
+
for q in pp: temp[q]-=1
|
|
224
|
+
for q in changed: need[q]+=1
|
|
225
|
+
return False
|
|
226
|
+
|
|
227
|
+
if dfs(0):
|
|
228
|
+
for pos, i in enumerate(idxs):
|
|
229
|
+
m = solution[pos]
|
|
230
|
+
new_blk = cand_lists[pos][m]
|
|
231
|
+
old_pp = self.block_pairs[i]
|
|
232
|
+
for q in old_pp: self.pair_count[q]-=1
|
|
233
|
+
self.blocks[i] = new_blk
|
|
234
|
+
new_pp = tuple(sorted(block_pairs(new_blk, v)))
|
|
235
|
+
self.block_pairs[i] = new_pp
|
|
236
|
+
for q in new_pp: self.pair_count[q]+=1
|
|
237
|
+
assert min(self.pair_count) >= 1
|
|
238
|
+
return True
|
|
239
|
+
return False
|
coverlib/repair.py
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import random
|
|
3
|
+
from typing import List, Optional, Set, Tuple
|
|
4
|
+
from .combinatorics import block_pairs, invert_pair_index, pair_index
|
|
5
|
+
|
|
6
|
+
__all__ = ["repair_to_coverage", "greedy_sample_block"]
|
|
7
|
+
|
|
8
|
+
def greedy_sample_block(v: int, k: int, uncovered_pairs: Set[int], trials: int = 512, rng=random) -> Tuple[int,...]:
|
|
9
|
+
if not uncovered_pairs:
|
|
10
|
+
return tuple(sorted(rng.sample(range(v), k)))
|
|
11
|
+
deg = [0]*v
|
|
12
|
+
for p in uncovered_pairs:
|
|
13
|
+
i,j = invert_pair_index(p, v); deg[i]+=1; deg[j]+=1
|
|
14
|
+
weights = [d+1 for d in deg]
|
|
15
|
+
best_blk, best_score = None, -1
|
|
16
|
+
for _ in range(trials):
|
|
17
|
+
cand = set(); w = weights[:]; total = sum(w)
|
|
18
|
+
while len(cand) < k and total>0:
|
|
19
|
+
r = rng.uniform(0,total); acc=0
|
|
20
|
+
for u,wu in enumerate(w):
|
|
21
|
+
acc += wu
|
|
22
|
+
if acc >= r:
|
|
23
|
+
cand.add(u); total-=w[u]; w[u]=0; break
|
|
24
|
+
if len(cand) < k:
|
|
25
|
+
remain = [u for u in range(v) if u not in cand]
|
|
26
|
+
rng.shuffle(remain)
|
|
27
|
+
for u in remain[:k-len(cand)]: cand.add(u)
|
|
28
|
+
blk = tuple(sorted(cand))
|
|
29
|
+
c=0
|
|
30
|
+
for a in range(k):
|
|
31
|
+
ia = blk[a]
|
|
32
|
+
for b in range(a+1,k):
|
|
33
|
+
ib = blk[b]
|
|
34
|
+
if pair_index(ia,ib,v) in uncovered_pairs: c+=1
|
|
35
|
+
if c>best_score: best_score, best_blk = c, blk
|
|
36
|
+
return best_blk # type: ignore
|
|
37
|
+
|
|
38
|
+
def repair_to_coverage(v: int, k: int, blocks: List[Tuple[int,...]], rng=random) -> List[Tuple[int,...]]:
|
|
39
|
+
counts, bpairs = coverage_from_blocks(v, blocks)
|
|
40
|
+
P = v*(v-1)//2
|
|
41
|
+
uncovered = {p for p in range(P) if counts[p]==0}
|
|
42
|
+
if not uncovered: return blocks
|
|
43
|
+
while uncovered:
|
|
44
|
+
blk = greedy_sample_block(v,k,uncovered, trials=512, rng=rng)
|
|
45
|
+
blocks.append(blk)
|
|
46
|
+
pp = block_pairs(blk,v); bpairs.append(pp)
|
|
47
|
+
for p in pp:
|
|
48
|
+
if counts[p]==0: uncovered.discard(p)
|
|
49
|
+
counts[p]+=1
|
|
50
|
+
# prune (safe deletions)
|
|
51
|
+
order = list(range(len(blocks))); rng.shuffle(order)
|
|
52
|
+
for idx in order:
|
|
53
|
+
pp = bpairs[idx]
|
|
54
|
+
if any(counts[p]==1 for p in pp): continue
|
|
55
|
+
for p in pp: counts[p]-=1
|
|
56
|
+
blocks[idx] = None # type: ignore
|
|
57
|
+
return [b for b in blocks if b is not None]
|
|
58
|
+
|
|
59
|
+
# local helper to avoid circular import
|
|
60
|
+
from .combinatorics import block_pairs as _bp
|
|
61
|
+
|
|
62
|
+
def coverage_from_blocks(v: int, blocks: List[Tuple[int,...]]):
|
|
63
|
+
P = v*(v-1)//2
|
|
64
|
+
counts = [0]*P
|
|
65
|
+
bpairs = [_bp(b, v) for b in blocks]
|
|
66
|
+
for pp in bpairs:
|
|
67
|
+
for p in pp: counts[p]+=1
|
|
68
|
+
return counts, bpairs
|