Coverage for paintmaskanimator/cell_numbering.py: 87%

21 statements  

« prev     ^ index     » next       coverage.py v7.17.0, created at 2026-11-02 04:50 +0000

1"""セル番号(絵番号)の正規化の計算。 

2 

3番号は 1 から始まる整数の連番だけを使う(docs/design-principles.md)。 

4ここではデータを変えずに、正規化したときの対応表だけを求める。 

5""" 

6 

7 

8def normalization_mapping(frames, archive_keys, layer_index): 

9 """正規化したときの {旧番号: 新番号} を返す。 

10 

11 シートに登場する順に 1, 2, 3… を振り、シートで使っていない番号 

12 (連番だけの番号や削除済みの番号)はその後ろへ番号順に並べる。 

13 ``archive_keys`` は ``(layer_index, number)`` の並び(削除済みの絵)。 

14 """ 

15 if not frames: 15 ↛ 16line 15 didn't jump to line 16 because the condition on line 15 was never true

16 return {} 

17 target = int(layer_index) 

18 sheet_numbers = [] 

19 all_numbers = set() 

20 for frame in frames: 

21 if not (0 <= target < len(frame.layers)): 21 ↛ 22line 21 didn't jump to line 22 because the condition on line 21 was never true

22 continue 

23 layer = frame.layers[target] 

24 number = layer.sequence_number 

25 if number is None: 

26 continue 

27 all_numbers.add(int(number)) 

28 if ( 

29 layer.has_content 

30 and not layer.sequence_only 

31 and int(number) not in sheet_numbers 

32 ): 

33 sheet_numbers.append(int(number)) 

34 all_numbers.update( 

35 int(number) 

36 for archived_layer, number in archive_keys 

37 if int(archived_layer) == target 

38 ) 

39 ordered = sheet_numbers + sorted(all_numbers - set(sheet_numbers)) 

40 return { 

41 old_number: new_number 

42 for new_number, old_number in enumerate(ordered, 1) 

43 } 

44 

45 

46def changed_count(mapping): 

47 """正規化で番号が変わる絵の数。""" 

48 return sum(1 for old, new in mapping.items() if int(old) != int(new))