15 "git.arvados.org/arvados.git/sdk/go/arvados"
16 "github.com/kshedden/gonpy"
19 type exportNumpy struct{}
21 func (cmd *exportNumpy) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
25 fmt.Fprintf(stderr, "%s\n", err)
28 flags := flag.NewFlagSet("", flag.ContinueOnError)
29 flags.SetOutput(stderr)
30 pprof := flags.String("pprof", "", "serve Go profile data at http://`[addr]:port`")
31 runlocal := flags.Bool("local", false, "run on local host (default: run in an arvados container)")
32 projectUUID := flags.String("project", "", "project `UUID` for output data")
33 inputFilename := flags.String("i", "-", "input `file`")
34 outputFilename := flags.String("o", "-", "output `file`")
35 err = flags.Parse(args)
36 if err == flag.ErrHelp {
39 } else if err != nil {
45 log.Println(http.ListenAndServe(*pprof, nil))
50 if *outputFilename != "-" {
51 err = errors.New("cannot specify output file in container mode: not implemented")
54 runner := arvadosContainerRunner{
55 Name: "lightning export-numpy",
56 Client: arvados.NewClientFromEnv(),
57 ProjectUUID: *projectUUID,
61 err = runner.TranslatePaths(inputFilename)
65 runner.Args = []string{"export-numpy", "-local=true", "-i", *inputFilename, "-o", "/mnt/output/library.npy"}
67 output, err = runner.Run()
71 fmt.Fprintln(stdout, output+"/library.npy")
75 var input io.ReadCloser
76 if *inputFilename == "-" {
77 input = ioutil.NopCloser(stdin)
79 input, err = os.Open(*inputFilename)
85 cgs, err := ReadCompactGenomes(input)
94 for _, cg := range cgs {
95 if cols < len(cg.Variants) {
96 cols = len(cg.Variants)
100 out := make([]uint16, rows*cols)
101 for row, cg := range cgs {
102 for i, v := range cg.Variants {
103 out[row*cols+i] = uint16(v)
107 var output io.WriteCloser
108 if *outputFilename == "-" {
109 output = nopCloser{stdout}
111 output, err = os.OpenFile(*outputFilename, os.O_CREATE|os.O_WRONLY, 0777)
117 bufw := bufio.NewWriter(output)
118 npw, err := gonpy.NewWriter(nopCloser{bufw})
122 npw.Shape = []int{rows, cols}
135 type nopCloser struct {
139 func (nopCloser) Close() error { return nil }