Coverage for fiqus/data/DataMultipole.py: 100%

54 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2024-05-20 03:24 +0200

1from pydantic import BaseModel 

2from typing import (Dict, List, Optional) 

3 

4 

5class Coord(BaseModel): 

6 x: Optional[float] = None 

7 y: Optional[float] = None 

8 

9 

10class Area(BaseModel): 

11 loop: Optional[int] = None 

12 surface: Optional[int] = None 

13 

14 

15class Region(BaseModel): 

16 points: Dict[str | int, int] = {} 

17 lines: Dict[str | int, int] = {} 

18 areas: Dict[str | int, Area] = {} 

19 

20 

21class BlockData(BaseModel): 

22 half_turns: Region = Region() 

23 current_sign: Optional[int] = None 

24 

25 

26class Block(BaseModel): 

27 blocks: Dict[int, BlockData] = {} 

28 conductor_name: Optional[str] = None 

29 conductors_number: Optional[int] = None 

30 

31 

32class Winding(BaseModel): 

33 windings: Dict[int, Block] = {} 

34 

35 

36class Layer(BaseModel): 

37 layers: Dict[int, Winding] = {} 

38 

39 

40class Pole(BaseModel): 

41 poles: Dict[int, Layer] = {} 

42 bore_center: Coord = Coord() 

43 

44 

45class Iron(BaseModel): 

46 quadrants: Dict[int, Region] = {} 

47 max_radius: float = 0. 

48 

49 

50class Order(BaseModel): 

51 coil: Optional[int] = None 

52 pole: Optional[int] = None 

53 layer: Optional[int] = None 

54 winding: Optional[int] = None 

55 block: Optional[int] = None 

56 

57 

58class Coil(BaseModel): 

59 coils: Dict[int, Pole] = {} 

60 electrical_order: List[Order] = [] 

61 

62 

63class Geometry(BaseModel): 

64 coil: Coil = Coil() 

65 iron: Iron = Iron() 

66 wedges: Region = Region() 

67 air: Region = Region() 

68 air_inf: Region = Region() 

69 

70 

71class GroupType(BaseModel): 

72 curves: Dict[str, int] = {} 

73 surfaces: Dict[str, int] = {} 

74 volumes: Dict[str, int] = {} 

75 

76 

77class Domain(BaseModel): 

78 groups_surfaces: Dict[str, List[int]] = {} 

79 physical_groups: GroupType = GroupType() 

80 

81 

82class MultipoleData(BaseModel): 

83 geometries: Geometry = Geometry() 

84 domains: Domain = Domain() 

85 

86 

87# if __name__ == "__main__": 

88# write = True 

89# read = False 

90# 

91# def read_regions(regions_file_name): 

92# with open(regions_file_name, 'r') as stream: 

93# yaml_str = ruamel.yaml.safe_load(stream) 

94# return MultipoleData(**yaml_str) 

95# 

96# if write: 

97# model = MultipoleData() 

98# with open('FiQuS_data.yaml', 'w') as yaml_file: 

99# ruamel.yaml.dump(model.dict(), yaml_file, default_flow_style=False)