This is an automated email from the ASF dual-hosted git repository.

altay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 5649ea8  [BEAM-3612] Type specialize stats package (#7002)
5649ea8 is described below

commit 5649ea8250fc216963de98fde2ed09789cc89d2b
Author: Robert Burke <lostl...@users.noreply.github.com>
AuthorDate: Mon Nov 12 12:28:28 2018 -0800

    [BEAM-3612] Type specialize stats package (#7002)
    
    * [BEAM-3612] Add a shim generator tool
    * [BEAM-3612] Type specialize stats package
---
 sdks/go/pkg/beam/transforms/stats/max_switch.go    |  17 -
 sdks/go/pkg/beam/transforms/stats/max_switch.tmpl  |   8 -
 sdks/go/pkg/beam/transforms/stats/mean.go          |   4 -
 sdks/go/pkg/beam/transforms/stats/min_switch.go    |  17 -
 sdks/go/pkg/beam/transforms/stats/min_switch.tmpl  |   8 -
 sdks/go/pkg/beam/transforms/stats/stats.shims.go   | 535 +++++++++++++++++++++
 sdks/go/pkg/beam/transforms/stats/sum_switch.go    |  17 -
 sdks/go/pkg/beam/transforms/stats/sum_switch.tmpl  |   8 -
 sdks/go/pkg/beam/transforms/stats/util.go          |   9 +
 .../stats/{min_switch.tmpl => util_gen.go}         |  34 +-
 .../stats/{sum_switch.tmpl => util_gen.tmpl}       |  30 +-
 11 files changed, 550 insertions(+), 137 deletions(-)

diff --git a/sdks/go/pkg/beam/transforms/stats/max_switch.go 
b/sdks/go/pkg/beam/transforms/stats/max_switch.go
index d26fd27..b31d41a 100644
--- a/sdks/go/pkg/beam/transforms/stats/max_switch.go
+++ b/sdks/go/pkg/beam/transforms/stats/max_switch.go
@@ -20,25 +20,8 @@ package stats
 import (
        "fmt"
        "reflect"
-
-       "github.com/apache/beam/sdks/go/pkg/beam"
 )
 
-func init() {
-       beam.RegisterFunction(maxIntFn)
-       beam.RegisterFunction(maxInt8Fn)
-       beam.RegisterFunction(maxInt16Fn)
-       beam.RegisterFunction(maxInt32Fn)
-       beam.RegisterFunction(maxInt64Fn)
-       beam.RegisterFunction(maxUintFn)
-       beam.RegisterFunction(maxUint8Fn)
-       beam.RegisterFunction(maxUint16Fn)
-       beam.RegisterFunction(maxUint32Fn)
-       beam.RegisterFunction(maxUint64Fn)
-       beam.RegisterFunction(maxFloat32Fn)
-       beam.RegisterFunction(maxFloat64Fn)
-}
-
 func findMaxFn(t reflect.Type) interface{} {
        switch t.String() {
        case "int":
diff --git a/sdks/go/pkg/beam/transforms/stats/max_switch.tmpl 
b/sdks/go/pkg/beam/transforms/stats/max_switch.tmpl
index 7fea68d..9424569 100644
--- a/sdks/go/pkg/beam/transforms/stats/max_switch.tmpl
+++ b/sdks/go/pkg/beam/transforms/stats/max_switch.tmpl
@@ -18,16 +18,8 @@ package stats
 import (
     "fmt"
     "reflect"
-
-       "github.com/apache/beam/sdks/go/pkg/beam"
 )
 
-func init() {
-{{- range .X}}
-       beam.RegisterFunction(max{{.Name}}Fn)
-{{- end}}
-}
-
 func findMaxFn(t reflect.Type) interface{} {
     switch t.String() {
 {{- range .X}}
diff --git a/sdks/go/pkg/beam/transforms/stats/mean.go 
b/sdks/go/pkg/beam/transforms/stats/mean.go
index 3bc2c88..9d68231 100644
--- a/sdks/go/pkg/beam/transforms/stats/mean.go
+++ b/sdks/go/pkg/beam/transforms/stats/mean.go
@@ -22,10 +22,6 @@ import (
        "github.com/apache/beam/sdks/go/pkg/beam/core/util/reflectx"
 )
 
-func init() {
-       beam.RegisterType(reflect.TypeOf((*meanFn)(nil)).Elem())
-}
-
 // Mean returns the arithmetic mean (or average) of the elements in a 
collection.
 // It expects a PCollection<A> as input and returns a singleton 
PCollection<float64>.
 // It can only be used for numbers, such as int, uint16, float32, etc.
diff --git a/sdks/go/pkg/beam/transforms/stats/min_switch.go 
b/sdks/go/pkg/beam/transforms/stats/min_switch.go
index afa9768..75dfe72 100644
--- a/sdks/go/pkg/beam/transforms/stats/min_switch.go
+++ b/sdks/go/pkg/beam/transforms/stats/min_switch.go
@@ -20,25 +20,8 @@ package stats
 import (
        "fmt"
        "reflect"
-
-       "github.com/apache/beam/sdks/go/pkg/beam"
 )
 
-func init() {
-       beam.RegisterFunction(minIntFn)
-       beam.RegisterFunction(minInt8Fn)
-       beam.RegisterFunction(minInt16Fn)
-       beam.RegisterFunction(minInt32Fn)
-       beam.RegisterFunction(minInt64Fn)
-       beam.RegisterFunction(minUintFn)
-       beam.RegisterFunction(minUint8Fn)
-       beam.RegisterFunction(minUint16Fn)
-       beam.RegisterFunction(minUint32Fn)
-       beam.RegisterFunction(minUint64Fn)
-       beam.RegisterFunction(minFloat32Fn)
-       beam.RegisterFunction(minFloat64Fn)
-}
-
 func findMinFn(t reflect.Type) interface{} {
        switch t.String() {
        case "int":
diff --git a/sdks/go/pkg/beam/transforms/stats/min_switch.tmpl 
b/sdks/go/pkg/beam/transforms/stats/min_switch.tmpl
index 1175518..0dd082d 100644
--- a/sdks/go/pkg/beam/transforms/stats/min_switch.tmpl
+++ b/sdks/go/pkg/beam/transforms/stats/min_switch.tmpl
@@ -18,16 +18,8 @@ package stats
 import (
     "fmt"
     "reflect"
-
-       "github.com/apache/beam/sdks/go/pkg/beam"
 )
 
-func init() {
-{{- range .X}}
-       beam.RegisterFunction(min{{.Name}}Fn)
-{{- end}}
-}
-
 func findMinFn(t reflect.Type) interface{} {
     switch t.String() {
 {{- range .X}}
diff --git a/sdks/go/pkg/beam/transforms/stats/stats.shims.go 
b/sdks/go/pkg/beam/transforms/stats/stats.shims.go
new file mode 100644
index 0000000..0fbe670
--- /dev/null
+++ b/sdks/go/pkg/beam/transforms/stats/stats.shims.go
@@ -0,0 +1,535 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Code generated by starcgen. DO NOT EDIT.
+// File: stats.shims.go
+
+package stats
+
+import (
+       "reflect"
+
+       // Library imports
+       "github.com/apache/beam/sdks/go/pkg/beam/core/runtime"
+       "github.com/apache/beam/sdks/go/pkg/beam/core/typex"
+       "github.com/apache/beam/sdks/go/pkg/beam/core/util/reflectx"
+)
+
+func init() {
+       runtime.RegisterFunction(mapFn)
+       runtime.RegisterFunction(maxFloat32Fn)
+       runtime.RegisterFunction(maxFloat64Fn)
+       runtime.RegisterFunction(maxInt16Fn)
+       runtime.RegisterFunction(maxInt32Fn)
+       runtime.RegisterFunction(maxInt64Fn)
+       runtime.RegisterFunction(maxInt8Fn)
+       runtime.RegisterFunction(maxIntFn)
+       runtime.RegisterFunction(maxUint16Fn)
+       runtime.RegisterFunction(maxUint32Fn)
+       runtime.RegisterFunction(maxUint64Fn)
+       runtime.RegisterFunction(maxUint8Fn)
+       runtime.RegisterFunction(maxUintFn)
+       runtime.RegisterFunction(minFloat32Fn)
+       runtime.RegisterFunction(minFloat64Fn)
+       runtime.RegisterFunction(minInt16Fn)
+       runtime.RegisterFunction(minInt32Fn)
+       runtime.RegisterFunction(minInt64Fn)
+       runtime.RegisterFunction(minInt8Fn)
+       runtime.RegisterFunction(minIntFn)
+       runtime.RegisterFunction(minUint16Fn)
+       runtime.RegisterFunction(minUint32Fn)
+       runtime.RegisterFunction(minUint64Fn)
+       runtime.RegisterFunction(minUint8Fn)
+       runtime.RegisterFunction(minUintFn)
+       runtime.RegisterFunction(sumFloat32Fn)
+       runtime.RegisterFunction(sumFloat64Fn)
+       runtime.RegisterFunction(sumInt16Fn)
+       runtime.RegisterFunction(sumInt32Fn)
+       runtime.RegisterFunction(sumInt64Fn)
+       runtime.RegisterFunction(sumInt8Fn)
+       runtime.RegisterFunction(sumIntFn)
+       runtime.RegisterFunction(sumUint16Fn)
+       runtime.RegisterFunction(sumUint32Fn)
+       runtime.RegisterFunction(sumUint64Fn)
+       runtime.RegisterFunction(sumUint8Fn)
+       runtime.RegisterFunction(sumUintFn)
+       runtime.RegisterType(reflect.TypeOf((*meanAccum)(nil)).Elem())
+       runtime.RegisterType(reflect.TypeOf((*meanFn)(nil)).Elem())
+       runtime.RegisterType(reflect.TypeOf((*typex.T)(nil)).Elem())
+       reflectx.RegisterFunc(reflect.TypeOf((*func(float32,float32) 
(float32))(nil)).Elem(), funcMakerFloat32Float32ГFloat32)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(float64,float64) 
(float64))(nil)).Elem(), funcMakerFloat64Float64ГFloat64)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(int16,int16) 
(int16))(nil)).Elem(), funcMakerInt16Int16ГInt16)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(int32,int32) 
(int32))(nil)).Elem(), funcMakerInt32Int32ГInt32)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(int64,int64) 
(int64))(nil)).Elem(), funcMakerInt64Int64ГInt64)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(int8,int8) 
(int8))(nil)).Elem(), funcMakerInt8Int8ГInt8)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(int,int) 
(int))(nil)).Elem(), funcMakerIntIntГInt)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(meanAccum,typex.T) 
(meanAccum))(nil)).Elem(), funcMakerMeanAccumTypex۰TГMeanAccum)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(meanAccum) 
(float64))(nil)).Elem(), funcMakerMeanAccumГFloat64)
+       reflectx.RegisterFunc(reflect.TypeOf((*func([]meanAccum) 
(meanAccum))(nil)).Elem(), funcMakerSliceofMeanAccumГMeanAccum)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(typex.T) 
(typex.T,int))(nil)).Elem(), funcMakerTypex۰TГTypex۰TInt)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(uint16,uint16) 
(uint16))(nil)).Elem(), funcMakerUint16Uint16ГUint16)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(uint32,uint32) 
(uint32))(nil)).Elem(), funcMakerUint32Uint32ГUint32)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(uint64,uint64) 
(uint64))(nil)).Elem(), funcMakerUint64Uint64ГUint64)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(uint8,uint8) 
(uint8))(nil)).Elem(), funcMakerUint8Uint8ГUint8)
+       reflectx.RegisterFunc(reflect.TypeOf((*func(uint,uint) 
(uint))(nil)).Elem(), funcMakerUintUintГUint)
+       reflectx.RegisterFunc(reflect.TypeOf((*func() 
(meanAccum))(nil)).Elem(), funcMakerГMeanAccum)
+}
+
+type callerFloat32Float32ГFloat32 struct {
+       fn func(float32,float32) (float32)
+}
+
+func funcMakerFloat32Float32ГFloat32(fn interface{}) reflectx.Func {
+       f := fn.(func(float32,float32) (float32))
+       return &callerFloat32Float32ГFloat32{fn: f}
+}
+
+func (c *callerFloat32Float32ГFloat32) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerFloat32Float32ГFloat32) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerFloat32Float32ГFloat32) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(float32), args[1].(float32))
+       return []interface{}{out0}
+}
+
+func (c *callerFloat32Float32ГFloat32) Call2x1(arg0, arg1 interface{}) 
(interface{}) {
+       return c.fn(arg0.(float32), arg1.(float32))
+}
+
+type callerFloat64Float64ГFloat64 struct {
+       fn func(float64,float64) (float64)
+}
+
+func funcMakerFloat64Float64ГFloat64(fn interface{}) reflectx.Func {
+       f := fn.(func(float64,float64) (float64))
+       return &callerFloat64Float64ГFloat64{fn: f}
+}
+
+func (c *callerFloat64Float64ГFloat64) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerFloat64Float64ГFloat64) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerFloat64Float64ГFloat64) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(float64), args[1].(float64))
+       return []interface{}{out0}
+}
+
+func (c *callerFloat64Float64ГFloat64) Call2x1(arg0, arg1 interface{}) 
(interface{}) {
+       return c.fn(arg0.(float64), arg1.(float64))
+}
+
+type callerInt16Int16ГInt16 struct {
+       fn func(int16,int16) (int16)
+}
+
+func funcMakerInt16Int16ГInt16(fn interface{}) reflectx.Func {
+       f := fn.(func(int16,int16) (int16))
+       return &callerInt16Int16ГInt16{fn: f}
+}
+
+func (c *callerInt16Int16ГInt16) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerInt16Int16ГInt16) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerInt16Int16ГInt16) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(int16), args[1].(int16))
+       return []interface{}{out0}
+}
+
+func (c *callerInt16Int16ГInt16) Call2x1(arg0, arg1 interface{}) (interface{}) 
{
+       return c.fn(arg0.(int16), arg1.(int16))
+}
+
+type callerInt32Int32ГInt32 struct {
+       fn func(int32,int32) (int32)
+}
+
+func funcMakerInt32Int32ГInt32(fn interface{}) reflectx.Func {
+       f := fn.(func(int32,int32) (int32))
+       return &callerInt32Int32ГInt32{fn: f}
+}
+
+func (c *callerInt32Int32ГInt32) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerInt32Int32ГInt32) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerInt32Int32ГInt32) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(int32), args[1].(int32))
+       return []interface{}{out0}
+}
+
+func (c *callerInt32Int32ГInt32) Call2x1(arg0, arg1 interface{}) (interface{}) 
{
+       return c.fn(arg0.(int32), arg1.(int32))
+}
+
+type callerInt64Int64ГInt64 struct {
+       fn func(int64,int64) (int64)
+}
+
+func funcMakerInt64Int64ГInt64(fn interface{}) reflectx.Func {
+       f := fn.(func(int64,int64) (int64))
+       return &callerInt64Int64ГInt64{fn: f}
+}
+
+func (c *callerInt64Int64ГInt64) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerInt64Int64ГInt64) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerInt64Int64ГInt64) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(int64), args[1].(int64))
+       return []interface{}{out0}
+}
+
+func (c *callerInt64Int64ГInt64) Call2x1(arg0, arg1 interface{}) (interface{}) 
{
+       return c.fn(arg0.(int64), arg1.(int64))
+}
+
+type callerInt8Int8ГInt8 struct {
+       fn func(int8,int8) (int8)
+}
+
+func funcMakerInt8Int8ГInt8(fn interface{}) reflectx.Func {
+       f := fn.(func(int8,int8) (int8))
+       return &callerInt8Int8ГInt8{fn: f}
+}
+
+func (c *callerInt8Int8ГInt8) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerInt8Int8ГInt8) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerInt8Int8ГInt8) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(int8), args[1].(int8))
+       return []interface{}{out0}
+}
+
+func (c *callerInt8Int8ГInt8) Call2x1(arg0, arg1 interface{}) (interface{}) {
+       return c.fn(arg0.(int8), arg1.(int8))
+}
+
+type callerIntIntГInt struct {
+       fn func(int,int) (int)
+}
+
+func funcMakerIntIntГInt(fn interface{}) reflectx.Func {
+       f := fn.(func(int,int) (int))
+       return &callerIntIntГInt{fn: f}
+}
+
+func (c *callerIntIntГInt) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerIntIntГInt) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerIntIntГInt) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(int), args[1].(int))
+       return []interface{}{out0}
+}
+
+func (c *callerIntIntГInt) Call2x1(arg0, arg1 interface{}) (interface{}) {
+       return c.fn(arg0.(int), arg1.(int))
+}
+
+type callerMeanAccumTypex۰TГMeanAccum struct {
+       fn func(meanAccum,typex.T) (meanAccum)
+}
+
+func funcMakerMeanAccumTypex۰TГMeanAccum(fn interface{}) reflectx.Func {
+       f := fn.(func(meanAccum,typex.T) (meanAccum))
+       return &callerMeanAccumTypex۰TГMeanAccum{fn: f}
+}
+
+func (c *callerMeanAccumTypex۰TГMeanAccum) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerMeanAccumTypex۰TГMeanAccum) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerMeanAccumTypex۰TГMeanAccum) Call(args []interface{}) 
[]interface{} {
+       out0 := c.fn(args[0].(meanAccum), args[1].(typex.T))
+       return []interface{}{out0}
+}
+
+func (c *callerMeanAccumTypex۰TГMeanAccum) Call2x1(arg0, arg1 interface{}) 
(interface{}) {
+       return c.fn(arg0.(meanAccum), arg1.(typex.T))
+}
+
+type callerMeanAccumГFloat64 struct {
+       fn func(meanAccum) (float64)
+}
+
+func funcMakerMeanAccumГFloat64(fn interface{}) reflectx.Func {
+       f := fn.(func(meanAccum) (float64))
+       return &callerMeanAccumГFloat64{fn: f}
+}
+
+func (c *callerMeanAccumГFloat64) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerMeanAccumГFloat64) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerMeanAccumГFloat64) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(meanAccum))
+       return []interface{}{out0}
+}
+
+func (c *callerMeanAccumГFloat64) Call1x1(arg0 interface{}) (interface{}) {
+       return c.fn(arg0.(meanAccum))
+}
+
+type callerSliceofMeanAccumГMeanAccum struct {
+       fn func([]meanAccum) (meanAccum)
+}
+
+func funcMakerSliceofMeanAccumГMeanAccum(fn interface{}) reflectx.Func {
+       f := fn.(func([]meanAccum) (meanAccum))
+       return &callerSliceofMeanAccumГMeanAccum{fn: f}
+}
+
+func (c *callerSliceofMeanAccumГMeanAccum) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerSliceofMeanAccumГMeanAccum) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerSliceofMeanAccumГMeanAccum) Call(args []interface{}) 
[]interface{} {
+       out0 := c.fn(args[0].([]meanAccum))
+       return []interface{}{out0}
+}
+
+func (c *callerSliceofMeanAccumГMeanAccum) Call1x1(arg0 interface{}) 
(interface{}) {
+       return c.fn(arg0.([]meanAccum))
+}
+
+type callerTypex۰TГTypex۰TInt struct {
+       fn func(typex.T) (typex.T,int)
+}
+
+func funcMakerTypex۰TГTypex۰TInt(fn interface{}) reflectx.Func {
+       f := fn.(func(typex.T) (typex.T,int))
+       return &callerTypex۰TГTypex۰TInt{fn: f}
+}
+
+func (c *callerTypex۰TГTypex۰TInt) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerTypex۰TГTypex۰TInt) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerTypex۰TГTypex۰TInt) Call(args []interface{}) []interface{} {
+       out0, out1 := c.fn(args[0].(typex.T))
+       return []interface{}{out0, out1}
+}
+
+func (c *callerTypex۰TГTypex۰TInt) Call1x2(arg0 interface{}) (interface{}, 
interface{}) {
+       return c.fn(arg0.(typex.T))
+}
+
+type callerUint16Uint16ГUint16 struct {
+       fn func(uint16,uint16) (uint16)
+}
+
+func funcMakerUint16Uint16ГUint16(fn interface{}) reflectx.Func {
+       f := fn.(func(uint16,uint16) (uint16))
+       return &callerUint16Uint16ГUint16{fn: f}
+}
+
+func (c *callerUint16Uint16ГUint16) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerUint16Uint16ГUint16) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerUint16Uint16ГUint16) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(uint16), args[1].(uint16))
+       return []interface{}{out0}
+}
+
+func (c *callerUint16Uint16ГUint16) Call2x1(arg0, arg1 interface{}) 
(interface{}) {
+       return c.fn(arg0.(uint16), arg1.(uint16))
+}
+
+type callerUint32Uint32ГUint32 struct {
+       fn func(uint32,uint32) (uint32)
+}
+
+func funcMakerUint32Uint32ГUint32(fn interface{}) reflectx.Func {
+       f := fn.(func(uint32,uint32) (uint32))
+       return &callerUint32Uint32ГUint32{fn: f}
+}
+
+func (c *callerUint32Uint32ГUint32) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerUint32Uint32ГUint32) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerUint32Uint32ГUint32) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(uint32), args[1].(uint32))
+       return []interface{}{out0}
+}
+
+func (c *callerUint32Uint32ГUint32) Call2x1(arg0, arg1 interface{}) 
(interface{}) {
+       return c.fn(arg0.(uint32), arg1.(uint32))
+}
+
+type callerUint64Uint64ГUint64 struct {
+       fn func(uint64,uint64) (uint64)
+}
+
+func funcMakerUint64Uint64ГUint64(fn interface{}) reflectx.Func {
+       f := fn.(func(uint64,uint64) (uint64))
+       return &callerUint64Uint64ГUint64{fn: f}
+}
+
+func (c *callerUint64Uint64ГUint64) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerUint64Uint64ГUint64) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerUint64Uint64ГUint64) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(uint64), args[1].(uint64))
+       return []interface{}{out0}
+}
+
+func (c *callerUint64Uint64ГUint64) Call2x1(arg0, arg1 interface{}) 
(interface{}) {
+       return c.fn(arg0.(uint64), arg1.(uint64))
+}
+
+type callerUint8Uint8ГUint8 struct {
+       fn func(uint8,uint8) (uint8)
+}
+
+func funcMakerUint8Uint8ГUint8(fn interface{}) reflectx.Func {
+       f := fn.(func(uint8,uint8) (uint8))
+       return &callerUint8Uint8ГUint8{fn: f}
+}
+
+func (c *callerUint8Uint8ГUint8) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerUint8Uint8ГUint8) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerUint8Uint8ГUint8) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(uint8), args[1].(uint8))
+       return []interface{}{out0}
+}
+
+func (c *callerUint8Uint8ГUint8) Call2x1(arg0, arg1 interface{}) (interface{}) 
{
+       return c.fn(arg0.(uint8), arg1.(uint8))
+}
+
+type callerUintUintГUint struct {
+       fn func(uint,uint) (uint)
+}
+
+func funcMakerUintUintГUint(fn interface{}) reflectx.Func {
+       f := fn.(func(uint,uint) (uint))
+       return &callerUintUintГUint{fn: f}
+}
+
+func (c *callerUintUintГUint) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerUintUintГUint) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerUintUintГUint) Call(args []interface{}) []interface{} {
+       out0 := c.fn(args[0].(uint), args[1].(uint))
+       return []interface{}{out0}
+}
+
+func (c *callerUintUintГUint) Call2x1(arg0, arg1 interface{}) (interface{}) {
+       return c.fn(arg0.(uint), arg1.(uint))
+}
+
+type callerГMeanAccum struct {
+       fn func() (meanAccum)
+}
+
+func funcMakerГMeanAccum(fn interface{}) reflectx.Func {
+       f := fn.(func() (meanAccum))
+       return &callerГMeanAccum{fn: f}
+}
+
+func (c *callerГMeanAccum) Name() string {
+       return reflectx.FunctionName(c.fn)
+}
+
+func (c *callerГMeanAccum) Type() reflect.Type {
+       return reflect.TypeOf(c.fn)
+}
+
+func (c *callerГMeanAccum) Call(args []interface{}) []interface{} {
+       out0 := c.fn()
+       return []interface{}{out0}
+}
+
+func (c *callerГMeanAccum) Call0x1() (interface{}) {
+       return c.fn()
+}
+
+
+
+
+// DO NOT MODIFY: GENERATED CODE
diff --git a/sdks/go/pkg/beam/transforms/stats/sum_switch.go 
b/sdks/go/pkg/beam/transforms/stats/sum_switch.go
index 4c80ec2..cfea44a 100644
--- a/sdks/go/pkg/beam/transforms/stats/sum_switch.go
+++ b/sdks/go/pkg/beam/transforms/stats/sum_switch.go
@@ -20,25 +20,8 @@ package stats
 import (
        "fmt"
        "reflect"
-
-       "github.com/apache/beam/sdks/go/pkg/beam"
 )
 
-func init() {
-       beam.RegisterFunction(sumIntFn)
-       beam.RegisterFunction(sumInt8Fn)
-       beam.RegisterFunction(sumInt16Fn)
-       beam.RegisterFunction(sumInt32Fn)
-       beam.RegisterFunction(sumInt64Fn)
-       beam.RegisterFunction(sumUintFn)
-       beam.RegisterFunction(sumUint8Fn)
-       beam.RegisterFunction(sumUint16Fn)
-       beam.RegisterFunction(sumUint32Fn)
-       beam.RegisterFunction(sumUint64Fn)
-       beam.RegisterFunction(sumFloat32Fn)
-       beam.RegisterFunction(sumFloat64Fn)
-}
-
 func findSumFn(t reflect.Type) interface{} {
        switch t.String() {
        case "int":
diff --git a/sdks/go/pkg/beam/transforms/stats/sum_switch.tmpl 
b/sdks/go/pkg/beam/transforms/stats/sum_switch.tmpl
index ddafb95..e431318 100644
--- a/sdks/go/pkg/beam/transforms/stats/sum_switch.tmpl
+++ b/sdks/go/pkg/beam/transforms/stats/sum_switch.tmpl
@@ -18,16 +18,8 @@ package stats
 import (
     "fmt"
     "reflect"
-
-       "github.com/apache/beam/sdks/go/pkg/beam"
 )
 
-func init() {
-{{- range .X}}
-       beam.RegisterFunction(sum{{.Name}}Fn)
-{{- end}}
-}
-
 func findSumFn(t reflect.Type) interface{} {
     switch t.String() {
 {{- range .X}}
diff --git a/sdks/go/pkg/beam/transforms/stats/util.go 
b/sdks/go/pkg/beam/transforms/stats/util.go
index 970c269..8776207 100644
--- a/sdks/go/pkg/beam/transforms/stats/util.go
+++ b/sdks/go/pkg/beam/transforms/stats/util.go
@@ -13,6 +13,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+// We use the almost vestigial util_gen.tmpl to be able to similarly generate 
all
+// the same function identifiers more easily for shim generation.
+// The generate statements live here since `go:generate` operates in filename 
order,
+// and this is the last file in the package.
+
+//go:generate specialize --input=util_gen.tmpl --x=integers,floats
+//go:generate gofmt -w util_gen.go
+//go:generate go generate util_gen.go
+
 package stats
 
 import (
diff --git a/sdks/go/pkg/beam/transforms/stats/min_switch.tmpl 
b/sdks/go/pkg/beam/transforms/stats/util_gen.go
similarity index 58%
copy from sdks/go/pkg/beam/transforms/stats/min_switch.tmpl
copy to sdks/go/pkg/beam/transforms/stats/util_gen.go
index 1175518..d773c0f 100644
--- a/sdks/go/pkg/beam/transforms/stats/min_switch.tmpl
+++ b/sdks/go/pkg/beam/transforms/stats/util_gen.go
@@ -1,3 +1,5 @@
+// File generated by specialize. Do not edit.
+
 // Licensed to the Apache Software Foundation (ASF) under one or more
 // contributor license agreements.  See the NOTICE file distributed with
 // this work for additional information regarding copyright ownership.
@@ -15,34 +17,4 @@
 
 package stats
 
-import (
-    "fmt"
-    "reflect"
-
-       "github.com/apache/beam/sdks/go/pkg/beam"
-)
-
-func init() {
-{{- range .X}}
-       beam.RegisterFunction(min{{.Name}}Fn)
-{{- end}}
-}
-
-func findMinFn(t reflect.Type) interface{} {
-    switch t.String() {
-{{- range .X}}
-    case "{{.Type}}":
-               return min{{.Name}}Fn
-{{- end}}
-       default:
-               panic(fmt.Sprintf("Unexpected number type: %v", t))
-       }
-}
-{{range .X}}
-func min{{.Name}}Fn(x, y {{.Type}}) {{.Type}} {
-       if x < y {
-               return x
-       }
-       return y
-}
-{{end}}
+//go:generate starcgen 
--inputs=count.go,mean.go,max_switch.go,min_switch.go,sum_switch.go 
--identifiers=mapFn,meanFn,maxIntFn,minIntFn,sumIntFn,maxInt8Fn,minInt8Fn,sumInt8Fn,maxInt16Fn,minInt16Fn,sumInt16Fn,maxInt32Fn,minInt32Fn,sumInt32Fn,maxInt64Fn,minInt64Fn,sumInt64Fn,maxUintFn,minUintFn,sumUintFn,maxUint8Fn,minUint8Fn,sumUint8Fn,maxUint16Fn,minUint16Fn,sumUint16Fn,maxUint32Fn,minUint32Fn,sumUint32Fn,maxUint64Fn,minUint64Fn,sumUint64Fn,maxFloat32Fn,minFloat32Fn,sumFloat32Fn,maxFloat
 [...]
diff --git a/sdks/go/pkg/beam/transforms/stats/sum_switch.tmpl 
b/sdks/go/pkg/beam/transforms/stats/util_gen.tmpl
similarity index 64%
copy from sdks/go/pkg/beam/transforms/stats/sum_switch.tmpl
copy to sdks/go/pkg/beam/transforms/stats/util_gen.tmpl
index ddafb95..398120a 100644
--- a/sdks/go/pkg/beam/transforms/stats/sum_switch.tmpl
+++ b/sdks/go/pkg/beam/transforms/stats/util_gen.tmpl
@@ -15,31 +15,7 @@
 
 package stats
 
-import (
-    "fmt"
-    "reflect"
-
-       "github.com/apache/beam/sdks/go/pkg/beam"
-)
-
-func init() {
-{{- range .X}}
-       beam.RegisterFunction(sum{{.Name}}Fn)
-{{- end}}
-}
-
-func findSumFn(t reflect.Type) interface{} {
-    switch t.String() {
-{{- range .X}}
-    case "{{.Type}}":
-               return sum{{.Name}}Fn
-{{- end}}
-       default:
-               panic(fmt.Sprintf("Unexpected number type: %v", t))
-       }
-}
-{{range .X}}
-func sum{{.Name}}Fn(x, y {{.Type}}) {{.Type}} {
-       return x + y
-}
+{{with $x := .X }}
+//go:generate starcgen 
--inputs=count.go,mean.go,max_switch.go,min_switch.go,sum_switch.go 
--identifiers=mapFn,meanFn{{- range $i, $t := $x 
-}},max{{$t.Name}}Fn,min{{$t.Name}}Fn,sum{{$t.Name}}Fn{{- end -}}
 {{end}}
+

Reply via email to