├── .codecov.yml ├── .git-blame-ignore-revs ├── .github └── workflows │ ├── ci.yml │ └── clean.yml ├── .gitignore ├── .jvmopts ├── .mergify.yml ├── .scala-steward.conf ├── .scalafmt.conf ├── LICENSE ├── README.md ├── build.sbt ├── data └── downloads │ ├── 2016-06-refined_2.10.csv │ ├── 2016-06-refined_2.11.csv │ ├── 2016-07-refined_2.10.csv │ ├── 2016-07-refined_2.11.csv │ ├── 2016-08-refined_2.10.csv │ ├── 2016-08-refined_2.11.csv │ ├── 2016-09-refined_2.10.csv │ ├── 2016-09-refined_2.11.csv │ ├── 2016-10-refined_2.10.csv │ ├── 2016-10-refined_2.11.csv │ ├── 2016-11-refined_2.10.csv │ ├── 2016-11-refined_2.11.csv │ ├── 2016-11-refined_2.12.csv │ ├── 2016-12-refined_2.10.csv │ ├── 2016-12-refined_2.11.csv │ ├── 2016-12-refined_2.12.csv │ ├── 2017-01-refined_2.10.csv │ ├── 2017-01-refined_2.11.csv │ ├── 2017-01-refined_2.12.csv │ ├── 2017-02-refined_2.10.csv │ ├── 2017-02-refined_2.11.csv │ ├── 2017-02-refined_2.12.csv │ ├── 2017-03-refined_2.10.csv │ ├── 2017-03-refined_2.11.csv │ ├── 2017-03-refined_2.12.csv │ ├── 2017-04-refined_2.10.csv │ ├── 2017-04-refined_2.11.csv │ ├── 2017-04-refined_2.12.csv │ ├── 2017-05-refined_2.10.csv │ ├── 2017-05-refined_2.11.csv │ ├── 2017-05-refined_2.12.csv │ ├── 2017-06-refined_2.10.csv │ ├── 2017-06-refined_2.11.csv │ ├── 2017-06-refined_2.12.csv │ ├── 2017-07-refined_2.10.csv │ ├── 2017-07-refined_2.11.csv │ ├── 2017-07-refined_2.12.csv │ ├── 2017-08-refined_2.10.csv │ ├── 2017-08-refined_2.11.csv │ ├── 2017-08-refined_2.12.csv │ ├── 2017-09-refined_2.10.csv │ ├── 2017-09-refined_2.11.csv │ ├── 2017-09-refined_2.12.csv │ ├── 2017-10-refined_2.10.csv │ ├── 2017-10-refined_2.11.csv │ ├── 2017-10-refined_2.12.csv │ ├── 2017-11-refined_2.10.csv │ ├── 2017-11-refined_2.11.csv │ ├── 2017-11-refined_2.12.csv │ ├── 2017-12-refined_2.10.csv │ ├── 2017-12-refined_2.11.csv │ ├── 2017-12-refined_2.12.csv │ ├── 2018-01-refined_2.10.csv │ ├── 2018-01-refined_2.11.csv │ ├── 2018-01-refined_2.12.csv │ ├── 2018-02-refined_2.10.csv │ ├── 2018-02-refined_2.11.csv │ ├── 2018-02-refined_2.12.csv │ ├── 2018-03-refined_2.10.csv │ ├── 2018-03-refined_2.11.csv │ ├── 2018-03-refined_2.12.csv │ ├── 2018-04-refined_2.10.csv │ ├── 2018-04-refined_2.11.csv │ ├── 2018-04-refined_2.12.csv │ ├── 2018-05-refined_2.10.csv │ ├── 2018-05-refined_2.11.csv │ ├── 2018-05-refined_2.12.csv │ ├── 2018-06-refined_2.10.csv │ ├── 2018-06-refined_2.11.csv │ ├── 2018-06-refined_2.12.csv │ ├── 2018-07-refined_2.10.csv │ ├── 2018-07-refined_2.11.csv │ ├── 2018-07-refined_2.12.csv │ ├── 2018-08-refined_2.10.csv │ ├── 2018-08-refined_2.11.csv │ ├── 2018-08-refined_2.12.csv │ ├── 2018-09-refined_2.10.csv │ ├── 2018-09-refined_2.11.csv │ ├── 2018-09-refined_2.12.csv │ ├── 2018-10-refined_2.10.csv │ ├── 2018-10-refined_2.11.csv │ ├── 2018-10-refined_2.12.csv │ ├── 2018-11-refined_2.10.csv │ ├── 2018-11-refined_2.11.csv │ ├── 2018-11-refined_2.12.csv │ ├── 2018-12-refined_2.10.csv │ ├── 2018-12-refined_2.11.csv │ ├── 2018-12-refined_2.12.csv │ ├── 2019-05-refined_2.10.csv │ ├── 2019-05-refined_2.11.csv │ ├── 2019-05-refined_2.12.csv │ ├── 2019-06-refined_2.10.csv │ ├── 2019-06-refined_2.11.csv │ ├── 2019-06-refined_2.12.csv │ ├── 2019-06-refined_2.13.csv │ ├── 2019-07-refined_2.10.csv │ ├── 2019-07-refined_2.11.csv │ ├── 2019-07-refined_2.12.csv │ ├── 2019-07-refined_2.13.csv │ ├── 2019-08-refined_2.10.csv │ ├── 2019-08-refined_2.11.csv │ ├── 2019-08-refined_2.12.csv │ ├── 2019-08-refined_2.13.csv │ ├── 2019-09-refined_2.10.csv │ ├── 2019-09-refined_2.11.csv │ ├── 2019-09-refined_2.12.csv │ ├── 2019-09-refined_2.13.csv │ ├── 2019-10-refined_2.10.csv │ ├── 2019-10-refined_2.11.csv │ ├── 2019-10-refined_2.12.csv │ ├── 2019-10-refined_2.13.csv │ ├── 2019-11-refined_2.10.csv │ ├── 2019-11-refined_2.11.csv │ ├── 2019-11-refined_2.12.csv │ ├── 2019-11-refined_2.13.csv │ ├── 2019-12-refined_2.10.csv │ ├── 2019-12-refined_2.11.csv │ ├── 2019-12-refined_2.12.csv │ ├── 2019-12-refined_2.13.csv │ ├── 2020-01-refined_2.10.csv │ ├── 2020-01-refined_2.11.csv │ ├── 2020-01-refined_2.12.csv │ ├── 2020-01-refined_2.13.csv │ ├── 2020-02-refined_2.10.csv │ ├── 2020-02-refined_2.11.csv │ ├── 2020-02-refined_2.12.csv │ ├── 2020-02-refined_2.13.csv │ ├── 2020-03-refined_2.10.csv │ ├── 2020-03-refined_2.11.csv │ ├── 2020-03-refined_2.12.csv │ ├── 2020-03-refined_2.13.csv │ ├── 2020-04-refined_2.10.csv │ ├── 2020-04-refined_2.11.csv │ ├── 2020-04-refined_2.12.csv │ ├── 2020-04-refined_2.13.csv │ ├── summarize.sc │ └── summary.csv ├── latestVersion.sbt ├── modules ├── benchmark │ └── src │ │ └── main │ │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ └── benchmark │ │ ├── InferMacroBenchmark.scala │ │ ├── PosIntBenchmark.scala │ │ ├── RefineMacroBenchmark.scala │ │ └── RefineVBenchmark.scala ├── cats │ └── shared │ │ └── src │ │ ├── main │ │ └── scala │ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── cats │ │ │ ├── Shift.scala │ │ │ ├── derivation.scala │ │ │ ├── package.scala │ │ │ ├── syntax.scala │ │ │ └── unorderedFoldable.scala │ │ └── test │ │ ├── scala-3.0+ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── cats │ │ │ ├── SyntaxSpec.scala │ │ │ └── UnorderedFoldableSpec.scala │ │ ├── scala-3.0- │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── cats │ │ │ ├── RefTypeMonadErrorSpec.scala │ │ │ ├── SyntaxSpec.scala │ │ │ └── UnorderedFoldableSpec.scala │ │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ └── cats │ │ ├── CatsSpec.scala │ │ ├── CommutativeSemigroupAndMonoidLawTests.scala │ │ ├── RefTypeContravariantSpec.scala │ │ ├── SemigroupSpec.scala │ │ ├── ShiftSpec.scala │ │ └── foo │ │ └── ImportsSpec.scala ├── core │ ├── jvm │ │ └── src │ │ │ └── test │ │ │ └── scala │ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── StringValidateSpecJvm.scala │ └── shared │ │ └── src │ │ ├── main │ │ ├── scala-3.0+ │ │ │ └── eu │ │ │ │ └── timepit │ │ │ │ └── refined │ │ │ │ ├── api │ │ │ │ ├── RefType.scala │ │ │ │ ├── Refined.scala │ │ │ │ └── RefinedTypeOps.scala │ │ │ │ ├── auto.scala │ │ │ │ ├── boolean.scala │ │ │ │ ├── collection.scala │ │ │ │ ├── generic.scala │ │ │ │ ├── internal │ │ │ │ ├── ToInt.scala │ │ │ │ └── WitnessAs.scala │ │ │ │ ├── numeric.scala │ │ │ │ ├── package.scala │ │ │ │ ├── string.scala │ │ │ │ └── types │ │ │ │ ├── digests.scala │ │ │ │ ├── net.scala │ │ │ │ ├── string.scala │ │ │ │ └── time.scala │ │ ├── scala-3.0- │ │ │ └── eu │ │ │ │ └── timepit │ │ │ │ └── refined │ │ │ │ ├── api │ │ │ │ ├── RefType.scala │ │ │ │ ├── Refined.scala │ │ │ │ └── RefinedTypeOps.scala │ │ │ │ ├── auto.scala │ │ │ │ ├── boolean.scala │ │ │ │ ├── collection.scala │ │ │ │ ├── generic.scala │ │ │ │ ├── internal │ │ │ │ ├── ApplyRefMPartiallyApplied.scala │ │ │ │ ├── RefineMFullyApplied.scala │ │ │ │ ├── RefineMPartiallyApplied.scala │ │ │ │ └── WitnessAs.scala │ │ │ │ ├── macros │ │ │ │ ├── InferMacro.scala │ │ │ │ ├── LiteralMatchers.scala │ │ │ │ ├── MacroUtils.scala │ │ │ │ └── RefineMacro.scala │ │ │ │ ├── numeric.scala │ │ │ │ ├── package.scala │ │ │ │ ├── string.scala │ │ │ │ └── types │ │ │ │ ├── digests.scala │ │ │ │ ├── net.scala │ │ │ │ ├── string.scala │ │ │ │ └── time.scala │ │ └── scala │ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ ├── api │ │ │ ├── Inference.scala │ │ │ ├── Max.scala │ │ │ ├── Min.scala │ │ │ ├── RefinedType.scala │ │ │ ├── Result.scala │ │ │ └── Validate.scala │ │ │ ├── char.scala │ │ │ ├── internal │ │ │ ├── Adjacent.scala │ │ │ ├── ApplyRefPartiallyApplied.scala │ │ │ ├── RefinePartiallyApplied.scala │ │ │ └── Resources.scala │ │ │ ├── predicates │ │ │ ├── all.scala │ │ │ ├── boolean.scala │ │ │ ├── char.scala │ │ │ ├── collection.scala │ │ │ ├── generic.scala │ │ │ ├── numeric.scala │ │ │ └── string.scala │ │ │ ├── types │ │ │ ├── all.scala │ │ │ ├── char.scala │ │ │ └── numeric.scala │ │ │ └── util │ │ │ └── string.scala │ │ └── test │ │ ├── scala-3.0+ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── NumericValidateSpec.scala │ │ ├── scala-3.0- │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ ├── AutoMacrosSpec.scala │ │ │ ├── BooleanInferenceSpec.scala │ │ │ ├── BooleanValidateSpec.scala │ │ │ ├── CollectionInferenceSpec.scala │ │ │ ├── CollectionValidateSpec.scala │ │ │ ├── GenericInferenceSpec.scala │ │ │ ├── GenericValidateSpec.scala │ │ │ ├── ImplicitScopeSpec.scala │ │ │ ├── MaxSpec.scala │ │ │ ├── MinSpec.scala │ │ │ ├── NumericInferenceSpec.scala │ │ │ ├── NumericValidateSpec.scala │ │ │ ├── RefineMSpec.scala │ │ │ ├── RefineSyntaxSpec.scala │ │ │ ├── RefinedSpec.scala │ │ │ ├── StringInferenceSpec.scala │ │ │ ├── StringValidateSpec.scala │ │ │ ├── api │ │ │ └── RefTypeSpec.scala │ │ │ ├── issues │ │ │ └── BigLiteralsSpec.scala │ │ │ └── types │ │ │ └── StringTypesSpec.scala │ │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ ├── AutoSpec.scala │ │ ├── CharValidateSpec.scala │ │ ├── TestUtils.scala │ │ ├── api │ │ └── RefinedTypeOpsSpec.scala │ │ └── types │ │ ├── CharTypesSpec.scala │ │ ├── NetTypesSpec.scala │ │ └── NumericTypesSpec.scala ├── docs │ ├── custom_predicates.md │ ├── dependent_refinement.md │ ├── design.md │ ├── examples.md │ ├── feature_comparison_bond.md │ ├── macro_pitfalls.md │ ├── matrices.md │ ├── namestartchar.md │ ├── nonnegint.md │ ├── src │ │ ├── custom_predicates.md │ │ ├── dependent_refinement.md │ │ ├── examples.md │ │ ├── macro_pitfalls.md │ │ ├── matrices.md │ │ ├── namestartchar.md │ │ ├── nonnegint.md │ │ ├── type_aliases.md │ │ └── util_string.md │ ├── type_aliases.md │ └── util_string.md ├── eval │ └── shared │ │ └── src │ │ ├── main │ │ └── scala │ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── eval.scala │ │ └── test │ │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ └── EvalValidateSpec.scala ├── jsonpath │ └── shared │ │ └── src │ │ ├── main │ │ └── scala │ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── jsonpath │ │ │ └── string.scala │ │ └── test │ │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ └── jsonpath │ │ └── StringValidateSpec.scala ├── pureconfig │ └── shared │ │ └── src │ │ ├── main │ │ ├── scala-3.0+ │ │ │ └── eu │ │ │ │ └── timepit │ │ │ │ └── refined │ │ │ │ └── pureconfig │ │ │ │ └── TypeDescribeVersionSpecific.scala │ │ ├── scala-3.0- │ │ │ └── eu │ │ │ │ └── timepit │ │ │ │ └── refined │ │ │ │ └── pureconfig │ │ │ │ └── TypeDescribeVersionSpecific.scala │ │ └── scala │ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── pureconfig │ │ │ ├── BaseInstances.scala │ │ │ └── package.scala │ │ └── test │ │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ └── pureconfig │ │ └── RefTypeConfigConvertSpec.scala ├── scalacheck │ └── shared │ │ └── src │ │ ├── main │ │ ├── scala-3.0+ │ │ │ └── eu │ │ │ │ └── timepit │ │ │ │ └── refined │ │ │ │ └── scalacheck │ │ │ │ ├── generic.scala │ │ │ │ └── string.scala │ │ ├── scala-3.0- │ │ │ └── eu │ │ │ │ └── timepit │ │ │ │ └── refined │ │ │ │ └── scalacheck │ │ │ │ ├── generic.scala │ │ │ │ └── string.scala │ │ └── scala │ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── scalacheck │ │ │ ├── all.scala │ │ │ ├── any.scala │ │ │ ├── boolean.scala │ │ │ ├── char.scala │ │ │ ├── collection.scala │ │ │ ├── numeric.scala │ │ │ ├── package.scala │ │ │ ├── reftype.scala │ │ │ └── util │ │ │ ├── Adjacent.scala │ │ │ └── Bounded.scala │ │ └── test │ │ ├── scala-3.0+ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── scalacheck │ │ │ └── StringArbitrarySpec.scala │ │ ├── scala-3.0- │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── scalacheck │ │ │ ├── AnyArbitrarySpec.scala │ │ │ ├── CharArbitrarySpec.scala │ │ │ ├── CollectionArbitrarySpec.scala │ │ │ ├── GenericArbitrarySpec.scala │ │ │ ├── NumericArbitrarySpec.scala │ │ │ └── StringArbitrarySpec.scala │ │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ └── scalacheck │ │ ├── PackageSpec.scala │ │ └── ZeroDiscardRatioSpec.scala ├── scalaz │ └── shared │ │ └── src │ │ ├── main │ │ └── scala │ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── scalaz │ │ │ ├── auto.scala │ │ │ ├── derivation.scala │ │ │ ├── package.scala │ │ │ └── syntax.scala │ │ └── test │ │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ └── scalaz │ │ ├── RefTypeSpecScalazContravariant.scala │ │ ├── RefTypeSpecScalazMonadError.scala │ │ ├── RefTypeSpecScalazTag.scala │ │ ├── ScalazSpec.scala │ │ └── foo │ │ └── ImportsSpec.scala ├── scodec │ └── shared │ │ └── src │ │ ├── main │ │ └── scala │ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── scodec │ │ │ ├── byteVector.scala │ │ │ └── package.scala │ │ └── test │ │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ └── scodec │ │ ├── ByteVectorValidateSpec.scala │ │ └── RefTypeCodecSpec.scala ├── scopt │ └── shared │ │ └── src │ │ ├── main │ │ └── scala │ │ │ └── eu │ │ │ └── timepit │ │ │ └── refined │ │ │ └── scopt │ │ │ └── package.scala │ │ └── test │ │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ └── scopt │ │ └── RefTypeReadSpec.scala └── shapeless │ └── shared │ └── src │ ├── main │ └── scala │ │ └── eu │ │ └── timepit │ │ └── refined │ │ └── shapeless │ │ └── typeable │ │ └── package.scala │ └── test │ └── scala │ └── eu │ └── timepit │ └── refined │ └── shapeless │ └── typeable │ └── TypeableSpec.scala ├── notes ├── 0.0.1.markdown ├── 0.0.2.markdown ├── 0.0.3.markdown ├── 0.1.0.markdown ├── 0.1.1.markdown ├── 0.1.2.markdown ├── 0.1.3.markdown ├── 0.2.0.markdown ├── 0.2.1.markdown ├── 0.2.2.markdown ├── 0.2.3.markdown ├── 0.3.0.markdown ├── 0.3.1.markdown ├── 0.3.2.markdown ├── 0.3.3.markdown ├── 0.3.4.markdown ├── 0.3.5.markdown ├── 0.3.6.markdown ├── 0.3.7.markdown ├── 0.4.0.markdown ├── 0.5.0.markdown ├── 0.6.0.markdown ├── 0.6.1.markdown ├── 0.6.2.markdown ├── 0.7.0.markdown ├── 0.8.0.markdown ├── 0.8.1.markdown ├── 0.8.2.markdown ├── 0.8.3.markdown ├── 0.8.4.markdown ├── 0.8.5.markdown ├── 0.8.6.markdown ├── 0.8.7.markdown ├── 0.9.0.markdown ├── 0.9.1.markdown ├── 0.9.10.markdown ├── 0.9.2.markdown ├── 0.9.3.markdown ├── 0.9.4.markdown ├── 0.9.5.markdown ├── 0.9.6.markdown ├── 0.9.7.markdown ├── 0.9.8.markdown ├── 0.9.9.markdown └── about.markdown ├── project ├── LatestVersion.scala ├── build.properties └── plugins.sbt └── scripts └── release.sh /.codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | project: 4 | default: 5 | threshold: 3% 6 | -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # Scala Steward: Reformat with scalafmt 3.7.3 2 | 2ab9b53fc2fbe46fdffbed46271d3896d84ac880 3 | 4 | # Scala Steward: Reformat with scalafmt 3.8.4 5 | 30c8262ff158d9bd48c9ba6b509e93078d08258f 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | *.log 3 | 4 | # sbt specific 5 | .cache/ 6 | .history/ 7 | .lib/ 8 | dist/* 9 | target/ 10 | lib_managed/ 11 | src_managed/ 12 | project/boot/ 13 | project/plugins/project/ 14 | .bsp 15 | 16 | # Scala-IDE specific 17 | .scala_dependencies 18 | .worksheet 19 | 20 | # IDEA specific 21 | .idea*/ 22 | 23 | .bloop/ 24 | .metals/ 25 | .vscode 26 | -------------------------------------------------------------------------------- /.jvmopts: -------------------------------------------------------------------------------- 1 | -XX:+UseG1GC 2 | -Xmx4G 3 | -------------------------------------------------------------------------------- /.mergify.yml: -------------------------------------------------------------------------------- 1 | # This file was automatically generated by sbt-typelevel-mergify using the 2 | # mergifyGenerate task. You should add and commit this file to 3 | # your git repository. It goes without saying that you shouldn't edit 4 | # this file by hand! Instead, if you wish to make changes, you should 5 | # change your sbt build configuration to revise the mergify configuration 6 | # to meet your needs, then regenerate this file. 7 | 8 | pull_request_rules: 9 | - name: label scala-steward's PRs 10 | conditions: 11 | - or: 12 | - author=scala-steward 13 | - author=scala-steward[bot] 14 | actions: 15 | label: 16 | add: 17 | - dependency-update 18 | remove: [] 19 | - name: merge scala-steward's PRs 20 | conditions: 21 | - or: 22 | - author=scala-steward 23 | - author=scala-steward[bot] 24 | - status-success=Test (ubuntu-22.04, 2.12, temurin@8) 25 | - status-success=Test (ubuntu-22.04, 2.13, temurin@8) 26 | - status-success=Test (ubuntu-22.04, 3, temurin@8) 27 | actions: 28 | merge: 29 | method: merge 30 | -------------------------------------------------------------------------------- /.scala-steward.conf: -------------------------------------------------------------------------------- 1 | updatePullRequests = "always" 2 | -------------------------------------------------------------------------------- /.scalafmt.conf: -------------------------------------------------------------------------------- 1 | version = 3.9.7 2 | runner.dialect = scala213 3 | maxColumn = 100 4 | docstrings.style = keep 5 | rewrite.rules = [PreferCurlyFors, RedundantBraces] 6 | rewriteTokens { 7 | "⇒": "=>" 8 | } 9 | fileOverride { 10 | "glob:**/src/*/scala-3.0+/**" { 11 | runner.dialect = scala3 12 | rewrite.scala3.convertToNewSyntax = false 13 | } 14 | } 15 | rewrite.scala3.convertToNewSyntax = true 16 | runner.dialectOverride.allowAsForImportRename = false 17 | runner.dialectOverride.allowStarWildcardImport = false 18 | runner.dialectOverride.allowPostfixStarVarargSplices = false 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015-2018 Frank S. Thomas 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /data/downloads/2016-06-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","19","0.0949999988079071" 2 | "0.3.1","14","0.07000000029802322" 3 | "0.3.2","31","0.1550000011920929" 4 | "0.3.3","16","0.07999999821186066" 5 | "0.3.4","14","0.07000000029802322" 6 | "0.3.5","14","0.07000000029802322" 7 | "0.3.6","14","0.07000000029802322" 8 | "0.3.7","14","0.07000000029802322" 9 | "0.4.0","38","0.1899999976158142" 10 | "0.5.0","26","0.12999999523162842" 11 | -------------------------------------------------------------------------------- /data/downloads/2016-06-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","14","0.007415254134684801" 2 | "0.0.2","14","0.007415254134684801" 3 | "0.0.3","14","0.007415254134684801" 4 | "0.1.0","14","0.007415254134684801" 5 | "0.1.1","14","0.007415254134684801" 6 | "0.2.0","15","0.007944915443658829" 7 | "0.1.2","15","0.007944915443658829" 8 | "0.1.3","14","0.007415254134684801" 9 | "0.2.1","13","0.006885593291372061" 10 | "0.2.2","13","0.006885593291372061" 11 | "0.2.3","12","0.006355931982398033" 12 | "0.3.0","16","0.008474576286971569" 13 | "0.3.1","21","0.011122881434857845" 14 | "0.3.2","780","0.4131355881690979" 15 | "0.3.3","19","0.010063559748232365" 16 | "0.3.4","17","0.00900423713028431" 17 | "0.3.5","19","0.010063559748232365" 18 | "0.3.6","14","0.007415254134684801" 19 | "0.3.7","18","0.00953389797359705" 20 | "0.4.0","768","0.4067796468734741" 21 | "0.5.0","64","0.033898305147886276" 22 | -------------------------------------------------------------------------------- /data/downloads/2016-07-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","14","0.07035175710916519" 2 | "0.3.1","20","0.10050251334905624" 3 | "0.3.2","30","0.15075376629829407" 4 | "0.3.3","17","0.08542713522911072" 5 | "0.3.4","13","0.06532663106918335" 6 | "0.3.5","16","0.08040200918912888" 7 | "0.3.6","14","0.07035175710916519" 8 | "0.3.7","15","0.07537688314914703" 9 | "0.4.0","33","0.1658291518688202" 10 | "0.5.0","27","0.13567839562892914" 11 | -------------------------------------------------------------------------------- /data/downloads/2016-07-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","15","0.005854800809174776" 2 | "0.0.2","18","0.007025761064141989" 3 | "0.0.3","15","0.005854800809174776" 4 | "0.1.0","15","0.005854800809174776" 5 | "0.1.1","28","0.01092896144837141" 6 | "0.2.0","16","0.006245120894163847" 7 | "0.1.2","15","0.005854800809174776" 8 | "0.1.3","15","0.005854800809174776" 9 | "0.2.1","14","0.005464480724185705" 10 | "0.2.2","13","0.005074160639196634" 11 | "0.2.3","15","0.005854800809174776" 12 | "0.3.0","14","0.005464480724185705" 13 | "0.3.1","46","0.017954722046852112" 14 | "0.3.2","501","0.1955503523349762" 15 | "0.3.3","22","0.008587040938436985" 16 | "0.3.4","17","0.006635440979152918" 17 | "0.3.5","15","0.005854800809174776" 18 | "0.3.6","15","0.005854800809174776" 19 | "0.3.7","17","0.006635440979152918" 20 | "0.4.0","1284","0.5011709332466125" 21 | "0.5.0","452","0.17642466723918915" 22 | -------------------------------------------------------------------------------- /data/downloads/2016-08-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","21","0.07954545319080353" 2 | "0.3.1","21","0.07954545319080353" 3 | "0.3.2","29","0.10984848439693451" 4 | "0.3.3","21","0.07954545319080353" 5 | "0.3.4","22","0.0833333358168602" 6 | "0.3.5","22","0.0833333358168602" 7 | "0.3.6","22","0.0833333358168602" 8 | "0.3.7","25","0.09469696879386902" 9 | "0.4.0","44","0.1666666716337204" 10 | "0.5.0","37","0.1401515156030655" 11 | -------------------------------------------------------------------------------- /data/downloads/2016-08-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","21","0.015010721981525421" 2 | "0.0.2","21","0.015010721981525421" 3 | "0.0.3","21","0.015010721981525421" 4 | "0.1.0","21","0.015010721981525421" 5 | "0.1.1","21","0.015010721981525421" 6 | "0.2.0","25","0.01786990649998188" 7 | "0.1.2","21","0.015010721981525421" 8 | "0.1.3","22","0.01572551764547825" 9 | "0.2.1","21","0.015010721981525421" 10 | "0.2.2","21","0.015010721981525421" 11 | "0.2.3","22","0.01572551764547825" 12 | "0.3.0","22","0.01572551764547825" 13 | "0.3.1","92","0.0657612606883049" 14 | "0.3.2","225","0.16082915663719177" 15 | "0.3.3","31","0.022158684208989143" 16 | "0.3.4","23","0.016440315172076225" 17 | "0.3.5","24","0.017155110836029053" 18 | "0.3.6","23","0.016440315172076225" 19 | "0.3.7","24","0.017155110836029053" 20 | "0.4.0","210","0.1501072198152542" 21 | "0.5.0","488","0.34882059693336487" 22 | -------------------------------------------------------------------------------- /data/downloads/2016-09-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","12","0.06818182021379471" 2 | "0.3.1","12","0.06818182021379471" 3 | "0.3.2","26","0.14772726595401764" 4 | "0.3.3","14","0.07954545319080353" 5 | "0.3.4","14","0.07954545319080353" 6 | "0.3.5","15","0.08522727340459824" 7 | "0.3.6","14","0.07954545319080353" 8 | "0.3.7","13","0.07386363297700882" 9 | "0.4.0","33","0.1875" 10 | "0.5.0","23","0.1306818127632141" 11 | -------------------------------------------------------------------------------- /data/downloads/2016-09-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","9","0.006802720949053764" 2 | "0.0.2","9","0.006802720949053764" 3 | "0.0.3","10","0.0075585790909826756" 4 | "0.1.0","9","0.006802720949053764" 5 | "0.1.1","12","0.00907029490917921" 6 | "0.2.0","9","0.006802720949053764" 7 | "0.1.2","9","0.006802720949053764" 8 | "0.1.3","9","0.006802720949053764" 9 | "0.2.1","12","0.00907029490917921" 10 | "0.2.2","15","0.011337868869304657" 11 | "0.2.3","12","0.00907029490917921" 12 | "0.3.0","12","0.00907029490917921" 13 | "0.3.1","77","0.05820105969905853" 14 | "0.3.2","342","0.25850340723991394" 15 | "0.3.3","12","0.00907029490917921" 16 | "0.3.4","12","0.00907029490917921" 17 | "0.3.5","14","0.010582010261714458" 18 | "0.3.6","12","0.00907029490917921" 19 | "0.3.7","12","0.00907029490917921" 20 | "0.4.0","290","0.2191987931728363" 21 | "0.5.0","425","0.3212396204471588" 22 | -------------------------------------------------------------------------------- /data/downloads/2016-10-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","15","0.07009346038103104" 2 | "0.3.1","20","0.09345794469118118" 3 | "0.3.2","16","0.07476635277271271" 4 | "0.3.3","14","0.06542056053876877" 5 | "0.3.4","15","0.07009346038103104" 6 | "0.3.5","11","0.05140186846256256" 7 | "0.3.6","14","0.06542056053876877" 8 | "0.3.7","12","0.05607476457953453" 9 | "0.4.0","17","0.07943925261497498" 10 | "0.5.0","57","0.26635512709617615" 11 | "0.6.0","23","0.10747663676738739" 12 | -------------------------------------------------------------------------------- /data/downloads/2016-10-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","12","0.006841504946351051" 2 | "0.0.2","12","0.006841504946351051" 3 | "0.0.3","13","0.007411630358546972" 4 | "0.1.0","14","0.007981755770742893" 5 | "0.1.1","11","0.00627137953415513" 6 | "0.2.0","12","0.006841504946351051" 7 | "0.1.2","12","0.006841504946351051" 8 | "0.1.3","12","0.006841504946351051" 9 | "0.2.1","13","0.007411630358546972" 10 | "0.2.2","12","0.006841504946351051" 11 | "0.2.3","14","0.007981755770742893" 12 | "0.3.0","12","0.006841504946351051" 13 | "0.3.1","55","0.031356897205114365" 14 | "0.3.2","578","0.3295325040817261" 15 | "0.3.3","14","0.007981755770742893" 16 | "0.3.4","15","0.008551881648600101" 17 | "0.3.5","13","0.007411630358546972" 18 | "0.3.6","12","0.006841504946351051" 19 | "0.3.7","12","0.006841504946351051" 20 | "0.4.0","70","0.03990878164768219" 21 | "0.5.0","786","0.4481185972690582" 22 | "0.6.0","50","0.028506271541118622" 23 | -------------------------------------------------------------------------------- /data/downloads/2016-11-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","6","0.03141361102461815" 2 | "0.3.1","10","0.052356019616127014" 3 | "0.3.2","10","0.052356019616127014" 4 | "0.3.3","10","0.052356019616127014" 5 | "0.3.4","5","0.026178009808063507" 6 | "0.3.5","6","0.03141361102461815" 7 | "0.3.6","6","0.03141361102461815" 8 | "0.3.7","8","0.04188481718301773" 9 | "0.4.0","9","0.04712041839957237" 10 | "0.5.0","14","0.07329843193292618" 11 | "0.6.0","107","0.5602094531059265" 12 | -------------------------------------------------------------------------------- /data/downloads/2016-11-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","6","0.0026785715017467737" 2 | "0.0.2","6","0.0026785715017467737" 3 | "0.0.3","8","0.0035714285913854837" 4 | "0.1.0","8","0.0035714285913854837" 5 | "0.1.1","9","0.004017857369035482" 6 | "0.2.0","6","0.0026785715017467737" 7 | "0.1.2","9","0.004017857369035482" 8 | "0.1.3","5","0.0022321429569274187" 9 | "0.2.1","6","0.0026785715017467737" 10 | "0.2.2","8","0.0035714285913854837" 11 | "0.2.3","5","0.0022321429569274187" 12 | "0.3.0","8","0.0035714285913854837" 13 | "0.3.1","124","0.05535714328289032" 14 | "0.3.2","1282","0.5723214149475098" 15 | "0.3.3","14","0.0062500000931322575" 16 | "0.3.4","6","0.0026785715017467737" 17 | "0.3.5","6","0.0026785715017467737" 18 | "0.3.6","5","0.0022321429569274187" 19 | "0.3.7","7","0.0031250000465661287" 20 | "0.4.0","54","0.02410714328289032" 21 | "0.5.0","335","0.1495535671710968" 22 | "0.6.0","323","0.14419643580913544" 23 | -------------------------------------------------------------------------------- /data/downloads/2016-11-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","158","1.0" 2 | -------------------------------------------------------------------------------- /data/downloads/2016-12-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","7","0.024822695180773735" 2 | "0.3.1","7","0.024822695180773735" 3 | "0.3.2","16","0.05673758685588837" 4 | "0.3.3","7","0.024822695180773735" 5 | "0.3.4","7","0.024822695180773735" 6 | "0.3.5","7","0.024822695180773735" 7 | "0.3.6","6","0.021276595070958138" 8 | "0.3.7","6","0.021276595070958138" 9 | "0.4.0","7","0.024822695180773735" 10 | "0.5.0","8","0.028368793427944183" 11 | "0.6.0","158","0.5602836608886719" 12 | "0.6.1","46","0.1631205677986145" 13 | -------------------------------------------------------------------------------- /data/downloads/2016-12-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","11","0.00411676662042737" 2 | "0.0.2","8","0.002994012087583542" 3 | "0.0.3","8","0.002994012087583542" 4 | "0.1.0","7","0.002619760576635599" 5 | "0.1.1","7","0.002619760576635599" 6 | "0.2.0","5","0.0018712574383243918" 7 | "0.1.2","9","0.003368263365700841" 8 | "0.1.3","10","0.0037425148766487837" 9 | "0.2.1","6","0.0022455090656876564" 10 | "0.2.2","7","0.002619760576635599" 11 | "0.2.3","12","0.004491018131375313" 12 | "0.3.0","9","0.003368263365700841" 13 | "0.3.1","247","0.09244012087583542" 14 | "0.3.2","1655","0.6193862557411194" 15 | "0.3.3","6","0.0022455090656876564" 16 | "0.3.4","6","0.0022455090656876564" 17 | "0.3.5","8","0.002994012087583542" 18 | "0.3.6","9","0.003368263365700841" 19 | "0.3.7","7","0.002619760576635599" 20 | "0.4.0","33","0.012350299395620823" 21 | "0.5.0","183","0.06848802417516708" 22 | "0.6.0","335","0.12537425756454468" 23 | "0.6.1","84","0.03143712505698204" 24 | -------------------------------------------------------------------------------- /data/downloads/2016-12-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","292","0.8111110925674438" 2 | "0.6.1","68","0.18888889253139496" 3 | -------------------------------------------------------------------------------- /data/downloads/2017-01-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","4","0.0220994483679533" 2 | "0.3.1","4","0.0220994483679533" 3 | "0.3.2","5","0.027624309062957764" 4 | "0.3.3","5","0.027624309062957764" 5 | "0.3.4","2","0.01104972418397665" 6 | "0.3.5","3","0.016574585810303688" 7 | "0.3.6","4","0.0220994483679533" 8 | "0.3.7","4","0.0220994483679533" 9 | "0.4.0","4","0.0220994483679533" 10 | "0.5.0","7","0.03867403417825699" 11 | "0.6.0","9","0.049723755568265915" 12 | "0.6.1","80","0.4419889450073242" 13 | "0.6.2","37","0.20441989600658417" 14 | "0.7.0","13","0.07182320207357407" 15 | -------------------------------------------------------------------------------- /data/downloads/2017-01-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","3","9.84898186288774E-4" 2 | "0.0.2","5","0.001641497015953064" 3 | "0.0.3","2","6.5659882966429E-4" 4 | "0.1.0","4","0.00131319765932858" 5 | "0.1.1","4","0.00131319765932858" 6 | "0.2.0","4","0.00131319765932858" 7 | "0.1.2","2","6.5659882966429E-4" 8 | "0.1.3","3","9.84898186288774E-4" 9 | "0.2.1","5","0.001641497015953064" 10 | "0.2.2","4","0.00131319765932858" 11 | "0.2.3","1","3.28299414832145E-4" 12 | "0.3.0","1","3.28299414832145E-4" 13 | "0.3.1","278","0.09126723557710648" 14 | "0.3.2","191","0.06270518898963928" 15 | "0.3.3","4","0.00131319765932858" 16 | "0.3.4","5","0.001641497015953064" 17 | "0.3.5","3","9.84898186288774E-4" 18 | "0.3.6","4","0.00131319765932858" 19 | "0.3.7","2","6.5659882966429E-4" 20 | "0.4.0","17","0.00558108976110816" 21 | "0.5.0","222","0.07288246601819992" 22 | "0.6.0","1218","0.3998686671257019" 23 | "0.6.1","928","0.3046618402004242" 24 | "0.6.2","109","0.035784635692834854" 25 | "0.7.0","27","0.008864084258675575" 26 | -------------------------------------------------------------------------------- /data/downloads/2017-01-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","133","0.30022573471069336" 2 | "0.6.1","102","0.23024830222129822" 3 | "0.6.2","151","0.34085777401924133" 4 | "0.7.0","57","0.1286681741476059" 5 | -------------------------------------------------------------------------------- /data/downloads/2017-02-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","18","0.06642066687345505" 2 | "0.3.1","14","0.05166051536798477" 3 | "0.3.2","20","0.07380073517560959" 4 | "0.3.3","14","0.05166051536798477" 5 | "0.3.4","17","0.06273062527179718" 6 | "0.3.5","17","0.06273062527179718" 7 | "0.3.6","16","0.05904059112071991" 8 | "0.3.7","16","0.05904059112071991" 9 | "0.4.0","16","0.05904059112071991" 10 | "0.5.0","18","0.06642066687345505" 11 | "0.6.0","21","0.07749077677726746" 12 | "0.6.1","29","0.10701107233762741" 13 | "0.6.2","28","0.10332103073596954" 14 | "0.7.0","27","0.09963099658489227" 15 | -------------------------------------------------------------------------------- /data/downloads/2017-02-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","15","0.0032901952508836985" 2 | "0.0.2","14","0.003070848761126399" 3 | "0.0.3","14","0.003070848761126399" 4 | "0.1.0","14","0.003070848761126399" 5 | "0.1.1","15","0.0032901952508836985" 6 | "0.2.0","15","0.0032901952508836985" 7 | "0.1.2","14","0.003070848761126399" 8 | "0.1.3","15","0.0032901952508836985" 9 | "0.2.1","14","0.003070848761126399" 10 | "0.2.2","15","0.0032901952508836985" 11 | "0.2.3","14","0.003070848761126399" 12 | "0.3.0","18","0.003948234487324953" 13 | "0.3.1","282","0.06185567006468773" 14 | "0.3.2","114","0.025005483999848366" 15 | "0.3.3","12","0.0026321562472730875" 16 | "0.3.4","15","0.0032901952508836985" 17 | "0.3.5","17","0.0037288879975676537" 18 | "0.3.6","17","0.0037288879975676537" 19 | "0.3.7","16","0.0035095415078103542" 20 | "0.4.0","26","0.0057030050083994865" 21 | "0.5.0","153","0.03355999290943146" 22 | "0.6.0","427","0.09366089105606079" 23 | "0.6.1","3026","0.6637420654296875" 24 | "0.6.2","44","0.009651239030063152" 25 | "0.7.0","233","0.051107700914144516" 26 | -------------------------------------------------------------------------------- /data/downloads/2017-02-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","160","0.3312629461288452" 2 | "0.6.1","67","0.13871635496616364" 3 | "0.6.2","136","0.28157350420951843" 4 | "0.7.0","120","0.2484472095966339" 5 | -------------------------------------------------------------------------------- /data/downloads/2017-03-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","8","0.029411764815449715" 2 | "0.3.1","10","0.036764707416296005" 3 | "0.3.2","11","0.040441177785396576" 4 | "0.3.3","8","0.029411764815449715" 5 | "0.3.4","8","0.029411764815449715" 6 | "0.3.5","7","0.025735294446349144" 7 | "0.3.6","8","0.029411764815449715" 8 | "0.3.7","10","0.036764707416296005" 9 | "0.4.0","10","0.036764707416296005" 10 | "0.5.0","8","0.029411764815449715" 11 | "0.6.0","13","0.04779411852359772" 12 | "0.6.1","78","0.2867647111415863" 13 | "0.6.2","22","0.08088235557079315" 14 | "0.7.0","24","0.0882352963089943" 15 | "0.8.0","47","0.17279411852359772" 16 | -------------------------------------------------------------------------------- /data/downloads/2017-03-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","8","0.002689979737624526" 2 | "0.0.2","11","0.0036987222265452147" 3 | "0.0.3","9","0.0030262272339314222" 4 | "0.1.0","11","0.0036987222265452147" 5 | "0.1.1","9","0.0030262272339314222" 6 | "0.2.0","9","0.0030262272339314222" 7 | "0.1.2","11","0.0036987222265452147" 8 | "0.1.3","9","0.0030262272339314222" 9 | "0.2.1","11","0.0036987222265452147" 10 | "0.2.2","11","0.0036987222265452147" 11 | "0.2.3","11","0.0036987222265452147" 12 | "0.3.0","8","0.002689979737624526" 13 | "0.3.1","315","0.10591795295476913" 14 | "0.3.2","60","0.020174847915768623" 15 | "0.3.3","9","0.0030262272339314222" 16 | "0.3.4","9","0.0030262272339314222" 17 | "0.3.5","8","0.002689979737624526" 18 | "0.3.6","9","0.0030262272339314222" 19 | "0.3.7","8","0.002689979737624526" 20 | "0.4.0","18","0.0060524544678628445" 21 | "0.5.0","21","0.007061196956783533" 22 | "0.6.0","419","0.14088769257068634" 23 | "0.6.1","858","0.2885003387928009" 24 | "0.6.2","371","0.12474781274795532" 25 | "0.7.0","390","0.13113652169704437" 26 | "0.8.0","361","0.12138533592224121" 27 | -------------------------------------------------------------------------------- /data/downloads/2017-03-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","128","0.10150673985481262" 2 | "0.6.1","634","0.5027755498886108" 3 | "0.6.2","120","0.09516257047653198" 4 | "0.7.0","149","0.1181601881980896" 5 | "0.8.0","230","0.18239492177963257" 6 | -------------------------------------------------------------------------------- /data/downloads/2017-04-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","4","0.024390242993831635" 2 | "0.3.1","7","0.04268292710185051" 3 | "0.3.2","8","0.04878048598766327" 4 | "0.3.3","7","0.04268292710185051" 5 | "0.3.4","7","0.04268292710185051" 6 | "0.3.5","6","0.03658536449074745" 7 | "0.3.6","4","0.024390242993831635" 8 | "0.3.7","5","0.030487805604934692" 9 | "0.4.0","7","0.04268292710185051" 10 | "0.5.0","7","0.04268292710185051" 11 | "0.6.0","14","0.08536585420370102" 12 | "0.6.1","41","0.25" 13 | "0.6.2","8","0.04878048598766327" 14 | "0.7.0","8","0.04878048598766327" 15 | "0.8.0","31","0.18902438879013062" 16 | -------------------------------------------------------------------------------- /data/downloads/2017-04-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","8","0.004034291487187147" 2 | "0.0.2","7","0.003530004993081093" 3 | "0.0.3","5","0.002521432237699628" 4 | "0.1.0","7","0.003530004993081093" 5 | "0.1.1","5","0.002521432237699628" 6 | "0.2.0","7","0.003530004993081093" 7 | "0.1.2","7","0.003530004993081093" 8 | "0.1.3","5","0.002521432237699628" 9 | "0.2.1","8","0.004034291487187147" 10 | "0.2.2","5","0.002521432237699628" 11 | "0.2.3","6","0.0030257184989750385" 12 | "0.3.0","6","0.0030257184989750385" 13 | "0.3.1","203","0.10237014293670654" 14 | "0.3.2","111","0.05597579479217529" 15 | "0.3.3","9","0.0045385779812932014" 16 | "0.3.4","7","0.003530004993081093" 17 | "0.3.5","8","0.004034291487187147" 18 | "0.3.6","4","0.0020171457435935736" 19 | "0.3.7","6","0.0030257184989750385" 20 | "0.4.0","9","0.0045385779812932014" 21 | "0.5.0","16","0.008068582974374294" 22 | "0.6.0","283","0.1427130550146103" 23 | "0.6.1","46","0.023197175934910774" 24 | "0.6.2","124","0.06253151595592499" 25 | "0.7.0","135","0.0680786669254303" 26 | "0.8.0","946","0.4770549535751343" 27 | -------------------------------------------------------------------------------- /data/downloads/2017-04-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","200","0.14306151866912842" 2 | "0.6.1","832","0.5951359272003174" 3 | "0.6.2","20","0.014306151308119297" 4 | "0.7.0","78","0.055793993175029755" 5 | "0.8.0","268","0.19170242547988892" 6 | -------------------------------------------------------------------------------- /data/downloads/2017-05-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","9","0.03345724940299988" 2 | "0.3.1","11","0.04089219495654106" 3 | "0.3.2","61","0.22676579654216766" 4 | "0.3.3","5","0.01858736015856266" 5 | "0.3.4","5","0.01858736015856266" 6 | "0.3.5","5","0.01858736015856266" 7 | "0.3.6","5","0.01858736015856266" 8 | "0.3.7","46","0.17100371420383453" 9 | "0.4.0","5","0.01858736015856266" 10 | "0.5.0","9","0.03345724940299988" 11 | "0.6.0","5","0.01858736015856266" 12 | "0.6.1","26","0.09665427356958389" 13 | "0.6.2","8","0.029739776626229286" 14 | "0.7.0","5","0.01858736015856266" 15 | "0.8.0","22","0.08178438991308212" 16 | "0.8.1","42","0.15613383054733276" 17 | -------------------------------------------------------------------------------- /data/downloads/2017-05-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","5","0.0025138261262327433" 2 | "0.0.2","6","0.003016591304913163" 3 | "0.0.3","5","0.0025138261262327433" 4 | "0.1.0","4","0.0020110609475523233" 5 | "0.1.1","26","0.013071895577013493" 6 | "0.2.0","5","0.0025138261262327433" 7 | "0.1.2","5","0.0025138261262327433" 8 | "0.1.3","41","0.020613374188542366" 9 | "0.2.1","5","0.0025138261262327433" 10 | "0.2.2","8","0.004022121895104647" 11 | "0.2.3","8","0.004022121895104647" 12 | "0.3.0","48","0.024132730439305305" 13 | "0.3.1","116","0.05832076445221901" 14 | "0.3.2","44","0.022121669724583626" 15 | "0.3.3","5","0.0025138261262327433" 16 | "0.3.4","51","0.025641025975346565" 17 | "0.3.5","6","0.003016591304913163" 18 | "0.3.6","51","0.025641025975346565" 19 | "0.3.7","5","0.0025138261262327433" 20 | "0.4.0","52","0.026143791154026985" 21 | "0.5.0","26","0.013071895577013493" 22 | "0.6.0","312","0.1568627506494522" 23 | "0.6.1","26","0.013071895577013493" 24 | "0.6.2","70","0.03519356623291969" 25 | "0.7.0","82","0.04122674837708473" 26 | "0.8.0","860","0.4323780834674835" 27 | "0.8.1","117","0.05882352963089943" 28 | -------------------------------------------------------------------------------- /data/downloads/2017-05-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","100","0.0761614590883255" 2 | "0.6.1","627","0.47753235697746277" 3 | "0.6.2","10","0.0076161460019648075" 4 | "0.7.0","53","0.04036557674407959" 5 | "0.8.0","245","0.1865955889225006" 6 | "0.8.1","278","0.21172887086868286" 7 | -------------------------------------------------------------------------------- /data/downloads/2017-06-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","16","0.07111111283302307" 2 | "0.3.1","7","0.031111111864447594" 3 | "0.3.2","21","0.09333333373069763" 4 | "0.3.3","4","0.017777778208255768" 5 | "0.3.4","3","0.013333333656191826" 6 | "0.3.5","2","0.008888889104127884" 7 | "0.3.6","28","0.12444444745779037" 8 | "0.3.7","2","0.008888889104127884" 9 | "0.4.0","2","0.008888889104127884" 10 | "0.5.0","5","0.02222222276031971" 11 | "0.6.0","7","0.031111111864447594" 12 | "0.6.1","17","0.07555555552244186" 13 | "0.6.2","2","0.008888889104127884" 14 | "0.7.0","2","0.008888889104127884" 15 | "0.8.0","13","0.057777777314186096" 16 | "0.8.1","35","0.15555556118488312" 17 | "0.8.2","59","0.2622222304344177" 18 | -------------------------------------------------------------------------------- /data/downloads/2017-06-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","2","0.0013080444186925888" 2 | "0.0.2","6","0.003924133256077766" 3 | "0.0.3","3","0.001962066628038883" 4 | "0.1.0","2","0.0013080444186925888" 5 | "0.1.1","3","0.001962066628038883" 6 | "0.2.0","2","0.0013080444186925888" 7 | "0.1.2","2","0.0013080444186925888" 8 | "0.1.3","2","0.0013080444186925888" 9 | "0.2.1","4","0.0026160888373851776" 10 | "0.2.2","5","0.0032701112795621157" 11 | "0.2.3","10","0.006540222559124231" 12 | "0.3.0","5","0.0032701112795621157" 13 | "0.3.1","22","0.014388489536941051" 14 | "0.3.2","52","0.03400915488600731" 15 | "0.3.3","4","0.0026160888373851776" 16 | "0.3.4","4","0.0026160888373851776" 17 | "0.3.5","4","0.0026160888373851776" 18 | "0.3.6","3","0.001962066628038883" 19 | "0.3.7","3","0.001962066628038883" 20 | "0.4.0","5","0.0032701112795621157" 21 | "0.5.0","4","0.0026160888373851776" 22 | "0.6.0","237","0.15500326454639435" 23 | "0.6.1","21","0.013734467327594757" 24 | "0.6.2","75","0.049051668494939804" 25 | "0.7.0","130","0.08502288907766342" 26 | "0.8.0","651","0.4257684648036957" 27 | "0.8.1","87","0.05689993500709534" 28 | "0.8.2","181","0.11837802827358246" 29 | -------------------------------------------------------------------------------- /data/downloads/2017-06-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","82","0.053143229335546494" 2 | "0.6.1","749","0.48541802167892456" 3 | "0.6.2","8","0.005184704903513193" 4 | "0.7.0","28","0.018146468326449394" 5 | "0.8.0","139","0.0900842547416687" 6 | "0.8.1","197","0.12767335772514343" 7 | "0.8.2","340","0.2203499674797058" 8 | -------------------------------------------------------------------------------- /data/downloads/2017-07-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","5","0.0416666679084301" 2 | "0.3.1","5","0.0416666679084301" 3 | "0.3.2","10","0.0833333358168602" 4 | "0.3.3","6","0.05000000074505806" 5 | "0.3.4","6","0.05000000074505806" 6 | "0.3.5","5","0.0416666679084301" 7 | "0.3.6","5","0.0416666679084301" 8 | "0.3.7","7","0.05833333358168602" 9 | "0.4.0","7","0.05833333358168602" 10 | "0.5.0","5","0.0416666679084301" 11 | "0.6.0","5","0.0416666679084301" 12 | "0.6.1","5","0.0416666679084301" 13 | "0.6.2","5","0.0416666679084301" 14 | "0.7.0","5","0.0416666679084301" 15 | "0.8.0","8","0.06666667014360428" 16 | "0.8.1","8","0.06666667014360428" 17 | "0.8.2","23","0.19166666269302368" 18 | -------------------------------------------------------------------------------- /data/downloads/2017-07-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","6","0.0022140222135931253" 2 | "0.0.2","5","0.0018450184725224972" 3 | "0.0.3","6","0.0022140222135931253" 4 | "0.1.0","6","0.0022140222135931253" 5 | "0.1.1","6","0.0022140222135931253" 6 | "0.2.0","6","0.0022140222135931253" 7 | "0.1.2","6","0.0022140222135931253" 8 | "0.1.3","5","0.0018450184725224972" 9 | "0.2.1","10","0.0036900369450449944" 10 | "0.2.2","6","0.0022140222135931253" 11 | "0.2.3","8","0.002952029462903738" 12 | "0.3.0","12","0.004428044427186251" 13 | "0.3.1","26","0.00959409587085247" 14 | "0.3.2","139","0.051291514188051224" 15 | "0.3.3","6","0.0022140222135931253" 16 | "0.3.4","5","0.0018450184725224972" 17 | "0.3.5","10","0.0036900369450449944" 18 | "0.3.6","5","0.0018450184725224972" 19 | "0.3.7","5","0.0018450184725224972" 20 | "0.4.0","15","0.0055350554175674915" 21 | "0.5.0","11","0.004059040453284979" 22 | "0.6.0","254","0.09372694045305252" 23 | "0.6.1","29","0.010701106861233711" 24 | "0.6.2","57","0.021033210679888725" 25 | "0.7.0","39","0.014391143806278706" 26 | "0.8.0","479","0.17675276100635529" 27 | "0.8.1","22","0.008118080906569958" 28 | "0.8.2","1526","0.5630996227264404" 29 | -------------------------------------------------------------------------------- /data/downloads/2017-07-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","54","0.026175472885370255" 2 | "0.6.1","563","0.27290353178977966" 3 | "0.6.2","15","0.007270964793860912" 4 | "0.7.0","24","0.01163354329764843" 5 | "0.8.0","135","0.06543868035078049" 6 | "0.8.1","362","0.17547261714935303" 7 | "0.8.2","910","0.4411051869392395" 8 | -------------------------------------------------------------------------------- /data/downloads/2017-08-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","8","0.03619909659028053" 2 | "0.3.1","11","0.04977375641465187" 3 | "0.3.2","13","0.05882352963089943" 4 | "0.3.3","4","0.018099548295140266" 5 | "0.3.4","5","0.022624434903264046" 6 | "0.3.5","18","0.08144796639680862" 7 | "0.3.6","17","0.07692307978868484" 8 | "0.3.7","17","0.07692307978868484" 9 | "0.4.0","19","0.0859728530049324" 10 | "0.5.0","9","0.04072398319840431" 11 | "0.6.0","12","0.05429864302277565" 12 | "0.6.1","12","0.05429864302277565" 13 | "0.6.2","13","0.05882352963089943" 14 | "0.7.0","7","0.031674209982156754" 15 | "0.8.0","13","0.05882352963089943" 16 | "0.8.1","12","0.05429864302277565" 17 | "0.8.2","31","0.14027149975299835" 18 | -------------------------------------------------------------------------------- /data/downloads/2017-08-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","13","0.0018364175921306014" 2 | "0.0.2","10","0.0014126289170235395" 3 | "0.0.3","9","0.0012713660253211856" 4 | "0.1.0","6","8.475773502141237E-4" 5 | "0.1.1","12","0.0016951547004282475" 6 | "0.2.0","10","0.0014126289170235395" 7 | "0.1.2","7","9.888402419164777E-4" 8 | "0.1.3","10","0.0014126289170235395" 9 | "0.2.1","10","0.0014126289170235395" 10 | "0.2.2","8","0.0011301031336188316" 11 | "0.2.3","4","5.650515668094158E-4" 12 | "0.3.0","8","0.0011301031336188316" 13 | "0.3.1","16","0.0022602062672376633" 14 | "0.3.2","58","0.008193247951567173" 15 | "0.3.3","8","0.0011301031336188316" 16 | "0.3.4","13","0.0018364175921306014" 17 | "0.3.5","12","0.0016951547004282475" 18 | "0.3.6","11","0.0015538918087258935" 19 | "0.3.7","13","0.0018364175921306014" 20 | "0.4.0","12","0.0016951547004282475" 21 | "0.5.0","24","0.003390309400856495" 22 | "0.6.0","1053","0.14874982833862305" 23 | "0.6.1","69","0.009747139178216457" 24 | "0.6.2","45","0.00635683024302125" 25 | "0.7.0","62","0.008758299052715302" 26 | "0.8.0","341","0.04817064478993416" 27 | "0.8.1","29","0.0040966239757835865" 28 | "0.8.2","5206","0.7354146242141724" 29 | -------------------------------------------------------------------------------- /data/downloads/2017-08-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","55","0.02037791721522808" 2 | "0.6.1","279","0.10337162017822266" 3 | "0.6.2","17","0.006298629101365805" 4 | "0.7.0","17","0.006298629101365805" 5 | "0.8.0","129","0.047795478254556656" 6 | "0.8.1","369","0.1367173045873642" 7 | "0.8.2","1833","0.6791404485702515" 8 | -------------------------------------------------------------------------------- /data/downloads/2017-09-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","15","0.03464203327894211" 2 | "0.3.1","26","0.06004618853330612" 3 | "0.3.2","26","0.06004618853330612" 4 | "0.3.3","19","0.043879907578229904" 5 | "0.3.4","16","0.03695150092244148" 6 | "0.3.5","26","0.06004618853330612" 7 | "0.3.6","26","0.06004618853330612" 8 | "0.3.7","18","0.04157043993473053" 9 | "0.4.0","24","0.05542725324630737" 10 | "0.5.0","22","0.050808314234018326" 11 | "0.6.0","26","0.06004618853330612" 12 | "0.6.1","15","0.03464203327894211" 13 | "0.6.2","15","0.03464203327894211" 14 | "0.7.0","13","0.03002309426665306" 15 | "0.8.0","22","0.050808314234018326" 16 | "0.8.1","25","0.05773672088980675" 17 | "0.8.2","47","0.10854503512382507" 18 | "0.8.3","52","0.12009237706661224" 19 | -------------------------------------------------------------------------------- /data/downloads/2017-09-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","24","0.006465517450124025" 2 | "0.0.2","22","0.005926724057644606" 3 | "0.0.3","23","0.0061961207538843155" 4 | "0.1.0","15","0.004040948115289211" 5 | "0.1.1","20","0.005387931130826473" 6 | "0.2.0","19","0.005118534434586763" 7 | "0.1.2","18","0.0048491377383470535" 8 | "0.1.3","21","0.005657327361404896" 9 | "0.2.1","20","0.005387931130826473" 10 | "0.2.2","23","0.0061961207538843155" 11 | "0.2.3","15","0.004040948115289211" 12 | "0.3.0","17","0.004579741507768631" 13 | "0.3.1","37","0.009967672638595104" 14 | "0.3.2","164","0.044181033968925476" 15 | "0.3.3","24","0.006465517450124025" 16 | "0.3.4","21","0.005657327361404896" 17 | "0.3.5","25","0.006734913680702448" 18 | "0.3.6","22","0.005926724057644606" 19 | "0.3.7","23","0.0061961207538843155" 20 | "0.4.0","14","0.003771551651880145" 21 | "0.5.0","29","0.0078125" 22 | "0.6.0","408","0.10991379618644714" 23 | "0.6.1","78","0.0210129301995039" 24 | "0.6.2","76","0.020474137738347054" 25 | "0.7.0","67","0.0180495698004961" 26 | "0.8.0","199","0.05360991507768631" 27 | "0.8.1","28","0.00754310330376029" 28 | "0.8.2","1776","0.4784482717514038" 29 | "0.8.3","484","0.13038793206214905" 30 | -------------------------------------------------------------------------------- /data/downloads/2017-09-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","53","0.010041682049632072" 2 | "0.6.1","484","0.09170140326023102" 3 | "0.6.2","39","0.007389162667095661" 4 | "0.7.0","27","0.005115574225783348" 5 | "0.8.0","189","0.03580901771783829" 6 | "0.8.1","170","0.03220916911959648" 7 | "0.8.2","3653","0.692118227481842" 8 | "0.8.3","663","0.12561576068401337" 9 | -------------------------------------------------------------------------------- /data/downloads/2017-10-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","7","0.029288703575730324" 2 | "0.3.1","6","0.025104602798819542" 3 | "0.3.2","11","0.0460251048207283" 4 | "0.3.3","4","0.016736401244997978" 5 | "0.3.4","4","0.016736401244997978" 6 | "0.3.5","8","0.033472802489995956" 7 | "0.3.6","6","0.025104602798819542" 8 | "0.3.7","6","0.025104602798819542" 9 | "0.4.0","13","0.054393306374549866" 10 | "0.5.0","4","0.016736401244997978" 11 | "0.6.0","8","0.033472802489995956" 12 | "0.6.1","10","0.04184100404381752" 13 | "0.6.2","7","0.029288703575730324" 14 | "0.7.0","6","0.025104602798819542" 15 | "0.8.0","16","0.06694560497999191" 16 | "0.8.1","17","0.071129709482193" 17 | "0.8.2","30","0.12552301585674286" 18 | "0.8.3","20","0.08368200808763504" 19 | "0.8.4","56","0.2343096286058426" 20 | -------------------------------------------------------------------------------- /data/downloads/2017-10-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","17","0.007439824752509594" 2 | "0.0.2","6","0.0026258204597979784" 3 | "0.0.3","8","0.003501094179227948" 4 | "0.1.0","4","0.001750547089613974" 5 | "0.1.1","6","0.0026258204597979784" 6 | "0.2.0","5","0.002188183832913637" 7 | "0.1.2","8","0.003501094179227948" 8 | "0.1.3","7","0.0030634573195129633" 9 | "0.2.1","7","0.0030634573195129633" 10 | "0.2.2","7","0.0030634573195129633" 11 | "0.2.3","9","0.003938730806112289" 12 | "0.3.0","5","0.002188183832913637" 13 | "0.3.1","24","0.010503281839191914" 14 | "0.3.2","131","0.0573304146528244" 15 | "0.3.3","6","0.0026258204597979784" 16 | "0.3.4","6","0.0026258204597979784" 17 | "0.3.5","4","0.001750547089613974" 18 | "0.3.6","6","0.0026258204597979784" 19 | "0.3.7","12","0.005251640919595957" 20 | "0.4.0","7","0.0030634573195129633" 21 | "0.5.0","11","0.004814004525542259" 22 | "0.6.0","330","0.14442013204097748" 23 | "0.6.1","45","0.019693654030561447" 24 | "0.6.2","19","0.008315098471939564" 25 | "0.7.0","113","0.04945295304059982" 26 | "0.8.0","265","0.11597374081611633" 27 | "0.8.1","17","0.007439824752509594" 28 | "0.8.2","454","0.1986870914697647" 29 | "0.8.3","486","0.21269147098064423" 30 | "0.8.4","260","0.11378555744886398" 31 | -------------------------------------------------------------------------------- /data/downloads/2017-10-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","47","0.008649245835840702" 2 | "0.6.1","551","0.10139860212802887" 3 | "0.6.2","35","0.0064409272745251656" 4 | "0.7.0","46","0.008465219289064407" 5 | "0.8.0","102","0.018770702183246613" 6 | "0.8.1","76","0.0139860138297081" 7 | "0.8.2","3209","0.5905410647392273" 8 | "0.8.3","678","0.12476996332406998" 9 | "0.8.4","690","0.12697827816009521" 10 | -------------------------------------------------------------------------------- /data/downloads/2017-11-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","6","0.034090910106897354" 2 | "0.3.1","3","0.017045455053448677" 3 | "0.3.2","14","0.07954545319080353" 4 | "0.3.3","3","0.017045455053448677" 5 | "0.3.4","3","0.017045455053448677" 6 | "0.3.5","4","0.022727273404598236" 7 | "0.3.6","5","0.028409091755747795" 8 | "0.3.7","4","0.022727273404598236" 9 | "0.4.0","8","0.04545454680919647" 10 | "0.5.0","3","0.017045455053448677" 11 | "0.6.0","5","0.028409091755747795" 12 | "0.6.1","5","0.028409091755747795" 13 | "0.6.2","4","0.022727273404598236" 14 | "0.7.0","4","0.022727273404598236" 15 | "0.8.0","11","0.0625" 16 | "0.8.1","8","0.04545454680919647" 17 | "0.8.2","16","0.09090909361839294" 18 | "0.8.3","7","0.039772726595401764" 19 | "0.8.4","63","0.3579545319080353" 20 | -------------------------------------------------------------------------------- /data/downloads/2017-11-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","7","0.003122212365269661" 2 | "0.0.2","3","0.001338090980425477" 3 | "0.0.3","7","0.003122212365269661" 4 | "0.1.0","3","0.001338090980425477" 5 | "0.1.1","3","0.001338090980425477" 6 | "0.2.0","3","0.001338090980425477" 7 | "0.1.2","7","0.003122212365269661" 8 | "0.1.3","3","0.001338090980425477" 9 | "0.2.1","3","0.001338090980425477" 10 | "0.2.2","3","0.001338090980425477" 11 | "0.2.3","3","0.001338090980425477" 12 | "0.3.0","3","0.001338090980425477" 13 | "0.3.1","12","0.005352363921701908" 14 | "0.3.2","70","0.03122212365269661" 15 | "0.3.3","3","0.001338090980425477" 16 | "0.3.4","3","0.001338090980425477" 17 | "0.3.5","3","0.001338090980425477" 18 | "0.3.6","4","0.001784121268428862" 19 | "0.3.7","7","0.003122212365269661" 20 | "0.4.0","3","0.001338090980425477" 21 | "0.5.0","6","0.002676181960850954" 22 | "0.6.0","540","0.2408563792705536" 23 | "0.6.1","16","0.007136485073715448" 24 | "0.6.2","53","0.023639608174562454" 25 | "0.7.0","127","0.05664585158228874" 26 | "0.8.0","276","0.12310437113046646" 27 | "0.8.1","10","0.004460303112864494" 28 | "0.8.2","604","0.26940232515335083" 29 | "0.8.3","135","0.0602140948176384" 30 | "0.8.4","322","0.1436217725276947" 31 | -------------------------------------------------------------------------------- /data/downloads/2017-11-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","45","0.007766655180603266" 2 | "0.6.1","49","0.008457024581730366" 3 | "0.6.2","16","0.0027614773716777563" 4 | "0.7.0","82","0.014152571558952332" 5 | "0.8.0","64","0.011045909486711025" 6 | "0.8.1","139","0.023990334942936897" 7 | "0.8.2","3041","0.5248532891273499" 8 | "0.8.3","961","0.16586123406887054" 9 | "0.8.4","1397","0.24111150205135345" 10 | -------------------------------------------------------------------------------- /data/downloads/2017-12-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","11","0.04150943458080292" 2 | "0.3.1","6","0.022641509771347046" 3 | "0.3.2","15","0.056603774428367615" 4 | "0.3.3","11","0.04150943458080292" 5 | "0.3.4","9","0.03396226465702057" 6 | "0.3.5","8","0.030188679695129395" 7 | "0.3.6","7","0.02641509473323822" 8 | "0.3.7","11","0.04150943458080292" 9 | "0.4.0","12","0.04528301954269409" 10 | "0.5.0","8","0.030188679695129395" 11 | "0.6.0","14","0.05283018946647644" 12 | "0.6.1","9","0.03396226465702057" 13 | "0.6.2","7","0.02641509473323822" 14 | "0.7.0","13","0.049056604504585266" 15 | "0.8.0","6","0.022641509771347046" 16 | "0.8.1","7","0.02641509473323822" 17 | "0.8.2","17","0.06415094435214996" 18 | "0.8.3","10","0.03773584961891174" 19 | "0.8.4","17","0.06415094435214996" 20 | "0.8.5","45","0.16981132328510284" 21 | "0.8.6","22","0.08301886916160583" 22 | -------------------------------------------------------------------------------- /data/downloads/2017-12-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","3","0.0015723269898444414" 2 | "0.0.2","8","0.0041928719729185104" 3 | "0.0.3","8","0.0041928719729185104" 4 | "0.1.0","7","0.0036687632091343403" 5 | "0.1.1","7","0.0036687632091343403" 6 | "0.2.0","10","0.005241089966148138" 7 | "0.1.2","5","0.002620544983074069" 8 | "0.1.3","10","0.005241089966148138" 9 | "0.2.1","6","0.003144653979688883" 10 | "0.2.2","9","0.004716981202363968" 11 | "0.2.3","11","0.0057651991955935955" 12 | "0.3.0","7","0.0036687632091343403" 13 | "0.3.1","25","0.013102725148200989" 14 | "0.3.2","153","0.08018867671489716" 15 | "0.3.3","6","0.003144653979688883" 16 | "0.3.4","12","0.006289307959377766" 17 | "0.3.5","9","0.004716981202363968" 18 | "0.3.6","7","0.0036687632091343403" 19 | "0.3.7","5","0.002620544983074069" 20 | "0.4.0","8","0.0041928719729185104" 21 | "0.5.0","11","0.0057651991955935955" 22 | "0.6.0","193","0.10115303844213486" 23 | "0.6.1","12","0.006289307959377766" 24 | "0.6.2","66","0.034591194242239" 25 | "0.7.0","209","0.10953878611326218" 26 | "0.8.0","86","0.04507337510585785" 27 | "0.8.1","8","0.0041928719729185104" 28 | "0.8.2","314","0.16457022726535797" 29 | "0.8.3","363","0.19025157392024994" 30 | "0.8.4","175","0.09171907603740692" 31 | "0.8.5","63","0.033018868416547775" 32 | "0.8.6","92","0.048218030482530594" 33 | -------------------------------------------------------------------------------- /data/downloads/2017-12-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","16","0.0032773453276604414" 2 | "0.6.1","58","0.011880377307534218" 3 | "0.6.2","9","0.0018435067031532526" 4 | "0.7.0","79","0.016181891784071922" 5 | "0.8.0","64","0.013109381310641766" 6 | "0.8.1","28","0.005735354498028755" 7 | "0.8.2","1684","0.3449406027793884" 8 | "0.8.3","1362","0.278984010219574" 9 | "0.8.4","1160","0.23760753870010376" 10 | "0.8.5","295","0.06042605638504028" 11 | "0.8.6","127","0.026013929396867752" 12 | -------------------------------------------------------------------------------- /data/downloads/2018-01-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","3","0.015306122601032257" 2 | "0.3.1","3","0.015306122601032257" 3 | "0.3.2","8","0.040816325694322586" 4 | "0.3.3","5","0.025510204955935478" 5 | "0.3.4","4","0.020408162847161293" 6 | "0.3.5","1","0.005102040711790323" 7 | "0.3.6","5","0.025510204955935478" 8 | "0.3.7","1","0.005102040711790323" 9 | "0.4.0","4","0.020408162847161293" 10 | "0.5.0","5","0.025510204955935478" 11 | "0.6.0","2","0.010204081423580647" 12 | "0.6.1","5","0.025510204955935478" 13 | "0.6.2","5","0.025510204955935478" 14 | "0.7.0","3","0.015306122601032257" 15 | "0.8.0","4","0.020408162847161293" 16 | "0.8.1","2","0.010204081423580647" 17 | "0.8.2","1","0.005102040711790323" 18 | "0.8.3","2","0.010204081423580647" 19 | "0.8.4","7","0.0357142873108387" 20 | "0.8.5","10","0.051020409911870956" 21 | "0.8.6","102","0.5204081535339355" 22 | "0.8.7","14","0.0714285746216774" 23 | -------------------------------------------------------------------------------- /data/downloads/2018-01-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","3","0.0020120723638683558" 2 | "0.0.2","1","6.706907879561186E-4" 3 | "0.0.3","1","6.706907879561186E-4" 4 | "0.1.0","1","6.706907879561186E-4" 5 | "0.1.1","2","0.0013413815759122372" 6 | "0.2.0","1","6.706907879561186E-4" 7 | "0.1.2","2","0.0013413815759122372" 8 | "0.1.3","4","0.0026827631518244743" 9 | "0.2.1","2","0.0013413815759122372" 10 | "0.2.2","5","0.0033534541726112366" 11 | "0.2.3","1","6.706907879561186E-4" 12 | "0.3.0","1","6.706907879561186E-4" 13 | "0.3.1","11","0.007377598900347948" 14 | "0.3.2","126","0.0845070406794548" 15 | "0.3.3","4","0.0026827631518244743" 16 | "0.3.4","2","0.0013413815759122372" 17 | "0.3.5","1","6.706907879561186E-4" 18 | "0.3.6","2","0.0013413815759122372" 19 | "0.3.7","2","0.0013413815759122372" 20 | "0.4.0","12","0.008048289455473423" 21 | "0.5.0","6","0.0040241447277367115" 22 | "0.6.0","200","0.13413816690444946" 23 | "0.6.1","78","0.05231388285756111" 24 | "0.6.2","49","0.03286384791135788" 25 | "0.7.0","64","0.04292421042919159" 26 | "0.8.0","104","0.06975184381008148" 27 | "0.8.1","8","0.005365526303648949" 28 | "0.8.2","324","0.2173038274049759" 29 | "0.8.3","31","0.020791415125131607" 30 | "0.8.4","128","0.08584842085838318" 31 | "0.8.5","70","0.04694835841655731" 32 | "0.8.6","215","0.14419852197170258" 33 | "0.8.7","30","0.02012072503566742" 34 | -------------------------------------------------------------------------------- /data/downloads/2018-01-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","22","0.003885552752763033" 2 | "0.6.1","67","0.011833274737000465" 3 | "0.6.2","3","5.29848097357899E-4" 4 | "0.7.0","26","0.00459201680496335" 5 | "0.8.0","104","0.0183680672198534" 6 | "0.8.1","11","0.0019427763763815165" 7 | "0.8.2","2374","0.41928645968437195" 8 | "0.8.3","313","0.05528081953525543" 9 | "0.8.4","1188","0.20981985330581665" 10 | "0.8.5","444","0.07841751724481583" 11 | "0.8.6","961","0.16972801089286804" 12 | "0.8.7","149","0.02631578966975212" 13 | -------------------------------------------------------------------------------- /data/downloads/2018-02-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","10","0.04716981202363968" 2 | "0.3.1","8","0.03773584961891174" 3 | "0.3.2","5","0.02358490601181984" 4 | "0.3.3","9","0.04245283082127571" 5 | "0.3.4","8","0.03773584961891174" 6 | "0.3.5","8","0.03773584961891174" 7 | "0.3.6","8","0.03773584961891174" 8 | "0.3.7","9","0.04245283082127571" 9 | "0.4.0","8","0.03773584961891174" 10 | "0.5.0","5","0.02358490601181984" 11 | "0.6.0","9","0.04245283082127571" 12 | "0.6.1","8","0.03773584961891174" 13 | "0.6.2","6","0.028301887214183807" 14 | "0.7.0","5","0.02358490601181984" 15 | "0.8.0","8","0.03773584961891174" 16 | "0.8.1","6","0.028301887214183807" 17 | "0.8.2","8","0.03773584961891174" 18 | "0.8.3","9","0.04245283082127571" 19 | "0.8.4","10","0.04716981202363968" 20 | "0.8.5","9","0.04245283082127571" 21 | "0.8.6","17","0.08018867671489716" 22 | "0.8.7","39","0.18396227061748505" 23 | -------------------------------------------------------------------------------- /data/downloads/2018-02-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","7","0.0036439355462789536" 2 | "0.0.2","8","0.004164497833698988" 3 | "0.0.3","6","0.003123373258858919" 4 | "0.1.0","5","0.0026028109714388847" 5 | "0.1.1","6","0.003123373258858919" 6 | "0.2.0","6","0.003123373258858919" 7 | "0.1.2","6","0.003123373258858919" 8 | "0.1.3","4","0.002082248916849494" 9 | "0.2.1","7","0.0036439355462789536" 10 | "0.2.2","7","0.0036439355462789536" 11 | "0.2.3","7","0.0036439355462789536" 12 | "0.3.0","8","0.004164497833698988" 13 | "0.3.1","18","0.00937011931091547" 14 | "0.3.2","507","0.26392504572868347" 15 | "0.3.3","7","0.0036439355462789536" 16 | "0.3.4","7","0.0036439355462789536" 17 | "0.3.5","5","0.0026028109714388847" 18 | "0.3.6","7","0.0036439355462789536" 19 | "0.3.7","8","0.004164497833698988" 20 | "0.4.0","13","0.006767308805137873" 21 | "0.5.0","9","0.004685059655457735" 22 | "0.6.0","45","0.023425299674272537" 23 | "0.6.1","96","0.049973972141742706" 24 | "0.6.2","129","0.06715252250432968" 25 | "0.7.0","19","0.009890682063996792" 26 | "0.8.0","37","0.019260801374912262" 27 | "0.8.1","10","0.0052056219428777695" 28 | "0.8.2","193","0.10046850889921188" 29 | "0.8.3","10","0.0052056219428777695" 30 | "0.8.4","53","0.027589796110987663" 31 | "0.8.5","67","0.03487766906619072" 32 | "0.8.6","400","0.20822487771511078" 33 | "0.8.7","204","0.10619468986988068" 34 | -------------------------------------------------------------------------------- /data/downloads/2018-02-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","23","0.0051965657621622086" 2 | "0.6.1","57","0.012878445908427238" 3 | "0.6.2","8","0.0018075010739266872" 4 | "0.7.0","11","0.0024853141512721777" 5 | "0.8.0","52","0.01174875721335411" 6 | "0.8.1","15","0.0033890646882355213" 7 | "0.8.2","793","0.17916855216026306" 8 | "0.8.3","179","0.04044283926486969" 9 | "0.8.4","404","0.0912788063287735" 10 | "0.8.5","226","0.051061905920505524" 11 | "0.8.6","1593","0.35991865396499634" 12 | "0.8.7","1065","0.2406235933303833" 13 | -------------------------------------------------------------------------------- /data/downloads/2018-03-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","6","0.030927835032343864" 2 | "0.3.1","6","0.030927835032343864" 3 | "0.3.2","7","0.036082472652196884" 4 | "0.3.3","12","0.06185567006468773" 5 | "0.3.4","9","0.04639175161719322" 6 | "0.3.5","11","0.05670103058218956" 7 | "0.3.6","6","0.030927835032343864" 8 | "0.3.7","6","0.030927835032343864" 9 | "0.4.0","10","0.05154639109969139" 10 | "0.5.0","9","0.04639175161719322" 11 | "0.6.0","7","0.036082472652196884" 12 | "0.6.1","9","0.04639175161719322" 13 | "0.6.2","7","0.036082472652196884" 14 | "0.7.0","7","0.036082472652196884" 15 | "0.8.0","8","0.04123711213469505" 16 | "0.8.1","7","0.036082472652196884" 17 | "0.8.2","7","0.036082472652196884" 18 | "0.8.3","10","0.05154639109969139" 19 | "0.8.4","13","0.0670103058218956" 20 | "0.8.5","8","0.04123711213469505" 21 | "0.8.6","10","0.05154639109969139" 22 | "0.8.7","19","0.09793814271688461" 23 | -------------------------------------------------------------------------------- /data/downloads/2018-03-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","6","0.0030581040773540735" 2 | "0.0.2","6","0.0030581040773540735" 3 | "0.0.3","6","0.0030581040773540735" 4 | "0.1.0","6","0.0030581040773540735" 5 | "0.1.1","6","0.0030581040773540735" 6 | "0.2.0","6","0.0030581040773540735" 7 | "0.1.2","6","0.0030581040773540735" 8 | "0.1.3","6","0.0030581040773540735" 9 | "0.2.1","11","0.005606524180620909" 10 | "0.2.2","6","0.0030581040773540735" 11 | "0.2.3","6","0.0030581040773540735" 12 | "0.3.0","6","0.0030581040773540735" 13 | "0.3.1","19","0.009683995507657528" 14 | "0.3.2","396","0.20183485746383667" 15 | "0.3.3","13","0.006625892128795385" 16 | "0.3.4","6","0.0030581040773540735" 17 | "0.3.5","6","0.0030581040773540735" 18 | "0.3.6","6","0.0030581040773540735" 19 | "0.3.7","7","0.003567788051441312" 20 | "0.4.0","20","0.010193679481744766" 21 | "0.5.0","13","0.006625892128795385" 22 | "0.6.0","30","0.015290520153939724" 23 | "0.6.1","26","0.01325178425759077" 24 | "0.6.2","180","0.0917431190609932" 25 | "0.7.0","29","0.014780836179852486" 26 | "0.8.0","69","0.03516819700598717" 27 | "0.8.1","9","0.004587155766785145" 28 | "0.8.2","460","0.23445463180541992" 29 | "0.8.3","31","0.015800204128026962" 30 | "0.8.4","44","0.022426096722483635" 31 | "0.8.5","43","0.021916411817073822" 32 | "0.8.6","267","0.1360856294631958" 33 | "0.8.7","211","0.10754331946372986" 34 | -------------------------------------------------------------------------------- /data/downloads/2018-03-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","12","0.001984455157071352" 2 | "0.6.1","47","0.007772448938339949" 3 | "0.6.2","7","0.001157598802819848" 4 | "0.7.0","10","0.001653712592087686" 5 | "0.8.0","150","0.024805689230561256" 6 | "0.8.1","17","0.0028113112784922123" 7 | "0.8.2","1193","0.197287917137146" 8 | "0.8.3","238","0.03935835883021355" 9 | "0.8.4","478","0.07904746383428574" 10 | "0.8.5","215","0.03555481880903244" 11 | "0.8.6","1976","0.32677361369132996" 12 | "0.8.7","1704","0.28179261088371277" 13 | -------------------------------------------------------------------------------- /data/downloads/2018-04-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","1","0.0044052861630916595" 2 | "0.3.1","1","0.0044052861630916595" 3 | "0.3.2","3","0.013215859420597553" 4 | "0.3.3","1","0.0044052861630916595" 5 | "0.3.4","3","0.013215859420597553" 6 | "0.3.5","1","0.0044052861630916595" 7 | "0.3.6","1","0.0044052861630916595" 8 | "0.3.7","1","0.0044052861630916595" 9 | "0.4.0","44","0.1938326060771942" 10 | "0.5.0","2","0.008810572326183319" 11 | "0.6.0","5","0.022026430815458298" 12 | "0.6.1","4","0.017621144652366638" 13 | "0.6.2","2","0.008810572326183319" 14 | "0.7.0","24","0.10572687536478043" 15 | "0.8.0","2","0.008810572326183319" 16 | "0.8.1","4","0.017621144652366638" 17 | "0.8.2","53","0.23348017036914825" 18 | "0.8.3","22","0.0969163030385971" 19 | "0.8.4","3","0.013215859420597553" 20 | "0.8.5","12","0.05286343768239021" 21 | "0.8.6","5","0.022026430815458298" 22 | "0.8.7","16","0.07048457860946655" 23 | "0.9.0","17","0.07488986849784851" 24 | -------------------------------------------------------------------------------- /data/downloads/2018-04-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","4","0.0016856299480423331" 2 | "0.0.2","37","0.015592077746987343" 3 | "0.0.3","2","8.428149740211666E-4" 4 | "0.1.0","32","0.013485039584338665" 5 | "0.1.1","35","0.014749262481927872" 6 | "0.2.0","27","0.011378002353012562" 7 | "0.1.2","27","0.011378002353012562" 8 | "0.1.3","27","0.011378002353012562" 9 | "0.2.1","27","0.011378002353012562" 10 | "0.2.2","2","8.428149740211666E-4" 11 | "0.2.3","1","4.214074870105833E-4" 12 | "0.3.0","1","4.214074870105833E-4" 13 | "0.3.1","14","0.005899704992771149" 14 | "0.3.2","449","0.18921196460723877" 15 | "0.3.3","2","8.428149740211666E-4" 16 | "0.3.4","24","0.01011378038674593" 17 | "0.3.5","28","0.011799409985542297" 18 | "0.3.6","40","0.016856299713253975" 19 | "0.3.7","25","0.01053518708795309" 20 | "0.4.0","5","0.002107037464156747" 21 | "0.5.0","7","0.0029498524963855743" 22 | "0.6.0","6","0.0025284450966864824" 23 | "0.6.1","17","0.007163927424699068" 24 | "0.6.2","107","0.04509060084819794" 25 | "0.7.0","38","0.016013484448194504" 26 | "0.8.0","59","0.024863041937351227" 27 | "0.8.1","4","0.0016856299480423331" 28 | "0.8.2","598","0.25200167298316956" 29 | "0.8.3","12","0.005056890193372965" 30 | "0.8.4","13","0.005478297360241413" 31 | "0.8.5","56","0.023598819971084595" 32 | "0.8.6","244","0.10282342880964279" 33 | "0.8.7","338","0.1424357295036316" 34 | "0.9.0","65","0.02739148773252964" 35 | -------------------------------------------------------------------------------- /data/downloads/2018-04-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","21","0.00352822570130229" 2 | "0.6.1","59","0.009912634268403053" 3 | "0.6.2","28","0.004704301245510578" 4 | "0.7.0","1","1.6801075253169984E-4" 5 | "0.8.0","195","0.03276209533214569" 6 | "0.8.1","12","0.002016128972172737" 7 | "0.8.2","839","0.14096102118492126" 8 | "0.8.3","267","0.044858869165182114" 9 | "0.8.4","683","0.11475134640932083" 10 | "0.8.5","239","0.04015456885099411" 11 | "0.8.6","1177","0.19774866104125977" 12 | "0.8.7","2086","0.3504704236984253" 13 | "0.9.0","345","0.05796371027827263" 14 | -------------------------------------------------------------------------------- /data/downloads/2018-05-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","3","0.01604278013110161" 2 | "0.3.1","4","0.02139037474989891" 3 | "0.3.2","8","0.04278074949979782" 4 | "0.3.3","6","0.03208556026220322" 5 | "0.3.4","6","0.03208556026220322" 6 | "0.3.5","4","0.02139037474989891" 7 | "0.3.6","5","0.026737967506051064" 8 | "0.3.7","4","0.02139037474989891" 9 | "0.4.0","6","0.03208556026220322" 10 | "0.5.0","5","0.026737967506051064" 11 | "0.6.0","8","0.04278074949979782" 12 | "0.6.1","7","0.03743315488100052" 13 | "0.6.2","6","0.03208556026220322" 14 | "0.7.0","6","0.03208556026220322" 15 | "0.8.0","6","0.03208556026220322" 16 | "0.8.1","4","0.02139037474989891" 17 | "0.8.2","6","0.03208556026220322" 18 | "0.8.3","5","0.026737967506051064" 19 | "0.8.4","9","0.048128340393304825" 20 | "0.8.5","5","0.026737967506051064" 21 | "0.8.6","33","0.1764705926179886" 22 | "0.8.7","8","0.04278074949979782" 23 | "0.9.0","33","0.1764705926179886" 24 | -------------------------------------------------------------------------------- /data/downloads/2018-05-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","3","7.737941923551261E-4" 2 | "0.0.2","3","7.737941923551261E-4" 3 | "0.0.3","5","0.00128965696785599" 4 | "0.1.0","7","0.0018055196851491928" 5 | "0.1.1","4","0.0010317255510017276" 6 | "0.2.0","4","0.0010317255510017276" 7 | "0.1.2","3","7.737941923551261E-4" 8 | "0.1.3","4","0.0010317255510017276" 9 | "0.2.1","3","7.737941923551261E-4" 10 | "0.2.2","4","0.0010317255510017276" 11 | "0.2.3","4","0.0010317255510017276" 12 | "0.3.0","6","0.0015475883847102523" 13 | "0.3.1","14","0.0036110393702983856" 14 | "0.3.2","375","0.09672427177429199" 15 | "0.3.3","8","0.002063451102003455" 16 | "0.3.4","4","0.0010317255510017276" 17 | "0.3.5","5","0.00128965696785599" 18 | "0.3.6","5","0.00128965696785599" 19 | "0.3.7","4","0.0010317255510017276" 20 | "0.4.0","7","0.0018055196851491928" 21 | "0.5.0","7","0.0018055196851491928" 22 | "0.6.0","7","0.0018055196851491928" 23 | "0.6.1","7","0.0018055196851491928" 24 | "0.6.2","148","0.038173846900463104" 25 | "0.7.0","30","0.007737941574305296" 26 | "0.8.0","108","0.02785659022629261" 27 | "0.8.1","11","0.0028372453525662422" 28 | "0.8.2","505","0.13025535643100739" 29 | "0.8.3","15","0.003868970787152648" 30 | "0.8.4","42","0.010833118110895157" 31 | "0.8.5","23","0.005932421889156103" 32 | "0.8.6","300","0.07737942039966583" 33 | "0.8.7","681","0.17565128207206726" 34 | "0.9.0","1521","0.3923136591911316" 35 | -------------------------------------------------------------------------------- /data/downloads/2018-05-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","16","0.0021072039380669594" 2 | "0.6.1","51","0.006716712843626738" 3 | "0.6.2","7","9.219017229042947E-4" 4 | "0.7.0","11","0.0014487027656286955" 5 | "0.8.0","125","0.016462530940771103" 6 | "0.8.1","9","0.0011853022733703256" 7 | "0.8.2","904","0.11905702948570251" 8 | "0.8.3","462","0.0608455166220665" 9 | "0.8.4","704","0.09271697700023651" 10 | "0.8.5","110","0.014487027190625668" 11 | "0.8.6","1371","0.18056103587150574" 12 | "0.8.7","1949","0.2566837966442108" 13 | "0.9.0","1874","0.24680626392364502" 14 | -------------------------------------------------------------------------------- /data/downloads/2018-06-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","4","0.028985507786273956" 2 | "0.3.1","3","0.021739130839705467" 3 | "0.3.2","6","0.043478261679410934" 4 | "0.3.3","7","0.050724636763334274" 5 | "0.3.4","4","0.028985507786273956" 6 | "0.3.5","4","0.028985507786273956" 7 | "0.3.6","3","0.021739130839705467" 8 | "0.3.7","3","0.021739130839705467" 9 | "0.4.0","3","0.021739130839705467" 10 | "0.5.0","3","0.021739130839705467" 11 | "0.6.0","3","0.021739130839705467" 12 | "0.6.1","3","0.021739130839705467" 13 | "0.6.2","3","0.021739130839705467" 14 | "0.7.0","7","0.050724636763334274" 15 | "0.8.0","5","0.036231882870197296" 16 | "0.8.1","6","0.043478261679410934" 17 | "0.8.2","4","0.028985507786273956" 18 | "0.8.3","6","0.043478261679410934" 19 | "0.8.4","8","0.05797101557254791" 20 | "0.8.5","4","0.028985507786273956" 21 | "0.8.6","8","0.05797101557254791" 22 | "0.8.7","8","0.05797101557254791" 23 | "0.9.0","24","0.17391304671764374" 24 | "0.9.1","9","0.06521739065647125" 25 | -------------------------------------------------------------------------------- /data/downloads/2018-06-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","12","0.002749140840023756" 2 | "0.0.2","11","0.002520045731216669" 3 | "0.0.3","11","0.002520045731216669" 4 | "0.1.0","11","0.002520045731216669" 5 | "0.1.1","10","0.002290950855240226" 6 | "0.2.0","10","0.002290950855240226" 7 | "0.1.2","10","0.002290950855240226" 8 | "0.1.3","10","0.002290950855240226" 9 | "0.2.1","10","0.002290950855240226" 10 | "0.2.2","10","0.002290950855240226" 11 | "0.2.3","9","0.002061855746433139" 12 | "0.3.0","9","0.002061855746433139" 13 | "0.3.1","21","0.004810996353626251" 14 | "0.3.2","270","0.06185567006468773" 15 | "0.3.3","10","0.002290950855240226" 16 | "0.3.4","9","0.002061855746433139" 17 | "0.3.5","10","0.002290950855240226" 18 | "0.3.6","9","0.002061855746433139" 19 | "0.3.7","9","0.002061855746433139" 20 | "0.4.0","12","0.002749140840023756" 21 | "0.5.0","10","0.002290950855240226" 22 | "0.6.0","17","0.003894616151228547" 23 | "0.6.1","12","0.002749140840023756" 24 | "0.6.2","117","0.0268041230738163" 25 | "0.7.0","96","0.021993126720190048" 26 | "0.8.0","43","0.00985108781605959" 27 | "0.8.1","15","0.003436426166445017" 28 | "0.8.2","543","0.1243986263871193" 29 | "0.8.3","17","0.003894616151228547" 30 | "0.8.4","36","0.008247422985732555" 31 | "0.8.5","15","0.003436426166445017" 32 | "0.8.6","259","0.0593356229364872" 33 | "0.8.7","713","0.16334478557109833" 34 | "0.9.0","1969","0.45108819007873535" 35 | "0.9.1","30","0.006872852332890034" 36 | -------------------------------------------------------------------------------- /data/downloads/2018-06-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","8","7.802594336681068E-4" 2 | "0.6.1","125","0.012191553600132465" 3 | "0.6.2","10","9.753243066370487E-4" 4 | "0.7.0","11","0.0010728567140176892" 5 | "0.8.0","24","0.0023407782427966595" 6 | "0.8.1","22","0.0021457134280353785" 7 | "0.8.2","818","0.07978152483701706" 8 | "0.8.3","322","0.03140544146299362" 9 | "0.8.4","1082","0.10553009063005447" 10 | "0.8.5","38","0.003706232411786914" 11 | "0.8.6","1732","0.1689261645078659" 12 | "0.8.7","2453","0.23924705386161804" 13 | "0.9.0","3522","0.3435092270374298" 14 | "0.9.1","86","0.008387789130210876" 15 | -------------------------------------------------------------------------------- /data/downloads/2018-07-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","17","0.035789474844932556" 2 | "0.3.1","18","0.03789473697543144" 3 | "0.3.2","16","0.03368420898914337" 4 | "0.3.3","17","0.035789474844932556" 5 | "0.3.4","17","0.035789474844932556" 6 | "0.3.5","16","0.03368420898914337" 7 | "0.3.6","18","0.03789473697543144" 8 | "0.3.7","18","0.03789473697543144" 9 | "0.4.0","17","0.035789474844932556" 10 | "0.5.0","16","0.03368420898914337" 11 | "0.6.0","16","0.03368420898914337" 12 | "0.6.1","16","0.03368420898914337" 13 | "0.6.2","17","0.035789474844932556" 14 | "0.7.0","18","0.03789473697543144" 15 | "0.8.0","17","0.035789474844932556" 16 | "0.8.1","20","0.04210526496171951" 17 | "0.8.2","22","0.046315789222717285" 18 | "0.8.3","20","0.04210526496171951" 19 | "0.8.4","19","0.03999999910593033" 20 | "0.8.5","20","0.04210526496171951" 21 | "0.8.6","17","0.035789474844932556" 22 | "0.8.7","26","0.05473684147000313" 23 | "0.9.0","17","0.035789474844932556" 24 | "0.9.1","30","0.06315789371728897" 25 | "0.9.2","30","0.06315789371728897" 26 | -------------------------------------------------------------------------------- /data/downloads/2018-07-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","19","0.0036301107611507177" 2 | "0.0.2","17","0.0032479939982295036" 3 | "0.0.3","16","0.0030569355003535748" 4 | "0.1.0","15","0.002865877002477646" 5 | "0.1.1","16","0.0030569355003535748" 6 | "0.2.0","16","0.0030569355003535748" 7 | "0.1.2","17","0.0032479939982295036" 8 | "0.1.3","14","0.002674818504601717" 9 | "0.2.1","17","0.0032479939982295036" 10 | "0.2.2","15","0.002865877002477646" 11 | "0.2.3","15","0.002865877002477646" 12 | "0.3.0","17","0.0032479939982295036" 13 | "0.3.1","33","0.006304929498583078" 14 | "0.3.2","221","0.04222391918301582" 15 | "0.3.3","17","0.0032479939982295036" 16 | "0.3.4","18","0.003439052263274789" 17 | "0.3.5","17","0.0032479939982295036" 18 | "0.3.6","17","0.0032479939982295036" 19 | "0.3.7","16","0.0030569355003535748" 20 | "0.4.0","21","0.004012227524071932" 21 | "0.5.0","16","0.0030569355003535748" 22 | "0.6.0","17","0.0032479939982295036" 23 | "0.6.1","16","0.0030569355003535748" 24 | "0.6.2","99","0.018914787098765373" 25 | "0.7.0","58","0.011081391014158726" 26 | "0.8.0","40","0.007642338518053293" 27 | "0.8.1","22","0.004203286021947861" 28 | "0.8.2","626","0.11960259824991226" 29 | "0.8.3","24","0.0045854030176997185" 30 | "0.8.4","32","0.0061138710007071495" 31 | "0.8.5","21","0.004012227524071932" 32 | "0.8.6","382","0.07298433035612106" 33 | "0.8.7","610","0.1165456622838974" 34 | "0.9.0","1936","0.36988919973373413" 35 | "0.9.1","124","0.023691250011324883" 36 | "0.9.2","657","0.12552541494369507" 37 | -------------------------------------------------------------------------------- /data/downloads/2018-07-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","24","0.0022077085450291634" 2 | "0.6.1","44","0.00404746551066637" 3 | "0.6.2","25","0.0022996964398771524" 4 | "0.7.0","19","0.0017477693036198616" 5 | "0.8.0","29","0.002667647786438465" 6 | "0.8.1","20","0.0018397571984678507" 7 | "0.8.2","893","0.08214515447616577" 8 | "0.8.3","367","0.03375954553484917" 9 | "0.8.4","804","0.07395824044942856" 10 | "0.8.5","56","0.005151320248842239" 11 | "0.8.6","1482","0.13632600009441376" 12 | "0.8.7","923","0.08490478992462158" 13 | "0.9.0","2740","0.25204673409461975" 14 | "0.9.1","418","0.038450922816991806" 15 | "0.9.2","3027","0.2784472405910492" 16 | -------------------------------------------------------------------------------- /data/downloads/2018-08-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","16","0.0357142873108387" 2 | "0.3.1","18","0.0401785708963871" 3 | "0.3.2","17","0.0379464291036129" 4 | "0.3.3","16","0.0357142873108387" 5 | "0.3.4","18","0.0401785708963871" 6 | "0.3.5","18","0.0401785708963871" 7 | "0.3.6","16","0.0357142873108387" 8 | "0.3.7","15","0.0334821417927742" 9 | "0.4.0","15","0.0334821417927742" 10 | "0.5.0","16","0.0357142873108387" 11 | "0.6.0","16","0.0357142873108387" 12 | "0.6.1","16","0.0357142873108387" 13 | "0.6.2","17","0.0379464291036129" 14 | "0.7.0","15","0.0334821417927742" 15 | "0.8.0","20","0.0446428582072258" 16 | "0.8.1","17","0.0379464291036129" 17 | "0.8.2","17","0.0379464291036129" 18 | "0.8.3","17","0.0379464291036129" 19 | "0.8.4","18","0.0401785708963871" 20 | "0.8.5","17","0.0379464291036129" 21 | "0.8.6","17","0.0379464291036129" 22 | "0.8.7","25","0.0558035708963871" 23 | "0.9.0","21","0.046875" 24 | "0.9.1","18","0.0401785708963871" 25 | "0.9.2","32","0.0714285746216774" 26 | -------------------------------------------------------------------------------- /data/downloads/2018-08-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","16","0.002748196478933096" 2 | "0.0.2","18","0.003091721097007394" 3 | "0.0.3","15","0.002576434286311269" 4 | "0.1.0","10","0.0017176228575408459" 5 | "0.1.1","15","0.002576434286311269" 6 | "0.2.0","16","0.002748196478933096" 7 | "0.1.2","15","0.002576434286311269" 8 | "0.1.3","16","0.002748196478933096" 9 | "0.2.1","15","0.002576434286311269" 10 | "0.2.2","16","0.002748196478933096" 11 | "0.2.3","16","0.002748196478933096" 12 | "0.3.0","15","0.002576434286311269" 13 | "0.3.1","17","0.002919958671554923" 14 | "0.3.2","179","0.030745448544621468" 15 | "0.3.3","16","0.002748196478933096" 16 | "0.3.4","19","0.003263483289629221" 17 | "0.3.5","18","0.003091721097007394" 18 | "0.3.6","19","0.003263483289629221" 19 | "0.3.7","18","0.003091721097007394" 20 | "0.4.0","19","0.003263483289629221" 21 | "0.5.0","25","0.004294056911021471" 22 | "0.6.0","25","0.004294056911021471" 23 | "0.6.1","19","0.003263483289629221" 24 | "0.6.2","106","0.018206801265478134" 25 | "0.7.0","53","0.009103400632739067" 26 | "0.8.0","74","0.012710409238934517" 27 | "0.8.1","20","0.0034352457150816917" 28 | "0.8.2","471","0.08090003579854965" 29 | "0.8.3","22","0.003778770100325346" 30 | "0.8.4","31","0.005324630532413721" 31 | "0.8.5","20","0.0034352457150816917" 32 | "0.8.6","579","0.09945035725831985" 33 | "0.8.7","405","0.06956372410058975" 34 | "0.9.0","2418","0.4153212010860443" 35 | "0.9.1","61","0.010477499105036259" 36 | "0.9.2","1005","0.17262108623981476" 37 | -------------------------------------------------------------------------------- /data/downloads/2018-08-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","21","0.001603420590981841" 2 | "0.6.1","70","0.005344735458493233" 3 | "0.6.2","18","0.001374360523186624" 4 | "0.7.0","20","0.0015270672738552094" 5 | "0.8.0","38","0.0029014279134571552" 6 | "0.8.1","34","0.0025960144121199846" 7 | "0.8.2","731","0.05581430718302727" 8 | "0.8.3","602","0.04596472531557083" 9 | "0.8.4","820","0.06260975450277328" 10 | "0.8.5","81","0.006184622645378113" 11 | "0.8.6","841","0.06421317905187607" 12 | "0.8.7","932","0.07116133719682693" 13 | "0.9.0","2759","0.21065892279148102" 14 | "0.9.1","252","0.019241048023104668" 15 | "0.9.2","5878","0.4488050639629364" 16 | -------------------------------------------------------------------------------- /data/downloads/2018-09-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","6","0.03125" 2 | "0.3.1","6","0.03125" 3 | "0.3.2","6","0.03125" 4 | "0.3.3","7","0.0364583320915699" 5 | "0.3.4","6","0.03125" 6 | "0.3.5","9","0.046875" 7 | "0.3.6","6","0.03125" 8 | "0.3.7","6","0.03125" 9 | "0.4.0","7","0.0364583320915699" 10 | "0.5.0","10","0.0520833320915699" 11 | "0.6.0","10","0.0520833320915699" 12 | "0.6.1","8","0.0416666679084301" 13 | "0.6.2","6","0.03125" 14 | "0.7.0","6","0.03125" 15 | "0.8.0","6","0.03125" 16 | "0.8.1","7","0.0364583320915699" 17 | "0.8.2","7","0.0364583320915699" 18 | "0.8.3","6","0.03125" 19 | "0.8.4","6","0.03125" 20 | "0.8.5","8","0.0416666679084301" 21 | "0.8.6","9","0.046875" 22 | "0.8.7","10","0.0520833320915699" 23 | "0.9.0","10","0.0520833320915699" 24 | "0.9.1","11","0.0572916679084301" 25 | "0.9.2","13","0.0677083358168602" 26 | -------------------------------------------------------------------------------- /data/downloads/2018-09-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","9","0.0018086816417053342" 2 | "0.0.2","9","0.0018086816417053342" 3 | "0.0.3","9","0.0018086816417053342" 4 | "0.1.0","9","0.0018086816417053342" 5 | "0.1.1","9","0.0018086816417053342" 6 | "0.2.0","11","0.0022106110118329525" 7 | "0.1.2","9","0.0018086816417053342" 8 | "0.1.3","9","0.0018086816417053342" 9 | "0.2.1","12","0.002411575522273779" 10 | "0.2.2","9","0.0018086816417053342" 11 | "0.2.3","9","0.0018086816417053342" 12 | "0.3.0","10","0.0020096462685614824" 13 | "0.3.1","11","0.0022106110118329525" 14 | "0.3.2","131","0.026326365768909454" 15 | "0.3.3","10","0.0020096462685614824" 16 | "0.3.4","11","0.0022106110118329525" 17 | "0.3.5","10","0.0020096462685614824" 18 | "0.3.6","9","0.0018086816417053342" 19 | "0.3.7","9","0.0018086816417053342" 20 | "0.4.0","17","0.003416398772969842" 21 | "0.5.0","14","0.0028135047759860754" 22 | "0.6.0","20","0.004019292537122965" 23 | "0.6.1","11","0.0022106110118329525" 24 | "0.6.2","33","0.00663183256983757" 25 | "0.7.0","18","0.0036173632834106684" 26 | "0.8.0","24","0.004823151044547558" 27 | "0.8.1","19","0.0038183280266821384" 28 | "0.8.2","446","0.08963022381067276" 29 | "0.8.3","9","0.0018086816417053342" 30 | "0.8.4","41","0.008239549584686756" 31 | "0.8.5","9","0.0018086816417053342" 32 | "0.8.6","556","0.11173633486032486" 33 | "0.8.7","286","0.05747588351368904" 34 | "0.9.0","1577","0.3169212341308594" 35 | "0.9.1","19","0.0038183280266821384" 36 | "0.9.2","1572","0.31591638922691345" 37 | -------------------------------------------------------------------------------- /data/downloads/2018-09-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","12","0.0012099213199689984" 2 | "0.6.1","35","0.003528937231749296" 3 | "0.6.2","11","0.0011090945918112993" 4 | "0.7.0","6","6.049606599844992E-4" 5 | "0.8.0","36","0.003629764076322317" 6 | "0.8.1","10","0.0010082677472382784" 7 | "0.8.2","324","0.03266787528991699" 8 | "0.8.3","671","0.06765476614236832" 9 | "0.8.4","343","0.03458358719944954" 10 | "0.8.5","91","0.009175237268209457" 11 | "0.8.6","626","0.06311756372451782" 12 | "0.8.7","1273","0.12835249304771423" 13 | "0.9.0","1411","0.14226658642292023" 14 | "0.9.1","122","0.012300866656005383" 15 | "0.9.2","4947","0.49879008531570435" 16 | -------------------------------------------------------------------------------- /data/downloads/2018-10-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","3","0.02654867246747017" 2 | "0.3.1","3","0.02654867246747017" 3 | "0.3.2","4","0.03539822995662689" 4 | "0.3.3","3","0.02654867246747017" 5 | "0.3.4","3","0.02654867246747017" 6 | "0.3.5","3","0.02654867246747017" 7 | "0.3.6","3","0.02654867246747017" 8 | "0.3.7","5","0.044247787445783615" 9 | "0.4.0","3","0.02654867246747017" 10 | "0.5.0","3","0.02654867246747017" 11 | "0.6.0","4","0.03539822995662689" 12 | "0.6.1","3","0.02654867246747017" 13 | "0.6.2","6","0.05309734493494034" 14 | "0.7.0","3","0.02654867246747017" 15 | "0.8.0","3","0.02654867246747017" 16 | "0.8.1","3","0.02654867246747017" 17 | "0.8.2","3","0.02654867246747017" 18 | "0.8.3","6","0.05309734493494034" 19 | "0.8.4","8","0.07079645991325378" 20 | "0.8.5","6","0.05309734493494034" 21 | "0.8.6","6","0.05309734493494034" 22 | "0.8.7","9","0.0796460211277008" 23 | "0.9.0","6","0.05309734493494034" 24 | "0.9.1","6","0.05309734493494034" 25 | "0.9.2","8","0.07079645991325378" 26 | -------------------------------------------------------------------------------- /data/downloads/2018-10-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","4","9.910803055390716E-4" 2 | "0.0.2","3","7.433102000504732E-4" 3 | "0.0.3","3","7.433102000504732E-4" 4 | "0.1.0","5","0.001238850294612348" 5 | "0.1.1","4","9.910803055390716E-4" 6 | "0.2.0","3","7.433102000504732E-4" 7 | "0.1.2","3","7.433102000504732E-4" 8 | "0.1.3","3","7.433102000504732E-4" 9 | "0.2.1","3","7.433102000504732E-4" 10 | "0.2.2","4","9.910803055390716E-4" 11 | "0.2.3","4","9.910803055390716E-4" 12 | "0.3.0","3","7.433102000504732E-4" 13 | "0.3.1","6","0.0014866204001009464" 14 | "0.3.2","192","0.047571852803230286" 15 | "0.3.3","4","9.910803055390716E-4" 16 | "0.3.4","7","0.0017343905055895448" 17 | "0.3.5","3","7.433102000504732E-4" 18 | "0.3.6","3","7.433102000504732E-4" 19 | "0.3.7","4","9.910803055390716E-4" 20 | "0.4.0","5","0.001238850294612348" 21 | "0.5.0","3","7.433102000504732E-4" 22 | "0.6.0","164","0.04063429310917854" 23 | "0.6.1","14","0.0034687810111790895" 24 | "0.6.2","81","0.02006937563419342" 25 | "0.7.0","31","0.007680871989578009" 26 | "0.8.0","19","0.004707631189376116" 27 | "0.8.1","5","0.001238850294612348" 28 | "0.8.2","235","0.05822596698999405" 29 | "0.8.3","7","0.0017343905055895448" 30 | "0.8.4","21","0.005203171633183956" 31 | "0.8.5","8","0.001982160611078143" 32 | "0.8.6","395","0.09786918014287949" 33 | "0.8.7","405","0.1003468781709671" 34 | "0.9.0","1090","0.2700693607330322" 35 | "0.9.1","9","0.0022299306001514196" 36 | "0.9.2","1283","0.317889004945755" 37 | -------------------------------------------------------------------------------- /data/downloads/2018-10-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","19","0.0018093514954671264" 2 | "0.6.1","23","0.0021902676671743393" 3 | "0.6.2","4","3.80916113499552E-4" 4 | "0.7.0","3","2.856870705727488E-4" 5 | "0.8.0","79","0.007523092906922102" 6 | "0.8.1","3","2.856870705727488E-4" 7 | "0.8.2","452","0.04304352030158043" 8 | "0.8.3","420","0.0399961918592453" 9 | "0.8.4","162","0.015427102334797382" 10 | "0.8.5","78","0.007427864242345095" 11 | "0.8.6","565","0.05380440130829811" 12 | "0.8.7","1349","0.1284639537334442" 13 | "0.9.0","623","0.059327684342861176" 14 | "0.9.1","62","0.005904199555516243" 15 | "0.9.2","6659","0.63413006067276" 16 | -------------------------------------------------------------------------------- /data/downloads/2018-11-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","4","0.03361344709992409" 2 | "0.3.1","5","0.042016807943582535" 3 | "0.3.2","4","0.03361344709992409" 4 | "0.3.3","2","0.016806723549962044" 5 | "0.3.4","1","0.008403361774981022" 6 | "0.3.5","1","0.008403361774981022" 7 | "0.3.6","2","0.016806723549962044" 8 | "0.3.7","1","0.008403361774981022" 9 | "0.4.0","3","0.02521008439362049" 10 | "0.5.0","1","0.008403361774981022" 11 | "0.6.0","2","0.016806723549962044" 12 | "0.6.1","4","0.03361344709992409" 13 | "0.6.2","1","0.008403361774981022" 14 | "0.7.0","6","0.05042016878724098" 15 | "0.8.0","8","0.06722689419984818" 16 | "0.8.1","8","0.06722689419984818" 17 | "0.8.2","6","0.05042016878724098" 18 | "0.8.3","15","0.1260504275560379" 19 | "0.8.4","5","0.042016807943582535" 20 | "0.8.5","6","0.05042016878724098" 21 | "0.8.6","5","0.042016807943582535" 22 | "0.8.7","6","0.05042016878724098" 23 | "0.9.0","7","0.05882352963089943" 24 | "0.9.1","5","0.042016807943582535" 25 | "0.9.2","11","0.09243697673082352" 26 | -------------------------------------------------------------------------------- /data/downloads/2018-11-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","5","0.001419647946022451" 2 | "0.0.2","4","0.001135718310251832" 3 | "0.0.3","5","0.001419647946022451" 4 | "0.1.0","4","0.001135718310251832" 5 | "0.1.1","4","0.001135718310251832" 6 | "0.2.0","4","0.001135718310251832" 7 | "0.1.2","8","0.002271436620503664" 8 | "0.1.3","6","0.001703577465377748" 9 | "0.2.1","4","0.001135718310251832" 10 | "0.2.2","8","0.002271436620503664" 11 | "0.2.3","6","0.001703577465377748" 12 | "0.3.0","7","0.001987507101148367" 13 | "0.3.1","9","0.0025553663726896048" 14 | "0.3.2","41","0.011641113087534904" 15 | "0.3.3","10","0.002839295892044902" 16 | "0.3.4","3","8.51788732688874E-4" 17 | "0.3.5","5","0.001419647946022451" 18 | "0.3.6","10","0.002839295892044902" 19 | "0.3.7","4","0.001135718310251832" 20 | "0.4.0","13","0.0036910846829414368" 21 | "0.5.0","12","0.003407154930755496" 22 | "0.6.0","196","0.055650196969509125" 23 | "0.6.1","14","0.003975014202296734" 24 | "0.6.2","121","0.03435548022389412" 25 | "0.7.0","22","0.006246450822800398" 26 | "0.8.0","31","0.008801816962659359" 27 | "0.8.1","7","0.001987507101148367" 28 | "0.8.2","50","0.014196479693055153" 29 | "0.8.3","14","0.003975014202296734" 30 | "0.8.4","20","0.005678591784089804" 31 | "0.8.5","34","0.00965360552072525" 32 | "0.8.6","325","0.09227711707353592" 33 | "0.8.7","350","0.09937535226345062" 34 | "0.9.0","915","0.25979557633399963" 35 | "0.9.1","6","0.001703577465377748" 36 | "0.9.2","1078","0.3060760796070099" 37 | "0.9.3","167","0.047416239976882935" 38 | -------------------------------------------------------------------------------- /data/downloads/2018-11-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","8","7.169101154431701E-4" 2 | "0.6.1","36","0.0032260955777019262" 3 | "0.6.2","2","1.7922752886079252E-4" 4 | "0.7.0","8","7.169101154431701E-4" 5 | "0.8.0","9","8.065238944254816E-4" 6 | "0.8.1","13","0.0011649789521470666" 7 | "0.8.2","99","0.00887176301330328" 8 | "0.8.3","417","0.03736893832683563" 9 | "0.8.4","208","0.018639663234353065" 10 | "0.8.5","265","0.023747647181153297" 11 | "0.8.6","764","0.06846491992473602" 12 | "0.8.7","818","0.07330405712127686" 13 | "0.9.0","518","0.04641992971301079" 14 | "0.9.1","28","0.0025091853458434343" 15 | "0.9.2","6348","0.5688681602478027" 16 | "0.9.3","1618","0.1449950784444809" 17 | -------------------------------------------------------------------------------- /data/downloads/2018-12-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","5","0.017605634406208992" 2 | "0.3.1","4","0.014084506779909134" 3 | "0.3.2","7","0.02464788779616356" 4 | "0.3.3","5","0.017605634406208992" 5 | "0.3.4","5","0.017605634406208992" 6 | "0.3.5","5","0.017605634406208992" 7 | "0.3.6","6","0.0211267601698637" 8 | "0.3.7","7","0.02464788779616356" 9 | "0.4.0","6","0.0211267601698637" 10 | "0.5.0","4","0.014084506779909134" 11 | "0.6.0","7","0.02464788779616356" 12 | "0.6.1","5","0.017605634406208992" 13 | "0.6.2","5","0.017605634406208992" 14 | "0.7.0","10","0.035211268812417984" 15 | "0.8.0","12","0.0422535203397274" 16 | "0.8.1","8","0.028169013559818268" 17 | "0.8.2","12","0.0422535203397274" 18 | "0.8.3","19","0.06690140813589096" 19 | "0.8.4","18","0.06338027864694595" 20 | "0.8.5","20","0.07042253762483597" 21 | "0.8.6","20","0.07042253762483597" 22 | "0.8.7","24","0.0845070406794548" 23 | "0.9.0","21","0.07394365966320038" 24 | "0.9.1","19","0.06690140813589096" 25 | "0.9.2","30","0.10563380271196365" 26 | -------------------------------------------------------------------------------- /data/downloads/2018-12-refined_2.11.csv: -------------------------------------------------------------------------------- 1 | "0.0.1","3","8.114687516354024E-4" 2 | "0.0.2","2","5.409791483543813E-4" 3 | "0.0.3","4","0.0010819582967087626" 4 | "0.1.0","5","0.0013524478999897838" 5 | "0.1.1","6","0.0016229375032708049" 6 | "0.2.0","3","8.114687516354024E-4" 7 | "0.1.2","1","2.7048957417719066E-4" 8 | "0.1.3","6","0.0016229375032708049" 9 | "0.2.1","2","5.409791483543813E-4" 10 | "0.2.2","6","0.0016229375032708049" 11 | "0.2.3","3","8.114687516354024E-4" 12 | "0.3.0","4","0.0010819582967087626" 13 | "0.3.1","8","0.0021639165934175253" 14 | "0.3.2","52","0.014065458439290524" 15 | "0.3.3","8","0.0021639165934175253" 16 | "0.3.4","9","0.0024344061966985464" 17 | "0.3.5","7","0.001893427106551826" 18 | "0.3.6","12","0.0032458750065416098" 19 | "0.3.7","9","0.0024344061966985464" 20 | "0.4.0","12","0.0032458750065416098" 21 | "0.5.0","30","0.008114687167108059" 22 | "0.6.0","324","0.08763862401247025" 23 | "0.6.1","12","0.0032458750065416098" 24 | "0.6.2","91","0.024614552035927773" 25 | "0.7.0","27","0.007303218822926283" 26 | "0.8.0","74","0.020016228780150414" 27 | "0.8.1","26","0.007032729219645262" 28 | "0.8.2","150","0.04057343676686287" 29 | "0.8.3","84","0.022721124812960625" 30 | "0.8.4","44","0.011901541613042355" 31 | "0.8.5","28","0.007573708426207304" 32 | "0.8.6","323","0.08736813813447952" 33 | "0.8.7","404","0.10927779227495193" 34 | "0.9.0","909","0.2458750307559967" 35 | "0.9.1","27","0.007303218822926283" 36 | "0.9.2","762","0.2061130702495575" 37 | "0.9.3","220","0.05950770899653435" 38 | -------------------------------------------------------------------------------- /data/downloads/2018-12-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","21","0.0024708788841962814" 2 | "0.6.1","20","0.0023532179184257984" 3 | "0.6.2","8","9.412872022949159E-4" 4 | "0.7.0","15","0.0017649135552346706" 5 | "0.8.0","26","0.003059183480218053" 6 | "0.8.1","14","0.0016472525894641876" 7 | "0.8.2","56","0.0065890103578567505" 8 | "0.8.3","471","0.05541828274726868" 9 | "0.8.4","174","0.020472995936870575" 10 | "0.8.5","280","0.03294505178928375" 11 | "0.8.6","427","0.05024120584130287" 12 | "0.8.7","521","0.061301328241825104" 13 | "0.9.0","371","0.04365219548344612" 14 | "0.9.1","40","0.004706435836851597" 15 | "0.9.2","4469","0.5258265733718872" 16 | "0.9.3","1586","0.18661019206047058" 17 | -------------------------------------------------------------------------------- /data/downloads/2019-05-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","1","0.01587301678955555" 2 | "0.3.1","2","0.0317460335791111" 3 | "0.3.2","6","0.095238097012043" 4 | "0.3.3","1","0.01587301678955555" 5 | "0.3.4","2","0.0317460335791111" 6 | "0.3.5","1","0.01587301678955555" 7 | "0.3.6","1","0.01587301678955555" 8 | "0.3.7","2","0.0317460335791111" 9 | "0.4.0","1","0.01587301678955555" 10 | "0.5.0","3","0.0476190485060215" 11 | "0.6.0","5","0.0793650820851326" 12 | "0.6.1","3","0.0476190485060215" 13 | "0.6.2","2","0.0317460335791111" 14 | "0.7.0","2","0.0317460335791111" 15 | "0.8.0","1","0.01587301678955555" 16 | "0.8.1","1","0.01587301678955555" 17 | "0.8.2","3","0.0476190485060215" 18 | "0.8.3","2","0.0317460335791111" 19 | "0.8.4","2","0.0317460335791111" 20 | "0.8.5","9","0.1428571492433548" 21 | "0.8.6","2","0.0317460335791111" 22 | "0.8.7","1","0.01587301678955555" 23 | "0.9.0","2","0.0317460335791111" 24 | "0.9.1","2","0.0317460335791111" 25 | "0.9.2","6","0.095238097012043" 26 | -------------------------------------------------------------------------------- /data/downloads/2019-05-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","396","0.02290606126189232" 2 | "0.6.1","5","2.892179472837597E-4" 3 | "0.6.2","1","5.7843590184347704E-5" 4 | "0.7.0","5","2.892179472837597E-4" 5 | "0.8.0","8","4.6274872147478163E-4" 6 | "0.8.1","5","2.892179472837597E-4" 7 | "0.8.2","173","0.010006940923631191" 8 | "0.8.3","217","0.012552059255540371" 9 | "0.8.4","57","0.0032970847096294165" 10 | "0.8.5","155","0.008965756744146347" 11 | "0.8.6","329","0.01903054118156433" 12 | "0.8.7","955","0.055240631103515625" 13 | "0.9.0","296","0.017121702432632446" 14 | "0.9.1","27","0.0015617769677191973" 15 | "0.9.2","920","0.053216103464365005" 16 | "0.9.3","2346","0.13570106029510498" 17 | "0.9.4","6172","0.3570106327533722" 18 | "0.9.5","4827","0.27921101450920105" 19 | "0.9.6","384","0.022211939096450806" 20 | "0.9.7","10","5.784358945675194E-4" 21 | -------------------------------------------------------------------------------- /data/downloads/2019-06-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","1","0.0031645570416003466" 2 | "0.3.1","1","0.0031645570416003466" 3 | "0.3.2","2","0.006329114083200693" 4 | "0.3.3","1","0.0031645570416003466" 5 | "0.3.4","1","0.0031645570416003466" 6 | "0.3.5","1","0.0031645570416003466" 7 | "0.3.6","3","0.009493670426309109" 8 | "0.3.7","1","0.0031645570416003466" 9 | "0.4.0","1","0.0031645570416003466" 10 | "0.5.0","1","0.0031645570416003466" 11 | "0.6.0","1","0.0031645570416003466" 12 | "0.6.1","1","0.0031645570416003466" 13 | "0.6.2","1","0.0031645570416003466" 14 | "0.7.0","1","0.0031645570416003466" 15 | "0.8.0","5","0.01582278497517109" 16 | "0.8.1","3","0.009493670426309109" 17 | "0.8.2","3","0.009493670426309109" 18 | "0.8.3","1","0.0031645570416003466" 19 | "0.8.4","1","0.0031645570416003466" 20 | "0.8.5","94","0.297468364238739" 21 | "0.8.6","93","0.2943038046360016" 22 | "0.8.7","2","0.006329114083200693" 23 | "0.9.0","91","0.28797468543052673" 24 | "0.9.1","2","0.006329114083200693" 25 | "0.9.2","4","0.012658228166401386" 26 | -------------------------------------------------------------------------------- /data/downloads/2019-06-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","263","0.01266432274132967" 2 | "0.6.1","5","2.4076660338323563E-4" 3 | "0.6.2","1","4.815332067664713E-5" 4 | "0.7.0","1","4.815332067664713E-5" 5 | "0.8.0","3","1.4445996202994138E-4" 6 | "0.8.1","6","2.8891992405988276E-4" 7 | "0.8.2","106","0.005104252137243748" 8 | "0.8.3","8","3.85226565413177E-4" 9 | "0.8.4","125","0.0060191648080945015" 10 | "0.8.5","49","0.0023595127277076244" 11 | "0.8.6","422","0.020320700481534004" 12 | "0.8.7","519","0.02499157376587391" 13 | "0.9.0","301","0.014494149014353752" 14 | "0.9.1","8","3.85226565413177E-4" 15 | "0.9.2","863","0.04155631363391876" 16 | "0.9.3","3379","0.1627100706100464" 17 | "0.9.4","5443","0.2620985209941864" 18 | "0.9.5","3735","0.1798526495695114" 19 | "0.9.6","431","0.020754080265760422" 20 | "0.9.7","2370","0.11412336677312851" 21 | "0.9.8","2729","0.1314104050397873" 22 | -------------------------------------------------------------------------------- /data/downloads/2019-06-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","194","1.0" 2 | -------------------------------------------------------------------------------- /data/downloads/2019-07-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","3","0.0260869562625885" 2 | "0.3.1","3","0.0260869562625885" 3 | "0.3.2","7","0.06086956337094307" 4 | "0.3.3","6","0.052173912525177" 5 | "0.3.4","3","0.0260869562625885" 6 | "0.3.5","6","0.052173912525177" 7 | "0.3.6","4","0.03478260710835457" 8 | "0.3.7","3","0.0260869562625885" 9 | "0.4.0","7","0.06086956337094307" 10 | "0.5.0","6","0.052173912525177" 11 | "0.6.0","6","0.052173912525177" 12 | "0.6.1","6","0.052173912525177" 13 | "0.6.2","3","0.0260869562625885" 14 | "0.7.0","3","0.0260869562625885" 15 | "0.8.0","5","0.043478261679410934" 16 | "0.8.1","3","0.0260869562625885" 17 | "0.8.2","4","0.03478260710835457" 18 | "0.8.3","3","0.0260869562625885" 19 | "0.8.4","3","0.0260869562625885" 20 | "0.8.5","6","0.052173912525177" 21 | "0.8.6","7","0.06086956337094307" 22 | "0.8.7","4","0.03478260710835457" 23 | "0.9.0","4","0.03478260710835457" 24 | "0.9.1","3","0.0260869562625885" 25 | "0.9.2","7","0.06086956337094307" 26 | -------------------------------------------------------------------------------- /data/downloads/2019-07-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","87","0.0036753832828253508" 2 | "0.6.1","12","5.069494363851845E-4" 3 | "0.6.2","3","1.2673735909629613E-4" 4 | "0.7.0","4","1.6898314061108977E-4" 5 | "0.8.0","8","3.3796628122217953E-4" 6 | "0.8.1","8","3.3796628122217953E-4" 7 | "0.8.2","319","0.013476405292749405" 8 | "0.8.3","19","8.0266990698874E-4" 9 | "0.8.4","174","0.0073507665656507015" 10 | "0.8.5","82","0.0034641544334590435" 11 | "0.8.6","433","0.018292425200343132" 12 | "0.8.7","417","0.01761649362742901" 13 | "0.9.0","151","0.006379113532602787" 14 | "0.9.1","18","7.604241254739463E-4" 15 | "0.9.2","797","0.03366989269852638" 16 | "0.9.3","3337","0.14097419381141663" 17 | "0.9.4","3800","0.16053397953510284" 18 | "0.9.5","3476","0.14684635400772095" 19 | "0.9.6","278","0.011744328774511814" 20 | "0.9.7","708","0.029910016804933548" 21 | "0.9.8","9124","0.385450541973114" 22 | "0.9.9","416","0.0175742469727993" 23 | -------------------------------------------------------------------------------- /data/downloads/2019-07-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","338","0.747787594795227" 2 | "0.9.9","114","0.25221237540245056" 3 | -------------------------------------------------------------------------------- /data/downloads/2019-08-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","4","0.023121386766433716" 2 | "0.3.1","4","0.023121386766433716" 3 | "0.3.2","7","0.040462426841259" 4 | "0.3.3","9","0.05202312022447586" 5 | "0.3.4","8","0.04624277353286743" 6 | "0.3.5","8","0.04624277353286743" 7 | "0.3.6","8","0.04624277353286743" 8 | "0.3.7","7","0.040462426841259" 9 | "0.4.0","6","0.034682080149650574" 10 | "0.5.0","7","0.040462426841259" 11 | "0.6.0","6","0.034682080149650574" 12 | "0.6.1","6","0.034682080149650574" 13 | "0.6.2","7","0.040462426841259" 14 | "0.7.0","7","0.040462426841259" 15 | "0.8.0","7","0.040462426841259" 16 | "0.8.1","9","0.05202312022447586" 17 | "0.8.2","7","0.040462426841259" 18 | "0.8.3","7","0.040462426841259" 19 | "0.8.4","7","0.040462426841259" 20 | "0.8.5","8","0.04624277353286743" 21 | "0.8.6","7","0.040462426841259" 22 | "0.8.7","6","0.034682080149650574" 23 | "0.9.0","7","0.040462426841259" 24 | "0.9.1","7","0.040462426841259" 25 | "0.9.2","7","0.040462426841259" 26 | -------------------------------------------------------------------------------- /data/downloads/2019-08-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","156","0.0056232428178191185" 2 | "0.6.1","18","6.488356739282608E-4" 3 | "0.6.2","6","2.1627856767736375E-4" 4 | "0.7.0","7","2.5232500047422945E-4" 5 | "0.8.0","11","3.965107025578618E-4" 6 | "0.8.1","6","2.1627856767736375E-4" 7 | "0.8.2","213","0.007677888963371515" 8 | "0.8.3","12","4.325571353547275E-4" 9 | "0.8.4","138","0.004974407143890858" 10 | "0.8.5","85","0.0030639462638646364" 11 | "0.8.6","502","0.018095307052135468" 12 | "0.8.7","307","0.011066253297030926" 13 | "0.9.0","92","0.0033162713516503572" 14 | "0.9.1","21","7.569749723188579E-4" 15 | "0.9.2","824","0.029702257364988327" 16 | "0.9.3","2557","0.09217071533203125" 17 | "0.9.4","2997","0.10803114622831345" 18 | "0.9.5","3431","0.12367529422044754" 19 | "0.9.6","138","0.004974407143890858" 20 | "0.9.7","53","0.0019104606471955776" 21 | "0.9.8","10438","0.3762526214122772" 22 | "0.9.9","5730","0.20654603838920593" 23 | -------------------------------------------------------------------------------- /data/downloads/2019-08-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","82","0.10186335444450378" 2 | "0.9.9","723","0.8981366753578186" 3 | -------------------------------------------------------------------------------- /data/downloads/2019-09-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","2","0.0010695187374949455" 2 | "0.3.1","1","5.347593687474728E-4" 3 | "0.3.2","1","5.347593687474728E-4" 4 | "0.3.3","150","0.08021390438079834" 5 | "0.3.4","2","0.0010695187374949455" 6 | "0.3.5","1","5.347593687474728E-4" 7 | "0.3.6","149","0.07967914640903473" 8 | "0.3.7","144","0.07700534909963608" 9 | "0.4.0","145","0.07754010707139969" 10 | "0.5.0","1","5.347593687474728E-4" 11 | "0.6.0","136","0.072727270424366" 12 | "0.6.1","131","0.07005347311496735" 13 | "0.6.2","130","0.06951871514320374" 14 | "0.7.0","130","0.06951871514320374" 15 | "0.8.0","4","0.002139037474989891" 16 | "0.8.1","128","0.06844919919967651" 17 | "0.8.2","128","0.06844919919967651" 18 | "0.8.3","1","5.347593687474728E-4" 19 | "0.8.4","123","0.06577540189027786" 20 | "0.8.5","1","5.347593687474728E-4" 21 | "0.8.6","120","0.06417112052440643" 22 | "0.8.7","120","0.06417112052440643" 23 | "0.9.0","1","5.347593687474728E-4" 24 | "0.9.1","118","0.06310160458087921" 25 | "0.9.2","3","0.0016042781062424183" 26 | -------------------------------------------------------------------------------- /data/downloads/2019-09-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","221","0.00699123740196228" 2 | "0.6.1","2","6.326911534415558E-5" 3 | "0.6.2","130","0.004112492315471172" 4 | "0.7.0","162","0.005124798510223627" 5 | "0.8.0","7","2.2144190734252334E-4" 6 | "0.8.1","5","1.5817278472241014E-4" 7 | "0.8.2","135","0.004270665347576141" 8 | "0.8.3","8","2.530764613766223E-4" 9 | "0.8.4","184","0.005820758640766144" 10 | "0.8.5","36","0.0011388440616428852" 11 | "0.8.6","623","0.019708329811692238" 12 | "0.8.7","590","0.018664389848709106" 13 | "0.9.0","164","0.005188067443668842" 14 | "0.9.1","11","3.4798012347891927E-4" 15 | "0.9.2","800","0.02530764602124691" 16 | "0.9.3","2078","0.06573661416769028" 17 | "0.9.4","4460","0.14109012484550476" 18 | "0.9.5","3293","0.10417259484529495" 19 | "0.9.6","9","2.847110154107213E-4" 20 | "0.9.7","116","0.0036696086172014475" 21 | "0.9.8","7135","0.22571256756782532" 22 | "0.9.9","9003","0.28480592370033264" 23 | "0.9.10","2439","0.0771566852927208" 24 | -------------------------------------------------------------------------------- /data/downloads/2019-09-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","43","0.02872411534190178" 2 | "0.9.9","896","0.5985304117202759" 3 | "0.9.10","558","0.37274548411369324" 4 | -------------------------------------------------------------------------------- /data/downloads/2019-10-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","7","0.03125" 2 | "0.3.1","7","0.03125" 3 | "0.3.2","7","0.03125" 4 | "0.3.3","8","0.0357142873108387" 5 | "0.3.4","8","0.0357142873108387" 6 | "0.3.5","8","0.0357142873108387" 7 | "0.3.6","8","0.0357142873108387" 8 | "0.3.7","8","0.0357142873108387" 9 | "0.4.0","9","0.0401785708963871" 10 | "0.5.0","9","0.0401785708963871" 11 | "0.6.0","8","0.0357142873108387" 12 | "0.6.1","8","0.0357142873108387" 13 | "0.6.2","8","0.0357142873108387" 14 | "0.7.0","9","0.0401785708963871" 15 | "0.8.0","11","0.0491071417927742" 16 | "0.8.1","10","0.0446428582072258" 17 | "0.8.2","7","0.03125" 18 | "0.8.3","15","0.0669642835855484" 19 | "0.8.4","8","0.0357142873108387" 20 | "0.8.5","8","0.0357142873108387" 21 | "0.8.6","11","0.0491071417927742" 22 | "0.8.7","10","0.0446428582072258" 23 | "0.9.0","8","0.0357142873108387" 24 | "0.9.1","8","0.0357142873108387" 25 | "0.9.2","16","0.0714285746216774" 26 | -------------------------------------------------------------------------------- /data/downloads/2019-10-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","176","0.005801878869533539" 2 | "0.6.1","10","3.2965221907943487E-4" 3 | "0.6.2","7","2.3075654462445527E-4" 4 | "0.7.0","8","2.637217694427818E-4" 5 | "0.8.0","9","2.9668700881302357E-4" 6 | "0.8.1","14","4.6151308924891055E-4" 7 | "0.8.2","164","0.005406296346336603" 8 | "0.8.3","15","4.944783286191523E-4" 9 | "0.8.4","236","0.007779792416840792" 10 | "0.8.5","42","0.001384539296850562" 11 | "0.8.6","510","0.016812263056635857" 12 | "0.8.7","630","0.020768089219927788" 13 | "0.9.0","217","0.007153453305363655" 14 | "0.9.1","21","6.92269648425281E-4" 15 | "0.9.2","731","0.02409757673740387" 16 | "0.9.3","1884","0.062106478959321976" 17 | "0.9.4","3628","0.11959782242774963" 18 | "0.9.5","2629","0.0866655707359314" 19 | "0.9.6","17","5.604087491519749E-4" 20 | "0.9.7","48","0.0015823306748643517" 21 | "0.9.8","6136","0.2022746056318283" 22 | "0.9.9","5330","0.17570462822914124" 23 | "0.9.10","7873","0.25953519344329834" 24 | -------------------------------------------------------------------------------- /data/downloads/2019-10-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","23","0.007348242681473494" 2 | "0.9.9","508","0.16230031847953796" 3 | "0.9.10","2599","0.8303514122962952" 4 | -------------------------------------------------------------------------------- /data/downloads/2019-11-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","4","0.02139037474989891" 2 | "0.3.1","5","0.026737967506051064" 3 | "0.3.2","7","0.03743315488100052" 4 | "0.3.3","8","0.04278074949979782" 5 | "0.3.4","6","0.03208556026220322" 6 | "0.3.5","5","0.026737967506051064" 7 | "0.3.6","6","0.03208556026220322" 8 | "0.3.7","11","0.05882352963089943" 9 | "0.4.0","7","0.03743315488100052" 10 | "0.5.0","8","0.04278074949979782" 11 | "0.6.0","7","0.03743315488100052" 12 | "0.6.1","6","0.03208556026220322" 13 | "0.6.2","7","0.03743315488100052" 14 | "0.7.0","5","0.026737967506051064" 15 | "0.8.0","7","0.03743315488100052" 16 | "0.8.1","9","0.048128340393304825" 17 | "0.8.2","12","0.06417112052440643" 18 | "0.8.3","5","0.026737967506051064" 19 | "0.8.4","7","0.03743315488100052" 20 | "0.8.5","7","0.03743315488100052" 21 | "0.8.6","9","0.048128340393304825" 22 | "0.8.7","7","0.03743315488100052" 23 | "0.9.0","9","0.048128340393304825" 24 | "0.9.1","8","0.04278074949979782" 25 | "0.9.2","15","0.08021390438079834" 26 | -------------------------------------------------------------------------------- /data/downloads/2019-11-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","176","0.005518798250705004" 2 | "0.6.1","8","2.5085447123274207E-4" 3 | "0.6.2","7","2.1949766960460693E-4" 4 | "0.7.0","6","1.8814085342455655E-4" 5 | "0.8.0","18","5.644225748255849E-4" 6 | "0.8.1","12","3.762817068491131E-4" 7 | "0.8.2","142","0.004452666733413935" 8 | "0.8.3","7","2.1949766960460693E-4" 9 | "0.8.4","34","0.001066131517291069" 10 | "0.8.5","26","8.15277046058327E-4" 11 | "0.8.6","424","0.013295287266373634" 12 | "0.8.7","473","0.01483177114278078" 13 | "0.9.0","964","0.030227964743971825" 14 | "0.9.1","13","4.076385230291635E-4" 15 | "0.9.2","546","0.01712081767618656" 16 | "0.9.3","1986","0.06227462366223335" 17 | "0.9.4","2249","0.07052146643400192" 18 | "0.9.5","1850","0.05801009759306908" 19 | "0.9.6","26","8.15277046058327E-4" 20 | "0.9.7","27","8.466338622383773E-4" 21 | "0.9.8","6781","0.2126305252313614" 22 | "0.9.9","4757","0.1491643339395523" 23 | "0.9.10","11359","0.3561820089817047" 24 | -------------------------------------------------------------------------------- /data/downloads/2019-11-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","19","0.005589879583567381" 2 | "0.9.9","583","0.17152103781700134" 3 | "0.9.10","2797","0.8228890895843506" 4 | -------------------------------------------------------------------------------- /data/downloads/2019-12-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","2","0.020408162847161293" 2 | "0.3.1","2","0.020408162847161293" 3 | "0.3.2","3","0.030612245202064514" 4 | "0.3.3","3","0.030612245202064514" 5 | "0.3.4","1","0.010204081423580647" 6 | "0.3.5","3","0.030612245202064514" 7 | "0.3.6","4","0.040816325694322586" 8 | "0.3.7","5","0.051020409911870956" 9 | "0.4.0","5","0.051020409911870956" 10 | "0.5.0","4","0.040816325694322586" 11 | "0.6.0","1","0.010204081423580647" 12 | "0.6.1","3","0.030612245202064514" 13 | "0.6.2","2","0.020408162847161293" 14 | "0.7.0","4","0.040816325694322586" 15 | "0.8.0","5","0.051020409911870956" 16 | "0.8.1","3","0.030612245202064514" 17 | "0.8.2","3","0.030612245202064514" 18 | "0.8.3","4","0.040816325694322586" 19 | "0.8.4","3","0.030612245202064514" 20 | "0.8.5","3","0.030612245202064514" 21 | "0.8.6","7","0.0714285746216774" 22 | "0.8.7","4","0.040816325694322586" 23 | "0.9.0","6","0.06122449040412903" 24 | "0.9.1","5","0.051020409911870956" 25 | "0.9.2","13","0.13265305757522583" 26 | -------------------------------------------------------------------------------- /data/downloads/2019-12-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","152","0.005093321669846773" 2 | "0.6.1","10","3.350869519636035E-4" 3 | "0.6.2","2","6.70173903927207E-5" 4 | "0.7.0","44","0.0014743825886398554" 5 | "0.8.0","18","6.031565135344863E-4" 6 | "0.8.1","6","2.010521711781621E-4" 7 | "0.8.2","130","0.004356130491942167" 8 | "0.8.3","21","7.036825991235673E-4" 9 | "0.8.4","15","5.026304279454052E-4" 10 | "0.8.5","36","0.0012063130270689726" 11 | "0.8.6","451","0.015112421475350857" 12 | "0.8.7","334","0.011191904544830322" 13 | "0.9.0","533","0.017860135063529015" 14 | "0.9.1","28","9.382434654980898E-4" 15 | "0.9.2","374","0.012532251887023449" 16 | "0.9.3","1452","0.04865462705492973" 17 | "0.9.4","1848","0.06192407011985779" 18 | "0.9.5","1750","0.058640215545892715" 19 | "0.9.6","12","4.021043423563242E-4" 20 | "0.9.7","38","0.0012733304174616933" 21 | "0.9.8","6809","0.22816070914268494" 22 | "0.9.9","4663","0.15625104308128357" 23 | "0.9.10","11117","0.3725161552429199" 24 | -------------------------------------------------------------------------------- /data/downloads/2019-12-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","45","0.00865551084280014" 2 | "0.9.9","306","0.058857470750808716" 3 | "0.9.10","4848","0.9324870109558105" 4 | -------------------------------------------------------------------------------- /data/downloads/2020-01-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","43","0.04071969538927078" 2 | "0.3.1","41","0.038825757801532745" 3 | "0.3.2","44","0.0416666679084301" 4 | "0.3.3","43","0.04071969538927078" 5 | "0.3.4","42","0.039772726595401764" 6 | "0.3.5","42","0.039772726595401764" 7 | "0.3.6","44","0.0416666679084301" 8 | "0.3.7","43","0.04071969538927078" 9 | "0.4.0","44","0.0416666679084301" 10 | "0.5.0","42","0.039772726595401764" 11 | "0.6.0","42","0.039772726595401764" 12 | "0.6.1","41","0.038825757801532745" 13 | "0.6.2","41","0.038825757801532745" 14 | "0.7.0","41","0.038825757801532745" 15 | "0.8.0","42","0.039772726595401764" 16 | "0.8.1","42","0.039772726595401764" 17 | "0.8.2","42","0.039772726595401764" 18 | "0.8.3","41","0.038825757801532745" 19 | "0.8.4","40","0.03787878900766373" 20 | "0.8.5","43","0.04071969538927078" 21 | "0.8.6","43","0.04071969538927078" 22 | "0.8.7","42","0.039772726595401764" 23 | "0.9.0","43","0.04071969538927078" 24 | "0.9.1","42","0.039772726595401764" 25 | "0.9.2","43","0.04071969538927078" 26 | -------------------------------------------------------------------------------- /data/downloads/2020-01-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","222","0.005645981524139643" 2 | "0.6.1","49","0.001246185158379376" 3 | "0.6.2","42","0.0010681586572900414" 4 | "0.7.0","277","0.007044760975986719" 5 | "0.8.0","42","0.0010681586572900414" 6 | "0.8.1","43","0.001093591097742319" 7 | "0.8.2","160","0.004069176036864519" 8 | "0.8.3","56","0.0014242115430533886" 9 | "0.8.4","66","0.0016785351326689124" 10 | "0.8.5","51","0.0012970498064532876" 11 | "0.8.6","898","0.022838249802589417" 12 | "0.8.7","614","0.015615463256835938" 13 | "0.9.0","482","0.012258392758667469" 14 | "0.9.1","49","0.001246185158379376" 15 | "0.9.2","597","0.01518311258405447" 16 | "0.9.3","1472","0.03743641823530197" 17 | "0.9.4","2007","0.05104272812604904" 18 | "0.9.5","2376","0.060427263379096985" 19 | "0.9.6","47","0.0011953203938901424" 20 | "0.9.7","55","0.0013987792190164328" 21 | "0.9.8","9376","0.2384537160396576" 22 | "0.9.9","5225","0.13288402557373047" 23 | "0.9.10","14399","0.36620041728019714" 24 | "0.9.12","715","0.018184131011366844" 25 | -------------------------------------------------------------------------------- /data/downloads/2020-01-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","57","0.008258475922048092" 2 | "0.9.9","141","0.020428860560059547" 3 | "0.9.10","6047","0.8761228919029236" 4 | "0.9.12","657","0.09518980234861374" 5 | -------------------------------------------------------------------------------- /data/downloads/2020-02-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","8","0.03238866478204727" 2 | "0.3.1","5","0.02024291455745697" 3 | "0.3.2","8","0.03238866478204727" 4 | "0.3.3","10","0.04048582911491394" 5 | "0.3.4","13","0.05263157933950424" 6 | "0.3.5","11","0.044534411281347275" 7 | "0.3.6","12","0.04858299717307091" 8 | "0.3.7","13","0.05263157933950424" 9 | "0.4.0","11","0.044534411281347275" 10 | "0.5.0","13","0.05263157933950424" 11 | "0.6.0","14","0.056680161505937576" 12 | "0.6.1","11","0.044534411281347275" 13 | "0.6.2","11","0.044534411281347275" 14 | "0.7.0","8","0.03238866478204727" 15 | "0.8.0","11","0.044534411281347275" 16 | "0.8.1","14","0.056680161505937576" 17 | "0.8.2","11","0.044534411281347275" 18 | "0.8.3","7","0.028340080752968788" 19 | "0.8.4","7","0.028340080752968788" 20 | "0.8.5","9","0.036437246948480606" 21 | "0.8.6","11","0.044534411281347275" 22 | "0.8.7","11","0.044534411281347275" 23 | "0.9.0","4","0.016194332391023636" 24 | "0.9.1","6","0.024291498586535454" 25 | "0.9.2","8","0.03238866478204727" 26 | -------------------------------------------------------------------------------- /data/downloads/2020-02-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","224","0.005955071188509464" 2 | "0.6.1","11","2.924365398939699E-4" 3 | "0.6.2","7","1.8609597464092076E-4" 4 | "0.7.0","11","2.924365398939699E-4" 5 | "0.8.0","16","4.253622319083661E-4" 6 | "0.8.1","14","3.721919492818415E-4" 7 | "0.8.2","126","0.0033497274853289127" 8 | "0.8.3","13","3.45606793416664E-4" 9 | "0.8.4","93","0.0024724178947508335" 10 | "0.8.5","43","0.0011431609746068716" 11 | "0.8.6","1102","0.02929682284593582" 12 | "0.8.7","558","0.014834507368505001" 13 | "0.9.0","532","0.014143293723464012" 14 | "0.9.1","12","3.1902166665531695E-4" 15 | "0.9.2","670","0.01781204342842102" 16 | "0.9.3","1687","0.044849127531051636" 17 | "0.9.4","2079","0.05527050420641899" 18 | "0.9.5","1142","0.030360229313373566" 19 | "0.9.6","4","1.0634055797709152E-4" 20 | "0.9.7","8","2.1268111595418304E-4" 21 | "0.9.8","7586","0.20167486369609833" 22 | "0.9.9","3574","0.09501528739929199" 23 | "0.9.10","11802","0.3137578070163727" 24 | "0.9.12","6301","0.1675129532814026" 25 | -------------------------------------------------------------------------------- /data/downloads/2020-02-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","17","0.0017419817158952355" 2 | "0.9.9","395","0.04047545790672302" 3 | "0.9.10","4417","0.4526078402996063" 4 | "0.9.12","4930","0.5051746964454651" 5 | -------------------------------------------------------------------------------- /data/downloads/2020-03-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","6","0.0324324332177639" 2 | "0.3.1","6","0.0324324332177639" 3 | "0.3.2","7","0.037837836891412735" 4 | "0.3.3","5","0.027027027681469917" 5 | "0.3.4","5","0.027027027681469917" 6 | "0.3.5","7","0.037837836891412735" 7 | "0.3.6","6","0.0324324332177639" 8 | "0.3.7","6","0.0324324332177639" 9 | "0.4.0","6","0.0324324332177639" 10 | "0.5.0","9","0.0486486479640007" 11 | "0.6.0","11","0.05945945903658867" 12 | "0.6.1","7","0.037837836891412735" 13 | "0.6.2","6","0.0324324332177639" 14 | "0.7.0","5","0.027027027681469917" 15 | "0.8.0","6","0.0324324332177639" 16 | "0.8.1","7","0.037837836891412735" 17 | "0.8.2","10","0.054054055362939835" 18 | "0.8.3","8","0.04324324429035187" 19 | "0.8.4","10","0.054054055362939835" 20 | "0.8.5","7","0.037837836891412735" 21 | "0.8.6","13","0.07027027010917664" 22 | "0.8.7","9","0.0486486479640007" 23 | "0.9.0","9","0.0486486479640007" 24 | "0.9.1","6","0.0324324332177639" 25 | "0.9.2","8","0.04324324429035187" 26 | -------------------------------------------------------------------------------- /data/downloads/2020-03-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","281","0.005856607109308243" 2 | "0.6.1","10","2.0842016965616494E-4" 3 | "0.6.2","5","1.0421008482808247E-4" 4 | "0.7.0","6","1.2505210179369897E-4" 5 | "0.8.0","17","3.5431431024335325E-4" 6 | "0.8.1","9","1.8757815996650606E-4" 7 | "0.8.2","414","0.008628595620393753" 8 | "0.8.3","21","4.376823781058192E-4" 9 | "0.8.4","42","8.753647562116385E-4" 10 | "0.8.5","71","0.0014797832118347287" 11 | "0.8.6","1168","0.024343475699424744" 12 | "0.8.7","651","0.013568153604865074" 13 | "0.9.0","1115","0.02323884889483452" 14 | "0.9.1","30","6.252605235204101E-4" 15 | "0.9.2","620","0.012922050431370735" 16 | "0.9.3","1307","0.027240516617894173" 17 | "0.9.4","2283","0.04758232459425926" 18 | "0.9.5","2520","0.05252188444137573" 19 | "0.9.6","20","4.168403393123299E-4" 20 | "0.9.7","17","3.5431431024335325E-4" 21 | "0.9.8","5963","0.12428095191717148" 22 | "0.9.9","3677","0.07663609832525253" 23 | "0.9.10","17443","0.36354732513427734" 24 | "0.9.12","5316","0.11079616844654083" 25 | "0.9.13","4974","0.1036681979894638" 26 | -------------------------------------------------------------------------------- /data/downloads/2020-03-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","38","0.0025679145473986864" 2 | "0.9.9","338","0.022840924561023712" 3 | "0.9.10","4748","0.32085415720939636" 4 | "0.9.12","4675","0.3159210681915283" 5 | "0.9.13","4999","0.33781591057777405" 6 | -------------------------------------------------------------------------------- /data/downloads/2020-04-refined_2.10.csv: -------------------------------------------------------------------------------- 1 | "0.3.0","5","0.038167938590049744" 2 | "0.3.1","4","0.030534351244568825" 3 | "0.3.2","7","0.05343511328101158" 4 | "0.3.3","5","0.038167938590049744" 5 | "0.3.4","5","0.038167938590049744" 6 | "0.3.5","7","0.05343511328101158" 7 | "0.3.6","7","0.05343511328101158" 8 | "0.3.7","8","0.06106870248913765" 9 | "0.4.0","4","0.030534351244568825" 10 | "0.5.0","4","0.030534351244568825" 11 | "0.6.0","5","0.038167938590049744" 12 | "0.6.1","5","0.038167938590049744" 13 | "0.6.2","4","0.030534351244568825" 14 | "0.7.0","5","0.038167938590049744" 15 | "0.8.0","5","0.038167938590049744" 16 | "0.8.1","7","0.05343511328101158" 17 | "0.8.2","5","0.038167938590049744" 18 | "0.8.3","5","0.038167938590049744" 19 | "0.8.4","5","0.038167938590049744" 20 | "0.8.5","4","0.030534351244568825" 21 | "0.8.6","5","0.038167938590049744" 22 | "0.8.7","6","0.04580152779817581" 23 | "0.9.0","5","0.038167938590049744" 24 | "0.9.1","3","0.022900763899087906" 25 | "0.9.2","6","0.04580152779817581" 26 | -------------------------------------------------------------------------------- /data/downloads/2020-04-refined_2.12.csv: -------------------------------------------------------------------------------- 1 | "0.6.0","171","0.0033475589007139206" 2 | "0.6.1","12","2.3491641331929713E-4" 3 | "0.6.2","5","9.788183524506167E-5" 4 | "0.7.0","6","1.1745820665964857E-4" 5 | "0.8.0","13","2.544927701819688E-4" 6 | "0.8.1","9","1.7618731362745166E-4" 7 | "0.8.2","409","0.00800673384219408" 8 | "0.8.3","20","3.9152734098024666E-4" 9 | "0.8.4","30","5.872910260222852E-4" 10 | "0.8.5","61","0.0011941584525629878" 11 | "0.8.6","1131","0.022140871733427048" 12 | "0.8.7","605","0.01184370182454586" 13 | "0.9.0","733","0.014349477365612984" 14 | "0.9.1","68","0.0013311930233612657" 15 | "0.9.2","886","0.017344661056995392" 16 | "0.9.3","766","0.014995497651398182" 17 | "0.9.4","1952","0.03821307048201561" 18 | "0.9.5","2141","0.041913002729415894" 19 | "0.9.6","11","2.1534004190471023E-4" 20 | "0.9.7","25","4.894091980531812E-4" 21 | "0.9.8","7549","0.14778199791908264" 22 | "0.9.9","4240","0.08300379663705826" 23 | "0.9.10","17932","0.3510434329509735" 24 | "0.9.12","3743","0.07327434420585632" 25 | "0.9.13","7430","0.14545240998268127" 26 | "0.9.14","1134","0.0221996009349823" 27 | -------------------------------------------------------------------------------- /data/downloads/2020-04-refined_2.13.csv: -------------------------------------------------------------------------------- 1 | "0.9.8","18","8.575512329116464E-4" 2 | "0.9.9","433","0.020628871396183968" 3 | "0.9.10","6061","0.2887565493583679" 4 | "0.9.12","3393","0.16164840757846832" 5 | "0.9.13","8792","0.4188661277294159" 6 | "0.9.14","2293","0.1092424988746643" 7 | -------------------------------------------------------------------------------- /latestVersion.sbt: -------------------------------------------------------------------------------- 1 | ThisBuild / latestVersion := "0.11.3" 2 | 3 | ThisBuild / bincompatVersions := Map( 4 | "2.12" -> Set( 5 | "0.11.0", 6 | "0.11.1", 7 | "0.11.2", 8 | "0.11.3" 9 | // NEXT_VERSION 10 | ), 11 | "2.13" -> Set( 12 | "0.11.0", 13 | "0.11.1", 14 | "0.11.2", 15 | "0.11.3" 16 | // NEXT_VERSION 17 | ), 18 | "3" -> Set( 19 | "0.11.0", 20 | "0.11.1", 21 | "0.11.2", 22 | "0.11.3" 23 | // NEXT_VERSION 24 | ) 25 | ) 26 | 27 | ThisBuild / unreleasedModules := Set( 28 | // Example: 29 | // "refined-eval" 30 | ) 31 | -------------------------------------------------------------------------------- /modules/benchmark/src/main/scala/eu/timepit/refined/benchmark/InferMacroBenchmark.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.benchmark 2 | 3 | import org.openjdk.jmh.annotations._ 4 | import scala.reflect.runtime.currentMirror 5 | import scala.tools.reflect.ToolBox 6 | 7 | @BenchmarkMode(Array(Mode.AverageTime)) 8 | @State(Scope.Thread) 9 | class InferMacroBenchmark { 10 | private val toolBox = 11 | currentMirror.mkToolBox() 12 | 13 | private val autoInfer_Greater_tree = 14 | toolBox.parse(""" 15 | import eu.timepit.refined.W 16 | import eu.timepit.refined.api.Refined 17 | import eu.timepit.refined.auto.autoInfer 18 | import eu.timepit.refined.numeric.Greater 19 | val a: Int Refined Greater[W.`5`.T] = Refined.unsafeApply(10) 20 | val b: Int Refined Greater[W.`0`.T] = a 21 | """) 22 | 23 | @Benchmark 24 | def autoInfer_Greater: Any = 25 | toolBox.eval(autoInfer_Greater_tree) 26 | } 27 | -------------------------------------------------------------------------------- /modules/benchmark/src/main/scala/eu/timepit/refined/benchmark/PosIntBenchmark.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.benchmark 2 | 3 | import eu.timepit.refined.types.numeric.PosInt 4 | import java.util.concurrent.TimeUnit 5 | import org.openjdk.jmh.annotations.{Benchmark, BenchmarkMode, Mode, OutputTimeUnit} 6 | 7 | @BenchmarkMode(Array(Mode.AverageTime)) 8 | class PosIntBenchmark { 9 | 10 | @Benchmark 11 | @OutputTimeUnit(TimeUnit.NANOSECONDS) 12 | def unsafeFrom_1: Any = 13 | PosInt.unsafeFrom(1) 14 | } 15 | -------------------------------------------------------------------------------- /modules/benchmark/src/main/scala/eu/timepit/refined/benchmark/RefineMacroBenchmark.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.benchmark 2 | 3 | import org.openjdk.jmh.annotations._ 4 | import scala.reflect.runtime.currentMirror 5 | import scala.tools.reflect.ToolBox 6 | 7 | @BenchmarkMode(Array(Mode.AverageTime)) 8 | @State(Scope.Thread) 9 | class RefineMacroBenchmark { 10 | private val toolBox = 11 | currentMirror.mkToolBox() 12 | 13 | private val autoRefineV_PosInt_tree = 14 | toolBox.parse(""" 15 | import eu.timepit.refined.auto.autoRefineV 16 | import eu.timepit.refined.types.numeric.PosInt 17 | val x: PosInt = 1 18 | """) 19 | 20 | @Benchmark 21 | def autoRefineV_PosInt: Any = 22 | toolBox.eval(autoRefineV_PosInt_tree) 23 | } 24 | -------------------------------------------------------------------------------- /modules/benchmark/src/main/scala/eu/timepit/refined/benchmark/RefineVBenchmark.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.benchmark 2 | 3 | import eu.timepit.refined.api.Refined 4 | import eu.timepit.refined.numeric.Positive 5 | import eu.timepit.refined.refineV 6 | import eu.timepit.refined.string.Regex 7 | import java.util.concurrent.TimeUnit 8 | import org.openjdk.jmh.annotations.{Benchmark, BenchmarkMode, Mode, OutputTimeUnit} 9 | 10 | @BenchmarkMode(Array(Mode.AverageTime)) 11 | class RefineVBenchmark { 12 | 13 | @Benchmark 14 | @OutputTimeUnit(TimeUnit.NANOSECONDS) 15 | def refineV_Positive: Either[String, Int Refined Positive] = 16 | refineV[Positive](1) 17 | 18 | @Benchmark 19 | @OutputTimeUnit(TimeUnit.NANOSECONDS) 20 | def refineV_Regex: Either[String, String Refined Regex] = 21 | refineV[Regex](".*") 22 | } 23 | -------------------------------------------------------------------------------- /modules/cats/shared/src/main/scala/eu/timepit/refined/cats/derivation.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.cats 2 | 3 | import cats.{Contravariant, MonadError} 4 | import eu.timepit.refined.api.{RefType, Validate} 5 | 6 | object derivation extends DerivationInstances 7 | 8 | trait DerivationInstances { 9 | 10 | /** 11 | * `G` instance for refined types derived via `Contravariant[G]` 12 | * that delegates to the `G` instance of the base type. 13 | * 14 | * Typical examples for `G` are encoders. 15 | */ 16 | implicit def refTypeViaContravariant[F[_, _], G[_], T, P](implicit 17 | c: Contravariant[G], 18 | rt: RefType[F], 19 | gt: G[T] 20 | ): G[F[T, P]] = c.contramap(gt)(rt.unwrap) 21 | 22 | /** 23 | * `G` instance for refined types derived via `MonadError[G, String]` 24 | * that is based on the `G` instance of the base type. 25 | * 26 | * Typical examples for `G` are decoders. 27 | */ 28 | implicit def refTypeViaMonadError[F[_, _], G[_], T, P](implicit 29 | m: MonadError[G, String], 30 | rt: RefType[F], 31 | v: Validate[T, P], 32 | gt: G[T] 33 | ): G[F[T, P]] = 34 | m.flatMap(gt)(t => m.fromEither(rt.refine[P](t))) 35 | 36 | } 37 | -------------------------------------------------------------------------------- /modules/cats/shared/src/main/scala/eu/timepit/refined/cats/syntax.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.cats 2 | 3 | import cats.data.{NonEmptyList, NonEmptyVector, ValidatedNec, ValidatedNel} 4 | import cats.syntax.either._ 5 | import eu.timepit.refined.api.RefinedTypeOps 6 | import eu.timepit.refined.types.numeric.PosInt 7 | 8 | object syntax 9 | extends CatsRefinedTypeOpsSyntax 10 | with CatsNonEmptyListSyntax 11 | with CatsNonEmptyVectorSyntax 12 | 13 | trait CatsRefinedTypeOpsSyntax { 14 | implicit class CatsRefinedTypeOps[FTP, T](rtOps: RefinedTypeOps[FTP, T]) { 15 | def validate(t: T): ValidatedNel[String, FTP] = 16 | validateNel(t) 17 | 18 | def validateNec(t: T): ValidatedNec[String, FTP] = 19 | rtOps.from(t).toValidatedNec 20 | 21 | def validateNel(t: T): ValidatedNel[String, FTP] = 22 | rtOps.from(t).toValidatedNel 23 | } 24 | } 25 | 26 | trait CatsNonEmptyListSyntax { 27 | implicit class CatsNonEmptyListRefinedOps[A](nel: NonEmptyList[A]) { 28 | def refinedSize: PosInt = PosInt.unsafeFrom(nel.size) 29 | 30 | def take(n: PosInt): NonEmptyList[A] = 31 | NonEmptyList(nel.head, nel.tail.take(n.value - 1)) 32 | } 33 | } 34 | 35 | trait CatsNonEmptyVectorSyntax { 36 | implicit class CatsNonEmptyVectorRefinedOps[A](nev: NonEmptyVector[A]) { 37 | def take(n: PosInt): NonEmptyVector[A] = 38 | NonEmptyVector.fromVectorUnsafe(nev.toVector.take(n.value)) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /modules/cats/shared/src/main/scala/eu/timepit/refined/cats/unorderedFoldable.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.cats 2 | 3 | import cats.UnorderedFoldable 4 | import cats.syntax.unorderedFoldable._ 5 | import eu.timepit.refined.api.Validate 6 | import eu.timepit.refined.collection.Size 7 | import eu.timepit.refined.internal.Resources 8 | 9 | /** Module for unorderedFoldable instances. */ 10 | object unorderedFoldable extends UnorderedFoldableInstances 11 | 12 | trait UnorderedFoldableInstances { 13 | 14 | /** 15 | * `Validate` instance for `F` via `UnorderedFoldable[F]`. 16 | * 17 | * Examples: NonEmptyList, NonEmptyVector. 18 | */ 19 | implicit def sizeValidateInstance[F[_]: UnorderedFoldable, T, P, RP](implicit 20 | v: Validate.Aux[Long, P, RP] 21 | ): Validate.Aux[F[T], Size[P], Size[v.Res]] = 22 | new Validate[F[T], Size[P]] { 23 | override type R = Size[v.Res] 24 | 25 | override def validate(t: F[T]): Res = { 26 | val r = v.validate(t.size) 27 | r.as(Size(r)) 28 | } 29 | 30 | override def showExpr(t: F[T]): String = 31 | v.showExpr(t.size) 32 | 33 | override def showResult(t: F[T], r: Res): String = { 34 | val size = t.size 35 | val nested = v.showResult(size, r.detail.p) 36 | Resources.predicateTakingResultDetail(s"size($t) = $size", r, nested) 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /modules/cats/shared/src/test/scala-3.0+/eu/timepit/refined/cats/UnorderedFoldableSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.cats 2 | 3 | import cats.data.NonEmptyList 4 | import eu.timepit.refined.api.Validate 5 | import eu.timepit.refined.collection.MinSize 6 | import eu.timepit.refined.refineV 7 | import org.scalacheck.Prop.{AnyOperators, secure} 8 | import org.scalacheck.Properties 9 | 10 | class UnorderedFoldableSpec extends Properties("unorderedFoldable") { 11 | 12 | property("Size validate for NonEmptyList") = secure { 13 | import eu.timepit.refined.cats.unorderedFoldable.sizeValidateInstance 14 | val nel = NonEmptyList.of(1, 2) 15 | refineV[MinSize[2]](nel) ?= Right(refineV[MinSize[2]].unsafeFrom(nel)) 16 | } 17 | 18 | property("Failing Size validate for NonEmptyList") = secure { 19 | import eu.timepit.refined.cats.unorderedFoldable.sizeValidateInstance 20 | val nel = NonEmptyList.of(1, 2) 21 | refineV[MinSize[3]](nel) ?= Left( 22 | "Predicate taking size(NonEmptyList(1, 2)) = 2 failed: Predicate (2 < 3) did not fail." 23 | ) 24 | } 25 | 26 | property("showExpr for NonEmptyList") = secure { 27 | import eu.timepit.refined.cats.unorderedFoldable.sizeValidateInstance 28 | val nel = NonEmptyList.of(1, 2) 29 | Validate[NonEmptyList[Int], MinSize[3]].showExpr(nel) ?= "!(2 < 3)" 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /modules/cats/shared/src/test/scala-3.0-/eu/timepit/refined/cats/UnorderedFoldableSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.cats 2 | 3 | import cats.data.NonEmptyList 4 | import eu.timepit.refined.api.Validate 5 | import eu.timepit.refined.collection.MinSize 6 | import eu.timepit.refined.{W, refineV} 7 | import org.scalacheck.Prop.{AnyOperators, secure} 8 | import org.scalacheck.Properties 9 | 10 | class UnorderedFoldableSpec extends Properties("unorderedFoldable") { 11 | 12 | property("Size validate for NonEmptyList") = secure { 13 | import eu.timepit.refined.cats.unorderedFoldable.sizeValidateInstance 14 | val nel = NonEmptyList.of(1, 2) 15 | refineV[MinSize[W.`2`.T]](nel) ?= Right(refineV[MinSize[W.`2`.T]].unsafeFrom(nel)) 16 | } 17 | 18 | property("Failing Size validate for NonEmptyList") = secure { 19 | import eu.timepit.refined.cats.unorderedFoldable.sizeValidateInstance 20 | val nel = NonEmptyList.of(1, 2) 21 | refineV[MinSize[W.`3`.T]](nel) ?= Left( 22 | "Predicate taking size(NonEmptyList(1, 2)) = 2 failed: Predicate (2 < 3) did not fail." 23 | ) 24 | } 25 | 26 | property("showExpr for NonEmptyList") = secure { 27 | import eu.timepit.refined.cats.unorderedFoldable.sizeValidateInstance 28 | val nel = NonEmptyList.of(1, 2) 29 | Validate[NonEmptyList[Int], MinSize[W.`3`.T]].showExpr(nel) ?= "!(2 < 3)" 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /modules/cats/shared/src/test/scala/eu/timepit/refined/cats/CatsSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.cats 2 | 3 | import _root_.cats.implicits._ 4 | import eu.timepit.refined.types.numeric.PosInt 5 | import org.scalacheck.Prop._ 6 | import org.scalacheck.Properties 7 | 8 | class CatsSpec extends Properties("cats") { 9 | 10 | property("Eq") = secure { 11 | val refTypeOrder: Unit = () // shadow the `Order` instance so the `Eq` instance is tested 12 | locally(refTypeOrder) // prevent a "unused" warning 13 | 14 | PosInt.unsafeFrom(5) === PosInt.unsafeFrom(5) 15 | } 16 | 17 | property("Order") = secure { 18 | val x = PosInt.unsafeFrom(5) 19 | val y = PosInt.unsafeFrom(6) 20 | x min y ?= x 21 | } 22 | 23 | property("Show") = secure { 24 | PosInt.unsafeFrom(5).show ?= "5" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /modules/cats/shared/src/test/scala/eu/timepit/refined/cats/RefTypeContravariantSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.cats 2 | 3 | import _root_.cats.Contravariant 4 | import eu.timepit.refined.api.Refined 5 | import eu.timepit.refined.numeric.Positive 6 | import eu.timepit.refined.types.numeric.PosInt 7 | import org.scalacheck.Prop._ 8 | import org.scalacheck.Properties 9 | 10 | trait Encoder[A] { 11 | def encode(a: A): String 12 | } 13 | 14 | object Encoder { 15 | def apply[A](implicit e: Encoder[A]): Encoder[A] = e 16 | 17 | def instance[A](f: A => String): Encoder[A] = 18 | new Encoder[A] { 19 | override def encode(a: A): String = f(a) 20 | } 21 | 22 | implicit val encoderContravariant: Contravariant[Encoder] = 23 | new Contravariant[Encoder] { 24 | override def contramap[A, B](fa: Encoder[A])(f: B => A): Encoder[B] = 25 | instance(b => fa.encode(f(b))) 26 | } 27 | 28 | implicit val intEncoder: Encoder[Int] = 29 | instance(_.toString) 30 | } 31 | 32 | class RefTypeContravariantSpec extends Properties("Contravariant") { 33 | 34 | property("Encoder[Int]") = secure { 35 | Encoder[Int].encode(1) ?= "1" 36 | } 37 | 38 | property("derive Encoder[PosInt] via Contravariant[Encoder]") = secure { 39 | import eu.timepit.refined.cats.derivation._ 40 | 41 | val encoder: Encoder[PosInt] = refTypeViaContravariant[Refined, Encoder, Int, Positive] 42 | encoder.encode(PosInt.unsafeFrom(1)) ?= "1" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /modules/cats/shared/src/test/scala/eu/timepit/refined/cats/foo/ImportsSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.cats.foo 2 | 3 | import _root_.cats.implicits._ 4 | import eu.timepit.refined.cats._ 5 | import eu.timepit.refined.types.string.NonEmptyString 6 | import org.scalacheck.Prop._ 7 | import org.scalacheck.Properties 8 | 9 | class ImportsSpec extends Properties("imports") { 10 | 11 | property("NonEmptyString.show") = secure { 12 | NonEmptyString.unsafeFrom("abc").show ?= "abc" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /modules/core/jvm/src/test/scala/eu/timepit/refined/StringValidateSpecJvm.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import eu.timepit.refined.TestUtils._ 4 | import eu.timepit.refined.string._ 5 | import org.scalacheck.Prop._ 6 | import org.scalacheck.Properties 7 | 8 | class StringValidateSpecJvm extends Properties("StringValidate") { 9 | 10 | property("Regex.showResult") = secure { 11 | showResult[Regex]("(a|b").take(56) ?= 12 | """Regex predicate failed: Unclosed group near index 4 13 | |(a|b""".stripMargin 14 | } 15 | 16 | property("Url.isValid") = secure { 17 | isValid[Url]("http://example.com") 18 | } 19 | 20 | property("Url.showResult") = secure { 21 | showResult[Url]("htp://example.com") ?= "Url predicate failed: unknown protocol: htp" 22 | } 23 | 24 | property("XPath.isValid") = secure { 25 | isValid[XPath]("A//B/*[1]") 26 | } 27 | 28 | property("XPath.showResult") = secure { 29 | showResult[XPath]("A//B/*[1") ?= 30 | "XPath predicate failed: javax.xml.transform.TransformerException: Expected ], but found: " 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/api/Refined.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.api 2 | 3 | infix opaque type Refined[T, P] = T 4 | 5 | object Refined { 6 | 7 | def unsafeApply[T, P](t: T): Refined[T, P] = t 8 | 9 | def unapply[T, P](r: Refined[T, P]): Some[T] = Some(r) 10 | 11 | extension [T, P](r: Refined[T, P]) { 12 | def value: T = r 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/auto.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import eu.timepit.refined.api.RefType 4 | 5 | /** 6 | * Module that provides automatic refinements and automatic conversions 7 | * between refined types (refinement subtyping) at compile-time. 8 | */ 9 | object auto { 10 | 11 | /** 12 | * Implicitly unwraps the `T` from a value of type `F[T, P]` using the 13 | * `[[api.RefType]]` instance of `F`. This allows a `F[T, P]` to be 14 | * used as it were a subtype of `T`. 15 | * 16 | * Example: {{{ 17 | * scala> import eu.timepit.refined.auto.autoUnwrap 18 | * | import eu.timepit.refined.types.numeric.PosInt 19 | * 20 | * scala> def plusOne(i: Int): Int = i + 1 21 | * | val x = PosInt.unsafeFrom(42) 22 | * 23 | * // converts x implicitly to an Int: 24 | * scala> plusOne(x) 25 | * res0: Int = 43 26 | * }}} 27 | * 28 | * Note: This conversion is not needed if `F[T, _] <: T` holds (which 29 | * is the case for `shapeless.tag.@@`, for example). 30 | */ 31 | implicit def autoUnwrap[F[_, _], T, P](tp: F[T, P])(implicit rt: RefType[F]): T = 32 | rt.unwrap(tp) 33 | } 34 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/internal/ToInt.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.internal 2 | 3 | import scala.compiletime.erasedValue 4 | import scala.compiletime.ops.int.S 5 | 6 | trait ToInt[N <: Int] { 7 | def apply(): Int 8 | } 9 | 10 | object ToInt { 11 | def apply[N <: Int](implicit toInt: ToInt[N]): ToInt[N] = toInt 12 | 13 | inline implicit def materialize[N <: Int]: ToInt[N] = 14 | () => toInt[N] 15 | 16 | private inline def toInt[N <: Int]: Int = 17 | inline erasedValue[N] match { 18 | case _: 0 => 0 19 | case _: S[n] => toInt[n] + 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/package.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit 2 | 3 | import eu.timepit.refined.api.{Refined, RefType} 4 | import eu.timepit.refined.internal._ 5 | 6 | package object refined { 7 | 8 | /** 9 | * Alias for `[[api.RefType.refine]][P]` with `[[api.Refined]]` as type 10 | * parameter for `[[api.RefType]]`. 11 | * 12 | * Note: `V` stands for '''v'''alue class. 13 | */ 14 | def refineV[P]: RefinePartiallyApplied[Refined, P] = RefType.refinedRefType.refine[P] 15 | } 16 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/api/Refined.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.api 2 | 3 | /** 4 | * Wraps a value of type `T` that satisfies the predicate `P`. Instances of 5 | * this class can be created with `[[refineV]]` and `[[refineMV]]` which 6 | * verify that the wrapped value satisfies `P`. 7 | */ 8 | final class Refined[T, P] private (val value: T) extends AnyVal with Serializable { 9 | 10 | override def toString: String = 11 | value.toString 12 | } 13 | 14 | object Refined { 15 | 16 | /** 17 | * Wraps `t` in `[[Refined]][T, P]` ''without'' verifying that it satisfies 18 | * the predicate `P`. This method is for internal use only. 19 | */ 20 | def unsafeApply[T, P](t: T): Refined[T, P] = 21 | new Refined(t) 22 | 23 | def unapply[T, P](r: Refined[T, P]): Some[T] = 24 | Some(r.value) 25 | } 26 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/internal/ApplyRefMPartiallyApplied.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.internal 2 | 3 | import eu.timepit.refined.api.{RefType, Validate} 4 | import eu.timepit.refined.macros.RefineMacro 5 | 6 | /** 7 | * Helper class that allows the types `F`, `T`, and `P` to be inferred 8 | * from calls like `[[api.RefType.applyRefM]][F[T, P]](t)`. 9 | * 10 | * See [[http://tpolecat.github.io/2015/07/30/infer.html]] for a detailed 11 | * explanation of this trick. 12 | */ 13 | final class ApplyRefMPartiallyApplied[FTP] { 14 | 15 | def apply[F[_, _], T, P](t: T)(implicit 16 | ev: F[T, P] =:= FTP, 17 | rt: RefType[F], 18 | v: Validate[T, P] 19 | ): FTP = macro RefineMacro.implApplyRef[FTP, F, T, P] 20 | } 21 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/internal/RefineMFullyApplied.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.internal 2 | 3 | import eu.timepit.refined.api.{RefType, Validate} 4 | import eu.timepit.refined.macros.RefineMacro 5 | 6 | @deprecated( 7 | "RefineMFullyApplied has been replaced in favor or RefinedTypeOps. " + 8 | "Replace 'new RefineMFullyApplied[F, T, P]' with 'new RefinedTypeOps[F[T, P], T]'.", 9 | "0.9.1" 10 | ) 11 | final class RefineMFullyApplied[F[_, _], T, P] { 12 | 13 | def apply(t: T)(implicit rt: RefType[F], v: Validate[T, P]): F[T, P] = 14 | macro RefineMacro.impl[F, T, P] 15 | } 16 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/internal/RefineMPartiallyApplied.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.internal 2 | 3 | import eu.timepit.refined.api.{RefType, Validate} 4 | import eu.timepit.refined.macros.RefineMacro 5 | 6 | /** 7 | * Helper class that allows the type `T` to be inferred from calls like 8 | * `[[api.RefType.refineM]][P](t)`. 9 | * 10 | * See [[http://tpolecat.github.io/2015/07/30/infer.html]] for a detailed 11 | * explanation of this trick. 12 | */ 13 | final class RefineMPartiallyApplied[F[_, _], P] { 14 | 15 | def apply[T](t: T)(implicit rt: RefType[F], v: Validate[T, P]): F[T, P] = 16 | macro RefineMacro.impl[F, T, P] 17 | } 18 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/macros/InferMacro.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.macros 2 | 3 | import eu.timepit.refined.api.Inference.==> 4 | import eu.timepit.refined.api.RefType 5 | import eu.timepit.refined.internal.Resources 6 | import scala.reflect.macros.blackbox 7 | 8 | class InferMacro(val c: blackbox.Context) extends MacroUtils { 9 | import c.universe._ 10 | 11 | def impl[F[_, _], T: c.WeakTypeTag, A: c.WeakTypeTag, B: c.WeakTypeTag](ta: c.Expr[F[T, A]])( 12 | rt: c.Expr[RefType[F]], 13 | ir: c.Expr[A ==> B] 14 | ): c.Expr[F[T, B]] = { 15 | 16 | val inference = eval(ir) 17 | if (inference.notValid) 18 | abort(Resources.invalidInference(weakTypeOf[A].toString, weakTypeOf[B].toString)) 19 | 20 | c.universe.reify(rt.splice.unsafeRewrap[T, A, B](ta.splice)) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/macros/MacroUtils.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.macros 2 | 3 | import eu.timepit.refined.api.{Refined, RefType} 4 | import scala.reflect.macros.blackbox 5 | import scala.util.{Success, Try} 6 | import shapeless.tag.@@ 7 | 8 | trait MacroUtils { 9 | val c: blackbox.Context 10 | import c.universe.weakTypeOf 11 | 12 | def abort(msg: String): Nothing = 13 | c.abort(c.enclosingPosition, msg) 14 | 15 | def eval[T](t: c.Expr[T]): T = { 16 | // Duplicate and untypecheck before calling `eval`, see: 17 | // http://www.scala-lang.org/api/2.12.0/scala-reflect/scala/reflect/macros/Evals.html#eval[T]%28expr:Evals.this.Expr[T]%29:T 18 | val expr = c.Expr[T](c.untypecheck(t.tree.duplicate)) 19 | 20 | // Try evaluating expr twice before failing, see 21 | // https://github.com/fthomas/refined/issues/3 22 | tryN(2, c.eval(expr)) 23 | } 24 | 25 | def tryN[T](n: Int, t: => T): T = 26 | Iterator.fill(n)(Try(t)).collectFirst { case Success(r) => r }.getOrElse(t) 27 | 28 | @deprecated("refTypeInstance is deprecated without replacement", "0.9.16") 29 | protected def refTypeInstance[F[_, _]](rt: c.Expr[RefType[F]]): RefType[F] = 30 | if (rt.tree.tpe =:= weakTypeOf[RefType[Refined]]) 31 | RefType.refinedRefType.asInstanceOf[RefType[F]] 32 | else if (rt.tree.tpe =:= weakTypeOf[RefType[@@]]) 33 | RefType.tagRefType.asInstanceOf[RefType[F]] 34 | else 35 | eval(rt) 36 | } 37 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/api/Inference.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.api 2 | 3 | /** 4 | * Evidence that states if the conclusion `C` can be inferred from the 5 | * premise `P` or not. 6 | * 7 | * This type class is used to implement refinement subtyping. If a valid 8 | * `Inference[P, C]` exists, the type `F[T, P]` is considered a subtype 9 | * of `F[T, C]`. 10 | */ 11 | case class Inference[P, C](isValid: Boolean, show: String) { 12 | 13 | final def adapt[P2, C2](adaptedShow: String): Inference[P2, C2] = 14 | copy(show = adaptedShow.format(show)) 15 | 16 | final def notValid: Boolean = 17 | !isValid 18 | } 19 | 20 | object Inference { 21 | 22 | type ==>[P, C] = Inference[P, C] 23 | 24 | def apply[P, C](implicit i: Inference[P, C]): Inference[P, C] = i 25 | 26 | def alwaysValid[P, C](show: String): Inference[P, C] = 27 | Inference(isValid = true, show) 28 | 29 | def combine[P1, P2, P, C1, C2, C]( 30 | i1: Inference[P1, C1], 31 | i2: Inference[P2, C2], 32 | show: String 33 | ): Inference[P, C] = 34 | Inference(i1.isValid && i2.isValid, show.format(i1.show, i2.show)) 35 | } 36 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/api/Result.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.api 2 | 3 | sealed abstract class Result[A] extends Product with Serializable { 4 | 5 | def detail: A 6 | 7 | def as[B](b: B): Result[B] = 8 | map(_ => b) 9 | 10 | def fold[B](ifPassed: A => B, ifFailed: A => B): B = 11 | this match { 12 | case Passed(d) => ifPassed(d) 13 | case Failed(d) => ifFailed(d) 14 | } 15 | 16 | def isPassed: Boolean = 17 | this match { 18 | case Passed(_) => true 19 | case Failed(_) => false 20 | } 21 | 22 | def isFailed: Boolean = 23 | this match { 24 | case Passed(_) => false 25 | case Failed(_) => true 26 | } 27 | 28 | def map[B](f: A => B): Result[B] = 29 | fold(a => Passed(f(a)), a => Failed(f(a))) 30 | 31 | def morph[B](ifPassed: B, ifFailed: B): B = 32 | fold(_ => ifPassed, _ => ifFailed) 33 | } 34 | 35 | final case class Passed[A](detail: A) extends Result[A] 36 | final case class Failed[A](detail: A) extends Result[A] 37 | 38 | object Result { 39 | 40 | def fromBoolean[A](b: Boolean, detail: A): Result[A] = 41 | if (b) Passed(detail) else Failed(detail) 42 | } 43 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/internal/ApplyRefPartiallyApplied.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.internal 2 | 3 | import eu.timepit.refined.api.{RefType, Validate} 4 | 5 | /** 6 | * Helper class that allows the types `F`, `T`, and `P` to be inferred 7 | * from calls like `[[api.RefType.applyRef]][F[T, P]](t)`. 8 | * 9 | * See [[http://tpolecat.github.io/2015/07/30/infer.html]] for a detailed 10 | * explanation of this trick. 11 | */ 12 | final class ApplyRefPartiallyApplied[FTP] { 13 | 14 | def apply[F[_, _], T, P](t: T)(implicit 15 | ev: F[T, P] =:= FTP, 16 | rt: RefType[F], 17 | v: Validate[T, P] 18 | ): Either[String, FTP] = 19 | rt.refine[P](t).map(ev) 20 | 21 | def unsafeFrom[F[_, _], T, P](t: T)(implicit 22 | ev: F[T, P] =:= FTP, 23 | rt: RefType[F], 24 | v: Validate[T, P] 25 | ): FTP = 26 | ev(rt.refine[P].unsafeFrom(t)) 27 | } 28 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/internal/RefinePartiallyApplied.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.internal 2 | 3 | import eu.timepit.refined.api.{RefType, Validate} 4 | 5 | /** 6 | * Helper class that allows the type `T` to be inferred from calls like 7 | * `[[api.RefType.refine]][P](t)`. 8 | * 9 | * See [[http://tpolecat.github.io/2015/07/30/infer.html]] for a detailed 10 | * explanation of this trick. 11 | */ 12 | final class RefinePartiallyApplied[F[_, _], P](rt: RefType[F]) { 13 | 14 | def apply[T](t: T)(implicit v: Validate[T, P]): Either[String, F[T, P]] = { 15 | val res = v.validate(t) 16 | if (res.isPassed) Right(rt.unsafeWrap(t)) 17 | else Left(v.showResult(t, res)) 18 | } 19 | 20 | def unsafeFrom[T](t: T)(implicit v: Validate[T, P]): F[T, P] = 21 | apply(t).fold(err => throw new IllegalArgumentException(err), identity) 22 | } 23 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/predicates/all.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.predicates 2 | 3 | object all extends AllPredicates with AllPredicatesBinCompat1 with AllPredicatesBinCompat2 4 | 5 | trait AllPredicates 6 | extends BooleanPredicates 7 | with CharPredicates 8 | with CollectionPredicates 9 | with GenericPredicates 10 | with NumericPredicates 11 | with StringPredicates 12 | 13 | trait AllPredicatesBinCompat1 extends StringPredicatesBinCompat1 14 | 15 | trait AllPredicatesBinCompat2 extends NumericPredicatesBinCompat1 16 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/predicates/boolean.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.predicates 2 | 3 | import eu.timepit.refined 4 | 5 | object boolean extends BooleanPredicates 6 | 7 | trait BooleanPredicates { 8 | final type True = refined.boolean.True 9 | final val True = refined.boolean.True 10 | 11 | final type False = refined.boolean.False 12 | final val False = refined.boolean.False 13 | 14 | final type Not[P] = refined.boolean.Not[P] 15 | final val Not = refined.boolean.Not 16 | 17 | final type And[A, B] = refined.boolean.And[A, B] 18 | final val And = refined.boolean.And 19 | 20 | final type Or[A, B] = refined.boolean.Or[A, B] 21 | final val Or = refined.boolean.Or 22 | 23 | final type Xor[A, B] = refined.boolean.Xor[A, B] 24 | final val Xor = refined.boolean.Xor 25 | 26 | final type AllOf[PS] = refined.boolean.AllOf[PS] 27 | final val AllOf = refined.boolean.AllOf 28 | 29 | final type AnyOf[PS] = refined.boolean.AnyOf[PS] 30 | final val AnyOf = refined.boolean.AnyOf 31 | 32 | final type OneOf[PS] = refined.boolean.OneOf[PS] 33 | final val OneOf = refined.boolean.OneOf 34 | 35 | final type Nand[A, B] = refined.boolean.Nand[A, B] 36 | 37 | final type Nor[A, B] = refined.boolean.Nor[A, B] 38 | } 39 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/predicates/char.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.predicates 2 | 3 | import eu.timepit.refined 4 | 5 | object char extends CharPredicates 6 | 7 | trait CharPredicates { 8 | final type Digit = refined.char.Digit 9 | final val Digit = refined.char.Digit 10 | 11 | final type Letter = refined.char.Letter 12 | final val Letter = refined.char.Letter 13 | 14 | final type LowerCase = refined.char.LowerCase 15 | final val LowerCase = refined.char.LowerCase 16 | 17 | final type UpperCase = refined.char.UpperCase 18 | final val UpperCase = refined.char.UpperCase 19 | 20 | final type Whitespace = refined.char.Whitespace 21 | final val Whitespace = refined.char.Whitespace 22 | 23 | final type LetterOrDigit = refined.char.LetterOrDigit 24 | } 25 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/predicates/generic.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.predicates 2 | 3 | import eu.timepit.refined 4 | 5 | object generic extends GenericPredicates 6 | 7 | trait GenericPredicates { 8 | final type Equal[U] = refined.generic.Equal[U] 9 | final val Equal = refined.generic.Equal 10 | } 11 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/predicates/numeric.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.predicates 2 | 3 | import eu.timepit.refined 4 | 5 | object numeric extends NumericPredicates with NumericPredicatesBinCompat1 6 | 7 | trait NumericPredicates { 8 | final type Less[N] = refined.numeric.Less[N] 9 | final val Less = refined.numeric.Less 10 | 11 | final type Greater[N] = refined.numeric.Greater[N] 12 | final val Greater = refined.numeric.Greater 13 | 14 | final type Modulo[N, O] = refined.numeric.Modulo[N, O] 15 | final val Modulo = refined.numeric.Modulo 16 | 17 | final type LessEqual[N] = refined.numeric.LessEqual[N] 18 | 19 | final type GreaterEqual[N] = refined.numeric.GreaterEqual[N] 20 | 21 | final type Positive = refined.numeric.Positive 22 | 23 | final type NonPositive = refined.numeric.NonPositive 24 | 25 | final type Negative = refined.numeric.Negative 26 | 27 | final type NonNegative = refined.numeric.NonNegative 28 | 29 | final type Divisible[N] = refined.numeric.Divisible[N] 30 | 31 | final type NonDivisible[N] = refined.numeric.NonDivisible[N] 32 | 33 | final type Even = refined.numeric.Even 34 | 35 | final type Odd = refined.numeric.Odd 36 | 37 | final val Interval = refined.numeric.Interval 38 | } 39 | 40 | trait NumericPredicatesBinCompat1 { 41 | final type NonNaN = refined.numeric.NonNaN 42 | final val NonNaN = refined.numeric.NonNaN 43 | } 44 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/types/all.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.types 2 | 3 | /** Module for all predefined refined types. */ 4 | object all extends AllTypes with AllTypesBinCompat1 with AllTypesBinCompat2 with AllTypesBinCompat3 5 | 6 | trait AllTypes 7 | extends CharTypes 8 | with DigestTypes 9 | with NetTypes 10 | with NumericTypes 11 | with StringTypes 12 | with TimeTypes 13 | 14 | trait AllTypesBinCompat1 extends NumericTypesBinCompat1 15 | 16 | trait AllTypesBinCompat2 extends NumericTypesBinCompat2 17 | 18 | trait AllTypesBinCompat3 extends StringTypesBinCompat1 19 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/types/char.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.types 2 | 3 | import eu.timepit.refined.api.{Refined, RefinedTypeOps} 4 | import eu.timepit.refined.char.{LowerCase, UpperCase} 5 | 6 | /** Module for `Char` refined types. */ 7 | object char { 8 | 9 | /** A `Char` that is a lower case character. */ 10 | type LowerCaseChar = Char Refined LowerCase 11 | 12 | object LowerCaseChar extends RefinedTypeOps[LowerCaseChar, Char] 13 | 14 | /** A `Char` that is an upper case character. */ 15 | type UpperCaseChar = Char Refined UpperCase 16 | 17 | object UpperCaseChar extends RefinedTypeOps[UpperCaseChar, Char] 18 | } 19 | 20 | trait CharTypes { 21 | final type LowerCaseChar = char.LowerCaseChar 22 | final val LowerCaseChar = char.LowerCaseChar 23 | 24 | final type UpperCaseChar = char.UpperCaseChar 25 | final val UpperCaseChar = char.UpperCaseChar 26 | } 27 | -------------------------------------------------------------------------------- /modules/core/shared/src/main/scala/eu/timepit/refined/util/string.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.util 2 | 3 | import eu.timepit.refined.api.Refined 4 | import eu.timepit.refined.string._ 5 | 6 | /** 7 | * Module for statically checking constructors of types that can be 8 | * instantiated with `String`s. 9 | * 10 | * @see [[https://github.com/fthomas/refined/blob/master/docs/util_string.md]] 11 | */ 12 | object string { 13 | 14 | /** Creates a `[[scala.util.matching.Regex]]` from a validated string. */ 15 | def regex(s: String Refined Regex): scala.util.matching.Regex = 16 | new scala.util.matching.Regex(s.value) 17 | 18 | /** Creates a `java.net.URI` from a validated string. */ 19 | def uri(s: String Refined Uri): java.net.URI = 20 | new java.net.URI(s.value) 21 | 22 | /** Creates a `java.net.URL` from a validated string. */ 23 | def url(s: String Refined Url): java.net.URL = 24 | new java.net.URI(s.value).toURL 25 | 26 | /** Creates a `java.net.UUID` from a validated string. */ 27 | def uuid(s: String Refined Uuid): java.util.UUID = 28 | java.util.UUID.fromString(s.value) 29 | 30 | /** Creates a `javax.xml.xpath.XPathExpression` from a validated string. */ 31 | def xpath(s: String Refined XPath): javax.xml.xpath.XPathExpression = 32 | javax.xml.xpath.XPathFactory.newInstance().newXPath().compile(s.value) 33 | } 34 | -------------------------------------------------------------------------------- /modules/core/shared/src/test/scala-3.0-/eu/timepit/refined/AutoMacrosSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import eu.timepit.refined.api.Refined 4 | import eu.timepit.refined.auto._ 5 | import eu.timepit.refined.char.{Digit, Letter} 6 | import eu.timepit.refined.generic._ 7 | import eu.timepit.refined.types.numeric.PosInt 8 | import org.scalacheck.Prop._ 9 | import org.scalacheck.Properties 10 | import shapeless.tag.@@ 11 | import shapeless.test.illTyped 12 | 13 | class AutoMacrosSpec extends Properties("auto.macros") { 14 | 15 | property("autoInfer") = secure { 16 | val a: Char Refined Equal[W.`'0'`.T] = '0' 17 | val b: Char Refined Digit = a 18 | illTyped( 19 | "val c: Char Refined Letter = a", 20 | """type mismatch \(invalid inference\):\s*eu.timepit.refined.generic.Equal\[Char\('0'\)\] does not imply\s*eu.timepit.refined.char.Letter""" 21 | ) 22 | a == b 23 | } 24 | 25 | property("autoRefineV") = secure { 26 | val a: Char Refined Equal[W.`'0'`.T] = '0' 27 | illTyped("val b: Char Refined Equal[W.`'0'`.T] = '1'", """Predicate failed: \(1 == 0\).""") 28 | a.value == '0' 29 | } 30 | 31 | property("autoRefineT") = secure { 32 | val a: Char @@ Equal[W.`'0'`.T] = '0' 33 | illTyped("val b: Char @@ Equal[W.`'0'`.T] = '1'", """Predicate failed: \(1 == 0\).""") 34 | a == '0' 35 | } 36 | 37 | property("#260") = secure { 38 | val somePosInt: Option[PosInt] = Some(5) 39 | somePosInt.isDefined 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /modules/core/shared/src/test/scala-3.0-/eu/timepit/refined/GenericInferenceSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import eu.timepit.refined.api.Inference 4 | import eu.timepit.refined.generic.Equal 5 | import eu.timepit.refined.numeric.Greater 6 | import eu.timepit.refined.string.StartsWith 7 | import org.scalacheck.Prop._ 8 | import org.scalacheck.Properties 9 | 10 | class GenericInferenceSpec extends Properties("GenericInference") { 11 | 12 | property("""Equal["abcd"] ==> StartsWith["ab"]""") = secure { 13 | Inference[Equal[W.`"abcd"`.T], StartsWith[W.`"ab"`.T]].isValid 14 | } 15 | 16 | property("""Equal["abcd"] =!> StartsWith["cd"]""") = secure { 17 | Inference[Equal[W.`"abcd"`.T], StartsWith[W.`"cd"`.T]].notValid 18 | } 19 | 20 | property("Equal[10] ==> Greater[5]") = secure { 21 | Inference[Equal[W.`10`.T], Greater[W.`5`.T]].isValid 22 | } 23 | 24 | property("Equal[5] =!> Greater[10]") = secure { 25 | Inference[Equal[W.`5`.T], Greater[W.`10`.T]].notValid 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /modules/core/shared/src/test/scala-3.0-/eu/timepit/refined/GenericValidateSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import eu.timepit.refined.TestUtils._ 4 | import eu.timepit.refined.generic._ 5 | import org.scalacheck.Prop._ 6 | import org.scalacheck.Properties 7 | 8 | class GenericValidateSpec extends Properties("GenericValidate") { 9 | 10 | property("isValid[Equal[1.4]](1.4)") = secure { 11 | isValid[Equal[W.`1.4`.T]](1.4) 12 | } 13 | 14 | property("notValid[Equal[1.4]](2.4)") = secure { 15 | notValid[Equal[W.`1.4`.T]](2.4) 16 | } 17 | 18 | property("showExpr[Equal[1.4]](0.4)") = secure { 19 | showExpr[Equal[W.`1.4`.T]](0.4) ?= "(0.4 == 1.4)" 20 | } 21 | 22 | property("isValid[Equal[Foo.type]](Foo)") = secure { 23 | object Foo 24 | isValid[Equal[Foo.type]](Foo) 25 | } 26 | 27 | property("isValid[Equal[0]](i: Int)") = forAll { (i: Int) => 28 | isValid[Equal[W.`0`.T]](i) ?= (i == 0) 29 | } 30 | 31 | property("isValid[Equal[0]](l: Long)") = forAll { (l: Long) => 32 | isValid[Equal[W.`0`.T]](l) ?= (l == 0L) 33 | } 34 | 35 | property("isValid[Equal[0]](d: Double)") = forAll { (d: Double) => 36 | isValid[Equal[W.`0`.T]](d) ?= (d == 0.0) 37 | } 38 | 39 | property("showExpr[Equal[5]](0)") = secure { 40 | showExpr[Equal[W.`5`.T]](0) ?= "(0 == 5)" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /modules/core/shared/src/test/scala-3.0-/eu/timepit/refined/ImplicitScopeSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import eu.timepit.refined.TestUtils.wellTyped 4 | import eu.timepit.refined.api.{Inference, Validate} 5 | import org.scalacheck.Properties 6 | 7 | /** 8 | * Tests that ensure that `Validate` and `Inference` instances of 9 | * predicates are in their implicit scope and do not need to be imported 10 | * explicitly. 11 | */ 12 | class ImplicitScopeSpec extends Properties("implicit scope") { 13 | 14 | property("Validate[Char, LetterOrDigit]") = wellTyped { 15 | Validate[Char, char.LetterOrDigit] 16 | } 17 | 18 | property("Validate[Int, Positive]") = wellTyped { 19 | Validate[Int, numeric.Positive] 20 | } 21 | 22 | property("Validate[Int, NonPositive]") = wellTyped { 23 | Validate[Int, numeric.NonPositive] 24 | } 25 | 26 | property("Validate[Int, Interval.Closed[0, 10]]") = wellTyped { 27 | Validate[Int, numeric.Interval.Closed[W.`0`.T, W.`10`.T]] 28 | } 29 | 30 | property("Inference[And[UpperCase, Letter], And[Letter, UpperCase]]") = wellTyped { 31 | Inference[boolean.And[char.UpperCase, char.Letter], boolean.And[char.Letter, char.UpperCase]] 32 | } 33 | 34 | property("Inference[Greater[1], Greater[0]]") = wellTyped { 35 | Inference[numeric.Greater[W.`1`.T], numeric.Greater[W.`0`.T]] 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /modules/core/shared/src/test/scala/eu/timepit/refined/AutoSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import eu.timepit.refined.auto._ 4 | import eu.timepit.refined.types.numeric.PosInt 5 | import org.scalacheck.Prop._ 6 | import org.scalacheck.Properties 7 | 8 | class AutoSpec extends Properties("auto") { 9 | 10 | property("autoUnwrap: PosInt: Int") = secure { 11 | val a: PosInt = PosInt.unsafeFrom(1) 12 | val b: Int = a 13 | a.value == b 14 | } 15 | 16 | property("autoUnwrap: PosInt + PosInt") = secure { 17 | val a = PosInt.unsafeFrom(1) 18 | val b = PosInt.unsafeFrom(2) 19 | (a + b) == 3 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /modules/core/shared/src/test/scala/eu/timepit/refined/CharValidateSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import eu.timepit.refined.TestUtils._ 4 | import eu.timepit.refined.predicates.all._ 5 | import org.scalacheck.Prop._ 6 | import org.scalacheck.Properties 7 | 8 | class CharValidateSpec extends Properties("CharValidate") { 9 | 10 | property("Digit.isValid") = forAll((c: Char) => isValid[Digit](c) ?= c.isDigit) 11 | 12 | property("Digit.showExpr") = secure { 13 | showExpr[Digit]('c') ?= "isDigit('c')" 14 | } 15 | 16 | property("Digit()") = wellTyped { 17 | Digit() 18 | } 19 | 20 | property("Letter.isValid") = forAll((c: Char) => isValid[Letter](c) ?= c.isLetter) 21 | 22 | property("Letter.showExpr") = secure { 23 | showExpr[Letter]('c') ?= "isLetter('c')" 24 | } 25 | 26 | property("LowerCase.isValid") = forAll((c: Char) => isValid[LowerCase](c) ?= c.isLower) 27 | 28 | property("LowerCase.showExpr") = secure { 29 | showExpr[LowerCase]('c') ?= "isLower('c')" 30 | } 31 | 32 | property("UpperCase.isValid") = forAll((c: Char) => isValid[UpperCase](c) ?= c.isUpper) 33 | 34 | property("UpperCase.showExpr") = secure { 35 | showExpr[UpperCase]('c') ?= "isUpper('c')" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /modules/core/shared/src/test/scala/eu/timepit/refined/api/RefinedTypeOpsSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.api 2 | 3 | import eu.timepit.refined.types.numeric.NonNegInt 4 | import org.scalacheck.Prop._ 5 | import org.scalacheck.Properties 6 | import scala.util.{Failure, Success, Try} 7 | 8 | class RefinedTypeOpsSpec extends Properties("RefinedTypeOps") { 9 | 10 | property("from ~= unapply") = forAll { (i: Int) => 11 | NonNegInt.from(i).toOption ?= NonNegInt.unapply(i) 12 | } 13 | 14 | property("from ~= unsafeFrom") = forAll { (i: Int) => 15 | val stringOrNonNegInt = Try(NonNegInt.unsafeFrom(i)) match { 16 | case Success(n) => Right(n) 17 | case Failure(t) => Left(t.getMessage) 18 | } 19 | NonNegInt.from(i) ?= stringOrNonNegInt 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /modules/core/shared/src/test/scala/eu/timepit/refined/types/CharTypesSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.types 2 | 3 | import eu.timepit.refined.types.all._ 4 | import org.scalacheck.Prop._ 5 | import org.scalacheck.Properties 6 | 7 | class CharTypesSpec extends Properties("CharTypes") { 8 | 9 | property("LowerCaseChar.from('a')") = secure { 10 | LowerCaseChar.from('a').isRight 11 | } 12 | 13 | property("LowerCaseChar.from('A')") = secure { 14 | LowerCaseChar.from('A') ?= Left("Predicate failed: isLower('A').") 15 | } 16 | 17 | property("UpperCaseChar.from('A')") = secure { 18 | UpperCaseChar.from('A').isRight 19 | } 20 | 21 | property("UpperCaseChar.from('a')") = secure { 22 | UpperCaseChar.from('a') ?= Left("Predicate failed: isUpper('a').") 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /modules/docs/matrices.md: -------------------------------------------------------------------------------- 1 | ```scala 2 | import eu.timepit.refined.api.Refined 3 | import shapeless.Witness 4 | ``` 5 | 6 | ```scala 7 | scala> case class Dim[R <: Int, C <: Int](rows: R, columns: C) 8 | defined class Dim 9 | ``` 10 | 11 | ```scala 12 | scala> type Matrix[R <: Int, C <: Int] = List[List[Int]] Refined Dim[R, C] 13 | defined type alias Matrix 14 | 15 | scala> class MatrixAux[R <: Int, C <: Int](val wr: Witness.Aux[R], val wc: Witness.Aux[C]) { 16 | | def apply(f: (Int, Int) => Int): Matrix[wr.T, wc.T] = 17 | | Refined.unsafeApply(List.tabulate(wr.value, wc.value)(f)) 18 | | } 19 | defined class MatrixAux 20 | 21 | scala> def matrix(rows: Int, columns: Int)(f: (Int, Int) => Int) = 22 | | new MatrixAux(Witness(rows), Witness(columns))(f) 23 | matrix: (rows: Int, columns: Int)(f: (Int, Int) => Int)eu.timepit.refined.api.Refined[List[List[Int]],Dim[rows.type,columns.type]] 24 | ``` 25 | 26 | ```scala 27 | scala> val m1 = matrix(2, 3)((r, c) => r * 10 + c) 28 | m1: eu.timepit.refined.api.Refined[List[List[Int]],Dim[Int(2),Int(3)]] = List(List(0, 1, 2), List(10, 11, 12)) 29 | ``` 30 | 31 | ```scala 32 | scala> def transpose[R <: Int, C <: Int](m: Matrix[R, C]): Matrix[C, R] = 33 | | Refined.unsafeApply(m.value.transpose) 34 | transpose: [R <: Int, C <: Int](m: Matrix[R,C])Matrix[C,R] 35 | 36 | scala> transpose(m1) 37 | res0: Matrix[Int(3),Int(2)] = List(List(0, 10), List(1, 11), List(2, 12)) 38 | ``` 39 | -------------------------------------------------------------------------------- /modules/docs/src/dependent_refinement.md: -------------------------------------------------------------------------------- 1 | # Dependent refinement 2 | 3 | ```tut:silent 4 | import eu.timepit.refined.api.Refined 5 | import eu.timepit.refined.auto._ 6 | import eu.timepit.refined.numeric.Greater 7 | import eu.timepit.refined.string.StartsWith 8 | ``` 9 | 10 | Scala's path dependent types makes it possible to express refinements 11 | that depend other statically known values: 12 | 13 | ```tut 14 | def foo(a: String)(b: String Refined StartsWith[a.type]) = a + b 15 | ``` 16 | 17 | ```tut 18 | foo("ab")("abcd") 19 | ``` 20 | 21 | ```tut:fail 22 | foo("cd")("abcd") 23 | ``` 24 | 25 | Unfortunately Scala currently does not allow to use singleton types of 26 | `AnyVal`s, see [section 3.2.1][spec-3.2.1] of the Scala Language 27 | Specification: 28 | 29 | ```tut:fail 30 | def bar(i: Int)(j: Int Refined Greater[i.type]) = j - i 31 | ``` 32 | 33 | But fortunately this restriction will be lifted with the implementation 34 | of [SIP-23][SIP-23] in a future Scala version. 35 | 36 | [spec-3.2.1]: http://www.scala-lang.org/files/archive/spec/2.11/03-types.html#singleton-types 37 | [SIP-23]: http://docs.scala-lang.org/sips/42.type.html 38 | -------------------------------------------------------------------------------- /modules/docs/src/matrices.md: -------------------------------------------------------------------------------- 1 | ```tut:silent 2 | import eu.timepit.refined.api.Refined 3 | import shapeless.Witness 4 | ``` 5 | 6 | ```tut 7 | case class Dim[R <: Int, C <: Int](rows: R, columns: C) 8 | ``` 9 | 10 | ```tut 11 | type Matrix[R <: Int, C <: Int] = List[List[Int]] Refined Dim[R, C] 12 | 13 | class MatrixAux[R <: Int, C <: Int](val wr: Witness.Aux[R], val wc: Witness.Aux[C]) { 14 | def apply(f: (Int, Int) => Int): Matrix[wr.T, wc.T] = 15 | Refined.unsafeApply(List.tabulate(wr.value, wc.value)(f)) 16 | } 17 | 18 | def matrix(rows: Int, columns: Int)(f: (Int, Int) => Int) = 19 | new MatrixAux(Witness(rows), Witness(columns))(f) 20 | ``` 21 | 22 | ```tut 23 | val m1 = matrix(2, 3)((r, c) => r * 10 + c) 24 | ``` 25 | 26 | ```tut 27 | def transpose[R <: Int, C <: Int](m: Matrix[R, C]): Matrix[C, R] = 28 | Refined.unsafeApply(m.value.transpose) 29 | 30 | transpose(m1) 31 | ``` 32 | -------------------------------------------------------------------------------- /modules/docs/src/type_aliases.md: -------------------------------------------------------------------------------- 1 | # Using type aliases for refined types 2 | 3 | ```tut:silent 4 | import eu.timepit.refined.W 5 | import eu.timepit.refined.api.Refined 6 | import eu.timepit.refined.api.RefType.applyRef 7 | import eu.timepit.refined.auto._ 8 | import eu.timepit.refined.numeric.Interval 9 | ``` 10 | 11 | ```tut 12 | type File = Char Refined Interval.Closed[W.`'a'`.T, W.`'h'`.T] 13 | type Rank = Int Refined Interval.Closed[W.`1`.T, W.`8`.T] 14 | 15 | case class Square(file: File, rank: Rank) 16 | ``` 17 | 18 | ```tut 19 | Square('a', 1) 20 | Square('e', 4) 21 | ``` 22 | 23 | ```tut:nofail 24 | Square('i', 2) 25 | Square('a', 9) 26 | Square('k', -1) 27 | ``` 28 | 29 | ```tut 30 | val a1 = Square('a', 1) 31 | 32 | val b2 = for { 33 | f <- applyRef[File]((a1.file + 1).toChar).right 34 | r <- applyRef[Rank](a1.rank + 1).right 35 | } yield Square(f, r) 36 | 37 | val i9 = for { 38 | f <- applyRef[File]((a1.file + 8).toChar).right 39 | r <- applyRef[Rank](a1.rank + 8).right 40 | } yield Square(f, r) 41 | ``` 42 | -------------------------------------------------------------------------------- /modules/eval/shared/src/main/scala/eu/timepit/refined/eval.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import eu.timepit.refined.api.Validate 4 | import scala.reflect.runtime.currentMirror 5 | import scala.tools.reflect.ToolBox 6 | import shapeless.Witness 7 | 8 | object eval { 9 | 10 | /** Predicate that checks if a value applied to the predicate `S` yields `true`. */ 11 | final case class Eval[S](s: S) 12 | 13 | object Eval { 14 | // Cache ToolBox for Eval Validate instances 15 | private lazy val toolBox = currentMirror.mkToolBox() 16 | 17 | implicit def evalValidate[T, S <: String](implicit 18 | mt: Manifest[T], 19 | ws: Witness.Aux[S] 20 | ): Validate.Plain[T, Eval[S]] = { 21 | // The ascription (T => Boolean) allows to omit the parameter 22 | // type in ws.value (i.e. "x => ..." instead of "(x: T) => ..."). 23 | val tree = toolBox.parse(s"(${ws.value}): ($mt => Boolean)") 24 | 25 | val predicate = toolBox.eval(tree).asInstanceOf[T => Boolean] 26 | Validate.fromPredicate(predicate, _ => ws.value, Eval(ws.value)) 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /modules/eval/shared/src/test/scala/eu/timepit/refined/EvalValidateSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import eu.timepit.refined.api.Validate 4 | import eu.timepit.refined.eval.Eval 5 | import org.scalacheck.Prop._ 6 | import org.scalacheck.Properties 7 | import scala.tools.reflect.ToolBoxError 8 | 9 | class EvalValidateSpec extends Properties("EvalValidate") { 10 | 11 | type IsEven = Eval[W.`"(x: Int) => x % 2 == 0"`.T] 12 | 13 | property("Eval.isValid") = { 14 | val v = Validate[Int, IsEven] 15 | forAll((i: Int) => v.isValid(i) ?= (i % 2 == 0)) 16 | } 17 | 18 | property("Eval.showExpr") = secure { 19 | Validate[Int, IsEven].showExpr(0) ?= "(x: Int) => x % 2 == 0" 20 | } 21 | 22 | property("Eval.refineV.no parameter type") = { 23 | val v = Validate[List[Int], Eval[W.`"_.headOption.fold(false)(_ > 0)"`.T]] 24 | forAll((l: List[Int]) => v.isValid(l) ?= l.headOption.fold(false)(_ > 0)) 25 | } 26 | 27 | property("Eval.refineV.scope") = secure { 28 | val two = 2 29 | throws(classOf[ToolBoxError])(refineV[Eval[W.`"(x: Int) => x >= two"`.T]](two)) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /modules/jsonpath/shared/src/main/scala/eu/timepit/refined/jsonpath/string.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.jsonpath 2 | 3 | import com.jayway.jsonpath.internal.path.PathCompiler 4 | import eu.timepit.refined.api.Validate 5 | 6 | object string { 7 | 8 | /** Predicate that checks if a `String` is a valid JSON path. */ 9 | final case class JSONPath() 10 | 11 | object JSONPath { 12 | implicit def jsonPathValidate: Validate.Plain[String, JSONPath] = 13 | Validate.fromPartial(PathCompiler.compile(_), "JSONPath", JSONPath()) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /modules/jsonpath/shared/src/test/scala/eu/timepit/refined/jsonpath/StringValidateSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.jsonpath 2 | 3 | import eu.timepit.refined.TestUtils._ 4 | import eu.timepit.refined.jsonpath.string.JSONPath 5 | import org.scalacheck.Prop._ 6 | import org.scalacheck.Properties 7 | 8 | class StringValidateSpec extends Properties("JSONPathStringValidate") { 9 | 10 | property("JSONPath is valid") = secure { 11 | isValid[JSONPath]("$") && isValid[JSONPath]("@") 12 | } 13 | 14 | property("Illegal character at position 1 expected '.' or '['") = secure { 15 | showResult[JSONPath]("$X") ?= 16 | "JSONPath predicate failed: Illegal character at position 1 expected '.' or '['" 17 | } 18 | 19 | property("Path must not end with a '.' or '..'") = secure { 20 | showResult[JSONPath]("$.") ?= "JSONPath predicate failed: Path must not end with a '.' or '..'" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /modules/pureconfig/shared/src/main/scala-3.0+/eu/timepit/refined/pureconfig/TypeDescribeVersionSpecific.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.pureconfig 2 | 3 | import scala.quoted.{Expr, Quotes, Type, quotes} 4 | 5 | final class DescribeType[T](val repr: String) 6 | 7 | object DescribeType: 8 | 9 | private def macroImpl[T: Type](using Quotes): Expr[DescribeType[T]] = { 10 | import quotes.reflect.* 11 | '{ new DescribeType[T](${ Expr(TypeRepr.of[T].show) }) } 12 | } 13 | 14 | inline given describeType[T]: DescribeType[T] = ${ macroImpl[T] } 15 | 16 | private[pureconfig] trait TypeDescribeVersionSpecific { 17 | 18 | protected def getDescription[A](d: DescribeType[A]): String = d.repr 19 | } 20 | -------------------------------------------------------------------------------- /modules/pureconfig/shared/src/main/scala-3.0-/eu/timepit/refined/pureconfig/TypeDescribeVersionSpecific.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.pureconfig 2 | 3 | private[pureconfig] trait TypeDescribeVersionSpecific { 4 | final type DescribeType[A] = scala.reflect.runtime.universe.WeakTypeTag[A] 5 | 6 | protected def getDescription[A](d: DescribeType[A]): String = d.tpe.toString 7 | } 8 | -------------------------------------------------------------------------------- /modules/pureconfig/shared/src/main/scala/eu/timepit/refined/pureconfig/package.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import _root_.pureconfig.ConfigConvert 4 | import eu.timepit.refined.api.{RefType, Validate} 5 | 6 | package object pureconfig extends BaseInstances { 7 | 8 | implicit def refTypeConfigConvert[F[_, _], T, P](implicit 9 | configConvert: ConfigConvert[T], 10 | refType: RefType[F], 11 | validate: Validate[T, P], 12 | typeTag: DescribeType[F[T, P]] 13 | ): ConfigConvert[F[T, P]] = 14 | ConfigConvert.fromReaderAndWriter(refTypeConfigReader, refTypeConfigWriter) 15 | } 16 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/main/scala-3.0+/eu/timepit/refined/scalacheck/generic.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.api.RefType 4 | import eu.timepit.refined.generic.Equal 5 | import org.scalacheck.{Arbitrary, Gen} 6 | 7 | /** Module that provides `Arbitrary` instances for generic predicates. */ 8 | object generic extends GenericInstances 9 | 10 | trait GenericInstances { 11 | 12 | implicit def equalArbitrary[F[_, _]: RefType, T, U <: T](implicit 13 | wu: ValueOf[U] 14 | ): Arbitrary[F[T, Equal[U]]] = 15 | arbitraryRefType(Gen.const(wu.value)) 16 | } 17 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/main/scala-3.0-/eu/timepit/refined/scalacheck/generic.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.api.RefType 4 | import eu.timepit.refined.generic.Equal 5 | import org.scalacheck.{Arbitrary, Gen} 6 | import shapeless.Witness 7 | 8 | /** Module that provides `Arbitrary` instances for generic predicates. */ 9 | object generic extends GenericInstances 10 | 11 | trait GenericInstances { 12 | 13 | implicit def equalArbitrary[F[_, _]: RefType, T, U <: T](implicit 14 | wu: Witness.Aux[U] 15 | ): Arbitrary[F[T, Equal[U]]] = 16 | arbitraryRefType(Gen.const(wu.value)) 17 | } 18 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/main/scala/eu/timepit/refined/scalacheck/all.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | object all 4 | extends BooleanInstances 5 | with CharInstances 6 | with GenericInstances 7 | with NumericInstances 8 | with NumericInstancesBinCompat1 9 | with RefTypeInstances 10 | with StringInstances 11 | with StringInstancesBinCompat1 12 | with CollectionInstances 13 | with CollectionInstancesBinCompat1 14 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/main/scala/eu/timepit/refined/scalacheck/any.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.api.{RefType, Validate} 4 | import org.scalacheck.Arbitrary 5 | 6 | /** 7 | * Module that provides an `Arbitrary` instance for any refined type 8 | * `F[T, P]`. 9 | * 10 | * This instance uses the `Arbitrary` instance of the base type `T` and 11 | * the corresponding `Validate[T, P]` instance of the refinement to filter 12 | * out invalid values. For most refinements this will cause ScalaCheck to 13 | * fail because this instance will discard too many values. 14 | */ 15 | object any extends AnyInstances 16 | 17 | trait AnyInstances { 18 | 19 | implicit def arbitraryFromValidate[F[_, _], T, P](implicit 20 | rt: RefType[F], 21 | v: Validate[T, P], 22 | arb: Arbitrary[T] 23 | ): Arbitrary[F[T, P]] = 24 | arbitraryRefType(arb.arbitrary.filter(v.isValid)) 25 | } 26 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/main/scala/eu/timepit/refined/scalacheck/boolean.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.api.RefType 4 | import eu.timepit.refined.boolean.Or 5 | import org.scalacheck.{Arbitrary, Gen} 6 | 7 | /** Module that provides `Arbitrary` instances for logical predicates. */ 8 | object boolean extends BooleanInstances 9 | 10 | trait BooleanInstances { 11 | 12 | implicit def orArbitrary[F[_, _], T, A, B](implicit 13 | rt: RefType[F], 14 | arbA: Arbitrary[F[T, A]], 15 | arbB: Arbitrary[F[T, B]] 16 | ): Arbitrary[F[T, A Or B]] = { 17 | val genA = arbA.arbitrary.map(rt.unwrap) 18 | val genB = arbB.arbitrary.map(rt.unwrap) 19 | arbitraryRefType(Gen.oneOf(genA, genB)) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/main/scala/eu/timepit/refined/scalacheck/char.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.api.RefType 4 | import eu.timepit.refined.char._ 5 | import org.scalacheck.{Arbitrary, Gen} 6 | 7 | /** 8 | * Module that provides `Arbitrary` instances for `Char` related 9 | * predicates. 10 | */ 11 | object char extends CharInstances 12 | 13 | trait CharInstances { 14 | 15 | implicit def digitArbitrary[F[_, _]: RefType]: Arbitrary[F[Char, Digit]] = 16 | arbitraryRefType(Gen.numChar) 17 | 18 | implicit def letterArbitrary[F[_, _]: RefType]: Arbitrary[F[Char, Letter]] = 19 | arbitraryRefType(Gen.alphaChar) 20 | 21 | implicit def lowerCaseArbitrary[F[_, _]: RefType]: Arbitrary[F[Char, LowerCase]] = 22 | arbitraryRefType(Gen.alphaLowerChar) 23 | 24 | implicit def upperCaseArbitrary[F[_, _]: RefType]: Arbitrary[F[Char, UpperCase]] = 25 | arbitraryRefType(Gen.alphaUpperChar) 26 | 27 | implicit def whitespaceArbitrary[F[_, _]: RefType]: Arbitrary[F[Char, Whitespace]] = 28 | arbitraryRefType(Gen.oneOf(whitespaceChars)) 29 | 30 | private val whitespaceChars: Seq[Char] = 31 | (Char.MinValue to Char.MaxValue).filter(_.isWhitespace) 32 | } 33 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/main/scala/eu/timepit/refined/scalacheck/package.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | package object scalacheck extends RefTypeInstances 4 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/main/scala/eu/timepit/refined/scalacheck/reftype.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.api.{RefinedType, RefType, Validate} 4 | import org.scalacheck.{Arbitrary, Cogen, Gen, Prop} 5 | 6 | object reftype extends RefTypeInstances 7 | 8 | trait RefTypeInstances { 9 | 10 | def arbitraryRefType[F[_, _], T, P](gen: Gen[T])(implicit rt: RefType[F]): Arbitrary[F[T, P]] = 11 | Arbitrary(gen.map(rt.unsafeWrap)) 12 | 13 | def checkArbitraryRefType[F[_, _], T, P](implicit 14 | arb: Arbitrary[F[T, P]], 15 | rt: RefType[F], 16 | v: Validate[T, P] 17 | ): Prop = 18 | Prop.forAll((tp: F[T, P]) => v.isValid(rt.unwrap(tp))) 19 | 20 | def checkArbitraryRefinedType[FTP](implicit arb: Arbitrary[FTP], rt: RefinedType[FTP]): Prop = 21 | Prop.forAll((tp: FTP) => rt.validate.isValid(rt.refType.unwrap(rt.dealias(tp)))) 22 | 23 | implicit def refTypeCogen[F[_, _], T: Cogen, P](implicit rt: RefType[F]): Cogen[F[T, P]] = 24 | Cogen[T].contramap(tp => rt.unwrap(tp)) 25 | } 26 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/main/scala/eu/timepit/refined/scalacheck/util/Bounded.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck.util 2 | 3 | @deprecated("Bounded has been replaced by eu.timepit.refined.api.Min/Max", "0.9.0") 4 | trait Bounded[T] { 5 | def minValue: T 6 | def maxValue: T 7 | } 8 | 9 | @deprecated("Bounded has been replaced by eu.timepit.refined.api.Min/Max", "0.9.0") 10 | object Bounded { 11 | def apply[T](implicit b: Bounded[T]): Bounded[T] = b 12 | 13 | def instance[T](min: T, max: T): Bounded[T] = 14 | new Bounded[T] { 15 | val minValue = min 16 | val maxValue = max 17 | } 18 | 19 | implicit val byte: Bounded[Byte] = 20 | instance(Byte.MinValue, Byte.MaxValue) 21 | 22 | implicit val char: Bounded[Char] = 23 | instance(Char.MinValue, Char.MaxValue) 24 | 25 | implicit val double: Bounded[Double] = 26 | instance(Double.MinValue, Double.MaxValue) 27 | 28 | implicit val float: Bounded[Float] = 29 | instance(Float.MinValue, Float.MaxValue) 30 | 31 | implicit val int: Bounded[Int] = 32 | instance(Int.MinValue, Int.MaxValue) 33 | 34 | implicit val long: Bounded[Long] = 35 | instance(Long.MinValue, Long.MaxValue) 36 | 37 | implicit val short: Bounded[Short] = 38 | instance(Short.MinValue, Short.MaxValue) 39 | } 40 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/test/scala-3.0-/eu/timepit/refined/scalacheck/AnyArbitrarySpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.W 4 | import eu.timepit.refined.api.Refined 5 | import eu.timepit.refined.collection.NonEmpty 6 | import eu.timepit.refined.scalacheck.any._ 7 | import eu.timepit.refined.string.MatchesRegex 8 | import org.scalacheck.Properties 9 | 10 | class AnyArbitrarySpec extends Properties("AnyArbitrary") { 11 | 12 | property("MatchesRegex[S]") = 13 | checkArbitraryRefinedType[String Refined MatchesRegex[W.`".{2,}"`.T]] 14 | 15 | property("NonEmpty") = checkArbitraryRefinedType[List[Int] Refined NonEmpty] 16 | } 17 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/test/scala-3.0-/eu/timepit/refined/scalacheck/CharArbitrarySpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.W 4 | import eu.timepit.refined.api.Refined 5 | import eu.timepit.refined.boolean.Or 6 | import eu.timepit.refined.char._ 7 | import eu.timepit.refined.numeric.Interval 8 | import eu.timepit.refined.scalacheck.boolean._ 9 | import eu.timepit.refined.scalacheck.char._ 10 | import eu.timepit.refined.scalacheck.numeric._ 11 | import eu.timepit.refined.types.char.{LowerCaseChar, UpperCaseChar} 12 | import org.scalacheck.Properties 13 | 14 | class CharArbitrarySpec extends Properties("CharArbitrary") { 15 | 16 | property("Digit") = checkArbitraryRefinedType[Char Refined Digit] 17 | 18 | property("Letter") = checkArbitraryRefinedType[Char Refined Letter] 19 | 20 | property("LowerCaseChar") = checkArbitraryRefinedType[LowerCaseChar] 21 | 22 | property("UpperCaseChar") = checkArbitraryRefinedType[UpperCaseChar] 23 | 24 | property("Whitespace") = checkArbitraryRefinedType[Char Refined Whitespace] 25 | 26 | property("LetterOrDigit") = checkArbitraryRefinedType[Char Refined LetterOrDigit] 27 | 28 | property("HexDigit") = { 29 | type HexDigit = Digit Or Interval.Closed[W.`'a'`.T, W.`'f'`.T] 30 | checkArbitraryRefinedType[Char Refined HexDigit] 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/test/scala-3.0-/eu/timepit/refined/scalacheck/CollectionArbitrarySpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.W 4 | import eu.timepit.refined.api.Refined 5 | import eu.timepit.refined.collection.{MaxSize, NonEmpty, Size} 6 | import eu.timepit.refined.numeric.Interval 7 | import eu.timepit.refined.scalacheck.collection._ 8 | import eu.timepit.refined.scalacheck.numeric._ 9 | import org.scalacheck.Properties 10 | 11 | class CollectionArbitrarySpec extends Properties("CollectionArbitrary") { 12 | 13 | property("List[String] Refined MaxSize[42]") = 14 | checkArbitraryRefinedType[List[String] Refined MaxSize[W.`42`.T]] 15 | 16 | property("List[Int] Refined NonEmpty") = checkArbitraryRefinedType[List[Int] Refined NonEmpty] 17 | 18 | property("Vector[Int] Refined MaxSize[23]") = 19 | checkArbitraryRefinedType[Vector[Int] Refined MaxSize[W.`23`.T]] 20 | 21 | property("Vector[Double] Refined NonEmpty") = 22 | checkArbitraryRefinedType[Vector[Double] Refined NonEmpty] 23 | 24 | property("Size[Interval.Closed[23, 42]]") = 25 | checkArbitraryRefinedType[List[Char] Refined Size[Interval.Closed[W.`23`.T, W.`42`.T]]] 26 | } 27 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/test/scala-3.0-/eu/timepit/refined/scalacheck/GenericArbitrarySpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.W 4 | import eu.timepit.refined.api.Refined 5 | import eu.timepit.refined.generic.Equal 6 | import eu.timepit.refined.scalacheck.generic._ 7 | import org.scalacheck.Properties 8 | 9 | class GenericArbitrarySpec extends Properties("GenericArbitrary") { 10 | 11 | property("Equal[100]") = checkArbitraryRefinedType[Int Refined Equal[W.`100`.T]] 12 | } 13 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/test/scala/eu/timepit/refined/scalacheck/PackageSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.api.Refined 4 | import eu.timepit.refined.numeric.Positive 5 | import eu.timepit.refined.types.all._ 6 | import org.scalacheck.{Cogen, Prop, Properties} 7 | 8 | class PackageSpec extends Properties("Package") { 9 | // this is just copied from core since core’s test configuration is built for scalacheck 1.14 only 10 | def wellTyped[A](body: => A): Prop = 11 | Prop.secure { 12 | body 13 | true 14 | } 15 | 16 | property("Cogen[Short Refined Positive]") = wellTyped(Cogen[Short Refined Positive]) 17 | 18 | property("Cogen[LowerCaseChar]") = wellTyped(Cogen[LowerCaseChar]) 19 | 20 | property("Cogen[NonEmptyString]") = wellTyped(Cogen[NonEmptyString]) 21 | 22 | property("Cogen[PosInt]") = wellTyped(Cogen[PosInt]) 23 | } 24 | -------------------------------------------------------------------------------- /modules/scalacheck/shared/src/test/scala/eu/timepit/refined/scalacheck/ZeroDiscardRatioSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalacheck 2 | 3 | import eu.timepit.refined.scalacheck.string._ 4 | import eu.timepit.refined.types.string.NonEmptyString 5 | import org.scalacheck.Prop._ 6 | import org.scalacheck.{Properties, Test} 7 | 8 | class ZeroDiscardRatioSpec extends Properties("ZeroDiscardRatioSpec") { 9 | override def overrideParameters(p: Test.Parameters): Test.Parameters = 10 | p.withMaxDiscardRatio(Float.MinPositiveValue) 11 | 12 | property("NonEmptyString") = forAll((_: NonEmptyString) => true) 13 | } 14 | -------------------------------------------------------------------------------- /modules/scalaz/shared/src/main/scala/eu/timepit/refined/scalaz/auto.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalaz 2 | 3 | import eu.timepit.refined.api.{RefType, Validate} 4 | import eu.timepit.refined.macros.RefineMacro 5 | import scalaz.@@ 6 | 7 | object auto { 8 | 9 | /** 10 | * Implicitly tags (at compile-time) a value of type `T` with `P` if `t` 11 | * satisfies the predicate `P`. If it does not satisfy the predicate, 12 | * compilation fails. 13 | */ 14 | implicit def autoRefineScalazTag[T, P](t: T)(implicit 15 | rt: RefType[@@], 16 | v: Validate[T, P] 17 | ): T @@ P = macro RefineMacro.impl[@@, T, P] 18 | } 19 | -------------------------------------------------------------------------------- /modules/scalaz/shared/src/main/scala/eu/timepit/refined/scalaz/derivation.scala: -------------------------------------------------------------------------------- 1 | // Copyright: 2015 - 2018 Frank S. Thomas and Sam Halliday 2 | // License: https://opensource.org/licenses/MIT 3 | 4 | package eu.timepit.refined.scalaz 5 | 6 | import eu.timepit.refined.api.{RefType, Validate} 7 | import scalaz.{Contravariant, MonadError} 8 | 9 | object derivation extends DerivationInstances 10 | 11 | trait DerivationInstances { 12 | 13 | /** 14 | * Instances for typeclasses with a `Contravariant`, e.g. encoders. 15 | */ 16 | implicit def refTypeViaContravariant[F[_, _], G[_], T, P](implicit 17 | c: Contravariant[G], 18 | rt: RefType[F], 19 | gt: G[T] 20 | ): G[F[T, P]] = c.contramap(gt)(rt.unwrap) 21 | 22 | /** 23 | * Instances for typeclasses with a `MonadError[?, String]`, i.e. a 24 | * disjunction kleisli arrow applied to the typeclass. e.g. decoders. 25 | */ 26 | implicit def refTypeViaMonadError[F[_, _], G[_], T, P](implicit 27 | m: MonadError[G, String], 28 | rt: RefType[F], 29 | v: Validate[T, P], 30 | gt: G[T] 31 | ): G[F[T, P]] = 32 | m.bind(gt) { f => 33 | rt.refine(f) match { 34 | case Left(s) => m.raiseError(s) 35 | case Right(ftp) => m.pure(ftp) 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /modules/scalaz/shared/src/main/scala/eu/timepit/refined/scalaz/syntax.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalaz 2 | 3 | import eu.timepit.refined.api.RefinedTypeOps 4 | import scalaz.{Validation, ValidationNel} 5 | 6 | object syntax extends ScalazRefinedTypeOpsSyntax 7 | 8 | trait ScalazRefinedTypeOpsSyntax { 9 | implicit class ScalazRefinedTypeOps[FTP, T](companion: RefinedTypeOps[FTP, T]) { 10 | def validate(t: T): ValidationNel[String, FTP] = 11 | Validation.fromEither(companion.from(t)).toValidationNel 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /modules/scalaz/shared/src/test/scala/eu/timepit/refined/scalaz/RefTypeSpecScalazTag.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalaz 2 | 3 | import _root_.scalaz.@@ 4 | import _root_.scalaz.std.anyVal._ 5 | import _root_.scalaz.syntax.equal._ 6 | import _root_.scalaz.syntax.show._ 7 | import eu.timepit.refined.TestUtils._ 8 | import eu.timepit.refined.api.{RefType, RefTypeSpec} 9 | import eu.timepit.refined.numeric._ 10 | import eu.timepit.refined.scalaz.auto._ 11 | import org.scalacheck.Prop._ 12 | import shapeless.test.illTyped 13 | 14 | class RefTypeSpecScalazTag extends RefTypeSpec[@@]("scalaz.@@") { 15 | 16 | property("refineM with type alias") = secure { 17 | type PositiveInt = Int @@ Positive 18 | 19 | val x: PositiveInt = RefType[@@].refineM(5) 20 | val y: PositiveInt = 5 21 | val z = 5: PositiveInt 22 | illTyped("val a: PositiveInt = -5", "Predicate failed: \\(-5 > 0\\).*") 23 | x == y && y == z 24 | } 25 | 26 | property("(T @@ P) 0).") 20 | } 21 | 22 | property("validate without import") = secure { 23 | type OneToTen = Int Refined Interval.Closed[W.`1`.T, W.`10`.T] 24 | object OneToTen extends RefinedTypeOps[OneToTen, Int] with ScalazRefinedTypeOpsSyntax 25 | OneToTen.validate(5) ?= Validation.success(OneToTen.unsafeFrom(5)) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /modules/scalaz/shared/src/test/scala/eu/timepit/refined/scalaz/foo/ImportsSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scalaz.foo 2 | 3 | import eu.timepit.refined.scalaz._ 4 | import eu.timepit.refined.types.string.NonEmptyString 5 | import org.scalacheck.Prop._ 6 | import org.scalacheck.Properties 7 | import scalaz.Scalaz._ 8 | 9 | class ImportsSpec extends Properties("imports") { 10 | 11 | property("NonEmptyString.show") = secure { 12 | NonEmptyString.unsafeFrom("abc").shows ?= "\"abc\"" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /modules/scodec/shared/src/main/scala/eu/timepit/refined/scodec/byteVector.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scodec 2 | 3 | import eu.timepit.refined.api.Validate 4 | import eu.timepit.refined.collection.Size 5 | import eu.timepit.refined.internal.Resources 6 | import scodec.bits.ByteVector 7 | 8 | /** Module that provides `Validate` type class instances for `ByteVector`. */ 9 | object byteVector extends ByteVectorValidate 10 | 11 | private[refined] trait ByteVectorValidate { 12 | implicit def byteVectorSizeValidate[P, RP](implicit 13 | v: Validate.Aux[Long, P, RP] 14 | ): Validate.Aux[ByteVector, Size[P], Size[v.Res]] = 15 | new Validate[ByteVector, Size[P]] { 16 | override type R = Size[v.Res] 17 | 18 | override def validate(t: ByteVector): Res = { 19 | val r = v.validate(t.size) 20 | r.as(Size(r)) 21 | } 22 | 23 | override def showExpr(t: ByteVector): String = 24 | v.showExpr(t.size) 25 | 26 | override def showResult(t: ByteVector, r: Res): String = { 27 | val size = t.size 28 | val nested = v.showResult(size, r.detail.p) 29 | Resources.predicateTakingResultDetail(s"size($t) = $size", r, nested) 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /modules/scodec/shared/src/main/scala/eu/timepit/refined/scodec/package.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import _root_.scodec._ 4 | import _root_.scodec.bits.BitVector 5 | import eu.timepit.refined.api.{RefType, Validate} 6 | 7 | package object scodec { 8 | 9 | implicit def refTypeCodec[F[_, _], T, P](implicit 10 | codec: Codec[T], 11 | refType: RefType[F], 12 | validate: Validate[T, P] 13 | ): Codec[F[T, P]] = 14 | new Codec[F[T, P]] { 15 | override def sizeBound: SizeBound = 16 | codec.sizeBound 17 | 18 | override def decode(bits: BitVector): Attempt[DecodeResult[F[T, P]]] = 19 | codec.decode(bits).flatMap { t => 20 | refType.refine[P](t.value) match { 21 | case Right(tp) => Attempt.successful(DecodeResult(tp, t.remainder)) 22 | case Left(err) => Attempt.failure(Err(err)) 23 | } 24 | } 25 | 26 | override def encode(value: F[T, P]): Attempt[BitVector] = 27 | codec.encode(refType.unwrap(value)) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /modules/scodec/shared/src/test/scala/eu/timepit/refined/scodec/ByteVectorValidateSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scodec 2 | 3 | import eu.timepit.refined.TestUtils._ 4 | import eu.timepit.refined.W 5 | import eu.timepit.refined.collection.Size 6 | import eu.timepit.refined.generic.Equal 7 | import eu.timepit.refined.numeric.Greater 8 | import eu.timepit.refined.scodec.byteVector._ 9 | import org.scalacheck.Prop._ 10 | import org.scalacheck.Properties 11 | import scodec.bits.ByteVector 12 | 13 | class ByteVectorValidateSpec extends Properties("ByteVectorValidate") { 14 | 15 | property("Size.isValid") = forAll { bytes: Array[Byte] => 16 | val bv = ByteVector(bytes) 17 | isValid[Size[Greater[W.`5L`.T]]](bv) ?= (bv.size > 5L) 18 | } 19 | 20 | property("Size.showExpr") = secure { 21 | showExpr[Size[Equal[W.`5L`.T]]](ByteVector.fromValidHex("0xdeadbeef")) ?= "(4 == 5)" 22 | } 23 | 24 | property("Size.showResult") = secure { 25 | showResult[Size[Equal[W.`5L`.T]]](ByteVector.fromValidHex("0xdeadbeef")) ?= 26 | "Predicate taking size(ByteVector(4 bytes, 0xdeadbeef)) = 4 failed: Predicate failed: (4 == 5)." 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /modules/scodec/shared/src/test/scala/eu/timepit/refined/scodec/RefTypeCodecSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scodec 2 | 3 | import eu.timepit.refined.types.numeric.PosInt 4 | import org.scalacheck.Prop._ 5 | import org.scalacheck.Properties 6 | import scodec._ 7 | import scodec.bits._ 8 | import scodec.codecs.int8 9 | 10 | class RefTypeCodecSpec extends Properties("RefTypeCodec") { 11 | 12 | implicit val intCodec: Codec[Int] = int8 13 | 14 | property("decode success") = secure { 15 | Codec[PosInt].decode(bin"00000101") ?= 16 | Attempt.successful(DecodeResult(PosInt.unsafeFrom(5), BitVector.empty)) 17 | } 18 | 19 | property("decode failure") = secure { 20 | Codec[PosInt].decode(bin"10000101") ?= 21 | Attempt.failure(Err("Predicate failed: (-123 > 0).")) 22 | } 23 | 24 | property("encode success") = secure { 25 | Codec[PosInt].encode(PosInt.unsafeFrom(5)) ?= 26 | Attempt.successful(bin"00000101") 27 | } 28 | 29 | property("sizeBound") = secure { 30 | Codec[PosInt].sizeBound ?= intCodec.sizeBound 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /modules/scopt/shared/src/main/scala/eu/timepit/refined/scopt/package.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined 2 | 3 | import _root_.scopt.Read 4 | import eu.timepit.refined.api.{RefType, Validate} 5 | 6 | package object scopt { 7 | 8 | implicit def refTypeRead[F[_, _], T, P](implicit 9 | read: Read[T], 10 | refType: RefType[F], 11 | validate: Validate[T, P] 12 | ): Read[F[T, P]] = read.map(t => refType.refine[P].unsafeFrom(t)) 13 | 14 | } 15 | -------------------------------------------------------------------------------- /modules/scopt/shared/src/test/scala/eu/timepit/refined/scopt/RefTypeReadSpec.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.scopt 2 | 3 | import eu.timepit.refined.types.numeric.PosInt 4 | import org.scalacheck.Prop._ 5 | import org.scalacheck.Properties 6 | import scopt._ 7 | 8 | class RefTypeReadSpec extends Properties("RefTypeRead") { 9 | 10 | case class Config(foo: PosInt) 11 | 12 | val parser = new OptionParser[Config]("tests") { 13 | opt[PosInt]('f', "foo") 14 | .action((x, c) => c.copy(foo = x)) 15 | .text("foo is a positive integer property") 16 | } 17 | 18 | property("load success") = secure { 19 | loadConfigWithValue("10") =? 20 | Some(Config(PosInt.unsafeFrom(10))) 21 | } 22 | 23 | property("load failure (predicate)") = secure { 24 | loadConfigWithValue("0") =? 25 | None 26 | } 27 | 28 | property("load failure (wrong type)") = secure { 29 | loadConfigWithValue("abc") =? 30 | None 31 | } 32 | 33 | def loadConfigWithValue(value: String): Option[Config] = 34 | parser.parse(Array("-f", value), Config(PosInt.unsafeFrom(1))) 35 | } 36 | -------------------------------------------------------------------------------- /modules/shapeless/shared/src/main/scala/eu/timepit/refined/shapeless/typeable/package.scala: -------------------------------------------------------------------------------- 1 | package eu.timepit.refined.shapeless 2 | 3 | import _root_.shapeless.Typeable 4 | import eu.timepit.refined.api.{RefType, Validate} 5 | import scala.util.Right 6 | 7 | package object typeable { 8 | 9 | /** 10 | * `Typeable` instance for refined types. 11 | */ 12 | implicit def refTypeTypeable[F[_, _], T, P](implicit 13 | rt: RefType[F], 14 | V: Validate[T, P], 15 | T: Typeable[T], 16 | P: Typeable[P] 17 | ): Typeable[F[T, P]] = 18 | new Typeable[F[T, P]] { 19 | override def cast(t: Any): Option[F[T, P]] = 20 | T.cast(t) 21 | .flatMap(casted => 22 | rt.refine[P](casted) match { 23 | case Right(v) => Some(v) 24 | case _ => None 25 | } 26 | ) 27 | override def describe: String = s"Refined[${T.describe}, ${P.describe}]" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /notes/0.1.1.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Cross-build to Scala.js. 4 | * Updated to shapeless 2.2.3. 5 | 6 | Released on 2015-06-27 7 | -------------------------------------------------------------------------------- /notes/0.1.2.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Add `refine` function to the `Predicate` type class. 4 | * Add `Predicate.fromPartial` for creating a `Predicate` from a partial function. 5 | * Update to Scala 2.11.7 and Scala.js 0.6.4. 6 | 7 | ### New predicates 8 | 9 | [`string`](https://github.com/fthomas/refined/blob/v0.1.2/shared/src/main/scala/eu/timepit/refined/string.scala) 10 | 11 | * `Uri`: checks if a `String` is a valid URI 12 | * `Url`: checks if a `String` is a valid URL 13 | 14 | Released on 2015-07-06 15 | -------------------------------------------------------------------------------- /notes/0.1.3.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Update to shapeless 2.2.4. 4 | 5 | ### New predicates 6 | 7 | [`generic`](https://github.com/fthomas/refined/blob/v0.1.3/shared/src/main/scala/eu/timepit/refined/generic.scala) 8 | 9 | * `Subtype[U]`: witnesses that the type of a value is a subtype of `U` 10 | * `Supertype[U]`: witnesses that the type of a value is a supertype of `U` 11 | 12 | Released on 2015-07-14 13 | -------------------------------------------------------------------------------- /notes/0.2.1.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Improve error messages of predicates created from partial functions. 4 | (This includes `Regex`, `Url`, `Xml`, and more.) 5 | * Add `unwrap` function to the `internal.Wrapper` type class. 6 | 7 | ### New predicates 8 | 9 | [`string`](https://github.com/fthomas/refined/blob/v0.2.1/shared/src/main/scala/eu/timepit/refined/string.scala) 10 | 11 | * `Xml`: checks if a `String` is valid XML 12 | * `XPath`: checks if a `String` is a valid XPath expression 13 | 14 | Released on 2015-08-06 15 | -------------------------------------------------------------------------------- /notes/0.2.2.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Introduce the `RefType` type class which abstracts over `shapeless.tag.@@` 4 | and `Refined` and that allows 3rd-party types to be used as result type 5 | for refinements (e.g. [`scalaz.@@`][scalaz.@@]). `RefType` replaces the 6 | now removed `internal.Wrapper` type class. ([#48], [#53], [#54]) 7 | * Make the `Refined` constructor private ([#52]) 8 | 9 | [#48]: https://github.com/fthomas/refined/issues/48 10 | [#52]: https://github.com/fthomas/refined/issues/52 11 | [#53]: https://github.com/fthomas/refined/issues/53 12 | [#54]: https://github.com/fthomas/refined/pull/54 13 | [scalaz.@@]: https://github.com/scalaz/scalaz/blob/v7.1.3/core/src/main/scala/scalaz/package.scala#L103 14 | 15 | Released on 2015-08-17 16 | -------------------------------------------------------------------------------- /notes/0.2.3.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Add an implicit conversion from refined types to their base types. ([#55]) 4 | * `Equal[N <: Nat]` can now be used with all types that have a `Numeric` 5 | instance. This allows types like `Double @@ Not[Equal[_0]]`. 6 | * Add an inference rule to go from `Equal[N <: Nat]` to any numeric predicate. 7 | * Remove deprecated `refine`, `refineLit`, and `refineM`. 8 | * Update to Scala.js 0.6.5. 9 | 10 | [#55]: https://github.com/fthomas/refined/issues/55 11 | 12 | Released on 2015-08-31 13 | -------------------------------------------------------------------------------- /notes/0.3.1.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Add a refined-scalacheck subproject which provides 4 | [ScalaCheck][scalacheck] `Arbitrary` instances of refined types for 5 | some of refined's predicates. ([#58]) 6 | 7 | [#58]: https://github.com/fthomas/refined/issues/58 8 | [scalacheck]: http://scalacheck.org/ 9 | 10 | Released on 2015-10-17 11 | -------------------------------------------------------------------------------- /notes/0.3.3.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Add `Arbitrary` instances for numeric predicates indexed by `Nat`s and 4 | improve the implementation of the other numeric `Arbitrary` instances. 5 | Thanks to Jean-Rémi Desjardins! ([#106], [#109]) 6 | * Add the `RefType.refineMF` macro which requires that the base type must 7 | be specified and cannot be inferred from its argument. This allows to 8 | define aliases for the `RefineM` macro where the base type and 9 | predicate are fixed. ([#107]) 10 | * Update `refined-scalaz` to Scalaz 7.2.0 11 | 12 | [#106]: https://github.com/fthomas/refined/pull/106 13 | [#107]: https://github.com/fthomas/refined/issues/107 14 | [#109]: https://github.com/fthomas/refined/pull/109 15 | 16 | Released on 2015-12-18 17 | -------------------------------------------------------------------------------- /notes/0.3.4.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Improve the compiler error message of invalid type inference of 4 | refined types. ([#117], [#126]) 5 | * Remove macro code from `RefType` and do not eval `RefType` instances 6 | during macro expansion. ([#120]) 7 | * Update to Scala.js 0.6.6. ([#127]) 8 | 9 | [#117]: https://github.com/fthomas/refined/pull/117 10 | [#120]: https://github.com/fthomas/refined/pull/120 11 | [#126]: https://github.com/fthomas/refined/pull/126 12 | [#127]: https://github.com/fthomas/refined/pull/127 13 | 14 | Released on 2016-02-03 15 | -------------------------------------------------------------------------------- /notes/0.3.5.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Update to Scala.js 0.6.7. ([#129]) 4 | * Update to scodec 1.9.0. ([#130]) 5 | 6 | [#129]: https://github.com/fthomas/refined/pull/129 7 | [#130]: https://github.com/fthomas/refined/pull/130 8 | 9 | Released on 2016-02-13 10 | -------------------------------------------------------------------------------- /notes/0.3.6.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Update to shapeless 2.3.0. ([#100]) 4 | * Update to macro-compat 1.1.1. ([#131]) 5 | 6 | [#100]: https://github.com/fthomas/refined/pull/100 7 | [#131]: https://github.com/fthomas/refined/pull/131 8 | 9 | Released on 2016-02-25 10 | -------------------------------------------------------------------------------- /notes/0.3.7.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Update to Scala 2.11.8. ([#134]) 4 | * Update `refined-scalaz` to Scalaz 7.2.1 and build it for Scala.js. 5 | ([#133]) 6 | * Add an `Adjacent` type class to `refined-scalacheck` to make the 7 | numeric `Arbitrary` instances more robust. This type class allows 8 | to get rid of `filter` calls in the numeric generators. ([#135]) 9 | 10 | [#133]: https://github.com/fthomas/refined/pull/133 11 | [#134]: https://github.com/fthomas/refined/pull/134 12 | [#135]: https://github.com/fthomas/refined/pull/135 13 | 14 | Released on 2016-03-12 15 | -------------------------------------------------------------------------------- /notes/0.6.0.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Replace the type parameter `P` in `RefType#unwrap` with an 4 | existential type. ([#192]) 5 | 6 | ### Updates 7 | 8 | * Update `refined-scalacheck` to ScalaCheck 1.13.3. ([#128], [#210]) 9 | * Update `refined-scalaz` to Scalaz 7.2.6. ([#198]) 10 | * Update `refined-scodec` to scodec 1.10.3. ([#187], [#212]) 11 | * Update Scala.js to 0.6.13. ([#194], [#197], [#206]) 12 | * Update shapeless to 2.3.2. ([#196]) 13 | 14 | [#128]: https://github.com/fthomas/refined/pull/128 15 | [#187]: https://github.com/fthomas/refined/pull/187 16 | [#192]: https://github.com/fthomas/refined/pull/192 17 | [#194]: https://github.com/fthomas/refined/pull/194 18 | [#196]: https://github.com/fthomas/refined/pull/196 19 | [#197]: https://github.com/fthomas/refined/pull/197 20 | [#198]: https://github.com/fthomas/refined/pull/198 21 | [#206]: https://github.com/fthomas/refined/pull/206 22 | [#210]: https://github.com/fthomas/refined/pull/210 23 | [#212]: https://github.com/fthomas/refined/pull/212 24 | 25 | Released on 2016-10-20 26 | -------------------------------------------------------------------------------- /notes/0.6.1.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Add the `refined-pureconfig` subproject which adds support for 4 | refined types to [PureConfig](https://github.com/melrief/pureconfig). 5 | Thanks to [Viktor Lövgren](https://github.com/vlovgr)! ([#233]) 6 | * Deprecate `Refined#get` in favor of `Refined#value` to avoid 7 | confusion with `Option#get` which is an unsafe operation while 8 | `Refined#get` was always safe. ([#220]) 9 | * Remove deprecated `RefinePartiallyApplied.force` which has been 10 | renamed to `unsafeFrom` in version 0.5.0. ([#225]) 11 | 12 | ### Updates 13 | 14 | * Update to Scala 2.12.1. ([#226]) 15 | * Update to Scala.js 0.6.14. ([#232]) 16 | * Update `refined-scalaz` to Scalaz 7.2.8. ([#223]) 17 | 18 | [#220]: https://github.com/fthomas/refined/issues/220 19 | [#223]: https://github.com/fthomas/refined/pull/223 20 | [#225]: https://github.com/fthomas/refined/pull/225 21 | [#226]: https://github.com/fthomas/refined/pull/226 22 | [#232]: https://github.com/fthomas/refined/pull/232 23 | [#233]: https://github.com/fthomas/refined/pull/233 24 | 25 | Released on 2016-12-24 26 | -------------------------------------------------------------------------------- /notes/0.6.2.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Add aliases for standard refined types like 4 | `type PosInt = Int Refined Positive` or 5 | `type NegInt = Int Refined Negative` to the 6 | `eu.timepit.refined.types` package. The date and time related type 7 | aliases haven been moved from `util.time` to the `types.time` package. 8 | ([#236][#236], [#240][#240], [#249][#249]) 9 | * Add `Cogen` instance for any refined type to `refined-scalacheck`. 10 | ([#244][#244], [#248][#248]) 11 | 12 | ### Updates 13 | 14 | * Update `refined-pureconfig` to [PureConfig][pureconfig] 0.5.0. 15 | ([#245][#245]) 16 | 17 | [#236]: https://github.com/fthomas/refined/pull/236 18 | [#240]: https://github.com/fthomas/refined/pull/240 19 | [#244]: https://github.com/fthomas/refined/issues/244 20 | [#245]: https://github.com/fthomas/refined/pull/245 21 | [#248]: https://github.com/fthomas/refined/pull/248 22 | [#249]: https://github.com/fthomas/refined/pull/249 23 | [pureconfig]: https://github.com/melrief/pureconfig 24 | 25 | Released on 2017-01-12 26 | -------------------------------------------------------------------------------- /notes/0.7.0.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Move the `Eval` predicate into the new `refined-eval` module 4 | because it requires a runtime dependency on the Scala compiler. 5 | Consequently the dependency on the Scala compiler in the core 6 | module is changed to a "provided" dependency. 7 | Thanks to [Chris Hodapp](https://github.com/clhodapp)! 8 | ([#207][#207], [#251][#251]) 9 | 10 | Note that if you are using refined's macros, you need to add 11 | ```sbt 12 | "org.scala-lang" % "scala-compiler" % scalaVersion.value % Provided 13 | ``` 14 | now to your `libraryDependencies`. 15 | 16 | ### Updates 17 | 18 | * Update `refined-pureconfig` to [PureConfig][pureconfig] 0.5.1. 19 | ([#252][#252]) 20 | 21 | [#207]: https://github.com/fthomas/refined/issues/207 22 | [#251]: https://github.com/fthomas/refined/pull/251 23 | [#252]: https://github.com/fthomas/refined/pull/252 24 | [pureconfig]: https://github.com/melrief/pureconfig 25 | 26 | Released on 2017-01-24 27 | -------------------------------------------------------------------------------- /notes/0.8.0.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Improve `MacroUtils.eval` by calling `duplicate` before untypechecking 4 | the tree. ([#262][#262]) Hopefully this fixes nondeterministic compiler 5 | crashes like [#260][#260]. 6 | * Remove "provided" from the dependency on the Scala compiler again. 7 | This means that you do not need to add a dependency on the compiler if 8 | you are using refined's macros. ([#269][#269]) See [#256][#256] for more 9 | details. 10 | 11 | ### Updates 12 | 13 | * Update `refined-pureconfig` to PureConfig 0.6.0. 14 | Thanks to [Viktor Lövgren](https://github.com/vlovgr)! 15 | ([#264][#264]) 16 | * Update `refined-scalaz` to Scalaz 7.2.10. 17 | ([#258][#258], [#267][#267]) 18 | 19 | [#258]: https://github.com/fthomas/refined/pull/258 20 | [#256]: https://github.com/fthomas/refined/issues/256 21 | [#260]: https://github.com/fthomas/refined/issues/260 22 | [#262]: https://github.com/fthomas/refined/pull/262 23 | [#264]: https://github.com/fthomas/refined/pull/264 24 | [#267]: https://github.com/fthomas/refined/pull/267 25 | [#269]: https://github.com/fthomas/refined/pull/269 26 | 27 | Released on 2017-03-17 28 | -------------------------------------------------------------------------------- /notes/0.8.1.markdown: -------------------------------------------------------------------------------- 1 | ### New predicates 2 | 3 | [`numeric`](https://github.com/fthomas/refined/blob/v0.8.1/modules/core/shared/src/main/scala/eu/timepit/refined/numeric.scala) 4 | 5 | * `Modulo[N, O]`: checks if a numeric value modulo `N` is `O`. ([#278][#278]) 6 | * `Divisible[N]`: checks if a numeric value is evenly divisible by `N`. ([#278][#278]) 7 | * `NonDivisible[N]`: checks if a numeric value is not evenly divisible by `N`. ([#278][#278]) 8 | * `Even`: checks if a numeric value is evenly divisible by 2. ([#278][#278]) 9 | * `Odd`: checks if a numeric value is not evenly divisible by 2. ([#278][#278]) 10 | 11 | Thanks to [Viktor Lövgren](https://github.com/vlovgr) for these predicates! 12 | 13 | ### Updates 14 | 15 | * Update `refined-pureconfig` to PureConfig 0.7.0. 16 | Thanks to [Torsten Scholak](https://github.com/tscholak)! 17 | ([#273][#273]) 18 | * Update to Scala.js 0.6.16. ([#270][#270], [#279][#279]) 19 | * Update `refined-scalaz` to Scalaz 7.2.12. ([#281][#281]) 20 | 21 | [#270]: https://github.com/fthomas/refined/pull/270 22 | [#273]: https://github.com/fthomas/refined/pull/273 23 | [#278]: https://github.com/fthomas/refined/pull/278 24 | [#279]: https://github.com/fthomas/refined/pull/279 25 | [#281]: https://github.com/fthomas/refined/pull/281 26 | 27 | Released on 2017-05-08 28 | -------------------------------------------------------------------------------- /notes/0.8.2.markdown: -------------------------------------------------------------------------------- 1 | ### Changes 2 | 3 | * Add the `refined-cats` subproject which adds `Eq` and `Show` 4 | instances for any refined type. 5 | Thanks to [Derek Morr](https://github.com/derekmorr)! 6 | ([#284][#284]) 7 | 8 | ### Updates 9 | 10 | * Update `refined-pureconfig` to PureConfig 0.7.2. 11 | Thanks to [Viktor Lövgren](https://github.com/vlovgr)! 12 | ([#283][#283]) 13 | * Update `refined-scalaz` to Scalaz 7.2.13. ([#288][#288]) 14 | 15 | [#283]: https://github.com/fthomas/refined/pull/283 16 | [#284]: https://github.com/fthomas/refined/pull/284 17 | [#288]: https://github.com/fthomas/refined/pull/288 18 | 19 | Released on 2017-06-02 20 | -------------------------------------------------------------------------------- /notes/0.8.4.markdown: -------------------------------------------------------------------------------- 1 | ### Performance improvements 2 | 3 | * Avoid calling `eval` in refine and infer macros for known `RefType` 4 | instances. This reduces compilation times by roughly 26% for all 5 | compile-time refinements with common predicates. 6 | ([#332][#332], [#333][#333]) 7 | * Avoid calling `eval` in refine macros for a few `Validate` instances. 8 | In combination with the above change, this can reduce compilation times 9 | up to 67%. ([#334][#334]) 10 | * Inline `Validate.instance` in the definition of `Validate.fromPredicate`. 11 | This makes `refineV[Positive](x)` for instance 25% faster. ([#335][#335]) 12 | * Optimize `Validate` instances that are built with `Validate.fromPartial`. 13 | ([#336][#336]) 14 | 15 | 16 | [#332]: https://github.com/fthomas/refined/pull/332 17 | [#333]: https://github.com/fthomas/refined/pull/333 18 | [#334]: https://github.com/fthomas/refined/pull/334 19 | [#335]: https://github.com/fthomas/refined/pull/335 20 | [#336]: https://github.com/fthomas/refined/pull/336 21 | 22 | Released on 2017-10-04 23 | -------------------------------------------------------------------------------- /notes/0.9.10.markdown: -------------------------------------------------------------------------------- 1 | ### Updates 2 | 3 | * Update Cats to 2.0.0. ([#632][#632] by [@fthomas][@fthomas]) 4 | * Update PureConfig to 0.12.0. ([#672][#672] by [@scala-steward][@scala-steward]) 5 | 6 | [#632]: https://github.com/fthomas/refined/pull/632 7 | [#672]: https://github.com/fthomas/refined/pull/672 8 | 9 | [@fthomas]: https://github.com/fthomas 10 | [@scala-steward]: https://github.com/scala-steward 11 | 12 | Released on 2019-09-16 -------------------------------------------------------------------------------- /notes/0.9.2.markdown: -------------------------------------------------------------------------------- 1 | ### Updates 2 | 3 | * Update `refined-scalaz` to Scalaz 7.2.25. 4 | ([#536][#536] by [@fthomas][@fthomas]) 5 | 6 | [#536]: https://github.com/fthomas/refined/pull/536 7 | 8 | [@fthomas]: https://github.com/fthomas 9 | 10 | Released on 2018-07-04 11 | -------------------------------------------------------------------------------- /notes/0.9.4.markdown: -------------------------------------------------------------------------------- 1 | ### New features 2 | 3 | * Add `NonNaN` predicate that checks if a floating-point is not NaN. 4 | ([#596][#596] by [@dcastro][@dcastro]) 5 | 6 | ### Bug fixes 7 | 8 | * Move derivation instances for `RefType` into new `cats.derivation` 9 | and `scalaz.derivation` modules to fix "diverging implicit expansion" 10 | errors with wildcard imports of `cats._` and `scalaz._`. 11 | ([#554][#554] by [@fthomas][@fthomas]) 12 | 13 | ### Updates 14 | 15 | * Update Scalaz to 7.2.27. ([#588][#588] by [@scala-steward][@scala-steward]) 16 | * Update Scala.js to 0.6.26. ([#591][#591] by [@scala-steward][@scala-steward]) 17 | * Update PureConfig to 0.10.1. ([#593][#593] by [@scala-steward][@scala-steward]) 18 | * Update Cats to 1.5.0. ([#594][#594] by [@scala-steward][@scala-steward]) 19 | * Update scopt to 3.7.1. ([#597][#597] by [@scala-steward][@scala-steward]) 20 | 21 | [#554]: https://github.com/fthomas/refined/pull/554 22 | [#588]: https://github.com/fthomas/refined/pull/588 23 | [#591]: https://github.com/fthomas/refined/pull/591 24 | [#593]: https://github.com/fthomas/refined/pull/593 25 | [#594]: https://github.com/fthomas/refined/pull/594 26 | [#596]: https://github.com/fthomas/refined/pull/596 27 | [#597]: https://github.com/fthomas/refined/pull/597 28 | 29 | [@dcastro]: https://github.com/dcastro 30 | [@fthomas]: https://github.com/fthomas 31 | [@scala-steward]: https://github.com/scala-steward 32 | 33 | Released on 2019-01-18 34 | -------------------------------------------------------------------------------- /notes/0.9.5.markdown: -------------------------------------------------------------------------------- 1 | ### Bug fixes 2 | 3 | * Add type parameter for the predicate type to `auto.autoUnwrap` in 4 | order to improve type inference. 5 | ([#608][#608], [#612][#612] by [@fthomas][@fthomas]) 6 | 7 | ### Updates 8 | 9 | * Update Cats to 1.6.0. ([#609][#609] by [@scala-steward][@scala-steward]) 10 | * Update scodec to 1.11.3. ([#611][#611] and [#617][#617] by [@scala-steward][@scala-steward]) 11 | * Update PureConfig to 0.10.2. ([#615][#615] by [@scala-steward][@scala-steward]) 12 | * Update Scala.js to 0.6.27. ([#625][#625] by [@scala-steward][@scala-steward]) 13 | * Update Scala 2.13 to 2.13.0-RC1. ([#627][#627] by [@fthomas][@fthomas]) 14 | 15 | [#608]: https://github.com/fthomas/refined/issues/608 16 | [#609]: https://github.com/fthomas/refined/pull/609 17 | [#611]: https://github.com/fthomas/refined/pull/611 18 | [#612]: https://github.com/fthomas/refined/pull/612 19 | [#615]: https://github.com/fthomas/refined/pull/615 20 | [#617]: https://github.com/fthomas/refined/pull/617 21 | [#625]: https://github.com/fthomas/refined/pull/625 22 | [#627]: https://github.com/fthomas/refined/pull/627 23 | 24 | [@fthomas]: https://github.com/fthomas 25 | [@scala-steward]: https://github.com/scala-steward 26 | 27 | Released on 2019-04-16 -------------------------------------------------------------------------------- /notes/0.9.6.markdown: -------------------------------------------------------------------------------- 1 | ### Updates 2 | 3 | * Update Scala Native to 0.3.9. ([#631][#631] by [@scala-steward][@scala-steward]) 4 | * Update Scala 2.13 to 2.13.0-RC2 and Scala.js to 0.6.28. 5 | ([#637][#637] by [@fthomas][@fthomas]) 6 | 7 | [#631]: https://github.com/fthomas/refined/pull/631 8 | [#637]: https://github.com/fthomas/refined/pull/637 9 | 10 | [@fthomas]: https://github.com/fthomas 11 | [@scala-steward]: https://github.com/scala-steward 12 | 13 | Released on 2019-05-25 -------------------------------------------------------------------------------- /notes/0.9.7.markdown: -------------------------------------------------------------------------------- 1 | ### Updates 2 | 3 | * Update Scala 2.13 to 2.13.0-RC3. ([#639][#639] by [@fthomas][@fthomas]) 4 | 5 | [#639]: https://github.com/fthomas/refined/pull/639 6 | 7 | [@fthomas]: https://github.com/fthomas 8 | 9 | Released on 2019-05-31 -------------------------------------------------------------------------------- /notes/0.9.8.markdown: -------------------------------------------------------------------------------- 1 | ### New features 2 | 3 | * Add `validateNec` and `validateNel` to `cats.syntax`. 4 | ([#642][#642] by [@BalmungSan][@BalmungSan]) 5 | 6 | ### Updates 7 | 8 | * Update Scala 2.13 to 2.13.0. ([#643][#643] by [@fthomas][@fthomas]) 9 | 10 | [#642]: https://github.com/fthomas/refined/pull/642 11 | [#643]: https://github.com/fthomas/refined/pull/643 12 | 13 | [@BalmungSan]: https://github.com/BalmungSan 14 | [@fthomas]: https://github.com/fthomas 15 | 16 | Released on 2019-06-10 -------------------------------------------------------------------------------- /notes/0.9.9.markdown: -------------------------------------------------------------------------------- 1 | ### New features 2 | 3 | * Add `Semigroup` and `Monoid` instances for refined numeric types. 4 | ([#618][#618] by [@dm-tran][@dm-tran]) 5 | 6 | ### Build 7 | 8 | * Release all modules except `refiend-cats` and `refined-scalacheck_1.13` 9 | for Scala 2.13. ([#658][#658], [#660][#660] by [@fthomas][@fthomas]) 10 | 11 | ### Updates 12 | 13 | * Update scodec-core to 1.11.4. ([#645][#645] by [@scala-steward][@scala-steward]) 14 | * Update PureConfig to 0.11.1. ([#646][#646] by [@scala-steward][@scala-steward]) 15 | * Update scalaz-core to 7.2.28. ([#653][#653] by [@scala-steward][@scala-steward]) 16 | 17 | [#618]: https://github.com/fthomas/refined/pull/618 18 | [#645]: https://github.com/fthomas/refined/pull/645 19 | [#646]: https://github.com/fthomas/refined/pull/646 20 | [#653]: https://github.com/fthomas/refined/pull/653 21 | [#658]: https://github.com/fthomas/refined/pull/658 22 | [#660]: https://github.com/fthomas/refined/pull/660 23 | 24 | [@dm-tran]: https://github.com/dm-tran 25 | [@fthomas]: https://github.com/fthomas 26 | [@scala-steward]: https://github.com/scala-steward 27 | 28 | Released on 2019-07-27 -------------------------------------------------------------------------------- /notes/about.markdown: -------------------------------------------------------------------------------- 1 | [refined][refined] is a library for refining types with type-level predicates. 2 | 3 | [refined]: https://github.com/fthomas/refined 4 | -------------------------------------------------------------------------------- /project/LatestVersion.scala: -------------------------------------------------------------------------------- 1 | import sbt._ 2 | 3 | object LatestVersion extends AutoPlugin { 4 | object autoImport { 5 | 6 | lazy val latestVersion: SettingKey[String] = 7 | settingKey[String]("latest released version") 8 | 9 | lazy val bincompatVersions: SettingKey[Map[String, Set[String]]] = 10 | settingKey[Map[String, Set[String]]]( 11 | "set of versions that are checked for binary compatibility with the current HEAD" 12 | ) 13 | 14 | lazy val unreleasedModules: SettingKey[Set[String]] = 15 | settingKey[Set[String]]("the names of modules which are new in the upcoming release") 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /project/build.properties: -------------------------------------------------------------------------------- 1 | sbt.version=1.11.0 2 | 3 | -------------------------------------------------------------------------------- /project/plugins.sbt: -------------------------------------------------------------------------------- 1 | ThisBuild / evictionErrorLevel := Level.Info 2 | 3 | addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1") 4 | 5 | addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.11.0") 6 | 7 | addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.4") 8 | 9 | addSbtPlugin("io.github.sbt-doctest" % "sbt-doctest" % "0.11.2") 10 | 11 | addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.1.4") 12 | 13 | addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.3.2") 14 | 15 | addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "1.3.2") 16 | 17 | addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.19.0") 18 | 19 | addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.5.7") 20 | 21 | addSbtPlugin("org.scoverage" % "sbt-scoverage" % "2.3.1") 22 | 23 | addSbtPlugin("org.typelevel" % "sbt-typelevel-mergify" % "0.7.7") 24 | 25 | addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.7") 26 | -------------------------------------------------------------------------------- /scripts/release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | OLD_VERSION=$(git describe --abbrev=0 --tags | tr -d 'v\n') 4 | if [ -n "$2" ]; then 5 | OLD_VERSION="$2" 6 | fi 7 | 8 | VERSION="$1" 9 | if [ -z "$VERSION" ]; then 10 | exit 1 11 | fi 12 | 13 | README="README.md" 14 | echo "Replace $OLD_VERSION with $VERSION in $README" 15 | sed -i -e "s/$OLD_VERSION/$VERSION/g" "$README" 16 | git add "$README" 17 | 18 | git commit -a -m "Setting version to $VERSION" 19 | git tag -a -s "v$VERSION" -m "Releasing $VERSION" 20 | 21 | LATEST_VERSION_SBT="latestVersion.sbt" 22 | echo "Update $LATEST_VERSION_SBT" 23 | LATEST_VERSION_DEF="ThisBuild \\/ latestVersion :=" 24 | sed -i -e "s/$LATEST_VERSION_DEF \"$OLD_VERSION\"/$LATEST_VERSION_DEF \"$VERSION\"/" \ 25 | "$LATEST_VERSION_SBT" 26 | sed -i -e "s/\/\/ NEXT_VERSION/, \"$VERSION\"\n \/\/ NEXT_VERSION/" "$LATEST_VERSION_SBT" 27 | sbt scalafmtSbt 28 | git add "$LATEST_VERSION_SBT" 29 | 30 | git commit -a -m "Set $VERSION as latestVersion" 31 | 32 | git push 33 | git push --tags 34 | --------------------------------------------------------------------------------