Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow len-as-condition for explicit comparison #2684

Closed
timokau opened this issue Jan 9, 2019 · 9 comments · Fixed by #2815
Closed

Allow len-as-condition for explicit comparison #2684

timokau opened this issue Jan 9, 2019 · 9 comments · Fixed by #2815
Labels
Enhancement ✨ Improvement to a component Good first issue Friendly and approachable by new contributors

Comments

@timokau
Copy link

timokau commented Jan 9, 2019

Steps to reproduce

if len([]) == 0:
  pass

pylint will lint this as len-as-condition. This seems to go back to PEP stating:

  • For sequences, (strings, lists, tuples), use the fact that empty sequences are false.

Yes:

if not seq:`
if seq:

No:

if len(seq):
if not len(seq):

While I do agree that if len(seq) is not ideal, I don't think the same applies to if len(seq) == 0. I personally prefer the explicitness of the comparison and the applicability to everything that supports len. There is also the point of consistency in comarisons like:

if len(seq) == 0:
    pass
elif len(seq) == 1:
    pass

Current behavior

if len([]) and if len([]) == 0 are both linted.

Expected behavior

Only if len([]) is linted.

pylint --version output

pylint 2.2.2
astroid 2.1.0
Python 3.7.2 (default, Dec 24 2018, 03:41:55) 
[GCC 7.3.0]
@PCManticore
Copy link
Contributor

This makes sense, thanks for creating an issue.

@PCManticore PCManticore added Enhancement ✨ Improvement to a component Good first issue Friendly and approachable by new contributors labels Jan 13, 2019
@andreasvc
Copy link

andreasvc commented Feb 2, 2019

In addition, the warning is triggered even for objects for which bool() is problematic, for example numpy arrays or lxml nodes:

>>> import numpy
>>> a=numpy.zeros((3,3))
>>> if a: ...
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> import lxml.etree
>>> b=lxml.etree.parse('1.xml').find('//node')
>>> if b: ...
FutureWarning: The behavior of this method will change in future versions. Use specific 'len(elem)' or 'elem is not None' test instead.

A solution would be to follow PEP8 by raising this warning only for (subclasses of) strings, lists, tuples. Both of the above objects implement bool() and len(), but these cannot be expected to behave the same as strings, lists, or tuples.

@PCManticore
Copy link
Contributor

@andreasvc That sounds like a good suggestion, thanks.

@PaulRenvoise
Copy link
Contributor

Hi @timokau @PCManticore,

I'd like to provide a fix for this issue, but I have a question:
Do we agree that the only cases where len-as-condition should be raised are only when an str, list, tuple or set's length is used in a test condition without any comparison with another constant ?

Here's a list, where 'op' is either a str, list, tuple, or set:

if len(op):
    pass

if not len(op):
    pass

if cond and len(op):  # and the other way around/when using 'or'
    pass

if cond and not len(op):  # and the other way around/when using 'or'
    pass
while len(op):
    pass

while not len(op):
    pass

while cond and len(op):  # and the other way around/when using 'or'
    pass

while cond and not len(op):  # and the other way around/when using 'or'
    pass
assert len(op)

assert not len(op)

assert len(op), msg

assert cond or len(op), msg  # as well as when using 'and'

@andreasvc
Copy link

@PaulRenvoise strictly speaking, the quoted parted of PEP8 talks only about sequences. If you're going to include set (I think you should), you should include dict as well.

@PaulRenvoise
Copy link
Contributor

@andreasvc Ah, you're right, I forgot about dicts! Thanks

@timokau
Copy link
Author

timokau commented Mar 16, 2019

I agree in principle, but why limit the type at all? Is there any valid use case for using len as condition without explicit comparison?

@PaulRenvoise
Copy link
Contributor

PaulRenvoise commented Mar 16, 2019

I created the PR #2815 to fix this issue, with the following changes:

  • Remove len(xx) checks when in a comparison
  • Add "without comparison" to the len-as-condition message
  • Provided another suggestion in the len-as-condition description
  • Marked old errors as safe, and added new error cases in len_checks.{py,txt}

@JayRizzo
Copy link

JayRizzo commented Apr 3, 2019

Current System

ProductName:	Mac OS X
ProductVersion:	10.14.3
BuildVersion:	18D109

$ pylint --version
pylint 2.2.2
astroid 2.1.0
Python 3.7.0 (default, Jul 23 2018, 20:22:55) 
[Clang 9.1.0 (clang-902.0.39.2)]

Hi all, I don't know if this is the most appropriate, approach on this issue, But I did want to share my findings. I did update my pylint but still got this issue.
I found that a simple work around if you want to get around this issue you can apply the .__trunc__() to the line.

As by adding the int.attribute it has satisfied the pylint complaint on this issue.
To see it in context or for more info you can see my post on SO..

Thank you all for your work & contributions, your efforts are appreciated!

knakad added a commit to knakad/sagemaker-python-sdk that referenced this issue Jul 3, 2019
The Pylint check is not actually enabled in this commit as it conflicts
directly with NumPy. Pylint has corrected this, and it will be included
in their next release (2.4.0):
pylint-dev/pylint#2684

Once Pylint 2.4.0 is released, we can consume it and remove this check.
A summary of this information is included in a TODO near the relevant
Pylint disable rule (len-as-condition).
knakad added a commit to aws/sagemaker-python-sdk that referenced this issue Jul 3, 2019
The Pylint check is not actually enabled in this commit as it conflicts
directly with NumPy. Pylint has corrected this, and it will be included
in their next release (2.4.0):
pylint-dev/pylint#2684

Once Pylint 2.4.0 is released, we can consume it and remove this check.
A summary of this information is included in a TODO near the relevant
Pylint disable rule (len-as-condition).
pengk19 pushed a commit to pengk19/sagemaker-python-sdk that referenced this issue Jul 12, 2019
The Pylint check is not actually enabled in this commit as it conflicts
directly with NumPy. Pylint has corrected this, and it will be included
in their next release (2.4.0):
pylint-dev/pylint#2684

Once Pylint 2.4.0 is released, we can consume it and remove this check.
A summary of this information is included in a TODO near the relevant
Pylint disable rule (len-as-condition).
knakad pushed a commit to knakad/sagemaker-python-sdk that referenced this issue Dec 4, 2019
* Set eureka VERSION file

* Eureka master (aws#145)

* Eureka trial tracking interface

* Add experiments developer guides (aws#147)

* Add experiments developer guides

* Eureka master (aws#148)

* Add experiments developer guides

* Move to new experiment / trial / trial run data model. Add TrialRun class.

* Eureka master (aws#149)

* Add Trial class

* Experiment class (aws#151)

* Introduce active-record design, include first concrete type - Experiment.

* Add Trial and TrialRun active record classes (aws#152)


* Add Trial and TrialRun active records. Add common created_time / last_modified_time to Record

* List method (aws#153)


* Add general list classmethod to Record. Add concrete impl to experiment.Experiment

* Eureka master (aws#154)

* Use general list method in all list* methods in experiment, trial, trial_run

* Add Trial Run Tracker (aws#156)

* Add Trial Run Tracker

* Add helper methods to Experiment and Trial for fast-creating Trials and TrialRunTrackers

* Set Eureka build to just run linters, doc build, and unit tests

* Add integration tests (aws#159)

* Add experiment and trial integegration tests

* TrialRun bug fixes (aws#160)

Introduce UpdatedData property on TrialRun

* Adapt Python SDK to Experiments Api changes (aws#164)

* Move experiment to new api
* Pin pytest version to 4.4.1

* Fix list trials by experiment without passing experiment name. (aws#166)

* Pass experiment name for list trial api call.

* Eureka master (aws#167)

Flatten trial name input for create_trial

* Make providing the step name optional when creating a trial tracker (aws#169)

* Make step name optional when creating tracker

* Make create tracker obtain TRAINING_JOB_ARN from the environment. (aws#186)

* Make create tracker obtain TRAINING_JOB_ARN from the environment.

* when trial creates a tracker, the training_job_arn can be automatically set as source arn when creating the trial stage.
* correpsonding unit test.

* Add source_arn back as optional param for create_tracker

* make source_arn an optional param for create_tracker function.

* Resolving source arn skeleton for jobs.

* Changing _resolve_job_arn to _resolve_source_arn.

* Using generator to resolve source arn from the environment.

* TrialAnalytics class to convert trial step data to pandas dataframe (aws#188)

* TrialAnalytics class to convert trial stage data to pandas data frame
* pin version flake8-future-import to 0.4.5 to avoid build failure on import annotations missing
* pandas column ordering is different in py27 and py37. Sorting columns to make the order deterministic

* * Rename step to component (aws#194)

* Use new TrialComponent API structure for metrics, artifacts and parameters

* Improve documentation (aws#199)

* Improve documentation and remove unsupported parameters to list_trial_components

* minor doc update

* remove hardcoded alpha endpoint for experiments (aws#201)

* Generate sphinx docs for experiment classes (aws#204)

* Update Sphinx RST files to generate documentation for experiment classes

* Merging master branch in to eureka-master (aws#206)

* prepare release v1.18.16

* update development version to v1.18.17.dev0

* fix: use unique names for test training jobs (aws#765)

* prepare release v1.18.17

* update development version to v1.18.18.dev0

* change: add automatic model tuning integ test for TF script mode (aws#766)

* prepare release v1.18.18

* update development version to v1.18.19.dev0

* change: skip p2/p3 tests in eu-central-1 (aws#769)

* prepare release v1.18.19

* update development version to v1.18.20.dev0

* feature: add document embedding support to Object2Vec algorithm (aws#772)

* prepare release v1.19.0

* update development version to v1.19.1.dev0

* change: add py2 deprecation message for the deep learning framework images (aws#768)

* prepare release v1.19.1

* update development version to v1.19.2.dev0

* feature: add RL Ray 0.6.5 support (aws#779)

* fix: adjust Ray test script for Ray 0.6.5 (aws#781)

* fix: prevent false positive PR test results (aws#783)

* prepare release v1.20.0

* update development version to v1.20.1.dev0

* fix: update TrainingInputMode with s3_input InputMode (aws#776)

* prepare release v1.20.1

* update development version to v1.20.2.dev0

* fix: pin pytest version to 4.4.1 to avoid pluggy version conflict (aws#788)

* prepare release v1.20.2

* update development version to v1.20.3.dev0

* documentation: fix docs in regards to transform_fn for mxnet (aws#790)

* fix: skip local file check for TF requirements file when source_dir is an S3 URI (aws#798)

* fix: run tests if buildspec.yml has been modified (aws#786)

* prepare release v1.20.3

* update development version to v1.20.4.dev0

* feature: Support for TFS preprocessing (aws#797)

* prepare release v1.21.0

* update development version to v1.21.1.dev0

* fix: repack model function works without source directory (aws#804)

* prepare release v1.21.1

* update development version to v1.21.2.dev0

* fix: emit training jobs tags to estimator (aws#803)

* fix: set _current_job_name in attach() (aws#808)

* prepare release v1.21.2

* update development version to v1.21.3.dev0

* fix: honor source_dir from S3 (aws#811)

* feature: add encryption option to "record_set" (aws#794)

* feature: add encryption option to "record_set"

* prepare release v1.22.0

* update development version to v1.22.1.dev0

* documentation: update using_sklearn.rst parameter name (aws#814)

Incorrect parameter name in docs. Updated to match what is implemented in the method and what is used in other estimators.

* feature: support MXNet 1.4 with MMS (aws#812)

* prepare release v1.23.0

* update development version to v1.23.1.dev0

* feature: add region check for Neo service (aws#806)

* prepare release v1.24.0

* update development version to v1.24.1.dev0

* fix: add better default transform job name handling within Transformer (aws#822)

* feature: repack_model support dependencies and code location (aws#821)

* documentation: TFS support for pre/processing functions (aws#807)

* change: skip p2 tests in ap-south-east (aws#823)

* prepare release v1.25.0

* update development version to v1.25.1.dev0

* fix: use unique job name in hyperparameter tuning test (aws#829)

* prepare release v1.25.1

* update development version to v1.25.2.dev0

* feature: Add extra_args to enable encrypted objects upload (aws#836)

* change: downgrade c5 in integ tests and test all TF Script Mode images (aws#840)

* feature: emit estimator transformer tags to model (aws#815)

* doc: include FrameworkModel and ModelPackage in API docs (aws#833)

* prepare release v1.26.0

* update development version to v1.26.1.dev0

* fix: fix logger creation in Chainer integ test script (aws#843)

only one test failed due to a timeout. (the corresponding test failed with the other Python version.) talked to Rui offline.

* feature: add wait argument to estimator deploy (aws#842)

* prepare release v1.27.0

* update development version to v1.27.1.dev0

* feature: Add DataProcessing Fields for Batch Transform (aws#827)

* prepare release v1.28.0

* update development version to v1.28.1.dev0

* Update setup.py (aws#859)

* prepare release v1.28.1

* update development version to v1.28.2.dev0

* fix: prevent race condition in vpc tests (aws#863)

* prepare release v1.28.2

* update development version to v1.28.3.dev0

* doc: clean up MXNet and TF documentation (aws#865)

* doc: fix punctuation in MXNet version list (aws#866)

* change: update Sagemaker Neo regions and instance families (aws#862)

* prepare release v1.28.3

* update development version to v1.28.4.dev0

* feature: network isolation mode in training (aws#791)

* feature: network isolation mode in training

* feature: network isolation mode in tar support training

* change: documentation and check describe training job network isolation

* doc update

* doc update, remove inference section

* sourcedir

* type error fix

* change: moving not canary TFS tests to local mode (aws#870)

* Integrate black into development process (aws#873)

* change: Add Black formatting tool as dependency

As of this commit, Black formatting tool can be run with 'tox -e black-format'.
Black does not run as part of any automated process, yet.

Black is pulled in as a test dependency only if the Python version
is greater than 3.6, as the tool is not vended as part of any
earlier Python version.

* change: Resolve Black formatting failures

Black is unable to handle trailing 'L' or 'l' which is no longer
supported as of python 3.8.

This commit removes those unnecessary 'long' identifiers.

https://www.python.org/dev/peps/pep-0237/

* change: Format all files using Black

This commit contains no functional changes.

* change: Manually resolve flake8 violations after formatting

* change: Manually resolve pylint violations after formatting

* change: Enable black locally and in automated build.

This commit enables black-format as part of "tox tests/unit", in order to
format all files.
It also enables black-check as part of the remote builds, in order to
verify that all files are properly formatted.

* prepare release v1.29.0

* update development version to v1.29.1.dev0

* feature: add git_config and git_clone, validate method (aws#832)

* fix: add pytest.mark.local_mode annotation to broken tests (aws#876)

* fix: add pytest.mark.local_mode annotation to tests

* feature: add TensorFlow 1.13 support (aws#860)

* prepare release v1.30.0

* update development version to v1.30.1.dev0

* fix: add pytest.mark.local_mode annotation to broken tests (aws#884)

* change: remove unnecessary P3 tests from TFS integration tests (aws#885)

* change: allow only one integration test run per time (aws#880)

* change: Update buildspec.yml (aws#887)

* feature: use deep learning images (aws#883)

* prepare release v1.31.0

* update development version to v1.31.1.dev0

* change: build spec improvements. (aws#888)

* fix: remove unnecessary failure case tests (aws#892)

* change: print build execution time (aws#890)

* prepare release v1.31.1

* update development version to v1.31.2.dev0

* fix git test in test_estimator.py (aws#894)

* feature: support Endpoint_type for TF transform (aws#881)

* prepare release v1.32.0

* update development version to v1.32.1.dev0

* change: separate unit, local mode, and notebook tests in different buildspecs (aws#898)

* change: fix notebook tests (aws#900)

* Update displaytime.sh (aws#901)

* doc: refactor the overview topic in the sphinx project (aws#877)

* change: tighten pylint config and expand C and R exceptions (aws#899)

This commit tightens the pylint config with
inspiration from several of Google's pylint
configs.

This commit also expands the C and R exceptions
and disables the specific rules that cause issues
in this package.

* change: correct code per len-as-condition Pylint check (aws#902)

The Pylint check is not actually enabled in this commit as it conflicts
directly with NumPy. Pylint has corrected this, and it will be included
in their next release (2.4.0):
pylint-dev/pylint#2684

Once Pylint 2.4.0 is released, we can consume it and remove this check.
A summary of this information is included in a TODO near the relevant
Pylint disable rule (len-as-condition).

* prepare release v1.32.1

* update development version to v1.32.2.dev0

* change: remove superfluous parens per Pylint rule (aws#903)

* change: enable logging-format-interpolation pylint check (aws#904)

* documentation: add pypi, rtd, black badges to readme (aws#910)

* prepare release v1.32.2

* update development version to v1.32.3.dev0

* feature: allow custom model name during deploy (aws#792)

* feature: allow custom model name during deploy

* black check

* feature: git support for hosting models (aws#878)

* git integration for serving

* fix: Add ap-northeast-1 to Neo algorithms region map (aws#897)

* fix: reset default output path in Transformer.transform  (aws#905)

* fix: reset default output path on create transform job

* Unit and integration tests

* change: enable logging-not-lazy pylint check (aws#909)

* change: enable wrong-import-position pylint check (aws#907)

* change: enable wrong-import-position pylint check

* change: updating import pattern for sagemaker.tensorflow

* fix: fixing integration tests

* change: reformatting

* change: enable signature-differs pylint check (aws#915)

* Revert "change: enable wrong-import-position pylint check (aws#907)" (aws#916)

This reverts commit 8489f86.

* change: enable wrong-import-position pylint check (aws#917)

* change: remove TODO comment on import-error Pylint check (aws#918)

By running Pylint before any of the unit tests (and dependency
installs), the import-error check will always fail since the
dependencies are not yet installed.

We could move Pylint to a later stage to resolve this, but there's
value in this quick check occurring before the unit tests.

As a result, this Pylint check is being disabled.

* prepare release v1.33.0

* update development version to v1.33.1.dev0

* change: enable unidiomatic-typecheck pylint check (aws#921)

* change: enable no-else-return and no-else-raise pylint checks (aws#925)

* change: fix list serialization for 1P algos (aws#922)

* change: enable simplifiable-if-expression pylint checks (aws#926)

* feature: deal with credentials for Git support for GitHub (aws#914)

add authentication info

* feature: Git integration for CodeCommit (aws#927)

* add functions, tests and doc for CodeCommit

* change: enable inconsistent-return-statements Pylint check (aws#930)

Note that this commit also raises ValueErrors in situations that would
previously have returned None.

Per PEP8: Be consistent in return statements. Either all return
statements in a function should return an expression, or none of them
should. If any return statement returns an expression, any return
statements where no value is returned should explicitly state this as
return None, and an explicit return statement should be present at the
end of the function (if reachable).

* change: enable consider-merging-isinstance Pylint check (aws#932)

Note that this commit will also enable simplifiable-if-statement, as
there are no code changes needed for it.

* change: enable attribute-defined-outside-init Pylint check (aws#933)

The logic behind this rule is to improve readability by defining all
the attributes of a class inside the init function, even if it simply
sets them to None.

* change: enable wrong-import-order Pylint check (aws#935)

Per PEP8:
Imports should be grouped in the following order:
1- Standard library imports.
2- Related third party imports.
3- Local application/library specific imports.

*  change: enable ungrouped-imports Pylint check (aws#936)

* change: enable wrong-import-order Pylint check

Per PEP8:
Imports should be grouped in the following order:
1- Standard library imports.
2- Related third party imports.
3- Local application/library specific imports.

* change: fix attach for 1P algorithm estimators (aws#931)

* change: set num_processes_per_host only if provided by user (aws#928)

*  change: enable consider-using-in Pylint check (aws#938)

* change: enable consider-using-in Pylint check

*  change: enable too-many-public-methods Pylint check (aws#939)

* change: enable too-many-public-methods Pylint check

This is a useful check to have, but is a lot of work to retroactively
enforce.
Enabling it while ignoring the single violation allows the validation
to run for future code.

* change: enable chained-comparison Pylint check (aws#940)

* change: enable consider-using-ternary Pylint check (aws#942)

This commit will add an exclusion for all auto-generated files.

I chose to ignore the single violation, because the alternative is
confusingly convoluted:
`(hasattr(obj, '__getitem__') if hasattr(obj, '__iter__')
else isinstance(obj, str))`

* change: modify TODO on disabled Pylint check (aws#943)

The check recommendations are only valid for packages that exclusively
support Python 3. The changes cannot be made in Python 2.
The TODO was updated to clarify this.

* prepare release v1.34.0

* update development version to v1.34.1.dev0

* change: add MXNet 1.4.1 support (aws#886)

* change: format and add missing docstring placeholders (aws#945)

This commit will format all existing docstring to follow Google
style: https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html
This commit will also add docstring placeholders to any class or method
previously missing it.

An ideal approach would be to take the time to include meaningful
docstrings in every file. However, since that is not a task that will
be prioritized, I've declared docstring bankruptcy on this package, in
order to enforce docstring on all future code changes to this package.

* change: allow serving script to be defined for deploy() and transformer() with frameworks (aws#944)

* change: update PyTorch version (aws#947)

* change: improve documentation of some functions (aws#864)

[pr-827][followups] Improve documentation of some functions.
Also some unit test fixes. See comments from marcio in
aws#827

* doc: update using_tensorflow topic (aws#946)

* fix: update TensorFlow script mode dependency list (aws#869)

* change: improving Chainer integ tests (aws#872)

* change: enable line-too-long Pylint check (aws#948)

* doc: add instructions for setting up Cloud9 environment. (aws#949)

Added instructions that allow for a low-cost ~10min environment setup.

* prepare release v1.34.1

* update development version to v1.34.2.dev0

* change: Replaced generic ValueError with custom subclass when reporting unexpected resource status (aws#919)

* doc: correct wording for Cloud9 environment setup instructions (aws#952)

package => repo

* change: removing unnecessary tests cases (aws#951)

* prepare release v1.34.2

* update development version to v1.34.3.dev0

* change: waiting for training tags to propagate in the test (aws#955)

* prepare release v1.34.3

* update development version to v1.34.4.dev0

* feature: allow serving image to be specified when calling MXNet.deploy (aws#959)

* prepare release v1.35.0

* update development version to v1.35.1.dev0

* doc: refactor and edit using_mxnet topic (aws#956)

* doc: refactor overview section per improvement plan

* Update doc/overview.rst

Co-Authored-By: Marcio Vinicius dos Santos <mvs.usp@gmail.com>

* Update doc/overview.rst

Co-Authored-By: Marcio Vinicius dos Santos <mvs.usp@gmail.com>

* doc: made changes per feedback comments

* doc: remove duplicate faq section and fixed heading

* doc: fix heading levels in overview.rst

* doc: update TensorFlow using topic

* doc: Update using_tf.rst to address feedback

* doc: fix comment in conf.py per build log

* doc: add newline to conf.py to fix error

* doc: addressed feedback for PR

* doc: update conf.py

* doc: remove duplicate byom section in overview.rst

* doc: remove duplicate headings in several rst files

* doc: Restructure and update Using MXNet topic

* doc: fix link

* doc: add link to mxnet readme container section in using_mxnet.rst topic

* fix: update sklearn document to include 3p dependency installation (aws#960)

* prepare release v1.35.1

* update development version to v1.35.2.dev0

* fix: allow Airflow enabled estimators to use absolute path entry_point (aws#965)

* change: ignore FI18 flake8 rule (aws#969)

* feature: support for TensorFlow 1.14 (aws#967)

* flake8 fixes

* black reformat

* Revert "Merging master branch in to eureka-master (aws#206)"

This reverts commit 080d06d561aa88a177c67f08114902ab292f3883.

* Black + Pylint fixes

* add latest api service model

* skip eureka integ tests temporarily

* Fix integ tests to work with preview SDK model (aws#215)

* Fix integ tests to work with preview SDK model.

* Use search to find trial components for analytics dataframe (aws#219)

* move boto client arg to end of the arg list for all eureka APIs

* Use search to find trial components in TrialAnalytics

* add test to verify value error is thrown if no component filter specified

* drop trial name from analytics frame as trial components wont have trial name in them in the future

* remove trial name column for analytics frame

* Eureka master (aws#236)

* Add ExperimentConfig for estimator.fit and transformer.transform

* experiment_config can be passed to estimator.fit
* experiment_config can be passed to transformer.transform
* unit tests for corresponding changes.

* Remove include only experiment integ tests from tox.ini

* Delete experiments integ tests

* Update the service-2.json.

* Bring in latest sagemaker models
* Remove internal-only shapes and internal operations

* Doc the three optional keys for ExperimentConfig dictionary

* Eureka master (aws#237)

* Add ExperimentConfig for estimator.fit and transformer.transform

* experiment_config can be passed to estimator.fit
* experiment_config can be passed to transformer.transform
* unit tests for corresponding changes.

* Remove include only experiment integ tests from tox.ini

* Delete experiments integ tests

* Update the service-2.json.

* Bring in latest sagemaker models
* Remove internal-only shapes and internal operations

* Doc the three optional keys for ExperimentConfig dictionary

* Fix analytics component and search functionality

* Delete all experiments related classes and their tests.
* Change TrialAnalytics to ExperimentAnalytics.
* Fix ExperimentAnalytics for m-n model change.
* Fix/Modify Search functionality

* Fix Docs

* Remove exp management doc from index

* Fix pass None type ExperimentConfig to transform request.

* Fix formatting in test_session.py

* Do not build empty filters list when experiment name is not given

* Add DisplayName to analytics table

* Fix formatting.

* Add sortBy and sortOrder for ExperimentAnalytics

* Eureka master (aws#259)

Fix bad merge

* Add ExperimentConfig to Processor  (aws#260)

* Add ExperimentConfig to Processor

* Remove broken experiment config from processor test (aws#261)


* Add ExperimentConfig to Processor

* Eureka master (aws#262)


* Remove old setup file and Eureka specific files.

* Eureka master (aws#264)


* Add back missing factorization machines integration test

* Minor style fixes (aws#265)



* Minor style fixes

* Fix broken SageMaker Experiments analytics integration tests (aws#267)


* Fix broken experiments_analytics integration tests

* Eureka master (aws#270)



* Remove experiment_config from analytics test
knakad pushed a commit to aws/sagemaker-python-sdk that referenced this issue Dec 4, 2019
* Set eureka VERSION file

* Eureka master (#145)

* Eureka trial tracking interface

* Add experiments developer guides (#147)

* Add experiments developer guides

* Eureka master (#148)

* Add experiments developer guides

* Move to new experiment / trial / trial run data model. Add TrialRun class.

* Eureka master (#149)

* Add Trial class

* Experiment class (#151)

* Introduce active-record design, include first concrete type - Experiment.

* Add Trial and TrialRun active record classes (#152)


* Add Trial and TrialRun active records. Add common created_time / last_modified_time to Record

* List method (#153)


* Add general list classmethod to Record. Add concrete impl to experiment.Experiment

* Eureka master (#154)

* Use general list method in all list* methods in experiment, trial, trial_run

* Add Trial Run Tracker (#156)

* Add Trial Run Tracker

* Add helper methods to Experiment and Trial for fast-creating Trials and TrialRunTrackers

* Set Eureka build to just run linters, doc build, and unit tests

* Add integration tests (#159)

* Add experiment and trial integegration tests

* TrialRun bug fixes (#160)

Introduce UpdatedData property on TrialRun

* Adapt Python SDK to Experiments Api changes (#164)

* Move experiment to new api
* Pin pytest version to 4.4.1

* Fix list trials by experiment without passing experiment name. (#166)

* Pass experiment name for list trial api call.

* Eureka master (#167)

Flatten trial name input for create_trial

* Make providing the step name optional when creating a trial tracker (#169)

* Make step name optional when creating tracker

* Make create tracker obtain TRAINING_JOB_ARN from the environment. (#186)

* Make create tracker obtain TRAINING_JOB_ARN from the environment.

* when trial creates a tracker, the training_job_arn can be automatically set as source arn when creating the trial stage.
* correpsonding unit test.

* Add source_arn back as optional param for create_tracker

* make source_arn an optional param for create_tracker function.

* Resolving source arn skeleton for jobs.

* Changing _resolve_job_arn to _resolve_source_arn.

* Using generator to resolve source arn from the environment.

* TrialAnalytics class to convert trial step data to pandas dataframe (#188)

* TrialAnalytics class to convert trial stage data to pandas data frame
* pin version flake8-future-import to 0.4.5 to avoid build failure on import annotations missing
* pandas column ordering is different in py27 and py37. Sorting columns to make the order deterministic

* * Rename step to component (#194)

* Use new TrialComponent API structure for metrics, artifacts and parameters

* Improve documentation (#199)

* Improve documentation and remove unsupported parameters to list_trial_components

* minor doc update

* remove hardcoded alpha endpoint for experiments (#201)

* Generate sphinx docs for experiment classes (#204)

* Update Sphinx RST files to generate documentation for experiment classes

* Merging master branch in to eureka-master (#206)

* prepare release v1.18.16

* update development version to v1.18.17.dev0

* fix: use unique names for test training jobs (#765)

* prepare release v1.18.17

* update development version to v1.18.18.dev0

* change: add automatic model tuning integ test for TF script mode (#766)

* prepare release v1.18.18

* update development version to v1.18.19.dev0

* change: skip p2/p3 tests in eu-central-1 (#769)

* prepare release v1.18.19

* update development version to v1.18.20.dev0

* feature: add document embedding support to Object2Vec algorithm (#772)

* prepare release v1.19.0

* update development version to v1.19.1.dev0

* change: add py2 deprecation message for the deep learning framework images (#768)

* prepare release v1.19.1

* update development version to v1.19.2.dev0

* feature: add RL Ray 0.6.5 support (#779)

* fix: adjust Ray test script for Ray 0.6.5 (#781)

* fix: prevent false positive PR test results (#783)

* prepare release v1.20.0

* update development version to v1.20.1.dev0

* fix: update TrainingInputMode with s3_input InputMode (#776)

* prepare release v1.20.1

* update development version to v1.20.2.dev0

* fix: pin pytest version to 4.4.1 to avoid pluggy version conflict (#788)

* prepare release v1.20.2

* update development version to v1.20.3.dev0

* documentation: fix docs in regards to transform_fn for mxnet (#790)

* fix: skip local file check for TF requirements file when source_dir is an S3 URI (#798)

* fix: run tests if buildspec.yml has been modified (#786)

* prepare release v1.20.3

* update development version to v1.20.4.dev0

* feature: Support for TFS preprocessing (#797)

* prepare release v1.21.0

* update development version to v1.21.1.dev0

* fix: repack model function works without source directory (#804)

* prepare release v1.21.1

* update development version to v1.21.2.dev0

* fix: emit training jobs tags to estimator (#803)

* fix: set _current_job_name in attach() (#808)

* prepare release v1.21.2

* update development version to v1.21.3.dev0

* fix: honor source_dir from S3 (#811)

* feature: add encryption option to "record_set" (#794)

* feature: add encryption option to "record_set"

* prepare release v1.22.0

* update development version to v1.22.1.dev0

* documentation: update using_sklearn.rst parameter name (#814)

Incorrect parameter name in docs. Updated to match what is implemented in the method and what is used in other estimators.

* feature: support MXNet 1.4 with MMS (#812)

* prepare release v1.23.0

* update development version to v1.23.1.dev0

* feature: add region check for Neo service (#806)

* prepare release v1.24.0

* update development version to v1.24.1.dev0

* fix: add better default transform job name handling within Transformer (#822)

* feature: repack_model support dependencies and code location (#821)

* documentation: TFS support for pre/processing functions (#807)

* change: skip p2 tests in ap-south-east (#823)

* prepare release v1.25.0

* update development version to v1.25.1.dev0

* fix: use unique job name in hyperparameter tuning test (#829)

* prepare release v1.25.1

* update development version to v1.25.2.dev0

* feature: Add extra_args to enable encrypted objects upload (#836)

* change: downgrade c5 in integ tests and test all TF Script Mode images (#840)

* feature: emit estimator transformer tags to model (#815)

* doc: include FrameworkModel and ModelPackage in API docs (#833)

* prepare release v1.26.0

* update development version to v1.26.1.dev0

* fix: fix logger creation in Chainer integ test script (#843)

only one test failed due to a timeout. (the corresponding test failed with the other Python version.) talked to Rui offline.

* feature: add wait argument to estimator deploy (#842)

* prepare release v1.27.0

* update development version to v1.27.1.dev0

* feature: Add DataProcessing Fields for Batch Transform (#827)

* prepare release v1.28.0

* update development version to v1.28.1.dev0

* Update setup.py (#859)

* prepare release v1.28.1

* update development version to v1.28.2.dev0

* fix: prevent race condition in vpc tests (#863)

* prepare release v1.28.2

* update development version to v1.28.3.dev0

* doc: clean up MXNet and TF documentation (#865)

* doc: fix punctuation in MXNet version list (#866)

* change: update Sagemaker Neo regions and instance families (#862)

* prepare release v1.28.3

* update development version to v1.28.4.dev0

* feature: network isolation mode in training (#791)

* feature: network isolation mode in training

* feature: network isolation mode in tar support training

* change: documentation and check describe training job network isolation

* doc update

* doc update, remove inference section

* sourcedir

* type error fix

* change: moving not canary TFS tests to local mode (#870)

* Integrate black into development process (#873)

* change: Add Black formatting tool as dependency

As of this commit, Black formatting tool can be run with 'tox -e black-format'.
Black does not run as part of any automated process, yet.

Black is pulled in as a test dependency only if the Python version
is greater than 3.6, as the tool is not vended as part of any
earlier Python version.

* change: Resolve Black formatting failures

Black is unable to handle trailing 'L' or 'l' which is no longer
supported as of python 3.8.

This commit removes those unnecessary 'long' identifiers.

https://www.python.org/dev/peps/pep-0237/

* change: Format all files using Black

This commit contains no functional changes.

* change: Manually resolve flake8 violations after formatting

* change: Manually resolve pylint violations after formatting

* change: Enable black locally and in automated build.

This commit enables black-format as part of "tox tests/unit", in order to
format all files.
It also enables black-check as part of the remote builds, in order to
verify that all files are properly formatted.

* prepare release v1.29.0

* update development version to v1.29.1.dev0

* feature: add git_config and git_clone, validate method (#832)

* fix: add pytest.mark.local_mode annotation to broken tests (#876)

* fix: add pytest.mark.local_mode annotation to tests

* feature: add TensorFlow 1.13 support (#860)

* prepare release v1.30.0

* update development version to v1.30.1.dev0

* fix: add pytest.mark.local_mode annotation to broken tests (#884)

* change: remove unnecessary P3 tests from TFS integration tests (#885)

* change: allow only one integration test run per time (#880)

* change: Update buildspec.yml (#887)

* feature: use deep learning images (#883)

* prepare release v1.31.0

* update development version to v1.31.1.dev0

* change: build spec improvements. (#888)

* fix: remove unnecessary failure case tests (#892)

* change: print build execution time (#890)

* prepare release v1.31.1

* update development version to v1.31.2.dev0

* fix git test in test_estimator.py (#894)

* feature: support Endpoint_type for TF transform (#881)

* prepare release v1.32.0

* update development version to v1.32.1.dev0

* change: separate unit, local mode, and notebook tests in different buildspecs (#898)

* change: fix notebook tests (#900)

* Update displaytime.sh (#901)

* doc: refactor the overview topic in the sphinx project (#877)

* change: tighten pylint config and expand C and R exceptions (#899)

This commit tightens the pylint config with
inspiration from several of Google's pylint
configs.

This commit also expands the C and R exceptions
and disables the specific rules that cause issues
in this package.

* change: correct code per len-as-condition Pylint check (#902)

The Pylint check is not actually enabled in this commit as it conflicts
directly with NumPy. Pylint has corrected this, and it will be included
in their next release (2.4.0):
pylint-dev/pylint#2684

Once Pylint 2.4.0 is released, we can consume it and remove this check.
A summary of this information is included in a TODO near the relevant
Pylint disable rule (len-as-condition).

* prepare release v1.32.1

* update development version to v1.32.2.dev0

* change: remove superfluous parens per Pylint rule (#903)

* change: enable logging-format-interpolation pylint check (#904)

* documentation: add pypi, rtd, black badges to readme (#910)

* prepare release v1.32.2

* update development version to v1.32.3.dev0

* feature: allow custom model name during deploy (#792)

* feature: allow custom model name during deploy

* black check

* feature: git support for hosting models (#878)

* git integration for serving

* fix: Add ap-northeast-1 to Neo algorithms region map (#897)

* fix: reset default output path in Transformer.transform  (#905)

* fix: reset default output path on create transform job

* Unit and integration tests

* change: enable logging-not-lazy pylint check (#909)

* change: enable wrong-import-position pylint check (#907)

* change: enable wrong-import-position pylint check

* change: updating import pattern for sagemaker.tensorflow

* fix: fixing integration tests

* change: reformatting

* change: enable signature-differs pylint check (#915)

* Revert "change: enable wrong-import-position pylint check (#907)" (#916)

This reverts commit 8489f86.

* change: enable wrong-import-position pylint check (#917)

* change: remove TODO comment on import-error Pylint check (#918)

By running Pylint before any of the unit tests (and dependency
installs), the import-error check will always fail since the
dependencies are not yet installed.

We could move Pylint to a later stage to resolve this, but there's
value in this quick check occurring before the unit tests.

As a result, this Pylint check is being disabled.

* prepare release v1.33.0

* update development version to v1.33.1.dev0

* change: enable unidiomatic-typecheck pylint check (#921)

* change: enable no-else-return and no-else-raise pylint checks (#925)

* change: fix list serialization for 1P algos (#922)

* change: enable simplifiable-if-expression pylint checks (#926)

* feature: deal with credentials for Git support for GitHub (#914)

add authentication info

* feature: Git integration for CodeCommit (#927)

* add functions, tests and doc for CodeCommit

* change: enable inconsistent-return-statements Pylint check (#930)

Note that this commit also raises ValueErrors in situations that would
previously have returned None.

Per PEP8: Be consistent in return statements. Either all return
statements in a function should return an expression, or none of them
should. If any return statement returns an expression, any return
statements where no value is returned should explicitly state this as
return None, and an explicit return statement should be present at the
end of the function (if reachable).

* change: enable consider-merging-isinstance Pylint check (#932)

Note that this commit will also enable simplifiable-if-statement, as
there are no code changes needed for it.

* change: enable attribute-defined-outside-init Pylint check (#933)

The logic behind this rule is to improve readability by defining all
the attributes of a class inside the init function, even if it simply
sets them to None.

* change: enable wrong-import-order Pylint check (#935)

Per PEP8:
Imports should be grouped in the following order:
1- Standard library imports.
2- Related third party imports.
3- Local application/library specific imports.

*  change: enable ungrouped-imports Pylint check (#936)

* change: enable wrong-import-order Pylint check

Per PEP8:
Imports should be grouped in the following order:
1- Standard library imports.
2- Related third party imports.
3- Local application/library specific imports.

* change: fix attach for 1P algorithm estimators (#931)

* change: set num_processes_per_host only if provided by user (#928)

*  change: enable consider-using-in Pylint check (#938)

* change: enable consider-using-in Pylint check

*  change: enable too-many-public-methods Pylint check (#939)

* change: enable too-many-public-methods Pylint check

This is a useful check to have, but is a lot of work to retroactively
enforce.
Enabling it while ignoring the single violation allows the validation
to run for future code.

* change: enable chained-comparison Pylint check (#940)

* change: enable consider-using-ternary Pylint check (#942)

This commit will add an exclusion for all auto-generated files.

I chose to ignore the single violation, because the alternative is
confusingly convoluted:
`(hasattr(obj, '__getitem__') if hasattr(obj, '__iter__')
else isinstance(obj, str))`

* change: modify TODO on disabled Pylint check (#943)

The check recommendations are only valid for packages that exclusively
support Python 3. The changes cannot be made in Python 2.
The TODO was updated to clarify this.

* prepare release v1.34.0

* update development version to v1.34.1.dev0

* change: add MXNet 1.4.1 support (#886)

* change: format and add missing docstring placeholders (#945)

This commit will format all existing docstring to follow Google
style: https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html
This commit will also add docstring placeholders to any class or method
previously missing it.

An ideal approach would be to take the time to include meaningful
docstrings in every file. However, since that is not a task that will
be prioritized, I've declared docstring bankruptcy on this package, in
order to enforce docstring on all future code changes to this package.

* change: allow serving script to be defined for deploy() and transformer() with frameworks (#944)

* change: update PyTorch version (#947)

* change: improve documentation of some functions (#864)

[pr-827][followups] Improve documentation of some functions.
Also some unit test fixes. See comments from marcio in
#827

* doc: update using_tensorflow topic (#946)

* fix: update TensorFlow script mode dependency list (#869)

* change: improving Chainer integ tests (#872)

* change: enable line-too-long Pylint check (#948)

* doc: add instructions for setting up Cloud9 environment. (#949)

Added instructions that allow for a low-cost ~10min environment setup.

* prepare release v1.34.1

* update development version to v1.34.2.dev0

* change: Replaced generic ValueError with custom subclass when reporting unexpected resource status (#919)

* doc: correct wording for Cloud9 environment setup instructions (#952)

package => repo

* change: removing unnecessary tests cases (#951)

* prepare release v1.34.2

* update development version to v1.34.3.dev0

* change: waiting for training tags to propagate in the test (#955)

* prepare release v1.34.3

* update development version to v1.34.4.dev0

* feature: allow serving image to be specified when calling MXNet.deploy (#959)

* prepare release v1.35.0

* update development version to v1.35.1.dev0

* doc: refactor and edit using_mxnet topic (#956)

* doc: refactor overview section per improvement plan

* Update doc/overview.rst

Co-Authored-By: Marcio Vinicius dos Santos <mvs.usp@gmail.com>

* Update doc/overview.rst

Co-Authored-By: Marcio Vinicius dos Santos <mvs.usp@gmail.com>

* doc: made changes per feedback comments

* doc: remove duplicate faq section and fixed heading

* doc: fix heading levels in overview.rst

* doc: update TensorFlow using topic

* doc: Update using_tf.rst to address feedback

* doc: fix comment in conf.py per build log

* doc: add newline to conf.py to fix error

* doc: addressed feedback for PR

* doc: update conf.py

* doc: remove duplicate byom section in overview.rst

* doc: remove duplicate headings in several rst files

* doc: Restructure and update Using MXNet topic

* doc: fix link

* doc: add link to mxnet readme container section in using_mxnet.rst topic

* fix: update sklearn document to include 3p dependency installation (#960)

* prepare release v1.35.1

* update development version to v1.35.2.dev0

* fix: allow Airflow enabled estimators to use absolute path entry_point (#965)

* change: ignore FI18 flake8 rule (#969)

* feature: support for TensorFlow 1.14 (#967)

* flake8 fixes

* black reformat

* Revert "Merging master branch in to eureka-master (#206)"

This reverts commit 080d06d561aa88a177c67f08114902ab292f3883.

* Black + Pylint fixes

* add latest api service model

* skip eureka integ tests temporarily

* Fix integ tests to work with preview SDK model (#215)

* Fix integ tests to work with preview SDK model.

* Use search to find trial components for analytics dataframe (#219)

* move boto client arg to end of the arg list for all eureka APIs

* Use search to find trial components in TrialAnalytics

* add test to verify value error is thrown if no component filter specified

* drop trial name from analytics frame as trial components wont have trial name in them in the future

* remove trial name column for analytics frame

* Eureka master (#236)

* Add ExperimentConfig for estimator.fit and transformer.transform

* experiment_config can be passed to estimator.fit
* experiment_config can be passed to transformer.transform
* unit tests for corresponding changes.

* Remove include only experiment integ tests from tox.ini

* Delete experiments integ tests

* Update the service-2.json.

* Bring in latest sagemaker models
* Remove internal-only shapes and internal operations

* Doc the three optional keys for ExperimentConfig dictionary

* Eureka master (#237)

* Add ExperimentConfig for estimator.fit and transformer.transform

* experiment_config can be passed to estimator.fit
* experiment_config can be passed to transformer.transform
* unit tests for corresponding changes.

* Remove include only experiment integ tests from tox.ini

* Delete experiments integ tests

* Update the service-2.json.

* Bring in latest sagemaker models
* Remove internal-only shapes and internal operations

* Doc the three optional keys for ExperimentConfig dictionary

* Fix analytics component and search functionality

* Delete all experiments related classes and their tests.
* Change TrialAnalytics to ExperimentAnalytics.
* Fix ExperimentAnalytics for m-n model change.
* Fix/Modify Search functionality

* Fix Docs

* Remove exp management doc from index

* Fix pass None type ExperimentConfig to transform request.

* Fix formatting in test_session.py

* Do not build empty filters list when experiment name is not given

* Add DisplayName to analytics table

* Fix formatting.

* Add sortBy and sortOrder for ExperimentAnalytics

* Eureka master (#259)

Fix bad merge

* Add ExperimentConfig to Processor  (#260)

* Add ExperimentConfig to Processor

* Remove broken experiment config from processor test (#261)


* Add ExperimentConfig to Processor

* Eureka master (#262)


* Remove old setup file and Eureka specific files.

* Eureka master (#264)


* Add back missing factorization machines integration test

* Minor style fixes (#265)



* Minor style fixes

* Fix broken SageMaker Experiments analytics integration tests (#267)


* Fix broken experiments_analytics integration tests

* Eureka master (#270)



* Remove experiment_config from analytics test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Enhancement ✨ Improvement to a component Good first issue Friendly and approachable by new contributors
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants