Python / PEP8 > E128 continuation line under-indented for visual indent を解消しようとしてみた

### TensorFlow

```txt:動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
```

## 前置き
### original code

実装途中のコード。TensorFlowで100ノード(input)、100ノード(output)の学習予定。

```learn_in100out100.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import tensorflow as tf
import tensorflow.contrib.slim as slim
import numpy as np

'''
v0.1 Feb. 06, 2017
    - read [test_in.csv],[test_out.csv]
'''

'''
codingrule:PEP8
'''

filename_inp = tf.train.string_input_producer(["test_in.csv"])
filename_out = tf.train.string_input_producer(["test_out.csv"])
NUM_INP_NODE = 100
NUM_OUT_NODE = 100

# parse csv
# a. input node
reader = tf.TextLineReader()
key, value = reader.read(filename_inp)
deflist = [[0.] for idx in range(NUM_INP_NODE)]
input1 = tf.decode_csv(value, record_defaults=deflist)
# b. output node
key, value = reader.read(filename_out)
deflist = [[0.] for idx in range(NUM_OUT_NODE)]
output1 = tf.decode_csv(value, record_defaults=deflist)
# c. pack
inputs = tf.pack([input1])
outputs = tf.pack([output1])

batch_size = 4
inputs_batch, output_batch = tf.train.shuffle_batch([inputs, outputs], batch_size, capacity=40, min_after_dequeue = batch_size)

input_ph = tf.placeholder("float", [None, 1])
output_ph = tf.placeholder("float", [None, 1])

# network
```

PEP8でチェックしたら、以下のエラーが出た。

> $ pep8 learn_in100out100.py 
learn_in100out100.py:38:80: E501 line too long (127 > 79 characters)

### 改行してみた

`inputs_batch, output_batch = tf.train.shuffle_batch([inputs, outputs], batch_size, capacity=40, min_after_dequeue = batch_size)`

を以下のように改行した。

```
inputs_batch, output_batch = tf.train.shuffle_batch(
	[inputs, outputs], batch_size, capacity=40, min_after_dequeue = batch_size)
```

2行目はSublime Text2ではTabになった。

> $ pep8 learn_in100out100.py 
learn_in100out100.py:39:1: E101 indentation contains mixed spaces and tabs
learn_in100out100.py:39:1: W191 indentation contains tabs


### Tabをやめた

Tabをやめて4つの空白にした。

```
inputs_batch, output_batch = tf.train.shuffle_batch(
    [inputs, outputs], batch_size, capacity=40, min_after_dequeue = batch_size)
```

>$ pep8 learn_in100out100.py 
learn_in100out100.py:39:66: E251 unexpected spaces around keyword / parameter equals
learn_in100out100.py:39:68: E251 unexpected spaces around keyword / parameter equals

### 改行する引数の位置を変更した

1つ目のリストでなく、２つ目のbatch_sizeから２行目にした。

```
inputs_batch, output_batch = tf.train.shuffle_batch([inputs, outputs], 
    batch_size, capacity=40, min_after_dequeue = batch_size)
```

>$ pep8 learn_in100out100.py 
learn_in100out100.py:39:5: E128 continuation line under-indented for visual indent

## 本題

> learn_in100out100.py:39:5: E128 continuation line under-indented for visual indent

の対処。

参考 http://stackoverflow.com/questions/15435811/what-is-pep8s-e128-continuation-line-under-indented-for-visual-indent

引数の位置は括弧に合わせるとのこと。

```
inputs_batch, output_batch = tf.train.shuffle_batch([inputs, outputs],
                                                    batch_size, capacity=40, min_after_dequeue = batch_size)
```

> $ pep8 learn_in100out100.py 
learn_in100out100.py:39:80: E501 line too long (108 > 79 characters)
learn_in100out100.py:39:95: E251 unexpected spaces around keyword / parameter equals
learn_in100out100.py:39:97: E251 unexpected spaces around keyword / parameter equals

本題のエラーは解消されたが、1行が80文字以上になり、最初に戻る。

> カーズは考えるのをやめた