Module Expr Str ImportFrom alias alias ImportFrom alias ImportFrom alias identifier alias identifier ImportFrom alias alias ImportFrom alias ImportFrom alias ImportFrom alias ImportFrom alias ImportFrom alias FunctionDef arguments args NameParam NameParam NameParam defaults NameLoad body Expr Str Assign NameStore Call NameLoad NameLoad keyword AttributeLoad NameLoad attr Assign NameStore AttributeLoad NameLoad attr For TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad body Assign NameStore BinOpFloorDiv NameLoad NameLoad Assign TupleStore NameStore NameStore NameStore Call AttributeLoad NameLoad attr NameLoad NameLoad AugAssignAdd NameStore BinOpMult NameLoad BinOpMod BinOpMult NameLoad NameLoad NameLoad Return BinOpMod NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore TupleLoad ListLoad ListLoad Assign NameStore Call NameLoad NameLoad keyword AttributeLoad NameLoad attr For NameStore NameLoad body Expr Call AttributeLoad NameLoad attr BinOpFloorDiv NameLoad NameLoad Expr Call AttributeLoad NameLoad attr BinOpMod SubscriptLoad Call AttributeLoad NameLoad attr SubscriptLoad NameLoad Index Num NameLoad Index Num NameLoad Return TupleLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore AttributeLoad NameLoad attr For TupleStore NameStore NameStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad body AugAssignAdd NameStore BinOpMult NameLoad BinOpMod BinOpMult NameLoad NameLoad NameLoad Return BinOpMod NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str If CompareLtE NameLoad BinOpFloorDiv NameLoad Num body Return NameLoad orelse Return BinOpSub NameLoad NameLoad decorator_list FunctionDef arguments args NameParam defaults body Expr Str Return BinOpSub Call NameLoad NameLoad Num decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return AttributeLoad NameLoad attr orelse Return SubscriptLoad NameLoad Index Num decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return AttributeLoad NameLoad attr orelse Return SubscriptLoad NameLoad Index Num decorator_list FunctionDef arguments args NameParam defaults body Expr Str If BoolOpOr UnaryOpNot NameLoad SubscriptLoad NameLoad Index Num body Return NameLoad Assign NameStore Num For NameStore NameLoad body If NameLoad body Break orelse AugAssignAdd NameStore Num Return SubscriptLoad NameLoad Slice NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str Return Call NameLoad ListComp BinOpMod NameLoad NameLoad comprehension NameStore NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Return Call NameLoad Call NameLoad Call NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore TupleLoad Call NameLoad Call AttributeLoad NameLoad attr ListLoad If Call NameLoad NameLoad NameLoad body For NameStore Call NameLoad NameLoad Num Num body Expr Call AttributeLoad NameLoad attr BinOpMod Call AttributeLoad NameLoad attr NameLoad AttributeLoad NameLoad attr NameLoad orelse Assign TupleStore NameStore NameLoad For NameStore Call NameLoad NameLoad Num Num body Expr Call AttributeLoad NameLoad attr BinOpMod Call AttributeLoad NameLoad attr TupleLoad NameLoad AttributeLoad NameLoad attr NameLoad Return Call NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults NameLoad body Expr Str Assign TupleStore NameStore NameStore TupleLoad Call NameLoad NameLoad Dict For NameStore Call NameLoad Num BinOpAdd NameLoad Num body If NameLoad body Assign NameStore Call NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad NameLoad orelse Assign NameStore SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad If NameLoad body Assign SubscriptStore NameLoad Index NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str Return Call NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults NameLoad body Expr Str If NameLoad body Return ListComp Call NameLoad NameLoad NameLoad comprehension NameStore NameLoad orelse Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Return ListComp BinOpMod UnaryOpUSub NameLoad NameLoad comprehension NameStore NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Assign NameStore BinOpMod NameLoad NameLoad orelse Assign NameStore BinOpMod BinOpAdd SubscriptLoad NameLoad Index Num NameLoad NameLoad If CompareGt Call NameLoad NameLoad Num body Return BinOpAdd SubscriptLoad NameLoad Slice Num ListLoad NameLoad If UnaryOpNot NameLoad body Return ListLoad orelse Return ListLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Assign NameStore BinOpMod UnaryOpUSub NameLoad NameLoad orelse Assign NameStore BinOpMod BinOpSub SubscriptLoad NameLoad Index Num NameLoad NameLoad If CompareGt Call NameLoad NameLoad Num body Return BinOpAdd SubscriptLoad NameLoad Slice Num ListLoad NameLoad If UnaryOpNot NameLoad body Return ListLoad orelse Return ListLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return ListLoad orelse Return ListComp BinOpMod BinOpMult NameLoad NameLoad NameLoad comprehension NameStore NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str Return Call NameLoad NameLoad Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return NameLoad If UnaryOpNot NameLoad body Return NameLoad Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad If CompareEq NameLoad NameLoad body Return Call NameLoad ListComp BinOpMod BinOpAdd NameLoad NameLoad NameLoad comprehension TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad orelse Assign NameStore Call NameLoad BinOpSub NameLoad NameLoad If CompareGt NameLoad NameLoad body Assign TupleStore NameStore NameStore TupleLoad SubscriptLoad NameLoad Slice NameLoad SubscriptLoad NameLoad Slice NameLoad orelse Assign TupleStore NameStore NameStore TupleLoad SubscriptLoad NameLoad Slice NameLoad SubscriptLoad NameLoad Slice NameLoad Return BinOpAdd NameLoad ListComp BinOpMod BinOpAdd NameLoad NameLoad NameLoad comprehension TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return NameLoad If UnaryOpNot NameLoad body Return Call NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad If CompareEq NameLoad NameLoad body Return Call NameLoad ListComp BinOpMod BinOpSub NameLoad NameLoad NameLoad comprehension TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad orelse Assign NameStore Call NameLoad BinOpSub NameLoad NameLoad If CompareGt NameLoad NameLoad body Assign TupleStore NameStore NameStore TupleLoad SubscriptLoad NameLoad Slice NameLoad SubscriptLoad NameLoad Slice NameLoad orelse Assign TupleStore NameStore NameStore TupleLoad Call NameLoad SubscriptLoad NameLoad Slice NameLoad NameLoad NameLoad SubscriptLoad NameLoad Slice NameLoad Return BinOpAdd NameLoad ListComp BinOpMod BinOpSub NameLoad NameLoad NameLoad comprehension TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Assign NameStore BinOpAdd NameLoad NameLoad Assign NameStore BinOpMult ListLoad Num BinOpAdd NameLoad Num For NameStore Call NameLoad Num BinOpAdd NameLoad Num body Assign NameStore AttributeLoad NameLoad attr For NameStore Call NameLoad Call NameLoad Num BinOpSub NameLoad NameLoad BinOpAdd Call NameLoad NameLoad NameLoad Num body AugAssignAdd NameStore BinOpMult SubscriptLoad NameLoad Index NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad Assign SubscriptStore NameLoad Index NameLoad BinOpMod NameLoad NameLoad Return Call NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad Assign NameStore BinOpMult Num NameLoad Assign NameStore BinOpMult ListLoad Num BinOpAdd NameLoad Num For NameStore Call NameLoad Num BinOpAdd NameLoad Num body Assign NameStore AttributeLoad NameLoad attr Assign NameStore Call NameLoad Num BinOpSub NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad Assign NameStore BinOpAdd BinOpSub NameLoad NameLoad Num Assign NameStore BinOpSub BinOpAdd NameLoad BinOpFloorDiv NameLoad Num Num For NameStore Call NameLoad NameLoad BinOpAdd NameLoad Num body AugAssignAdd NameStore BinOpMult SubscriptLoad NameLoad Index NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad AugAssignAdd NameStore NameLoad If BinOpBitAnd NameLoad Num body Assign NameStore SubscriptLoad NameLoad Index BinOpAdd NameLoad Num AugAssignAdd NameStore BinOpPow NameLoad Num Assign SubscriptStore NameLoad Index NameLoad BinOpMod NameLoad NameLoad Return Call NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Return Call NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Return Call NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str If CompareIs Call NameLoad NameLoad NameLoad body Assign TupleStore NameStore NameStore NameLoad orelse Assign NameStore AttributeLoad NameLoad attr Assign NameStore ListLoad NameLoad For TupleStore NameStore NameStore NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad If UnaryOpNot NameLoad body Raise Call NameLoad Str orelse If CompareLt NameLoad NameLoad body Return TupleLoad ListLoad NameLoad Assign NameStore Call AttributeLoad NameLoad attr SubscriptLoad NameLoad Index Num NameLoad Assign TupleStore NameStore NameStore NameStore TupleLoad Call NameLoad NameLoad BinOpSub NameLoad NameLoad BinOpSub NameLoad Num For NameStore Call NameLoad Num BinOpAdd NameLoad Num body Assign NameStore SubscriptLoad NameLoad Index NameLoad For NameStore Call NameLoad Call NameLoad Num BinOpSub NameLoad NameLoad BinOpAdd Call NameLoad BinOpSub NameLoad NameLoad NameLoad Num body AugAssignSub NameStore BinOpMult SubscriptLoad NameLoad Index BinOpSub BinOpAdd NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad If CompareLtE NameLoad NameLoad body AugAssignMult NameStore NameLoad Assign SubscriptStore NameLoad Index NameLoad BinOpMod NameLoad NameLoad Return TupleLoad SubscriptLoad NameLoad Slice BinOpAdd NameLoad Num Call NameLoad SubscriptLoad NameLoad Slice BinOpAdd NameLoad Num decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str Return SubscriptLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad Index Num decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad If UnaryOpNot NameLoad body Raise Call NameLoad Str orelse If CompareLt NameLoad NameLoad body Return ListLoad Assign NameStore Call AttributeLoad NameLoad attr SubscriptLoad NameLoad Index Num NameLoad Assign TupleStore NameStore NameStore NameStore TupleLoad SubscriptLoad NameLoad Slice BinOpSub NameLoad NameLoad BinOpSub NameLoad Num For NameStore Call NameLoad Num BinOpAdd NameLoad Num body Assign NameStore SubscriptLoad NameLoad Index NameLoad For NameStore Call NameLoad Call NameLoad Num BinOpSub NameLoad NameLoad BinOpAdd Call NameLoad BinOpSub NameLoad NameLoad NameLoad Num body AugAssignSub NameStore BinOpMult SubscriptLoad NameLoad Index BinOpSub BinOpAdd NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad Assign SubscriptStore NameLoad Index NameLoad BinOpMod BinOpMult NameLoad NameLoad NameLoad Return SubscriptLoad NameLoad Slice BinOpAdd NameLoad Num decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad If UnaryOpNot NameLoad body Return NameLoad orelse Raise Call NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return NameLoad orelse Return BinOpAdd NameLoad BinOpMult ListLoad AttributeLoad NameLoad attr NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return TupleLoad NameLoad ListLoad orelse Return TupleLoad SubscriptLoad NameLoad Slice UnaryOpUSub NameLoad SubscriptLoad NameLoad Slice UnaryOpUSub NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return ListLoad AttributeLoad NameLoad attr orelse If CompareEq NameLoad Num body Return NameLoad orelse If CompareEq NameLoad Num body Return Call NameLoad NameLoad NameLoad NameLoad Assign NameStore ListLoad AttributeLoad NameLoad attr While NameLoad body If BinOpBitAnd NameLoad Num body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad AugAssignSub NameStore Num AugAssignRShift NameStore Num If UnaryOpNot NameLoad body Break Assign NameStore Call NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad If CompareEq NameLoad Num body Return ListLoad Assign NameStore BinOpMult ListLoad Num NameLoad Assign SubscriptStore NameLoad Index Num ListLoad Num If CompareLt NameLoad NameLoad body For NameStore Call NameLoad Num NameLoad body Assign NameStore Call NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad Num NameLoad NameLoad Assign SubscriptStore NameLoad Index NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad orelse If CompareGt NameLoad Num body Assign SubscriptStore NameLoad Index Num Call NameLoad ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad For NameStore Call NameLoad Num NameLoad body Assign SubscriptStore NameLoad Index NameLoad Call NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad Num SubscriptLoad NameLoad Index Num NameLoad NameLoad Assign SubscriptStore NameLoad Index NameLoad Call NameLoad SubscriptLoad NameLoad Index NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad If CompareGtE Call NameLoad NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad If UnaryOpNot NameLoad body Return ListLoad Assign NameStore Call NameLoad NameLoad Assign NameStore ListLoad SubscriptLoad NameLoad Index Num For NameStore Call NameLoad Num BinOpAdd NameLoad Num body Assign NameStore Call NameLoad SubscriptLoad NameLoad Index NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore NameLoad Assign NameStore NameLoad For NameStore Call NameLoad Num NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad BinOpFloorDiv BinOpSub NameLoad Num Num NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return ListLoad AttributeLoad NameLoad attr orelse If CompareEq NameLoad Num body Return Call NameLoad NameLoad NameLoad NameLoad NameLoad orelse If CompareEq NameLoad Num body Return Call NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore ListLoad AttributeLoad NameLoad attr While NameLoad body If BinOpBitAnd NameLoad Num body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad AugAssignSub NameStore Num AugAssignRShift NameStore Num If UnaryOpNot NameLoad body Break Assign NameStore Call NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str While NameLoad body Assign TupleStore NameStore NameStore TupleLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad Return SubscriptLoad Call NameLoad NameLoad NameLoad NameLoad Index Num decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str If BoolOpOr UnaryOpNot NameLoad UnaryOpNot NameLoad body Return ListLoad Assign NameStore Call NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Return SubscriptLoad Call NameLoad NameLoad NameLoad NameLoad Index Num decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str If BoolOpAnd UnaryOpNot NameLoad UnaryOpNot NameLoad body Return TupleLoad ListLoad ListLoad ListLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return TupleLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot BoolOpOr NameLoad NameLoad body Return TupleLoad ListLoad AttributeLoad NameLoad attr ListLoad ListLoad Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad If UnaryOpNot NameLoad body Return TupleLoad ListLoad ListLoad Call AttributeLoad NameLoad attr NameLoad NameLoad NameLoad If UnaryOpNot NameLoad body Return TupleLoad ListLoad Call AttributeLoad NameLoad attr NameLoad NameLoad ListLoad NameLoad Assign TupleStore NameStore NameStore TupleLoad ListLoad Call AttributeLoad NameLoad attr NameLoad NameLoad ListLoad Assign TupleStore NameStore NameStore TupleLoad ListLoad ListLoad Call AttributeLoad NameLoad attr NameLoad NameLoad While NameLoad body Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad If UnaryOpNot NameLoad body Break Assign TupleStore TupleStore NameStore NameStore NameStore TupleLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call AttributeLoad NameLoad attr NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign TupleStore NameStore NameStore TupleLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign TupleStore NameStore NameStore TupleLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Return TupleLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return TupleLoad AttributeLoad NameLoad attr ListLoad orelse Assign NameStore SubscriptLoad NameLoad Index Num If Call AttributeLoad NameLoad attr NameLoad body Return TupleLoad NameLoad Call NameLoad NameLoad orelse Return TupleLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad Assign TupleStore NameStore NameStore TupleLoad BinOpMult ListLoad AttributeLoad NameLoad attr NameLoad NameLoad For NameStore SubscriptLoad NameLoad Slice Num body AugAssignMult NameStore Call NameLoad NameLoad AugAssignMod NameStore NameLoad If NameLoad body Assign SubscriptStore NameLoad Index BinOpSub NameLoad NameLoad NameLoad AugAssignSub NameStore Num Return Call NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore AttributeLoad NameLoad attr For NameStore NameLoad body AugAssignMult NameStore NameLoad AugAssignAdd NameStore NameLoad AugAssignMod NameStore NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str Return ListComp Call NameLoad NameLoad NameLoad NameLoad NameLoad comprehension NameStore NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str If CompareLtE Call NameLoad NameLoad Num body Return Call NameLoad ListLoad Call NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad If UnaryOpNot NameLoad body Return ListLoad Assign NameStore ListLoad SubscriptLoad NameLoad Index Num For NameStore SubscriptLoad NameLoad Slice Num body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam defaults body Expr Str If UnaryOpNot NameLoad body Return ListLoad Assign NameStore ListLoad SubscriptLoad NameLoad Index Num For NameStore SubscriptLoad NameLoad Slice Num body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore NameLoad If BinOpBitAnd NameLoad Num body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore NameLoad orelse Assign NameStore NameLoad Assign NameStore NameLoad AugAssignRShift NameStore Num While NameLoad body Assign NameStore Call NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad If BinOpBitAnd NameLoad Num body Assign NameStore Call NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad AugAssignRShift NameStore Num Return TupleLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore NameLoad Assign NameStore NameLoad For NameStore Call NameLoad Num NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Return BinOpAdd ListLoad AttributeLoad NameLoad attr ListComp Call NameLoad Call NameLoad Call NameLoad Num NameLoad comprehension NameStore Call NameLoad Num NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str While NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad If Call NameLoad NameLoad NameLoad NameLoad body Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad If CompareLtE NameLoad Num body Return NameLoad Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad If CompareLt NameLoad Num body Assign NameStore NameStore Call NameLoad ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad For NameStore Call NameLoad Num BinOpFloorDiv NameLoad Num body Assign NameStore Call NameLoad NameLoad ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr NameLoad NameLoad If CompareEq Call NameLoad NameLoad NameLoad NameLoad NameLoad ListLoad AttributeLoad NameLoad attr body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad orelse Return NameLoad orelse Assign NameStore Call NameLoad NameLoad NameLoad NameLoad Assign NameStore NameStore Call NameLoad ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad For NameStore Call NameLoad Num BinOpFloorDiv NameLoad Num body Assign NameStore Call NameLoad NameLoad ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr NameLoad NameLoad If CompareEq Call NameLoad NameLoad NameLoad NameLoad NameLoad ListLoad AttributeLoad NameLoad attr body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad orelse Return NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad If CompareLtE NameLoad Num body Return NameLoad Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad Assign NameStore ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr Assign NameStore SetComp BinOpFloorDiv NameLoad NameLoad comprehension NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad Assign NameStore SubscriptLoad NameLoad Index Num For NameStore Call NameLoad Num NameLoad body If CompareIn NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad If CompareNotEq Call NameLoad NameLoad NameLoad NameLoad NameLoad ListLoad AttributeLoad NameLoad attr body Return NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Return CompareEq NameLoad NameLoad decorator_list Assign NameStore Dict Str Str NameLoad NameLoad FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad Str If CompareIsNot NameLoad NameLoad body Assign NameStore Call SubscriptLoad NameLoad Index NameLoad NameLoad NameLoad NameLoad orelse Assign NameStore Call NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad If UnaryOpNot NameLoad body Return NameLoad orelse Return CompareEq Call NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad ListLoad AttributeLoad NameLoad attr decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad Assign NameStore ListLoad AttributeLoad NameLoad attr For TupleStore NameStore NameStore NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults NameLoad body Expr Str Assign TupleStore NameStore NameStore NameStore NameStore TupleLoad Num NameLoad ListLoad Call NameLoad NameLoad Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad If CompareLt Call NameLoad NameLoad Num body Return TupleLoad NameLoad ListLoad While NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad If CompareNotEq NameLoad ListLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Num While CompareNotEq NameLoad ListLoad AttributeLoad NameLoad attr body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad If CompareGt Call NameLoad NameLoad Num body Expr Call AttributeLoad NameLoad attr TupleLoad NameLoad BinOpMult NameLoad NameLoad Assign TupleStore NameStore NameStore NameStore TupleLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad BinOpAdd NameLoad Num If CompareEq NameLoad ListLoad AttributeLoad NameLoad attr body Assign NameStore NameLoad orelse Assign NameStore NameLoad If UnaryOpNot NameLoad body Assign NameStore BinOpFloorDiv Call NameLoad NameLoad NameLoad For NameStore Call NameLoad Num BinOpAdd NameLoad Num body Assign SubscriptStore NameLoad Index NameLoad SubscriptLoad NameLoad Index BinOpMult NameLoad NameLoad Assign TupleStore NameStore NameStore TupleLoad SubscriptLoad NameLoad Slice BinOpAdd NameLoad Num BinOpMult NameLoad NameLoad orelse Break If NameLoad body Raise Call NameLoad Str Return TupleLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore TupleLoad Call NameLoad NameLoad Call NameLoad NameLoad Assign NameStore BinOpAdd ListLoad AttributeLoad NameLoad attr BinOpMult ListLoad AttributeLoad NameLoad attr BinOpSub NameLoad Num Assign NameStore BinOpAdd ListLoad Call NameLoad NameLoad BinOpMult ListLoad ListLoad BinOpSub NameLoad Num For NameStore Call NameLoad Num BinOpAdd BinOpMult BinOpSub NameLoad Num NameLoad Num body Assign TupleStore NameStore NameStore TupleLoad ListLoad BinOpMod BinOpMult UnaryOpUSub SubscriptLoad NameLoad Index Num SubscriptLoad NameLoad Index Num NameLoad SubscriptLoad NameLoad Index Num For NameStore Call NameLoad Num NameLoad body Expr Call AttributeLoad NameLoad attr BinOpMod BinOpSub SubscriptLoad NameLoad Index BinOpSub NameLoad Num BinOpMult NameLoad SubscriptLoad NameLoad Index BinOpSub UnaryOpUSub NameLoad Num NameLoad If UnaryOpNot BinOpMod NameLoad NameLoad body Assign SubscriptStore NameLoad Index BinOpFloorDiv NameLoad NameLoad Call NameLoad NameLoad Assign NameStore NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore TupleLoad ListComp Call NameLoad NameLoad comprehension NameStore NameLoad Call NameLoad NameLoad For NameStore Call NameLoad Num NameLoad body Assign SubscriptStore SubscriptLoad NameLoad Index NameLoad Index NameLoad BinOpMod BinOpSub SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad AttributeLoad NameLoad attr NameLoad For NameStore Call NameLoad Num NameLoad body For NameStore Call NameLoad NameLoad NameLoad body If SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad body Break orelse Continue Assign NameStore Call AttributeLoad NameLoad attr SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad NameLoad For NameStore Call NameLoad Num NameLoad body Assign SubscriptStore SubscriptLoad NameLoad Index NameLoad Index NameLoad BinOpMod BinOpMult SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad NameLoad NameLoad For NameStore Call NameLoad Num NameLoad body Assign NameStore SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index NameLoad Index NameLoad SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index NameLoad Index NameLoad NameLoad For NameStore Call NameLoad Num NameLoad body If CompareNotEq NameLoad NameLoad body Assign NameStore SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad For NameStore Call NameLoad Num NameLoad body Assign SubscriptStore SubscriptLoad NameLoad Index NameLoad Index NameLoad BinOpMod BinOpSub SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad BinOpMult SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad NameLoad NameLoad For NameStore Call NameLoad Num NameLoad body For NameStore Call NameLoad Num NameLoad body If CompareEq NameLoad NameLoad body Assign SubscriptStore SubscriptLoad NameLoad Index NameLoad Index NameLoad BinOpMod BinOpSub AttributeLoad NameLoad attr SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad NameLoad orelse Assign SubscriptStore SubscriptLoad NameLoad Index NameLoad Index NameLoad BinOpMod UnaryOpUSub SubscriptLoad SubscriptLoad NameLoad Index NameLoad Index NameLoad NameLoad Assign NameStore ListLoad For NameStore NameLoad body If Call NameLoad NameLoad body Expr Call AttributeLoad NameLoad attr NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad For TupleStore NameStore NameStore Call NameLoad NameLoad body Assign SubscriptStore NameLoad Index NameLoad Call NameLoad Call NameLoad Call NameLoad NameLoad Assign NameStore ListLoad NameLoad For NameStore Call NameLoad Num Call NameLoad NameLoad body For NameStore Call NameLoad NameLoad body Assign NameStore AttributeLoad NameLoad attr While CompareLt NameLoad NameLoad body Assign NameStore Call NameLoad SubscriptLoad NameLoad Index NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad If BoolOpAnd CompareNotEq NameLoad ListLoad AttributeLoad NameLoad attr CompareNotEq NameLoad NameLoad body Expr Call AttributeLoad NameLoad attr NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Expr Call AttributeLoad NameLoad attr ListLoad NameLoad NameLoad If CompareEq Call NameLoad NameLoad Call NameLoad NameLoad body Return Call NameLoad NameLoad keyword NameLoad AugAssignAdd NameStore AttributeLoad NameLoad attr Return Call NameLoad NameLoad keyword NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore NameStore TupleLoad Num ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr ListLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad While CompareLtE BinOpMult Num NameLoad Call NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Call NameLoad NameLoad ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad If CompareNotEq NameLoad ListLoad AttributeLoad NameLoad attr body Expr Call AttributeLoad NameLoad attr TupleLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad AugAssignAdd NameStore Num If CompareNotEq NameLoad ListLoad AttributeLoad NameLoad attr body Return BinOpAdd NameLoad ListLoad TupleLoad NameLoad Call NameLoad NameLoad orelse Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore TupleLoad ListLoad NameLoad Call NameLoad NameLoad If CompareLtE Call NameLoad NameLoad NameLoad body Return NameLoad Assign NameStore BinOpFloorDiv Call NameLoad NameLoad NameLoad If CompareNotEq NameLoad Num body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad While CompareLt Call NameLoad NameLoad NameLoad body Assign NameStore Call NameLoad BinOpSub BinOpMult Num NameLoad Num NameLoad NameLoad If CompareEq NameLoad Num body Assign NameStore NameLoad For NameStore Call NameLoad Num BinOpPow Num BinOpSub BinOpMult NameLoad NameLoad Num body Assign NameStore Call NameLoad NameLoad Num NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad orelse Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Call NameLoad NameLoad AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad If BoolOpAnd CompareNotEq NameLoad ListLoad AttributeLoad NameLoad attr CompareNotEq NameLoad NameLoad body Assign NameStore BinOpAdd Call NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Return Call NameLoad NameLoad keyword NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad Call NameLoad Call NameLoad BinOpFloorDiv NameLoad Num Assign NameStore Call NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad Assign NameStore BinOpAdd ListLoad ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr NameLoad BinOpMult ListLoad AttributeLoad NameLoad attr BinOpSub NameLoad Num For NameStore Call NameLoad Num BinOpAdd NameLoad Num body Assign SubscriptStore NameLoad Index NameLoad Call NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad Num NameLoad NameLoad NameLoad NameLoad Assign TupleStore NameStore NameStore TupleLoad SubscriptLoad NameLoad Index NameLoad SubscriptLoad NameLoad Slice NameLoad Assign NameStore BinOpAdd ListLoad NameLoad BinOpMult ListLoad AttributeLoad NameLoad attr BinOpSub NameLoad Num For NameStore Call NameLoad Num NameLoad body Assign SubscriptStore NameLoad Index NameLoad Call NameLoad SubscriptLoad NameLoad Index BinOpSub NameLoad Num NameLoad NameLoad NameLoad NameLoad Assign NameStore ListLoad For TupleStore NameStore NameStore Call NameLoad NameLoad body Assign TupleStore NameStore NameStore TupleLoad ListLoad AttributeLoad NameLoad attr BinOpSub NameLoad Num For NameStore NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad For NameStore Call NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad If CompareNotEq NameLoad ListLoad AttributeLoad NameLoad attr body Expr Call AttributeLoad NameLoad attr TupleLoad NameLoad BinOpSub BinOpMult NameLoad BinOpAdd NameLoad Num NameLoad Assign TupleStore NameStore NameStore TupleLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad BinOpSub NameLoad Num If CompareNotEq NameLoad ListLoad AttributeLoad NameLoad attr body Expr Call AttributeLoad NameLoad attr TupleLoad NameLoad Call NameLoad NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore TupleLoad Call NameLoad NameLoad Call NameLoad NameLoad If UnaryOpNot NameLoad body Return ListLoad If CompareLtE NameLoad NameLoad body Return ListLoad NameLoad Assign TupleStore NameStore NameStore TupleLoad ListLoad NameLoad ListLoad AttributeLoad NameLoad attr AttributeLoad NameLoad attr Assign NameStore Call NameLoad BinOpSub NameLoad Num NameLoad NameLoad If CompareEq NameLoad Num body Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore SubscriptLoad Call NameLoad NameLoad NameLoad NameLoad BinOpSub NameLoad Num NameLoad NameLoad NameLoad Index Num Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore BinOpAdd Call NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad orelse Assign NameStore Call NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad BinOpFloorDiv BinOpSub NameLoad Num Num NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Call NameLoad NameLoad AttributeLoad NameLoad attr NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Assign NameStore BinOpAdd BinOpAdd Call NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad Call NameLoad NameLoad NameLoad NameLoad NameLoad Return Call NameLoad NameLoad keyword NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign NameStore ListLoad For TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad body AugAssignAdd NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return Call NameLoad NameLoad keyword NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign NameStore ListLoad For TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad body AugAssignAdd NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return Call NameLoad NameLoad keyword NameLoad decorator_list Assign NameStore Dict Str Str Str NameLoad NameLoad NameLoad FunctionDef arguments args NameParam NameParam NameParam NameParam defaults NameLoad body Expr Str Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad If CompareLt Call NameLoad NameLoad Num body Return TupleLoad NameLoad ListLoad Assign NameStore BoolOpOr NameLoad Call NameLoad Str If CompareIsNot NameLoad NameLoad body Assign NameStore Call SubscriptLoad NameLoad Index NameLoad NameLoad NameLoad NameLoad orelse Assign NameStore Call NameLoad NameLoad NameLoad NameLoad Return TupleLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str Assign TupleStore NameStore NameStore Call NameLoad NameLoad NameLoad NameLoad If CompareLt Call NameLoad NameLoad Num body Return TupleLoad NameLoad ListLoad Assign NameStore ListLoad For TupleStore NameStore NameStore SubscriptLoad Call NameLoad NameLoad NameLoad NameLoad Index Num body For NameStore SubscriptLoad Call NameLoad NameLoad NameLoad NameLoad Index Num body Expr Call AttributeLoad NameLoad attr TupleLoad NameLoad NameLoad Return TupleLoad NameLoad Call NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str Assign NameStore Num For NameStore NameLoad body AugAssignMult NameStore NameLoad AugAssignAdd NameStore NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body Expr Str ImportFrom alias If CompareEq BinOpMod NameLoad NameLoad Num body If CompareEq BinOpMod NameLoad NameLoad Num body Return Call NameLoad Call NameLoad NameLoad orelse Return ListLoad Assign TupleStore NameStore NameStore NameStore Call NameLoad NameLoad NameLoad If CompareNotEq BinOpMod NameLoad NameLoad Num body Return ListLoad Return ListComp BinOpMod BinOpAdd BinOpFloorDiv BinOpMult NameLoad NameLoad NameLoad BinOpFloorDiv BinOpMult NameLoad NameLoad NameLoad NameLoad comprehension NameStore Call NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam defaults body Expr Str ImportFrom alias Assign NameStore Call NameLoad NameLoad NameLoad NameLoad Assign NameStore Call NameLoad NameLoad NameLoad Assign NameStore BinOpFloorDiv UnaryOpUSub Call NameLoad NameLoad NameLoad BinOpPow NameLoad NameLoad Return Call NameLoad NameLoad NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults Num body Expr Str ImportFrom alias Assign NameStore ListComp NameLoad comprehension NameStore Call NameLoad NameLoad CompareEq Call NameLoad NameLoad NameLoad NameLoad NameLoad Num If CompareEq NameLoad Num body Return NameLoad Assign NameStore ListLoad Assign NameStore Call NameLoad Call NameLoad NameLoad BinOpMult ListLoad Num Call NameLoad NameLoad While NameLoad body Assign TupleStore NameStore NameStore Call AttributeLoad NameLoad attr If CompareEq NameLoad NameLoad body Expr Call AttributeLoad NameLoad attr NameLoad orelse Assign NameStore BinOpAdd NameLoad Num Assign NameStore BinOpPow NameLoad NameLoad Expr Call AttributeLoad NameLoad attr ListComp TupleLoad BinOpAdd NameLoad BinOpMult NameLoad NameLoad NameLoad comprehension NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad Return Call NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str ImportFrom alias Assign NameStore Call NameLoad NameLoad Assign NameStore ListComp Call NameLoad NameLoad NameLoad NameLoad comprehension TupleStore NameStore NameStore Call AttributeLoad NameLoad attr Assign NameStore Call NameLoad Call NameLoad NameLoad NameLoad Assign NameStore ListLoad ListLoad For NameStore NameLoad body Assign NameStore ListComp BinOpAdd NameLoad ListLoad NameLoad comprehension NameStore NameLoad comprehension NameStore NameLoad Assign NameStore ListComp Call NameLoad NameLoad NameLoad comprehension TupleStore NameStore NameStore Call AttributeLoad NameLoad attr Return Call NameLoad ListComp Call NameLoad NameLoad NameLoad NameLoad comprehension NameStore NameLoad decorator_list
N/A N/A Dense univariate polynomials with coefficients in Galois fields.  __future__ print_function division random uniform math ceil _ceil sqrt _sqrt sympy.core.compatibility SYMPY_INTS range sympy.core.mul prod sympy.polys.polyutils _sort_factors sympy.polys.polyconfig query sympy.polys.polyerrors ExactQuotientFailed sympy.ntheory factorint gf_crt N/A N/A U M K N/A None N/A N/A 
    Chinese Remainder Theorem.

    Given a set of integer residues ``u_0,...,u_n`` and a set of
    co-prime integer moduli ``m_0,...,m_n``, returns an integer
    ``u``, such that ``u = u_i mod m_i`` for ``i = ``0,...,n``.

    As an example consider a set of residues ``U = [49, 76, 65]``
    and a set of moduli ``M = [99, 97, 95]``. Then we have::

       >>> from sympy.polys.domains import ZZ
       >>> from sympy.polys.galoistools import gf_crt
       >>> from sympy.ntheory.modular import solve_congruence

       >>> gf_crt([49, 76, 65], [99, 97, 95], ZZ)
       639985

    This is the correct result because::

       >>> [639985 % m for m in [99, 97, 95]]
       [49, 76, 65]

    Note: this is a low-level routine with no error checking.

    See Also
    ========

    sympy.ntheory.modular.crt : a higher level crt routine
    sympy.ntheory.modular.solve_congruence

     N/A p N/A prod M start N/A K one N/A v N/A K zero N/A N/A u m N/A zip U M N/A N/A e N/A p m N/A N/A s _ _ N/A N/A K gcdex e m N/A v N/A e N/A N/A u s m N/A N/A v p N/A gf_crt1 N/A N/A M K N/A N/A N/A 
    First part of the Chinese Remainder Theorem.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_crt1

    >>> gf_crt1([99, 97, 95], ZZ)
    (912285, [9215, 9405, 9603], [62, 24, 12])

     N/A N/A E S N/A N/A N/A N/A p N/A prod M start N/A K one N/A m M N/A N/A N/A N/A E append N/A p m N/A N/A N/A S append N/A N/A N/A N/A K gcdex N/A E N/A -1 m N/A 0 m N/A N/A p E S N/A gf_crt2 N/A N/A U M p E S K N/A N/A N/A 
    Second part of the Chinese Remainder Theorem.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_crt2

    >>> U = [49, 76, 65]
    >>> M = [99, 97, 95]
    >>> p = 912285
    >>> E = [9215, 9405, 9603]
    >>> S = [62, 24, 12]

    >>> gf_crt2(U, M, p, E, S, ZZ)
    639985

     N/A v N/A K zero N/A N/A u m e s N/A zip U M E S N/A N/A v N/A e N/A N/A u s m N/A N/A v p N/A gf_int N/A N/A a p N/A N/A N/A 
    Coerce ``a mod p`` to an integer in the range ``[-p/2, p/2]``.

    Examples
    ========

    >>> from sympy.polys.galoistools import gf_int

    >>> gf_int(2, 7)
    2
    >>> gf_int(5, 7)
    -2

     N/A N/A a N/A p 2 N/A N/A a N/A N/A N/A a p N/A gf_degree N/A N/A f N/A N/A N/A 
    Return the leading degree of ``f``.

    Examples
    ========

    >>> from sympy.polys.galoistools import gf_degree

    >>> gf_degree([1, 1, 2, 0])
    3
    >>> gf_degree([])
    -1

     N/A N/A N/A len f 1 N/A gf_LC N/A N/A f K N/A N/A N/A 
    Return the leading coefficient of ``f``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_LC

    >>> gf_LC([3, 0, 1], ZZ)
    3

     N/A N/A f N/A N/A N/A K zero N/A N/A N/A f N/A 0 N/A gf_TC N/A N/A f K N/A N/A N/A 
    Return the trailing coefficient of ``f``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_TC

    >>> gf_TC([3, 0, 1], ZZ)
    1

     N/A N/A f N/A N/A N/A K zero N/A N/A N/A f N/A -1 N/A gf_strip N/A N/A f N/A N/A N/A 
    Remove leading zeros from ``f``.


    Examples
    ========

    >>> from sympy.polys.galoistools import gf_strip

    >>> gf_strip([0, 0, 0, 3, 0, 1])
    [3, 0, 1]

     N/A N/A N/A f N/A f N/A 0 N/A N/A f N/A k 0 N/A coeff f N/A N/A coeff N/A N/A N/A N/A k 1 N/A N/A f N/A k N/A gf_trunc N/A N/A f p N/A N/A N/A 
    Reduce all coefficients modulo ``p``.

    Examples
    ========

    >>> from sympy.polys.galoistools import gf_trunc

    >>> gf_trunc([7, -2, 3], 5)
    [2, 3, 3]

     N/A N/A gf_strip N/A N/A a p N/A a f N/A gf_normal N/A N/A f p K N/A N/A N/A 
    Normalize all coefficients in ``K``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_normal

    >>> gf_normal([5, 10, 21, -3], 5, ZZ)
    [1, 2]

     N/A N/A gf_trunc N/A list N/A map K f p N/A gf_from_dict N/A N/A f p K N/A N/A N/A 
    Create a ``GF(p)[x]`` polynomial from a dict.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_from_dict

    >>> gf_from_dict({10: ZZ(4), 4: ZZ(33), 0: ZZ(-1)}, 5, ZZ)
    [4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4]

     N/A N/A n h N/A N/A max N/A N/A f keys N/A N/A N/A isinstance n SYMPY_INTS N/A N/A k N/A range n -1 -1 N/A N/A N/A N/A h append N/A N/A N/A f get k N/A K zero p N/A N/A N/A n n N/A k N/A range n -1 -1 N/A N/A N/A N/A h append N/A N/A N/A f get N/A k N/A K zero p N/A N/A gf_trunc h p N/A gf_to_dict N/A N/A f p symmetric N/A True N/A N/A 
    Convert a ``GF(p)[x]`` polynomial to a dict.

    Examples
    ========

    >>> from sympy.polys.galoistools import gf_to_dict

    >>> gf_to_dict([4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4], 5)
    {0: -1, 4: -2, 10: -1}
    >>> gf_to_dict([4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4], 5, symmetric=False)
    {0: 4, 4: 3, 10: 4}

     N/A N/A n result N/A N/A gf_degree f N/A N/A k N/A range 0 N/A n 1 N/A N/A symmetric N/A N/A a N/A gf_int N/A f N/A N/A n k p N/A N/A a N/A f N/A N/A n k N/A a N/A N/A N/A result N/A k a N/A result N/A gf_from_int_poly N/A N/A f p N/A N/A N/A 
    Create a ``GF(p)[x]`` polynomial from ``Z[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_from_int_poly

    >>> gf_from_int_poly([7, -2, 3], 5)
    [2, 3, 3]

     N/A N/A gf_trunc f p N/A gf_to_int_poly N/A N/A f p symmetric N/A True N/A N/A 
    Convert a ``GF(p)[x]`` polynomial to ``Z[x]``.


    Examples
    ========

    >>> from sympy.polys.galoistools import gf_to_int_poly

    >>> gf_to_int_poly([2, 3, 3], 5)
    [2, -2, -2]
    >>> gf_to_int_poly([2, 3, 3], 5, symmetric=False)
    [2, 3, 3]

     N/A symmetric N/A N/A N/A N/A gf_int c p N/A c f N/A N/A f N/A gf_neg N/A N/A f p K N/A N/A N/A 
    Negate a polynomial in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_neg

    >>> gf_neg([3, 2, 1, 0], 5, ZZ)
    [2, 3, 4, 0]

     N/A N/A N/A N/A coeff p N/A coeff f N/A gf_add_ground N/A N/A f a p K N/A N/A N/A 
    Compute ``f + a`` where ``f`` in ``GF(p)[x]`` and ``a`` in ``GF(p)``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_add_ground

    >>> gf_add_ground([3, 2, 4], 2, 5, ZZ)
    [3, 2, 1]

     N/A N/A f N/A N/A a N/A a p N/A N/A a N/A N/A N/A f N/A -1 a p N/A N/A N/A len f 1 N/A N/A N/A N/A f N/A -1 N/A a N/A N/A a N/A N/A N/A N/A N/A N/A a N/A gf_sub_ground N/A N/A f a p K N/A N/A N/A 
    Compute ``f - a`` where ``f`` in ``GF(p)[x]`` and ``a`` in ``GF(p)``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_sub_ground

    >>> gf_sub_ground([3, 2, 4], 2, 5, ZZ)
    [3, 2, 2]

     N/A N/A f N/A N/A a N/A N/A a p N/A N/A a N/A N/A N/A f N/A -1 a p N/A N/A N/A len f 1 N/A N/A N/A N/A f N/A -1 N/A a N/A N/A a N/A N/A N/A N/A N/A N/A a N/A gf_mul_ground N/A N/A f a p K N/A N/A N/A 
    Compute ``f * a`` where ``f`` in ``GF(p)[x]`` and ``a`` in ``GF(p)``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_mul_ground

    >>> gf_mul_ground([3, 2, 4], 2, 5, ZZ)
    [1, 4, 3]

     N/A N/A a N/A N/A N/A N/A N/A N/A N/A N/A a b p N/A b f N/A gf_quo_ground N/A N/A f a p K N/A N/A N/A 
    Compute ``f/a`` where ``f`` in ``GF(p)[x]`` and ``a`` in ``GF(p)``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_quo_ground

    >>> gf_quo_ground(ZZ.map([3, 2, 4]), ZZ(2), 5, ZZ)
    [4, 1, 2]

     N/A N/A gf_mul_ground f N/A N/A K invert a p p K N/A gf_add N/A N/A f g p K N/A N/A N/A 
    Add polynomials in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_add

    >>> gf_add([3, 2, 4], [2, 2, 2], 5, ZZ)
    [4, 1]

     N/A N/A f N/A N/A g N/A N/A g N/A N/A f N/A df N/A gf_degree f N/A dg N/A gf_degree g N/A N/A df dg N/A N/A N/A gf_strip N/A N/A N/A a b p N/A N/A a b N/A zip f g N/A N/A k N/A abs N/A df dg N/A N/A df dg N/A N/A N/A h f N/A N/A f N/A k N/A f N/A k N/A N/A N/A h g N/A N/A g N/A k N/A g N/A k N/A N/A h N/A N/A N/A a b p N/A N/A a b N/A zip f g N/A gf_sub N/A N/A f g p K N/A N/A N/A 
    Subtract polynomials in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_sub

    >>> gf_sub([3, 2, 4], [2, 2, 2], 5, ZZ)
    [1, 0, 2]

     N/A N/A g N/A N/A f N/A N/A f N/A N/A N/A gf_neg g p K N/A df N/A gf_degree f N/A dg N/A gf_degree g N/A N/A df dg N/A N/A N/A gf_strip N/A N/A N/A a b p N/A N/A a b N/A zip f g N/A N/A k N/A abs N/A df dg N/A N/A df dg N/A N/A N/A h f N/A N/A f N/A k N/A f N/A k N/A N/A N/A h g N/A N/A gf_neg N/A g N/A k p K N/A g N/A k N/A N/A h N/A N/A N/A a b p N/A N/A a b N/A zip f g N/A gf_mul N/A N/A f g p K N/A N/A N/A 
    Multiply polynomials in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_mul

    >>> gf_mul([3, 2, 4], [2, 2, 2], 5, ZZ)
    [1, 0, 3, 2, 3]

     N/A df N/A gf_degree f N/A dg N/A gf_degree g N/A dh N/A df dg N/A h N/A N/A 0 N/A dh 1 N/A i N/A range 0 N/A dh 1 N/A N/A coeff N/A K zero N/A j N/A range N/A max 0 N/A i dg N/A N/A min i df 1 N/A N/A coeff N/A N/A f N/A j N/A g N/A N/A i j N/A N/A h N/A i N/A coeff p N/A N/A gf_strip h N/A gf_sqr N/A N/A f p K N/A N/A N/A 
    Square polynomials in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_sqr

    >>> gf_sqr([3, 2, 4], 5, ZZ)
    [4, 2, 3, 1, 1]

     N/A df N/A gf_degree f N/A dh N/A 2 df N/A h N/A N/A 0 N/A dh 1 N/A i N/A range 0 N/A dh 1 N/A N/A coeff N/A K zero N/A jmin N/A max 0 N/A i df N/A jmax N/A min i df N/A n N/A N/A jmax jmin 1 N/A jmax N/A N/A jmin N/A n 2 1 N/A j N/A range jmin N/A jmax 1 N/A N/A coeff N/A N/A f N/A j N/A f N/A N/A i j N/A coeff coeff N/A N/A n 1 N/A N/A elem N/A f N/A N/A jmax 1 N/A coeff N/A elem 2 N/A N/A h N/A i N/A coeff p N/A N/A gf_strip h N/A gf_add_mul N/A N/A f g h p K N/A N/A N/A 
    Returns ``f + g*h`` where ``f``, ``g``, ``h`` in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_add_mul
    >>> gf_add_mul([3, 2, 4], [2, 2, 2], [1, 4], 5, ZZ)
    [2, 3, 2, 2]
     N/A N/A gf_add f N/A gf_mul g h p K p K N/A gf_sub_mul N/A N/A f g h p K N/A N/A N/A 
    Compute ``f - g*h`` where ``f``, ``g``, ``h`` in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_sub_mul

    >>> gf_sub_mul([3, 2, 4], [2, 2, 2], [1, 4], 5, ZZ)
    [3, 3, 2, 1]

     N/A N/A gf_sub f N/A gf_mul g h p K p K N/A gf_expand N/A N/A F p K N/A N/A N/A 
    Expand results of :func:`factor` in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_expand

    >>> gf_expand([([3, 2, 4], 1), ([2, 2], 2), ([3, 1], 3)], 5, ZZ)
    [4, 3, 0, 3, 0, 1, 4, 1]

     N/A N/A N/A type F tuple N/A N/A N/A lc F F N/A N/A lc N/A K one N/A g N/A lc N/A N/A f k F N/A N/A f N/A gf_pow f k p K N/A g N/A gf_mul g f p K N/A g N/A gf_div N/A N/A f g p K N/A N/A N/A 
    Division with remainder in ``GF(p)[x]``.

    Given univariate polynomials ``f`` and ``g`` with coefficients in a
    finite field with ``p`` elements, returns polynomials ``q`` and ``r``
    (quotient and remainder) such that ``f = q*g + r``.

    Consider polynomials ``x**3 + x + 1`` and ``x**2 + x`` in GF(2)::

       >>> from sympy.polys.domains import ZZ
       >>> from sympy.polys.galoistools import gf_div, gf_add_mul

       >>> gf_div(ZZ.map([1, 0, 1, 1]), ZZ.map([1, 1, 0]), 2, ZZ)
       ([1, 1], [1])

    As result we obtained quotient ``x + 1`` and remainder ``1``, thus::

       >>> gf_add_mul(ZZ.map([1]), ZZ.map([1, 1]), ZZ.map([1, 1, 0]), 2, ZZ)
       [1, 0, 1, 1]

    References
    ==========

    1. [Monagan93]_
    2. [Gathen99]_

     N/A df N/A gf_degree f N/A dg N/A gf_degree g N/A N/A g N/A N/A N/A ZeroDivisionError polynomial division N/A N/A N/A df dg N/A N/A N/A N/A f N/A inv N/A N/A K invert N/A g N/A 0 p N/A N/A h dq dr N/A N/A list f N/A df dg N/A dg 1 N/A i N/A range 0 N/A df 1 N/A N/A coeff N/A h N/A i N/A j N/A range N/A max 0 N/A dg i N/A N/A min N/A df i dr 1 N/A N/A coeff N/A N/A h N/A N/A N/A i j dg N/A g N/A N/A dg j N/A N/A i dq N/A N/A coeff inv N/A N/A h N/A i N/A coeff p N/A N/A N/A h N/A N/A dq 1 N/A gf_strip N/A h N/A N/A dq 1 N/A gf_rem N/A N/A f g p K N/A N/A N/A 
    Compute polynomial remainder in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_rem

    >>> gf_rem(ZZ.map([1, 0, 1, 1]), ZZ.map([1, 1, 0]), 2, ZZ)
    [1]

     N/A N/A N/A gf_div f g p K N/A 1 N/A gf_quo N/A N/A f g p K N/A N/A N/A 
    Compute exact quotient in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_quo

    >>> gf_quo(ZZ.map([1, 0, 1, 1]), ZZ.map([1, 1, 0]), 2, ZZ)
    [1, 1]
    >>> gf_quo(ZZ.map([1, 0, 3, 2, 3]), ZZ.map([2, 2, 2]), 5, ZZ)
    [3, 2, 4]

     N/A df N/A gf_degree f N/A dg N/A gf_degree g N/A N/A g N/A N/A N/A ZeroDivisionError polynomial division N/A N/A N/A df dg N/A N/A N/A N/A inv N/A N/A K invert N/A g N/A 0 p N/A N/A h dq dr N/A N/A f N/A N/A df dg N/A dg 1 N/A i N/A range 0 N/A dq 1 N/A N/A coeff N/A h N/A i N/A j N/A range N/A max 0 N/A dg i N/A N/A min N/A df i dr 1 N/A N/A coeff N/A N/A h N/A N/A N/A i j dg N/A g N/A N/A dg j N/A N/A h N/A i N/A N/A coeff inv p N/A N/A h N/A N/A dq 1 N/A gf_exquo N/A N/A f g p K N/A N/A N/A 
    Compute polynomial quotient in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_exquo

    >>> gf_exquo(ZZ.map([1, 0, 3, 2, 3]), ZZ.map([2, 2, 2]), 5, ZZ)
    [3, 2, 4]

    >>> gf_exquo(ZZ.map([1, 0, 1, 1]), ZZ.map([1, 1, 0]), 2, ZZ)
    Traceback (most recent call last):
    ...
    ExactQuotientFailed: [1, 1, 0] does not divide [1, 0, 1, 1]

     N/A N/A q r N/A gf_div f g p K N/A N/A r N/A N/A q N/A N/A N/A ExactQuotientFailed f g N/A gf_lshift N/A N/A f n K N/A N/A N/A 
    Efficiently multiply ``f`` by ``x**n``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_lshift

    >>> gf_lshift([3, 2, 4], 4, ZZ)
    [3, 2, 4, 0, 0, 0, 0]

     N/A N/A f N/A N/A f N/A N/A N/A f N/A N/A N/A K zero n N/A gf_rshift N/A N/A f n K N/A N/A N/A 
    Efficiently divide ``f`` by ``x**n``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_rshift

    >>> gf_rshift([1, 2, 3, 4, 0], 3, ZZ)
    ([1, 2], [3, 4, 0])

     N/A N/A n N/A N/A N/A f N/A N/A N/A N/A N/A f N/A N/A n N/A f N/A N/A n N/A gf_pow N/A N/A f n p K N/A N/A N/A 
    Compute ``f**n`` in ``GF(p)[x]`` using repeated squaring.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_pow

    >>> gf_pow([3, 2, 4], 3, 5, ZZ)
    [2, 4, 4, 2, 2, 1, 4]

     N/A N/A n N/A N/A N/A N/A K one N/A N/A N/A n 1 N/A N/A f N/A N/A N/A n 2 N/A N/A N/A gf_sqr f p K N/A h N/A N/A K one N/A True N/A N/A N/A n 1 N/A N/A h N/A gf_mul h f p K N/A n 1 N/A n 1 N/A N/A n N/A N/A N/A f N/A gf_sqr f p K N/A h N/A gf_frobenius_monomial_base N/A N/A g p K N/A N/A N/A 
    return the list of ``x**(i*p) mod g in Z_p`` for ``i = 0, .., n - 1``
    where ``n = gf_degree(g)``

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_frobenius_monomial_base
    >>> g = ZZ.map([1, 0, 2, 1])
    >>> gf_frobenius_monomial_base(g, 5, ZZ)
    [[1], [4, 4, 2], [1, 2]]

     N/A n N/A gf_degree g N/A N/A n 0 N/A N/A N/A N/A b N/A N/A 0 n N/A N/A b N/A 0 N/A 1 N/A N/A p n N/A N/A i N/A range 1 n N/A N/A mon N/A gf_lshift N/A b N/A N/A i 1 p K N/A N/A b N/A i N/A gf_rem mon g p K N/A N/A N/A n 1 N/A N/A N/A b N/A 1 N/A gf_pow_mod N/A N/A K one N/A K zero p g p K N/A i N/A range 2 n N/A N/A N/A b N/A i N/A gf_mul N/A b N/A N/A i 1 N/A b N/A 1 p K N/A N/A b N/A i N/A gf_rem N/A b N/A i g p K N/A b N/A gf_frobenius_map N/A N/A f g b p K N/A N/A N/A 
    compute gf_pow_mod(f, p, g, p, K) using the Frobenius map

    Parameters
    ==========

    f, g : polynomials in ``GF(p)[x]``
    b : frobenius monomial base
    p : prime number
    K : domain

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_frobenius_monomial_base, gf_frobenius_map
    >>> f = ZZ.map([2, 1 , 0, 1])
    >>> g = ZZ.map([1, 0, 2, 1])
    >>> p = 5
    >>> b = gf_frobenius_monomial_base(g, p, ZZ)
    >>> r = gf_frobenius_map(f, g, b, p, ZZ)
    >>> gf_frobenius_map(f, g, b, p, ZZ)
    [4, 0, 3]
     N/A m N/A gf_degree g N/A N/A N/A gf_degree f m N/A N/A f N/A gf_rem f g p K N/A N/A f N/A N/A N/A N/A n N/A gf_degree f N/A sf N/A N/A f N/A -1 N/A i N/A range 1 N/A n 1 N/A N/A v N/A gf_mul_ground N/A b N/A i N/A f N/A N/A n i p K N/A sf N/A gf_add sf v p K N/A sf N/A _gf_pow_pnm1d2 N/A N/A f n g b p K N/A N/A N/A 
    utility function for ``gf_edf_zassenhaus``
    Compute ``f**((p**n - 1) // 2)`` in ``GF(p)[x]/(g)``
    ``f**((p**n - 1) // 2) = (f*f**p*...*f**(p**n - 1))**((p - 1) // 2)``
     N/A f N/A gf_rem f g p K N/A h f N/A r f N/A i N/A range 1 n N/A N/A h N/A gf_frobenius_map h g b p K N/A r N/A gf_mul r h p K N/A r N/A gf_rem r g p K N/A res N/A gf_pow_mod r N/A N/A p 1 2 g p K N/A res N/A gf_pow_mod N/A N/A f n g p K N/A N/A N/A 
    Compute ``f**n`` in ``GF(p)[x]/(g)`` using repeated squaring.

    Given polynomials ``f`` and ``g`` in ``GF(p)[x]`` and a non-negative
    integer ``n``, efficiently computes ``f**n (mod g)`` i.e. the remainder
    of ``f**n`` from division by ``g``, using the repeated squaring algorithm.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_pow_mod

    >>> gf_pow_mod(ZZ.map([3, 2, 4]), 3, ZZ.map([1, 1]), 5, ZZ)
    []

    References
    ==========

    1. [Gathen99]_

     N/A N/A n N/A N/A N/A N/A K one N/A N/A N/A n 1 N/A N/A N/A gf_rem f g p K N/A N/A N/A n 2 N/A N/A N/A gf_rem N/A gf_sqr f p K g p K N/A h N/A N/A K one N/A True N/A N/A N/A n 1 N/A N/A h N/A gf_mul h f p K N/A h N/A gf_rem h g p K N/A n 1 N/A n 1 N/A N/A n N/A N/A N/A f N/A gf_sqr f p K N/A f N/A gf_rem f g p K N/A h N/A gf_gcd N/A N/A f g p K N/A N/A N/A 
    Euclidean Algorithm in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_gcd

    >>> gf_gcd(ZZ.map([3, 2, 4]), ZZ.map([2, 2, 3]), 5, ZZ)
    [1, 3]

     N/A g N/A N/A N/A f g N/A g N/A gf_rem f g p K N/A N/A N/A gf_monic f p K N/A 1 N/A gf_lcm N/A N/A f g p K N/A N/A N/A 
    Compute polynomial LCM in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_lcm

    >>> gf_lcm(ZZ.map([3, 2, 4]), ZZ.map([2, 2, 3]), 5, ZZ)
    [1, 2, 0, 4]

     N/A N/A N/A f N/A g N/A N/A N/A N/A h N/A gf_quo N/A gf_mul f g p K N/A gf_gcd f g p K p K N/A N/A N/A gf_monic h p K N/A 1 N/A gf_cofactors N/A N/A f g p K N/A N/A N/A 
    Compute polynomial GCD and cofactors in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_cofactors

    >>> gf_cofactors(ZZ.map([3, 2, 4]), ZZ.map([2, 2, 3]), 5, ZZ)
    ([1, 3], [3, 3], [2, 1])

     N/A N/A N/A f N/A g N/A N/A N/A N/A N/A N/A N/A h N/A gf_gcd f g p K N/A N/A h N/A gf_quo f h p K N/A gf_quo g h p K N/A gf_gcdex N/A N/A f g p K N/A N/A N/A 
    Extended Euclidean Algorithm in ``GF(p)[x]``.

    Given polynomials ``f`` and ``g`` in ``GF(p)[x]``, computes polynomials
    ``s``, ``t`` and ``h``, such that ``h = gcd(f, g)`` and ``s*f + t*g = h``.
    The typical application of EEA is solving polynomial diophantine equations.

    Consider polynomials ``f = (x + 7) (x + 1)``, ``g = (x + 7) (x**2 + 1)``
    in ``GF(11)[x]``. Application of Extended Euclidean Algorithm gives::

       >>> from sympy.polys.domains import ZZ
       >>> from sympy.polys.galoistools import gf_gcdex, gf_mul, gf_add

       >>> s, t, g = gf_gcdex(ZZ.map([1, 8, 7]), ZZ.map([1, 7, 1, 7]), 11, ZZ)
       >>> s, t, g
       ([5, 6], [6], [1, 7])

    As result we obtained polynomials ``s = 5*x + 6`` and ``t = 6``, and
    additionally ``gcd(f, g) = x + 7``. This is correct because::

       >>> S = gf_mul(s, ZZ.map([1, 8, 7]), 11, ZZ)
       >>> T = gf_mul(t, ZZ.map([1, 7, 1, 7]), 11, ZZ)

       >>> gf_add(S, T, 11, ZZ) == [1, 7]
       True

    References
    ==========

    1. [Gathen99]_

     N/A N/A N/A f g N/A N/A N/A N/A N/A K one N/A N/A N/A N/A p0 r0 N/A gf_monic f p K N/A N/A p1 r1 N/A gf_monic g p K N/A N/A f N/A N/A N/A N/A N/A N/A N/A K invert p1 p r1 N/A N/A g N/A N/A N/A N/A N/A N/A K invert p0 p N/A r0 N/A N/A s0 s1 N/A N/A N/A N/A K invert p0 p N/A N/A N/A t0 t1 N/A N/A N/A N/A N/A K invert p1 p N/A True N/A N/A N/A Q R N/A gf_div r0 r1 p K N/A N/A R N/A N/A N/A N/A N/A lc r1 r0 N/A N/A gf_monic R p K r1 N/A inv N/A N/A K invert lc p N/A s N/A gf_sub_mul s0 s1 Q p K N/A t N/A gf_sub_mul t0 t1 Q p K N/A N/A s1 s0 N/A N/A gf_mul_ground s inv p K s1 N/A N/A t1 t0 N/A N/A gf_mul_ground t inv p K t1 N/A N/A s1 t1 r1 N/A gf_monic N/A N/A f p K N/A N/A N/A 
    Compute LC and a monic polynomial in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_monic

    >>> gf_monic(ZZ.map([3, 2, 4]), 5, ZZ)
    (3, [1, 4, 3])

     N/A N/A f N/A N/A N/A N/A K zero N/A N/A N/A lc N/A f N/A 0 N/A N/A N/A K is_one lc N/A N/A N/A lc N/A list f N/A N/A N/A lc N/A gf_quo_ground f lc p K N/A gf_diff N/A N/A f p K N/A N/A N/A 
    Differentiate polynomial in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_diff

    >>> gf_diff([3, 2, 4], 5, ZZ)
    [1, 2]

     N/A df N/A gf_degree f N/A N/A h n N/A N/A N/A N/A K zero df df N/A coeff N/A f N/A -1 N/A N/A coeff N/A K n N/A coeff p N/A coeff N/A N/A N/A h N/A N/A df n coeff N/A n 1 N/A N/A gf_strip h N/A gf_eval N/A N/A f a p K N/A N/A N/A 
    Evaluate ``f(a)`` in ``GF(p)`` using Horner scheme.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_eval

    >>> gf_eval([3, 2, 4], 2, 5, ZZ)
    0

     N/A result N/A K zero N/A c f N/A N/A result a N/A result c N/A result p N/A result N/A gf_multi_eval N/A N/A f A p K N/A N/A N/A 
    Evaluate ``f(a)`` for ``a`` in ``[a_1, ..., a_n]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_multi_eval

    >>> gf_multi_eval([3, 2, 4], [0, 1, 2, 3, 4], 5, ZZ)
    [4, 4, 0, 2, 0]

     N/A N/A N/A gf_eval f a p K N/A a A N/A gf_compose N/A N/A f g p K N/A N/A N/A 
    Compute polynomial composition ``f(g)`` in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_compose

    >>> gf_compose([3, 2, 4], [2, 2, 2], 5, ZZ)
    [2, 4, 0, 3, 0]

     N/A N/A N/A len g 1 N/A N/A N/A gf_strip N/A N/A gf_eval f N/A gf_LC g K p K N/A N/A f N/A N/A N/A N/A h N/A N/A f N/A 0 N/A c N/A f N/A 1 N/A N/A h N/A gf_mul h g p K N/A h N/A gf_add_ground h c p K N/A h N/A gf_compose_mod N/A N/A g h f p K N/A N/A N/A 
    Compute polynomial composition ``g(h)`` in ``GF(p)[x]/(f)``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_compose_mod

    >>> gf_compose_mod(ZZ.map([3, 2, 4]), ZZ.map([2, 2, 2]), ZZ.map([4, 3]), 5, ZZ)
    [4]

     N/A N/A g N/A N/A N/A N/A comp N/A N/A g N/A 0 N/A a N/A g N/A 1 N/A N/A comp N/A gf_mul comp h p K N/A comp N/A gf_add_ground comp a p K N/A comp N/A gf_rem comp f p K N/A comp N/A gf_trace_map N/A N/A a b c n f p K N/A N/A N/A 
    Compute polynomial trace map in ``GF(p)[x]/(f)``.

    Given a polynomial ``f`` in ``GF(p)[x]``, polynomials ``a``, ``b``,
    ``c`` in the quotient ring ``GF(p)[x]/(f)`` such that ``b = c**t
    (mod f)`` for some positive power ``t`` of ``p``, and a positive
    integer ``n``, returns a mapping::

       a -> a**t**n, a + a**t + a**t**2 + ... + a**t**n (mod f)

    In factorization context, ``b = x**p mod f`` and ``c = x mod f``.
    This way we can efficiently compute trace polynomials in equal
    degree factorization routine, much faster than with other methods,
    like iterated Frobenius algorithm, for large degrees.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_trace_map

    >>> gf_trace_map([1, 2], [4, 4], [1, 1], 4, [3, 2, 4], 5, ZZ)
    ([1, 3], [1, 3])

    References
    ==========

    1. [Gathen92]_

     N/A u N/A gf_compose_mod a b f p K N/A v b N/A N/A n 1 N/A N/A U N/A gf_add a u p K N/A V b N/A N/A U a N/A V c N/A n 1 N/A n N/A N/A u N/A gf_add u N/A gf_compose_mod u v f p K p K N/A v N/A gf_compose_mod v v f p K N/A N/A n 1 N/A N/A U N/A gf_add U N/A gf_compose_mod u V f p K p K N/A V N/A gf_compose_mod v V f p K N/A n 1 N/A N/A N/A gf_compose_mod a V f p K U N/A _gf_trace_map N/A N/A f n g b p K N/A N/A N/A 
    utility for ``gf_edf_shoup``
     N/A f N/A gf_rem f g p K N/A h f N/A r f N/A i N/A range 1 n N/A N/A h N/A gf_frobenius_map h g b p K N/A r N/A gf_add r h p K N/A r N/A gf_rem r g p K N/A r N/A gf_random N/A N/A n p K N/A N/A N/A 
    Generate a random polynomial in ``GF(p)[x]`` of degree ``n``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_random
    >>> gf_random(10, 5, ZZ) #doctest: +SKIP
    [1, 2, 3, 2, 1, 1, 1, 2, 0, 4, 2]

     N/A N/A N/A N/A K one N/A N/A K N/A int N/A uniform 0 p N/A i N/A range 0 n N/A gf_irreducible N/A N/A n p K N/A N/A N/A 
    Generate random irreducible polynomial of degree ``n`` in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_irreducible
    >>> gf_irreducible(10, 5, ZZ) #doctest: +SKIP
    [1, 4, 2, 2, 3, 2, 4, 1, 4, 0, 4]

     N/A True N/A N/A f N/A gf_random n p K N/A N/A gf_irreducible_p f p K N/A N/A f N/A gf_irred_p_ben_or N/A N/A f p K N/A N/A N/A 
    Ben-Or's polynomial irreducibility test over finite fields.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_irred_p_ben_or

    >>> gf_irred_p_ben_or(ZZ.map([1, 4, 2, 2, 3, 2, 4, 1, 4, 0, 4]), 5, ZZ)
    True
    >>> gf_irred_p_ben_or(ZZ.map([3, 2, 4]), 5, ZZ)
    False

     N/A n N/A gf_degree f N/A N/A n 1 N/A N/A True N/A N/A _ f N/A gf_monic f p K N/A N/A n 5 N/A N/A H h N/A gf_pow_mod N/A N/A K one N/A K zero p f p K N/A i N/A range 0 N/A n 2 N/A N/A g N/A gf_sub h N/A N/A K one N/A K zero p K N/A N/A N/A gf_gcd f g p K N/A N/A K one N/A N/A h N/A gf_compose_mod h H f p K N/A N/A False N/A N/A b N/A gf_frobenius_monomial_base f p K N/A H h N/A gf_frobenius_map N/A N/A K one N/A K zero f b p K N/A i N/A range 0 N/A n 2 N/A N/A g N/A gf_sub h N/A N/A K one N/A K zero p K N/A N/A N/A gf_gcd f g p K N/A N/A K one N/A N/A h N/A gf_frobenius_map h f b p K N/A N/A False N/A True N/A gf_irred_p_rabin N/A N/A f p K N/A N/A N/A 
    Rabin's polynomial irreducibility test over finite fields.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_irred_p_rabin

    >>> gf_irred_p_rabin(ZZ.map([1, 4, 2, 2, 3, 2, 4, 1, 4, 0, 4]), 5, ZZ)
    True
    >>> gf_irred_p_rabin(ZZ.map([3, 2, 4]), 5, ZZ)
    False

     N/A n N/A gf_degree f N/A N/A n 1 N/A N/A True N/A N/A _ f N/A gf_monic f p K N/A x N/A N/A K one N/A K zero N/A indices N/A N/A n d N/A d N/A factorint n N/A b N/A gf_frobenius_monomial_base f p K N/A h N/A b N/A 1 N/A i N/A range 1 n N/A N/A N/A i indices N/A N/A g N/A gf_sub h x p K N/A N/A N/A gf_gcd f g p K N/A N/A K one N/A N/A False N/A h N/A gf_frobenius_map h f b p K N/A N/A h x N/A N/A _irred_methods N/A ben-or rabin gf_irred_p_ben_or gf_irred_p_rabin gf_irreducible_p N/A N/A f p K N/A N/A N/A 
    Test irreducibility of a polynomial ``f`` in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_irreducible_p

    >>> gf_irreducible_p(ZZ.map([1, 4, 2, 2, 3, 2, 4, 1, 4, 0, 4]), 5, ZZ)
    True
    >>> gf_irreducible_p(ZZ.map([3, 2, 4]), 5, ZZ)
    False

     N/A method N/A query GF_IRRED_METHOD N/A N/A method None N/A N/A irred N/A N/A _irred_methods N/A method f p K N/A N/A irred N/A gf_irred_p_rabin f p K N/A irred N/A gf_sqf_p N/A N/A f p K N/A N/A N/A 
    Return ``True`` if ``f`` is square-free in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_sqf_p

    >>> gf_sqf_p(ZZ.map([3, 2, 4]), 5, ZZ)
    True
    >>> gf_sqf_p(ZZ.map([2, 4, 4, 2, 2, 1, 4]), 5, ZZ)
    False

     N/A N/A _ f N/A gf_monic f p K N/A N/A f N/A N/A True N/A N/A N/A N/A gf_gcd f N/A gf_diff f p K p K N/A N/A K one N/A gf_sqf_part N/A N/A f p K N/A N/A N/A 
    Return square-free part of a ``GF(p)[x]`` polynomial.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_sqf_part

    >>> gf_sqf_part(ZZ.map([1, 1, 3, 0, 1, 0, 2, 2, 1]), 5, ZZ)
    [1, 4, 3]

     N/A N/A _ sqf N/A gf_sqf_list f p K N/A g N/A N/A K one N/A N/A f _ sqf N/A N/A g N/A gf_mul g f p K N/A g N/A gf_sqf_list N/A N/A f p K all N/A False N/A N/A 
    Return the square-free decomposition of a ``GF(p)[x]`` polynomial.

    Given a polynomial ``f`` in ``GF(p)[x]``, returns the leading coefficient
    of ``f`` and a square-free decomposition ``f_1**e_1 f_2**e_2 ... f_k**e_k``
    such that all ``f_i`` are monic polynomials and ``(f_i, f_j)`` for ``i != j``
    are co-prime and ``e_1 ... e_k`` are given in increasing order. All trivial
    terms (i.e. ``f_i = 1``) aren't included in the output.

    Consider polynomial ``f = x**11 + 1`` over ``GF(11)[x]``::

       >>> from sympy.polys.domains import ZZ

       >>> from sympy.polys.galoistools import (
       ...     gf_from_dict, gf_diff, gf_sqf_list, gf_pow,
       ... )
       ... # doctest: +NORMALIZE_WHITESPACE

       >>> f = gf_from_dict({11: ZZ(1), 0: ZZ(1)}, 11, ZZ)

    Note that ``f'(x) = 0``::

       >>> gf_diff(f, 11, ZZ)
       []

    This phenomenon doesn't happen in characteristic zero. However we can
    still compute square-free decomposition of ``f`` using ``gf_sqf()``::

       >>> gf_sqf_list(f, 11, ZZ)
       (1, [([1, 1], 11)])

    We obtained factorization ``f = (x + 1)**11``. This is correct because::

       >>> gf_pow([1, 1], 11, 11, ZZ) == f
       True

    References
    ==========

    1. [Geddes92]_

     N/A N/A n sqf factors r N/A 1 False N/A N/A int p N/A N/A lc f N/A gf_monic f p K N/A N/A N/A gf_degree f 1 N/A N/A N/A lc N/A N/A True N/A N/A F N/A gf_diff f p K N/A N/A F N/A N/A N/A g N/A gf_gcd f F p K N/A h N/A gf_quo f g p K N/A i 1 N/A N/A h N/A N/A K one N/A N/A G N/A gf_gcd g h p K N/A H N/A gf_quo h G p K N/A N/A N/A gf_degree H 0 N/A N/A N/A N/A factors append N/A H N/A i n N/A N/A g h i N/A N/A gf_quo g G p K G N/A i 1 N/A N/A g N/A N/A K one N/A N/A sqf True N/A N/A f g N/A N/A sqf N/A N/A d N/A N/A gf_degree f r N/A i N/A range 0 N/A d 1 N/A N/A N/A f N/A i N/A f N/A N/A i r N/A N/A f n N/A N/A f N/A N/A d 1 N/A n r N/A N/A N/A all N/A N/A N/A ValueError 'all=True' is not supported yet N/A N/A lc factors N/A gf_Qmatrix N/A N/A f p K N/A N/A N/A 
    Calculate Berlekamp's ``Q`` matrix.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_Qmatrix

    >>> gf_Qmatrix([3, 2, 4], 5, ZZ)
    [[1, 0],
     [3, 4]]

    >>> gf_Qmatrix([1, 0, 0, 0, 1], 5, ZZ)
    [[1, 0, 0, 0],
     [0, 4, 0, 0],
     [0, 0, 1, 0],
     [0, 0, 0, 4]]

     N/A N/A n r N/A N/A gf_degree f N/A int p N/A q N/A N/A N/A K one N/A N/A N/A K zero N/A n 1 N/A Q N/A N/A N/A list q N/A N/A N/A N/A n 1 N/A i N/A range 1 N/A N/A N/A n 1 r 1 N/A N/A N/A qq c N/A N/A N/A N/A N/A N/A q N/A -1 N/A f N/A -1 p N/A q N/A -1 N/A j N/A range 1 n N/A N/A N/A N/A qq append N/A N/A N/A q N/A N/A j 1 N/A c N/A f N/A N/A N/A j 1 p N/A N/A N/A i r N/A N/A N/A Q N/A N/A i r N/A list qq N/A q qq N/A Q N/A gf_Qbasis N/A N/A Q p K N/A N/A N/A 
    Compute a basis of the kernel of ``Q``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_Qmatrix, gf_Qbasis

    >>> gf_Qbasis(gf_Qmatrix([1, 0, 0, 0, 1], 5, ZZ), 5, ZZ)
    [[1, 0, 0, 0], [0, 0, 1, 0]]

    >>> gf_Qbasis(gf_Qmatrix([3, 2, 4], 5, ZZ), 5, ZZ)
    [[1, 0]]

     N/A N/A Q n N/A N/A N/A list q N/A q Q N/A len Q N/A k N/A range 0 n N/A N/A N/A N/A Q N/A k N/A k N/A N/A N/A N/A Q N/A k N/A k N/A K one p N/A k N/A range 0 n N/A N/A i N/A range k n N/A N/A N/A N/A Q N/A k N/A i N/A N/A N/A N/A N/A inv N/A N/A K invert N/A N/A Q N/A k N/A i p N/A j N/A range 0 n N/A N/A N/A N/A Q N/A j N/A i N/A N/A N/A N/A Q N/A j N/A i inv p N/A j N/A range 0 n N/A N/A t N/A N/A Q N/A j N/A k N/A N/A N/A Q N/A j N/A k N/A N/A Q N/A j N/A i N/A N/A N/A Q N/A j N/A i t N/A i N/A range 0 n N/A N/A N/A i k N/A N/A q N/A N/A Q N/A k N/A i N/A j N/A range 0 n N/A N/A N/A N/A Q N/A j N/A i N/A N/A N/A N/A Q N/A j N/A i N/A N/A N/A Q N/A j N/A k q p N/A i N/A range 0 n N/A N/A j N/A range 0 n N/A N/A N/A i j N/A N/A N/A N/A Q N/A i N/A j N/A N/A N/A K one N/A N/A Q N/A i N/A j p N/A N/A N/A N/A Q N/A i N/A j N/A N/A N/A N/A Q N/A i N/A j p N/A basis N/A N/A q Q N/A N/A N/A any q N/A N/A N/A N/A basis append q N/A basis N/A gf_berlekamp N/A N/A f p K N/A N/A N/A 
    Factor a square-free ``f`` in ``GF(p)[x]`` for small ``p``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_berlekamp

    >>> gf_berlekamp([1, 0, 0, 0, 1], 5, ZZ)
    [[1, 0, 2], [1, 0, 3]]

     N/A Q N/A gf_Qmatrix f p K N/A V N/A gf_Qbasis Q p K N/A N/A i v N/A enumerate V N/A N/A N/A V N/A i N/A gf_strip N/A list N/A reversed v N/A factors N/A f N/A k N/A range 1 N/A len V N/A N/A f N/A list factors N/A N/A s N/A K zero N/A N/A s p N/A N/A g N/A gf_sub_ground N/A V N/A k s p K N/A h N/A gf_gcd f g p K N/A N/A N/A h N/A N/A K one N/A h f N/A N/A N/A N/A factors remove f N/A f N/A gf_quo f h p K N/A N/A N/A factors extend N/A f h N/A N/A N/A len factors N/A len V N/A N/A N/A _sort_factors factors multiple False N/A s N/A K one N/A N/A _sort_factors factors multiple False N/A gf_ddf_zassenhaus N/A N/A f p K N/A N/A N/A 
    Cantor-Zassenhaus: Deterministic Distinct Degree Factorization

    Given a monic square-free polynomial ``f`` in ``GF(p)[x]``, computes
    partial distinct degree factorization ``f_1 ... f_d`` of ``f`` where
    ``deg(f_i) != deg(f_j)`` for ``i != j``. The result is returned as a
    list of pairs ``(f_i, e_i)`` where ``deg(f_i) > 0`` and ``e_i > 0``
    is an argument to the equal degree factorization routine.

    Consider the polynomial ``x**15 - 1`` in ``GF(11)[x]``::

       >>> from sympy.polys.domains import ZZ
       >>> from sympy.polys.galoistools import gf_from_dict

       >>> f = gf_from_dict({15: ZZ(1), 0: ZZ(-1)}, 11, ZZ)

    Distinct degree factorization gives::

       >>> from sympy.polys.galoistools import gf_ddf_zassenhaus

       >>> gf_ddf_zassenhaus(f, 11, ZZ)
       [([1, 0, 0, 0, 0, 10], 1), ([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2)]

    which means ``x**15 - 1 = (x**5 - 1) (x**10 + x**5 + 1)``. To obtain
    factorization into irreducibles, use equal degree factorization
    procedure (EDF) with each of the factors.

    References
    ==========

    1. [Gathen99]_
    2. [Geddes92]_

     N/A N/A i g factors N/A 1 N/A N/A K one N/A K zero N/A N/A b N/A gf_frobenius_monomial_base f p K N/A N/A N/A 2 i N/A gf_degree f N/A N/A g N/A gf_frobenius_map g f b p K N/A h N/A gf_gcd f N/A gf_sub g N/A N/A K one N/A K zero p K p K N/A N/A h N/A N/A K one N/A N/A N/A N/A factors append N/A h i N/A f N/A gf_quo f h p K N/A g N/A gf_rem g f p K N/A b N/A gf_frobenius_monomial_base f p K N/A i 1 N/A N/A f N/A N/A K one N/A N/A N/A factors N/A N/A f N/A gf_degree f N/A N/A factors N/A gf_edf_zassenhaus N/A N/A f n p K N/A N/A N/A 
    Cantor-Zassenhaus: Probabilistic Equal Degree Factorization

    Given a monic square-free polynomial ``f`` in ``GF(p)[x]`` and
    an integer ``n``, such that ``n`` divides ``deg(f)``, returns all
    irreducible factors ``f_1,...,f_d`` of ``f``, each of degree ``n``.
    EDF procedure gives complete factorization over Galois fields.

    Consider the square-free polynomial ``f = x**3 + x**2 + x + 1`` in
    ``GF(5)[x]``. Let's compute its irreducible factors of degree one::

       >>> from sympy.polys.domains import ZZ
       >>> from sympy.polys.galoistools import gf_edf_zassenhaus

       >>> gf_edf_zassenhaus([1,1,1,1], 1, 5, ZZ)
       [[1, 1], [1, 2], [1, 3]]

    References
    ==========

    1. [Gathen99]_
    2. [Geddes92]_

     N/A N/A factors q N/A N/A f N/A int p N/A N/A N/A gf_degree f n N/A N/A factors N/A N N/A N/A gf_degree f n N/A N/A p 2 N/A N/A b N/A gf_frobenius_monomial_base f p K N/A N/A N/A len factors N N/A N/A r N/A gf_random N/A N/A 2 n 1 p K N/A N/A p 2 N/A N/A h r N/A i N/A range 0 N/A 2 N/A N/A n N 1 N/A N/A r N/A gf_pow_mod r 2 f p K N/A h N/A gf_add h r p K N/A g N/A gf_gcd f h p K N/A N/A h N/A _gf_pow_pnm1d2 r n f b p K N/A g N/A gf_gcd f N/A gf_sub_ground h N/A K one p K p K N/A N/A N/A g N/A N/A K one N/A g f N/A N/A factors N/A N/A gf_edf_zassenhaus g n p K N/A gf_edf_zassenhaus N/A gf_quo f g p K n p K N/A N/A _sort_factors factors multiple False N/A gf_ddf_shoup N/A N/A f p K N/A N/A N/A 
    Kaltofen-Shoup: Deterministic Distinct Degree Factorization

    Given a monic square-free polynomial ``f`` in ``GF(p)[x]``, computes
    partial distinct degree factorization ``f_1,...,f_d`` of ``f`` where
    ``deg(f_i) != deg(f_j)`` for ``i != j``. The result is returned as a
    list of pairs ``(f_i, e_i)`` where ``deg(f_i) > 0`` and ``e_i > 0``
    is an argument to the equal degree factorization routine.

    This algorithm is an improved version of Zassenhaus algorithm for
    large ``deg(f)`` and modulus ``p`` (especially for ``deg(f) ~ lg(p)``).

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_ddf_shoup, gf_from_dict

    >>> f = gf_from_dict({6: ZZ(1), 5: ZZ(-1), 4: ZZ(1), 3: ZZ(1), 1: ZZ(-1)}, 3, ZZ)

    >>> gf_ddf_shoup(f, 3, ZZ)
    [([1, 1, 0], 1), ([1, 1, 0, 1, 2], 2)]

    References
    ==========

    1. [Kaltofen98]_
    2. [Shoup95]_
    3. [Gathen92]_

     N/A n N/A gf_degree f N/A k N/A int N/A _ceil N/A _sqrt N/A n 2 N/A b N/A gf_frobenius_monomial_base f p K N/A h N/A gf_frobenius_map N/A N/A K one N/A K zero f b p K N/A U N/A N/A N/A N/A K one N/A K zero h N/A N/A N/A K zero N/A k 1 N/A i N/A range 2 N/A k 1 N/A N/A N/A U N/A i N/A gf_frobenius_map N/A U N/A N/A i 1 f b p K N/A N/A h U N/A N/A U N/A k N/A U N/A k N/A V N/A N/A h N/A N/A N/A K zero N/A k 1 N/A i N/A range 1 k N/A N/A N/A V N/A i N/A gf_compose_mod N/A V N/A N/A i 1 h f p K N/A factors N/A N/A N/A i v N/A enumerate V N/A N/A N/A h j N/A N/A N/A K one N/A k 1 N/A u U N/A N/A g N/A gf_sub v u p K N/A h N/A gf_mul h g p K N/A h N/A gf_rem h f p K N/A g N/A gf_gcd f h p K N/A f N/A gf_quo f g p K N/A u N/A reversed U N/A N/A h N/A gf_sub v u p K N/A F N/A gf_gcd g h p K N/A N/A F N/A N/A K one N/A N/A N/A N/A factors append N/A F N/A N/A k N/A i 1 j N/A N/A g j N/A N/A gf_quo g F p K N/A j 1 N/A N/A f N/A N/A K one N/A N/A N/A N/A factors append N/A f N/A gf_degree f N/A factors N/A gf_edf_shoup N/A N/A f n p K N/A N/A N/A 
    Gathen-Shoup: Probabilistic Equal Degree Factorization

    Given a monic square-free polynomial ``f`` in ``GF(p)[x]`` and integer
    ``n`` such that ``n`` divides ``deg(f)``, returns all irreducible factors
    ``f_1,...,f_d`` of ``f``, each of degree ``n``. This is a complete
    factorization over Galois fields.

    This algorithm is an improved version of Zassenhaus algorithm for
    large ``deg(f)`` and modulus ``p`` (especially for ``deg(f) ~ lg(p)``).

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_edf_shoup

    >>> gf_edf_shoup(ZZ.map([1, 2837, 2277]), 1, 2917, ZZ)
    [[1, 852], [1, 1985]]

    References
    ==========

    1. [Shoup91]_
    2. [Gathen92]_

     N/A N/A N q N/A N/A gf_degree f N/A int p N/A N/A N N/A N/A N/A N/A N/A N n N/A N/A N/A f N/A N/A factors x N/A N/A f N/A N/A K one N/A K zero N/A r N/A gf_random N/A N 1 p K N/A N/A p 2 N/A N/A h N/A gf_pow_mod x q f p K N/A H N/A N/A gf_trace_map r h x N/A n 1 f p K N/A 1 N/A h1 N/A gf_gcd f H p K N/A h2 N/A gf_quo f h1 p K N/A factors N/A N/A gf_edf_shoup h1 n p K N/A gf_edf_shoup h2 n p K N/A N/A b N/A gf_frobenius_monomial_base f p K N/A H N/A _gf_trace_map r n f b p K N/A h N/A gf_pow_mod H N/A N/A q 1 2 f p K N/A h1 N/A gf_gcd f h p K N/A h2 N/A gf_gcd f N/A gf_sub_ground h N/A K one p K p K N/A h3 N/A gf_quo f N/A gf_mul h1 h2 p K p K N/A factors N/A N/A N/A gf_edf_shoup h1 n p K N/A gf_edf_shoup h2 n p K N/A gf_edf_shoup h3 n p K N/A N/A _sort_factors factors multiple False N/A gf_zassenhaus N/A N/A f p K N/A N/A N/A 
    Factor a square-free ``f`` in ``GF(p)[x]`` for medium ``p``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_zassenhaus

    >>> gf_zassenhaus(ZZ.map([1, 4, 3]), 5, ZZ)
    [[1, 1], [1, 3]]

     N/A factors N/A N/A N/A factor n N/A gf_ddf_zassenhaus f p K N/A N/A factors N/A gf_edf_zassenhaus factor n p K N/A N/A _sort_factors factors multiple False N/A gf_shoup N/A N/A f p K N/A N/A N/A 
    Factor a square-free ``f`` in ``GF(p)[x]`` for large ``p``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_shoup

    >>> gf_shoup(ZZ.map([1, 4, 3]), 5, ZZ)
    [[1, 1], [1, 3]]

     N/A factors N/A N/A N/A factor n N/A gf_ddf_shoup f p K N/A N/A factors N/A gf_edf_shoup factor n p K N/A N/A _sort_factors factors multiple False N/A N/A _factor_methods N/A berlekamp zassenhaus shoup gf_berlekamp gf_zassenhaus gf_shoup gf_factor_sqf N/A N/A f p K method N/A None N/A N/A 
    Factor a square-free polynomial ``f`` in ``GF(p)[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.galoistools import gf_factor_sqf

    >>> gf_factor_sqf(ZZ.map([3, 2, 4]), 5, ZZ)
    (3, [[1, 1], [1, 3]])

     N/A N/A lc f N/A gf_monic f p K N/A N/A N/A gf_degree f 1 N/A N/A N/A lc N/A N/A method N/A method N/A query GF_FACTOR_METHOD N/A N/A method None N/A N/A factors N/A N/A _factor_methods N/A method f p K N/A N/A factors N/A gf_zassenhaus f p K N/A N/A lc factors N/A gf_factor N/A N/A f p K N/A N/A N/A 
    Factor (non square-free) polynomials in ``GF(p)[x]``.

    Given a possibly non square-free polynomial ``f`` in ``GF(p)[x]``,
    returns its complete factorization into irreducibles::

                 f_1(x)**e_1 f_2(x)**e_2 ... f_d(x)**e_d

    where each ``f_i`` is a monic polynomial and ``gcd(f_i, f_j) == 1``,
    for ``i != j``.  The result is given as a tuple consisting of the
    leading coefficient of ``f`` and a list of factors of ``f`` with
    their multiplicities.

    The algorithm proceeds by first computing square-free decomposition
    of ``f`` and then iteratively factoring each of square-free factors.

    Consider a non square-free polynomial ``f = (7*x + 1) (x + 2)**2`` in
    ``GF(11)[x]``. We obtain its factorization into irreducibles as follows::

       >>> from sympy.polys.domains import ZZ
       >>> from sympy.polys.galoistools import gf_factor

       >>> gf_factor(ZZ.map([5, 2, 7, 2]), 11, ZZ)
       (5, [([1, 2], 1), ([1, 8], 2)])

    We arrived with factorization ``f = 5 (x + 2) (x + 8)**2``. We didn't
    recover the exact form of the input polynomial because we requested to
    get monic factors of ``f`` and its leading coefficient separately.

    Square-free factors of ``f`` can be factored into irreducibles over
    ``GF(p)`` using three very different methods:

    Berlekamp
        efficient for very small values of ``p`` (usually ``p < 25``)
    Cantor-Zassenhaus
        efficient on average input and with "typical" ``p``
    Shoup-Kaltofen-Gathen
        efficient with very large inputs and modulus

    If you want to use a specific factorization method, instead of the default
    one, set ``GF_FACTOR_METHOD`` with one of ``berlekamp``, ``zassenhaus`` or
    ``shoup`` values.

    References
    ==========

    1. [Gathen99]_

     N/A N/A lc f N/A gf_monic f p K N/A N/A N/A gf_degree f 1 N/A N/A N/A lc N/A N/A factors N/A N/A N/A g n N/A N/A gf_sqf_list f p K N/A 1 N/A N/A h N/A N/A gf_factor_sqf g p K N/A 1 N/A N/A N/A N/A factors append N/A h n N/A N/A lc N/A _sort_factors factors N/A gf_value N/A N/A f a N/A N/A N/A 
    Value of polynomial 'f' at 'a' in field R.

    Examples
    ========

    >>> from sympy.polys.galoistools import gf_value

    >>> gf_value([1, 7, 2, 4], 11)
    2204

     N/A result 0 N/A c f N/A N/A result a N/A result c N/A result N/A linear_congruence N/A N/A a b m N/A N/A N/A 
    Returns the values of x satisfying a*x congruent b mod(m)

    Here m is positive integer and a, b are natural numbers.
    This function returns only those values of x which are distinct mod(m).

    Examples
    ========

    >>> from sympy.polys.galoistools import linear_congruence

    >>> linear_congruence(3, 12, 15)
    [4, 9, 14]

    There are 3 solutions distinct mod(15) since gcd(a, m) = gcd(3, 15) = 3.

    **Reference**
    1) Wikipedia http://en.wikipedia.org/wiki/Linear_congruence_theorem

     sympy.polys.polytools gcdex N/A N/A N/A a m 0 N/A N/A N/A N/A b m 0 N/A N/A N/A list N/A range m N/A N/A N/A N/A N/A r _ g N/A gcdex a m N/A N/A N/A b g 0 N/A N/A N/A N/A N/A N/A N/A N/A N/A r b g N/A N/A t m g m N/A t N/A range g N/A _raise_mod_power N/A N/A x s p f N/A N/A N/A 
    Used in gf_csolve to generate solutions of f(x) cong 0 mod(p**(s + 1))
    from the solutions of f(x) cong 0 mod(p**s).

    Examples
    ========

    >>> from sympy.polys.galoistools import _raise_mod_power
    >>> from sympy.polys.galoistools import csolve_prime

    These is the solutions of f(x) = x**2 + x + 7 cong 0 mod(3)

    >>> f = [1, 1, 7]
    >>> csolve_prime(f, 3)
    [1]
    >>> [ i for i in range(3) if not (i**2 + i + 7) % 3]
    [1]

    The solutions of f(x) cong 0 mod(9) are constructed from the
    values returned from _raise_mod_power:

    >>> x, s, p = 1, 1, 3
    >>> V = _raise_mod_power(x, s, p, f)
    >>> [x + v * p**s for v in V]
    [1, 4, 7]

    And these are confirmed with the following:

    >>> [ i for i in range(3**2) if not (i**2 + i + 7) % 3**2]
    [1, 4, 7]

     sympy.polys.domains ZZ N/A f_f N/A gf_diff f p ZZ N/A alpha N/A gf_value f_f x N/A beta N/A N/A N/A gf_value f x N/A p s N/A N/A linear_congruence alpha beta p N/A csolve_prime N/A N/A f p e N/A 1 N/A N/A 
    Solutions of f(x) congruent 0 mod(p**e).

    Examples
    ========

    >>> from sympy.polys.galoistools import csolve_prime

    >>> csolve_prime([1, 1, 7], 3, 1)
    [1]
    >>> csolve_prime([1, 1, 7], 3, 2)
    [1, 4, 7]

    Solutions [7, 4, 1] (mod 3**2) are generated by ``_raise_mod_power()``
    from solution [1] (mod 3).
     sympy.polys.domains ZZ N/A X1 N/A i N/A i N/A range p N/A N/A gf_eval f i p ZZ 0 N/A N/A e 1 N/A N/A X1 N/A X N/A N/A S N/A list N/A zip X1 N/A N/A 1 N/A len X1 N/A S N/A N/A N/A x s N/A N/A S pop N/A N/A s e N/A N/A N/A N/A X append x N/A N/A s1 N/A s 1 N/A ps N/A p s N/A N/A N/A S extend N/A N/A N/A x N/A v ps s1 N/A v N/A _raise_mod_power x s p f N/A N/A sorted X N/A gf_csolve N/A N/A f n N/A N/A N/A 
    To solve f(x) congruent 0 mod(n).

    n is divided into canonical factors and f(x) cong 0 mod(p**e) will be
    solved for each factor. Applying the Chinese Remainder Theorem to the
    results returns the final answers.

    Examples
    ========

    Solve [1, 1, 7] congruent 0 mod(189):

    >>> from sympy.polys.galoistools import gf_csolve
    >>> gf_csolve([1, 1, 7], 189)
    [13, 49, 76, 112, 139, 175]

    References
    ==========

    [1] 'An introduction to the Theory of Numbers' 5th Edition by Ivan Niven,
        Zuckerman and Montgomery.

     sympy.polys.domains ZZ N/A P N/A factorint n N/A X N/A N/A csolve_prime f p e N/A N/A p e N/A N/A P items N/A pools N/A list N/A map tuple X N/A perms N/A N/A N/A pool pools N/A N/A perms N/A N/A x N/A y N/A x perms N/A y pool N/A dist_factors N/A N/A pow p e N/A N/A p e N/A N/A P items N/A N/A sorted N/A N/A gf_crt per dist_factors ZZ N/A per perms N/A