module Task.Pattern.Assess where
import Data.Monoid
import Domain.Math.Data.Relation
import Recognize.Data.Approach
import Bayes.Evidence
import Recognize.Data.Attribute hiding (Other)
import Recognize.Data.RuleId
import Recognize.Data.Diagnosis as S
import Recognize.Data.Step
import Recognize.Expr.Symbols
import Recognize.Model.Assess
import Recognize.Model.Connectives
import Recognize.Model.EvidenceBuilder
import Task.Network.Pattern
assess' :: Diagnosis -> Evidence
assess' sd =
stringNode (apprtostring appr) ans1Strat <>
answerCorrect 16 attrs ans1 <>
generateEvidence buildStepsEvidence appr attrs
where
attrs = map (snd . getValue) $ steps sd
appr = approach sd
apprtostring Generalizing = Just "Algebraic"
apprtostring Numerical = Just "Numeric1"
apprtostring (Other "Numerical2") = Just "Numeric2"
apprtostring _ = Nothing
buildStepsEvidence :: Approach -> EvBuilder ()
buildStepsEvidence Generalizing = stepsAGBuilder
buildStepsEvidence Numerical = stepsN1Builder
buildStepsEvidence (Other "Numerical2") = stepsN2Builder
buildStepsEvidence _ = return ()
stepsAGBuilder :: EvBuilder ()
stepsAGBuilder = do
giveNodeAndCollect ans1Strat1Step2 $ withoutFailure (exists1 (Label "definition"))
stepsAG1Builder >> stepsAG2Builder
stepsAG1Builder :: EvBuilder ()
stepsAG1Builder = do
giveNodeAndCollect ans1Strat1Step31 $ withoutFailure (exists1 (Label "equation"))
giveNodeAndCollect ans1Strat1Step41 $ withoutFailure (exists1 (ARuleR Coverup_OneVar_Plus (wildcard .==. wildcard) (wildcard .==. wildcard)))
giveNodeAndCollect ans1Strat1Step51 $ withoutFailure (exists1 (ARuleR Coverup_Times_Positive (wildcard .==. wildcard) (wildcard .==. wildcard)))
giveNodeAndCollect ans1Strat1Step6 $ implication [ FinalAnswer wildcard ] [ FinalAnswer 16]
stepsAG2Builder :: EvBuilder ()
stepsAG2Builder = do
giveNodeAndCollect ans1Strat1Step32 $ withoutFailure (exists1 (Label "inequation"))
giveNodeAndCollect ans1Strat1Step42 $ withoutFailure (exists1 (ARuleR Coverup_OneVar_Plus (wildcard .>. wildcard) (wildcard .>. wildcard)))
giveNodeAndCollect ans1Strat1Step52 $ withoutFailure (exists1 (ARuleR Coverup_Times_Positive (wildcard .>. wildcard) (wildcard .>. wildcard)))
giveNodeAndCollect ans1Strat1Step6 $ implication [ FinalAnswer wildcard ] [ FinalAnswer 16]
stepsN1Builder :: EvBuilder ()
stepsN1Builder = do
giveNodeAndCollectAllKnown ans1Strat2Step1 [exists1 (NExpr 7), exists1 (NExpr 10), exists1 (NExpr 13), exists1 (NExpr 16)]
giveNodeAndCollect ans1Strat2Step2 $ exists1 (NExpr 52) ==> (failOnCommonMistake <?>> success)
giveNodeAndCollect ans1Strat2Step3 $ implication [ FinalAnswer wildcard ] [ FinalAnswer 16 ]
stepsN2Builder :: EvBuilder ()
stepsN2Builder = do
giveNodeAndCollect ans1Strat3Step2 $ withoutFailure (exists1 (Label "subtract"))
giveNodeAndCollect ans1Strat3Step3 $ withoutFailure (exists1 (Label "divide"))
giveNodeAndCollect ans1Strat3Step4 $ withoutFailure (exists1 (Label "increase"))
giveNodeAndCollect ans1Strat3Step5 $ implication [ FinalAnswer wildcard ] [ FinalAnswer 16 ]