{"id":37722703,"url":"https://github.com/nennigb/pypolsys","last_synced_at":"2026-01-16T13:34:40.480Z","repository":{"id":44578592,"uuid":"368253790","full_name":"nennigb/pypolsys","owner":"nennigb","description":"A python wrapper to the fortran package POLSYS_PLP that solve polynomial systems with homotopy method.","archived":false,"fork":false,"pushed_at":"2025-05-08T08:34:19.000Z","size":182,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-29T18:52:18.426Z","etag":null,"topics":["f2py","homotopy","multivariate-polynomials","polynomial-systems","wrapper"],"latest_commit_sha":null,"homepage":"","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nennigb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-05-17T16:32:29.000Z","updated_at":"2025-05-08T08:27:06.000Z","dependencies_parsed_at":"2025-04-17T17:21:24.131Z","dependency_job_id":"fafa131f-d389-4a0c-9afc-a504c4826ad0","html_url":"https://github.com/nennigb/pypolsys","commit_stats":{"total_commits":43,"total_committers":2,"mean_commits":21.5,"dds":0.4418604651162791,"last_synced_commit":"1ef59d7c9efbdc57519bdd3d172432f2465623e8"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nennigb/pypolsys","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nennigb%2Fpypolsys","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nennigb%2Fpypolsys/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nennigb%2Fpypolsys/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nennigb%2Fpypolsys/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nennigb","download_url":"https://codeload.github.com/nennigb/pypolsys/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nennigb%2Fpypolsys/sbom","scorecard":{"id":679411,"data":{"date":"2025-08-11","repo":{"name":"github.com/nennigb/pypolsys","commit":"d85ddd09dfe0f0efbf0ff9d1a93f438c556e044b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.2,"checks":[{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/CI-build-release.yml:132","Warn: no topLevel permission defined: .github/workflows/CI-build-release.yml:1","Warn: no topLevel permission defined: .github/workflows/ci-ubuntu.yml:1","Warn: no topLevel permission defined: .github/workflows/ci-windows.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/CI-build-release.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/CI-build-release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/CI-build-release.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/CI-build-release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/CI-build-release.yml:110: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/CI-build-release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/CI-build-release.yml:121: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/CI-build-release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/CI-build-release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/CI-build-release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/CI-build-release.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/CI-build-release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/CI-build-release.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/CI-build-release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/CI-build-release.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/CI-build-release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/CI-build-release.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/CI-build-release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-ubuntu.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/ci-ubuntu.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-ubuntu.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/ci-ubuntu.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-windows.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/ci-windows.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-windows.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/nennigb/pypolsys/ci-windows.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci-ubuntu.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/ci-ubuntu.yml:37","Info:   0 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/CI-build-release.yml:97"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}}]},"last_synced_at":"2025-08-21T22:36:23.899Z","repository_id":44578592,"created_at":"2025-08-21T22:36:23.899Z","updated_at":"2025-08-21T22:36:23.899Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479033,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["f2py","homotopy","multivariate-polynomials","polynomial-systems","wrapper"],"created_at":"2026-01-16T13:34:40.387Z","updated_at":"2026-01-16T13:34:40.465Z","avatar_url":"https://github.com/nennigb.png","language":"Fortran","funding_links":[],"categories":[],"sub_categories":[],"readme":"PYPOLSYS\n========\n[![pypi release](https://img.shields.io/pypi/v/pypolsys.svg)](https://pypi.org/project/pypolsys/) ![CI-Ubuntu](https://github.com/nennigb/pypolsys/workflows/CI-Ubuntu/badge.svg) ![CI-Windows](https://github.com/nennigb/pypolsys/workflows/CI-Windows/badge.svg)\n\nThis package provides a python wrapper to `POLSYS_PLP` fortran90 package from Layne T. Watson, Steven M. Wise, Andrew J. Sommese, August, 1998.\n\n`POLSYS_PLP` is a solver for N complex coefficients polynomial systems of equations in N unknowns by a probability-one, globally convergent homotopy method.\n\nFor a quick survey on [homotopy continuation](https://en.wikipedia.org/wiki/Numerical_algebraic_geometry#Homotopy_continuation) see the very clear practical presentation available on [HomotopyContinuation.jl](https://www.juliahomotopycontinuation.org/guides) website or this nice [tutorial](http://homepages.math.uic.edu/~jan/tutorial.pdf).\n\nThere are several other homotopy softwares (more recent, also with python interface, ...) allowing more advanced applications. See for instance:\n  - [PHCpack](https://github.com/janverschelde/PHCpack)\n  - [Bertini](https://github.com/bertiniteam/b2)\n  - [Hom4PSpy](http://www.hom4ps3.org) and the wrapper on [pypi](https://pypi.org/project/Hom4PSpy/)\n  - [HomotopyContinuation.jl](https://www.juliahomotopycontinuation.org)\n\nThe advantage of `POLSYS_PLP` is to be an open-source self-content single f90 file (it requires few `blas` and `lapack` functions that are shipped with `POLSYS_PLP` sources or that may be linked to optimized libraries). The idea of `pypolsys` project is to create an **easy to install and to deploy python package to start with Homotopy method**.\n\nThis wrapper has been developped to tackle polynomial systems obtained by high order perturbation of multi-parametric eigenvalue problems obtained with [`EasterEig`](https://github.com/nennigb/EasterEig). This yields to dense polynomial system. In this context, multivariate Horner algorithm has been added to quickly evaluate simultaneously the polynomial and its Jacobian matrix.\n\n## POLSYS_PLP\n`POLSYS_PLP` use a probability-one globally convergent homotopy method,\nto find all finite **isolated complex solutions** to a system\nF(X) = 0 of N polynomial equations in N unknowns with complex\ncoefficients.  A partitioned linear product (PLP) formulation is used\nfor the start system of the homotopy map.\n\nThe whole algorithm and its fortran90 implementation is described in\n\u003e Wise, Steven M., Andrew J. Sommese, and Layne T. Watson. \"Algorithm 801: POLSYS_PLP: A partitioned linear product homotopy code for solving polynomial systems of equations.\" ACM Transactions on Mathematical Software (TOMS) 26.1 (2000): 176-200.\n\n  - The sources are available on [netlib](http://www.netlib.org/opt/polsysplp.tgz).\n  - The theoretical part of `POLSYS_PLP` is available [here](https://vtechworks.lib.vt.edu/bitstream/handle/10919/36933/thesis.pdf)\n  - `POLSYS_PLP` is based on [`HOMPACK`](https://vtechworks.lib.vt.edu/bitstream/handle/10919/19612/TR-90-36.pdf)\n\nTo facilitate the build of this module, a copy of `POLSYS_PLP` *original* sources is included in the `pypolsys/801` folder.\n\n## Installation\n\n### From the wheel\nThe easiest way to install `pypolsys` is to use the wheel available on pypi. Wheels are availlable for the most usual 64 bits architectures and os (Linux, Windows, Macos).\nYou can install `pypolsys` from pip:\n```\npip install pypolsys [--user]\n```\nyou can also use a virtual environnement for better isolation.\n\n### From the source\nIf wheels are not available or if you need to modify the code or the last developpement version, you need to build `pypolsys` from the source. The sources are available on pypi or on the github [repos](https://github.com/nennigb/pypolsys/).\n\nYou'll need :\n  * python (tested for v \u003e= 3.10);\n  * pip;\n  * fortran compiler (tested with `gfortran` on linux and macos, with `m2w64-toolchain` on windows with conda or with `rtools` distribution of `mingw64`);\n  * lapack and blas installation (only on linux), optional. The useful lapack/blas routines are also shipped with `POLSYS_PLP` sources and built by default on Window or on demand on linux (see below). Optimized library are preferred and often already present on linux systems. If not, library like `openblas` and the required development files can be installed with `sudo apt install libopenblas-dev` on debian based distribution (including ubuntu).\n\nAfter, just use\n```\npip install pypolsys [--user]\n```\nit will download the source from pypi and build `pypolsys`.\nIf you manualy get the sources, in the `pypolsys` source folder (where there is the `meson.build` file), run\n```\npip install .\n```\nor,\n```\npip install -v --no-build-isolation --editable .\n```\nto install it in editable mode.\n\nIf needed, please see the steps given in the continuous integration scripts [ci-ubuntu](.github/workflows/ci-ubuntu.yml), [ci-windows](.github/workflows/ci-windows.yml) or [CI-build-release.yml](.github/workflows/CI-build-release.yml).\n\n\n### Running tests\nTo execute the full test suite, run :\n```\npython -m pypolsys.test\n```\n\n### Troubleshooting\nWith old `gfortran` version present on ubuntu 16.04 (see [here](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84276)) the building may failed. To avoid this, `intent(in, out)` statement has to be removed from the original `pypolsys/801/polsys_plp.f90`. It seems to work out of the box with `gfortan-8`.\n\n## Usage\nNote that this projet is a work in progress and the API may change.\n\n### Get started\nLet us consider the following example\n```\nx**2 + y + z - 1 = 0\nx + y**2 + z - 1 = 0\nx + y + z**2 - 1 = 0\n```\n\u003e Cox, David, John Little, and Donal O'Shea. Ideals, varieties, and algorithms: an introduction to computational algebraic geometry and commutative algebra. Springer Science \u0026 Business Media, 2013, From page 122.\n\nWith 5 distinct solutions in C : (1,0,0) (0,1,0), (0,0,1), (-1+√2, -1+√2, -1+√2), (-1 -√2, -1-√2, -1-√2). The main steps of `pypolsys`'s workflow are:\n```python\nimport numpy as np\nimport pypolsys\n# Declare the number of equation of the polynomial system\nN = 3\n# and the number of monoms of each equation (here 4 monoms for each equation).\nn_coef_per_eq = np.array([4, 4, 4], dtype=np.int32)\n# Provide the coefficients as 1D array\nall_coef = np.array([1, 1,  1, -1,\n                     1, 1,  1, -1,\n                     1, 1,  1, -1], dtype=complex)\n# then the degree of each monom\nall_deg = np.zeros((np.sum(n_coef_per_eq), N), dtype=np.int32)\nall_deg[0, 0] = 2\nall_deg[1, 1] = 1\nall_deg[2, 2] = 1\nall_deg[4, 0] = 1\nall_deg[5, 1] = 2\nall_deg[6, 2] = 1\nall_deg[8, 0] = 1\nall_deg[9, 1] = 1\nall_deg[10, 2] = 2\n# Pass it to POLSYS_PLP\npypolsys.polsys.init_poly(N, n_coef_per_eq, all_coef, all_deg)\n# Create homogeneous partition\n# (N.B. Partitions are important to limit the number of paths\n# to track associated to solutions at infinity)\npart = pypolsys.utils.make_h_part(3)\n# Pass it to POLSYS_PLP\npypolsys.polsys.init_partition(*part)\n# Show coef\npypolsys.polsys.show_coef()\n# Found 8 solutions, and track 8 paths; some solutions appear twice\nbplp = pypolsys.polsys.solve(1e-8, 1e-14, 0.0)\n# Get the roots, array of size (N+1) x bplp\nr = pypolsys.polsys.myroots\n# Get status of the solving process\npypolsys.polsys.report()\n```\nNote that due to projective transformation, the `r[N, :]` is the homogeneous variable. All results are returned ready to used (unscaled and untransformed). \n\nAnother way, sometimes more convenient, is to setup the polynomial with function `pypolsys.utils.fromSympy`,\n\n```python\nimport numpy as np\nimport pypolsys\nimport sympy as sym\n\nx, y, z = sym.symbols('x, y, z')\npol = pypolsys.utils.fromSympy([sym.poly(x**2 + y + z - 1, (x, y, z)),\n                                sym.poly(x + y**2 + z - 1, (x, y, z)),\n                                sym.poly(x + y + z**2 - 1, (x, y, z))])\n# Pass it to POLSYS_PLP\npypolsys.polsys.init_poly(*pol)\n# Create homogeneous partition\npart = pypolsys.utils.make_h_part(3)\n# Pass it to POLSYS_PLP\npypolsys.polsys.init_partition(*part)\n# Solve\nbplp = pypolsys.polsys.solve(1e-8, 1e-14, 0.0)\n# Get the roots, array of size (N+1) x bplp\nr = pypolsys.polsys.myroots\n# Get status of the solving process\npypolsys.polsys.report()\n```\nMore examples are available in the [`pypolsys/test.py`](./pypolsys/test.py) file. For dense polynomial system, `dense` flag can be passed to the `solve` method to speed up evaluation.\n\n\n### Organisation\nThis python package is divided into two parts\n  - `pypolsys.polsys` corresponds to the interface to `POLSYS_PLP` and maps the following fortran subroutines (more doc is emmbedded in the f90 files) :\n      * `init_poly`, initialize the polynomials monomials,\n      * `init_partition`, initialize the variables partition,\n      * `solve`, solve the polynomial system,\n      * `refine`, refine the given paths,\n      * `bezout`, compute the Bezout PLP number corresponding to the variable partition, usefull to test partition without solving,\n      * `report`, show a report on the homotopy solving process\n      * `show_partition` and `show_coef`, show the variables partitions and the monomials respectively.\n\n      some attributs are also available :\n      * `myroots`, containing the roots,\n      * `path_status` and `solve_status`, containing the status of each tracked path and of the global solving process,\n      * `num_jac_eval`, containing the number of evaluation of the Jacobian matrix.\n  - `pypolsys.utils` contains utilities to facilitate the creation of the partition, polynomial or the estimation of the number of path (full python).\n\n## View documentation\nThe doctrings are compatible with several Auto-generate API documentation, like `pdoc3`. Once the package has been installed or the at `pypolsys` location run,\n```\npdoc3 --html --force --config latex_math=True pypolsys\n```\nThe html files are generated in place. Then open the `pypolsys/index.html` file. This interactive doc is particularly useful to see latex includes.\n\n## Limitation\nDue to shared variables in modules, only one polynomial instance can be handled. Concurrent calls to the `.so` file may create unexpected behavior.\nTo solve several polynomials, you can use `concurrent.futures`.\n\n## How to contribute\nThis project started because we need some easy to deploy Homotopy solver. We are users but not experts on these methods.\n\nIf you want to contribute to `pypolsys`, your are welcomed! Don't hesitate to\n  - report bugs, installation problems or ask questions on [issues](https://github.com/nennigb/pypolsys/issues);\n  - propose some enhancements in the code or in documentation through **pull requests** (PR);\n  - add or enhance support to other plateforms\n\nTo ensure code homogeneity among contributors, we use a source-code analyzer (eg. pylint).\nBefore submitting a PR, run the tests suite ;-)\n\n## Developpement\nIf you need to modify `wrapper.f90` fortran source file. You will need to re-build the Fortran extension. This should be done into 2 steps\n  1. The pyf file that avoid trouble with user_defined fortran type should be updated with `f2py` utilities :\n\n     ```\n     f2py -m polsys -h polsys.pyf wrapper.f90 --overwrite-signature\n     ```\n\n  2. Re run the install\n\n\n## License\nThis file is part of pypolsys, a simple python wrapper to fortran package polsys_plp.\npypolsys is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\npypolsys is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\nYou should have received a copy of the GNU General Public License along with pypolsys.  If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnennigb%2Fpypolsys","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnennigb%2Fpypolsys","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnennigb%2Fpypolsys/lists"}