diff --git a/.coveragerc b/.coveragerc index 056d62113..34930b7a8 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,5 +1,5 @@ [run] -source = src +source = lilac omit = *_test.py */__init__.py diff --git a/.github/labeler.yml b/.github/labeler.yml index 3fef610fa..5f8c8a4d9 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,6 +1,6 @@ -# Add 'backend' label to any change within src/ but not web* folders +# Add 'backend' label to any change within lilac/ but not web* folders 'backend': - - any: ['src/**/*'] + - any: ['lilac/**/*'] # Add 'frontend' label to any change to blueprint folder 'frontend': diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index a282ee1c8..953f1de8f 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -2,7 +2,7 @@ on: pull_request: types: [opened, reopened, synchronize] paths: - - 'src/**' + - 'lilac/**' - '**/*.py' - 'poetry.lock' - 'poetry.toml' diff --git a/.vscode/settings.json b/.vscode/settings.json index fec7a4336..862ae3f45 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -63,14 +63,14 @@ "git.confirmSync": false, "git.autofetch": true, "git.postCommitCommand": "sync", - "python.testing.pytestArgs": ["src"], + "python.testing.pytestArgs": ["lilac"], "python.testing.unittestEnabled": false, "python.testing.pytestEnabled": true, "python.analysis.importFormat": "relative", "python.analysis.indexing": true, "python.analysis.useLibraryCodeForTypes": true, - "python.analysis.extraPaths": ["src"], - "python.analysis.include": ["src"], + "python.analysis.extraPaths": ["lilac"], + "python.analysis.include": ["lilac"], "notebook.output.textLineLimit": 200, "notebook.output.scrolling": true, "notebook.lineNumbers": "on", diff --git a/Dockerfile b/Dockerfile index 798547a28..cbeebc973 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,13 +20,13 @@ COPY LICENSE . COPY /web/blueprint/build ./web/blueprint/build # Copy python files. -COPY /src ./src/ +COPY /lilac ./lilac/ # Copy the data files. We use glob so docker copy won't fail if the directory doesn't exist. COPY /dat[a] ./data/ CMD [ \ - "gunicorn", "src.server:app", \ + "gunicorn", "lilac.server:app", \ "--bind", "0.0.0.0:5432", \ "-k", "uvicorn.workers.UvicornWorker" \ ] diff --git a/README.md b/README.md index a3b9bb313..9ed5639cf 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,15 @@ key = ''.join(random.choices(string.ascii_uppercase + string.digits, k=64)) print(f"LILAC_OAUTH_SECRET_KEY='{key}'") ``` +### Publishing on pip + +To authenticate, add the `PYPI_TOKEN` to your `.env.local` file. You can get the token from +[pypi.org](https://pypi.org/manage/project/lilacai/settings/). To publish, run: + +```sh +./scripts/publish_pip.sh +``` + ### Configuration To use various API's, API keys need to be provided. Create a file named `.env.local` in the root, and add variables that are listed in `.env` with your own values. @@ -129,7 +138,7 @@ Test JavaScript: Datasets can be ingested entirely from the UI, however if you prefer to use the CLI you can ingest data with the following command: ```sh -poetry run python -m src.data_loader \ +poetry run python -m lilac.data_loader \ --dataset_name=$DATASET \ --output_dir=./data/ \ --config_path=./datasets/the_movies_dataset.json diff --git a/src/__init__.py b/lilac/__init__.py similarity index 100% rename from src/__init__.py rename to lilac/__init__.py diff --git a/src/auth.py b/lilac/auth.py similarity index 100% rename from src/auth.py rename to lilac/auth.py diff --git a/src/concepts/__init__.py b/lilac/concepts/__init__.py similarity index 100% rename from src/concepts/__init__.py rename to lilac/concepts/__init__.py diff --git a/src/concepts/concept.py b/lilac/concepts/concept.py similarity index 100% rename from src/concepts/concept.py rename to lilac/concepts/concept.py diff --git a/src/concepts/concept_test.py b/lilac/concepts/concept_test.py similarity index 100% rename from src/concepts/concept_test.py rename to lilac/concepts/concept_test.py diff --git a/src/concepts/db_concept.py b/lilac/concepts/db_concept.py similarity index 100% rename from src/concepts/db_concept.py rename to lilac/concepts/db_concept.py diff --git a/src/concepts/db_concept_test.py b/lilac/concepts/db_concept_test.py similarity index 100% rename from src/concepts/db_concept_test.py rename to lilac/concepts/db_concept_test.py diff --git a/src/config.py b/lilac/config.py similarity index 100% rename from src/config.py rename to lilac/config.py diff --git a/src/conftest.py b/lilac/conftest.py similarity index 100% rename from src/conftest.py rename to lilac/conftest.py diff --git a/src/data/__init__.py b/lilac/data/__init__.py similarity index 100% rename from src/data/__init__.py rename to lilac/data/__init__.py diff --git a/src/data/dataset.py b/lilac/data/dataset.py similarity index 100% rename from src/data/dataset.py rename to lilac/data/dataset.py diff --git a/src/data/dataset_compute_signal_chain_test.py b/lilac/data/dataset_compute_signal_chain_test.py similarity index 100% rename from src/data/dataset_compute_signal_chain_test.py rename to lilac/data/dataset_compute_signal_chain_test.py diff --git a/src/data/dataset_compute_signal_test.py b/lilac/data/dataset_compute_signal_test.py similarity index 100% rename from src/data/dataset_compute_signal_test.py rename to lilac/data/dataset_compute_signal_test.py diff --git a/src/data/dataset_duckdb.py b/lilac/data/dataset_duckdb.py similarity index 100% rename from src/data/dataset_duckdb.py rename to lilac/data/dataset_duckdb.py diff --git a/src/data/dataset_select_groups_test.py b/lilac/data/dataset_select_groups_test.py similarity index 100% rename from src/data/dataset_select_groups_test.py rename to lilac/data/dataset_select_groups_test.py diff --git a/src/data/dataset_select_rows_filter_test.py b/lilac/data/dataset_select_rows_filter_test.py similarity index 100% rename from src/data/dataset_select_rows_filter_test.py rename to lilac/data/dataset_select_rows_filter_test.py diff --git a/src/data/dataset_select_rows_schema_test.py b/lilac/data/dataset_select_rows_schema_test.py similarity index 100% rename from src/data/dataset_select_rows_schema_test.py rename to lilac/data/dataset_select_rows_schema_test.py diff --git a/src/data/dataset_select_rows_search_test.py b/lilac/data/dataset_select_rows_search_test.py similarity index 100% rename from src/data/dataset_select_rows_search_test.py rename to lilac/data/dataset_select_rows_search_test.py diff --git a/src/data/dataset_select_rows_sort_test.py b/lilac/data/dataset_select_rows_sort_test.py similarity index 100% rename from src/data/dataset_select_rows_sort_test.py rename to lilac/data/dataset_select_rows_sort_test.py diff --git a/src/data/dataset_select_rows_udf_test.py b/lilac/data/dataset_select_rows_udf_test.py similarity index 100% rename from src/data/dataset_select_rows_udf_test.py rename to lilac/data/dataset_select_rows_udf_test.py diff --git a/src/data/dataset_settings_test.py b/lilac/data/dataset_settings_test.py similarity index 100% rename from src/data/dataset_settings_test.py rename to lilac/data/dataset_settings_test.py diff --git a/src/data/dataset_stats_test.py b/lilac/data/dataset_stats_test.py similarity index 100% rename from src/data/dataset_stats_test.py rename to lilac/data/dataset_stats_test.py diff --git a/src/data/dataset_test.py b/lilac/data/dataset_test.py similarity index 100% rename from src/data/dataset_test.py rename to lilac/data/dataset_test.py diff --git a/src/data/dataset_test_utils.py b/lilac/data/dataset_test_utils.py similarity index 100% rename from src/data/dataset_test_utils.py rename to lilac/data/dataset_test_utils.py diff --git a/src/data/dataset_utils.py b/lilac/data/dataset_utils.py similarity index 100% rename from src/data/dataset_utils.py rename to lilac/data/dataset_utils.py diff --git a/src/data/dataset_utils_test.py b/lilac/data/dataset_utils_test.py similarity index 99% rename from src/data/dataset_utils_test.py rename to lilac/data/dataset_utils_test.py index 115cc0f6b..28a3868db 100644 --- a/src/data/dataset_utils_test.py +++ b/lilac/data/dataset_utils_test.py @@ -134,6 +134,7 @@ def func(xs: Iterable[int]) -> Iterable[int]: out = sparse_to_dense_compute(sparse_input, func) assert list(out) == [None, 2, 8, None, None, 4, None, 6, None, None] + def test_sparse_to_dense_compute_batching() -> None: sparse_input = iter([None, 1, 7, None, None, 3, None, 5, None, None]) diff --git a/src/data/duckdb_utils.py b/lilac/data/duckdb_utils.py similarity index 100% rename from src/data/duckdb_utils.py rename to lilac/data/duckdb_utils.py diff --git a/src/data/sources/__init__.py b/lilac/data/sources/__init__.py similarity index 100% rename from src/data/sources/__init__.py rename to lilac/data/sources/__init__.py diff --git a/src/data/sources/csv_source.py b/lilac/data/sources/csv_source.py similarity index 100% rename from src/data/sources/csv_source.py rename to lilac/data/sources/csv_source.py diff --git a/src/data/sources/csv_source_test.py b/lilac/data/sources/csv_source_test.py similarity index 100% rename from src/data/sources/csv_source_test.py rename to lilac/data/sources/csv_source_test.py diff --git a/src/data/sources/default_sources.py b/lilac/data/sources/default_sources.py similarity index 100% rename from src/data/sources/default_sources.py rename to lilac/data/sources/default_sources.py diff --git a/src/data/sources/gmail_source.py b/lilac/data/sources/gmail_source.py similarity index 100% rename from src/data/sources/gmail_source.py rename to lilac/data/sources/gmail_source.py diff --git a/src/data/sources/huggingface_source.py b/lilac/data/sources/huggingface_source.py similarity index 100% rename from src/data/sources/huggingface_source.py rename to lilac/data/sources/huggingface_source.py diff --git a/src/data/sources/huggingface_source_test.py b/lilac/data/sources/huggingface_source_test.py similarity index 100% rename from src/data/sources/huggingface_source_test.py rename to lilac/data/sources/huggingface_source_test.py diff --git a/src/data/sources/json_source.py b/lilac/data/sources/json_source.py similarity index 100% rename from src/data/sources/json_source.py rename to lilac/data/sources/json_source.py diff --git a/src/data/sources/json_source_test.py b/lilac/data/sources/json_source_test.py similarity index 100% rename from src/data/sources/json_source_test.py rename to lilac/data/sources/json_source_test.py diff --git a/src/data/sources/pandas_source.py b/lilac/data/sources/pandas_source.py similarity index 100% rename from src/data/sources/pandas_source.py rename to lilac/data/sources/pandas_source.py diff --git a/src/data/sources/pandas_source_test.py b/lilac/data/sources/pandas_source_test.py similarity index 100% rename from src/data/sources/pandas_source_test.py rename to lilac/data/sources/pandas_source_test.py diff --git a/src/data/sources/reddit_hf_source.py b/lilac/data/sources/reddit_hf_source.py similarity index 100% rename from src/data/sources/reddit_hf_source.py rename to lilac/data/sources/reddit_hf_source.py diff --git a/src/data/sources/source.py b/lilac/data/sources/source.py similarity index 100% rename from src/data/sources/source.py rename to lilac/data/sources/source.py diff --git a/src/data/sources/source_registry.py b/lilac/data/sources/source_registry.py similarity index 100% rename from src/data/sources/source_registry.py rename to lilac/data/sources/source_registry.py diff --git a/src/data/sources/source_registry_test.py b/lilac/data/sources/source_registry_test.py similarity index 100% rename from src/data/sources/source_registry_test.py rename to lilac/data/sources/source_registry_test.py diff --git a/src/data_loader.py b/lilac/data_loader.py similarity index 99% rename from src/data_loader.py rename to lilac/data_loader.py index 061042d98..bc21aa7c2 100644 --- a/src/data_loader.py +++ b/lilac/data_loader.py @@ -2,7 +2,7 @@ To run the source loader as a binary directly: -poetry run python -m src.data_loader \ +poetry run python -m lilac.data_loader \ --dataset_name=movies_dataset \ --output_dir=./data/ \ --config_path=./datasets/the_movies_dataset.json diff --git a/src/data_loader_test.py b/lilac/data_loader_test.py similarity index 100% rename from src/data_loader_test.py rename to lilac/data_loader_test.py diff --git a/src/db_manager.py b/lilac/db_manager.py similarity index 100% rename from src/db_manager.py rename to lilac/db_manager.py diff --git a/src/embeddings/__init__.py b/lilac/embeddings/__init__.py similarity index 100% rename from src/embeddings/__init__.py rename to lilac/embeddings/__init__.py diff --git a/src/embeddings/cohere.py b/lilac/embeddings/cohere.py similarity index 100% rename from src/embeddings/cohere.py rename to lilac/embeddings/cohere.py diff --git a/src/embeddings/embedding.py b/lilac/embeddings/embedding.py similarity index 100% rename from src/embeddings/embedding.py rename to lilac/embeddings/embedding.py diff --git a/src/embeddings/embedding_test.py b/lilac/embeddings/embedding_test.py similarity index 100% rename from src/embeddings/embedding_test.py rename to lilac/embeddings/embedding_test.py diff --git a/src/embeddings/openai.py b/lilac/embeddings/openai.py similarity index 100% rename from src/embeddings/openai.py rename to lilac/embeddings/openai.py diff --git a/src/embeddings/palm.py b/lilac/embeddings/palm.py similarity index 100% rename from src/embeddings/palm.py rename to lilac/embeddings/palm.py diff --git a/src/embeddings/sbert.py b/lilac/embeddings/sbert.py similarity index 100% rename from src/embeddings/sbert.py rename to lilac/embeddings/sbert.py diff --git a/src/embeddings/vector_store.py b/lilac/embeddings/vector_store.py similarity index 100% rename from src/embeddings/vector_store.py rename to lilac/embeddings/vector_store.py diff --git a/src/embeddings/vector_store_numpy.py b/lilac/embeddings/vector_store_numpy.py similarity index 100% rename from src/embeddings/vector_store_numpy.py rename to lilac/embeddings/vector_store_numpy.py diff --git a/src/embeddings/vector_store_test.py b/lilac/embeddings/vector_store_test.py similarity index 100% rename from src/embeddings/vector_store_test.py rename to lilac/embeddings/vector_store_test.py diff --git a/src/make_openapi.py b/lilac/make_openapi.py similarity index 86% rename from src/make_openapi.py rename to lilac/make_openapi.py index 1530df691..3199da88f 100644 --- a/src/make_openapi.py +++ b/lilac/make_openapi.py @@ -1,6 +1,6 @@ """Writes the openapi.json file to the specified output. -This is meant to run as a standalone script. It lives in src/ so that we can import the FastAPI app. +This is meant to run as a standalone script. It lives in lilac/ so we can import the FastAPI app. """ import json diff --git a/src/parquet_writer.py b/lilac/parquet_writer.py similarity index 100% rename from src/parquet_writer.py rename to lilac/parquet_writer.py diff --git a/src/router_concept.py b/lilac/router_concept.py similarity index 100% rename from src/router_concept.py rename to lilac/router_concept.py diff --git a/src/router_data_loader.py b/lilac/router_data_loader.py similarity index 98% rename from src/router_data_loader.py rename to lilac/router_data_loader.py index 574c10bad..5828c6794 100644 --- a/src/router_data_loader.py +++ b/lilac/router_data_loader.py @@ -2,7 +2,7 @@ To run the source loader as a binary directly: -poetry run python -m src.datasets.loader \ +poetry run python -m lilac.datasets.loader \ --dataset_name=$DATASET \ --output_dir=./data/ \ --config_path=./datasets/the_movies_dataset.json diff --git a/src/router_dataset.py b/lilac/router_dataset.py similarity index 100% rename from src/router_dataset.py rename to lilac/router_dataset.py diff --git a/src/router_google_login.py b/lilac/router_google_login.py similarity index 100% rename from src/router_google_login.py rename to lilac/router_google_login.py diff --git a/src/router_signal.py b/lilac/router_signal.py similarity index 100% rename from src/router_signal.py rename to lilac/router_signal.py diff --git a/src/router_tasks.py b/lilac/router_tasks.py similarity index 100% rename from src/router_tasks.py rename to lilac/router_tasks.py diff --git a/src/router_utils.py b/lilac/router_utils.py similarity index 100% rename from src/router_utils.py rename to lilac/router_utils.py diff --git a/src/schema.py b/lilac/schema.py similarity index 100% rename from src/schema.py rename to lilac/schema.py diff --git a/src/schema_test.py b/lilac/schema_test.py similarity index 100% rename from src/schema_test.py rename to lilac/schema_test.py diff --git a/src/server.py b/lilac/server.py similarity index 100% rename from src/server.py rename to lilac/server.py diff --git a/src/server_concept_test.py b/lilac/server_concept_test.py similarity index 100% rename from src/server_concept_test.py rename to lilac/server_concept_test.py diff --git a/src/server_dataset_test.py b/lilac/server_dataset_test.py similarity index 100% rename from src/server_dataset_test.py rename to lilac/server_dataset_test.py diff --git a/src/signals/__init__.py b/lilac/signals/__init__.py similarity index 100% rename from src/signals/__init__.py rename to lilac/signals/__init__.py diff --git a/src/signals/concept_labels.py b/lilac/signals/concept_labels.py similarity index 100% rename from src/signals/concept_labels.py rename to lilac/signals/concept_labels.py diff --git a/src/signals/concept_labels_test.py b/lilac/signals/concept_labels_test.py similarity index 100% rename from src/signals/concept_labels_test.py rename to lilac/signals/concept_labels_test.py diff --git a/src/signals/concept_scorer.py b/lilac/signals/concept_scorer.py similarity index 100% rename from src/signals/concept_scorer.py rename to lilac/signals/concept_scorer.py diff --git a/src/signals/concept_scorer_test.py b/lilac/signals/concept_scorer_test.py similarity index 100% rename from src/signals/concept_scorer_test.py rename to lilac/signals/concept_scorer_test.py diff --git a/src/signals/default_signals.py b/lilac/signals/default_signals.py similarity index 100% rename from src/signals/default_signals.py rename to lilac/signals/default_signals.py diff --git a/src/signals/lang_detection.py b/lilac/signals/lang_detection.py similarity index 100% rename from src/signals/lang_detection.py rename to lilac/signals/lang_detection.py diff --git a/src/signals/lang_detection_test.py b/lilac/signals/lang_detection_test.py similarity index 100% rename from src/signals/lang_detection_test.py rename to lilac/signals/lang_detection_test.py diff --git a/src/signals/minhash_dup.py b/lilac/signals/minhash_dup.py similarity index 100% rename from src/signals/minhash_dup.py rename to lilac/signals/minhash_dup.py diff --git a/src/signals/near_dup.py b/lilac/signals/near_dup.py similarity index 100% rename from src/signals/near_dup.py rename to lilac/signals/near_dup.py diff --git a/src/signals/near_dup_test.py b/lilac/signals/near_dup_test.py similarity index 100% rename from src/signals/near_dup_test.py rename to lilac/signals/near_dup_test.py diff --git a/src/signals/ner.py b/lilac/signals/ner.py similarity index 100% rename from src/signals/ner.py rename to lilac/signals/ner.py diff --git a/src/signals/ner_test.py b/lilac/signals/ner_test.py similarity index 100% rename from src/signals/ner_test.py rename to lilac/signals/ner_test.py diff --git a/src/signals/pii.py b/lilac/signals/pii.py similarity index 100% rename from src/signals/pii.py rename to lilac/signals/pii.py diff --git a/src/signals/pii_ip_address.py b/lilac/signals/pii_ip_address.py similarity index 100% rename from src/signals/pii_ip_address.py rename to lilac/signals/pii_ip_address.py diff --git a/src/signals/pii_secrets.py b/lilac/signals/pii_secrets.py similarity index 100% rename from src/signals/pii_secrets.py rename to lilac/signals/pii_secrets.py diff --git a/src/signals/pii_test.py b/lilac/signals/pii_test.py similarity index 100% rename from src/signals/pii_test.py rename to lilac/signals/pii_test.py diff --git a/src/signals/semantic_similarity.py b/lilac/signals/semantic_similarity.py similarity index 100% rename from src/signals/semantic_similarity.py rename to lilac/signals/semantic_similarity.py diff --git a/src/signals/semantic_similarity_test.py b/lilac/signals/semantic_similarity_test.py similarity index 100% rename from src/signals/semantic_similarity_test.py rename to lilac/signals/semantic_similarity_test.py diff --git a/src/signals/signal.py b/lilac/signals/signal.py similarity index 100% rename from src/signals/signal.py rename to lilac/signals/signal.py diff --git a/src/signals/signal_test.py b/lilac/signals/signal_test.py similarity index 100% rename from src/signals/signal_test.py rename to lilac/signals/signal_test.py diff --git a/src/signals/splitters/__init__.py b/lilac/signals/splitters/__init__.py similarity index 100% rename from src/signals/splitters/__init__.py rename to lilac/signals/splitters/__init__.py diff --git a/src/signals/splitters/chunk_splitter.py b/lilac/signals/splitters/chunk_splitter.py similarity index 100% rename from src/signals/splitters/chunk_splitter.py rename to lilac/signals/splitters/chunk_splitter.py diff --git a/src/signals/splitters/chunk_splitter_test.py b/lilac/signals/splitters/chunk_splitter_test.py similarity index 100% rename from src/signals/splitters/chunk_splitter_test.py rename to lilac/signals/splitters/chunk_splitter_test.py diff --git a/src/signals/splitters/text_splitter_spacy.py b/lilac/signals/splitters/text_splitter_spacy.py similarity index 100% rename from src/signals/splitters/text_splitter_spacy.py rename to lilac/signals/splitters/text_splitter_spacy.py diff --git a/src/signals/splitters/text_splitter_spacy_test.py b/lilac/signals/splitters/text_splitter_spacy_test.py similarity index 100% rename from src/signals/splitters/text_splitter_spacy_test.py rename to lilac/signals/splitters/text_splitter_spacy_test.py diff --git a/src/signals/splitters/text_splitter_test_utils.py b/lilac/signals/splitters/text_splitter_test_utils.py similarity index 100% rename from src/signals/splitters/text_splitter_test_utils.py rename to lilac/signals/splitters/text_splitter_test_utils.py diff --git a/src/signals/splitters/text_splitter_test_utils_test.py b/lilac/signals/splitters/text_splitter_test_utils_test.py similarity index 100% rename from src/signals/splitters/text_splitter_test_utils_test.py rename to lilac/signals/splitters/text_splitter_test_utils_test.py diff --git a/src/signals/substring_search.py b/lilac/signals/substring_search.py similarity index 100% rename from src/signals/substring_search.py rename to lilac/signals/substring_search.py diff --git a/src/signals/substring_search_test.py b/lilac/signals/substring_search_test.py similarity index 100% rename from src/signals/substring_search_test.py rename to lilac/signals/substring_search_test.py diff --git a/src/signals/text_statistics.py b/lilac/signals/text_statistics.py similarity index 100% rename from src/signals/text_statistics.py rename to lilac/signals/text_statistics.py diff --git a/src/signals/text_statistics_test.py b/lilac/signals/text_statistics_test.py similarity index 100% rename from src/signals/text_statistics_test.py rename to lilac/signals/text_statistics_test.py diff --git a/src/tasks.py b/lilac/tasks.py similarity index 100% rename from src/tasks.py rename to lilac/tasks.py diff --git a/src/test_utils.py b/lilac/test_utils.py similarity index 100% rename from src/test_utils.py rename to lilac/test_utils.py diff --git a/src/utils.py b/lilac/utils.py similarity index 100% rename from src/utils.py rename to lilac/utils.py diff --git a/notebooks/API.ipynb b/notebooks/API.ipynb index 9dff9d828..019a2e780 100644 --- a/notebooks/API.ipynb +++ b/notebooks/API.ipynb @@ -12,28 +12,20 @@ "execution_count": 1, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/dsmilkov/code/lilac/.venv/lib/python3.9/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "Computing signal \"signal_name='concept_score' embedding='sbert' namespace='lilac' concept_name='legal-termination' draft='main' num_negative_examples=100\" took 0.280s.\n", - "Wrote signal manifest to ./data/datasets/local/legal-clauses/clause_text/sbert/embedding/lilac/legal-termination/v31/signal_manifest.json\n" + "Computing signal \"signal_name='concept_score' embedding='sbert' namespace='lilac' concept_name='legal-termination' draft='main' num_negative_examples=100\" took 0.339s.\n", + "Wrote signal manifest to ./data/datasets/local/legal-clauses/clause_text/sbert/embedding/lilac/legal-termination/v33/signal_manifest.json\n" ] } ], "source": [ - "from src.db_manager import get_dataset, set_default_dataset_cls\n", - "from src.data.dataset_duckdb import DatasetDuckDB\n", - "from src.signals.concept_scorer import ConceptScoreSignal\n", - "from src.signals.default_signals import register_default_signals\n", + "from lilac.db_manager import get_dataset, set_default_dataset_cls\n", + "from lilac.data.dataset_duckdb import DatasetDuckDB\n", + "from lilac.signals.concept_scorer import ConceptScoreSignal\n", + "from lilac.signals.default_signals import register_default_signals\n", "\n", "register_default_signals()\n", "set_default_dataset_cls(DatasetDuckDB)\n", diff --git a/notebooks/Sentiment.ipynb b/notebooks/Sentiment.ipynb index ac4aaa888..72324d25a 100644 --- a/notebooks/Sentiment.ipynb +++ b/notebooks/Sentiment.ipynb @@ -265,7 +265,7 @@ } ], "source": [ - "from src.embeddings.openai import OpenAI\n", + "from lilac.embeddings.openai import OpenAI\n", "\n", "signal = OpenAI()\n", "signal.setup()\n", @@ -318,7 +318,7 @@ "source": [ "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import roc_auc_score, f1_score\n", - "from src.utils import DebugTimer\n", + "from lilac.utils import DebugTimer\n", "\n", "model = LogisticRegression(\n", " class_weight='balanced', C=30, tol=1e-5, warm_start=True, max_iter=10_000)\n", @@ -356,7 +356,7 @@ "metadata": {}, "outputs": [], "source": [ - "from src.concepts.concept import Concept, Example\n", + "from lilac.concepts.concept import Concept, Example\n", "\n", "\n", "def save_concept(positive_sentiment):\n", diff --git a/notebooks/Toxicity.ipynb b/notebooks/Toxicity.ipynb index ca2a9b02d..3ab1844f7 100644 --- a/notebooks/Toxicity.ipynb +++ b/notebooks/Toxicity.ipynb @@ -181,7 +181,7 @@ "source": [ "from sklearn.metrics import roc_auc_score\n", "\n", - "from src.utils import DebugTimer\n", + "from lilac.utils import DebugTimer\n", "\n", "SAMPLE_SIZE_PER_GROUP = 512\n", "LABEL_TYPE = 'obscene'\n", @@ -214,7 +214,7 @@ "metadata": {}, "outputs": [], "source": [ - "from src.concepts.concept import Concept, Example\n", + "from lilac.concepts.concept import Concept, Example\n", "\n", "data = {}\n", "\n", diff --git a/poetry.lock b/poetry.lock index 5d01516be..cf5af009c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1603,7 +1603,10 @@ files = [ [package.dependencies] google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} -proto-plus = ">=1.22.0,<2.0.0dev" +proto-plus = [ + {version = ">=1.22.0,<2.0.0dev", markers = "python_version < \"3.11\""}, + {version = ">=1.22.2,<2.0.0dev", markers = "python_version >= \"3.11\""}, +] protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" [[package]] @@ -1620,8 +1623,14 @@ files = [ [package.dependencies] google-auth = ">=2.14.1,<3.0.dev0" googleapis-common-protos = ">=1.56.2,<2.0.dev0" -grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} -grpcio-status = {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""} +grpcio = [ + {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}, + {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, +] +grpcio-status = [ + {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""}, + {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, +] protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" requests = ">=2.18.0,<3.0.0.dev0" @@ -3580,7 +3589,11 @@ files = [ ] [package.dependencies] -numpy = {version = ">=1.20.3", markers = "python_version < \"3.10\""} +numpy = [ + {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, +] python-dateutil = ">=2.8.2" pytz = ">=2020.1" tzdata = ">=2022.1" @@ -4777,39 +4790,41 @@ tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc ( [[package]] name = "scipy" -version = "1.11.1" +version = "1.9.3" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = "<3.13,>=3.9" -files = [ - {file = "scipy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aec8c62fbe52914f9cf28d846cf0401dd80ab80788bbab909434eb336ed07c04"}, - {file = "scipy-1.11.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:3b9963798df1d8a52db41a6fc0e6fa65b1c60e85d73da27ae8bb754de4792481"}, - {file = "scipy-1.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e8eb42db36526b130dfbc417609498a6192381abc1975b91e3eb238e0b41c1a"}, - {file = "scipy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:366a6a937110d80dca4f63b3f5b00cc89d36f678b2d124a01067b154e692bab1"}, - {file = "scipy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:08d957ca82d3535b3b9ba6c8ff355d78fe975271874e2af267cb5add5bd78625"}, - {file = "scipy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:e866514bc2d660608447b6ba95c8900d591f2865c07cca0aa4f7ff3c4ca70f30"}, - {file = "scipy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba94eeef3c9caa4cea7b402a35bb02a5714ee1ee77eb98aca1eed4543beb0f4c"}, - {file = "scipy-1.11.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:512fdc18c65f76dadaca139348e525646d440220d8d05f6d21965b8d4466bccd"}, - {file = "scipy-1.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cce154372f0ebe88556ed06d7b196e9c2e0c13080ecb58d0f35062dc7cc28b47"}, - {file = "scipy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4bb943010203465ac81efa392e4645265077b4d9e99b66cf3ed33ae12254173"}, - {file = "scipy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:249cfa465c379c9bb2c20123001e151ff5e29b351cbb7f9c91587260602c58d0"}, - {file = "scipy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:ffb28e3fa31b9c376d0fb1f74c1f13911c8c154a760312fbee87a21eb21efe31"}, - {file = "scipy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:39154437654260a52871dfde852adf1b93b1d1bc5dc0ffa70068f16ec0be2624"}, - {file = "scipy-1.11.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b588311875c58d1acd4ef17c983b9f1ab5391755a47c3d70b6bd503a45bfaf71"}, - {file = "scipy-1.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d51565560565a0307ed06fa0ec4c6f21ff094947d4844d6068ed04400c72d0c3"}, - {file = "scipy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b41a0f322b4eb51b078cb3441e950ad661ede490c3aca66edef66f4b37ab1877"}, - {file = "scipy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:396fae3f8c12ad14c5f3eb40499fd06a6fef8393a6baa352a652ecd51e74e029"}, - {file = "scipy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:be8c962a821957fdde8c4044efdab7a140c13294997a407eaee777acf63cbf0c"}, - {file = "scipy-1.11.1.tar.gz", hash = "sha256:fb5b492fa035334fd249f0973cc79ecad8b09c604b42a127a677b45a9a3d4289"}, +python-versions = ">=3.8" +files = [ + {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"}, + {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"}, + {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"}, + {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"}, + {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"}, + {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"}, + {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"}, + {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"}, + {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"}, + {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"}, + {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"}, + {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"}, + {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"}, + {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"}, + {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"}, + {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"}, + {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"}, + {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"}, + {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"}, + {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"}, + {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"}, ] [package.dependencies] -numpy = ">=1.21.6,<1.28.0" +numpy = ">=1.18.5,<1.26.0" [package.extras] -dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"] +doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"] +test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "send2trash" @@ -6366,5 +6381,5 @@ text-stats = ["spacy", "textacy"] [metadata] lock-version = "2.0" -python-versions = "~3.9" -content-hash = "2c40fa7f07421692189813eeb6c8bc0bf6aaccd077b1898279c44a74ad0b815e" +python-versions = ">=3.9,<4.0" +content-hash = "39eccdb9041d96bc8fffe78a0bde1355232a28bd614936d8bbe4f06f601d9a81" diff --git a/pyproject.toml b/pyproject.toml index 8322929a8..8897f035c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,12 @@ [tool.poetry] authors = ["Lilac AI Inc. "] -description = "Index your dataset" -name = "lilac" -packages = [{include = "src"}] +description = "Organize unstructured data" +license = "Apache-2.0" +name = "lilacai" +repository = "https://github.com/lilacai/lilac" +packages = [{include = "lilac"}] readme = "README.md" -version = "0.0.1" +version = "0.0.6" [tool.poetry.dependencies] @@ -27,9 +29,9 @@ pillow = "^9.3.0" # Image processing. psutil = "^5.9.5" pyarrow = "^9.0.0" pydantic = "^1.10.11" -python = "~3.9" +python = ">=3.9,<4.0" python-dotenv = "^1.0.0" -requests = "^2.28.1" +requests = "^2" scikit-learn = "^1.3.0" tenacity = "^8.2.2" tqdm = "^4.65.0" @@ -64,7 +66,6 @@ regex = "^2023.6.3" # For language detection. langdetect = {version = "^1.0.9", optional = true} - [tool.poetry.extras] all = [ "cohere", @@ -137,11 +138,11 @@ exclude = [ "**/node_modules", "**/__pycache__", ] -include = ["src"] +include = ["lilac"] [tool.ruff] line-length = 100 -src = ["src"] +src = ["lilac"] # Enable Pyflakes `F`, pycodestyle "W" and `E`, "Q" quotes, "I" imports. fix = true diff --git a/pytest.ini b/pytest.ini index d71aa3d9c..84f5d89cd 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,7 +1,7 @@ # Filter deprecation warnings from subpackages so they don't spam the console when testing. [pytest] testpaths = - src + lilac filterwarnings = ignore::DeprecationWarning:bokeh.*: ignore::DeprecationWarning:google.api_core.*: diff --git a/run_server_dev.sh b/run_server_dev.sh index 834c996cb..122f3716e 100755 --- a/run_server_dev.sh +++ b/run_server_dev.sh @@ -10,15 +10,15 @@ npm run dev --workspace web/blueprint -- --open & pid[2]=$! # Run the node server. -poetry run uvicorn src.server:app --reload --port 5432 --host 0.0.0.0 \ - --reload-dir src & +poetry run uvicorn lilac.server:app --reload --port 5432 --host 0.0.0.0 \ + --reload-dir lilac & pid[1]=$! poetry run watchmedo shell-command \ --patterns="*.py" \ --recursive \ --command='poetry run python -m scripts.make_fastapi_client' \ - ./src & + ./lilac & pid[0]=$! # When control+c is pressed, kill all process ids. diff --git a/run_server_prod.sh b/run_server_prod.sh index 802f12f0c..553a2d720 100755 --- a/run_server_prod.sh +++ b/run_server_prod.sh @@ -6,7 +6,7 @@ set -e ./scripts/build_server_prod.sh # Run the node server. -poetry run uvicorn src.server:app --port 5432 --host 0.0.0.0 & +poetry run uvicorn lilac.server:app --port 5432 --host 0.0.0.0 & pid[0]=$! # When control+c is pressed, kill all process ids. diff --git a/scripts/deploy_hf.py b/scripts/deploy_hf.py index 281a232a7..7b1dd71b6 100644 --- a/scripts/deploy_hf.py +++ b/scripts/deploy_hf.py @@ -7,9 +7,9 @@ import click from huggingface_hub import HfApi -from src.concepts.db_concept import DiskConceptDB, get_concept_output_dir -from src.config import CONFIG, data_path -from src.utils import get_dataset_output_dir +from lilac.concepts.db_concept import DiskConceptDB, get_concept_output_dir +from lilac.config import CONFIG, data_path +from lilac.utils import get_dataset_output_dir HF_SPACE_DIR = os.path.join(data_path(), '.hf_spaces') @@ -65,7 +65,7 @@ def main(hf_username: Optional[str], hf_space: Optional[str], dataset: list[str] run(f'poetry export --extras all --without-hashes > {repo_basedir}/requirements.txt') # Copy source code. - copy_dirs = ['src', 'web/blueprint/build'] + copy_dirs = ['lilac', 'web/blueprint/build'] for copy_dir in copy_dirs: shutil.copytree(copy_dir, os.path.join(repo_basedir, copy_dir), dirs_exist_ok=True) diff --git a/scripts/fix_py.sh b/scripts/fix_py.sh index 1ddd425b2..5ab053520 100755 --- a/scripts/fix_py.sh +++ b/scripts/fix_py.sh @@ -7,10 +7,10 @@ set -e source $(poetry env info --path)/bin/activate echo "Fixing python with ruff..." -ruff --fix src/ +ruff --fix lilac/ echo "Fixing python imports with isort..." -isort src/ +isort lilac/ echo "Fixing python formatting with yapf..." -yapf -i -p -r src/ +yapf -i -p -r lilac/ diff --git a/scripts/lint_py.sh b/scripts/lint_py.sh index ebe218984..d49d39861 100755 --- a/scripts/lint_py.sh +++ b/scripts/lint_py.sh @@ -7,9 +7,9 @@ set -e source $(poetry env info --path)/bin/activate echo "Linting python with ruff..." -ruff src +ruff lilac -isort --check src/ +isort --check lilac/ echo "Checking python types with mypy..." -mypy src +mypy lilac diff --git a/scripts/make_fastapi_client.py b/scripts/make_fastapi_client.py index 47f67d411..474906903 100755 --- a/scripts/make_fastapi_client.py +++ b/scripts/make_fastapi_client.py @@ -23,7 +23,7 @@ def main(api_json_from_server: bool) -> None: else: openapi_input = '/tmp/openapi.json' # Call the make_openapi script to generate the openapi.json file. - run(f'poetry run python -m src.make_openapi --output={openapi_input}') + run(f'poetry run python -m lilac.make_openapi --output={openapi_input}') # Generate the web client. run(f""" diff --git a/scripts/publish_pip.sh b/scripts/publish_pip.sh new file mode 100755 index 000000000..e122ebd37 --- /dev/null +++ b/scripts/publish_pip.sh @@ -0,0 +1,23 @@ +#!/bin/bash +set -e # Fail if any of the commands below fail. + +set -o allexport +source .env.local +set +o allexport + +if [[ -z "${PYPI_TOKEN}" ]]; then + echo 'Please set the PYPI_TOKEN variable in your .env.local file' + exit 1 +fi + +poetry version patch +poetry config pypi-token.pypi $PYPI_TOKEN +poetry build + +read -p "Continue (y/n)?" CONT +if [ "$CONT" = "y" ]; then + poetry publish + echo "Published $(poetry version)" +else + echo "Did not publish" +fi diff --git a/scripts/test_py.sh b/scripts/test_py.sh index 26e69147d..5b30eb18d 100755 --- a/scripts/test_py.sh +++ b/scripts/test_py.sh @@ -20,12 +20,12 @@ export DISABLE_LOGS=True # -vv enables verbose outputs. # --capture=tee-sys enables printing for passing tests. # We propagate the first argument as a test path, which can be: -# 1) `src/data/dataset_test.py` to run a single file. -# 2) `src/data/dataset_test.py::SelectRowsSuite` to run a test suite. -# 3) `src/data/dataset_test.py::SelectRowsSuite::test_columns` to run a single test. +# 1) `lilac/data/dataset_test.py` to run a single file. +# 2) `lilac/data/dataset_test.py::SelectRowsSuite` to run a test suite. +# 3) `lilac/data/dataset_test.py::SelectRowsSuite::test_columns` to run a single test. if [ "$1" ]; then TEST_PATH="$1" else - TEST_PATH="src/" + TEST_PATH="lilac/" fi pytest -vv --capture=tee-sys -m "$PYTEST_MARKS" "$TEST_PATH"