BETA

OSSにIssue書いてPRしてなんとかMergeされた話

投稿日:2019-09-28
最終更新:2019-09-28

OptunaというPythonライブラリを使っていたところ、直感的でない挙動があったのでそれを直した話になります。IssueしてMergeまでは約1ヶ月でした。長かった。

Optunaとは

機械学習用のハイパーパラメータ自動最適化ツール。Pythonのライブラリやフレームワークに縛られることなく使用できるのが売りです。
ハイパーパラメータ自動最適化ツール「Optuna」公開 | Preferred Research ←もっと詳しい説明

参考までに私のレベル

Pythonの偏差値は42らしいです。はい。

ハイスキルなエンジニアのプレミアム転職Findy(ファインディ)より

ことのはじめ

Python3.7.4でOptuna0.16.0を使ってると、以下のようなWarning文が表示されました。

0から1の範囲で0.1ずつだと0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0となると思っていたのですが、なぜか0~0.9の範囲に変更されてしまったようです。
疑問に思ったのでドキュメントを見てみると丸め誤差によって変更されてしまうことがあるとのこと。

Note that may be excluded from ranges due to round-off errors if is not an integer.

ソースコードでは、math.fmodを使って0かどうかを判定していました。どうやらここが問題のようです。

import math  

print(math.fmod(1.0, 0.1))  # 0.009999999999999953となり0になってない  

これはDecimalを使えば解決できそうです。
decimal --- 十進固定及び浮動小数点数の算術演算 Python 3.7.4 ドキュメント

import decimal  

print(decimal.Decimal(str(1.0)) % decimal.Decimal(str(0.1)))  # 0になってる  

これなら偏差値42の私でも直せるのでは???

IsuueからPRまで

作ったIsuueとPR

迷ったことその1: IsuueかPRか

問題点もわかり、コードの改善方法も検討がつきました。

そんな中、いきなり改善コードをPull Requestしていいのか、という疑問が浮かびました。
なんせコードの改善は初めてのことなので不安で不安で。ネットで漁っていると一つの記事を見つけます。
なぜあなたのPull Requestは読まれないのか - Qiita

参考になった箇所は、Pull RequestじゃなくてIssueに改善案とかを書こうってところです。
それで、まずはどんな問題があって、どう改善するかをIssueに書いて、開発者側にとってその変更が必要ならPull Requestしようと決めました。
すると開発側から「私たちもそこ気になってたよ。具体的な改善方法を検討してみるけど、興味あるならPull Requestしてね」と返事がありました。
はい、当然プルリクしますとも!

迷ったことその2: 直したコードがテストに通らない

Optuna側ではこの丸め誤差は仕様だったようで、テストもその誤差が起きる前提で作られていました。
この丸め誤差を改善したことで、元々のテストが通らなくなってしまったわけです。
したがって、これをPull Requestしても自動テストによって弾かれてしまいます。

はてどうしたものか...。
改善したコード用のテストを新しく作りましたが、コードを通すためのにテストを新しく作るのって大丈夫なんですかね?
なので、コード変えたらテスト通らなくなるよ、とIssueで一応説明しておきました。

迷ったことその3: 改善コードとそのテストは一緒にPRしていいのか

Githubについての記事は前から色々と見ていたので、「コミットは細かく行うべきだ」ということを知っていました。そのためこのような疑問が浮かんだのです。
ネットで漁ってもそれらしい記事を見つけられなかったので、Issueで聞いてみることにしました。

回答は「テストと一緒にしてPull Requestしたほうがいいかも」とのこと。
聞くは一時の恥聞かぬは一生の恥とはよく言ったものです。

改善したコード用のテストを新しく作って、一緒にPull Requestしました。

PR後からMargeまで

Pull Requestを出した後、コードの改良案が来たのでそれを取り込みました。それからドキュメントの変更についての話になったりして、最終的にMargeされてました。めでたしめでたし。

最後に

どんな馬の骨かもわからない人からのIssueとPRに対応してくれた開発者の方々に感謝!

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

A03kiの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!