-
-
Notifications
You must be signed in to change notification settings - Fork 46.6k
Travis CI: Run black, doctest, flake8, mypy, and pytest #964
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
Changes from all commits
bc437e4
5dd8090
d3d5a39
3f32aa8
ed1e00a
6950950
d612c3a
6846fcc
9c7f9da
d371f76
276b248
5ca5b43
5ad53a7
047216f
bd02765
9994794
86bdb71
19b45dd
5a1a398
a37327d
002287d
cec7e16
28d9e6d
1c27abc
704bf00
3456316
769f66d
122bf27
9ae08f3
03b4bdd
8b55aff
33a8723
32349c1
5bc5634
976f914
364014b
fab6bc2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,14 @@ | ||
language: python | ||
dist: xenial # required for Python >= 3.7 | ||
python: 3.7 | ||
install: pip install flake8 | ||
script: flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics | ||
cache: pip | ||
install: pip install -r requirements.txt | ||
before_script: | ||
- black --check . || true | ||
- flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics | ||
script: | ||
- mypy --ignore-missing-imports . | ||
- pytest --doctest-modules ./ciphers ./other ./searches ./sorts ./strings | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also it would be nice to add pytest-cov and generate coverage report? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sorry, I am not a fan of coverage tools. We do not mandate tests. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @sirex It has been a busy two weeks but now we have 132 pytests passing so I think we could add pytest-cov to Travis CI as you suggested above. Please consider submitting a pull request that modifies .travis.yml so that it runs pytest-cov. |
||
after_success: | ||
- python ./~script.py | ||
cclauss marked this conversation as resolved.
Show resolved
Hide resolved
|
||
- cat DIRECTORY.md | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Well if we want to change the directory while merging, do we need a bot? |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,12 +12,12 @@ These implementations are for learning purposes. They may be less efficient than | |
|
||
Anup Kumar Panwar | ||
[[Gmail](mailto:[email protected]?Subject=The%20Algorithms%20-%20Python) | ||
[Gihub](https://github.com/anupkumarpanwar) | ||
[GitHub](https://github.com/anupkumarpanwar) | ||
[LinkedIn](https://www.linkedin.com/in/anupkumarpanwar/)] | ||
|
||
Chetan Kaushik | ||
[[Gmail](mailto:[email protected]?Subject=The%20Algorithms%20-%20Python) | ||
[Gihub](https://github.com/dynamitechetan) | ||
[GitHub](https://github.com/dynamitechetan) | ||
[LinkedIn](https://www.linkedin.com/in/chetankaushik/)] | ||
|
||
## Contribution Guidelines | ||
|
@@ -28,337 +28,6 @@ Read our [Contribution Guidelines](CONTRIBUTING.md) before you contribute. | |
|
||
We're on [Gitter](https://gitter.im/TheAlgorithms)! Please join us. | ||
|
||
# Algorithms | ||
## Algorithms | ||
|
||
## Hashes | ||
|
||
- [Md5](./hashes/md5.py) | ||
- [Chaos Machine](./hashes/chaos_machine.py) | ||
- [Sha1](./hashes/sha1.py) | ||
|
||
## File Transfer Protocol | ||
|
||
- [Ftp Client Server](./file_transfer_protocol/ftp_client_server.py) | ||
- [Ftp Send Receive](./file_transfer_protocol/ftp_send_receive.py) | ||
|
||
## Backtracking | ||
|
||
- [N Queens](./backtracking/n_queens.py) | ||
- [Sum Of Subsets](./backtracking/sum_of_subsets.py) | ||
- [All Subsequences](./backtracking/all_subsequences.py) | ||
- [All Permutations](./backtracking/all_permutations.py) | ||
|
||
## Ciphers | ||
|
||
- [Transposition Cipher](./ciphers/transposition_cipher.py) | ||
- [Atbash](./ciphers/Atbash.py) | ||
- [Rot13](./ciphers/rot13.py) | ||
- [Rabin Miller](./ciphers/rabin_miller.py) | ||
- [Transposition Cipher Encrypt Decrypt File](./ciphers/transposition_cipher_encrypt_decrypt_file.py) | ||
- [Affine Cipher](./ciphers/affine_cipher.py) | ||
- [Trafid Cipher](./ciphers/trafid_cipher.py) | ||
- [Base16](./ciphers/base16.py) | ||
- [Elgamal Key Generator](./ciphers/elgamal_key_generator.py) | ||
- [Rsa Cipher](./ciphers/rsa_cipher.py) | ||
- [Prehistoric Men.txt](./ciphers/prehistoric_men.txt) | ||
- [Vigenere Cipher](./ciphers/vigenere_cipher.py) | ||
- [Xor Cipher](./ciphers/xor_cipher.py) | ||
- [Brute Force Caesar Cipher](./ciphers/brute_force_caesar_cipher.py) | ||
- [Rsa Key Generator](./ciphers/rsa_key_generator.py) | ||
- [Simple Substitution Cipher](./ciphers/simple_substitution_cipher.py) | ||
- [Playfair Cipher](./ciphers/playfair_cipher.py) | ||
- [Morse Code Implementation](./ciphers/morse_Code_implementation.py) | ||
- [Base32](./ciphers/base32.py) | ||
- [Base85](./ciphers/base85.py) | ||
- [Base64 Cipher](./ciphers/base64_cipher.py) | ||
- [Onepad Cipher](./ciphers/onepad_cipher.py) | ||
- [Caesar Cipher](./ciphers/caesar_cipher.py) | ||
- [Hill Cipher](./ciphers/hill_cipher.py) | ||
- [Cryptomath Module](./ciphers/cryptomath_module.py) | ||
|
||
## Arithmetic Analysis | ||
|
||
- [Bisection](./arithmetic_analysis/bisection.py) | ||
- [Newton Method](./arithmetic_analysis/newton_method.py) | ||
- [Newton Raphson Method](./arithmetic_analysis/newton_raphson_method.py) | ||
- [Intersection](./arithmetic_analysis/intersection.py) | ||
- [Lu Decomposition](./arithmetic_analysis/lu_decomposition.py) | ||
|
||
## Boolean Algebra | ||
|
||
- [Quine Mc Cluskey](./boolean_algebra/quine_mc_cluskey.py) | ||
|
||
## Traversals | ||
|
||
- [Binary Tree Traversals](./traversals/binary_tree_traversals.py) | ||
|
||
## Maths | ||
|
||
- [Average](./maths/average.py) | ||
- [Abs Max](./maths/abs_Max.py) | ||
- [Average Median](./maths/average_median.py) | ||
- [Trapezoidal Rule](./maths/trapezoidal_rule.py) | ||
- [Prime Check](./maths/Prime_Check.py) | ||
- [Modular Exponential](./maths/modular_exponential.py) | ||
- [Newton Raphson](./maths/newton_raphson.py) | ||
- [Factorial Recursive](./maths/factorial_recursive.py) | ||
- [Extended Euclidean Algorithm](./maths/extended_euclidean_algorithm.py) | ||
- [Greater Common Divisor](./maths/greater_common_divisor.py) | ||
- [Fibonacci](./maths/fibonacci.py) | ||
- [Find Lcm](./maths/find_lcm.py) | ||
- [Find Max](./maths/Find_Max.py) | ||
- [Fermat Little Theorem](./maths/fermat_little_theorem.py) | ||
- [Factorial Python](./maths/factorial_python.py) | ||
- [Fibonacci Sequence Recursion](./maths/fibonacci_sequence_recursion.py) | ||
- [Sieve Of Eratosthenes](./maths/sieve_of_eratosthenes.py) | ||
- [Abs Min](./maths/abs_Min.py) | ||
- [Lucas Series](./maths/lucasSeries.py) | ||
- [Segmented Sieve](./maths/segmented_sieve.py) | ||
- [Find Min](./maths/Find_Min.py) | ||
- [Abs](./maths/abs.py) | ||
- [Simpson Rule](./maths/simpson_rule.py) | ||
- [Basic Maths](./maths/basic_maths.py) | ||
- [3n+1](./maths/3n+1.py) | ||
- [Binary Exponentiation](./maths/Binary_Exponentiation.py) | ||
|
||
## Digital Image Processing | ||
|
||
- ## Filters | ||
|
||
- [Median Filter](./digital_image_processing/filters/median_filter.py) | ||
- [Gaussian Filter](./digital_image_processing/filters/gaussian_filter.py) | ||
|
||
|
||
## Compression | ||
|
||
- [Peak Signal To Noise Ratio](./compression/peak_signal_to_noise_ratio.py) | ||
- [Huffman](./compression/huffman.py) | ||
|
||
## Graphs | ||
|
||
- [BFS Shortest Path](./graphs/bfs_shortest_path.py) | ||
- [Directed And Undirected (Weighted) Graph](<./graphs/Directed_and_Undirected_(Weighted)_Graph.py>) | ||
- [Minimum Spanning Tree Prims](./graphs/minimum_spanning_tree_prims.py) | ||
- [Graph Matrix](./graphs/graph_matrix.py) | ||
- [Basic Graphs](./graphs/basic_graphs.py) | ||
- [Dijkstra 2](./graphs/dijkstra_2.py) | ||
- [Tarjans Strongly Connected Components](./graphs/tarjans_scc.py) | ||
- [Check Bipartite Graph BFS](./graphs/check_bipartite_graph_bfs.py) | ||
- [Depth First Search](./graphs/depth_first_search.py) | ||
- [Kahns Algorithm Long](./graphs/kahns_algorithm_long.py) | ||
- [Breadth First Search](./graphs/breadth_first_search.py) | ||
- [Dijkstra](./graphs/dijkstra.py) | ||
- [Articulation Points](./graphs/articulation_points.py) | ||
- [Bellman Ford](./graphs/bellman_ford.py) | ||
- [Check Bipartite Graph Dfs](./graphs/check_bipartite_graph_dfs.py) | ||
- [Strongly Connected Components Kosaraju](./graphs/scc_kosaraju.py) | ||
- [Multi Hueristic Astar](./graphs/multi_hueristic_astar.py) | ||
- [Page Rank](./graphs/page_rank.py) | ||
- [Eulerian Path And Circuit For Undirected Graph](./graphs/Eulerian_path_and_circuit_for_undirected_graph.py) | ||
- [Edmonds Karp Multiple Source And Sink](./graphs/edmonds_karp_multiple_source_and_sink.py) | ||
- [Floyd Warshall](./graphs/floyd_warshall.py) | ||
- [Minimum Spanning Tree Kruskal](./graphs/minimum_spanning_tree_kruskal.py) | ||
- [Prim](./graphs/prim.py) | ||
- [Kahns Algorithm Topo](./graphs/kahns_algorithm_topo.py) | ||
- [BFS](./graphs/BFS.py) | ||
- [Finding Bridges](./graphs/finding_bridges.py) | ||
- [Graph List](./graphs/graph_list.py) | ||
- [Dijkstra Algorithm](./graphs/dijkstra_algorithm.py) | ||
- [A Star](./graphs/a_star.py) | ||
- [Even Tree](./graphs/even_tree.py) | ||
- [DFS](./graphs/DFS.py) | ||
|
||
## Networking Flow | ||
|
||
- [Minimum Cut](./networking_flow/minimum_cut.py) | ||
- [Ford Fulkerson](./networking_flow/ford_fulkerson.py) | ||
|
||
## Matrix | ||
|
||
- [Matrix Operation](./matrix/matrix_operation.py) | ||
- [Searching In Sorted Matrix](./matrix/searching_in_sorted_matrix.py) | ||
- [Spiral Print](./matrix/spiral_print.py) | ||
|
||
## Searches | ||
|
||
- [Quick Select](./searches/quick_select.py) | ||
- [Binary Search](./searches/binary_search.py) | ||
- [Interpolation Search](./searches/interpolation_search.py) | ||
- [Jump Search](./searches/jump_search.py) | ||
- [Linear Search](./searches/linear_search.py) | ||
- [Ternary Search](./searches/ternary_search.py) | ||
- [Tabu Search](./searches/tabu_search.py) | ||
- [Sentinel Linear Search](./searches/sentinel_linear_search.py) | ||
|
||
## Conversions | ||
|
||
- [Decimal To Binary](./conversions/decimal_to_binary.py) | ||
- [Decimal To Octal](./conversions/decimal_to_octal.py) | ||
|
||
## Dynamic Programming | ||
|
||
- [Fractional Knapsack](./dynamic_programming/Fractional_Knapsack.py) | ||
- [Sum Of Subset](./dynamic_programming/sum_of_subset.py) | ||
- [Fast Fibonacci](./dynamic_programming/fast_fibonacci.py) | ||
- [Bitmask](./dynamic_programming/bitmask.py) | ||
- [Abbreviation](./dynamic_programming/abbreviation.py) | ||
- [Rod Cutting](./dynamic_programming/rod_cutting.py) | ||
- [Knapsack](./dynamic_programming/knapsack.py) | ||
- [Max Sub Array](./dynamic_programming/max_sub_array.py) | ||
- [Fibonacci](./dynamic_programming/fibonacci.py) | ||
- [Minimum Partition](./dynamic_programming/minimum_partition.py) | ||
- [K Means Clustering Tensorflow](./dynamic_programming/k_means_clustering_tensorflow.py) | ||
- [Coin Change](./dynamic_programming/coin_change.py) | ||
- [Subset Generation](./dynamic_programming/subset_generation.py) | ||
- [Floyd Warshall](./dynamic_programming/floyd_warshall.py) | ||
- [Longest Sub Array](./dynamic_programming/longest_sub_array.py) | ||
- [Integer Partition](./dynamic_programming/integer_partition.py) | ||
- [Matrix Chain Order](./dynamic_programming/matrix_chain_order.py) | ||
- [Edit Distance](./dynamic_programming/edit_distance.py) | ||
- [Longest Common Subsequence](./dynamic_programming/longest_common_subsequence.py) | ||
- [Longest Increasing Subsequence O(nlogn)](<./dynamic_programming/longest_increasing_subsequence_O(nlogn).py>) | ||
- [Longest Increasing Subsequence](./dynamic_programming/longest_increasing_subsequence.py) | ||
|
||
## Divide And Conquer | ||
|
||
- [Max Subarray Sum](./divide_and_conquer/max_subarray_sum.py) | ||
- [Closest Pair Of Points](./divide_and_conquer/closest_pair_of_points.py) | ||
|
||
## Strings | ||
|
||
- [Knuth Morris Pratt](./strings/knuth_morris_pratt.py) | ||
- [Rabin Karp](./strings/rabin_karp.py) | ||
- [Naive String Search](./strings/naive_String_Search.py) | ||
- [Levenshtein Distance](./strings/levenshtein_distance.py) | ||
- [Min Cost String Conversion](./strings/min_cost_string_conversion.py) | ||
- [Boyer Moore Search](./strings/Boyer_Moore_Search.py) | ||
- [Manacher](./strings/manacher.py) | ||
|
||
## Sorts | ||
|
||
- [Quick Sort](./sorts/quick_sort.py) | ||
- [Selection Sort](./sorts/selection_sort.py) | ||
- [Bitonic Sort](./sorts/Bitonic_Sort.py) | ||
- [Cycle Sort](./sorts/cycle_sort.py) | ||
- [Comb Sort](./sorts/comb_sort.py) | ||
- [Topological Sort](./sorts/topological_sort.py) | ||
- [Merge Sort Fastest](./sorts/merge_sort_fastest.py) | ||
- [Random Pivot Quick Sort](./sorts/random_pivot_quick_sort.py) | ||
- [Heap Sort](./sorts/heap_sort.py) | ||
- [Insertion Sort](./sorts/insertion_sort.py) | ||
- [Counting Sort](./sorts/counting_sort.py) | ||
- [Bucket Sort](./sorts/bucket_sort.py) | ||
- [Quick Sort 3 Partition](./sorts/quick_sort_3_partition.py) | ||
- [Bogo Sort](./sorts/bogo_sort.py) | ||
- [Shell Sort](./sorts/shell_sort.py) | ||
- [Pigeon Sort](./sorts/pigeon_sort.py) | ||
- [Odd-Even Transposition Parallel](./sorts/Odd-Even_transposition_parallel.py) | ||
- [Tree Sort](./sorts/tree_sort.py) | ||
- [Cocktail Shaker Sort](./sorts/cocktail_shaker_sort.py) | ||
- [Random Normal Distribution Quicksort](./sorts/random_normal_distribution_quicksort.py) | ||
- [Wiggle Sort](./sorts/wiggle_sort.py) | ||
- [Pancake Sort](./sorts/pancake_sort.py) | ||
- [External Sort](./sorts/external_sort.py) | ||
- [Tim Sort](./sorts/tim_sort.py) | ||
- [Sorting Graphs.png](./sorts/sorting_graphs.png) | ||
- [Radix Sort](./sorts/radix_sort.py) | ||
- [Odd-Even Transposition Single-threaded](./sorts/Odd-Even_transposition_single-threaded.py) | ||
- [Bubble Sort](./sorts/bubble_sort.py) | ||
- [Gnome Sort](./sorts/gnome_sort.py) | ||
- [Merge Sort](./sorts/merge_sort.py) | ||
|
||
## Machine Learning | ||
|
||
- [Perceptron](./machine_learning/perceptron.py) | ||
- [Random Forest Classifier](./machine_learning/random_forest_classification/random_forest_classifier.ipynb) | ||
- [NaiveBayes.ipynb](./machine_learning/NaiveBayes.ipynb) | ||
- [Scoring Functions](./machine_learning/scoring_functions.py) | ||
- [Logistic Regression](./machine_learning/logistic_regression.py) | ||
- [Gradient Descent](./machine_learning/gradient_descent.py) | ||
- [Linear Regression](./machine_learning/linear_regression.py) | ||
- [Random Forest Regression](./machine_learning/random_forest_regression/random_forest_regression.py) | ||
- [Random Forest Regression](./machine_learning/random_forest_regression/random_forest_regression.ipynb) | ||
- [Reuters One Vs Rest Classifier.ipynb](./machine_learning/reuters_one_vs_rest_classifier.ipynb) | ||
- [Decision Tree](./machine_learning/decision_tree.py) | ||
- [Knn Sklearn](./machine_learning/knn_sklearn.py) | ||
- [K Means Clust](./machine_learning/k_means_clust.py) | ||
|
||
## Neural Network | ||
|
||
- [Perceptron](./neural_network/perceptron.py) | ||
- [Fully Connected Neural Network](./neural_network/fully_connected_neural_network.ipynb) | ||
- [Convolution Neural Network](./neural_network/convolution_neural_network.py) | ||
- [Back Propagation Neural Network](./neural_network/back_propagation_neural_network.py) | ||
|
||
## Data Structures | ||
|
||
- ## Binary Tree | ||
|
||
- [Basic Binary Tree](./data_structures/binary_tree/basic_binary_tree.py) | ||
- [Red Black Tree](./data_structures/binary_tree/red_black_tree.py) | ||
- [Fenwick Tree](./data_structures/binary_tree/fenwick_tree.py) | ||
- [Treap](./data_structures/binary_tree/treap.py) | ||
- [AVL Tree](./data_structures/binary_tree/AVL_tree.py) | ||
- [Segment Tree](./data_structures/binary_tree/segment_tree.py) | ||
- [Lazy Segment Tree](./data_structures/binary_tree/lazy_segment_tree.py) | ||
- [Binary Search Tree](./data_structures/binary_tree/binary_search_tree.py) | ||
|
||
- ## Trie | ||
|
||
- [Trie](./data_structures/trie/trie.py) | ||
|
||
- ## Linked List | ||
|
||
- [Swap Nodes](./data_structures/linked_list/swap_nodes.py) | ||
- [Doubly Linked List](./data_structures/linked_list/doubly_linked_list.py) | ||
- [Singly Linked List](./data_structures/linked_list/singly_linked_list.py) | ||
- [Is Palindrome](./data_structures/linked_list/is_Palindrome.py) | ||
|
||
- ## Stacks | ||
|
||
- [Postfix Evaluation](./data_structures/stacks/postfix_evaluation.py) | ||
- [Balanced Parentheses](./data_structures/stacks/balanced_parentheses.py) | ||
- [Infix To Prefix Conversion](./data_structures/stacks/infix_to_prefix_conversion.py) | ||
- [Stack](./data_structures/stacks/stack.py) | ||
- [Infix To Postfix Conversion](./data_structures/stacks/infix_to_postfix_conversion.py) | ||
- [Next Greater Element](./data_structures/stacks/next_greater_element.py) | ||
- [Stock Span Problem](./data_structures/stacks/stock_span_problem.py) | ||
|
||
- ## Queue | ||
|
||
- [Queue On Pseudo Stack](./data_structures/queue/queue_on_pseudo_stack.py) | ||
- [Double Ended Queue](./data_structures/queue/double_ended_queue.py) | ||
- [Queue On List](./data_structures/queue/queue_on_list.py) | ||
|
||
- ## Heap | ||
|
||
- [Heap](./data_structures/heap/heap.py) | ||
|
||
- ## Hashing | ||
|
||
- [Hash Table With Linked List](./data_structures/hashing/hash_table_with_linked_list.py) | ||
- [Quadratic Probing](./data_structures/hashing/quadratic_probing.py) | ||
- [Hash Table](./data_structures/hashing/hash_table.py) | ||
- [Double Hash](./data_structures/hashing/double_hash.py) | ||
|
||
|
||
## Other | ||
|
||
- [Detecting English Programmatically](./other/detecting_english_programmatically.py) | ||
- [Fischer Yates Shuffle](./other/fischer_yates_shuffle.py) | ||
- [Primelib](./other/primelib.py) | ||
- [Binary Exponentiation 2](./other/binary_exponentiation_2.py) | ||
- [Anagrams](./other/anagrams.py) | ||
- [Palindrome](./other/palindrome.py) | ||
- [Finding Primes](./other/finding_Primes.py) | ||
- [Two Sum](./other/two_sum.py) | ||
- [Password Generator](./other/password_generator.py) | ||
- [Linear Congruential Generator](./other/linear_congruential_generator.py) | ||
- [Frequency Finder](./other/frequency_finder.py) | ||
- [Euclidean Gcd](./other/euclidean_gcd.py) | ||
- [Word Patterns](./other/word_patterns.py) | ||
- [Nested Brackets](./other/nested_brackets.py) | ||
- [Binary Exponentiation](./other/binary_exponentiation.py) | ||
- [Sierpinski Triangle](./other/sierpinski_triangle.py) | ||
- [Game Of Life](./other/game_of_life.py) | ||
- [Tower Of Hanoi](./other/tower_of_hanoi.py) | ||
See our [directory](DIRECTORY.md). | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Explicit is better than implicit. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -18,4 +18,6 @@ def Atbash(): | |
output+=i | ||
print(output) | ||
|
||
Atbash() | ||
|
||
if __name__ == '__main__': | ||
Atbash() |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -59,4 +59,7 @@ def main(): | |
elif choice == '4': | ||
print ("Goodbye.") | ||
break | ||
main() | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why these lines are in
before_script
and whyblack
has|| true
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Successful before_script results are hidden under twisties so they do not clutter the error log so contributors can go straight to the heart of the problems.
black will fail badly in the near term because we do not mandate formatted code. However, we want to be able to understand improvement as we make it without failing the build.