Git Product home page Git Product logo

pytest-isort's Introduction

py.test plugin to check import ordering using isort

Latest Version CI Status

Support

Python 3.7, 3.8, 3.9 and 3.10. pytest>=5.

Usage

install using pip:

pip install pytest-isort

Activate isort checks when calling py.test:

py.test --isort

This will execute an isort check against every .py file (if its not ignored).

Example

Given you have some files with incorrect sorted imports:

# content of file1.py

import os
import sys
import random

# content of file2.py

import json
import sys
import os

If you run py.test and activate the isort plugin you'll se something like this:

$ py.test --isort
========================= test session starts ==========================
platform darwin -- Python 2.7.9 -- py-1.4.26 -- pytest-2.6.4
plugins: isort
collected 2 items

file1.py F
file2.py F

=============================== FAILURES ===============================
_____________________________ isort-check ______________________________
ERROR: file1.py Imports are incorrectly sorted.

 import os
+import random
 import sys
-import random
_____________________________ isort-check ______________________________
ERROR: file2.py Imports are incorrectly sorted.

 import json
+import os
 import sys
-import os
======================= 2 failed in 0.02 seconds =======================

If you can't change the import ordering for file2.py, you have the option to exclude file2.py from isort checks.

Simply add the isort_ignore setting to your py.test configuration file:

[pytest]
isort_ignore =
    file2.py

Then re-run the tests:

$ py.test --isort
========================= test session starts ==========================
platform darwin -- Python 2.7.9 -- py-1.4.26 -- pytest-2.6.4
plugins: isort
collected 1 items

file1.py F

=============================== FAILURES ===============================
_____________________________ isort-check ______________________________
ERROR: file1.py Imports are incorrectly sorted.

 import os
+import random
 import sys
-import random
======================= 1 failed in 0.02 seconds =======================

As you can see, file2.py is ignored and not checked. Now fix the import ordering in file1.py and re-run the tests:

$ py.test --isort
========================= test session starts ==========================
platform darwin -- Python 2.7.9 -- py-1.4.26 -- pytest-2.6.4
plugins: isort
collected 1 items

file1.py .

======================= 1 passed in 0.01 seconds ======================

Everything is properly again. Congratulations!

If you run your testsuite again and again, py.test will only check changed files to speed up. You see this by adding -rs to your py.test options:

$ py.test --isort -rs
========================= test session starts ==========================
platform darwin -- Python 2.7.9 -- py-1.4.26 -- pytest-2.6.4
plugins: isort
collected 1 items

file1.py s
======================= short test summary info ========================
SKIP [1] pytest_isort.py:145: file(s) previously passed isort checks

====================== 1 skipped in 0.01 seconds ======================

Configuration

You can exclude files from isort checks by using the isort_ignore setting in your py.test configuration file (e.g. pytest.ini):

# content of setup.cfg
[pytest]
isort_ignore =
    docs/conf.py
    *migrations/*.py

This will ignore the conf.py python file inside the docs folder and also ignore any python file in migrations folders.

In addition, excluded files in isort's configuration will be ignored too.

Notes

You can use isort to rewrite your python files and re-order the imports but this is not part of this plugin.

pytest-isort's People

Contributors

deluge avatar fabaff avatar hairmare avatar iurisilvio avatar jappja avatar maxbrunet avatar mystic-mirage avatar nicoddemus avatar scarabeusiv avatar sobolevn avatar stephrdev avatar the-compiler avatar whyscream avatar wongwill86 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

pytest-isort's Issues

Run pytest-sort without running tests?

I'd like to run pytest-isort in a separate section of my tox.ini file, like I have linting in a separate section.

I've tried py.test --isort --collect-only or ways to deselect tests, but these all end up preventing the isort from running.

Is there a way of doing this?

Add capability to configure isort

It seems one can only use isort in its default configuration with this plugin?

It would be great to add support for configuring it for everyone that does not...

For instance, to make isort play nice with black, it's been said that using these options work best:

isort --trailing-comma -m 3

pytest warning

PytestRemovedIn8Warning: The (fspath: py.path.local) argument to IsortItem is deprecated. Please use the (path: pathlib.Path) argument instead.
  See https://docs.pytest.org/en/latest/deprecations.html#fspath-argument-for-node-constructors-replaced-with-pathlib-path
    super().__init__(
python3.9/site-packages/_pytest/nodes.py:664: PytestWarning: IsortItem is an Item subclass and should not be a collector, however its bases File are collectors.
Please split the Collectors and the Item into separate node types.
Pytest Doc example: https://docs.pytest.org/en/latest/example/nonpython.html
example pull request on a plugin: https://github.com/asmeurer/pytest-flakes/pull/40/
  warnings.warn(

I think this is related to https://github.com/asmeurer/pytest-flakes/pull/40/files

Improve pytest failure output

It seems that tools like pylint use [pylint] <filename> as the header of failed tests:

image

It would be excellent if pytest-isort could do it similarly instead of using isort-check in each header and noting the filename in the first line as ERROR: <filename> Imports are incorrectly sorted..

isort no longer uses isort.SortImports in recent versions

In recent versions of isort, the isort.SortImports function has been removed. Since the setup.py file in this repo allows for any version of isort above 4.0, I get an attribute error on SortImports when running pytest-isort. This isn't shown in isorts latest documentation, but a quick pip3 install isort and from isort import SortImports shows the error.

2.0.0: pytest with `relaxed` extension fails with deprecation error

I'm trying to package your module as rpm packag. So I'm using typical in such case build, install and test cycle used on building package from non-root account:

  • "setup.py build"
  • "setup.py install --root </install/prefix>"
  • "pytest with PYTHONPATH pointing to sitearch and sitelib inside </install/prefix>

May I ask for help because few units are failing:

+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-isort-2.0.0-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-isort-2.0.0-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra
=========================================================================== test session starts ============================================================================
platform linux -- Python 3.8.11, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
benchmark: 3.4.1 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /home/tkloczko/rpmbuild/BUILD/pytest-isort-2.0.0
plugins: isort-2.0.0, forked-1.3.0, shutil-1.7.0, virtualenv-1.7.0, expect-1.1.0, flake8-1.0.7, timeout-1.4.2, betamax-0.8.1, freezegun-0.4.2, case-1.5.3, aspectlib-1.5.2, toolbox-0.5, mock-3.6.1, rerunfailures-9.1.1, requests-mock-1.9.3, cov-2.12.1, pyfakefs-4.5.0, flaky-3.7.0, benchmark-3.4.1, xdist-2.3.0, pylama-7.7.1, datadir-1.3.1, regressions-2.2.0, cases-3.6.3, hypothesis-6.14.4, xprocess-0.18.1, black-0.3.12, checkdocs-2.7.1, anyio-3.3.0, Faker-8.11.0, asyncio-0.15.1, trio-0.7.0, httpbin-1.0.0, subtests-0.5.0, relaxed-1.1.5
collected 0 items / 1 error

================================================================================== ERRORS ==================================================================================
______________________________________________________________________ ERROR collecting test session _______________________________________________________________________
Direct construction of SpecModule has been deprecated, please use SpecModule.from_parent.
See https://docs.pytest.org/en/stable/deprecations.html#node-construction-changed-to-node-from-parent for more details.
========================================================================= short test summary info ==========================================================================
ERROR
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
============================================================================= 1 error in 0.27s =============================================================================
pytest-xprocess reminder::Be sure to terminate the started process by running 'pytest --xkill' if you have not explicitly done so in your fixture with 'xprocess.getinfo(<process_name>).terminate()'.

Breaks with isort 5.0.0

Explained in PyCQA/isort#1273

/python3.8/site-packages/pytest_isort.py:62: in isort_check_file
    sorter = isort.SortImports(str(path), check=True, show_diff=True)
E   AttributeError: module 'isort' has no attribute 'SortImports'

Broken with pytest > 4.1.0

$ pytest --isort
============================= test session starts ==============================
platform linux -- Python 3.7.1, pytest-4.1.1, py-1.7.0, pluggy-0.8.1
cachedir: .tox/isort/.pytest_cache
rootdir: /home/travis/build/dry-python/stories, inifile:
plugins: stories-0.9, isort-0.2.1, flake8-1.0.2, black-0.3.2
collecting 100 items                                                           INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/_pytest/main.py", line 203, in wrap_session
INTERNALERROR>     session.exitstatus = doit(config, session) or 0
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/_pytest/main.py", line 242, in _main
INTERNALERROR>     config.hook.pytest_collection(session=session)
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/hooks.py", line 284, in __call__
INTERNALERROR>     return self._hookexec(self, self.get_hookimpls(), kwargs)
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/manager.py", line 68, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook, methods, kwargs)
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/manager.py", line 62, in <lambda>
INTERNALERROR>     firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/callers.py", line 208, in _multicall
INTERNALERROR>     return outcome.get_result()
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/callers.py", line 80, in get_result
INTERNALERROR>     raise ex[1].with_traceback(ex[2])
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/callers.py", line 187, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/_pytest/main.py", line 252, in pytest_collection
INTERNALERROR>     return session.perform_collect()
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/_pytest/main.py", line 468, in perform_collect
INTERNALERROR>     session=self, config=self.config, items=items
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/hooks.py", line 284, in __call__
INTERNALERROR>     return self._hookexec(self, self.get_hookimpls(), kwargs)
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/manager.py", line 68, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook, methods, kwargs)
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/manager.py", line 62, in <lambda>
INTERNALERROR>     firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/callers.py", line 208, in _multicall
INTERNALERROR>     return outcome.get_result()
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/callers.py", line 80, in get_result
INTERNALERROR>     raise ex[1].with_traceback(ex[2])
INTERNALERROR>   File "/home/travis/build/dry-python/stories/.tox/isort/lib/python3.7/site-packages/pluggy/callers.py", line 187, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "/home/travis/build/dry-python/stories/tests/conftest.py", line 8, in pytest_collection_modifyitems
INTERNALERROR>     items[:] = [item for item in items if item.get_marker(linter)]
INTERNALERROR>   File "/home/travis/build/dry-python/stories/tests/conftest.py", line 8, in <listcomp>
INTERNALERROR>     items[:] = [item for item in items if item.get_marker(linter)]
INTERNALERROR> AttributeError: 'IsortItem' object has no attribute 'get_marker'
========================= no tests ran in 0.59 seconds =========================

PluginValidationError with pytest 8.1.0

The recently released pytest 8.1.0 removed the path argument to pytest_collect_file resulting in this error for plugins that didn't use the new file_path arg.

pluggy._manager.PluginValidationError: Plugin 'flake8' for hook 'pytest_collect_file'
hookimpl definition: pytest_collect_file(file_path, path, parent)
Argument(s) {'path'} are declared in the hookimpl but can not be found in the hookspec

file_path was supported starting with version 7.0.0 of pytest.

Test errors with pytest==7.2.0

Just found out that pytest-isort is using py.io in

ok, stdout, stderr = py.io.StdCaptureFD.call(
. For some reason the pytest-isort package is not depending on the py package, it's depending on pytest to do that.

With the latest pytest release (7.2.0), pytest has dropped the py dependency, and in stead vendored the few parts that they use. See pytest-dev/pytest#10396 and https://docs.pytest.org/en/stable/changelog.html#pytest-7-2-0-2022-10-23 for details.

In short, now all isort tests fail with FAILED mypackage/__init__.py::ISORT - AttributeError: module 'py' has no attribute 'io'

support for custom line length

would be great if pytest-isort could support isort's -w line length option.

Preferable in setup.cfg/pytest.ini.

Maybe this is already possible? But not documented.

Fix PytestDeprecationWarning

Thank you for this invaluable package. Lately I see this message:

venv/lib/python3.8/site-packages/pytest_isort.py:43: PytestDeprecationWarning: direct construction of IsortItem has been deprecated, please use IsortItem.from_parent
    return IsortItem(path, parent)

Please see this similar issue with comments providing additional info.

Remove pytest-cache dependency from install_requires

Hi,

The pytest-cache plugin is a core part of pytest itself since v2.8. It causes issues when using modern versions of pytest (2.8+) in conjunction with pipenv who just doesn't ignore dependencies, but tries to resolve it.

Thus, currently, any modern plugin requires pluggy>0.7, while the obsolete pytest-cache being installed requires pluggy<0.7. And here, pipenv collapsing :)

Can you remove this requirement, please?

Do not install additional LICENSE.rst

For me v4.0.0 installs LICENSE.rst directly into site-packages directory. There is already LICENSE.rst in site-packages/pytest_isort-4.0.0.dist-info/LICENSE.rst. This patch solves the issue:

--- pyproject.toml.orig	2024-04-12 09:55:54.110167676 +0000
+++ pyproject.toml
@@ -26,7 +26,6 @@ classifiers = [
 	"Framework :: Pytest",
 ]
 packages = [{ include = "pytest_isort" }]
-include = ["LICENSE.rst"]
 
 [tool.poetry.plugins.pytest11]
 isort = "pytest_isort"

"ERROR: <filename> Imports are incorrectly sorted" has disappeared

Hi! I noticed that the

ERROR: <filename> Imports are incorrectly sorted.

"header" before an isort diff is shown has disappeared in pytest-isort output i.e. the filename associated with an isort-check error is not shown which makes it hard to debug/associate which diff goes with which file. For example, the output I am getting is:

> pytest --isort

<skipping irrelevant output>

=============== FAILURES ===============
_______________ isort-check ________________
<Missing Error: ... header would have been here but it is absent>
+from werkzeug import __version__ as werkzeug_version
 from werkzeug.datastructures import Headers
-from werkzeug import __version__ as werkzeug_version
=============== short test summary info ================
FAILED tests/mytest.py::ISORT

With multiple failing tests, the "short test summary info" section isn't enough to reconnect the diffs with the files they apply to.

This seems to be because _pytest.capture.MultiCapture splits the out/err streams and pytest-isort only uses the stdout one (https://github.com/stephrdev/pytest-isort/blob/master/pytest_isort/__init__.py#L229), but the "Error: <filename> Imports are incorrectly sorted." is output on the err stream by isort.

However, it also seems like capturing both streams chronologically is not a solved problem on the pytest.capture side : pytest-dev/pytest#5449 ... but that's an old discussion and maybe you know of a better alternative ๐Ÿ˜ƒ ? (Popen can capture them correctly, so it should be possible somehow).

Thanks so much for taking a look!

isort ignores native skip configuration

In my django project I've configured isort using a pyproject.toml configfile to ignore my migrations files:

[tool.isort]
profile = "black"
skip_glob = [
	"*/migrations/*.py"
]

If I run isort independently, this works as expected.

However when pytest is started using the pytest-isort plugin, it keeps complaining about the ignored files being incorrectly sorted. I can only silence the pytest-isort plugin when I also configure the isort_ignore key in the pytest configuration, which means I have to configure the same thing twice.

Packages used:
pytest==6.2.3
isort==5.8.0
pytest-isort==1.3.0

'import ...' first, then 'from ...' , then empty line, then more imports

pytest-isort approves of this:

import re
from datetime import timedelta

import pytest
from django.core.urlresolvers import reverse

and moans when i change it to

import pytest
import re
from datetime import timedelta
from django.core.urlresolvers import reverse

The latter seems sorted to me. Is there some kind of standard that this conforms to?

error with pytest 3.7

with pytest 3.7:

(env) pydantic 0  78ms โžค  pytest --isort
Test session starts (platform: linux, Python 3.6.5, pytest 3.7.0, pytest-sugar 0.9.1)
rootdir: /home/samuel/code/pydantic, inifile: setup.cfg
plugins: sugar-0.9.1, mock-1.10.0, isort-0.2.0, cov-2.5.1

โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€• ERROR collecting  โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•
env/lib/python3.6/site-packages/_pytest/runner.py:201: in __init__
    self.result = func()
env/lib/python3.6/site-packages/_pytest/runner.py:261: in <lambda>
    call = CallInfo(lambda: list(collector.collect()), "collect")
env/lib/python3.6/site-packages/_pytest/main.py:475: in collect
    for x in self._collect(arg):
env/lib/python3.6/site-packages/_pytest/main.py:519: in _collect
    for x in root._collectfile(pkginit):
E   AttributeError: 'IsortItem' object has no attribute '_collectfile'

!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!

Results (0.07s):
(env) pydantic 2 392ms โžค  

Tests work fine without --isort.

pytest-isort causes pytest to swallow and ignore UnicodeDecodeErrors

I have a really weird issue that may or may not be related to pytest-isort, but appears to be triggered by it.

Given this test case in a file named test.py,

import unittest


class UnicodeTest(unittest.TestCase):
    def test(self):
        s = 'Caf\xc3\xa9'
        with self.assertRaises(UnicodeDecodeError):
            s.encode('utf-8')
> pip install pytest==3.6.0
...
> pytest test.py
======================================================================== test session starts =========================================================================
platform darwin -- Python 2.7.14, pytest-3.6.0, py-1.5.3, pluggy-0.6.0
rootdir: /Users/sam/testcase, inifile:
collected 1 item

test.py .                                                                                                                                                      [100%]

====================================================================== 1 passed in 0.05 seconds ======================================================================

All is fine.

However, as soon as I install pytest-isort, this happens -

> pip install pytest-isort
...
> pytest test.py
======================================================================== test session starts =========================================================================
platform darwin -- Python 2.7.14, pytest-3.6.0, py-1.5.3, pluggy-0.6.0
rootdir: /Users/sam/testcase, inifile:
plugins: isort-0.2.0
collected 1 item

test.py F                                                                                                                                                      [100%]

============================================================================== FAILURES ==============================================================================
___________________________________________________________________________ TestTest.test ____________________________________________________________________________

self = <test.TestTest testMethod=test>

    def test(self):
        s = 'Caf\xc3\xa9'
        with self.assertRaises(UnicodeDecodeError):
>           s.encode('utf-8')
E           AssertionError: UnicodeDecodeError not raised

test.py:8: AssertionError
====================================================================== 1 failed in 0.08 seconds ======================================================================

For some reason, the existence of pytest-isort causes the UnicodeDecodeError exception to be swallowed. The UnicodeDecodeError is expected because s is a str containing non-ASCII characters, so when asking to encode it to UTF-8, it will first attempt to implicitly decode using ASCII before encoding to UTF-8.

Executing pip uninstall pytest-isort makes the test pass again. I've also confirmed that this happens on Linux as well.

Any thoughts?

If it helps, here's pip freeze -

apipkg==1.4
atomicwrites==1.1.5
attrs==18.1.0
execnet==1.5.0
funcsigs==1.0.2
futures==3.2.0
isort==4.3.4
more-itertools==4.1.0
pluggy==0.6.0
py==1.5.3
pytest==3.6.0
pytest-cache==1.0
pytest-isort==0.2.0
six==1.11.0

Trailing commas in import lists

This is valid:

import (
    x,
    y
)

This is not:

import (
    x,
    y,
)

I can't find if this is a standard.

For keeping diffs cleaner, it would be nice to accept trailing commas, or making it configurable.

Missing option for profile

isort can be configured into a "black"-mode.

--profile black

It would be nice, when we had the same for this plugin. Something like the ignore-filter.
e.g.:

isort_profile = black

pytest: error: unrecognized arguments: --isort

I've followed the README and this appears not to work at all.

$ pytest --version
pytest 6.2.5
$ python --version
Python 3.9.6

edit: oops, my mistake on install. ๐Ÿคฆ๐Ÿผโ€โ™‚๏ธ close.

Caching does not work with xdist

It seems that when running pytest-isort with pytest-xdist the cache does not get populated (.pytest_cache/.../v/isort/mtimes is empty). This means that test are re-run on all files when using distributed test execution, which is not very optimal.

Interestingly the same issue appears with pytest-pylint too (see carsongee/pytest-pylint#161, it is actually much worse there because all tests are executed on all workers due to the way the linting is done), I suppose because both plugins are based on pytest-flake8 (I haven't tested it but I think that plugin has the same issue too).

At the same time pytest-mypy works fine because it relies on the built-in cache of mypy. I'm not yet sure why does the cache not get populated with xdist, but it would be awesome if we could figure it out.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.