Module:Sandbox/Maxim/acm

Revision as of 18:45, 21 September 2021 by imported>Maxim (revert to old field name)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Documentation for this module may be created at Module:Sandbox/Maxim/acm/doc

local p = {};

local function majority ( frame )

-- input args:
-- n-total-arbs, n-inactive-arbs, n-recused-arbs, n-abstained-arbs, n-is-motion

   local acm
   
   if frame.args.motion=="yes" or frame.args.motion=="plural" then
      acm = math.floor((frame.args.active - (frame.args.inactive + frame.args.recused + frame.args.abstain)) / 2) + 1
   else
      acm = math.floor((frame.args.active - (frame.args.inactive + frame.args.recused)) / 2) + 1
   end

   return acm

end

local function active ( frame )

   return frame.args.active - frame.args.inactive - frame.args.recused

end

p.readactive = function ( frame )
   -- cast stuff to numbers 
   local nArbitrators = tonumber(frame.args.active)
   local nInactive = tonumber(frame.args.inactive)
   local nRecused = tonumber(frame.args.recused)
   local nAbstain = tonumber(frame.args.abstain)

   -- determine if we have a case, motion, or motions
   local proceeding = "this case"
   if frame.args.motion=="yes" then
      proceeding = "this motion"
   end
   if frame.args.motion=="plural" then
      proceeding = "these motions"
   end

   local out_text = "For " .. proceeding .. ", there are " .. active(frame) .. " active arbitrators. "

   -- report on inactive and recused arbs that are subtracted out of all majorities
   local subtract_text

   if nInactive > 0 or nRecused > 0 then
        local arb = "arbitrator"
        subtract_text = "There is "

        if (nInactive + nRecused) > 1 then
           arb = "arbitrators"
           subtract_text = "There are "
        end

        if nInactive < 1 then
           subtract_text = subtract_text .. " " .. frame.args.recused .. " recused " .. arb .. ". "
        elseif nRecused < 1 then
           subtract_text = subtract_text .. " " .. frame.args.inactive .. " inactive " .. arb .. ". "
        else
           subtract_text = subtract_text .. " " .. frame.args.recused .. " recused and " .. frame.args.inactive .. " inactive " .. arb .. ". "
        end
   
   
        out_text = out_text .. subtract_text
    end

-- now give majority count (or abstains + majority count for motions)
   local maj_text
   if frame.args.motion=="yes" or frame.args.motion=="plural" then
       -- plural or not plural arbitrators
       local arb_text = "is 1 abstaining arbitrator, "
       if (nAbstain > 1) then
          arb_text = "are " .. frame.args.abstain .. " abstaining arbitrators, "
       end 
       maj_text = "Since there " .. arb_text
   else
       maj_text = "Therefore, " 
   end
   maj_text = maj_text .. majority(frame) .. " support or oppose votes are a majority."
  
   out_text = out_text .. maj_text

  return out_text
end

p.abstentionrange = function ( frame )
   local out_text =  "0–1"
   if math.fmod(active(frame),2)==0 then
      out_text = "0"
   end
   return out_text
end

p.abstention_maj_r1 = function ( frame )
   return majority ( frame ) 
end

p.abstention_maj_r2  = function ( frame )
   return majority ( frame ) - 1
end

p.abstention_maj_r3 = function ( frame )
   return majority ( frame ) - 2
end

return p