I/O pipeline, show arvados container logs.
[lightning.git] / pca.go
1 package main
2
3 import (
4         "flag"
5         "fmt"
6         "io"
7         _ "net/http/pprof"
8
9         "git.arvados.org/arvados.git/sdk/go/arvados"
10 )
11
12 type pythonPCA struct{}
13
14 func (cmd *pythonPCA) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
15         var err error
16         defer func() {
17                 if err != nil {
18                         fmt.Fprintf(stderr, "%s\n", err)
19                 }
20         }()
21         flags := flag.NewFlagSet("", flag.ContinueOnError)
22         flags.SetOutput(stderr)
23         projectUUID := flags.String("project", "", "project `UUID` for output data")
24         inputFilename := flags.String("i", "-", "input `file`")
25         err = flags.Parse(args)
26         if err == flag.ErrHelp {
27                 err = nil
28                 return 0
29         } else if err != nil {
30                 return 2
31         }
32
33         runner := arvadosContainerRunner{
34                 Name:        "lightning pca",
35                 Client:      arvados.NewClientFromEnv(),
36                 ProjectUUID: *projectUUID,
37                 RAM:         120000000000,
38                 VCPUs:       1,
39         }
40         err = runner.TranslatePaths(inputFilename)
41         if err != nil {
42                 return 1
43         }
44         runner.Prog = "python3"
45         runner.Args = []string{"-c", `import sys
46 import scipy
47 from sklearn.decomposition import PCA
48 scipy.save(sys.argv[2], PCA(n_components=4).fit_transform(scipy.load(sys.argv[1])))`, *inputFilename, "/mnt/output/pca.npy"}
49         var output string
50         output, err = runner.Run()
51         if err != nil {
52                 return 1
53         }
54         fmt.Fprintln(stdout, output+"/pca.npy")
55         return 0
56 }