From 949cd9008d33eeffd1c0f8d7d5f79ab2cee0858b Mon Sep 17 00:00:00 2001
From: Jakub Balinski <31112335+balins@users.noreply.github.com>
Date: Sun, 1 Sep 2024 10:02:00 +0200
Subject: [PATCH] fix docs
---
doc/_static/img/index_api.svg | 97 ---------
doc/_static/img/index_examples.svg | 76 -------
doc/_static/img/index_getting_started.svg | 66 ------
doc/_static/img/index_user_guide.svg | 67 ------
doc/api.rst | 25 +--
doc/conf.py | 16 +-
doc/index.rst | 95 +--------
doc/quick_start.rst | 181 ----------------
doc/user_guide.rst | 180 ----------------
examples/README.txt | 2 +-
examples/plot_classifier.py | 2 +-
fsvm/_fuzzy_svc.py | 5 +-
venv/bin/Activate.ps1 | 247 ++++++++++++++++++++++
venv/bin/activate | 70 ++++++
venv/bin/activate.csh | 27 +++
venv/bin/activate.fish | 69 ++++++
venv/bin/docutils | 8 +
venv/bin/keyring | 8 +
venv/bin/markdown-it | 8 +
venv/bin/normalizer | 8 +
venv/bin/pip | 8 +
venv/bin/pip3 | 8 +
venv/bin/pip3.12 | 8 +
venv/bin/pkginfo | 8 +
venv/bin/pygmentize | 8 +
venv/bin/pyproject-build | 8 +
venv/bin/python | 1 +
venv/bin/python3 | 1 +
venv/bin/python3.12 | 1 +
venv/bin/rst2html | 8 +
venv/bin/rst2html4 | 8 +
venv/bin/rst2html5 | 8 +
venv/bin/rst2latex | 8 +
venv/bin/rst2man | 8 +
venv/bin/rst2odt | 8 +
venv/bin/rst2pseudoxml | 8 +
venv/bin/rst2s5 | 8 +
venv/bin/rst2xetex | 8 +
venv/bin/rst2xml | 8 +
venv/bin/twine | 8 +
venv/pyvenv.cfg | 5 +
41 files changed, 612 insertions(+), 789 deletions(-)
delete mode 100644 doc/_static/img/index_api.svg
delete mode 100644 doc/_static/img/index_examples.svg
delete mode 100644 doc/_static/img/index_getting_started.svg
delete mode 100644 doc/_static/img/index_user_guide.svg
delete mode 100644 doc/quick_start.rst
delete mode 100644 doc/user_guide.rst
create mode 100644 venv/bin/Activate.ps1
create mode 100644 venv/bin/activate
create mode 100644 venv/bin/activate.csh
create mode 100644 venv/bin/activate.fish
create mode 100755 venv/bin/docutils
create mode 100755 venv/bin/keyring
create mode 100755 venv/bin/markdown-it
create mode 100755 venv/bin/normalizer
create mode 100755 venv/bin/pip
create mode 100755 venv/bin/pip3
create mode 100755 venv/bin/pip3.12
create mode 100755 venv/bin/pkginfo
create mode 100755 venv/bin/pygmentize
create mode 100755 venv/bin/pyproject-build
create mode 120000 venv/bin/python
create mode 120000 venv/bin/python3
create mode 120000 venv/bin/python3.12
create mode 100755 venv/bin/rst2html
create mode 100755 venv/bin/rst2html4
create mode 100755 venv/bin/rst2html5
create mode 100755 venv/bin/rst2latex
create mode 100755 venv/bin/rst2man
create mode 100755 venv/bin/rst2odt
create mode 100755 venv/bin/rst2pseudoxml
create mode 100755 venv/bin/rst2s5
create mode 100755 venv/bin/rst2xetex
create mode 100755 venv/bin/rst2xml
create mode 100755 venv/bin/twine
create mode 100644 venv/pyvenv.cfg
diff --git a/doc/_static/img/index_api.svg b/doc/_static/img/index_api.svg
deleted file mode 100644
index 69f7ba1..0000000
--- a/doc/_static/img/index_api.svg
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
diff --git a/doc/_static/img/index_examples.svg b/doc/_static/img/index_examples.svg
deleted file mode 100644
index de3d902..0000000
--- a/doc/_static/img/index_examples.svg
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
diff --git a/doc/_static/img/index_getting_started.svg b/doc/_static/img/index_getting_started.svg
deleted file mode 100644
index 2d36622..0000000
--- a/doc/_static/img/index_getting_started.svg
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
diff --git a/doc/_static/img/index_user_guide.svg b/doc/_static/img/index_user_guide.svg
deleted file mode 100644
index bd17053..0000000
--- a/doc/_static/img/index_user_guide.svg
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
diff --git a/doc/api.rst b/doc/api.rst
index 768ab5c..17e99f8 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -4,37 +4,18 @@
API Reference
#############
-This is an example on how to document the API of your own project.
+API reference for the `fsvm` package.
.. currentmodule:: fsvm
-Estimator
+FuzzySVC
=========
.. autosummary::
:toctree: generated/
:template: class.rst
- TemplateEstimator
-
-Transformer
-===========
-
-.. autosummary::
- :toctree: generated/
- :template: class.rst
-
- TemplateTransformer
-
-Predictor
-=========
-
-.. autosummary::
- :toctree: generated/
- :template: class.rst
-
- TemplateClassifier
-
+ FuzzySVC
Utilities
=========
diff --git a/doc/conf.py b/doc/conf.py
index dec5ab9..305872a 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -10,9 +10,9 @@
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
from importlib.metadata import version as get_version
-project = "Scikit-learn Project Template"
-copyright = "2016, V. Birodkar"
-author = "V. Birodkar"
+project = "fsvm"
+copyright = "2024, J. Baliński"
+author = "J. Baliński"
release = get_version("fsvm")
version = ".".join(release.split(".")[:3])
@@ -51,24 +51,22 @@
"css/fsvm.css",
]
html_sidebars = {
- "quick_start": [],
- "user_guide": [],
+ "api": [],
"auto_examples/index": [],
}
html_theme_options = {
"external_links": [],
"github_url": "https://github.com/balins/fsvm",
- # "twitter_url": "https://twitter.com/pandas_dev",
"use_edit_page_button": True,
"show_toc_level": 1,
# "navbar_align": "right", # For testing that the navbar items align properly
}
html_context = {
- "github_user": "scikit-learn-contrib",
- "github_repo": "project-template",
- "github_version": "master",
+ "github_user": "balins",
+ "github_repo": "fsvm",
+ "github_version": "main",
"doc_path": "doc",
}
diff --git a/doc/index.rst b/doc/index.rst
index 2c66c59..3448501 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -1,4 +1,4 @@
-.. project-template documentation master file, created by
+.. fsvm documentation master file, created by
sphinx-quickstart on Mon Jan 18 14:44:12 2016.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
@@ -6,103 +6,22 @@
:notoc:
#############################################
-Project template for `scikit-learn` extension
+Fuzzy Support Vector Machine (FSVM)
#############################################
-**Date**: |today| **Version**: |version|
+**Date**: 31.08.2024 **Version**: 0.1.0
**Useful links**:
-`Source Repository `__ |
-`Issues & Ideas `__ |
-
-This is the documentation for the `project-template` to help at extending
-`scikit-learn`. It provides some information on how to build your own custom
-`scikit-learn` compatible estimators as well as a template to package them.
-
-
-.. grid:: 1 2 2 2
- :gutter: 4
- :padding: 2 2 0 0
- :class-container: sd-text-center
-
- .. grid-item-card:: Getting started
- :img-top: _static/img/index_getting_started.svg
- :class-card: intro-card
- :shadow: md
-
- Information regarding this template and how to modify it for your own project.
-
- +++
-
- .. button-ref:: quick_start
- :ref-type: ref
- :click-parent:
- :color: secondary
- :expand:
-
- To the getting started guideline
-
- .. grid-item-card:: User guide
- :img-top: _static/img/index_user_guide.svg
- :class-card: intro-card
- :shadow: md
-
- An example of narrative documentation. Here, we will explain how to create your
- own `scikit-learn` estimator.
-
- +++
-
- .. button-ref:: user_guide
- :ref-type: ref
- :click-parent:
- :color: secondary
- :expand:
-
- To the user guide
-
- .. grid-item-card:: API reference
- :img-top: _static/img/index_api.svg
- :class-card: intro-card
- :shadow: md
-
- An example of API documentation. This is an example how to use `sphinx` to
- automatically generate reference API page.
-
- +++
-
- .. button-ref:: api
- :ref-type: ref
- :click-parent:
- :color: secondary
- :expand:
-
- To the reference guide
-
- .. grid-item-card:: Examples
- :img-top: _static/img/index_examples.svg
- :class-card: intro-card
- :shadow: md
-
- A set of examples. It complements the User Guide and it is the right place to
- show how to use your compatible estimator.
-
- +++
-
- .. button-ref:: general_examples
- :ref-type: ref
- :click-parent:
- :color: secondary
- :expand:
-
- To the gallery of examples
+`Source Repository `__ |
+`Issues & Ideas `__ |
+This is the documentation for the `fsvm`, a package providing a Fuzzy Support Vector Machine
+implementation compatible with `scikit-learn`.
.. toctree::
:maxdepth: 3
:hidden:
:titlesonly:
- quick_start
- user_guide
api
auto_examples/index
diff --git a/doc/quick_start.rst b/doc/quick_start.rst
deleted file mode 100644
index b624f09..0000000
--- a/doc/quick_start.rst
+++ /dev/null
@@ -1,181 +0,0 @@
-.. _quick_start:
-
-###############
-Getting started
-###############
-
-This package serves as a skeleton package aiding at developing compatible
-scikit-learn contribution.
-
-Creating your own scikit-learn contribution package
-===================================================
-
-Download and setup your repository
-----------------------------------
-
-To create your package, you need to clone the ``project-template`` repository:
-
-.. prompt:: bash $
-
- git clone https://github.com/scikit-learn-contrib/project-template.git
-
-Before to reinitialize your git repository, you need to make the following
-changes. Replace all occurrences of ``skltemplate``, ``sklearn-template``, or
-``project-template`` with the name of you own project. You can find all the
-occurrences using the following command:
-
-.. prompt:: bash $
-
- git grep skltemplate
- git grep sklearn-template
- git grep project-template
-
-To remove the history of the template package, you need to remove the `.git`
-directory:
-
-.. prompt:: bash $
-
- rm -rf .git
-
-Then, you need to initialize your new git repository:
-
-.. prompt:: bash $
-
- git init
- git add .
- git commit -m 'Initial commit'
-
-Finally, you create an online repository on GitHub and push your code online:
-
-.. prompt:: bash $
-
- git remote add origin https://github.com/your_remote/your_contribution.git
- git push origin main
-
-Develop your own scikit-learn estimators
-----------------------------------------
-
-.. _check_estimator: http://scikit-learn.org/stable/modules/generated/sklearn.utils.estimator_checks.check_estimator.html#sklearn.utils.estimator_checks.check_estimator
-.. _`Contributor's Guide`: http://scikit-learn.org/stable/developers/
-.. _PEP8: https://www.python.org/dev/peps/pep-0008/
-.. _PEP257: https://www.python.org/dev/peps/pep-0257/
-.. _NumPyDoc: https://github.com/numpy/numpydoc
-.. _doctests: https://docs.python.org/3/library/doctest.html
-
-You can modify the source files as you want. However, your custom estimators
-need to pass the check_estimator_ test to be scikit-learn compatible. We provide a
-file called `test_common.py` where we run the checks on our custom estimators.
-
-You can refer to the :ref:`User Guide ` to help you create a compatible
-scikit-learn estimator.
-
-In any case, developers should endeavor to adhere to scikit-learn's
-`Contributor's Guide`_ which promotes the use of:
-
-* algorithm-specific unit tests, in addition to ``check_estimator``'s common
- tests;
-* PEP8_-compliant code;
-* a clearly documented API using NumpyDoc_ and PEP257_-compliant docstrings;
-* references to relevant scientific literature in standard citation formats;
-* doctests_ to provide succinct usage examples;
-* standalone examples to illustrate the usage, model visualisation, and
- benefits/benchmarks of particular algorithms;
-* efficient code when the need for optimization is supported by benchmarks.
-
-Managing your local and continuous integration environment
-----------------------------------------------------------
-
-Here, we set up for you an repository that uses `pixi`. The `pixi.toml` file defines
-the packages and tasks to be run that we will present below. You can refer to the
-following documentation link to install `pixi`: https://pixi.sh/latest/#installation
-
-Once done, you can refer to the documentation to get started but we provide the
-command below to interact with the main task requested to develop your package.
-
-Edit the documentation
-----------------------
-
-.. _Sphinx: http://www.sphinx-doc.org/en/stable/
-
-The documentation is created using Sphinx_. In addition, the examples are
-created using ``sphinx-gallery``. Therefore, to generate locally the
-documentation, you can leverage the following `pixi` task:
-
-.. prompt:: bash $
-
- pixi run build-doc
-
-The documentation is made of:
-
-* a home page, ``doc/index.rst``;
-* an API documentation, ``doc/api.rst`` in which you should add all public
- objects for which the docstring should be exposed publicly.
-* a User Guide documentation, ``doc/user_guide.rst``, containing the narrative
- documentation of your package, to give as much intuition as possible to your
- users.
-* examples which are created in the `examples/` folder. Each example
- illustrates some usage of the package. the example file name should start by
- `plot_*.py`.
-
-Local testing
--------------
-
-To run the tests locally, you can use the following command:
-
-.. prompt:: bash $
-
- pixi run test
-
-It will use `pytest` under the hood to run the package tests.
-
-In addition, you have a linter task to check the code consistency in terms of style:
-
-.. prompt:: bash $
-
- pixi run lint
-
-Activating the development environment
---------------------------------------
-
-In the case that you don't want to use the `pixi run` commands and directly interact
-with the usual python tools, you can activate the development environment:
-
-.. prompt:: bash $
-
- pixi shell -e dev
-
-This will activate an environment containing the dependencies needed to run the linters,
-tests, and build the documentation. So for instance, you can run the tests with:
-
-.. prompt:: bash $
-
- pytest -vsl skltemplate
-
-In this case, you can even use pre-commit before using git. You will need to initialize
-it with:
-
-.. prompt:: bash $
-
- pre-commit install
-
-Setup the continuous integration
---------------------------------
-
-The project template already contains configuration files of the continuous
-integration system. It leverage the above pixi commands and run on GitHub Actions.
-In short, it will:
-
-* run the tests on the different platforms (Linux, MacOS, Windows) and upload the
- coverage report to codecov.io;
-* check the code style (linter);
-* build the documentation and deploy it automatically on GitHub Pages.
-
-Publish your package
-====================
-
-.. _PyPi: https://packaging.python.org/tutorials/packaging-projects/
-.. _conda-forge: https://conda-forge.org/
-
-You can make your package available through PyPi_ and conda-forge_. Refer to
-the associated documentation to be able to upload your packages such that
-it will be installable with ``pip`` and ``conda``.
diff --git a/doc/user_guide.rst b/doc/user_guide.rst
deleted file mode 100644
index 527d4c6..0000000
--- a/doc/user_guide.rst
+++ /dev/null
@@ -1,180 +0,0 @@
-.. title:: User guide : contents
-
-.. _user_guide:
-
-==========
-User Guide
-==========
-
-Estimator
----------
-
-The central piece of transformer, regressor, and classifier is
-:class:`sklearn.base.BaseEstimator`. All estimators in scikit-learn are derived
-from this class. In more details, this base class enables to set and get
-parameters of the estimator. It can be imported as::
-
- >>> from sklearn.base import BaseEstimator
-
-Once imported, you can create a class which inherate from this base class::
-
- >>> class MyOwnEstimator(BaseEstimator):
- ... pass
-
-Transformer
------------
-
-Transformers are scikit-learn estimators which implement a ``transform`` method.
-The use case is the following:
-
-* at ``fit``, some parameters can be learned from ``X`` and ``y``;
-* at ``transform``, `X` will be transformed, using the parameters learned
- during ``fit``.
-
-.. _mixin: https://en.wikipedia.org/wiki/Mixin
-
-In addition, scikit-learn provides a
-mixin_, i.e. :class:`sklearn.base.TransformerMixin`, which
-implement the combination of ``fit`` and ``transform`` called ``fit_transform``.
-
-One can import the mixin class as::
-
- >>> from sklearn.base import TransformerMixin
-
-Therefore, when creating a transformer, you need to create a class which
-inherits from both :class:`sklearn.base.BaseEstimator` and
-:class:`sklearn.base.TransformerMixin`. The scikit-learn API imposed ``fit`` to
-**return ``self``**. The reason is that it allows to pipeline ``fit`` and
-``transform`` imposed by the :class:`sklearn.base.TransformerMixin`. The
-``fit`` method is expected to have ``X`` and ``y`` as inputs. Note that
-``transform`` takes only ``X`` as input and is expected to return the
-transformed version of ``X``::
-
- >>> class MyOwnTransformer(TransformerMixin, BaseEstimator):
- ... def fit(self, X, y=None):
- ... return self
- ... def transform(self, X):
- ... return X
-
-We build a basic example to show that our :class:`MyOwnTransformer` is working
-within a scikit-learn ``pipeline``::
-
- >>> from sklearn.datasets import load_iris
- >>> from sklearn.pipeline import make_pipeline
- >>> from sklearn.linear_model import LogisticRegression
- >>> X, y = load_iris(return_X_y=True)
- >>> pipe = make_pipeline(MyOwnTransformer(),
- ... LogisticRegression(random_state=10,
- ... solver='lbfgs'))
- >>> pipe.fit(X, y) # doctest: +ELLIPSIS
- Pipeline(...)
- >>> pipe.predict(X) # doctest: +ELLIPSIS
- array([...])
-
-Predictor
----------
-
-Regressor
-~~~~~~~~~
-
-Similarly, regressors are scikit-learn estimators which implement a ``predict``
-method. The use case is the following:
-
-* at ``fit``, some parameters can be learned from ``X`` and ``y``;
-* at ``predict``, predictions will be computed using ``X`` using the parameters
- learned during ``fit``.
-
-In addition, scikit-learn provides a mixin_, i.e.
-:class:`sklearn.base.RegressorMixin`, which implements the ``score`` method
-which computes the :math:`R^2` score of the predictions.
-
-One can import the mixin as::
-
- >>> from sklearn.base import RegressorMixin
-
-Therefore, we create a regressor, :class:`MyOwnRegressor` which inherits from
-both :class:`sklearn.base.BaseEstimator` and
-:class:`sklearn.base.RegressorMixin`. The method ``fit`` gets ``X`` and ``y``
-as input and should return ``self``. It should implement the ``predict``
-function which should output the predictions of your regressor::
-
- >>> import numpy as np
- >>> class MyOwnRegressor(RegressorMixin, BaseEstimator):
- ... def fit(self, X, y):
- ... return self
- ... def predict(self, X):
- ... return np.mean(X, axis=1)
-
-We illustrate that this regressor is working within a scikit-learn pipeline::
-
- >>> from sklearn.datasets import load_diabetes
- >>> X, y = load_diabetes(return_X_y=True)
- >>> pipe = make_pipeline(MyOwnTransformer(), MyOwnRegressor())
- >>> pipe.fit(X, y) # doctest: +ELLIPSIS
- Pipeline(...)
- >>> pipe.predict(X) # doctest: +ELLIPSIS
- array([...])
-
-Since we inherit from the :class:`sklearn.base.RegressorMixin`, we can call
-the ``score`` method which will return the :math:`R^2` score::
-
- >>> pipe.score(X, y) # doctest: +ELLIPSIS
- -3.9...
-
-Classifier
-~~~~~~~~~~
-
-Similarly to regressors, classifiers implement ``predict``. In addition, they
-output the probabilities of the prediction using the ``predict_proba`` method:
-
-* at ``fit``, some parameters can be learned from ``X`` and ``y``;
-* at ``predict``, predictions will be computed using ``X`` using the parameters
- learned during ``fit``. The output corresponds to the predicted class for each sample;
-* ``predict_proba`` will give a 2D matrix where each column corresponds to the
- class and each entry will be the probability of the associated class.
-
-In addition, scikit-learn provides a mixin, i.e.
-:class:`sklearn.base.ClassifierMixin`, which implements the ``score`` method
-which computes the accuracy score of the predictions.
-
-One can import this mixin as::
-
- >>> from sklearn.base import ClassifierMixin
-
-Therefore, we create a classifier, :class:`MyOwnClassifier` which inherits
-from both :class:`slearn.base.BaseEstimator` and
-:class:`sklearn.base.ClassifierMixin`. The method ``fit`` gets ``X`` and ``y``
-as input and should return ``self``. It should implement the ``predict``
-function which should output the class inferred by the classifier.
-``predict_proba`` will output some probabilities instead::
-
- >>> class MyOwnClassifier(ClassifierMixin, BaseEstimator):
- ... def fit(self, X, y):
- ... self.classes_ = np.unique(y)
- ... return self
- ... def predict(self, X):
- ... return np.random.randint(0, self.classes_.size,
- ... size=X.shape[0])
- ... def predict_proba(self, X):
- ... pred = np.random.rand(X.shape[0], self.classes_.size)
- ... return pred / np.sum(pred, axis=1)[:, np.newaxis]
-
-We illustrate that this regressor is working within a scikit-learn pipeline::
-
- >>> X, y = load_iris(return_X_y=True)
- >>> pipe = make_pipeline(MyOwnTransformer(), MyOwnClassifier())
- >>> pipe.fit(X, y) # doctest: +ELLIPSIS
- Pipeline(...)
-
-Then, you can call ``predict`` and ``predict_proba``::
-
- >>> pipe.predict(X) # doctest: +ELLIPSIS
- array([...])
- >>> pipe.predict_proba(X) # doctest: +ELLIPSIS
- array([...])
-
-Since our classifier inherits from :class:`sklearn.base.ClassifierMixin`, we
-can compute the accuracy by calling the ``score`` method::
-
- >>> pipe.score(X, y) # doctest: +ELLIPSIS
- 0...
diff --git a/examples/README.txt b/examples/README.txt
index 6a1d992..298303c 100644
--- a/examples/README.txt
+++ b/examples/README.txt
@@ -3,4 +3,4 @@
Example Gallery
===============
-Introductory examples.
+Examples of FSVM usage.
diff --git a/examples/plot_classifier.py b/examples/plot_classifier.py
index ec88676..f0c31c1 100644
--- a/examples/plot_classifier.py
+++ b/examples/plot_classifier.py
@@ -1,6 +1,6 @@
"""
============================
-Plotting Template Classifier
+Plotting FSVM Classifier
============================
An example plot of :class:`fsvm.FuzzySVC`
diff --git a/fsvm/_fuzzy_svc.py b/fsvm/_fuzzy_svc.py
index 0d59343..8d810d3 100644
--- a/fsvm/_fuzzy_svc.py
+++ b/fsvm/_fuzzy_svc.py
@@ -397,11 +397,14 @@ def fit(self, X, y):
return self
def predict(self, X):
- """A reference implementation of a prediction for a classifier.
+ """
+ A reference implementation of a prediction for a classifier.
+
Parameters
----------
X : array-like, shape (n_samples, n_features)
The input samples.
+
Returns
-------
y : ndarray, shape (n_samples,)
diff --git a/venv/bin/Activate.ps1 b/venv/bin/Activate.ps1
new file mode 100644
index 0000000..b49d77b
--- /dev/null
+++ b/venv/bin/Activate.ps1
@@ -0,0 +1,247 @@
+<#
+.Synopsis
+Activate a Python virtual environment for the current PowerShell session.
+
+.Description
+Pushes the python executable for a virtual environment to the front of the
+$Env:PATH environment variable and sets the prompt to signify that you are
+in a Python virtual environment. Makes use of the command line switches as
+well as the `pyvenv.cfg` file values present in the virtual environment.
+
+.Parameter VenvDir
+Path to the directory that contains the virtual environment to activate. The
+default value for this is the parent of the directory that the Activate.ps1
+script is located within.
+
+.Parameter Prompt
+The prompt prefix to display when this virtual environment is activated. By
+default, this prompt is the name of the virtual environment folder (VenvDir)
+surrounded by parentheses and followed by a single space (ie. '(.venv) ').
+
+.Example
+Activate.ps1
+Activates the Python virtual environment that contains the Activate.ps1 script.
+
+.Example
+Activate.ps1 -Verbose
+Activates the Python virtual environment that contains the Activate.ps1 script,
+and shows extra information about the activation as it executes.
+
+.Example
+Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
+Activates the Python virtual environment located in the specified location.
+
+.Example
+Activate.ps1 -Prompt "MyPython"
+Activates the Python virtual environment that contains the Activate.ps1 script,
+and prefixes the current prompt with the specified string (surrounded in
+parentheses) while the virtual environment is active.
+
+.Notes
+On Windows, it may be required to enable this Activate.ps1 script by setting the
+execution policy for the user. You can do this by issuing the following PowerShell
+command:
+
+PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
+
+For more information on Execution Policies:
+https://go.microsoft.com/fwlink/?LinkID=135170
+
+#>
+Param(
+ [Parameter(Mandatory = $false)]
+ [String]
+ $VenvDir,
+ [Parameter(Mandatory = $false)]
+ [String]
+ $Prompt
+)
+
+<# Function declarations --------------------------------------------------- #>
+
+<#
+.Synopsis
+Remove all shell session elements added by the Activate script, including the
+addition of the virtual environment's Python executable from the beginning of
+the PATH variable.
+
+.Parameter NonDestructive
+If present, do not remove this function from the global namespace for the
+session.
+
+#>
+function global:deactivate ([switch]$NonDestructive) {
+ # Revert to original values
+
+ # The prior prompt:
+ if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
+ Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
+ Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
+ }
+
+ # The prior PYTHONHOME:
+ if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
+ Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
+ Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
+ }
+
+ # The prior PATH:
+ if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
+ Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
+ Remove-Item -Path Env:_OLD_VIRTUAL_PATH
+ }
+
+ # Just remove the VIRTUAL_ENV altogether:
+ if (Test-Path -Path Env:VIRTUAL_ENV) {
+ Remove-Item -Path env:VIRTUAL_ENV
+ }
+
+ # Just remove VIRTUAL_ENV_PROMPT altogether.
+ if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) {
+ Remove-Item -Path env:VIRTUAL_ENV_PROMPT
+ }
+
+ # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
+ if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
+ Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
+ }
+
+ # Leave deactivate function in the global namespace if requested:
+ if (-not $NonDestructive) {
+ Remove-Item -Path function:deactivate
+ }
+}
+
+<#
+.Description
+Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
+given folder, and returns them in a map.
+
+For each line in the pyvenv.cfg file, if that line can be parsed into exactly
+two strings separated by `=` (with any amount of whitespace surrounding the =)
+then it is considered a `key = value` line. The left hand string is the key,
+the right hand is the value.
+
+If the value starts with a `'` or a `"` then the first and last character is
+stripped from the value before being captured.
+
+.Parameter ConfigDir
+Path to the directory that contains the `pyvenv.cfg` file.
+#>
+function Get-PyVenvConfig(
+ [String]
+ $ConfigDir
+) {
+ Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
+
+ # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
+ $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
+
+ # An empty map will be returned if no config file is found.
+ $pyvenvConfig = @{ }
+
+ if ($pyvenvConfigPath) {
+
+ Write-Verbose "File exists, parse `key = value` lines"
+ $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
+
+ $pyvenvConfigContent | ForEach-Object {
+ $keyval = $PSItem -split "\s*=\s*", 2
+ if ($keyval[0] -and $keyval[1]) {
+ $val = $keyval[1]
+
+ # Remove extraneous quotations around a string value.
+ if ("'""".Contains($val.Substring(0, 1))) {
+ $val = $val.Substring(1, $val.Length - 2)
+ }
+
+ $pyvenvConfig[$keyval[0]] = $val
+ Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
+ }
+ }
+ }
+ return $pyvenvConfig
+}
+
+
+<# Begin Activate script --------------------------------------------------- #>
+
+# Determine the containing directory of this script
+$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
+$VenvExecDir = Get-Item -Path $VenvExecPath
+
+Write-Verbose "Activation script is located in path: '$VenvExecPath'"
+Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
+Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
+
+# Set values required in priority: CmdLine, ConfigFile, Default
+# First, get the location of the virtual environment, it might not be
+# VenvExecDir if specified on the command line.
+if ($VenvDir) {
+ Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
+}
+else {
+ Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
+ $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
+ Write-Verbose "VenvDir=$VenvDir"
+}
+
+# Next, read the `pyvenv.cfg` file to determine any required value such
+# as `prompt`.
+$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
+
+# Next, set the prompt from the command line, or the config file, or
+# just use the name of the virtual environment folder.
+if ($Prompt) {
+ Write-Verbose "Prompt specified as argument, using '$Prompt'"
+}
+else {
+ Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
+ if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
+ Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
+ $Prompt = $pyvenvCfg['prompt'];
+ }
+ else {
+ Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
+ Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
+ $Prompt = Split-Path -Path $venvDir -Leaf
+ }
+}
+
+Write-Verbose "Prompt = '$Prompt'"
+Write-Verbose "VenvDir='$VenvDir'"
+
+# Deactivate any currently active virtual environment, but leave the
+# deactivate function in place.
+deactivate -nondestructive
+
+# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
+# that there is an activated venv.
+$env:VIRTUAL_ENV = $VenvDir
+
+if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
+
+ Write-Verbose "Setting prompt to '$Prompt'"
+
+ # Set the prompt to include the env name
+ # Make sure _OLD_VIRTUAL_PROMPT is global
+ function global:_OLD_VIRTUAL_PROMPT { "" }
+ Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
+ New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
+
+ function global:prompt {
+ Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
+ _OLD_VIRTUAL_PROMPT
+ }
+ $env:VIRTUAL_ENV_PROMPT = $Prompt
+}
+
+# Clear PYTHONHOME
+if (Test-Path -Path Env:PYTHONHOME) {
+ Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
+ Remove-Item -Path Env:PYTHONHOME
+}
+
+# Add the venv to the PATH
+Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
+$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
diff --git a/venv/bin/activate b/venv/bin/activate
new file mode 100644
index 0000000..def8f41
--- /dev/null
+++ b/venv/bin/activate
@@ -0,0 +1,70 @@
+# This file must be used with "source bin/activate" *from bash*
+# You cannot run it directly
+
+deactivate () {
+ # reset old environment variables
+ if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
+ PATH="${_OLD_VIRTUAL_PATH:-}"
+ export PATH
+ unset _OLD_VIRTUAL_PATH
+ fi
+ if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
+ PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
+ export PYTHONHOME
+ unset _OLD_VIRTUAL_PYTHONHOME
+ fi
+
+ # Call hash to forget past commands. Without forgetting
+ # past commands the $PATH changes we made may not be respected
+ hash -r 2> /dev/null
+
+ if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
+ PS1="${_OLD_VIRTUAL_PS1:-}"
+ export PS1
+ unset _OLD_VIRTUAL_PS1
+ fi
+
+ unset VIRTUAL_ENV
+ unset VIRTUAL_ENV_PROMPT
+ if [ ! "${1:-}" = "nondestructive" ] ; then
+ # Self destruct!
+ unset -f deactivate
+ fi
+}
+
+# unset irrelevant variables
+deactivate nondestructive
+
+# on Windows, a path can contain colons and backslashes and has to be converted:
+if [ "${OSTYPE:-}" = "cygwin" ] || [ "${OSTYPE:-}" = "msys" ] ; then
+ # transform D:\path\to\venv to /d/path/to/venv on MSYS
+ # and to /cygdrive/d/path/to/venv on Cygwin
+ export VIRTUAL_ENV=$(cygpath "/Users/balins/fsvm/venv")
+else
+ # use the path as-is
+ export VIRTUAL_ENV="/Users/balins/fsvm/venv"
+fi
+
+_OLD_VIRTUAL_PATH="$PATH"
+PATH="$VIRTUAL_ENV/bin:$PATH"
+export PATH
+
+# unset PYTHONHOME if set
+# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
+# could use `if (set -u; : $PYTHONHOME) ;` in bash
+if [ -n "${PYTHONHOME:-}" ] ; then
+ _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
+ unset PYTHONHOME
+fi
+
+if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
+ _OLD_VIRTUAL_PS1="${PS1:-}"
+ PS1="(venv) ${PS1:-}"
+ export PS1
+ VIRTUAL_ENV_PROMPT="(venv) "
+ export VIRTUAL_ENV_PROMPT
+fi
+
+# Call hash to forget past commands. Without forgetting
+# past commands the $PATH changes we made may not be respected
+hash -r 2> /dev/null
diff --git a/venv/bin/activate.csh b/venv/bin/activate.csh
new file mode 100644
index 0000000..e2feae9
--- /dev/null
+++ b/venv/bin/activate.csh
@@ -0,0 +1,27 @@
+# This file must be used with "source bin/activate.csh" *from csh*.
+# You cannot run it directly.
+
+# Created by Davide Di Blasi .
+# Ported to Python 3.3 venv by Andrew Svetlov
+
+alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate'
+
+# Unset irrelevant variables.
+deactivate nondestructive
+
+setenv VIRTUAL_ENV "/Users/balins/fsvm/venv"
+
+set _OLD_VIRTUAL_PATH="$PATH"
+setenv PATH "$VIRTUAL_ENV/bin:$PATH"
+
+
+set _OLD_VIRTUAL_PROMPT="$prompt"
+
+if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
+ set prompt = "(venv) $prompt"
+ setenv VIRTUAL_ENV_PROMPT "(venv) "
+endif
+
+alias pydoc python -m pydoc
+
+rehash
diff --git a/venv/bin/activate.fish b/venv/bin/activate.fish
new file mode 100644
index 0000000..7c38b54
--- /dev/null
+++ b/venv/bin/activate.fish
@@ -0,0 +1,69 @@
+# This file must be used with "source /bin/activate.fish" *from fish*
+# (https://fishshell.com/). You cannot run it directly.
+
+function deactivate -d "Exit virtual environment and return to normal shell environment"
+ # reset old environment variables
+ if test -n "$_OLD_VIRTUAL_PATH"
+ set -gx PATH $_OLD_VIRTUAL_PATH
+ set -e _OLD_VIRTUAL_PATH
+ end
+ if test -n "$_OLD_VIRTUAL_PYTHONHOME"
+ set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
+ set -e _OLD_VIRTUAL_PYTHONHOME
+ end
+
+ if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
+ set -e _OLD_FISH_PROMPT_OVERRIDE
+ # prevents error when using nested fish instances (Issue #93858)
+ if functions -q _old_fish_prompt
+ functions -e fish_prompt
+ functions -c _old_fish_prompt fish_prompt
+ functions -e _old_fish_prompt
+ end
+ end
+
+ set -e VIRTUAL_ENV
+ set -e VIRTUAL_ENV_PROMPT
+ if test "$argv[1]" != "nondestructive"
+ # Self-destruct!
+ functions -e deactivate
+ end
+end
+
+# Unset irrelevant variables.
+deactivate nondestructive
+
+set -gx VIRTUAL_ENV "/Users/balins/fsvm/venv"
+
+set -gx _OLD_VIRTUAL_PATH $PATH
+set -gx PATH "$VIRTUAL_ENV/bin" $PATH
+
+# Unset PYTHONHOME if set.
+if set -q PYTHONHOME
+ set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
+ set -e PYTHONHOME
+end
+
+if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
+ # fish uses a function instead of an env var to generate the prompt.
+
+ # Save the current fish_prompt function as the function _old_fish_prompt.
+ functions -c fish_prompt _old_fish_prompt
+
+ # With the original prompt function renamed, we can override with our own.
+ function fish_prompt
+ # Save the return status of the last command.
+ set -l old_status $status
+
+ # Output the venv prompt; color taken from the blue of the Python logo.
+ printf "%s%s%s" (set_color 4B8BBE) "(venv) " (set_color normal)
+
+ # Restore the return status of the previous command.
+ echo "exit $old_status" | .
+ # Output the original/"old" prompt.
+ _old_fish_prompt
+ end
+
+ set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
+ set -gx VIRTUAL_ENV_PROMPT "(venv) "
+end
diff --git a/venv/bin/docutils b/venv/bin/docutils
new file mode 100755
index 0000000..10a22d4
--- /dev/null
+++ b/venv/bin/docutils
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.__main__ import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/venv/bin/keyring b/venv/bin/keyring
new file mode 100755
index 0000000..664e7b8
--- /dev/null
+++ b/venv/bin/keyring
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from keyring.cli import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/venv/bin/markdown-it b/venv/bin/markdown-it
new file mode 100755
index 0000000..c6c82da
--- /dev/null
+++ b/venv/bin/markdown-it
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from markdown_it.cli.parse import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/venv/bin/normalizer b/venv/bin/normalizer
new file mode 100755
index 0000000..10e620c
--- /dev/null
+++ b/venv/bin/normalizer
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from charset_normalizer.cli import cli_detect
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(cli_detect())
diff --git a/venv/bin/pip b/venv/bin/pip
new file mode 100755
index 0000000..f5a6cab
--- /dev/null
+++ b/venv/bin/pip
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3.12
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pip._internal.cli.main import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/venv/bin/pip3 b/venv/bin/pip3
new file mode 100755
index 0000000..f5a6cab
--- /dev/null
+++ b/venv/bin/pip3
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3.12
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pip._internal.cli.main import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/venv/bin/pip3.12 b/venv/bin/pip3.12
new file mode 100755
index 0000000..f5a6cab
--- /dev/null
+++ b/venv/bin/pip3.12
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3.12
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pip._internal.cli.main import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/venv/bin/pkginfo b/venv/bin/pkginfo
new file mode 100755
index 0000000..85bcdfe
--- /dev/null
+++ b/venv/bin/pkginfo
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pkginfo.commandline import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/venv/bin/pygmentize b/venv/bin/pygmentize
new file mode 100755
index 0000000..a28be70
--- /dev/null
+++ b/venv/bin/pygmentize
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from pygments.cmdline import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/venv/bin/pyproject-build b/venv/bin/pyproject-build
new file mode 100755
index 0000000..5e7c86c
--- /dev/null
+++ b/venv/bin/pyproject-build
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from build.__main__ import entrypoint
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(entrypoint())
diff --git a/venv/bin/python b/venv/bin/python
new file mode 120000
index 0000000..11b9d88
--- /dev/null
+++ b/venv/bin/python
@@ -0,0 +1 @@
+python3.12
\ No newline at end of file
diff --git a/venv/bin/python3 b/venv/bin/python3
new file mode 120000
index 0000000..11b9d88
--- /dev/null
+++ b/venv/bin/python3
@@ -0,0 +1 @@
+python3.12
\ No newline at end of file
diff --git a/venv/bin/python3.12 b/venv/bin/python3.12
new file mode 120000
index 0000000..a3f0508
--- /dev/null
+++ b/venv/bin/python3.12
@@ -0,0 +1 @@
+/opt/homebrew/opt/python@3.12/bin/python3.12
\ No newline at end of file
diff --git a/venv/bin/rst2html b/venv/bin/rst2html
new file mode 100755
index 0000000..65621f0
--- /dev/null
+++ b/venv/bin/rst2html
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.core import rst2html
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rst2html())
diff --git a/venv/bin/rst2html4 b/venv/bin/rst2html4
new file mode 100755
index 0000000..33c44ec
--- /dev/null
+++ b/venv/bin/rst2html4
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.core import rst2html4
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rst2html4())
diff --git a/venv/bin/rst2html5 b/venv/bin/rst2html5
new file mode 100755
index 0000000..d5cb694
--- /dev/null
+++ b/venv/bin/rst2html5
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.core import rst2html5
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rst2html5())
diff --git a/venv/bin/rst2latex b/venv/bin/rst2latex
new file mode 100755
index 0000000..c57db93
--- /dev/null
+++ b/venv/bin/rst2latex
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.core import rst2latex
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rst2latex())
diff --git a/venv/bin/rst2man b/venv/bin/rst2man
new file mode 100755
index 0000000..b0c7282
--- /dev/null
+++ b/venv/bin/rst2man
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.core import rst2man
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rst2man())
diff --git a/venv/bin/rst2odt b/venv/bin/rst2odt
new file mode 100755
index 0000000..93f3b22
--- /dev/null
+++ b/venv/bin/rst2odt
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.core import rst2odt
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rst2odt())
diff --git a/venv/bin/rst2pseudoxml b/venv/bin/rst2pseudoxml
new file mode 100755
index 0000000..87877c7
--- /dev/null
+++ b/venv/bin/rst2pseudoxml
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.core import rst2pseudoxml
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rst2pseudoxml())
diff --git a/venv/bin/rst2s5 b/venv/bin/rst2s5
new file mode 100755
index 0000000..b172146
--- /dev/null
+++ b/venv/bin/rst2s5
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.core import rst2s5
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rst2s5())
diff --git a/venv/bin/rst2xetex b/venv/bin/rst2xetex
new file mode 100755
index 0000000..f916ff8
--- /dev/null
+++ b/venv/bin/rst2xetex
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.core import rst2xetex
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rst2xetex())
diff --git a/venv/bin/rst2xml b/venv/bin/rst2xml
new file mode 100755
index 0000000..7426207
--- /dev/null
+++ b/venv/bin/rst2xml
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from docutils.core import rst2xml
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(rst2xml())
diff --git a/venv/bin/twine b/venv/bin/twine
new file mode 100755
index 0000000..d461f61
--- /dev/null
+++ b/venv/bin/twine
@@ -0,0 +1,8 @@
+#!/Users/balins/fsvm/venv/bin/python3
+# -*- coding: utf-8 -*-
+import re
+import sys
+from twine.__main__ import main
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+ sys.exit(main())
diff --git a/venv/pyvenv.cfg b/venv/pyvenv.cfg
new file mode 100644
index 0000000..76536ec
--- /dev/null
+++ b/venv/pyvenv.cfg
@@ -0,0 +1,5 @@
+home = /opt/homebrew/opt/python@3.12/bin
+include-system-site-packages = false
+version = 3.12.4
+executable = /opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/bin/python3.12
+command = /opt/homebrew/opt/python@3.12/bin/python3.12 -m venv /Users/balins/fsvm/venv