packages feed

symmetry-operations-symbols (empty) → 0.0.1.0

raw patch · 23 files changed

+2625/−0 lines, 23 filesdep +QuickCheckdep +basedep +doctestsetup-changed

Dependencies added: QuickCheck, base, doctest, hspec, matrix, matrix-as-xyz, parsec, symmetry-operations-symbols

Files

+ ChangeLog.md view
@@ -0,0 +1,3 @@+# Changelog for symmetry-operations-symbols++## Unreleased changes
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Jun Narumi (c) 2018++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Jun Narumi nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,59 @@+# symmetry-operations-symbols++Haskell Derivation of symbols and coordinate triplets Library++## Quickstart++Make new stack project and move to project directory.++```shell+% stack new symop_repl+% cd symop_repl+```++Edit extra-deps part of stack.yaml like below.++```+extra-deps:+- matrix-as-xyz-0.1.1.1+- symmetry-operations-symbols-0.0.1.0+```++Then start repl.++```shell+% stack repl+```++Setup packages and load modules.++```haskell+-- prepare+repl> :set -package hall-symbols+repl> :set -package symmetry-operations-symbols+repl> :m Data.Matrix.AsXYZ Data.Matrix.SymmetryOperationsSymbols+```++Use like below.++```haskell+repl> fromMatrix' . fromXYZ $ "x,y,z"+" 1 "++repl> fromMatrix' . fromXYZ $ "-x,-y,z"+" 2  0,0,z"++repl> fromMatrix' . fromXYZ $ "-y,-x+1/2,z"+" g (-1/4,1/4,0) x+1/4,-x,z"+```++## References++1. W. Fischer. and E. Koch. (2006), Derivation of symbols and coordinate triplets International Tables for Crystallography (2006). Vol. A, Chapter 11.2, pp. 812–816.++2. Wondratschek, H. & Neubu ̈ser, J. (1967). Determination of the symmetry elements of a space group from the ‘general positions’ listed in International Tables for X-ray Crystallography, Vol. I. Acta Cryst. 23, 349–352.++## License++See the [LICENSE](https://raw.githubusercontent.com/narumij/symmetry-operations-symbols/master/LICENSE)+file in the repository.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ src/Data/Matrix/SymmetryOperationsSymbols.hs view
@@ -0,0 +1,113 @@+{-|+Module      : SymmetryOperationsSymbols+Copyright   : (c) Jun Narumi, 2018+License     : BSD-3+Maintainer  : narumij@gmail.com+Stability   : experimental+Portability : ?++Haskell Derivation of symbols and coordinate triplets Library++[References]++1. W. Fischer. and E. Koch. (2006), Derivation of symbols and coordinate triplets International Tables for Crystallography (2006). Vol. A, Chapter 11.2, pp. 812–816.++2. Wondratschek, H. & Neubu ̈ser, J. (1967). Determination of the symmetry elements of a space group from the ‘general positions’ listed in International Tables for X-ray Crystallography, Vol. I. Acta Cryst. 23, 349–352.++-}++module Data.Matrix.SymmetryOperationsSymbols (+  fromMatrix,+  fromMatrix',+  toMatrix,+  toMatrixHex,+  notHexagonal,+  hexagonal+  ) where++import Data.Ratio (Ratio)    +import Data.Matrix (Matrix,detLU,trace,identity)+import Text.ParserCombinators.Parsec (ParseError,parse)++import Data.Matrix.SymmetryOperationsSymbols.Common++import Data.Matrix.SymmetryOperationsSymbols.UnitMatrixCase+import Data.Matrix.SymmetryOperationsSymbols.GlideOrReflectionCase+import Data.Matrix.SymmetryOperationsSymbols.RotationCase+import Data.Matrix.SymmetryOperationsSymbols.RotInversionCase++import Data.Matrix.SymmetryOperationsSymbols.Parser+import Data.Matrix.SymmetryOperationsSymbols.SymmetryOperation -- (SymmetryOperation)+import Data.Matrix.SymmetryOperationsSymbols.Calc+++-- for doctest+import Data.Matrix.AsXYZ++-- | Derivation of geometric representation of symmetry operations from given matrix of symmetry operations+--+-- jpn) 与えられた対称操作の行列から、対称操作の幾何的表現を導出+--+-- >>> fromMatrix . fromXYZ $ "x,y,z"+-- Right " 1 "+--+-- >>> fromMatrix . fromXYZ $ "-y,x,-z"+-- Right "-4- 0,0,z; 0,0,0"+--+fromMatrix :: Integral a =>+              Matrix (Ratio a) -- ^ 3x4 or 4x4 Matrix+           -> Either String String+fromMatrix = fromMatrix'++-- | Derivation of geometric representation of symmetry operations from given matrix of symmetry operations+--+-- jpn) 与えられた対称操作の行列から、対称操作の幾何的表現を導出+--+fromMatrix' :: (Monad m, Integral a) => Matrix (Ratio a) -> m String+fromMatrix' m = showSymmetryOperation <$> fromMatrix'' m++-- | Derivation of geometric representation of symmetry operations from given matrix of symmetry operations+--+-- jpn) 与えられた対称操作の行列から、対称操作の幾何的表現を導出+--+fromMatrix'' :: (Monad m, Integral a) => Matrix (Ratio a) -> m (SymmetryOperation a)+fromMatrix'' m+  -- (i)+  | rotPart m == identity 3             = unitMatrixCase m+  -- (ii) (a)+  | correpondToRotInversion tr det      = rotInversionCase m+  -- -- (ii) (b)+  | correpondToNFoldRotation tr det     = nFoldRotationCase m+  -- -- (ii) (c)+  | correpondToGlideOrReflection tr det = glideOrReflectionCase m+  -- --+  | otherwise = fail "matrix is not symmetry operation."+  where+  tr  = trace (rotPart m)+  det = detLU (rotPart m)++  -- | Derivation of matrix representation from a string of geometric representations of symmetric operations+-- for cubic, tetragonal, orthorhombic, monoclinic, triclinic or rhombohedral.+--+-- jpn) 対称操作の幾何的表現の文字列から行列表現の導出+--+-- >>> prettyXYZ <$> toMatrixHex "-4- 0,0,z; 0,0,0"+-- Right "-y,x,-z"+--+toMatrix :: Integral a =>+            String -- ^ like " -1 0,0,0"+         -> Either ParseError (Matrix (Ratio a)) -- ^ 3x4 Matrix+toMatrix st = parse notHexagonal st st++-- | Derivation of matrix representation from a string of geometric representations of symmetric operations+-- for hexagonal.+--+-- jpn) 対称操作の幾何的表現の文字列から行列表現の導出(六方晶用)+--+-- >>> prettyXYZ <$> toMatrixHex "-3+ 0,0,z; 0,0,0"+-- Right "y,y-x,-z"+--+toMatrixHex :: Integral a =>+               String -- ^ like " -1 0,0,0"+            -> Either ParseError (Matrix (Ratio a)) -- ^ 3x4 Matrix+toMatrixHex st = parse hexagonal st st
+ src/Data/Matrix/SymmetryOperationsSymbols/Calc.hs view
@@ -0,0 +1,95 @@+module Data.Matrix.SymmetryOperationsSymbols.Calc (+    deriveSymmetryOperation+    , correpondToRotInversion+    , correpondToNFoldRotation+    , correpondToGlideOrReflection+  ) where++import Data.Ratio+import Data.Matrix+import Data.Fixed+import Data.Maybe+import Data.Matrix.SymmetryOperationsSymbols.Common+import Data.Matrix.SymmetryOperationsSymbols.Symbol++-- (<|>)の衝突を避けたくてParse.hsと分けてある++deriveSymmetryOperation :: (Monad m, Integral a)+                        => (SymbolSenseVectorOrientation -> m String)+                        -> SymbolSenseVectorOrientation+                        -> m (Matrix (Ratio a))+deriveSymmetryOperation lookupFunc elements = calcMatrix elements <$> lookupFunc elements++calcMatrix :: Integral a => SymbolSenseVectorOrientation -> String -> Matrix (Ratio a)+calcMatrix (symbol,sense,vector,orientation) = calc vector' orientation+    where+      vector' = fromMaybe vector . fromSymbol $ symbol+      fromSymbol A = Just "1/2,0,0"+      fromSymbol B = Just "0,1/2,0"+      fromSymbol C = Just "0,0,1/2"+      fromSymbol _   = Nothing++-- 対称操作の幾何表現から行列表現へ変換する際の計算部分+calc :: Integral a => String -> String -> String -> Matrix (Ratio a)+calc vector orientation transCoord+   -- matrixWの回転操作部分と生成したwを連結します+   = totalPart matrixW vector' orientation'+    where+      -- 文字列から各種行列(ベクター)を生成します+      matrixW = fromXYZ'' transCoord+      vector' = fromVec vector+      orientation' = fromVec orientation+      -- ベクトル表記から3x1行列を生成する+      fromVec = transPart . fromXYZ''++totalPart :: Integral a => Matrix (Ratio a) -> Matrix (Ratio a) -> Matrix (Ratio a) -> Matrix (Ratio a)+totalPart matrixW vector orientation+   -- matrixWの回転操作部分と生成したwを連結します+   = rotPart matrixW <|> transPart' matrixW vector orientation++transPart' :: Integral a => Matrix (Ratio a) -> Matrix (Ratio a) -> Matrix (Ratio a) -> Matrix (Ratio a)+transPart' matrixW vector orientation+   = elementwiseMod1 w+    where+      -- 0 <= x < 1 となるように全要素の剰余をとる+      elementwiseMod1 m = flip mod' 1 <$> m+      -- wl = (I-W)x の計算をします+      wl = multStd matrixIW orientation+      wg = vector+      -- w = wl + wgの計算をします+      -- inversionの場合、参照論文に記載がないが、別の計算が必要となり、w関数の最初の行+      -- 試行錯誤でみつけたもので根拠となる論文をまだみつけていないが、+      -- (ii) (a)の逆算でこうなった+      w | isRotInversion matrixW = multStd matrixIW vector+        | otherwise              = elementwise (+) wl wg+      -- 行列 I-W+      matrixIW = iw matrixW++isRotInversion :: Integral a => Matrix (Ratio a) -> Bool+isRotInversion matrix+    = correpondToRotInversion tr det+    where+      tr  = trace (rotPart matrix)+      det = detLU (rotPart matrix)+    +type Trace a = Ratio a+type Determinant a = Ratio a++-- Table 11.2.1.1. Identification of the type of the rotation part of the symmetry operation+correpondToRotInversion :: Integral a => Trace a -> Determinant a -> Bool+correpondToRotInversion (-3) (-1) = True -- -1+correpondToRotInversion (-2) (-1) = True -- -6+correpondToRotInversion (-1) (-1) = True -- -4+correpondToRotInversion   0  (-1) = True -- -3+correpondToRotInversion   _    _  = False++correpondToNFoldRotation :: Integral a => Trace a -> Determinant a -> Bool+correpondToNFoldRotation (-1) 1 = True -- 2+correpondToNFoldRotation   0  1 = True -- 3+correpondToNFoldRotation   1  1 = True -- 4+correpondToNFoldRotation   2  1 = True -- 6+correpondToNFoldRotation   _  _ = False++correpondToGlideOrReflection :: Integral a => Trace a -> Determinant a -> Bool+correpondToGlideOrReflection 1 (-1) = True -- m+correpondToGlideOrReflection _   _  = False
+ src/Data/Matrix/SymmetryOperationsSymbols/Common.hs view
@@ -0,0 +1,285 @@+{-|+Module      : Common+Description : utilities+Copyright   : (c) Jun Narumi, 2018+License     : BSD-3+Maintainer  : narumij@gmail.com+Stability   : experimental+Portability : ?++[Reference]++W. Fischer. and E. Koch. (2006), Derivation of symbols and coordinate triplets++listed in International Tables for Crystallography (2006). Vol. A, Chapter 11.2, pp. 812–816.++-}+module Data.Matrix.SymmetryOperationsSymbols.Common (+  ErrorMessage,+  SymbolSenseVectorOrientation,+  -- maybeToEither,+  rotPart,+  transPart,+  iw,+  triplet,+  tripletParen,+  adjustAnswerOnAxis,+  axisOf,+  senseOf,+  locationOf,+  orientationOf,+  properMatrixW,+  hexagonalMatrixW,+  fromXYZ'',+  ) where++import Data.List+import Data.Ratio+import Data.Matrix+import Data.Maybe+import Data.Matrix.AsXYZ+import Data.Ratio.Slash++import Data.Matrix.SymmetryOperationsSymbols.Symbol++type ErrorMessage = String+type SymbolSenseVectorOrientation = (Symbol,String,String,String)++-- | borrowed from Base ?.?.?+maybeToEither :: a -> Maybe b -> Either a b+maybeToEither _ (Just b) = Right b+maybeToEither a  Nothing = Left a++-- |+-- >>> triplet (1%2,3%4,5%6)+-- "1/2,3/4,5/6"+triplet :: Integral a => (Ratio a,Ratio a,Ratio a) -> String+triplet (a,b,c) = intercalate "," . map (show . Slash) $ [a,b,c]++-- |+-- >>> triplet (1%2,3%4,5%6)+-- "(1/2,3/4,5/6)"+tripletParen :: Integral a => (Ratio a,Ratio a,Ratio a) -> String+tripletParen = ("(" ++) . (++ ")") . triplet++-- | calculate (I-W)+iw :: Num c => Matrix c -> Matrix c+iw = elementwise (-) (identity 3) . rotPart++-- | 3x3 rotation part of matrix+rotPart :: Matrix a -> Matrix a+rotPart = submatrix 1 3 1 3++-- | 3x1 translation part of matrix+transPart :: Matrix a -> Matrix a+transPart = submatrix 1 3 4 4++-- | jpn) 解を解直線上で補正+adjustAnswerOnAxis :: (Eq b, Fractional b, Integral a) =>  Matrix (Ratio a) -> [b] -> Maybe [b]+adjustAnswerOnAxis mat ans = do+  let basis = axisOf mat+  adjustRate <- rate ans basis+  -- 算出した補正量と解の積を返す+  return $ zipWith (+) ans (fmap (*adjustRate) basis)++-- 計算対象となる要素の補正値+-- 解の直線を算出することができなかったので、データを参照することで代替している+rate :: (Eq a, Fractional a) => [a] -> [a] -> Maybe a+rate ans [] = Just 1+rate ans basis+  = listToMaybe+    . map snd . filter fst . zip select+    $ zipWith rating ans basis+  where+    rating ans basis = if basis == 0 then 0 else -ans / basis+    select = case basis of+        [ 0, 0, 1] -> [False,False, True] -- OK+        [ 0, 1, 0] -> [False, True,False] -- OK+        [ 1, 0, 0] -> [ True,False,False] -- OK+        [ 1, 1, 1] -> [False,False, True] -- ??+        [ 1,-1,-1] -> [False,False, True] -- OK+        [-1,-1, 1] -> [False,False, True] -- OK+        [-1, 1,-1] -> [False,False, True] -- OK+        [ 1, 1, 0] -> [ True,False,False] -- OK+        [ 1, 0, 1] -> [False,False, True] -- OK+        [ 0, 1, 1] -> [False,False, True] -- OK+        [ 1,-1, 0] -> [ True,False,False] -- OK+        [-1, 0, 1] -> [False,False, True] -- OK+        [ 0, 1,-1] -> [False,False, True] -- OK+        [ 1, 2, 0] -> [False, True,False] -- ??+        [ 2, 1, 0] -> [ True,False,False] -- ??+        _ -> error ""++----------------------++axisOf :: (Integral a,Num b) => Matrix (Ratio a) -> [b]+axisOf mat = fromJust $ fmap fromIntegral . axis <$> searchByRotationPart mat++senseOf :: (Integral a) => Matrix (Ratio a) -> String+senseOf mat = fromJust $ sense <$> searchByRotationPart mat++locationOf :: (Integral a) => Matrix (Ratio a) -> Matrix (Ratio a)+locationOf mat = fromJust $ location <$> searchByRotationPart mat++orientationOf :: (Integral a) => Matrix (Ratio a) -> [Ratio a]+orientationOf mat = fromJust $ orientation <$> searchByRotationPart mat++-- テーブルのレコードからほしい要素を取り出す関数たち+axis (a,s,b,c,d,e,f,g) = if null g then e else g+isHex (a,s,b,c,d,e,f,g) = a == Hexagonal+sense (_,_,_,s,_,_,_,_) = s+location (_,_,_,_,o,_,_,_) = rotPart . fromXYZ'' $ o+orientation (a,s,b,c,d,e,f,g) = fmap fromIntegral e++-- | jpn) 入力文字列が空だった場合に、4x4の0行列を返す+fromXYZ'' s = fromMaybe (zero 4 4) (fromXYZ' s)++-- | jpn) 入力の行列に該当するレコードを返却する+-- jpn) 行列の内容に対して一意なので、hexagonalを区別する必要がない+searchByRotationPart m = lookup (rotPart m) d+  where+    d = map (\i@(a,s,b,c,d,e,f,g)->(rotPart . fromXYZ'' $ f,i)) tbl++type MatrixLookupRecord a = ((Symbol,Sense,Matrix (Ratio a)),TransformedCoordinate)++lookupMatrixM :: Monad m => Integral a => String -> [MatrixLookupRecord a] -> SymbolSenseVectorOrientation -> m TransformedCoordinate+lookupMatrixM reason dataTable (sy,se,_,el)+   = case lookupSSVO (primeSymbol sy, se, el) dataTable of+      Nothing -> fail reason+      Just c  -> return c++lookupSSVO :: (Integral a) => (Symbol,String,String) -> [MatrixLookupRecord a] -> Maybe TransformedCoordinate+lookupSSVO (sym, sen, axis) d = lookup (sym, sen, rotPart . fromXYZ'' $ axis) d++properMatrixW :: Monad m => SymbolSenseVectorOrientation -> m TransformedCoordinate+properMatrixW = lookupMatrixM "matrix W not found (proper)." (fromTbl properTbl)++hexagonalMatrixW :: Monad m => SymbolSenseVectorOrientation -> m TransformedCoordinate+hexagonalMatrixW = lookupMatrixM "matrix W not found (hexagonal)." (fromTbl hexagonalTbl)++fromTbl :: (Integral a) => [Tbl] -> [MatrixLookupRecord a]+fromTbl = map tblToMLR++tblToMLR :: (Integral a) => Tbl -> MatrixLookupRecord a+tblToMLR (a,s,b,c,d,e,f,g) = ((s,c,rotPart . fromXYZ'' $ d),f)++properTbl :: [Tbl]+properTbl = filter (not . isHex) tbl++hexagonalTbl :: [Tbl]+hexagonalTbl = filter isHex tbl ++ filter (not . isHex) tbl++primeSymbol :: Symbol -> Symbol+primeSymbol T = Id+primeSymbol A = M+primeSymbol B = M+primeSymbol C = M+primeSymbol D = M+primeSymbol N = M+primeSymbol G = M+primeSymbol otherSymbol = otherSymbol++data Lattice = Hexagonal | AnythingElse deriving (Eq)+type SymbolLabel = String+type Sense = String+type SymmetryElement = String+type Orientation = [Integer] -- orientation or location+type TransformedCoordinate = String+type AxisOrNormal = [Integer]++type Tbl = (Lattice,Symbol,SymbolLabel,Sense,SymmetryElement,Orientation,TransformedCoordinate,AxisOrNormal)++tbl :: [Tbl]+tbl = [+-- Table 11.2.2.1. Matrices for point-group symmetry operations and orientation+-- of corresponding symmetry elements, referred to a cubic, tetragonal, orthorhombic,+-- monoclinic, triclinic or rhombohedral coordinate system+  ( AnythingElse,  Id,  "1",  "",        "",         [],     "x,y,z", []),+  ( AnythingElse,  R2,  "2",  "",   "0,0,z", [ 0, 0, 1],   "-x,-y,z", []),+  ( AnythingElse,  R2,  "2",  "",   "0,y,0", [ 0, 1, 0],   "-x,y,-z", []),+  ( AnythingElse,  R2,  "2",  "",   "x,0,0", [ 1, 0, 0],   "x,-y,-z", []),+  ( AnythingElse,  R3,  "3", "+",   "x,x,x", [ 1, 1, 1],     "z,x,y", []),+  ( AnythingElse,  R3,  "3", "+", "x,-x,-x", [ 1,-1,-1],   "-z,-x,y", []),+  ( AnythingElse,  R3,  "3", "+", "-x,x,-x", [-1, 1,-1],   "z,-x,-y", []),+  ( AnythingElse,  R3,  "3", "+", "-x,-x,x", [-1,-1, 1],   "-z,x,-y", []),+  ( AnythingElse,  R3,  "3", "-",   "x,x,x", [ 1, 1, 1],     "y,z,x", []),+  ( AnythingElse,  R3,  "3", "-", "x,-x,-x", [ 1,-1,-1],   "-y,z,-x", []),+  ( AnythingElse,  R3,  "3", "-", "-x,x,-x", [-1, 1,-1],   "-y,-z,x", []),+  ( AnythingElse,  R3,  "3", "-", "-x,-x,x", [-1,-1, 1],   "y,-z,-x", []),+  ( AnythingElse,  R2,  "2",  "",   "x,x,0", [ 1, 1, 0],    "y,x,-z", []),+  ( AnythingElse,  R2,  "2",  "",   "x,0,x", [ 1, 0, 1],    "z,-y,x", []),+  ( AnythingElse,  R2,  "2",  "",   "0,y,y", [ 0, 1, 1],    "-x,z,y", []),+  ( AnythingElse,  R2,  "2",  "",  "x,-x,0", [ 1,-1, 0],  "-y,-x,-z", []),+  ( AnythingElse,  R2,  "2",  "",  "-x,0,x", [-1, 0, 1],  "-z,-y,-x", []),+  ( AnythingElse,  R2,  "2",  "",  "0,y,-y", [ 0, 1,-1],  "-x,-z,-y", []),+  ( AnythingElse,  R4,  "4", "+",   "0,0,z", [ 0, 0, 1],    "-y,x,z", []),+  ( AnythingElse,  R4,  "4", "+",   "0,y,0", [ 0, 1, 0],    "z,y,-x", []),+  ( AnythingElse,  R4,  "4", "+",   "x,0,0", [ 1, 0, 0],    "x,-z,y", []),+  ( AnythingElse,  R4,  "4", "-",   "0,0,z", [ 0, 0, 1],    "y,-x,z", []),+  ( AnythingElse,  R4,  "4", "-",   "0,y,0", [ 0, 1, 0],    "-z,y,x", []),+  ( AnythingElse,  R4,  "4", "-",   "x,0,0", [ 1, 0, 0],    "x,z,-y", []),+----+  ( AnythingElse, Inv, "-1",  "",   "0,0,0",         [],  "-x,-y,-z", []),+  ( AnythingElse,   M,  "m",  "",   "x,y,0", [ 0, 0, 1],    "x,y,-z", []),+  ( AnythingElse,   M,  "m",  "",   "x,0,z", [ 0, 1, 0],    "x,-y,z", []),+  ( AnythingElse,   M,  "m",  "",   "0,y,z", [ 1, 0, 0],    "-x,y,z", []),+  ( AnythingElse, RI3, "-3", "+",   "x,x,x", [ 1, 1, 1],  "-z,-x,-y", []),+  ( AnythingElse, RI3, "-3", "+", "x,-x,-x", [ 1,-1,-1],    "z,x,-y", []),+  ( AnythingElse, RI3, "-3", "+", "-x,x,-x", [-1, 1,-1],    "-z,x,y", []),+  ( AnythingElse, RI3, "-3", "+", "-x,-x,x", [-1,-1, 1],    "z,-x,y", []),+  ( AnythingElse, RI3, "-3", "-",   "x,x,x", [ 1, 1, 1],  "-y,-z,-x", []),+  ( AnythingElse, RI3, "-3", "-", "x,-x,-x", [ 1,-1,-1],    "y,-z,x", []),+  ( AnythingElse, RI3, "-3", "-", "-x,x,-x", [-1, 1,-1],    "y,z,-x", []),+  ( AnythingElse, RI3, "-3", "-", "-x,-x,x", [-1,-1, 1],    "-y,z,x", []),+  ( AnythingElse,   M,  "m",  "",  "x,-x,z", [ 1, 1, 0],   "-y,-x,z", []),+  ( AnythingElse,   M,  "m",  "",  "-x,y,x", [ 1, 0, 1],   "-z,y,-x", []),+  ( AnythingElse,   M,  "m",  "",  "x,y,-y", [ 0, 1, 1],   "x,-z,-y", []),+  ( AnythingElse,   M,  "m",  "",   "x,x,z", [ 1,-1, 0],     "y,x,z", []),+  ( AnythingElse,   M,  "m",  "",   "x,y,x", [-1, 0, 1],     "z,y,x", []),+  ( AnythingElse,   M,  "m",  "",   "x,y,y", [ 0, 1,-1],     "x,z,y", []),+  ( AnythingElse, RI4, "-4", "+",   "0,0,z", [ 0, 0, 1],   "y,-x,-z", []),+  ( AnythingElse, RI4, "-4", "+",   "0,y,0", [ 0, 1, 0],   "-z,-y,x", []),+  ( AnythingElse, RI4, "-4", "+",   "x,0,0", [ 1, 0, 0],   "-x,z,-y", []),+  ( AnythingElse, RI4, "-4", "-",   "0,0,z", [ 0, 0, 1],   "-y,x,-z", []),+  ( AnythingElse, RI4, "-4", "-",   "0,y,0", [ 0, 1, 0],   "z,-y,-x", []),+  ( AnythingElse, RI4, "-4", "-",   "x,0,0", [ 1, 0, 0],   "-x,-z,y", []),+-- Table 11.2.2.2. Matrices for point-group symmetry operations and orientation+-- of corresponding symmetry elements, referred to a hexagonal coordinate system+  (    Hexagonal,  Id,  "1",  "",        "",         [],     "x,y,z", []),+  (    Hexagonal,  R3,  "3", "+",   "0,0,z", [ 0, 0, 1],  "-y,x-y,z", []),+  (    Hexagonal,  R3,  "3", "-",   "0,0,z", [ 0, 0, 1],  "y-x,-x,z", []),+  (    Hexagonal,  R2,  "2",  "",   "0,0,z", [ 0, 0, 1],   "-x,-y,z", []),+  (    Hexagonal,  R6,  "6", "+",   "0,0,z", [ 0, 0, 1],   "x-y,x,z", []),+  (    Hexagonal,  R6,  "6", "-",   "0,0,z", [ 0, 0, 1],   "y,y-x,z", []),+  (    Hexagonal,  R2,  "2",  "",   "x,x,0", [ 1, 1, 0],    "y,x,-z", []),+  (    Hexagonal,  R2,  "2",  "",   "x,0,0", [ 1, 0, 0], "x-y,-y,-z", []),+  (    Hexagonal,  R2,  "2",  "",   "0,y,0", [ 0, 1, 0], "-x,y-x,-z", []),+  (    Hexagonal,  R2,  "2",  "",  "x,-x,0", [ 1,-1, 0],  "-y,-x,-z", []),+--+  (    Hexagonal,  R2,  "2",  "",  "x,2x,0", [ 1, 2, 0],  "y-x,y,-z", []),+  (    Hexagonal,  R2,  "2",  "",  "2x,x,0", [ 2, 1, 0],  "x,x-y,-z", []),+-- +  (    Hexagonal, Inv, "-1",  "",   "0,0,0",         [],  "-x,-y,-z", []),+  (    Hexagonal, RI3, "-3", "+",   "0,0,z", [ 0, 0, 1],  "y,y-x,-z", []),+  (    Hexagonal, RI3, "-3", "-",   "0,0,z", [ 0, 0, 1],  "x-y,x,-z", []),+  (    Hexagonal,   M,  "m",  "",   "x,y,0", [ 0, 0, 1],    "x,y,-z", []),+  (    Hexagonal, RI6, "-6", "+",   "0,0,z", [ 0, 0, 1], "y-x,-x,-z", []),+  (    Hexagonal, RI6, "-6", "-",   "0,0,z", [ 0, 0, 1], "-y,x-y,-z", []),+  (    Hexagonal,   M,  "m",  "",  "x,-x,z", [ 1, 1, 0],   "-y,-x,z", []),+-- 以下二つが、Orientationを利用して解の補正をすることができなかったため、代替値を用意している+-- 行列を解いた場合の解平面とorientationが一致していない可能性(2017の試行錯誤)+-- そもそも勘違いの可能性もまだあるので、のちのち再確認する。+-- hackageに登録するに至らない理由の一つ+-- 正規化された値として正しいが、正規化の結果、復元に必要な情報が欠落してしまった可能性(2020リファクタリング時の見解)+-- どうしてこうなっているのか、やっぱりわからない。+  (    Hexagonal,   M,  "m",  "",  "x,2x,z", [ 1, 0, 0],   "y-x,y,z", [ 2,-1, 0]),+  (    Hexagonal,   M,  "m",  "",  "2x,x,z", [ 0, 1, 0],   "x,x-y,z", [-1, 2, 0]),++  (    Hexagonal,   M,  "m",  "",   "x,x,z", [ 1,-1, 0],     "y,x,z", []),+  (    Hexagonal,   M,  "m",  "",   "x,0,z", [ 1, 2, 0],  "x-y,-y,z", []),+  (    Hexagonal,   M,  "m",  "",   "0,y,z", [ 2, 1, 0],  "-x,y-x,z", [])+-- Notice+-- Hexagonal用のテーブルが、HexagonalのITで出現する対称操作全てをカバーしているわけではないことに注意+-- hexagonalでのlookup時には、hexagonal部分が優先となるよう、順番をいれかえている+-- それ以外のケースでは除外している+  ]
+ src/Data/Matrix/SymmetryOperationsSymbols/GlideOrReflectionCase.hs view
@@ -0,0 +1,181 @@+{-|+Module      : GlideOrReflectionCase+Copyright   : (c) Jun Narumi, 2018+License     : BSD-3+Maintainer  : narumij@gmail.com+Stability   : experimental+Portability : ?++[References]++W. Fischer. and E. Koch. (2006), Derivation of symbols and coordinate triplets++listed in International Tables for Crystallography (2006). Vol. A, Chapter 11.2, pp. 812–816.++-}+module Data.Matrix.SymmetryOperationsSymbols.GlideOrReflectionCase (+  glideOrReflectionCase,+  ) where++import Control.Monad++import Data.Ratio+import Data.List (transpose)+import Data.Matrix hiding (transpose)+import Data.Matrix.SymmetryOperationsSymbols.Solve+import Data.Matrix.SymmetryOperationsSymbols.Common+import Data.Matrix.AsXYZ+import qualified Data.Matrix.SymmetryOperationsSymbols.SymmetryOperation as S++-- | Case (ii) (c) W corresponds to a (glide) reflection+glideOrReflectionCase :: (Monad m, Integral a) => Matrix (Ratio a) -> m (S.SymmetryOperation a)+glideOrReflectionCase m = arrange m <$> solvingEquation m++arrange :: Integral a => Matrix (Ratio a) -> [Ratio a] -> S.SymmetryOperation a+arrange m ans+      | sym == M           = S.Reflection { S.plane = location }+      | sym `elem` [A,B,C] = S.GlideABC { S.abc = abc, S.plane = location }+      | otherwise          = S.GlideDGN { S.dgn = dgn, S.glide = (a,b,c), S.plane = location }+      where+        glidePart@[a,b,c] = toList (wg m)+        sym = millerSymbol (orientationOf m) glidePart+        abc | sym == A = S.A+            | sym == B = S.B+            | sym == C = S.C+        dgn | sym == D = S.D+            | sym == G = S.G+            | sym == N = S.N+        location = locationOf m <|> fromList 3 1 ans++        +-- for repl check+-- "-y+1/2,-x,z+3/4"+-- " d (1/4,-1/4,3/4) x+1/4,-x,z"+testMat = fromList 3 4 [0,-1,0,1%2, -1,0,0,0, 0,0,1,3%4]++-- Ww + w = t+t :: (Fractional b, Eq b) => Matrix b -> Matrix b+t mat = let (_W,_w,_,_) = splitBlocks 3 3 mat+        in elementwise (+) (_W `multStd` _w) _w++-- glide part+wg :: (Fractional b, Eq b) => Matrix b -> Matrix b+wg mat = fmap (/2) (t mat)++wl :: (Fractional b, Eq b) => Matrix b -> Matrix b+wl mat = elementwise (-) (transPart mat) (wg mat)++-- solving equation (W,wl)x = x+solvingEquation' :: Integral a => Matrix (Ratio a) -> Maybe (Matrix (Ratio a))+solvingEquation' mat = solve (iw mat) (wl mat)++-------------------++solvingEquation'' :: Integral a => Matrix (Ratio a) -> Maybe [Ratio a]+solvingEquation'' mat = adjustAnswerOnPlane mat . toList =<< solvingEquation' mat++solvingEquation :: (Monad m, Integral a) => Matrix (Ratio a) -> m [Ratio a]+solvingEquation mat = case solvingEquation'' mat of+  Nothing -> fail "<GlideOrReflection> when calculate equation solve."+  Just a -> return a++normalOf :: (Integral a,Num b) => Matrix (Ratio a) -> [b]+normalOf = axisOf++adjustAnswerOnPlane :: Integral a => Matrix (Ratio a) -> [Ratio a] -> Maybe [Ratio a]+adjustAnswerOnPlane mat s = intersectSegmentAndPlane (answerAdjustSegment mat) (plane (normalOf mat) s)++type Point a = [a]+type Vector a = [a]+type Plane a = (Vector a,a)+type Segment a = (Point a,Point a)++dot :: (Num a) => Vector a -> Vector a -> a+dot vecA vecB = sum $ zipWith (*) vecA vecB++plane :: (Num a) => Vector a -> Point a -> Plane a+plane normal point = (normal,d)+  where+    d = dot normal point++intersectSegmentAndPlane' :: (Ord c, Fractional c) => Segment c -> Plane c -> Point c+intersectSegmentAndPlane' (pointA,pointB) (planeN,planeD) = zipWith (+) pointA (map (*t) ab)+  where+    ab = zipWith (-) pointB pointA+    t = (planeD - dot planeN pointA) / dot planeN ab++-- 検算。repl用+check :: (Ord c, Fractional c) => Segment c -> Plane c -> Bool+check (pointA,pointB) (planeN,planeD) = t' /= 0 && t >= 0 && t <= 1.0+  where+    ab = zipWith (-) pointB pointA+    t' = dot planeN ab+    t = (planeD - dot planeN pointA) / dot planeN ab++intersectSegmentAndPlane :: (Ord c, Fractional c) => Segment c -> Plane c -> Maybe [c]+intersectSegmentAndPlane s@(pointA,pointB) p@(planeN,planeD)+  = if check s p+    then Just $ intersectSegmentAndPlane' s p+    else Nothing++answerAdjustSegment :: (Integral a, Num b) => Matrix (Ratio a) -> Segment b+answerAdjustSegment mat = (base, fmap negate base)+  where+    base = case axisOf mat of+      [ 0, 0, 1] -> [0,0,1]+      [ 0, 1, 0] -> [0,1,0]+      [ 1, 0, 0] -> [1,0,0]+      [ 1, 1, 0] -> [1,0,0]+      [ 1, 0, 1] -> [1,0,0]+      [ 0, 1, 1] -> [0,1,0]+      [ 1,-1, 0] -> [1,0,0]+      [-1, 0, 1] -> [1,0,0]+      [ 0, 1,-1] -> [0,1,0]+      [ 1, 2, 0] -> [1,0,0]+      [ 2, 1, 0] -> [1,0,0]+      --+      [ 2,-1, 0] -> [1,0,0]+      [-1, 2, 0] -> [1,0,0]+      a -> error $ "unknown normal of glide plane" ++ show a++--------------++data GlideType = M | A | B | C | N | D | G deriving (Eq,Show)++type Orientation a = [Ratio a]+type GlideVector a = [Ratio a]++millerSymbol :: (Integral a) => Orientation a -> GlideVector a -> GlideType+millerSymbol o v++      | v == [   0,   0,   0] = M++      | v == [ 1%2,   0,   0] = A+      | v == [   0, 1%2,   0] = B+      | v == [   0,   0, 1%2] = C+      +      | (-1) `notElem` o && vv [_12all,_12all,_12all] = N+      | (-1) `elem` o    && vv [_12   ,_12   ,_12   ] = N++      | o == [ 0, 0, 1] &&  vv [_14w,_14w,_0  ] = D+      | o == [ 1, 0, 0] &&  vv [_0  ,_14w,_14w] = D+      | o == [ 0, 1, 0] &&  vv [_14w,_0  ,_14w] = D+      | o == [ 1, 1, 0] &&  vv [_14v,_14v,_14w] = D+      | o == [ 0, 1, 1] &&  vv [_14w,_14v,_14v] = D+      | o == [ 1, 0, 1] &&  vv [_14v,_14w,_14v] = D+      | o == [ 1,-1, 0] && (vv [_14 ,_14 ,_14w] || vv [_34,_34,_34]) = D+      | o == [ 0, 1,-1] && (vv [_14w,_14 ,_14 ] || vv [_34,_34,_34]) = D+      | o == [-1, 0, 1] && (vv [_14 ,_14w,_14 ] || vv [_34,_34,_34]) = D++      | otherwise = G+      +      where+        _0 n = n == 0+        _12 n = n == 1%2+        _12all n = n `elem` [-1%2,0,1%2]+        _14 n = n == 1%4+        _14v n = abs n == 1%4+        _14w n = n == 1%4 || n == 3%4+        _34 n = n == 3%4+        vv p = and $ zipWith ($) p v+
+ src/Data/Matrix/SymmetryOperationsSymbols/Parser.hs view
@@ -0,0 +1,242 @@+{-|+Module      : Parse+Description : pasing geometric representation part+Copyright   : (c) Jun Narumi, 2018+License     : BSD-3+Maintainer  : narumij@gmail.com+Stability   : experimental+Portability : ?++-}+module Data.Matrix.SymmetryOperationsSymbols.Parser (+  -- symbolSenseVectorOrientation,+  notHexagonal,+  hexagonal,+  symmetryElement,+  ) where++import Control.Monad (join,guard)+import Data.Maybe (fromMaybe,isJust)+import Data.List (intercalate)++import Data.Matrix (Matrix)+import Data.Ratio (Ratio)++import Text.Parsec+import Text.Parsec.String (Parser)++import Data.Matrix.SymmetryOperationsSymbols.Common+import Data.Matrix.SymmetryOperationsSymbols.Calc+import Data.Matrix.SymmetryOperationsSymbols.Symbol+++sign :: Parser Char+sign = oneOf "-+"++zero :: Parser String+zero = do+  char '0'+  return "0"++num :: Parser String+num = do+  x <- oneOf "123456789"+  xs <- many digit+  return $ x : xs++int :: Parser String+int = zero <|> num++integer :: Parser String+integer = int++fract :: Parser String+fract = do+  n <- int+  optionSpaces+  char '/'+  optionSpaces+  d <- int+  return $ n ++ "/" ++ d++number :: Parser String+number =   try fract+      <|> integer++optionSpaces :: Parser ()+optionSpaces = skipMany space++vector :: Parser String+vector = do+  n1 <- num+  char ','+  n2 <- num+  char ','+  n3 <- num+  return $ intercalate "," [n1,n2,n3]+  where+    num = do+      optionSpaces+      s <- optionMaybe sign+      n1 <- number+      optionSpaces+      return $ maybe n1 (:n1) s++elementBody :: Parser String+elementBody = do+  n <- optionMaybe number+  optionSpaces+  v <- optionMaybe (oneOf "xyzXYZ")+  optionSpaces+  guard (isJust n || isJust v)+  return $ fromMaybe "" n ++ maybe "" (:[]) v++one :: Parser String+one = do+  s <- optionMaybe sign+  optionSpaces+  n <- elementBody+  return $ maybe n (:n) s++other :: Parser String+other = do+  s <- sign+  optionSpaces+  l <- elementBody+  return $ s:l++component :: Parser String+component = do+  optionSpaces+  x <- one+  xs <- many other+  optionSpaces+  return $ join (x:xs)++matrix :: Parser String+matrix = do+  n1 <- component+  char ','+  n2 <- component+  char ','+  n3 <- component+  return $ intercalate "," [n1,n2,n3]++parenVector :: Parser String+parenVector = do+  char '('+  v <- vector+  char ')'+  return v++elementFull :: Parser (String,String)+elementFull = do -- (x,x,x) n,n,n+  v <- parenVector+  optionSpaces+  m <- matrix+  return (v,m)++elementHalf :: Parser (String,String)+elementHalf = do -- n,n,n+  m <- matrix+  return ("",m)++element :: Parser (String,String)+element = try elementFull <|> elementHalf++identity :: Parser SymbolSenseVectorOrientation+identity = do+  optionSpaces+  char '1'+  optionSpaces+  return ( Id, "", "", "" )++transform :: Parser SymbolSenseVectorOrientation+transform = do+  optionSpaces+  char 't'+  optionSpaces+  vec <- parenVector+  return ( T, "", vec, "" )++inversion :: Parser SymbolSenseVectorOrientation+inversion = do+  optionSpaces+  string "-1"+  optionSpaces+  vec <- vector+  optionSpaces+  return ( Inv, "", vec, "" )++miller :: Parser SymbolSenseVectorOrientation+miller = do+  optionSpaces+  sy <- oneOf "abcm"+  optionSpaces+  ori <- matrix+  optionSpaces+  return ( read [sy], "", "", ori )++glide :: Parser SymbolSenseVectorOrientation+glide = do+  optionSpaces+  sy <- oneOf "ndg"+  optionSpaces+  (vec,ori) <- element+  optionSpaces+  return ( read [sy], "", vec, ori )++millerOrGlide :: Parser SymbolSenseVectorOrientation+millerOrGlide = try miller <|> glide++rotation :: Parser SymbolSenseVectorOrientation+rotation = do+  optionSpaces+  sy <- oneOf "2436"+  se <- optionMaybe sign+  optionSpaces+  (vec,ori) <- element+  optionSpaces+  return ( read [sy],maybe "" (:[]) se, vec, ori )++invRotation :: Parser SymbolSenseVectorOrientation+invRotation = do+  optionSpaces+  char '-'+  c <- oneOf "436"+  se <- sign+  optionSpaces+  ori <- matrix+  optionSpaces+  char ';'+  optionSpaces+  vec <- vector+  optionSpaces+  return ( read ['-',c], [se], vec, ori )++symbolSenseVectorOrientation :: Parser SymbolSenseVectorOrientation+symbolSenseVectorOrientation+  = do+    elements <- try identity+            <|> try transform+            <|> try inversion+            <|> try millerOrGlide+            <|> try rotation+            <|> invRotation+    optionSpaces+    eof+    return elements++symmetryElement :: (SymbolSenseVectorOrientation -> Parser b) -> Parser b+symmetryElement f = do+    elements <- symbolSenseVectorOrientation+    f elements++notHexagonal :: Integral a => Parser (Matrix (Ratio a))+-- | referred to a cubic, tetragonal, orthorhombic, monoclinic, triclinic or rhombohedral+notHexagonal = symmetryElement (deriveSymmetryOperation properMatrixW)++hexagonal :: Integral a => Parser (Matrix (Ratio a))+-- | referred to a hexagonal+hexagonal = symmetryElement (deriveSymmetryOperation hexagonalMatrixW)+
+ src/Data/Matrix/SymmetryOperationsSymbols/RotInversionCase.hs view
@@ -0,0 +1,109 @@+{-|+Module      : RotInversionCase+Copyright   : (c) Jun Narumi, 2018+License     : BSD-3+Maintainer  : narumij@gmail.com+Stability   : experimental+Portability : ?++[References]++W. Fischer. and E. Koch. (2006), Derivation of symbols and coordinate triplets++listed in International Tables for Crystallography (2006). Vol. A, Chapter 11.2, pp. 812–816.++-}+module Data.Matrix.SymmetryOperationsSymbols.RotInversionCase (+  rotInversionCase,+  ) where++import Data.List+import Data.Maybe+import Data.Ratio+import Data.Matrix+import Data.Matrix.SymmetryOperationsSymbols.Solve+import Data.Matrix.SymmetryOperationsSymbols.Common+import Data.Matrix.AsXYZ+import Data.Matrix.SymmetryOperationsSymbols.SymmetryOperation++-- | Case (ii) (b) W corresponds to an n-fold rotation+rotInversionCase :: (Monad m, Integral a) => Matrix (Ratio a) -> m (SymmetryOperation a)+rotInversionCase m = arrange m <$> calc m++calc :: (Monad m, Integral a) => Matrix (Ratio a) -> m ([Ratio a], Matrix (Ratio a))    +calc m = (,) <$> solvingEquation2 m <*> solvingEquation1 m++arrange :: Integral a => Matrix (Ratio a) -> ([Ratio a], Matrix (Ratio a)) -> SymmetryOperation a+arrange m ([],b) = Inversion { centre = (i,j,k) }+  where+    [i,j,k] = toList b+arrange m (a,b) = RotInversion { nFold = n, sense = sen, axis = loc, point = (i,j,k) }+  where+    [i,j,k] = toList b+    rt = rotationType m+    loc = locationOf m <|> fromList 3 1 a+    n | rt == -3 = ThreeFold+      | rt == -4 = FourFold+      | rt == -6 = SixFold+    sen = case senseOf m of+      "+" -> Positive+      "-" -> Negative+      _ -> error ""++------------++-- for repl check+-- "-z,-x+1/2,y"+-- " 3+(-1/6,1/6,1/6) x+1/6,-x+1/6,-x"+testMat = fromList 3 4 [ 0,0,1,0, 0,-1,0,1%2, -1,0,0,1%2 ]++-- Table 11.2.1.1. Identification of the type of the rotation part of the symmetry operation+rotationType :: (Num a,Eq a,Integral b) => Matrix a -> b+rotationType m+  | tr == (-3) = -1+  | tr == (-2) = -6+  | tr == (-1) = -4+  | tr ==   0  = -3+  where+    tr = trace $ rotPart m++wg :: (Fractional b, Eq b) => Matrix b -> Matrix b+wg mat = multStd (rotPart mat) (transPart mat)++wl :: (Fractional b, Eq b) => Matrix b -> Matrix b+wl mat = elementwise (+) (wg mat) (transPart mat)++-- (ii) (a) solving equation (W,w)x = x+solvingEquation1 :: (Monad m, Integral a) => Matrix (Ratio a) -> m (Matrix (Ratio a))+solvingEquation1 mat = case solvingEquation1' mat of+  Nothing -> fail "<RotInv> when calculate equation (W,w)x = x"+  Just a -> return a++solvingEquation1' :: Integral a => Matrix (Ratio a) -> Maybe (Matrix (Ratio a))+solvingEquation1' mat = solve (iw mat) (transPart mat)++-- (ii) (a) solving equation (W,w)^2 x = x+solvingEquation2' :: Integral a => Matrix (Ratio a) -> Maybe (Matrix (Ratio a))+solvingEquation2' mat = solve (iw w2) (wl mat)+  where+    pow2 m = multStd m m+    w2 = pow2 (rotPart mat)++solvingEquation2 :: (Monad m, Integral a) => Matrix (Ratio a) -> m [Ratio a]+solvingEquation2 mat = case result of+    Nothing -> fail "<RotInv> when calculate equation (W,w)^2 x = x."+    Just a -> return a+  where+    result = do+      sol <- solvingEquation2' mat+      adjustAnswerOnAxis mat (toList sol)+++-- 検算。repl用+check mat sol = if multStd (iw2 mat) (vec sol) == wl mat+                then Right sol+                else Left "General solution error."+    where+      vec l = fromList (length l) 1 l+      iw2 m = iw $ multStd _W _W+      _W = rotPart mat
+ src/Data/Matrix/SymmetryOperationsSymbols/RotationCase.hs view
@@ -0,0 +1,109 @@+{-|+Module      : RotationCase+Copyright   : (c) Jun Narumi, 2018+License     : BSD-3+Maintainer  : narumij@gmail.com+Stability   : experimental+Portability : ?++[References]++W. Fischer. and E. Koch. (2006), Derivation of symbols and coordinate triplets++listed in International Tables for Crystallography (2006). Vol. A, Chapter 11.2, pp. 812–816.++-}+module Data.Matrix.SymmetryOperationsSymbols.RotationCase (+  nFoldRotationCase,+  ) where++import Data.Ratio+import Data.List (transpose)+import Data.Matrix hiding (transpose)+import Data.Matrix.SymmetryOperationsSymbols.Solve+import Data.Matrix.SymmetryOperationsSymbols.Common+import Data.Matrix.AsXYZ+import Data.Matrix.SymmetryOperationsSymbols.SymmetryOperation++-- | Case (ii) (a) W corresponds to a rotoinversion+nFoldRotationCase :: (Monad m, Integral a) => Matrix (Ratio a) -> m (SymmetryOperation a)+nFoldRotationCase m = arrange m <$> solvingEquation m++arrange :: Integral a => Matrix (Ratio a) -> [Ratio a] -> SymmetryOperation a+arrange m ans +  | rt == 2 && noScrew = TwoFoldRotation { axis = location }+  | rt == 2            = TwoFoldScrew { axis = location, vector = (sa,sb,sc) }+  | noScrew            = NFoldRotation { nFold = n, sense = sen, axis = location }+  | otherwise          = NFoldScrew { nFold = n, sense = sen, axis = location, vector = (sa,sb,sc) }+      where+        noScrew = all (==0) screwPart +        rt = rotationType m+        n | rt == 3 = ThreeFold+          | rt == 4 = FourFold+          | rt == 6 = SixFold+        sen = case senseOf m of+          "+" -> Positive+          "-" -> Negative+          _ -> error ""+        s = if null . senseOf $ m then " " else senseOf m+        sym = " " ++ show rt ++ s+        screwPart@[sa,sb,sc] = toList (wg m)+        location = locationOf m <|> fromList 3 1 ans+    +--++-- for repl check+-- "-z,-x+1/2,y"+-- " 3+(-1/6,1/6,1/6) x+1/6,-x+1/6,-x"+testMat = fromList 3 4 [ 0,0,-1,0, -1,0,0,1%2, 0,1,0,0 ]++-- Table 11.2.1.1. Identification of the type of the rotation part of the symmetry operation+rotationType :: (Num a,Eq a,Integral b) => Matrix a -> b+rotationType m+  | tr == (-1) = 2+  | tr ==   0  = 3+  | tr ==   1  = 4+  | tr ==   2  = 6+  where tr = trace $ rotPart m++pow :: (Num a, Integral b) => Matrix a -> b -> Matrix a+pow m 0 = identity 3+pow m n = foldl1 multStd $ replicate (fromIntegral n) (rotPart m)++-- (W,w)^(n-1) = t+t :: (Num b, Eq b) => Matrix b -> Matrix b+t mat = f [ pow mat n | n <- [0..(pred r)] ]+  where+    r = rotationType mat+    w = transPart mat+    g n m = multStd m n+    f l = foldl1 (elementwise (+)) $ map (g w) l++-- | (W,w)^n+wg :: (Fractional b, Eq b) => Matrix b -> Matrix b+wg mat = fmap (/ fromIntegral r) (t mat)+  where+    r = rotationType mat++wl :: (Fractional b, Eq b) => Matrix b -> Matrix b+wl mat = elementwise (-) (transPart mat) (wg mat)++solvingEquation' :: Integral a => Matrix (Ratio a) -> Maybe (Matrix (Ratio a))+solvingEquation' mat = solve (iw mat) (wl mat)++solvingEquation'' :: Integral a => Matrix (Ratio a) -> Maybe [Ratio a]+solvingEquation'' mat = do+  sol <- solvingEquation' mat+  adjustAnswerOnAxis mat (toList sol)++solvingEquation :: (Monad m, Integral a) => Matrix (Ratio a) -> m [Ratio a]+solvingEquation mat = case solvingEquation'' mat of+  Nothing -> fail "<Rot> when calculate equation."+  Just a -> return a++-- 検算。repl用+check mat sol = if toList (multStd (iw mat) (vec sol)) == toList (wl mat)+                then sol+                else error "General solution error."+    where+      vec l = fromList (length l) 1 l
+ src/Data/Matrix/SymmetryOperationsSymbols/Solve.hs view
@@ -0,0 +1,49 @@+{-|+Module      : Solve+Description : solving linear equation part+Copyright   : (c) Jun Narumi, 2018+License     : BSD-3+Maintainer  : narumij@gmail.com+Stability   : experimental+Portability : ?++-}+module Data.Matrix.SymmetryOperationsSymbols.Solve (+  solve,+  ) where++import Data.Ratio+import Data.Matrix++forsub :: Num a => [a] -> [a] -> [a] -> [a]+forsub b lower y = y ++ [(b !! length y) - sum (zipWith (*) y lower)]++forward :: Num a => Matrix a -> [a] -> [a]+forward lower b = (foldl1 (.) $ reverse $ map (forsub b) $ toLists lower) []++backsub :: (Eq a, Fractional a) => [a] -> [a] -> [a] -> [a]+backsub ys zs xs = xs ++ [g]+  where+    d = reverse zs !! length xs+    e = reverse ys !! length xs+    c = sum $ zipWith (*) xs (reverse zs)+    g = if d == 0 then 0 else (e - c) / d++backward :: (Fractional a, Eq a) => Matrix a -> [a] -> [a]+backward upper y = (foldl1 (.) $ map (backsub y) $ toLists upper) []++solve' :: (Integral a) =>+          Matrix (Ratio a)+       -> [Ratio a]+       -> Maybe [Ratio a]+solve' mat vec = do+      (u,l,p,q,_,_) <- luDecomp' mat+      return $ permutation q . reverse . backward u . forward l . permutation p $ vec+  where+    permutation n v = toList (multStd n (fromList (length v) 1 v))++solve :: (Integral a) =>+         Matrix (Ratio a) -- ^ jpn) 正方行列+      -> Matrix (Ratio a) -- ^ jpn) ベクトル+      -> Maybe (Matrix (Ratio a))+solve mat vec = fromList (nrows vec) (ncols vec) <$> solve' mat (toList vec)
+ src/Data/Matrix/SymmetryOperationsSymbols/Symbol.hs view
@@ -0,0 +1,69 @@+module Data.Matrix.SymmetryOperationsSymbols.Symbol (+    Symbol(..)+  ) where++import Control.Monad++data Symbol+   = Id  --  '1'+   | T   --   t+   | Inv -- '-1'+   | M   --  'm'+   | A   --   a+   | B   --   b+   | C   --   c+   | D   --   d+   | G   --   g+   | N   --   n+   | R2  --  '2'+   | R3  --  '3'+   | R4  --  '4'+   | R6  --  '6'+   | RI3 -- '-3'+   | RI4 -- '-4'+   | RI6 -- '-6'+   deriving (Show,Eq)++instance Read Symbol where+  readsPrec _ = join . sequence readSymbols+    where+      readSymbols = [+        \n -> [ ( Id,st) | ("1",st) <- lex n ],+        \n -> [ (  T,st) | ("t",st) <- lex n ],+        \n -> [ (  M,st) | ("m",st) <- lex n ],+        \n -> [ (  A,st) | ("a",st) <- lex n ],+        \n -> [ (  B,st) | ("b",st) <- lex n ],+        \n -> [ (  C,st) | ("c",st) <- lex n ],+        \n -> [ (  D,st) | ("d",st) <- lex n ],+        \n -> [ (  G,st) | ("g",st) <- lex n ],+        \n -> [ (  N,st) | ("n",st) <- lex n ],+        \n -> [ ( R2,st) | ("2",st) <- lex n ],+        \n -> [ ( R3,st) | ("3",st) <- lex n ],+        \n -> [ ( R4,st) | ("4",st) <- lex n ],+        \n -> [ ( R6,st) | ("6",st) <- lex n ],+        \n -> [ (Inv,st) | ("-",nn) <- lex n, ("1",st) <- lex nn ],+        \n -> [ (RI3,st) | ("-",nn) <- lex n, ("3",st) <- lex nn ],+        \n -> [ (RI4,st) | ("-",nn) <- lex n, ("4",st) <- lex nn ],+        \n -> [ (RI6,st) | ("-",nn) <- lex n, ("6",st) <- lex nn ]+        ]+                                              +fromSymbol :: Symbol -> String+fromSymbol  Id =  "1"+fromSymbol   T =  "t"+fromSymbol Inv = "-1"+fromSymbol   M =  "m"+fromSymbol   A =  "a"+fromSymbol   B =  "b"+fromSymbol   C =  "c"+fromSymbol   D =  "d"+fromSymbol   G =  "g"+fromSymbol   N =  "n"+fromSymbol  R2 =  "2"+fromSymbol  R3 =  "3"+fromSymbol  R4 =  "4"+fromSymbol  R6 =  "6"+fromSymbol RI3 = "-3"+fromSymbol RI4 = "-4"+fromSymbol RI6 = "-6"++
+ src/Data/Matrix/SymmetryOperationsSymbols/SymmetryOperation.hs view
@@ -0,0 +1,76 @@+module Data.Matrix.SymmetryOperationsSymbols.SymmetryOperation (+    SymmetryOperation(..),+    NFold(..),+    Sense(..),+    ABC(..),+    DGN(..),+    showSymmetryOperation,+    )+    where++import Data.Ratio+import Data.Matrix+import Data.Matrix.AsXYZ+import Data.Matrix.SymmetryOperationsSymbols.Common++data ABC = A | B | C deriving (Show,Eq)+data DGN = D | G | N deriving (Show,Eq)+data NFold = ThreeFold | FourFold | SixFold deriving (Show,Eq)+data Sense = Positive | Negative deriving (Show,Eq)++data SymmetryOperation a+  = Identity+  | Translation     { vector :: (Ratio a,Ratio a,Ratio a) }+  | Reflection      { plane :: Matrix (Ratio a) }+  | GlideABC        { abc :: ABC, plane :: Matrix (Ratio a) }+  | GlideDGN        { dgn :: DGN, plane :: Matrix (Ratio a), glide :: (Ratio a,Ratio a,Ratio a) }+  | TwoFoldRotation { axis :: Matrix (Ratio a) }+  | TwoFoldScrew    { axis :: Matrix (Ratio a), vector :: (Ratio a,Ratio a,Ratio a) }+  | NFoldRotation   { nFold :: NFold, sense :: Sense, axis :: Matrix (Ratio a) }+  | NFoldScrew      { nFold :: NFold, sense :: Sense, axis :: Matrix (Ratio a), vector :: (Ratio a,Ratio a,Ratio a) }+  | Inversion       { centre :: (Ratio a,Ratio a,Ratio a) }+  | RotInversion    { nFold :: NFold, sense :: Sense, axis :: Matrix (Ratio a), point :: (Ratio a,Ratio a,Ratio a) }+  deriving (Show,Eq)++showSymbol :: NFold -> String+showSymbol ThreeFold = "3"+showSymbol FourFold  = "4"+showSymbol SixFold   = "6"++showSense :: Sense -> String+showSense Positive = "+"+showSense Negative = "-"++showABC :: ABC -> String+showABC A = "a"+showABC B = "b"+showABC C = "c"++showDGN :: DGN -> String+showDGN D = "d"+showDGN G = "g"+showDGN N = "n"++showSymmetryOperation :: Integral a => SymmetryOperation a -> String+showSymmetryOperation Identity = " 1 "+showSymmetryOperation val@Translation {}+  = concat [" t ",tripletParen $ vector val," "]+showSymmetryOperation val@Reflection {}+  = concat [" m  ",prettyXYZ $ plane val]+showSymmetryOperation val@GlideABC {}+  = concat [" ",showABC $ abc val,"  ",prettyXYZ $ plane val]+showSymmetryOperation val@GlideDGN {}+  = concat [" ",showDGN $ dgn val," ",tripletParen $ glide val," ",prettyXYZ $ plane val]+showSymmetryOperation val@TwoFoldRotation {}+  = concat [" 2  ",prettyXYZ $ axis val]+showSymmetryOperation val@TwoFoldScrew {}+  = concat [" 2 ",tripletParen $ vector val," ",prettyXYZ $ axis val]+showSymmetryOperation val@NFoldRotation {}+  = concat [" ",showSymbol (nFold val),showSense (sense val)," ",prettyXYZ $ axis val]+showSymmetryOperation val@NFoldScrew {}+  = concat [" ",showSymbol (nFold val),showSense (sense val),tripletParen $ vector val," ",prettyXYZ $ axis val]+showSymmetryOperation val@Inversion {}+  = concat ["-1 ",triplet $ centre val]+showSymmetryOperation val@RotInversion {}+  = concat ["-",showSymbol (nFold val),showSense (sense val)," ",prettyXYZ $ axis val,"; ",triplet $ point val]+
+ src/Data/Matrix/SymmetryOperationsSymbols/UnitMatrixCase.hs view
@@ -0,0 +1,33 @@+{-|+Module      : UnitMatrixCase+Copyright   : (c) Jun Narumi, 2018+License     : BSD-3+Maintainer  : narumij@gmail.com+Stability   : experimental+Portability : ?++[References]++W. Fischer. and E. Koch. (2006), Derivation of symbols and coordinate triplets++listed in International Tables for Crystallography (2006). Vol. A, Chapter 11.2, pp. 812–816.++-}++module Data.Matrix.SymmetryOperationsSymbols.UnitMatrixCase (+  unitMatrixCase,+  -- unitMatrixCase2,+  ) where++import Data.Ratio (Ratio)    +import Data.Matrix+import Data.Matrix.SymmetryOperationsSymbols.Common+import Data.Matrix.SymmetryOperationsSymbols.SymmetryOperation++-- | Case (i) The matrix W is the unit matrix:+unitMatrixCase w+    | all (== 0) w' = return Identity+    | otherwise     = return $ Translation { vector = (a,b,c) }+    where+      w'@[a,b,c] = toList . transPart $ w+
+ symmetry-operations-symbols.cabal view
@@ -0,0 +1,88 @@+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.31.2.+--+-- see: https://github.com/sol/hpack+--+-- hash: 8170db758d9c19597a873ee575a9fbd3488934fea1490a2aa0bff05baeb67c03++name:           symmetry-operations-symbols+version:        0.0.1.0+description:    Please see the README on GitHub at <https://github.com/narumij/symmetry-operations-symbols#readme>+homepage:       https://github.com/narumij/symmetry-operations-symbols#readme+bug-reports:    https://github.com/narumij/symmetry-operations-symbols/issues+author:         Jun Narumi+maintainer:     narumij@gmail.com+copyright:      Jun Narumi+license:        BSD3+license-file:   LICENSE+build-type:     Simple+extra-source-files:+    README.md+    ChangeLog.md++source-repository head+  type: git+  location: https://github.com/narumij/symmetry-operations-symbols++library+  exposed-modules:+      Data.Matrix.SymmetryOperationsSymbols+      Data.Matrix.SymmetryOperationsSymbols.Calc+      Data.Matrix.SymmetryOperationsSymbols.Common+      Data.Matrix.SymmetryOperationsSymbols.GlideOrReflectionCase+      Data.Matrix.SymmetryOperationsSymbols.Parser+      Data.Matrix.SymmetryOperationsSymbols.RotationCase+      Data.Matrix.SymmetryOperationsSymbols.RotInversionCase+      Data.Matrix.SymmetryOperationsSymbols.Solve+      Data.Matrix.SymmetryOperationsSymbols.Symbol+      Data.Matrix.SymmetryOperationsSymbols.SymmetryOperation+      Data.Matrix.SymmetryOperationsSymbols.UnitMatrixCase+  other-modules:+      Paths_symmetry_operations_symbols+  hs-source-dirs:+      src+  build-depends:+      base >=4.7 && <5+    , matrix+    , matrix-as-xyz >=0.1 && <1+    , parsec+  default-language: Haskell2010++test-suite symmetry-operations-symbols-doctest+  type: exitcode-stdio-1.0+  main-is: test/doctests.hs+  other-modules:+      Paths_symmetry_operations_symbols+  ghc-options: -threaded -rtsopts -with-rtsopts=-N+  build-depends:+      base >=4.7 && <5+    , doctest+    , matrix+    , matrix-as-xyz >=0.1 && <1+    , parsec+    , symmetry-operations-symbols+  default-language: Haskell2010++test-suite symmetry-operations-symbols-test+  type: exitcode-stdio-1.0+  main-is: Spec.hs+  other-modules:+      ParseSpec+      SymbolSpec+      SymmetryOperationsSymbolsSpec+      TestDataHex+      TestDataOthers+      Paths_symmetry_operations_symbols+  hs-source-dirs:+      test+  ghc-options: -threaded -rtsopts -with-rtsopts=-N+  build-depends:+      QuickCheck+    , base >=4.7 && <5+    , hspec+    , matrix+    , matrix-as-xyz >=0.1 && <1+    , parsec+    , symmetry-operations-symbols+  default-language: Haskell2010
+ test/ParseSpec.hs view
@@ -0,0 +1,72 @@+module ParseSpec where++import Test.Hspec+import Control.Exception (evaluate)+import Text.ParserCombinators.Parsec+import Data.Matrix.SymmetryOperationsSymbols.Parser+import Data.Matrix.SymmetryOperationsSymbols.Symbol++parseSymmetryOperation' :: String -> Maybe (Symbol,String,String,String)+parseSymmetryOperation' st = case parse (symmetryElement return) st st of+  Right a -> Just a+  Left _ -> Nothing++spec :: Spec+spec = do+  +   describe "Data.Matrix.SymmetryOperationsSymbols.Parse.parseSymmetryOperation" $ do++     it "parse ' 1 ' is just something" $ do+       parseSymmetryOperation' " 1 " `shouldBe` Just (Id,"","","")++     it "parse ' -1 0,0,0' is just something" $ do+       parseSymmetryOperation' " -1 0,0,0" `shouldBe` Just (Inv,"","0,0,0","")++     it "parse ' -1 0,0,0; 0,0,0' is nothing" $ do+       parseSymmetryOperation' " -1 0,0,0; 0,0,0" `shouldBe` Nothing++     it "parse ' -3- 0,0,0; 0,0,0' is just something" $ do+       parseSymmetryOperation' " -3- 0,0,0; 0,0,0" `shouldBe` Just (RI3,"-","0,0,0","0,0,0")++     it "parse ' -3 0,0,0; 0,0,0' is nothing" $ do+       parseSymmetryOperation' " -2 0,0,0; 0,0,0" `shouldBe` Nothing++     it "parse ' -3 x,y,z; 0,0,0' is nothing" $ do+       parseSymmetryOperation' " -2 x,y,z; 0,0,0" `shouldBe` Nothing++     it "parse ' -3 0,0,0; x,y,z' is nothing" $ do+       parseSymmetryOperation' " -2 0,0,0; x,y,z" `shouldBe` Nothing++     it "parse ' 2 (0,0,0) x,y,z' is nothing" $ do+       parseSymmetryOperation' " 2 (0,0,0) x,y,z" `shouldBe` Just (R2,"","0,0,0","x,y,z")++     it "parse ' 3+ (0,0,0) x,y,z ' is nothing" $ do+       parseSymmetryOperation' " 3+ (0,0,0) x,y,z" `shouldBe` Just (R3,"+","0,0,0","x,y,z")++     it "parse ' 6- (0,0,0) x,y,z ' is nothing" $ do+       parseSymmetryOperation' " 6- (0,0,0) x,y,z " `shouldBe` Just (R6,"-","0,0,0","x,y,z")++     it "parse ' 6- (x,y,z) x,y,z ' is nothing" $ do+       parseSymmetryOperation' " 6- (x,y,z) x,y,z " `shouldBe` Nothing++    -- 理想的にははじきたいけれど、現段階では保留+     -- it "parse ' 6- (0,0,0) 0,0,0 ' is nothing" $ do+     --   parseSymmetryOperation " 6- (0,0,0) 0,0,0 " `shouldBe` Nothing++     it "parse ' g (0,0,0) x,y,z ' is nothing" $ do+       parseSymmetryOperation' " g (0,0,0) x,y,z " `shouldBe` Just (G,"","0,0,0","x,y,z")++     it "parse ' g ( 0, 0, 0 )  x, y, z ' is nothing" $ do+       parseSymmetryOperation' " g ( 0, 0, 0 )  x, y, z " `shouldBe` Just (G,"","0,0,0","x,y,z")++     it "parse ' m x,y,z ' is nothing" $ do+       parseSymmetryOperation' " m x,y,z " `shouldBe` Just (M,"","","x,y,z")++     it "parse ' a x,y,z ' is nothing" $ do+       parseSymmetryOperation' " a x,y,z " `shouldBe` Just (A,"","","x,y,z")++     it "parse ' m (0,0,0) x,y,z ' is nothing" $ do+       parseSymmetryOperation' " m (0,0,0) x,y,z " `shouldBe` Nothing++     it "parse ' a (0,0,0) x,y,z ' is nothing" $ do+       parseSymmetryOperation' " a (0,0,0) x,y,z " `shouldBe` Nothing
+ test/Spec.hs view
@@ -0,0 +1,1 @@+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
+ test/SymbolSpec.hs view
@@ -0,0 +1,6 @@+module SymbolSpec where++import Test.Hspec++spec :: Spec+spec = return ()
+ test/SymmetryOperationsSymbolsSpec.hs view
@@ -0,0 +1,50 @@+module SymmetryOperationsSymbolsSpec where++import Test.Hspec+import Text.ParserCombinators.Parsec++import Data.Matrix.SymmetryOperationsSymbols+import Data.Matrix.SymmetryOperationsSymbols.Parser+import Data.Matrix.SymmetryOperationsSymbols.Symbol++import Data.Matrix+import Data.Matrix.AsXYZ++import TestDataOthers+import TestDataHex++parseSymmetryOperation :: String -> Either String (Symbol,String,String,String)+parseSymmetryOperation st = case parse (symmetryElement return) st st of+  Right a -> Right a+  Left m -> Left "Parse Error."++toMatrix' st = case toMatrix st of+  Left _ -> Nothing+  Right a -> Just a++toMatrixHex' st = case toMatrixHex st of+  Left _ -> Nothing+  Right a -> Just a++spec :: Spec+spec = do+   describe "Data.Matrix.SymmetryOperationsSymbols.toMatrix" $ do+     mapM_ (toMatrixTest toMatrix') $ zip [0..] testDataOthers++   describe "Data.Matrix.SymmetryOperationsSymbols.toMatrixHex" $ do+     mapM_ (toMatrixTest toMatrixHex') $ zip [0..] testDataHex++   describe "Data.Matrix.SymmetryOperationsSymbols.fromMatrix" $ do+     mapM_ (fromMatrixTest) $ zip [0..] testDataOthers++   describe "Data.Matrix.SymmetryOperationsSymbols.fromMatrix" $ do+     mapM_ (fromMatrixTest) $ zip [0..] testDataHex++mat34 = submatrix 1 3 1 4++toMatrixTest f (n,(a,b)) = it (show n ++ " : '" ++ b ++ "' -> '" ++ a ++ "'") $ do+  -- (prettyXYZ <$> f b) `shouldBe` (Just . prettyXYZ . fromXYZ $ a)+  (mat34 <$> f b) `shouldBe` (Just . mat34 . fromXYZ $ a)++fromMatrixTest (n,(a,b)) = it (show n ++ " : '" ++ a ++ "' -> '" ++ b ++ "'") $ do+  (parseSymmetryOperation =<< (fromMatrix' . fromXYZ $ a)) `shouldBe` (parseSymmetryOperation b)
+ test/TestDataHex.hs view
@@ -0,0 +1,126 @@+module TestDataHex (+  testDataHex,+  ) where++testDataHex = map snd testDataHex'++-- TODO: データに間違いがないか、手作業で確認する++testDataHex' = [+  ((146,1),("x,y,z"," 1  ")),+  ((146,1),("-y,x-y,z"," 3+ 0,0,z")),+  ((146,1),("y-x,-x,z"," 3- 0,0,z")),+  ((146,1),("x+2/3,y+1/3,z+1/3"," t (2/3,1/3,1/3) ")),+  ((146,1),("-y+2/3,x-y+1/3,z+1/3"," 3+(0,0,1/3) 1/3,1/3,z")),+  ((146,1),("y-x+2/3,-x+1/3,z+1/3"," 3-(0,0,1/3) 1/3,0,z")),+  ((146,1),("x+1/3,y+2/3,z+2/3"," t (1/3,2/3,2/3) ")),+  ((146,1),("-y+1/3,x-y+2/3,z+2/3"," 3+(0,0,2/3) 0,1/3,z")),+  ((146,1),("y-x+1/3,-x+2/3,z+2/3"," 3-(0,0,2/3) 1/3,1/3,z")),+  ((148,1),("-x,-y,-z","-1  0,0,0")),+  ((148,1),("y,y-x,-z","-3+ 0,0,z; 0,0,0")),+  ((148,1),("x-y,x,-z","-3- 0,0,z; 0,0,0")),+  ((148,1),("-x+2/3,-y+1/3,-z+1/3","-1  1/3,1/6,1/6")),+  ((148,1),("y+2/3,y-x+1/3,-z+1/3","-3+ 1/3,-1/3,z; 1/3,-1/3,1/6")),+  ((148,1),("x-y+2/3,x+1/3,-z+1/3","-3- 1/3,2/3,z; 1/3,2/3,1/6")),+  ((148,1),("-x+1/3,-y+2/3,-z+2/3","-1  1/6,1/3,1/3")),+  ((148,1),("y+1/3,y-x+2/3,-z+2/3","-3+ 2/3,1/3,z; 2/3,1/3,1/3")),+  ((148,1),("x-y+1/3,x+2/3,-z+2/3","-3- -1/3,1/3,z; -1/3,1/3,1/3")),+  ((155,1),("y,x,-z"," 2  x,x,0")),+  ((155,1),("x-y,-y,-z"," 2  x,0,0")),+  ((155,1),("-x,y-x,-z"," 2  0,y,0")),+  ((155,1),("y+2/3,x+1/3,-z+1/3"," 2 (1/2,1/2,0) x,x-1/6,1/6")),+  ((155,1),("x-y+2/3,-y+1/3,-z+1/3"," 2 (1/2,0,0) x,1/6,1/6")),+  ((155,1),("-x+2/3,y-x+1/3,-z+1/3"," 2  1/3,y,1/6")),+  ((155,1),("y+1/3,x+2/3,-z+2/3"," 2 (1/2,1/2,0) x,x+1/6,1/3")),+  ((155,1),("x-y+1/3,-y+2/3,-z+2/3"," 2  x,1/3,1/3")),+  ((155,1),("-x+1/3,y-x+2/3,-z+2/3"," 2 (0,1/2,0) 1/6,y,1/3")),+  ((160,1),("-y,-x,z"," m  x,-x,z")),+  ((160,1),("y-x,y,z"," m  x,2x,z")),+  ((160,1),("x,x-y,z"," m  2x,x,z")),+  ((160,1),("-y+2/3,-x+1/3,z+1/3"," g (1/6,-1/6,1/3) x+1/2,-x,z")),+  ((160,1),("y-x+2/3,y+1/3,z+1/3"," g (1/6,1/3,1/3) x+1/4,2x,z")),+  ((160,1),("x+2/3,x-y+1/3,z+1/3"," g (2/3,1/3,1/3) 2x,x,z")),+  ((160,1),("-y+1/3,-x+2/3,z+2/3"," g (-1/6,1/6,2/3) x+1/2,-x,z")),+  ((160,1),("y-x+1/3,y+2/3,z+2/3"," g (1/3,2/3,2/3) x,2x,z")),+  ((160,1),("x+1/3,x-y+2/3,z+2/3"," g (1/3,1/6,2/3) 2x-1/2,x,z")),+  ((161,1),("-y,-x,z+1/2"," c  x,-x,z")),+  ((161,1),("y-x,y,z+1/2"," c  x,2x,z")),+  ((161,1),("x,x-y,z+1/2"," c  2x,x,z")),+  ((161,1),("-y+2/3,-x+1/3,z+5/6"," g (1/6,-1/6,5/6) x+1/2,-x,z")),+  ((161,1),("y-x+2/3,y+1/3,z+5/6"," g (1/6,1/3,5/6) x+1/4,2x,z")),+  ((161,1),("x+2/3,x-y+1/3,z+5/6"," g (2/3,1/3,5/6) 2x,x,z")),+  ((161,1),("-y+1/3,-x+2/3,z+1/6"," g (-1/6,1/6,1/6) x+1/2,-x,z")),+  ((161,1),("y-x+1/3,y+2/3,z+1/6"," g (1/3,2/3,1/6) x,2x,z")),+  ((161,1),("x+1/3,x-y+2/3,z+1/6"," g (1/3,1/6,1/6) 2x-1/2,x,z")),+  ((167,1),("y,x,-z+1/2"," 2  x,x,1/4")),+  ((167,1),("x-y,-y,-z+1/2"," 2  x,0,1/4")),+  ((167,1),("-x,y-x,-z+1/2"," 2  0,y,1/4")),+  ((167,1),("y+2/3,x+1/3,-z+5/6"," 2 (1/2,1/2,0) x,x-1/6,5/12")),+  ((167,1),("x-y+2/3,-y+1/3,-z+5/6"," 2 (1/2,0,0) x,1/6,5/12")),+  ((167,1),("-x+2/3,y-x+1/3,-z+5/6"," 2  1/3,y,5/12")),+  ((167,1),("y+1/3,x+2/3,-z+1/6"," 2 (1/2,1/2,0) x,x+1/6,1/12")),+  ((167,1),("x-y+1/3,-y+2/3,-z+1/6"," 2  x,1/3,1/12")),+  ((167,1),("-x+1/3,y-x+2/3,-z+1/6"," 2 (0,1/2,0) 1/6,y,1/12")),+  ((146,2),("z,x,y"," 3+ x,x,x")),+  ((146,2),("y,z,x"," 3- x,x,x")),+  ((148,2),("-z,-x,-y","-3+ x,x,x; 0,0,0")),+  ((148,2),("-y,-z,-x","-3- x,x,x; 0,0,0")),+  ((155,2),("-z,-y,-x"," 2  -x,0,x")),+  ((155,2),("-y,-x,-z"," 2  x,-x,0")),+  ((155,2),("-x,-z,-y"," 2  0,y,-y")),+  ((160,2),("z,y,x"," m  x,y,x")),+  ((160,2),("y,x,z"," m  x,x,z")),+  ((160,2),("x,z,y"," m  x,y,y")),+  ((161,2),("z+1/2,y+1/2,x+1/2"," n (1/2,1/2,1/2) x,y,x")),+  ((161,2),("y+1/2,x+1/2,z+1/2"," n (1/2,1/2,1/2) x,x,z")),+  ((161,2),("x+1/2,z+1/2,y+1/2"," n (1/2,1/2,1/2) x,y,y")),+  ((167,2),("-z+1/2,-y+1/2,-x+1/2"," 2  -x+1/2,1/4,x")),+  ((167,2),("-y+1/2,-x+1/2,-z+1/2"," 2  x,-x+1/2,1/4")),+  ((167,2),("-x+1/2,-z+1/2,-y+1/2"," 2  1/4,y+1/2,-y")),+  ((168,1),("-x,-y,z"," 2  0,0,z")),+  ((168,1),("y,y-x,z"," 6- 0,0,z")),+  ((168,1),("x-y,x,z"," 6+ 0,0,z")),+  ((169,1),("-y,x-y,z+1/3"," 3+(0,0,1/3) 0,0,z")),+  ((169,1),("y-x,-x,z+2/3"," 3-(0,0,2/3) 0,0,z")),+  ((169,1),("-x,-y,z+1/2"," 2 (0,0,1/2) 0,0,z")),+  ((169,1),("y,y-x,z+5/6"," 6-(0,0,5/6) 0,0,z")),+  ((169,1),("x-y,x,z+1/6"," 6+(0,0,1/6) 0,0,z")),+  ((170,1),("-y,x-y,z+2/3"," 3+(0,0,2/3) 0,0,z")),+  ((170,1),("y-x,-x,z+1/3"," 3-(0,0,1/3) 0,0,z")),+  ((170,1),("y,y-x,z+1/6"," 6-(0,0,1/6) 0,0,z")),+  ((170,1),("x-y,x,z+5/6"," 6+(0,0,5/6) 0,0,z")),+  ((171,1),("y,y-x,z+2/3"," 6-(0,0,2/3) 0,0,z")),+  ((171,1),("x-y,x,z+1/3"," 6+(0,0,1/3) 0,0,z")),+  ((172,1),("y,y-x,z+1/3"," 6-(0,0,1/3) 0,0,z")),+  ((172,1),("x-y,x,z+2/3"," 6+(0,0,2/3) 0,0,z")),+  ((173,1),("y,y-x,z+1/2"," 6-(0,0,1/2) 0,0,z")),+  ((173,1),("x-y,x,z+1/2"," 6+(0,0,1/2) 0,0,z")),+  ((174,1),("x,y,-z"," m  x,y,0")),+  ((174,1),("-y,x-y,-z","-6- 0,0,z; 0,0,0")),+  ((174,1),("y-x,-x,-z","-6+ 0,0,z; 0,0,0")),+  ((176,1),("x,y,-z+1/2"," m  x,y,1/4")),+  ((176,1),("-y,x-y,-z+1/2","-6- 0,0,z; 0,0,1/4")),+  ((176,1),("y-x,-x,-z+1/2","-6+ 0,0,z; 0,0,1/4")),+  ((177,1),("y-x,y,-z"," 2  x,2x,0")),+  ((177,1),("x,x-y,-z"," 2  2x,x,0")),+  ((178,1),("y,x,-z+1/3"," 2  x,x,1/6")),+  ((178,1),("-x,y-x,-z+2/3"," 2  0,y,1/3")),+  ((178,1),("-y,-x,-z+5/6"," 2  x,-x,5/12")),+  ((178,1),("y-x,y,-z+1/2"," 2  x,2x,1/4")),+  ((178,1),("x,x-y,-z+1/6"," 2  2x,x,1/12")),+  ((179,1),("y,x,-z+2/3"," 2  x,x,1/3")),+  ((179,1),("-x,y-x,-z+1/3"," 2  0,y,1/6")),+  ((179,1),("-y,-x,-z+1/6"," 2  x,-x,1/12")),+  ((179,1),("x,x-y,-z+5/6"," 2  2x,x,5/12")),+  ((180,1),("-y,-x,-z+2/3"," 2  x,-x,1/3")),+  ((180,1),("x,x-y,-z+1/3"," 2  2x,x,1/6")),+  ((181,1),("-y,-x,-z+1/3"," 2  x,-x,1/6")),+  ((181,1),("x,x-y,-z+2/3"," 2  2x,x,1/3")),+  ((182,1),("-y,-x,-z+1/2"," 2  x,-x,1/4")),+  ((182,1),("x,x-y,-z+1/2"," 2  2x,x,1/4")),+  ((183,1),("x-y,-y,z"," m  x,0,z")),+  ((183,1),("-x,y-x,z"," m  0,y,z")),+  ((184,1),("y,x,z+1/2"," c  x,x,z")),+  ((184,1),("x-y,-y,z+1/2"," c  x,0,z")),+  ((184,1),("-x,y-x,z+1/2"," c  0,y,z"))+  ]
+ test/TestDataOthers.hs view
@@ -0,0 +1,818 @@+module TestDataOthers (+  testDataOthers,+  ) where++testDataOthers = map snd testDataOthers'++-- TODO: データに間違いがないか、手作業で確認する++testDataOthers' = [+  ((1,1),("x,y,z"," 1  ")),+  ((2,1),("-x,-y,-z","-1  0,0,0")),+  ((3,1),("-x,y,-z"," 2  0,y,0")),+  ((3,2),("-x,-y,z"," 2  0,0,z")),+  ((4,1),("-x,y+1/2,-z"," 2 (0,1/2,0) 0,y,0")),+  ((4,2),("-x,-y,z+1/2"," 2 (0,0,1/2) 0,0,z")),+  ((5,1),("x+1/2,y+1/2,z"," t (1/2,1/2,0) ")),+  ((5,1),("-x+1/2,y+1/2,-z"," 2 (0,1/2,0) 1/4,y,0")),+  ((5,2),("x,y+1/2,z+1/2"," t (0,1/2,1/2) ")),+  ((5,2),("-x,y+1/2,-z+1/2"," 2 (0,1/2,0) 0,y,1/4")),+  ((5,3),("x+1/2,y+1/2,z+1/2"," t (1/2,1/2,1/2) ")),+  ((5,3),("-x+1/2,y+1/2,-z+1/2"," 2 (0,1/2,0) 1/4,y,1/4")),+  ((5,4),("-x,-y+1/2,z+1/2"," 2 (0,0,1/2) 0,1/4,z")),+  ((5,5),("x+1/2,y,z+1/2"," t (1/2,0,1/2) ")),+  ((5,5),("-x+1/2,-y,z+1/2"," 2 (0,0,1/2) 1/4,0,z")),+  ((5,6),("-x+1/2,-y+1/2,z+1/2"," 2 (0,0,1/2) 1/4,1/4,z")),+  ((6,1),("x,-y,z"," m  x,0,z")),+  ((6,2),("x,y,-z"," m  x,y,0")),+  ((7,1),("x,-y,z+1/2"," c  x,0,z")),+  ((7,2),("x+1/2,-y,z+1/2"," n (1/2,0,1/2) x,0,z")),+  ((7,3),("x+1/2,-y,z"," a  x,0,z")),+  ((7,4),("x+1/2,y,-z"," a  x,y,0")),+  ((7,5),("x+1/2,y+1/2,-z"," n (1/2,1/2,0) x,y,0")),+  ((7,6),("x,y+1/2,-z"," b  x,y,0")),+  ((8,1),("x+1/2,-y+1/2,z"," a  x,1/4,z")),+  ((8,2),("x,-y+1/2,z+1/2"," c  x,1/4,z")),+  ((8,3),("x+1/2,-y+1/2,z+1/2"," n (1/2,0,1/2) x,1/4,z")),+  ((8,4),("x,y+1/2,-z+1/2"," b  x,y,1/4")),+  ((8,5),("x+1/2,y,-z+1/2"," a  x,y,1/4")),+  ((8,6),("x+1/2,y+1/2,-z+1/2"," n (1/2,1/2,0) x,y,1/4")),+  ((11,1),("x,-y+1/2,z"," m  x,1/4,z")),+  ((11,2),("x,y,-z+1/2"," m  x,y,1/4")),+  ((12,1),("-x+1/2,-y+1/2,-z","-1  1/4,1/4,0")),+  ((12,2),("-x,-y+1/2,-z+1/2","-1  0,1/4,1/4")),+  ((12,3),("-x+1/2,-y+1/2,-z+1/2","-1  1/4,1/4,1/4")),+  ((12,5),("-x+1/2,-y,-z+1/2","-1  1/4,0,1/4")),+  ((13,1),("-x,y,-z+1/2"," 2  0,y,1/4")),+  ((13,2),("-x+1/2,y,-z+1/2"," 2  1/4,y,1/4")),+  ((13,3),("-x+1/2,y,-z"," 2  1/4,y,0")),+  ((13,4),("-x+1/2,-y,z"," 2  1/4,0,z")),+  ((13,5),("-x+1/2,-y+1/2,z"," 2  1/4,1/4,z")),+  ((13,6),("-x,-y+1/2,z"," 2  0,1/4,z")),+  ((16,1),("x,-y,-z"," 2  x,0,0")),+  ((18,1),("x+1/2,-y+1/2,-z"," 2 (1/2,0,0) x,1/4,0")),+  ((22,1),("x,-y+1/2,-z+1/2"," 2  x,1/4,1/4")),+  ((22,1),("x+1/2,-y,-z+1/2"," 2 (1/2,0,0) x,0,1/4")),+  ((23,1),("x+1/2,-y+1/2,-z+1/2"," 2 (1/2,0,0) x,1/4,1/4")),+  ((24,1),("x,-y,-z+1/2"," 2  x,0,1/4")),+  ((25,1),("-x,y,z"," m  0,y,z")),+  ((27,1),("-x,y,z+1/2"," c  0,y,z")),+  ((28,1),("-x+1/2,y,z"," m  1/4,y,z")),+  ((29,1),("-x+1/2,y,z+1/2"," c  1/4,y,z")),+  ((30,1),("-x,y+1/2,z+1/2"," n (0,1/2,1/2) 0,y,z")),+  ((32,1),("-x+1/2,y+1/2,z"," b  1/4,y,z")),+  ((33,1),("-x+1/2,y+1/2,z+1/2"," n (0,1/2,1/2) 1/4,y,z")),+  ((39,1),("-x,y+1/2,z"," b  0,y,z")),+  ((43,1),("x+1/4,-y+1/4,z+1/4"," d (1/4,0,1/4) x,1/8,z")),+  ((43,1),("-x+1/4,y+1/4,z+1/4"," d (0,1/4,1/4) 1/8,y,z")),+  ((43,1),("x+1/4,-y+3/4,z+3/4"," d (1/4,0,3/4) x,3/8,z")),+  ((43,1),("-x+1/4,y+3/4,z+3/4"," d (0,3/4,3/4) 1/8,y,z")),+  ((43,1),("x+3/4,-y+1/4,z+3/4"," d (3/4,0,3/4) x,1/8,z")),+  ((43,1),("-x+3/4,y+1/4,z+3/4"," d (0,1/4,3/4) 3/8,y,z")),+  ((43,1),("x+3/4,-y+3/4,z+1/4"," d (3/4,0,1/4) x,3/8,z")),+  ((43,1),("-x+3/4,y+3/4,z+1/4"," d (0,3/4,1/4) 3/8,y,z")),+  ((51,1),("x+1/2,-y,-z"," 2 (1/2,0,0) x,0,0")),+  ((57,1),("x,-y+1/2,-z"," 2  x,1/4,0")),+  ((70,1),("-x+1/4,-y+1/4,-z+1/4","-1  1/8,1/8,1/8")),+  ((70,1),("x+1/4,y+1/4,-z+1/4"," d (1/4,1/4,0) x,y,1/8")),+  ((70,1),("-x+1/4,-y+3/4,-z+3/4","-1  1/8,3/8,3/8")),+  ((70,1),("x+1/4,y+3/4,-z+3/4"," d (1/4,3/4,0) x,y,3/8")),+  ((70,1),("-x+3/4,-y+1/4,-z+3/4","-1  3/8,1/8,3/8")),+  ((70,1),("x+3/4,y+1/4,-z+3/4"," d (3/4,1/4,0) x,y,3/8")),+  ((70,1),("-x+3/4,-y+3/4,-z+1/4","-1  3/8,3/8,1/8")),+  ((70,1),("x+3/4,y+3/4,-z+1/4"," d (3/4,3/4,0) x,y,1/8")),+  ((70,2),("-x+3/4,-y+3/4,z"," 2  3/8,3/8,z")),+  ((70,2),("-x+3/4,y,-z+3/4"," 2  3/8,y,3/8")),+  ((70,2),("x,-y+3/4,-z+3/4"," 2  x,3/8,3/8")),+  ((70,2),("x+1/4,y+1/4,-z"," d (1/4,1/4,0) x,y,0")),+  ((70,2),("x+1/4,-y,z+1/4"," d (1/4,0,1/4) x,0,z")),+  ((70,2),("-x,y+1/4,z+1/4"," d (0,1/4,1/4) 0,y,z")),+  ((70,2),("-x+3/4,-y+1/4,z+1/2"," 2 (0,0,1/2) 3/8,1/8,z")),+  ((70,2),("-x+3/4,y+1/2,-z+1/4"," 2 (0,1/2,0) 3/8,y,1/8")),+  ((70,2),("x,-y+1/4,-z+1/4"," 2  x,1/8,1/8")),+  ((70,2),("x+1/4,y+3/4,-z+1/2"," d (1/4,3/4,0) x,y,1/4")),+  ((70,2),("x+1/4,-y+1/2,z+3/4"," d (1/4,0,3/4) x,1/4,z")),+  ((70,2),("-x,y+3/4,z+3/4"," d (0,3/4,3/4) 0,y,z")),+  ((70,2),("-x+1/4,-y+3/4,z+1/2"," 2 (0,0,1/2) 1/8,3/8,z")),+  ((70,2),("-x+1/4,y,-z+1/4"," 2  1/8,y,1/8")),+  ((70,2),("x+1/2,-y+3/4,-z+1/4"," 2 (1/2,0,0) x,3/8,1/8")),+  ((70,2),("x+3/4,y+1/4,-z+1/2"," d (3/4,1/4,0) x,y,1/4")),+  ((70,2),("x+3/4,-y,z+3/4"," d (3/4,0,3/4) x,0,z")),+  ((70,2),("-x+1/2,y+1/4,z+3/4"," d (0,1/4,3/4) 1/4,y,z")),+  ((70,2),("-x+1/4,-y+1/4,z"," 2  1/8,1/8,z")),+  ((70,2),("-x+1/4,y+1/2,-z+3/4"," 2 (0,1/2,0) 1/8,y,3/8")),+  ((70,2),("x+1/2,-y+1/4,-z+3/4"," 2 (1/2,0,0) x,1/8,3/8")),+  ((70,2),("x+3/4,y+3/4,-z"," d (3/4,3/4,0) x,y,0")),+  ((70,2),("x+3/4,-y+1/2,z+1/4"," d (3/4,0,1/4) x,1/4,z")),+  ((70,2),("-x+1/2,y+3/4,z+1/4"," d (0,3/4,1/4) 1/4,y,z")),+  ((75,1),("-y,x,z"," 4+ 0,0,z")),+  ((75,1),("y,-x,z"," 4- 0,0,z")),+  ((76,1),("-y,x,z+1/4"," 4+(0,0,1/4) 0,0,z")),+  ((76,1),("y,-x,z+3/4"," 4-(0,0,3/4) 0,0,z")),+  ((77,1),("-y,x,z+1/2"," 4+(0,0,1/2) 0,0,z")),+  ((77,1),("y,-x,z+1/2"," 4-(0,0,1/2) 0,0,z")),+  ((78,1),("-y,x,z+3/4"," 4+(0,0,3/4) 0,0,z")),+  ((78,1),("y,-x,z+1/4"," 4-(0,0,1/4) 0,0,z")),+  ((79,1),("-y+1/2,x+1/2,z+1/2"," 4+(0,0,1/2) 0,1/2,z")),+  ((79,1),("y+1/2,-x+1/2,z+1/2"," 4-(0,0,1/2) 1/2,0,z")),+  ((80,1),("-y,x+1/2,z+1/4"," 4+(0,0,1/4) -1/4,1/4,z")),+  ((80,1),("y+1/2,-x,z+3/4"," 4-(0,0,3/4) 1/4,-1/4,z")),+  ((80,1),("-y+1/2,x,z+3/4"," 4+(0,0,3/4) 1/4,1/4,z")),+  ((80,1),("y,-x+1/2,z+1/4"," 4-(0,0,1/4) 1/4,1/4,z")),+  ((81,1),("y,-x,-z","-4+ 0,0,z; 0,0,0")),+  ((81,1),("-y,x,-z","-4- 0,0,z; 0,0,0")),+  ((82,1),("y+1/2,-x+1/2,-z+1/2","-4+ 1/2,0,z; 1/2,0,1/4")),+  ((82,1),("-y+1/2,x+1/2,-z+1/2","-4- 0,1/2,z; 0,1/2,1/4")),+  ((84,1),("y,-x,-z+1/2","-4+ 0,0,z; 0,0,1/4")),+  ((84,1),("-y,x,-z+1/2","-4- 0,0,z; 0,0,1/4")),+  ((85,1),("-y+1/2,x+1/2,z"," 4+ 0,1/2,z")),+  ((85,1),("y+1/2,-x+1/2,z"," 4- 1/2,0,z")),+  ((85,2),("-y+1/2,x,z"," 4+ 1/4,1/4,z")),+  ((85,2),("y,-x+1/2,z"," 4- 1/4,1/4,z")),+  ((85,2),("y+1/2,-x,-z","-4+ 1/4,-1/4,z; 1/4,-1/4,0")),+  ((85,2),("-y,x+1/2,-z","-4- -1/4,1/4,z; -1/4,1/4,0")),+  ((86,2),("-y,x+1/2,z+1/2"," 4+(0,0,1/2) -1/4,1/4,z")),+  ((86,2),("y+1/2,-x,z+1/2"," 4-(0,0,1/2) 1/4,-1/4,z")),+  ((86,2),("y,-x+1/2,-z+1/2","-4+ 1/4,1/4,z; 1/4,1/4,1/4")),+  ((86,2),("-y+1/2,x,-z+1/2","-4- 1/4,1/4,z; 1/4,1/4,1/4")),+  ((88,1),("-x,-y+1/2,-z+1/4","-1  0,1/4,1/8")),+  ((88,1),("x+1/2,y,-z+3/4"," a  x,y,3/8")),+  ((88,1),("-x+1/2,-y,-z+3/4","-1  1/4,0,3/8")),+  ((88,1),("x,y+1/2,-z+1/4"," b  x,y,1/8")),+  ((88,2),("-y+3/4,x+1/4,z+1/4"," 4+(0,0,1/4) 1/4,1/2,z")),+  ((88,2),("y+3/4,-x+3/4,z+3/4"," 4-(0,0,3/4) 3/4,0,z")),+  ((88,2),("y+1/4,-x+3/4,-z+3/4","-4+ 1/2,1/4,z; 1/2,1/4,3/8")),+  ((88,2),("-y+1/4,x+1/4,-z+1/4","-4- 0,1/4,z; 0,1/4,1/8")),+  ((88,2),("-y+1/4,x+3/4,z+3/4"," 4+(0,0,3/4) -1/4,1/2,z")),+  ((88,2),("y+1/4,-x+1/4,z+1/4"," 4-(0,0,1/4) 1/4,0,z")),+  ((88,2),("y+3/4,-x+1/4,-z+1/4","-4+ 1/2,-1/4,z; 1/2,-1/4,1/8")),+  ((88,2),("-y+3/4,x+3/4,-z+3/4","-4- 0,3/4,z; 0,3/4,3/8")),+  ((89,1),("y,x,-z"," 2  x,x,0")),+  ((89,1),("-y,-x,-z"," 2  x,-x,0")),+  ((91,1),("y,x,-z+3/4"," 2  x,x,3/8")),+  ((91,1),("-y,-x,-z+1/4"," 2  x,-x,1/8")),+  ((92,1),("-y+1/2,x+1/2,z+1/4"," 4+(0,0,1/4) 0,1/2,z")),+  ((92,1),("y+1/2,-x+1/2,z+3/4"," 4-(0,0,3/4) 1/2,0,z")),+  ((92,1),("-x+1/2,y+1/2,-z+1/4"," 2 (0,1/2,0) 1/4,y,1/8")),+  ((92,1),("x+1/2,-y+1/2,-z+3/4"," 2 (1/2,0,0) x,1/4,3/8")),+  ((92,1),("-y,-x,-z+1/2"," 2  x,-x,1/4")),+  ((93,1),("y,x,-z+1/2"," 2  x,x,1/4")),+  ((95,1),("y,x,-z+1/4"," 2  x,x,1/8")),+  ((95,1),("-y,-x,-z+3/4"," 2  x,-x,3/8")),+  ((96,1),("-y+1/2,x+1/2,z+3/4"," 4+(0,0,3/4) 0,1/2,z")),+  ((96,1),("y+1/2,-x+1/2,z+1/4"," 4-(0,0,1/4) 1/2,0,z")),+  ((96,1),("-x+1/2,y+1/2,-z+3/4"," 2 (0,1/2,0) 1/4,y,3/8")),+  ((96,1),("x+1/2,-y+1/2,-z+1/4"," 2 (1/2,0,0) x,1/4,1/8")),+  ((97,1),("y+1/2,x+1/2,-z+1/2"," 2 (1/2,1/2,0) x,x,1/4")),+  ((97,1),("-y+1/2,-x+1/2,-z+1/2"," 2  x,-x+1/2,1/4")),+  ((98,1),("-x+1/2,y,-z+3/4"," 2  1/4,y,3/8")),+  ((98,1),("x,-y+1/2,-z+1/4"," 2  x,1/4,1/8")),+  ((98,1),("-x,y+1/2,-z+1/4"," 2 (0,1/2,0) 0,y,1/8")),+  ((98,1),("x+1/2,-y,-z+3/4"," 2 (1/2,0,0) x,0,3/8")),+  ((99,1),("-y,-x,z"," m  x,-x,z")),+  ((99,1),("y,x,z"," m  x,x,z")),+  ((100,1),("-y+1/2,-x+1/2,z"," m  x+1/2,-x,z")),+  ((100,1),("y+1/2,x+1/2,z"," g (1/2,1/2,0) x,x,z")),+  ((103,1),("-y,-x,z+1/2"," c  x,-x,z")),+  ((103,1),("y,x,z+1/2"," c  x,x,z")),+  ((104,1),("-y+1/2,-x+1/2,z+1/2"," c  x+1/2,-x,z")),+  ((104,1),("y+1/2,x+1/2,z+1/2"," n (1/2,1/2,1/2) x,x,z")),+  ((109,1),("-y,-x+1/2,z+1/4"," d (-1/4,1/4,1/4) x+1/4,-x,z")),+  ((109,1),("y+1/2,x,z+3/4"," d (1/4,1/4,3/4) x+1/4,x,z")),+  ((109,1),("-y+1/2,-x,z+3/4"," d (1/4,-1/4,3/4) x+1/4,-x,z")),+  ((109,1),("y,x+1/2,z+1/4"," d (1/4,1/4,1/4) x-1/4,x,z")),+  ((110,1),("-y,-x+1/2,z+3/4"," d (-1/4,1/4,3/4) x+1/4,-x,z")),+  ((110,1),("y+1/2,x,z+1/4"," d (1/4,1/4,1/4) x+1/4,x,z")),+  ((110,1),("-y+1/2,-x,z+1/4"," d (1/4,-1/4,1/4) x+1/4,-x,z")),+  ((110,1),("y,x+1/2,z+3/4"," d (1/4,1/4,3/4) x-1/4,x,z")),+  ((117,1),("y+1/2,x+1/2,-z"," 2 (1/2,1/2,0) x,x,0")),+  ((117,1),("-y+1/2,-x+1/2,-z"," 2  x,-x+1/2,0")),+  ((125,1),("y+1/2,-x+1/2,-z","-4+ 1/2,0,z; 1/2,0,0")),+  ((125,1),("-y+1/2,x+1/2,-z","-4- 0,1/2,z; 0,1/2,0")),+  ((133,2),("-y+1/2,x,z+1/2"," 4+(0,0,1/2) 1/4,1/4,z")),+  ((133,2),("y,-x+1/2,z+1/2"," 4-(0,0,1/2) 1/4,1/4,z")),+  ((133,2),("y+1/2,-x,-z+1/2","-4+ 1/4,-1/4,z; 1/4,-1/4,1/4")),+  ((133,2),("-y,x+1/2,-z+1/2","-4- -1/4,1/4,z; -1/4,1/4,1/4")),+  ((141,2),("-y+1/4,x+3/4,z+1/4"," 4+(0,0,1/4) -1/4,1/2,z")),+  ((141,2),("y+1/4,-x+1/4,z+3/4"," 4-(0,0,3/4) 1/4,0,z")),+  ((141,2),("y+1/4,x+3/4,-z+1/4"," 2 (1/2,1/2,0) x,x+1/4,1/8")),+  ((141,2),("-y+1/4,-x+1/4,-z+3/4"," 2  x,-x+1/4,3/8")),+  ((141,2),("y+3/4,-x+1/4,-z+3/4","-4+ 1/2,-1/4,z; 1/2,-1/4,3/8")),+  ((141,2),("-y+3/4,x+3/4,-z+1/4","-4- 0,3/4,z; 0,3/4,1/8")),+  ((141,2),("-y+3/4,-x+1/4,z+3/4"," d (1/4,-1/4,3/4) x+1/2,-x,z")),+  ((141,2),("y+3/4,x+3/4,z+1/4"," g (3/4,3/4,1/4) x,x,z")),+  ((141,2),("-y+3/4,x+1/4,z+3/4"," 4+(0,0,3/4) 1/4,1/2,z")),+  ((141,2),("y+3/4,-x+3/4,z+1/4"," 4-(0,0,1/4) 3/4,0,z")),+  ((141,2),("y+3/4,x+1/4,-z+3/4"," 2 (1/2,1/2,0) x,x-1/4,3/8")),+  ((141,2),("-y+3/4,-x+3/4,-z+1/4"," 2  x,-x+3/4,1/8")),+  ((141,2),("y+1/4,-x+3/4,-z+1/4","-4+ 1/2,1/4,z; 1/2,1/4,1/8")),+  ((141,2),("-y+1/4,x+1/4,-z+3/4","-4- 0,1/4,z; 0,1/4,3/8")),+  ((141,2),("-y+1/4,-x+3/4,z+1/4"," d (-1/4,1/4,1/4) x+1/2,-x,z")),+  ((141,2),("y+1/4,x+1/4,z+3/4"," d (1/4,1/4,3/4) x,x,z")),+  ((142,1),("-x+1/2,y,-z+1/4"," 2  1/4,y,1/8")),+  ((142,1),("x,-y+1/2,-z+3/4"," 2  x,1/4,3/8")),+  ((142,1),("-x,y+1/2,-z+3/4"," 2 (0,1/2,0) 0,y,3/8")),+  ((142,1),("x+1/2,-y,-z+1/4"," 2 (1/2,0,0) x,0,1/8")),+  ((142,2),("y+1/4,x+3/4,-z+3/4"," 2 (1/2,1/2,0) x,x+1/4,3/8")),+  ((142,2),("-y+1/4,-x+1/4,-z+1/4"," 2  x,-x+1/4,1/8")),+  ((142,2),("-y+3/4,-x+1/4,z+1/4"," d (1/4,-1/4,1/4) x+1/2,-x,z")),+  ((142,2),("y+3/4,x+3/4,z+3/4"," d (3/4,3/4,3/4) x,x,z")),+  ((142,2),("y+3/4,x+1/4,-z+1/4"," 2 (1/2,1/2,0) x,x-1/4,1/8")),+  ((142,2),("-y+3/4,-x+3/4,-z+3/4"," 2  x,-x+3/4,3/8")),+  ((142,2),("-y+1/4,-x+3/4,z+3/4"," d (-1/4,1/4,3/4) x+1/2,-x,z")),+  ((142,2),("y+1/4,x+1/4,z+1/4"," d (1/4,1/4,1/4) x,x,z")),+  ((146,1),("x+2/3,y+1/3,z+1/3"," t (2/3,1/3,1/3) ")),+  ((146,1),("x+1/3,y+2/3,z+2/3"," t (1/3,2/3,2/3) ")),+  ((146,2),("z,x,y"," 3+ x,x,x")),+  ((146,2),("y,z,x"," 3- x,x,x")),+  ((148,1),("-x+2/3,-y+1/3,-z+1/3","-1  1/3,1/6,1/6")),+  ((148,1),("-x+1/3,-y+2/3,-z+2/3","-1  1/6,1/3,1/3")),+  ((148,2),("-z,-x,-y","-3+ x,x,x; 0,0,0")),+  ((148,2),("-y,-z,-x","-3- x,x,x; 0,0,0")),+  ((151,1),("-y,-x,-z+2/3"," 2  x,-x,1/3")),+  ((153,1),("-y,-x,-z+1/3"," 2  x,-x,1/6")),+  ((155,1),("y+2/3,x+1/3,-z+1/3"," 2 (1/2,1/2,0) x,x-1/6,1/6")),+  ((155,1),("y+1/3,x+2/3,-z+2/3"," 2 (1/2,1/2,0) x,x+1/6,1/3")),+  ((155,2),("-z,-y,-x"," 2  -x,0,x")),+  ((155,2),("-x,-z,-y"," 2  0,y,-y")),+  ((160,1),("-y+2/3,-x+1/3,z+1/3"," g (1/6,-1/6,1/3) x+1/2,-x,z")),+  ((160,1),("-y+1/3,-x+2/3,z+2/3"," g (-1/6,1/6,2/3) x+1/2,-x,z")),+  ((160,2),("z,y,x"," m  x,y,x")),+  ((160,2),("x,z,y"," m  x,y,y")),+  ((161,1),("-y+2/3,-x+1/3,z+5/6"," g (1/6,-1/6,5/6) x+1/2,-x,z")),+  ((161,1),("-y+1/3,-x+2/3,z+1/6"," g (-1/6,1/6,1/6) x+1/2,-x,z")),+  ((161,2),("z+1/2,y+1/2,x+1/2"," n (1/2,1/2,1/2) x,y,x")),+  ((161,2),("x+1/2,z+1/2,y+1/2"," n (1/2,1/2,1/2) x,y,y")),+  ((167,1),("y+2/3,x+1/3,-z+5/6"," 2 (1/2,1/2,0) x,x-1/6,5/12")),+  ((167,1),("y+1/3,x+2/3,-z+1/6"," 2 (1/2,1/2,0) x,x+1/6,1/12")),+  ((167,2),("-z+1/2,-y+1/2,-x+1/2"," 2  -x+1/2,1/4,x")),+  ((167,2),("-x+1/2,-z+1/2,-y+1/2"," 2  1/4,y+1/2,-y")),+  ((178,1),("y,x,-z+1/3"," 2  x,x,1/6")),+  ((178,1),("-y,-x,-z+5/6"," 2  x,-x,5/12")),+  ((179,1),("y,x,-z+2/3"," 2  x,x,1/3")),+  ((179,1),("-y,-x,-z+1/6"," 2  x,-x,1/12")),+  ((195,1),("z,-x,-y"," 3+ -x,x,-x")),+  ((195,1),("-z,-x,y"," 3+ x,-x,-x")),+  ((195,1),("-z,x,-y"," 3+ -x,-x,x")),+  ((195,1),("-y,z,-x"," 3- x,-x,-x")),+  ((195,1),("y,-z,-x"," 3- -x,-x,x")),+  ((195,1),("-y,-z,x"," 3- -x,x,-x")),+  ((196,1),("z,x+1/2,y+1/2"," 3+(1/3,1/3,1/3) x-1/3,x-1/6,x")),+  ((196,1),("z,-x+1/2,-y+1/2"," 3+ -x,x+1/2,-x")),+  ((196,1),("-z,-x+1/2,y+1/2"," 3+(-1/3,1/3,1/3) x+1/3,-x-1/6,-x")),+  ((196,1),("-z,x+1/2,-y+1/2"," 3+ -x,-x+1/2,x")),+  ((196,1),("y,z+1/2,x+1/2"," 3-(1/3,1/3,1/3) x-1/6,x+1/6,x")),+  ((196,1),("-y,z+1/2,-x+1/2"," 3-(-1/3,1/3,1/3) x+1/6,-x+1/6,-x")),+  ((196,1),("y,-z+1/2,-x+1/2"," 3- -x+1/2,-x+1/2,x")),+  ((196,1),("-y,-z+1/2,x+1/2"," 3- -x-1/2,x+1/2,-x")),+  ((196,1),("z+1/2,x,y+1/2"," 3+(1/3,1/3,1/3) x+1/6,x-1/6,x")),+  ((196,1),("z+1/2,-x,-y+1/2"," 3+(1/3,-1/3,1/3) -x+1/6,x+1/6,-x")),+  ((196,1),("-z+1/2,-x,y+1/2"," 3+ x+1/2,-x-1/2,-x")),+  ((196,1),("-z+1/2,x,-y+1/2"," 3+ -x+1/2,-x+1/2,x")),+  ((196,1),("y+1/2,z,x+1/2"," 3-(1/3,1/3,1/3) x-1/6,x-1/3,x")),+  ((196,1),("-y+1/2,z,-x+1/2"," 3- x+1/2,-x,-x")),+  ((196,1),("y+1/2,-z,-x+1/2"," 3- -x+1/2,-x,x")),+  ((196,1),("-y+1/2,-z,x+1/2"," 3-(1/3,-1/3,1/3) -x-1/6,x+1/3,-x")),+  ((196,1),("z+1/2,x+1/2,y"," 3+(1/3,1/3,1/3) x+1/6,x+1/3,x")),+  ((196,1),("z+1/2,-x+1/2,-y"," 3+ -x+1/2,x,-x")),+  ((196,1),("-z+1/2,-x+1/2,y"," 3+ x+1/2,-x,-x")),+  ((196,1),("-z+1/2,x+1/2,-y"," 3+(1/3,1/3,-1/3) -x+1/6,-x+1/3,x")),+  ((196,1),("y+1/2,z+1/2,x"," 3-(1/3,1/3,1/3) x+1/3,x+1/6,x")),+  ((196,1),("-y+1/2,z+1/2,-x"," 3- x,-x+1/2,-x")),+  ((196,1),("y+1/2,-z+1/2,-x"," 3-(1/3,1/3,-1/3) -x+1/3,-x+1/6,x")),+  ((196,1),("-y+1/2,-z+1/2,x"," 3- -x,x+1/2,-x")),+  ((197,1),("z+1/2,x+1/2,y+1/2"," 3+(1/2,1/2,1/2) x,x,x")),+  ((197,1),("z+1/2,-x+1/2,-y+1/2"," 3+(1/6,-1/6,1/6) -x+1/3,x+1/3,-x")),+  ((197,1),("-z+1/2,-x+1/2,y+1/2"," 3+(-1/6,1/6,1/6) x+2/3,-x-1/3,-x")),+  ((197,1),("-z+1/2,x+1/2,-y+1/2"," 3+(1/6,1/6,-1/6) -x+1/3,-x+2/3,x")),+  ((197,1),("y+1/2,z+1/2,x+1/2"," 3-(1/2,1/2,1/2) x,x,x")),+  ((197,1),("-y+1/2,z+1/2,-x+1/2"," 3-(-1/6,1/6,1/6) x+1/3,-x+1/3,-x")),+  ((197,1),("y+1/2,-z+1/2,-x+1/2"," 3-(1/6,1/6,-1/6) -x+2/3,-x+1/3,x")),+  ((197,1),("-y+1/2,-z+1/2,x+1/2"," 3-(1/6,-1/6,1/6) -x-1/3,x+2/3,-x")),+  ((199,1),("z,-x,-y+1/2"," 3+(1/6,-1/6,1/6) -x-1/6,x+1/3,-x")),+  ((199,1),("-z,-x+1/2,y"," 3+(-1/6,1/6,1/6) x+1/6,-x+1/6,-x")),+  ((199,1),("-z+1/2,x,-y"," 3+(1/6,1/6,-1/6) -x+1/3,-x+1/6,x")),+  ((199,1),("-y+1/2,z,-x"," 3-(1/6,-1/6,-1/6) x+1/6,-x+1/6,-x")),+  ((199,1),("y,-z,-x+1/2"," 3-(-1/6,-1/6,1/6) -x+1/3,-x+1/6,x")),+  ((199,1),("-y,-z+1/2,x"," 3-(-1/6,1/6,-1/6) -x-1/6,x+1/3,-x")),+  ((200,1),("-z,x,y","-3+ -x,x,-x; 0,0,0")),+  ((200,1),("z,x,-y","-3+ x,-x,-x; 0,0,0")),+  ((200,1),("z,-x,y","-3+ -x,-x,x; 0,0,0")),+  ((200,1),("y,-z,x","-3- x,-x,-x; 0,0,0")),+  ((200,1),("-y,z,x","-3- -x,-x,x; 0,0,0")),+  ((200,1),("y,z,-x","-3- -x,x,-x; 0,0,0")),+  ((201,1),("-z+1/2,-x+1/2,-y+1/2","-3+ x,x,x; 1/4,1/4,1/4")),+  ((201,1),("-z+1/2,x+1/2,y+1/2","-3+ -x-1,x+1,-x; -1/4,1/4,3/4")),+  ((201,1),("z+1/2,x+1/2,-y+1/2","-3+ x,-x+1,-x; 1/4,3/4,-1/4")),+  ((201,1),("z+1/2,-x+1/2,y+1/2","-3+ -x+1,-x,x; 3/4,-1/4,1/4")),+  ((201,1),("-y+1/2,-z+1/2,-x+1/2","-3- x,x,x; 1/4,1/4,1/4")),+  ((201,1),("y+1/2,-z+1/2,x+1/2","-3- x+1,-x-1,-x; 1/4,-1/4,3/4")),+  ((201,1),("-y+1/2,z+1/2,x+1/2","-3- -x,-x+1,x; -1/4,3/4,1/4")),+  ((201,1),("y+1/2,z+1/2,-x+1/2","-3- -x+1,x,-x; 3/4,1/4,-1/4")),+  ((202,1),("-z,-x+1/2,-y+1/2","-3+ x,x+1/2,x; 0,1/2,0")),+  ((202,1),("-z,x+1/2,y+1/2","-3+ -x-1,x+1/2,-x; -1/2,0,1/2")),+  ((202,1),("z,x+1/2,-y+1/2","-3+ x,-x+1/2,-x; 0,1/2,0")),+  ((202,1),("z,-x+1/2,y+1/2","-3+ -x+1,-x+1/2,x; 1/2,0,1/2")),+  ((202,1),("-y,-z+1/2,-x+1/2","-3- x-1/2,x-1/2,x; 0,0,1/2")),+  ((202,1),("y,-z+1/2,x+1/2","-3- x+1/2,-x-1/2,-x; 0,0,1/2")),+  ((202,1),("-y,z+1/2,x+1/2","-3- -x-1/2,-x+1/2,x; -1/2,1/2,0")),+  ((202,1),("y,z+1/2,-x+1/2","-3- -x+1/2,x+1/2,-x; 1/2,1/2,0")),+  ((202,1),("-z+1/2,-x,-y+1/2","-3+ x-1/2,x-1/2,x; 0,0,1/2")),+  ((202,1),("-z+1/2,x,y+1/2","-3+ -x-1/2,x+1/2,-x; 0,0,1/2")),+  ((202,1),("z+1/2,x,-y+1/2","-3+ x+1/2,-x+1/2,-x; 1/2,1/2,0")),+  ((202,1),("z+1/2,-x,y+1/2","-3+ -x+1/2,-x-1/2,x; 1/2,-1/2,0")),+  ((202,1),("-y+1/2,-z,-x+1/2","-3- x+1/2,x,x; 1/2,0,0")),+  ((202,1),("y+1/2,-z,x+1/2","-3- x+1/2,-x-1,-x; 0,-1/2,1/2")),+  ((202,1),("-y+1/2,z,x+1/2","-3- -x+1/2,-x+1,x; 0,1/2,1/2")),+  ((202,1),("y+1/2,z,-x+1/2","-3- -x+1/2,x,-x; 1/2,0,0")),+  ((202,1),("-z+1/2,-x+1/2,-y","-3+ x+1/2,x,x; 1/2,0,0")),+  ((202,1),("-z+1/2,x+1/2,y","-3+ -x-1/2,x+1,-x; 0,1/2,1/2")),+  ((202,1),("z+1/2,x+1/2,-y","-3+ x-1/2,-x+1,-x; 0,1/2,-1/2")),+  ((202,1),("z+1/2,-x+1/2,y","-3+ -x+1/2,-x,x; 1/2,0,0")),+  ((202,1),("-y+1/2,-z+1/2,-x","-3- x,x+1/2,x; 0,1/2,0")),+  ((202,1),("y+1/2,-z+1/2,x","-3- x+1,-x-1/2,-x; 1/2,0,1/2")),+  ((202,1),("-y+1/2,z+1/2,x","-3- -x,-x+1/2,x; 0,1/2,0")),+  ((202,1),("y+1/2,z+1/2,-x","-3- -x+1,x-1/2,-x; 1/2,0,-1/2")),+  ((203,1),("-z+1/4,-x+1/4,-y+1/4","-3+ x,x,x; 1/8,1/8,1/8")),+  ((203,1),("-z+1/4,x+1/4,y+1/4","-3+ -x-1/2,x+1/2,-x; -1/8,1/8,3/8")),+  ((203,1),("z+1/4,x+1/4,-y+1/4","-3+ x,-x+1/2,-x; 1/8,3/8,-1/8")),+  ((203,1),("z+1/4,-x+1/4,y+1/4","-3+ -x+1/2,-x,x; 3/8,-1/8,1/8")),+  ((203,1),("-y+1/4,-z+1/4,-x+1/4","-3- x,x,x; 1/8,1/8,1/8")),+  ((203,1),("y+1/4,-z+1/4,x+1/4","-3- x+1/2,-x-1/2,-x; 1/8,-1/8,3/8")),+  ((203,1),("-y+1/4,z+1/4,x+1/4","-3- -x,-x+1/2,x; -1/8,3/8,1/8")),+  ((203,1),("y+1/4,z+1/4,-x+1/4","-3- -x+1/2,x,-x; 3/8,1/8,-1/8")),+  ((203,1),("-z+1/4,-x+3/4,-y+3/4","-3+ x,x+1/2,x; 1/8,5/8,1/8")),+  ((203,1),("-z+1/4,x+3/4,y+3/4","-3+ -x-3/2,x+1,-x; -5/8,1/8,7/8")),+  ((203,1),("z+1/4,x+3/4,-y+3/4","-3+ x,-x+1,-x; 1/8,7/8,-1/8")),+  ((203,1),("z+1/4,-x+3/4,y+3/4","-3+ -x+3/2,-x+1/2,x; 7/8,-1/8,5/8")),+  ((203,1),("-y+1/4,-z+3/4,-x+3/4","-3- x-1/2,x-1/2,x; 1/8,1/8,5/8")),+  ((203,1),("y+1/4,-z+3/4,x+3/4","-3- x+1,-x-1,-x; 1/8,-1/8,7/8")),+  ((203,1),("-y+1/4,z+3/4,x+3/4","-3- -x-1/2,-x+1,x; -5/8,7/8,1/8")),+  ((203,1),("y+1/4,z+3/4,-x+3/4","-3- -x+1,x+1/2,-x; 7/8,5/8,-1/8")),+  ((203,1),("-z+3/4,-x+1/4,-y+3/4","-3+ x-1/2,x-1/2,x; 1/8,1/8,5/8")),+  ((203,1),("-z+3/4,x+1/4,y+3/4","-3+ -x-1,x+1,-x; -1/8,1/8,7/8")),+  ((203,1),("z+3/4,x+1/4,-y+3/4","-3+ x+1/2,-x+1,-x; 5/8,7/8,-1/8")),+  ((203,1),("z+3/4,-x+1/4,y+3/4","-3+ -x+1,-x-1/2,x; 7/8,-5/8,1/8")),+  ((203,1),("-y+3/4,-z+1/4,-x+3/4","-3- x+1/2,x,x; 5/8,1/8,1/8")),+  ((203,1),("y+3/4,-z+1/4,x+3/4","-3- x+1,-x-3/2,-x; 1/8,-5/8,7/8")),+  ((203,1),("-y+3/4,z+1/4,x+3/4","-3- -x+1/2,-x+3/2,x; -1/8,7/8,5/8")),+  ((203,1),("y+3/4,z+1/4,-x+3/4","-3- -x+1,x,-x; 7/8,1/8,-1/8")),+  ((203,1),("-z+3/4,-x+3/4,-y+1/4","-3+ x+1/2,x,x; 5/8,1/8,1/8")),+  ((203,1),("-z+3/4,x+3/4,y+1/4","-3+ -x-1,x+3/2,-x; -1/8,5/8,7/8")),+  ((203,1),("z+3/4,x+3/4,-y+1/4","-3+ x-1/2,-x+3/2,-x; 1/8,7/8,-5/8")),+  ((203,1),("z+3/4,-x+3/4,y+1/4","-3+ -x+1,-x,x; 7/8,-1/8,1/8")),+  ((203,1),("-y+3/4,-z+3/4,-x+1/4","-3- x,x+1/2,x; 1/8,5/8,1/8")),+  ((203,1),("y+3/4,-z+3/4,x+1/4","-3- x+3/2,-x-1,-x; 5/8,-1/8,7/8")),+  ((203,1),("-y+3/4,z+3/4,x+1/4","-3- -x,-x+1,x; -1/8,7/8,1/8")),+  ((203,1),("y+3/4,z+3/4,-x+1/4","-3- -x+3/2,x-1/2,-x; 7/8,1/8,-5/8")),+  ((203,2),("z,-x+3/4,-y+3/4"," 3+ -x,x+3/4,-x")),+  ((203,2),("-z+3/4,-x+3/4,y"," 3+ x+3/4,-x,-x")),+  ((203,2),("-z+3/4,x,-y+3/4"," 3+ -x+3/4,-x+3/4,x")),+  ((203,2),("-y+3/4,z,-x+3/4"," 3- x+3/4,-x,-x")),+  ((203,2),("y,-z+3/4,-x+3/4"," 3- -x+3/4,-x+3/4,x")),+  ((203,2),("-y+3/4,-z+3/4,x"," 3- -x,x+3/4,-x")),+  ((203,2),("-z,x+1/4,y+1/4","-3+ -x-1/2,x+1/4,-x; -1/4,0,1/4")),+  ((203,2),("z+1/4,x+1/4,-y","-3+ x-1/4,-x+1/2,-x; 0,1/4,-1/4")),+  ((203,2),("z+1/4,-x,y+1/4","-3+ -x+1/4,-x-1/4,x; 1/4,-1/4,0")),+  ((203,2),("y+1/4,-z,x+1/4","-3- x+1/4,-x-1/2,-x; 0,-1/4,1/4")),+  ((203,2),("-y,z+1/4,x+1/4","-3- -x-1/4,-x+1/4,x; -1/4,1/4,0")),+  ((203,2),("y+1/4,z+1/4,-x","-3- -x+1/2,x-1/4,-x; 1/4,0,-1/4")),+  ((203,2),("z,-x+1/4,-y+1/4"," 3+ -x,x+1/4,-x")),+  ((203,2),("-z+3/4,-x+1/4,y+1/2"," 3+ x+3/4,-x-1/2,-x")),+  ((203,2),("-z+3/4,x+1/2,-y+1/4"," 3+(1/3,1/3,-1/3) -x+5/12,-x+7/12,x")),+  ((203,2),("-y+3/4,z+1/2,-x+1/4"," 3- x+1/4,-x+1/2,-x")),+  ((203,2),("y,-z+1/4,-x+1/4"," 3- -x+1/4,-x+1/4,x")),+  ((203,2),("-y+3/4,-z+1/4,x+1/2"," 3-(1/3,-1/3,1/3) -x-1/6,x+7/12,-x")),+  ((203,2),("-z,x+3/4,y+3/4","-3+ -x-3/2,x+3/4,-x; -3/4,0,3/4")),+  ((203,2),("z+1/4,x+3/4,-y+1/2","-3+ x-1/4,-x+1,-x; 0,3/4,-1/4")),+  ((203,2),("z+1/4,-x+1/2,y+3/4","-3+ -x+5/4,-x+1/4,x; 3/4,-1/4,1/2")),+  ((203,2),("y+1/4,-z+1/2,x+3/4","-3- x+3/4,-x-1,-x; 0,-1/4,3/4")),+  ((203,2),("-y,z+3/4,x+3/4","-3- -x-3/4,-x+3/4,x; -3/4,3/4,0")),+  ((203,2),("y+1/4,z+3/4,-x+1/2","-3- -x+1,x+1/4,-x; 3/4,1/2,-1/4")),+  ((203,2),("z+1/2,-x+3/4,-y+1/4"," 3+ -x+1/2,x+1/4,-x")),+  ((203,2),("-z+1/4,-x+3/4,y+1/2"," 3+(-1/3,1/3,1/3) x+7/12,-x-1/6,-x")),+  ((203,2),("-z+1/4,x,-y+1/4"," 3+ -x+1/4,-x+1/4,x")),+  ((203,2),("-y+1/4,z,-x+1/4"," 3- x+1/4,-x,-x")),+  ((203,2),("y+1/2,-z+3/4,-x+1/4"," 3-(1/3,1/3,-1/3) -x+7/12,-x+5/12,x")),+  ((203,2),("-y+1/4,-z+3/4,x+1/2"," 3- -x-1/2,x+3/4,-x")),+  ((203,2),("-z+1/2,x+1/4,y+3/4","-3+ -x-1,x+3/4,-x; -1/4,0,3/4")),+  ((203,2),("z+3/4,x+1/4,-y+1/2","-3+ x+1/4,-x+1,-x; 1/2,3/4,-1/4")),+  ((203,2),("z+3/4,-x,y+3/4","-3+ -x+3/4,-x-3/4,x; 3/4,-3/4,0")),+  ((203,2),("y+3/4,-z,x+3/4","-3- x+3/4,-x-3/2,-x; 0,-3/4,3/4")),+  ((203,2),("-y+1/2,z+1/4,x+3/4","-3- -x+1/4,-x+5/4,x; -1/4,3/4,1/2")),+  ((203,2),("y+3/4,z+1/4,-x+1/2","-3- -x+1,x-1/4,-x; 3/4,0,-1/4")),+  ((203,2),("z+1/2,-x+1/4,-y+3/4"," 3+(1/3,-1/3,1/3) -x+1/6,x+5/12,-x")),+  ((203,2),("-z+1/4,-x+1/4,y"," 3+ x+1/4,-x,-x")),+  ((203,2),("-z+1/4,x+1/2,-y+3/4"," 3+ -x+1/4,-x+3/4,x")),+  ((203,2),("-y+1/4,z+1/2,-x+3/4"," 3-(-1/3,1/3,1/3) x+5/12,-x+1/6,-x")),+  ((203,2),("y+1/2,-z+1/4,-x+3/4"," 3- -x+3/4,-x+1/4,x")),+  ((203,2),("-y+1/4,-z+1/4,x"," 3- -x,x+1/4,-x")),+  ((203,2),("-z+1/2,x+3/4,y+1/4","-3+ -x-1,x+5/4,-x; -1/4,1/2,3/4")),+  ((203,2),("z+3/4,x+3/4,-y","-3+ x-3/4,-x+3/2,-x; 0,3/4,-3/4")),+  ((203,2),("z+3/4,-x+1/2,y+1/4","-3+ -x+3/4,-x-1/4,x; 3/4,-1/4,0")),+  ((203,2),("y+3/4,-z+1/2,x+1/4","-3- x+5/4,-x-1,-x; 1/2,-1/4,3/4")),+  ((203,2),("-y+1/2,z+3/4,x+1/4","-3- -x-1/4,-x+3/4,x; -1/4,3/4,0")),+  ((203,2),("y+3/4,z+3/4,-x","-3- -x+3/2,x-3/4,-x; 3/4,0,-3/4")),+  ((206,1),("-z,x,y+1/2","-3+ -x-1/2,x,-x; -1/4,-1/4,1/4")),+  ((206,1),("z,x+1/2,-y","-3+ x-1/2,-x+1/2,-x; -1/4,1/4,-1/4")),+  ((206,1),("z+1/2,-x,y","-3+ -x,-x-1/2,x; 1/4,-1/4,-1/4")),+  ((206,1),("y+1/2,-z,x","-3- x+1/2,-x-1/2,-x; 1/4,-1/4,1/4")),+  ((206,1),("-y,z,x+1/2","-3- -x,-x+1/2,x; -1/4,1/4,1/4")),+  ((206,1),("y,z+1/2,-x","-3- -x+1/2,x,-x; 1/4,1/4,-1/4")),+  ((207,1),("x,z,-y"," 4- x,0,0")),+  ((207,1),("-x,z,y"," 2  0,y,y")),+  ((207,1),("x,-z,y"," 4+ x,0,0")),+  ((207,1),("z,y,-x"," 4+ 0,y,0")),+  ((207,1),("z,-y,x"," 2  x,0,x")),+  ((207,1),("-z,y,x"," 4- 0,y,0")),+  ((208,1),("x+1/2,z+1/2,-y+1/2"," 4-(1/2,0,0) x,1/2,0")),+  ((208,1),("-x+1/2,z+1/2,y+1/2"," 2 (0,1/2,1/2) 1/4,y,y")),+  ((208,1),("x+1/2,-z+1/2,y+1/2"," 4+(1/2,0,0) x,0,1/2")),+  ((208,1),("z+1/2,y+1/2,-x+1/2"," 4+(0,1/2,0) 1/2,y,0")),+  ((208,1),("z+1/2,-y+1/2,x+1/2"," 2 (1/2,0,1/2) x,1/4,x")),+  ((208,1),("-z+1/2,y+1/2,x+1/2"," 4-(0,1/2,0) 0,y,1/2")),+  ((209,1),("y,x+1/2,-z+1/2"," 2 (1/4,1/4,0) x,x+1/4,1/4")),+  ((209,1),("-y,-x+1/2,-z+1/2"," 2 (-1/4,1/4,0) x,-x+1/4,1/4")),+  ((209,1),("x,z+1/2,-y+1/2"," 4- x,1/2,0")),+  ((209,1),("-x,z+1/2,y+1/2"," 2 (0,1/2,1/2) 0,y,y")),+  ((209,1),("-x,-z+1/2,-y+1/2"," 2  0,y+1/2,-y")),+  ((209,1),("x,-z+1/2,y+1/2"," 4+ x,0,1/2")),+  ((209,1),("z,y+1/2,-x+1/2"," 4+(0,1/2,0) 1/4,y,1/4")),+  ((209,1),("z,-y+1/2,x+1/2"," 2 (1/4,0,1/4) x-1/4,1/4,x")),+  ((209,1),("-z,y+1/2,x+1/2"," 4-(0,1/2,0) -1/4,y,1/4")),+  ((209,1),("-z,-y+1/2,-x+1/2"," 2 (-1/4,0,1/4) -x+1/4,1/4,x")),+  ((209,1),("y+1/2,x,-z+1/2"," 2 (1/4,1/4,0) x,x-1/4,1/4")),+  ((209,1),("-y+1/2,-x,-z+1/2"," 2 (1/4,-1/4,0) x,-x+1/4,1/4")),+  ((209,1),("x+1/2,z,-y+1/2"," 4-(1/2,0,0) x,1/4,1/4")),+  ((209,1),("-x+1/2,z,y+1/2"," 2 (0,1/4,1/4) 1/4,y-1/4,y")),+  ((209,1),("-x+1/2,-z,-y+1/2"," 2 (0,-1/4,1/4) 1/4,y+1/4,-y")),+  ((209,1),("x+1/2,-z,y+1/2"," 4+(1/2,0,0) x,-1/4,1/4")),+  ((209,1),("z+1/2,y,-x+1/2"," 4+ 1/2,y,0")),+  ((209,1),("z+1/2,-y,x+1/2"," 2 (1/2,0,1/2) x,0,x")),+  ((209,1),("-z+1/2,y,x+1/2"," 4- 0,y,1/2")),+  ((209,1),("-z+1/2,-y,-x+1/2"," 2  -x+1/2,0,x")),+  ((209,1),("x+1/2,z+1/2,-y"," 4-(1/2,0,0) x,1/4,-1/4")),+  ((209,1),("-x+1/2,z+1/2,y"," 2 (0,1/4,1/4) 1/4,y+1/4,y")),+  ((209,1),("-x+1/2,-z+1/2,-y"," 2 (0,1/4,-1/4) 1/4,y+1/4,-y")),+  ((209,1),("x+1/2,-z+1/2,y"," 4+(1/2,0,0) x,1/4,1/4")),+  ((209,1),("z+1/2,y+1/2,-x"," 4+(0,1/2,0) 1/4,y,-1/4")),+  ((209,1),("z+1/2,-y+1/2,x"," 2 (1/4,0,1/4) x+1/4,1/4,x")),+  ((209,1),("-z+1/2,y+1/2,x"," 4-(0,1/2,0) 1/4,y,1/4")),+  ((209,1),("-z+1/2,-y+1/2,-x"," 2 (1/4,0,-1/4) -x+1/4,1/4,x")),+  ((210,1),("y+1/4,-x+3/4,z+3/4"," 4-(0,0,3/4) 1/2,1/4,z")),+  ((210,1),("-y+3/4,x+3/4,z+1/4"," 4+(0,0,1/4) 0,3/4,z")),+  ((210,1),("x+3/4,z+1/4,-y+3/4"," 4-(3/4,0,0) x,1/2,1/4")),+  ((210,1),("-x+3/4,z+3/4,y+1/4"," 2 (0,1/2,1/2) 3/8,y+1/4,y")),+  ((210,1),("-x+1/4,-z+1/4,-y+1/4"," 2  1/8,y+1/4,-y")),+  ((210,1),("x+1/4,-z+3/4,y+3/4"," 4+(1/4,0,0) x,0,3/4")),+  ((210,1),("z+3/4,y+1/4,-x+3/4"," 4+(0,1/4,0) 3/4,y,0")),+  ((210,1),("z+1/4,-y+3/4,x+3/4"," 2 (1/2,0,1/2) x-1/4,3/8,x")),+  ((210,1),("-z+3/4,y+3/4,x+1/4"," 4-(0,3/4,0) 1/4,y,1/2")),+  ((210,1),("-z+1/4,-y+1/4,-x+1/4"," 2  -x+1/4,1/8,x")),+  ((210,1),("y+3/4,x+3/4,-z+1/4"," 2 (3/4,3/4,0) x,x,1/8")),+  ((210,1),("-y+1/4,-x+3/4,-z+3/4"," 2 (-1/4,1/4,0) x,-x+1/2,3/8")),+  ((210,1),("x+3/4,z+3/4,-y+1/4"," 4-(3/4,0,0) x,1/2,-1/4")),+  ((210,1),("-x+3/4,z+1/4,y+3/4"," 2 (0,1/2,1/2) 3/8,y-1/4,y")),+  ((210,1),("-x+1/4,-z+3/4,-y+3/4"," 2  1/8,y+3/4,-y")),+  ((210,1),("x+1/4,-z+1/4,y+1/4"," 4+(1/4,0,0) x,0,1/4")),+  ((210,1),("z+3/4,y+3/4,-x+1/4"," 4+(0,3/4,0) 1/2,y,-1/4")),+  ((210,1),("z+1/4,-y+1/4,x+1/4"," 2 (1/4,0,1/4) x,1/8,x")),+  ((210,1),("-z+3/4,y+1/4,x+3/4"," 4-(0,1/4,0) 0,y,3/4")),+  ((210,1),("-z+1/4,-y+3/4,-x+3/4"," 2 (-1/4,0,1/4) -x+1/2,3/8,x")),+  ((210,1),("y+1/4,x+1/4,-z+1/4"," 2 (1/4,1/4,0) x,x,1/8")),+  ((210,1),("-y+3/4,-x+1/4,-z+3/4"," 2 (1/4,-1/4,0) x,-x+1/2,3/8")),+  ((210,1),("x+1/4,z+1/4,-y+1/4"," 4-(1/4,0,0) x,1/4,0")),+  ((210,1),("-x+1/4,z+3/4,y+3/4"," 2 (0,3/4,3/4) 1/8,y,y")),+  ((210,1),("-x+3/4,-z+1/4,-y+3/4"," 2 (0,-1/4,1/4) 3/8,y+1/2,-y")),+  ((210,1),("x+3/4,-z+3/4,y+1/4"," 4+(3/4,0,0) x,1/4,1/2")),+  ((210,1),("z+1/4,y+1/4,-x+1/4"," 4+(0,1/4,0) 1/4,y,0")),+  ((210,1),("z+3/4,-y+3/4,x+1/4"," 2 (1/2,0,1/2) x+1/4,3/8,x")),+  ((210,1),("-z+1/4,y+3/4,x+3/4"," 4-(0,3/4,0) -1/4,y,1/2")),+  ((210,1),("-z+3/4,-y+1/4,-x+3/4"," 2  -x+3/4,1/8,x")),+  ((210,1),("y+3/4,-x+1/4,z+3/4"," 4-(0,0,3/4) 1/2,-1/4,z")),+  ((210,1),("-y+1/4,x+1/4,z+1/4"," 4+(0,0,1/4) 0,1/4,z")),+  ((210,1),("x+1/4,z+3/4,-y+3/4"," 4-(1/4,0,0) x,3/4,0")),+  ((210,1),("-x+1/4,z+1/4,y+1/4"," 2 (0,1/4,1/4) 1/8,y,y")),+  ((210,1),("-x+3/4,-z+3/4,-y+1/4"," 2 (0,1/4,-1/4) 3/8,y+1/2,-y")),+  ((210,1),("x+3/4,-z+1/4,y+3/4"," 4+(3/4,0,0) x,-1/4,1/2")),+  ((210,1),("z+1/4,y+3/4,-x+3/4"," 4+(0,3/4,0) 1/2,y,1/4")),+  ((210,1),("z+3/4,-y+1/4,x+3/4"," 2 (3/4,0,3/4) x,1/8,x")),+  ((210,1),("-z+1/4,y+1/4,x+1/4"," 4-(0,1/4,0) 0,y,1/4")),+  ((210,1),("-z+3/4,-y+3/4,-x+1/4"," 2 (1/4,0,-1/4) -x+1/2,3/8,x")),+  ((213,1),("x+3/4,z+1/4,-y+1/4"," 4-(3/4,0,0) x,1/4,0")),+  ((213,1),("-x+1/4,z+3/4,y+1/4"," 2 (0,1/2,1/2) 1/8,y+1/4,y")),+  ((213,1),("-x+3/4,-z+3/4,-y+3/4"," 2  3/8,y+3/4,-y")),+  ((213,1),("x+1/4,-z+1/4,y+3/4"," 4+(1/4,0,0) x,-1/4,1/2")),+  ((213,1),("z+3/4,y+1/4,-x+1/4"," 4+(0,1/4,0) 1/2,y,-1/4")),+  ((213,1),("z+1/4,-y+1/4,x+3/4"," 2 (1/2,0,1/2) x-1/4,1/8,x")),+  ((213,1),("-z+1/4,y+3/4,x+1/4"," 4-(0,3/4,0) 0,y,1/4")),+  ((213,1),("-z+3/4,-y+3/4,-x+3/4"," 2  -x+3/4,3/8,x")),+  ((215,1),("-x,z,-y","-4+ x,0,0; 0,0,0")),+  ((215,1),("-x,-z,y","-4- x,0,0; 0,0,0")),+  ((215,1),("x,-z,-y"," m  x,y,-y")),+  ((215,1),("z,-y,-x","-4- 0,y,0; 0,0,0")),+  ((215,1),("-z,y,-x"," m  -x,y,x")),+  ((215,1),("-z,-y,x","-4+ 0,y,0; 0,0,0")),+  ((216,1),("y,x+1/2,z+1/2"," g (1/4,1/4,1/2) x-1/4,x,z")),+  ((216,1),("-y,-x+1/2,z+1/2"," g (-1/4,1/4,1/2) x+1/4,-x,z")),+  ((216,1),("x,z+1/2,y+1/2"," g (0,1/2,1/2) x,y,y")),+  ((216,1),("-x,z+1/2,-y+1/2","-4+ x,1/2,0; 0,1/2,0")),+  ((216,1),("-x,-z+1/2,y+1/2","-4- x,0,1/2; 0,0,1/2")),+  ((216,1),("x,-z+1/2,-y+1/2"," m  x,y+1/2,-y")),+  ((216,1),("z,y+1/2,x+1/2"," g (1/4,1/2,1/4) x-1/4,y,x")),+  ((216,1),("z,-y+1/2,-x+1/2","-4- 1/4,y,1/4; 1/4,1/4,1/4")),+  ((216,1),("-z,y+1/2,-x+1/2"," g (-1/4,1/2,1/4) -x+1/4,y,x")),+  ((216,1),("-z,-y+1/2,x+1/2","-4+ -1/4,y,1/4; -1/4,1/4,1/4")),+  ((216,1),("y+1/2,x,z+1/2"," g (1/4,1/4,1/2) x+1/4,x,z")),+  ((216,1),("-y+1/2,-x,z+1/2"," g (1/4,-1/4,1/2) x+1/4,-x,z")),+  ((216,1),("x+1/2,z,y+1/2"," g (1/2,1/4,1/4) x,y-1/4,y")),+  ((216,1),("-x+1/2,z,-y+1/2","-4+ x,1/4,1/4; 1/4,1/4,1/4")),+  ((216,1),("-x+1/2,-z,y+1/2","-4- x,-1/4,1/4; 1/4,-1/4,1/4")),+  ((216,1),("x+1/2,-z,-y+1/2"," g (1/2,-1/4,1/4) x,y+1/4,-y")),+  ((216,1),("z+1/2,y,x+1/2"," g (1/2,0,1/2) x,y,x")),+  ((216,1),("z+1/2,-y,-x+1/2","-4- 1/2,y,0; 1/2,0,0")),+  ((216,1),("-z+1/2,y,-x+1/2"," m  -x+1/2,y,x")),+  ((216,1),("-z+1/2,-y,x+1/2","-4+ 0,y,1/2; 0,0,1/2")),+  ((216,1),("x+1/2,z+1/2,y"," g (1/2,1/4,1/4) x,y+1/4,y")),+  ((216,1),("-x+1/2,z+1/2,-y","-4+ x,1/4,-1/4; 1/4,1/4,-1/4")),+  ((216,1),("-x+1/2,-z+1/2,y","-4- x,1/4,1/4; 1/4,1/4,1/4")),+  ((216,1),("x+1/2,-z+1/2,-y"," g (1/2,1/4,-1/4) x,y+1/4,-y")),+  ((216,1),("z+1/2,y+1/2,x"," g (1/4,1/2,1/4) x+1/4,y,x")),+  ((216,1),("z+1/2,-y+1/2,-x","-4- 1/4,y,-1/4; 1/4,1/4,-1/4")),+  ((216,1),("-z+1/2,y+1/2,-x"," g (1/4,1/2,-1/4) -x+1/4,y,x")),+  ((216,1),("-z+1/2,-y+1/2,x","-4+ 1/4,y,1/4; 1/4,1/4,1/4")),+  ((217,1),("-x+1/2,z+1/2,-y+1/2","-4+ x,1/2,0; 1/4,1/2,0")),+  ((217,1),("-x+1/2,-z+1/2,y+1/2","-4- x,0,1/2; 1/4,0,1/2")),+  ((217,1),("x+1/2,-z+1/2,-y+1/2"," a  x,y+1/2,-y")),+  ((217,1),("z+1/2,-y+1/2,-x+1/2","-4- 1/2,y,0; 1/2,1/4,0")),+  ((217,1),("-z+1/2,y+1/2,-x+1/2"," b  -x+1/2,y,x")),+  ((217,1),("-z+1/2,-y+1/2,x+1/2","-4+ 0,y,1/2; 0,1/4,1/2")),+  ((219,1),("y+1/2,x,z"," g (1/4,1/4,0) x+1/4,x,z")),+  ((219,1),("-y+1/2,-x,z"," g (1/4,-1/4,0) x+1/4,-x,z")),+  ((219,1),("-y+1/2,x,-z","-4- 1/4,1/4,z; 1/4,1/4,0")),+  ((219,1),("x+1/2,z,y"," a  x,y,y")),+  ((219,1),("-x+1/2,z,-y","-4+ x,0,0; 1/4,0,0")),+  ((219,1),("-x+1/2,-z,y","-4- x,0,0; 1/4,0,0")),+  ((219,1),("x+1/2,-z,-y"," a  x,y,-y")),+  ((219,1),("z+1/2,y,x"," g (1/4,0,1/4) x+1/4,y,x")),+  ((219,1),("z+1/2,-y,-x","-4- 1/4,y,-1/4; 1/4,0,-1/4")),+  ((219,1),("-z+1/2,y,-x"," g (1/4,0,-1/4) -x+1/4,y,x")),+  ((219,1),("-z+1/2,-y,x","-4+ 1/4,y,1/4; 1/4,0,1/4")),+  ((219,1),("y,x+1/2,z"," g (1/4,1/4,0) x-1/4,x,z")),+  ((219,1),("-y,-x+1/2,z"," g (-1/4,1/4,0) x+1/4,-x,z")),+  ((219,1),("y,-x+1/2,-z","-4+ 1/4,1/4,z; 1/4,1/4,0")),+  ((219,1),("x,z+1/2,y"," g (0,1/4,1/4) x,y+1/4,y")),+  ((219,1),("-x,z+1/2,-y","-4+ x,1/4,-1/4; 0,1/4,-1/4")),+  ((219,1),("-x,-z+1/2,y","-4- x,1/4,1/4; 0,1/4,1/4")),+  ((219,1),("x,-z+1/2,-y"," g (0,1/4,-1/4) x,y+1/4,-y")),+  ((219,1),("z,y+1/2,x"," b  x,y,x")),+  ((219,1),("z,-y+1/2,-x","-4- 0,y,0; 0,1/4,0")),+  ((219,1),("-z,y+1/2,-x"," b  -x,y,x")),+  ((219,1),("-z,-y+1/2,x","-4+ 0,y,0; 0,1/4,0")),+  ((219,1),("x,z,y+1/2"," g (0,1/4,1/4) x,y-1/4,y")),+  ((219,1),("-x,z,-y+1/2","-4+ x,1/4,1/4; 0,1/4,1/4")),+  ((219,1),("-x,-z,y+1/2","-4- x,-1/4,1/4; 0,-1/4,1/4")),+  ((219,1),("x,-z,-y+1/2"," g (0,-1/4,1/4) x,y+1/4,-y")),+  ((219,1),("z,y,x+1/2"," g (1/4,0,1/4) x-1/4,y,x")),+  ((219,1),("z,-y,-x+1/2","-4- 1/4,y,1/4; 1/4,0,1/4")),+  ((219,1),("-z,y,-x+1/2"," g (-1/4,0,1/4) -x+1/4,y,x")),+  ((219,1),("-z,-y,x+1/2","-4+ -1/4,y,1/4; -1/4,0,1/4")),+  ((220,1),("x+1/4,z+1/4,y+1/4"," d (1/4,1/4,1/4) x,y,y")),+  ((220,1),("-x+3/4,z+3/4,-y+1/4","-4+ x,1/2,-1/4; 3/8,1/2,-1/4")),+  ((220,1),("-x+1/4,-z+3/4,y+3/4","-4- x,0,3/4; 1/8,0,3/4")),+  ((220,1),("x+3/4,-z+1/4,-y+3/4"," d (3/4,-1/4,1/4) x,y+1/2,-y")),+  ((220,1),("z+1/4,y+1/4,x+1/4"," d (1/4,1/4,1/4) x,y,x")),+  ((220,1),("z+3/4,-y+1/4,-x+3/4","-4- 3/4,y,0; 3/4,1/8,0")),+  ((220,1),("-z+3/4,y+3/4,-x+1/4"," d (1/4,3/4,-1/4) -x+1/2,y,x")),+  ((220,1),("-z+1/4,-y+3/4,x+3/4","-4+ -1/4,y,1/2; -1/4,3/8,1/2")),+  ((220,1),("x+3/4,z+3/4,y+3/4"," d (3/4,3/4,3/4) x,y,y")),+  ((220,1),("-x+1/4,z+1/4,-y+3/4","-4+ x,1/2,1/4; 1/8,1/2,1/4")),+  ((220,1),("-x+3/4,-z+1/4,y+1/4","-4- x,0,1/4; 3/8,0,1/4")),+  ((220,1),("x+1/4,-z+3/4,-y+1/4"," d (1/4,1/4,-1/4) x,y+1/2,-y")),+  ((220,1),("z+3/4,y+3/4,x+3/4"," d (3/4,3/4,3/4) x,y,x")),+  ((220,1),("z+1/4,-y+3/4,-x+1/4","-4- 1/4,y,0; 1/4,3/8,0")),+  ((220,1),("-z+1/4,y+1/4,-x+3/4"," d (-1/4,1/4,1/4) -x+1/2,y,x")),+  ((220,1),("-z+3/4,-y+1/4,x+1/4","-4+ 1/4,y,1/2; 1/4,1/8,1/2")),+  ((226,1),("y+1/2,x,-z"," 2 (1/4,1/4,0) x,x-1/4,0")),+  ((226,1),("-y+1/2,-x,-z"," 2 (1/4,-1/4,0) x,-x+1/4,0")),+  ((226,1),("y+1/2,-x,z"," 4- 1/4,-1/4,z")),+  ((226,1),("x+1/2,z,-y"," 4-(1/2,0,0) x,0,0")),+  ((226,1),("-x+1/2,z,y"," 2  1/4,y,y")),+  ((226,1),("-x+1/2,-z,-y"," 2  1/4,y,-y")),+  ((226,1),("x+1/2,-z,y"," 4+(1/2,0,0) x,0,0")),+  ((226,1),("z+1/2,y,-x"," 4+ 1/4,y,-1/4")),+  ((226,1),("z+1/2,-y,x"," 2 (1/4,0,1/4) x+1/4,0,x")),+  ((226,1),("-z+1/2,y,x"," 4- 1/4,y,1/4")),+  ((226,1),("-z+1/2,-y,-x"," 2 (1/4,0,-1/4) -x+1/4,0,x")),+  ((226,1),("y,x+1/2,-z"," 2 (1/4,1/4,0) x,x+1/4,0")),+  ((226,1),("-y,-x+1/2,-z"," 2 (-1/4,1/4,0) x,-x+1/4,0")),+  ((226,1),("-y,x+1/2,z"," 4+ -1/4,1/4,z")),+  ((226,1),("x,z+1/2,-y"," 4- x,1/4,-1/4")),+  ((226,1),("-x,z+1/2,y"," 2 (0,1/4,1/4) 0,y+1/4,y")),+  ((226,1),("-x,-z+1/2,-y"," 2 (0,1/4,-1/4) 0,y+1/4,-y")),+  ((226,1),("x,-z+1/2,y"," 4+ x,1/4,1/4")),+  ((226,1),("z,y+1/2,-x"," 4+(0,1/2,0) 0,y,0")),+  ((226,1),("z,-y+1/2,x"," 2  x,1/4,x")),+  ((226,1),("-z,y+1/2,x"," 4-(0,1/2,0) 0,y,0")),+  ((226,1),("-z,-y+1/2,-x"," 2  -x,1/4,x")),+  ((226,1),("x,z,-y+1/2"," 4- x,1/4,1/4")),+  ((226,1),("-x,z,y+1/2"," 2 (0,1/4,1/4) 0,y-1/4,y")),+  ((226,1),("-x,-z,-y+1/2"," 2 (0,-1/4,1/4) 0,y+1/4,-y")),+  ((226,1),("x,-z,y+1/2"," 4+ x,-1/4,1/4")),+  ((226,1),("z,y,-x+1/2"," 4+ 1/4,y,1/4")),+  ((226,1),("z,-y,x+1/2"," 2 (1/4,0,1/4) x-1/4,0,x")),+  ((226,1),("-z,y,x+1/2"," 4- -1/4,y,1/4")),+  ((226,1),("-z,-y,-x+1/2"," 2 (-1/4,0,1/4) -x+1/4,0,x")),+  ((227,2),("y+3/4,x+1/4,-z+1/2"," 2 (1/2,1/2,0) x,x-1/4,1/4")),+  ((227,2),("y+1/4,-x+1/2,z+3/4"," 4-(0,0,3/4) 3/8,1/8,z")),+  ((227,2),("-y+1/2,x+3/4,z+1/4"," 4+(0,0,1/4) -1/8,5/8,z")),+  ((227,2),("x+3/4,z+1/4,-y+1/2"," 4-(3/4,0,0) x,3/8,1/8")),+  ((227,2),("-x+1/2,z+3/4,y+1/4"," 2 (0,1/2,1/2) 1/4,y+1/4,y")),+  ((227,2),("x+1/4,-z+1/2,y+3/4"," 4+(1/4,0,0) x,-1/8,5/8")),+  ((227,2),("z+3/4,y+1/4,-x+1/2"," 4+(0,1/4,0) 5/8,y,-1/8")),+  ((227,2),("z+1/4,-y+1/2,x+3/4"," 2 (1/2,0,1/2) x-1/4,1/4,x")),+  ((227,2),("-z+1/2,y+3/4,x+1/4"," 4-(0,3/4,0) 1/8,y,3/8")),+  ((227,2),("-y+1/4,-x+3/4,z+1/2"," g (-1/4,1/4,1/2) x+1/2,-x,z")),+  ((227,2),("-y+3/4,x+1/2,-z+1/4","-4- 1/8,5/8,z; 1/8,5/8,1/8")),+  ((227,2),("y+1/2,-x+1/4,-z+3/4","-4+ 3/8,-1/8,z; 3/8,-1/8,3/8")),+  ((227,2),("-x+1/4,-z+3/4,y+1/2","-4- x,1/8,5/8; 1/8,1/8,5/8")),+  ((227,2),("x+1/2,-z+1/4,-y+3/4"," g (1/2,-1/4,1/4) x,y+1/2,-y")),+  ((227,2),("-x+3/4,z+1/2,-y+1/4","-4+ x,3/8,-1/8; 3/8,3/8,-1/8")),+  ((227,2),("-z+1/4,-y+3/4,x+1/2","-4+ -1/8,y,3/8; -1/8,3/8,3/8")),+  ((227,2),("-z+3/4,y+1/2,-x+1/4"," g (1/4,1/2,-1/4) -x+1/2,y,x")),+  ((227,2),("z+1/2,-y+1/4,-x+3/4","-4- 5/8,y,1/8; 5/8,1/8,1/8")),+  ((227,2),("y+3/4,x+3/4,-z"," 2 (3/4,3/4,0) x,x,0")),+  ((227,2),("y+1/4,-x,z+1/4"," 4-(0,0,1/4) 1/8,-1/8,z")),+  ((227,2),("-y+1/2,x+1/4,z+3/4"," 4+(0,0,3/4) 1/8,3/8,z")),+  ((227,2),("x+3/4,z+3/4,-y"," 4-(3/4,0,0) x,3/8,-3/8")),+  ((227,2),("-x+1/2,z+1/4,y+3/4"," 2 (0,1/2,1/2) 1/4,y-1/4,y")),+  ((227,2),("x+1/4,-z,y+1/4"," 4+(1/4,0,0) x,-1/8,1/8")),+  ((227,2),("z+3/4,y+3/4,-x"," 4+(0,3/4,0) 3/8,y,-3/8")),+  ((227,2),("z+1/4,-y,x+1/4"," 2 (1/4,0,1/4) x,0,x")),+  ((227,2),("-z+1/2,y+1/4,x+3/4"," 4-(0,1/4,0) -1/8,y,5/8")),+  ((227,2),("-y+1/4,-x+1/4,z"," m  x+1/4,-x,z")),+  ((227,2),("-y+3/4,x,-z+3/4","-4- 3/8,3/8,z; 3/8,3/8,3/8")),+  ((227,2),("y+1/2,-x+3/4,-z+1/4","-4+ 5/8,1/8,z; 5/8,1/8,1/8")),+  ((227,2),("-x+1/4,-z+1/4,y","-4- x,1/8,1/8; 1/8,1/8,1/8")),+  ((227,2),("x+1/2,-z+3/4,-y+1/4"," g (1/2,1/4,-1/4) x,y+1/2,-y")),+  ((227,2),("-x+3/4,z,-y+3/4","-4+ x,3/8,3/8; 3/8,3/8,3/8")),+  ((227,2),("-z+1/4,-y+1/4,x","-4+ 1/8,y,1/8; 1/8,1/8,1/8")),+  ((227,2),("-z+3/4,y,-x+3/4"," m  -x+3/4,y,x")),+  ((227,2),("z+1/2,-y+3/4,-x+1/4","-4- 3/8,y,-1/8; 3/8,3/8,-1/8")),+  ((227,2),("y+1/4,x+1/4,-z"," 2 (1/4,1/4,0) x,x,0")),+  ((227,2),("y+3/4,-x+1/2,z+1/4"," 4-(0,0,1/4) 5/8,-1/8,z")),+  ((227,2),("-y,x+3/4,z+3/4"," 4+(0,0,3/4) -3/8,3/8,z")),+  ((227,2),("x+1/4,z+1/4,-y"," 4-(1/4,0,0) x,1/8,-1/8")),+  ((227,2),("-x,z+3/4,y+3/4"," 2 (0,3/4,3/4) 0,y,y")),+  ((227,2),("x+3/4,-z+1/2,y+1/4"," 4+(3/4,0,0) x,1/8,3/8")),+  ((227,2),("z+1/4,y+1/4,-x"," 4+(0,1/4,0) 1/8,y,-1/8")),+  ((227,2),("z+3/4,-y+1/2,x+1/4"," 2 (1/2,0,1/2) x+1/4,1/4,x")),+  ((227,2),("-z,y+3/4,x+3/4"," 4-(0,3/4,0) -3/8,y,3/8")),+  ((227,2),("-y+3/4,-x+3/4,z"," m  x+3/4,-x,z")),+  ((227,2),("-y+1/4,x+1/2,-z+3/4","-4- -1/8,3/8,z; -1/8,3/8,3/8")),+  ((227,2),("y,-x+1/4,-z+1/4","-4+ 1/8,1/8,z; 1/8,1/8,1/8")),+  ((227,2),("-x+3/4,-z+3/4,y","-4- x,3/8,3/8; 3/8,3/8,3/8")),+  ((227,2),("x,-z+1/4,-y+1/4"," m  x,y+1/4,-y")),+  ((227,2),("-x+1/4,z+1/2,-y+3/4","-4+ x,5/8,1/8; 1/8,5/8,1/8")),+  ((227,2),("-z+3/4,-y+3/4,x","-4+ 3/8,y,3/8; 3/8,3/8,3/8")),+  ((227,2),("-z+1/4,y+1/2,-x+3/4"," g (-1/4,1/2,1/4) -x+1/2,y,x")),+  ((227,2),("z,-y+1/4,-x+1/4","-4- 1/8,y,1/8; 1/8,1/8,1/8")),+  ((227,2),("y+1/4,x+3/4,-z+1/2"," 2 (1/2,1/2,0) x,x+1/4,1/4")),+  ((227,2),("y+3/4,-x,z+3/4"," 4-(0,0,3/4) 3/8,-3/8,z")),+  ((227,2),("-y,x+1/4,z+1/4"," 4+(0,0,1/4) -1/8,1/8,z")),+  ((227,2),("x+1/4,z+3/4,-y+1/2"," 4-(1/4,0,0) x,5/8,-1/8")),+  ((227,2),("-x,z+1/4,y+1/4"," 2 (0,1/4,1/4) 0,y,y")),+  ((227,2),("x+3/4,-z,y+3/4"," 4+(3/4,0,0) x,-3/8,3/8")),+  ((227,2),("z+1/4,y+3/4,-x+1/2"," 4+(0,3/4,0) 3/8,y,1/8")),+  ((227,2),("z+3/4,-y,x+3/4"," 2 (3/4,0,3/4) x,0,x")),+  ((227,2),("-z,y+1/4,x+1/4"," 4-(0,1/4,0) -1/8,y,1/8")),+  ((227,2),("-y+3/4,-x+1/4,z+1/2"," g (1/4,-1/4,1/2) x+1/2,-x,z")),+  ((227,2),("-y+1/4,x,-z+1/4","-4- 1/8,1/8,z; 1/8,1/8,1/8")),+  ((227,2),("y,-x+3/4,-z+3/4","-4+ 3/8,3/8,z; 3/8,3/8,3/8")),+  ((227,2),("-x+3/4,-z+1/4,y+1/2","-4- x,-1/8,3/8; 3/8,-1/8,3/8")),+  ((227,2),("x,-z+3/4,-y+3/4"," m  x,y+3/4,-y")),+  ((227,2),("-x+1/4,z,-y+1/4","-4+ x,1/8,1/8; 1/8,1/8,1/8")),+  ((227,2),("-z+3/4,-y+1/4,x+1/2","-4+ 1/8,y,5/8; 1/8,1/8,5/8")),+  ((227,2),("-z+1/4,y,-x+1/4"," m  -x+1/4,y,x")),+  ((227,2),("z,-y+3/4,-x+3/4","-4- 3/8,y,3/8; 3/8,3/8,3/8")),+  ((228,1),("-x+3/4,-y+3/4,-z+3/4","-1  3/8,3/8,3/8")),+  ((228,1),("x+3/4,y+1/4,-z+1/4"," d (3/4,1/4,0) x,y,1/8")),+  ((228,1),("x+1/4,-y+1/4,z+3/4"," d (1/4,0,3/4) x,1/8,z")),+  ((228,1),("-x+1/4,y+3/4,z+1/4"," d (0,3/4,1/4) 1/8,y,z")),+  ((228,1),("-z+3/4,-x+3/4,-y+3/4","-3+ x,x,x; 3/8,3/8,3/8")),+  ((228,1),("-z+1/4,x+3/4,y+1/4","-3+ -x-1,x+1,-x; -3/8,3/8,5/8")),+  ((228,1),("z+3/4,x+1/4,-y+1/4","-3+ x,-x+1,-x; 3/8,5/8,-3/8")),+  ((228,1),("z+1/4,-x+1/4,y+3/4","-3+ -x+1,-x,x; 5/8,-3/8,3/8")),+  ((228,1),("-y+3/4,-z+3/4,-x+3/4","-3- x,x,x; 3/8,3/8,3/8")),+  ((228,1),("y+1/4,-z+1/4,x+3/4","-3- x+1/2,-x-1,-x; -1/8,-3/8,5/8")),+  ((228,1),("-y+1/4,z+3/4,x+1/4","-3- -x-1/2,-x+1/2,x; -3/8,5/8,-1/8")),+  ((228,1),("y+3/4,z+1/4,-x+1/4","-3- -x+1,x-1/2,-x; 5/8,-1/8,-3/8")),+  ((228,1),("-x+3/4,-y+1/4,-z+1/4","-1  3/8,1/8,1/8")),+  ((228,1),("x+3/4,y+3/4,-z+3/4"," d (3/4,3/4,0) x,y,3/8")),+  ((228,1),("x+1/4,-y+3/4,z+1/4"," d (1/4,0,1/4) x,3/8,z")),+  ((228,1),("-x+1/4,y+1/4,z+3/4"," d (0,1/4,3/4) 1/8,y,z")),+  ((228,1),("-z+3/4,-x+1/4,-y+1/4","-3+ x,x-1/2,x; 3/8,-1/8,3/8")),+  ((228,1),("-z+1/4,x+1/4,y+3/4","-3+ -x-1,x+1/2,-x; -3/8,-1/8,5/8")),+  ((228,1),("z+3/4,x+3/4,-y+3/4","-3+ x,-x+3/2,-x; 3/8,9/8,-3/8")),+  ((228,1),("z+1/4,-x+3/4,y+1/4","-3+ -x+1,-x+1/2,x; 5/8,1/8,3/8")),+  ((228,1),("-y+3/4,-z+1/4,-x+1/4","-3- x+1/2,x+1/2,x; 3/8,3/8,-1/8")),+  ((228,1),("y+1/4,-z+3/4,x+1/4","-3- x+1,-x-1/2,-x; 3/8,1/8,5/8")),+  ((228,1),("-y+1/4,z+1/4,x+3/4","-3- -x,-x+1,x; -3/8,5/8,3/8")),+  ((228,1),("y+3/4,z+3/4,-x+3/4","-3- -x+3/2,x,-x; 9/8,3/8,-3/8")),+  ((228,1),("-x+1/4,-y+3/4,-z+1/4","-1  1/8,3/8,1/8")),+  ((228,1),("x+1/4,y+1/4,-z+3/4"," d (1/4,1/4,0) x,y,3/8")),+  ((228,1),("x+3/4,-y+1/4,z+1/4"," d (3/4,0,1/4) x,1/8,z")),+  ((228,1),("-x+3/4,y+3/4,z+3/4"," d (0,3/4,3/4) 3/8,y,z")),+  ((228,1),("-z+1/4,-x+3/4,-y+1/4","-3+ x+1/2,x+1/2,x; 3/8,3/8,-1/8")),+  ((228,1),("-z+3/4,x+3/4,y+3/4","-3+ -x-3/2,x+3/2,-x; -3/8,3/8,9/8")),+  ((228,1),("z+1/4,x+1/4,-y+3/4","-3+ x+1/2,-x+1/2,-x; 3/8,5/8,1/8")),+  ((228,1),("z+3/4,-x+1/4,y+1/4","-3+ -x+1/2,-x-1/2,x; 5/8,-3/8,-1/8")),+  ((228,1),("-y+1/4,-z+3/4,-x+1/4","-3- x-1/2,x,x; -1/8,3/8,3/8")),+  ((228,1),("y+3/4,-z+1/4,x+1/4","-3- x+1,-x-1,-x; 3/8,-3/8,5/8")),+  ((228,1),("-y+3/4,z+3/4,x+3/4","-3- -x,-x+3/2,x; -3/8,9/8,3/8")),+  ((228,1),("y+1/4,z+1/4,-x+3/4","-3- -x+1/2,x+1/2,-x; 5/8,3/8,1/8")),+  ((228,1),("-x+1/4,-y+1/4,-z+3/4","-1  1/8,1/8,3/8")),+  ((228,1),("x+1/4,y+3/4,-z+1/4"," d (1/4,3/4,0) x,y,1/8")),+  ((228,1),("x+3/4,-y+3/4,z+3/4"," d (3/4,0,3/4) x,3/8,z")),+  ((228,1),("-x+3/4,y+1/4,z+1/4"," d (0,1/4,1/4) 3/8,y,z")),+  ((228,1),("-z+1/4,-x+1/4,-y+3/4","-3+ x-1/2,x,x; -1/8,3/8,3/8")),+  ((228,1),("-z+3/4,x+1/4,y+1/4","-3+ -x-1/2,x+1,-x; 1/8,3/8,5/8")),+  ((228,1),("z+1/4,x+3/4,-y+1/4","-3+ x-1/2,-x+1,-x; -1/8,5/8,-3/8")),+  ((228,1),("z+3/4,-x+3/4,y+3/4","-3+ -x+3/2,-x,x; 9/8,-3/8,3/8")),+  ((228,1),("-y+1/4,-z+1/4,-x+3/4","-3- x,x-1/2,x; 3/8,-1/8,3/8")),+  ((228,1),("y+3/4,-z+3/4,x+3/4","-3- x+3/2,-x-3/2,-x; 3/8,-3/8,9/8")),+  ((228,1),("-y+3/4,z+1/4,x+1/4","-3- -x+1/2,-x+1,x; 1/8,5/8,3/8")),+  ((228,1),("y+1/4,z+3/4,-x+1/4","-3- -x+1,x,-x; 5/8,3/8,-3/8")),+  ((228,2),("y+3/4,x+1/4,-z"," 2 (1/2,1/2,0) x,x-1/4,0")),+  ((228,2),("y+1/4,-x,z+3/4"," 4-(0,0,3/4) 1/8,-1/8,z")),+  ((228,2),("-y,x+3/4,z+1/4"," 4+(0,0,1/4) -3/8,3/8,z")),+  ((228,2),("x+3/4,z+1/4,-y"," 4-(3/4,0,0) x,1/8,-1/8")),+  ((228,2),("-x,z+3/4,y+1/4"," 2 (0,1/2,1/2) 0,y+1/4,y")),+  ((228,2),("x+1/4,-z,y+3/4"," 4+(1/4,0,0) x,-3/8,3/8")),+  ((228,2),("z+3/4,y+1/4,-x"," 4+(0,1/4,0) 3/8,y,-3/8")),+  ((228,2),("z+1/4,-y,x+3/4"," 2 (1/2,0,1/2) x-1/4,0,x")),+  ((228,2),("-z,y+3/4,x+1/4"," 4-(0,3/4,0) -1/8,y,1/8")),+  ((228,2),("-y+1/4,-x+3/4,z"," g (-1/4,1/4,0) x+1/2,-x,z")),+  ((228,2),("-y+3/4,x,-z+1/4","-4- 3/8,3/8,z; 3/8,3/8,1/8")),+  ((228,2),("y,-x+1/4,-z+3/4","-4+ 1/8,1/8,z; 1/8,1/8,3/8")),+  ((228,2),("-x+1/4,-z+3/4,y","-4- x,3/8,3/8; 1/8,3/8,3/8")),+  ((228,2),("x,-z+1/4,-y+3/4"," g (0,-1/4,1/4) x,y+1/2,-y")),+  ((228,2),("-x+3/4,z,-y+1/4","-4+ x,1/8,1/8; 3/8,1/8,1/8")),+  ((228,2),("-z+1/4,-y+3/4,x","-4+ 1/8,y,1/8; 1/8,3/8,1/8")),+  ((228,2),("-z+3/4,y,-x+1/4"," g (1/4,0,-1/4) -x+1/2,y,x")),+  ((228,2),("z,-y+1/4,-x+3/4","-4- 3/8,y,3/8; 3/8,1/8,3/8")),+  ((228,2),("y+3/4,x+3/4,-z+1/2"," 2 (3/4,3/4,0) x,x,1/4")),+  ((228,2),("y+1/4,-x+1/2,z+1/4"," 4-(0,0,1/4) 3/8,1/8,z")),+  ((228,2),("-y,x+1/4,z+3/4"," 4+(0,0,3/4) -1/8,1/8,z")),+  ((228,2),("x+3/4,z+3/4,-y+1/2"," 4-(3/4,0,0) x,5/8,-1/8")),+  ((228,2),("-x,z+1/4,y+3/4"," 2 (0,1/2,1/2) 0,y-1/4,y")),+  ((228,2),("x+1/4,-z+1/2,y+1/4"," 4+(1/4,0,0) x,1/8,3/8")),+  ((228,2),("z+3/4,y+3/4,-x+1/2"," 4+(0,3/4,0) 5/8,y,-1/8")),+  ((228,2),("z+1/4,-y+1/2,x+1/4"," 2 (1/4,0,1/4) x,1/4,x")),+  ((228,2),("-z,y+1/4,x+3/4"," 4-(0,1/4,0) -3/8,y,3/8")),+  ((228,2),("-y+1/4,-x+1/4,z+1/2"," c  x+1/4,-x,z")),+  ((228,2),("-y+3/4,x+1/2,-z+3/4","-4- 1/8,5/8,z; 1/8,5/8,3/8")),+  ((228,2),("y,-x+3/4,-z+1/4","-4+ 3/8,3/8,z; 3/8,3/8,1/8")),+  ((228,2),("-x+1/4,-z+1/4,y+1/2","-4- x,-1/8,3/8; 1/8,-1/8,3/8")),+  ((228,2),("x,-z+3/4,-y+1/4"," g (0,1/4,-1/4) x,y+1/2,-y")),+  ((228,2),("-x+3/4,z+1/2,-y+3/4","-4+ x,5/8,1/8; 3/8,5/8,1/8")),+  ((228,2),("-z+1/4,-y+1/4,x+1/2","-4+ -1/8,y,3/8; -1/8,1/8,3/8")),+  ((228,2),("-z+3/4,y+1/2,-x+3/4"," b  -x+3/4,y,x")),+  ((228,2),("z,-y+3/4,-x+1/4","-4- 1/8,y,1/8; 1/8,3/8,1/8")),+  ((228,2),("y+1/4,x+1/4,-z+1/2"," 2 (1/4,1/4,0) x,x,1/4")),+  ((228,2),("y+3/4,-x,z+1/4"," 4-(0,0,1/4) 3/8,-3/8,z")),+  ((228,2),("-y+1/2,x+3/4,z+3/4"," 4+(0,0,3/4) -1/8,5/8,z")),+  ((228,2),("x+1/4,z+1/4,-y+1/2"," 4-(1/4,0,0) x,3/8,1/8")),+  ((228,2),("-x+1/2,z+3/4,y+3/4"," 2 (0,3/4,3/4) 1/4,y,y")),+  ((228,2),("x+3/4,-z,y+1/4"," 4+(3/4,0,0) x,-1/8,1/8")),+  ((228,2),("z+1/4,y+1/4,-x+1/2"," 4+(0,1/4,0) 3/8,y,1/8")),+  ((228,2),("z+3/4,-y,x+1/4"," 2 (1/2,0,1/2) x+1/4,0,x")),+  ((228,2),("-z+1/2,y+3/4,x+3/4"," 4-(0,3/4,0) -1/8,y,5/8")),+  ((228,2),("-y+3/4,-x+3/4,z+1/2"," c  x+3/4,-x,z")),+  ((228,2),("-y+1/4,x,-z+3/4","-4- 1/8,1/8,z; 1/8,1/8,3/8")),+  ((228,2),("y+1/2,-x+1/4,-z+1/4","-4+ 3/8,-1/8,z; 3/8,-1/8,1/8")),+  ((228,2),("-x+3/4,-z+3/4,y+1/2","-4- x,1/8,5/8; 3/8,1/8,5/8")),+  ((228,2),("x+1/2,-z+1/4,-y+1/4"," a  x,y+1/4,-y")),+  ((228,2),("-x+1/4,z,-y+3/4","-4+ x,3/8,3/8; 1/8,3/8,3/8")),+  ((228,2),("-z+3/4,-y+3/4,x+1/2","-4+ 1/8,y,5/8; 1/8,3/8,5/8")),+  ((228,2),("-z+1/4,y,-x+3/4"," g (-1/4,0,1/4) -x+1/2,y,x")),+  ((228,2),("z+1/2,-y+1/4,-x+1/4","-4- 3/8,y,-1/8; 3/8,1/8,-1/8")),+  ((228,2),("y+1/4,x+3/4,-z"," 2 (1/2,1/2,0) x,x+1/4,0")),+  ((228,2),("y+3/4,-x+1/2,z+3/4"," 4-(0,0,3/4) 5/8,-1/8,z")),+  ((228,2),("-y+1/2,x+1/4,z+1/4"," 4+(0,0,1/4) 1/8,3/8,z")),+  ((228,2),("x+1/4,z+3/4,-y"," 4-(1/4,0,0) x,3/8,-3/8")),+  ((228,2),("-x+1/2,z+1/4,y+1/4"," 2 (0,1/4,1/4) 1/4,y,y")),+  ((228,2),("x+3/4,-z+1/2,y+3/4"," 4+(3/4,0,0) x,-1/8,5/8")),+  ((228,2),("z+1/4,y+3/4,-x"," 4+(0,3/4,0) 1/8,y,-1/8")),+  ((228,2),("z+3/4,-y+1/2,x+3/4"," 2 (3/4,0,3/4) x,1/4,x")),+  ((228,2),("-z+1/2,y+1/4,x+1/4"," 4-(0,1/4,0) 1/8,y,3/8")),+  ((228,2),("-y+3/4,-x+1/4,z"," g (1/4,-1/4,0) x+1/2,-x,z")),+  ((228,2),("-y+1/4,x+1/2,-z+1/4","-4- -1/8,3/8,z; -1/8,3/8,1/8")),+  ((228,2),("y+1/2,-x+3/4,-z+3/4","-4+ 5/8,1/8,z; 5/8,1/8,3/8")),+  ((228,2),("-x+3/4,-z+1/4,y","-4- x,1/8,1/8; 3/8,1/8,1/8")),+  ((228,2),("x+1/2,-z+3/4,-y+3/4"," a  x,y+3/4,-y")),+  ((228,2),("-x+1/4,z+1/2,-y+1/4","-4+ x,3/8,-1/8; 1/8,3/8,-1/8")),+  ((228,2),("-z+3/4,-y+1/4,x","-4+ 3/8,y,3/8; 3/8,1/8,3/8")),+  ((228,2),("-z+1/4,y+1/2,-x+1/4"," b  -x+1/4,y,x")),+  ((228,2),("z+1/2,-y+3/4,-x+3/4","-4- 5/8,y,1/8; 5/8,3/8,1/8"))+  ]
+ test/doctests.hs view
@@ -0,0 +1,9 @@+module Main (main) where++import Test.DocTest++main :: IO ()+main = doctest [+  "src/Data/Matrix/SymmetryOperationsSymbols.hs"+  -- ,"src/Data/Matrix/SymmetryOperationsSymbol/Common.hs"+  ]