@@ -2,97 +2,103 @@ module QuantumOperatorDefinitionsGradedArraysExt
22
33using BlockArrays: blocklasts, blocklength, blocklengths
44using GradedArrays:
5- AbstractGradedUnitRange, GradedOneTo, SectorProduct, U1, Z, × , dual, gradedrange, sectors
5+ AbstractGradedUnitRange, GradedOneTo, SectorProduct, U1, Z, × , dual, gradedrange, sectors
66using QuantumOperatorDefinitions:
7- QuantumOperatorDefinitions,
8- @GradingType_str ,
9- @SiteType_str ,
10- GradingType,
11- OpName,
12- SiteType,
13- name
7+ QuantumOperatorDefinitions,
8+ @GradingType_str ,
9+ @SiteType_str ,
10+ GradingType,
11+ OpName,
12+ SiteType,
13+ name
1414
1515function Base. axes (:: OpName , domain:: Tuple{Vararg{AbstractGradedUnitRange}} )
16- return (domain... , dual .(domain)... )
16+ return (domain... , dual .(domain)... )
1717end
1818
1919sortedunion (a, b) = sort (union (a, b))
2020function QuantumOperatorDefinitions. combine_axes (a1:: GradedOneTo , a2:: GradedOneTo )
21- blocklength (a1) == blocklength (a2) ||
22- throw (ArgumentError (" Axes must have the same number of blocks." ))
23- nblocks = blocklength (a1)
24- return gradedrange (
25- map (Base. OneTo (nblocks)) do i
26- l1 = blocklengths (a1)[i]
27- l2 = blocklengths (a2)[i]
28- l1 == l2 || throw (ArgumentError (" Blocks must have the same length." ))
29- return sectors (a1)[i] × sectors (a2)[i] => l1
30- end ,
31- )
21+ blocklength (a1) == blocklength (a2) ||
22+ throw (ArgumentError (" Axes must have the same number of blocks." ))
23+ nblocks = blocklength (a1)
24+ return gradedrange (
25+ map (Base. OneTo (nblocks)) do i
26+ l1 = blocklengths (a1)[i]
27+ l2 = blocklengths (a2)[i]
28+ l1 == l2 || throw (ArgumentError (" Blocks must have the same length." ))
29+ return sectors (a1)[i] × sectors (a2)[i] => l1
30+ end ,
31+ )
3232end
3333QuantumOperatorDefinitions. combine_axes (a:: GradedOneTo , b:: Base.OneTo ) = a
3434QuantumOperatorDefinitions. combine_axes (a:: Base.OneTo , b:: GradedOneTo ) = b
3535
3636function Base. AbstractUnitRange (:: GradingType"N" , t:: SiteType )
37- return gradedrange (map (i -> SectorProduct ((; N= U1 (i - 1 ))) => 1 , 1 : length (t)))
37+ return gradedrange (map (i -> SectorProduct ((; N = U1 (i - 1 ))) => 1 , 1 : length (t)))
3838end
3939function Base. AbstractUnitRange (:: GradingType"Sz" , t:: SiteType )
40- return gradedrange (map (i -> SectorProduct ((; Sz= U1 (i - 1 ))) => 1 , 1 : length (t)))
40+ return gradedrange (map (i -> SectorProduct ((; Sz = U1 (i - 1 ))) => 1 , 1 : length (t)))
4141end
4242function Base. AbstractUnitRange (:: GradingType"Sz↑" , t:: SiteType )
43- return AbstractUnitRange (GradingType " Sz" (), t)
43+ return AbstractUnitRange (GradingType " Sz" (), t)
4444end
4545function Base. AbstractUnitRange (:: GradingType"Sz↓" , t:: SiteType )
46- return gradedrange (map (i -> SectorProduct ((; Sz= U1 (- (i - 1 )))) => 1 , 1 : length (t)))
46+ return gradedrange (map (i -> SectorProduct ((; Sz = U1 (- (i - 1 )))) => 1 , 1 : length (t)))
4747end
4848
4949function sector (gradingtype:: GradingType , sec)
50- sectorname = Symbol (get (gradingtype, :name , name (gradingtype)))
51- return SectorProduct (NamedTuple {(sectorname,)} ((sec,)))
50+ sectorname = Symbol (get (gradingtype, :name , name (gradingtype)))
51+ return SectorProduct (NamedTuple {(sectorname,)} ((sec,)))
5252end
5353
5454function Base. AbstractUnitRange (s:: GradingType"Nf" , t:: SiteType"Fermion" )
55- return gradedrange ([sector (s, U1 (0 )) => 1 , sector (s, U1 (1 )) => 1 ])
55+ return gradedrange ([sector (s, U1 (0 )) => 1 , sector (s, U1 (1 )) => 1 ])
5656end
5757# TODO : Write in terms of `GradingType"Nf"` definition.
5858function Base. AbstractUnitRange (s:: GradingType"NfParity" , t:: SiteType"Fermion" )
59- return gradedrange ([sector (s, Z {2} (0 )) => 1 , sector (s, Z {2} (1 )) => 1 ])
59+ return gradedrange ([sector (s, Z {2} (0 )) => 1 , sector (s, Z {2} (1 )) => 1 ])
6060end
6161function Base. AbstractUnitRange (s:: GradingType"Sz" , t:: SiteType"Fermion" )
62- return gradedrange ([sector (s, U1 (0 )) => 1 , sector (s, U1 (1 )) => 1 ])
62+ return gradedrange ([sector (s, U1 (0 )) => 1 , sector (s, U1 (1 )) => 1 ])
6363end
6464function Base. AbstractUnitRange (s:: GradingType"Sz↑" , t:: SiteType"Fermion" )
65- return gradedrange ([sector (s, U1 (0 )) => 1 , sector (s, U1 (1 )) => 1 ])
65+ return gradedrange ([sector (s, U1 (0 )) => 1 , sector (s, U1 (1 )) => 1 ])
6666end
6767function Base. AbstractUnitRange (s:: GradingType"Sz↓" , t:: SiteType"Fermion" )
68- return gradedrange ([sector (s, U1 (0 )) => 1 , sector (s, U1 (- 1 )) => 1 ])
68+ return gradedrange ([sector (s, U1 (0 )) => 1 , sector (s, U1 (- 1 )) => 1 ])
6969end
7070
7171# TODO : Write in terms of `SiteType"Fermion"` definitions.
7272function Base. AbstractUnitRange (s:: GradingType"Nf" , t:: SiteType"Electron" )
73- return gradedrange ([
74- sector (s, U1 (0 )) => 1 ,
75- sector (s, U1 (1 )) => 1 ,
76- sector (s, U1 (1 )) => 1 ,
77- sector (s, U1 (2 )) => 1 ,
78- ])
73+ return gradedrange (
74+ [
75+ sector (s, U1 (0 )) => 1 ,
76+ sector (s, U1 (1 )) => 1 ,
77+ sector (s, U1 (1 )) => 1 ,
78+ sector (s, U1 (2 )) => 1 ,
79+ ]
80+ )
7981end
8082# TODO : Write in terms of `GradingType"Nf"` definition.
8183function Base. AbstractUnitRange (s:: GradingType"NfParity" , t:: SiteType"Electron" )
82- return gradedrange ([
83- sector (s, Z {2} (0 )) => 1 ,
84- sector (s, Z {2} (1 )) => 1 ,
85- sector (s, Z {2} (1 )) => 1 ,
86- sector (s, Z {2} (0 )) => 1 ,
87- ])
84+ return gradedrange (
85+ [
86+ sector (s, Z {2} (0 )) => 1 ,
87+ sector (s, Z {2} (1 )) => 1 ,
88+ sector (s, Z {2} (1 )) => 1 ,
89+ sector (s, Z {2} (0 )) => 1 ,
90+ ]
91+ )
8892end
8993function Base. AbstractUnitRange (s:: GradingType"Sz" , t:: SiteType"Electron" )
90- return gradedrange ([
91- sector (s, U1 (0 )) => 1 ,
92- sector (s, U1 (1 )) => 1 ,
93- sector (s, U1 (- 1 )) => 1 ,
94- sector (s, U1 (0 )) => 1 ,
95- ])
94+ return gradedrange (
95+ [
96+ sector (s, U1 (0 )) => 1 ,
97+ sector (s, U1 (1 )) => 1 ,
98+ sector (s, U1 (- 1 )) => 1 ,
99+ sector (s, U1 (0 )) => 1 ,
100+ ]
101+ )
96102end
97103
98104end
0 commit comments