Sha256: 1b0b55bfc3107ef5d00a82882ca211de7419d30d7de3d7696aa2ed5c562bf4ca

Contents?: true

Size: 1.12 KB

Versions: 25

Compression:

Stored size: 1.12 KB

Contents

module SPARQL; module Algebra
  class Operator
    ##
    # The SPARQL `avg` set function.
    #
    # @example
    #    (prefix ((: <http://www.example.org/>))
    #      (project (?avg)
    #        (extend ((?avg ?.0))
    #          (group () ((?.0 (avg ?o)))
    #            (bgp (triple ?s :dec ?o))))))
    #
    # @see http://www.w3.org/TR/sparql11-query/#defn_aggAvg
    class Avg < Operator::Unary
      include Aggregate

      NAME = :avg

      ##
      # The Avg set function calculates the average value for an expression over a group. It is defined in terms of Sum and Count.
      #
      # @param  [Enumerable<Array<RDF::Term>>] enum
      #   enum of evaluated operand
      # @return [RDF::Literal::Numeric] The numeric average of the terms
      def apply(enum)
        if enum.empty?
          RDF::Literal(0)
        elsif enum.flatten.all? {|n| n.is_a?(RDF::Literal::Numeric)}
          enum.flatten.reduce(:+) / RDF::Literal::Decimal.new(enum.length)
        else
          raise TypeError, "Averaging non-numeric types: #{enum.flatten}"
        end
      end
    end # Avg
  end # Operator
end; end # SPARQL::Algebra

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
sparql-3.0.2 lib/sparql/algebra/operator/avg.rb
sparql-3.0.1 lib/sparql/algebra/operator/avg.rb
sparql-3.0.0 lib/sparql/algebra/operator/avg.rb
sparql-2.2.2 lib/sparql/algebra/operator/avg.rb
sparql-2.2.1 lib/sparql/algebra/operator/avg.rb
sparql-2.2.0 lib/sparql/algebra/operator/avg.rb
sparql-2.1.0 lib/sparql/algebra/operator/avg.rb
sparql-2.0.0 lib/sparql/algebra/operator/avg.rb
sparql-2.0.0.beta2 lib/sparql/algebra/operator/avg.rb
sparql-1.99.1 lib/sparql/algebra/operator/avg.rb
sparql-2.0.0.beta1 lib/sparql/algebra/operator/avg.rb
sparql-1.1.9.1 lib/sparql/algebra/operator/avg.rb
sparql-1.99.0 lib/sparql/algebra/operator/avg.rb
sparql-1.1.9 lib/sparql/algebra/operator/avg.rb
sparql-1.1.8 lib/sparql/algebra/operator/avg.rb
sparql-1.1.7 lib/sparql/algebra/operator/avg.rb
sparql-1.1.6 lib/sparql/algebra/operator/avg.rb
sparql-1.1.5 lib/sparql/algebra/operator/avg.rb
sparql-1.1.4 lib/sparql/algebra/operator/avg.rb
sparql-1.1.3 lib/sparql/algebra/operator/avg.rb