{"id":13394141,"url":"https://github.com/haifengl/smile","last_synced_at":"2026-10-22T20:15:26.393Z","repository":{"id":23553783,"uuid":"26921116","full_name":"haifengl/smile","owner":"haifengl","description":"Statistical Machine Intelligence \u0026 Learning Engine","archived":false,"fork":false,"pushed_at":"2026-10-13T01:53:06.000Z","size":294418,"stargazers_count":6421,"open_issues_count":2,"forks_count":1150,"subscribers_count":253,"default_branch":"master","last_synced_at":"2026-10-16T14:12:02.775Z","etag":null,"topics":["classification","clustering","computer-algebra-system","computer-vision","data-science","dataframe","deep-learning","genetic-algorithm","interpolation","linear-algebra","llm","machine-learning","manifold-learning","multidimensional-scaling","nearest-neighbor-search","nlp","regression","statistics","visualization","wavelet"],"latest_commit_sha":null,"homepage":"https://haifengl.github.io","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/haifengl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"COPYING","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":"CLA.md","disclosure":null},"funding":{"github":"haifengl"}},"created_at":"2014-11-20T16:28:12.000Z","updated_at":"2026-10-15T06:33:58.000Z","dependencies_parsed_at":"2026-09-30T00:22:14.516Z","dependency_job_id":null,"html_url":"https://github.com/haifengl/smile","commit_stats":{"total_commits":3930,"total_committers":71,"mean_commits":"55.352112676056336","dds":"0.11323155216284986","last_synced_commit":"aa2bfb953b5aa5551b31bac1909f2b76b55c27e0"},"previous_names":[],"tags_count":59,"template":false,"template_full_name":null,"purl":"pkg:github/haifengl/smile","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haifengl%2Fsmile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haifengl%2Fsmile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haifengl%2Fsmile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haifengl%2Fsmile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haifengl","download_url":"https://codeload.github.com/haifengl/smile/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haifengl%2Fsmile/sbom","scorecard":{"id":452895,"data":{"date":"2025-08-11","repo":{"name":"github.com/haifengl/smile","commit":"256a41cc9fb394c0f417d301a04da28255ba9bef"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"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":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v4.4.0 not signed: https://api.github.com/repos/haifengl/smile/releases/223803848","Warn: release artifact v4.3.0 not signed: https://api.github.com/repos/haifengl/smile/releases/203244834","Warn: release artifact v4.2.0 not signed: https://api.github.com/repos/haifengl/smile/releases/197879192","Warn: release artifact v4.1.0 not signed: https://api.github.com/repos/haifengl/smile/releases/193229207","Warn: release artifact v4.0.0 not signed: https://api.github.com/repos/haifengl/smile/releases/187137585","Warn: release artifact v4.4.0 does not have provenance: https://api.github.com/repos/haifengl/smile/releases/223803848","Warn: release artifact v4.3.0 does not have provenance: https://api.github.com/repos/haifengl/smile/releases/203244834","Warn: release artifact v4.2.0 does not have provenance: https://api.github.com/repos/haifengl/smile/releases/197879192","Warn: release artifact v4.1.0 does not have provenance: https://api.github.com/repos/haifengl/smile/releases/193229207","Warn: release artifact v4.0.0 does not have provenance: https://api.github.com/repos/haifengl/smile/releases/187137585"],"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":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'","Warn: branch protection not enabled for branch 'v4'","Warn: branch protection not enabled for branch 'v3'"],"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: npmCommand not pinned by hash: bin/serve.sh:4","Warn: npmCommand not pinned by hash: bin/setup.sh:4","Warn: npmCommand not pinned by hash: bin/setup.sh:7","Warn: pipCommand not pinned by hash: binder/postBuild:4","Info:   0 out of   3 npmCommand dependencies pinned","Info:   0 out of   1 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":"Vulnerabilities","score":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-x7hr-w5r2-h6wg","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T08:40:07.900Z","repository_id":23553783,"created_at":"2025-08-19T08:40:07.900Z","updated_at":"2025-08-19T08:40:07.900Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344836268,"owners_count":38331439,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-16T02:00:06.653Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["classification","clustering","computer-algebra-system","computer-vision","data-science","dataframe","deep-learning","genetic-algorithm","interpolation","linear-algebra","llm","machine-learning","manifold-learning","multidimensional-scaling","nearest-neighbor-search","nlp","regression","statistics","visualization","wavelet"],"created_at":"2024-07-30T17:01:10.277Z","updated_at":"2026-10-18T20:07:11.119Z","avatar_url":"https://github.com/haifengl.png","language":"Java","funding_links":["https://github.com/sponsors/haifengl"],"categories":["Java","Projects","Table of Contents","项目","II. Databases, search engines, big data and machine learning","人工智能","Machine Learning","Wrappers","Machine Learning and AI"],"sub_categories":["Machine Learning","Science and Data Analysis","机器学习","Tools","Speech Recognition","8. Machine Learning","Papers","Machine Learning Frameworks"],"readme":"# Statistical Machine Intelligence \u0026 Learning Engine \u003cimg align=\"left\" width=\"40\" src=\"/website/src/images/smile.png\" alt=\"SMILE\"\u003e\n[![Maven Central](https://img.shields.io/maven-central/v/com.github.haifengl/smile-core)](https://central.sonatype.com/artifact/com.github.haifengl/smile-core)\n[![CI](https://github.com/haifengl/smile/actions/workflows/ci.yml/badge.svg)](https://github.com/haifengl/smile/actions/workflows/ci.yml)\n[![CodeQL](https://github.com/haifengl/smile/actions/workflows/codeql.yml/badge.svg)](https://github.com/haifengl/smile/actions/workflows/codeql.yml)\n\nSMILE (Statistical Machine Intelligence \u0026 Learning Engine) is a comprehensive,\nhigh-performance machine learning framework for the JVM. SMILE v5+ requires\n**Java 25**; v4.x requires Java 21; all previous versions require Java 8.\nSMILE also provides idiomatic APIs for **Scala** and **Kotlin**.\nWith advanced data structures and algorithms, SMILE delivers state-of-the-art\nperformance across every aspect of machine learning.\n\nSMILE Serve is a production-ready inference server\nthat brings together three complementary inference capabilities on the JVM:\n\n| Capability | API prefix  | Description |\n|---|----------------------|-------------|\n| **Classic ML** | `/api/v1/smile` | Serialized SMILE models (`.sml`) — classifiers and regressors |\n| **ONNX Runtime** | `/api/v1/onnx` | Any model in the ONNX open format (`.onnx`) |\n| **LLM Chat** | `/api/v1/chat/completions` | OpenAI-compatible chat completions |\n\nA React-based web UI is bundled and served from the same process.\nSee [serve/README.md](serve/README.md) how to build and run the service.\n\nSMILE Studio is an agentic IDE for data science using Python, Java, or Scala.\nSee [studio/README.md](studio/README.md) how to get your first project up and\nstart interacting with your data with natural language in a few minutes.\n\n---\n\n## Table of Contents\n\n1. [Features](#features)\n2. [Module Map](#module-map)\n3. [Installation](#installation)\n   - [Maven](#maven)\n   - [SBT (Scala)](#sbt-scala)\n   - [Gradle (Kotlin)](#gradle-kotlin)\n   - [Native Libraries (BLAS / LAPACK)](#native-libraries-blas--lapack)\n4. [Quick Start](#quick-start)\n5. [SMILE Studio \u0026 Shell](#smile-studio--shell)\n6. [Model Serialization](#model-serialization)\n7. [Visualization](#visualization)\n8. [License](#license)\n9. [Issues \u0026 Discussions](#issues--discussions)\n10. [Contributing](#contributing)\n11. [Maintainers](#maintainers)\n12. [Gallery](#gallery)\n\n---\n\n## Features\n\n| Area | Highlights |\n|---|---|\n| **LLM** | LLaMA-3 inference, tiktoken BPE tokenizer, OpenAI-compatible REST server, SSE chat streaming |\n| **Deep Learning** | LibTorch/GPU backend, EfficientNet-V2 image classification, custom layer API |\n| **Classification** | SVM, Decision Trees, Random Forest, AdaBoost, Gradient Boosting, Logistic Regression, Neural Networks, RBF Networks, MaxEnt, KNN, Naïve Bayes, LDA/QDA/RDA |\n| **Regression** | SVR, Gaussian Process, Regression Trees, GBDT, Random Forest, RBF, OLS, LASSO, ElasticNet, Ridge |\n| **Clustering** | BIRCH, CLARANS, DBSCAN, DENCLUE, Deterministic Annealing, K-Means, X-Means, G-Means, Neural Gas, Growing Neural Gas, Hierarchical, SIB, SOM, Spectral, Min-Entropy |\n| **Manifold Learning** | IsoMap, LLE, Laplacian Eigenmap, t-SNE, UMAP, PCA, Kernel PCA, Probabilistic PCA, GHA, Random Projection, ICA |\n| **Feature Engineering** | Genetic Algorithm selection, Ensemble selection, TreeSHAP, SNR, Sum-Squares ratio, data transformations, formula API |\n| **NLP** | Sentence / word tokenization, Bigram test, Phrase \u0026 Keyword extraction, Stemmer, POS tagging, Relevance ranking |\n| **Association Rules** | FP-growth frequent itemset mining |\n| **Sequence Learning** | Hidden Markov Model, Conditional Random Field |\n| **Nearest Neighbor** | BK-Tree, Cover Tree, KD-Tree, SimHash, LSH |\n| **Numerical Methods** | Linear algebra, numerical optimization (BFGS, L-BFGS), interpolation, wavelets, RBF, distributions, hypothesis tests |\n| **Visualization** | Swing plots (scatter, line, bar, box, histogram, surface, heatmap, contour, …) and declarative Vega-Lite charts |\n\n---\n\n## Module Map\n\nEach module has its own detailed user guide.  Click the **README** link for\nthe module overview, or drill into individual topic guides.\n\n### `base/` — Foundation\n\u003e Data structures, math, linear algebra, statistical utilities, I/O\n\n| Document | Topics |\n|---|---|\n| [README](base/README.md) | Module overview and dependency setup |\n| [DATA_FRAME.md](base/DATA_FRAME.md) | DataFrame API — creation, selection, transformation |\n| [DATA_IO.md](base/DATA_IO.md) | CSV, JSON, Parquet, Arrow, JDBC, Avro readers/writers |\n| [DATA_TRANSFORMATION.md](base/DATA_TRANSFORMATION.md) | Scalers, encoders, imputers, feature transforms |\n| [DATASET.md](base/DATASET.md) | Built-in benchmark and real-world datasets |\n| [FORMULA.md](base/FORMULA.md) | R-style formula language for model matrices |\n| [DISTRIBUTIONS.md](base/DISTRIBUTIONS.md) | Probability distributions (Normal, Poisson, Beta, …) |\n| [HYPOTHESIS_TESTING.md](base/HYPOTHESIS_TESTING.md) | t-test, chi-squared, ANOVA, KS-test, … |\n| [DISTANCES.md](base/DISTANCES.md) | Euclidean, Mahalanobis, Hamming, edit distance, … |\n| [NEAREST_NEIGHBOR.md](base/NEAREST_NEIGHBOR.md) | KD-Tree, Cover Tree, BK-Tree, LSH |\n| [KERNELS.md](base/KERNELS.md) | Gaussian, polynomial, Laplacian, and other kernel functions |\n| [RBF.md](base/RBF.md) | Radial basis function networks |\n| [INTERPOLATION.md](base/INTERPOLATION.md) | Linear, cubic spline, bilinear, bicubic |\n| [GRAPH.md](base/GRAPH.md) | Adjacency list/matrix graph, BFS/DFS, spanning trees |\n| [SORT.md](base/SORT.md) | Quick sort, heap sort, counting sort, index sort |\n| [HASH.md](base/HASH.md) | Locality-sensitive hashing, SimHash |\n| [RNG.md](base/RNG.md) | Random number generators, sampling, permutations |\n| [BFGS.md](base/BFGS.md) | L-BFGS and BFGS numerical optimizers |\n| [ICA.md](base/ICA.md) | Independent Component Analysis |\n| [TENSOR.md](base/TENSOR.md) | N-dimensional array (CPU tensor without LibTorch) |\n| [WAVELET.md](base/WAVELET.md) | DWT, CWT, and wavelet families |\n| [GAP.md](base/GAP.md) | GAP statistic for optimal cluster count estimation |\n| [COMPRESSED_SENSING.md](base/COMPRESSED_SENSING.md) | Compressed sensing and basis pursuit |\n\n### `core/` — Machine Learning Algorithms\n\u003e Classification, regression, clustering, manifold learning, and more\n\n| Document | Topics |\n|---|---|\n| [README](core/README.md) | Module overview |\n| [CLASSIFICATION.md](core/CLASSIFICATION.md) | SVM, Random Forest, AdaBoost, GBDT, KNN, Naïve Bayes, LDA, … |\n| [REGRESSION.md](core/REGRESSION.md) | SVR, Gaussian Process, LASSO, Ridge, ElasticNet, GBDT, … |\n| [CLUSTERING.md](core/CLUSTERING.md) | K-Means, DBSCAN, BIRCH, SOM, Spectral Clustering, … |\n| [FEATURE_ENGINEERING.md](core/FEATURE_ENGINEERING.md) | Feature selection, PCA, ICA, projection, encoding |\n| [MANIFOLD.md](core/MANIFOLD.md) | t-SNE, UMAP, IsoMap, LLE, Laplacian Eigenmap |\n| [ANOMALY_DETECTION.md](core/ANOMALY_DETECTION.md) | IsolationForest, one-class SVM, local outlier factor |\n| [ASSOCIATION_RULE_MINING.md](core/ASSOCIATION_RULE_MINING.md) | FP-growth, association rules, frequent itemsets |\n| [SEQUENCE.md](core/SEQUENCE.md) | HMM (Baum-Welch, Viterbi), CRF |\n| [TIME_SERIES.md](core/TIME_SERIES.md) | ARIMA, box-plots, autocorrelation |\n| [REGRESSION.md](core/REGRESSION.md) | Full regression API reference |\n| [TRAINING.md](core/TRAINING.md) | Cross-validation, bootstrap, hyper-parameter search |\n| [VALIDATION.md](core/VALIDATION.md) | Hold-out, k-fold, leave-one-out evaluation |\n| [VALIDATION_METRICS.md](core/VALIDATION_METRICS.md) | Accuracy, AUC, F1, RMSE, MAE, confusion matrix |\n| [HYPER_PARAMETER_OPTIMIZATION.md](core/HYPER_PARAMETER_OPTIMIZATION.md) | Grid search, random search, Bayesian optimization |\n| [VECTOR_QUANTIZATION.md](core/VECTOR_QUANTIZATION.md) | LVQ, Neural Gas, SOM as vector quantizers |\n\n### `deep/` — Deep Learning \u0026 LLMs\n\u003e LibTorch-backed GPU/CPU tensor operations, neural network layers, LLaMA-3 inference, EfficientNet, ONNX Runtime \u0026 GenAI\n\n| Document | Topics |\n|---|---|\n| [README](deep/README.md) | Core deep-learning guide (tensors, layers, loss, optimizer, model, metrics, data loading) |\n| [LLM.md](deep/LLM.md) | `smile.llm` — tokenizer, LLaMA-3, Qwen3.5, inference engine, KV cache, quantization, tensor parallelism |\n| [VISION.md](deep/VISION.md) | `smile.vision` — transforms, `ImageDataset`, EfficientNet-V2, ImageNet labels |\n| [ONNX.md](deep/ONNX.md) | ONNX Runtime inference (`smile.onnx`) — sessions, tensors, execution providers |\n| [ONNX_GENAI.md](deep/ONNX_GENAI.md) | ONNX Runtime GenAI (`smile.onnx.genai`) — generate loop, chat model, multimodal |\n\nThe `deep/README.md` covers:\n- **`smile.deep.tensor`** — Tensor factory, indexing, arithmetic, AutoScope memory management, dtype/device\n- **`smile.deep.layer`** — Linear, Conv2d, pooling, normalization (BN/GN/RMS), dropout, embedding, sequential blocks\n- **`smile.deep.activation`** — ReLU, GELU, SiLU, Tanh, Sigmoid, Softmax, GLU, HardShrink, …\n- **`smile.deep.Loss`** — MSE, cross-entropy, BCE, Huber, KL, hinge, and more\n- **`smile.deep.Optimizer`** — SGD, Adam, AdamW, RMSprop\n- **`smile.deep.Model`** — Abstract base class + training loop\n- **`smile.deep.metric`** — Accuracy, Precision, Recall, F1Score with macro/micro/weighted averaging\n- **`smile.deep.Dataset`** — Dataset interface, `DataSampler`, `SampleBatch`\n\nThe `deep/LLM.md` covers:\n- **`smile.llm`** — `Message`, `Role`, `FinishReason`, `ChatCompletion`, `ChatOptions`, `LanguageModel`\n- **`smile.llm.tokenizer`** — `Tokenizer` interface, `Tiktoken` BPE implementation (LLaMA-3 compatible)\n- **`smile.llm.model.llama`** — Full LLaMA-3 stack: `Llama.build()`, `generate()`, `chat()`, streaming\n- **`smile.llm.model.qwen`** — Qwen3.5 hybrid stack (Gated DeltaNet + gated attention), MTP, vision tower\n- **`smile.llm.engine`** — Continuous-batching `InferenceEngine`, `GenerationRequest`/`GenerationHandle`, speculative decoding\n- **`smile.llm.cache`** — Paged `KvCachePool`, `RadixCache` prefix reuse\n- **`smile.llm.quant`** / **`smile.llm.parallel`** — FP8/NVFP4/Marlin quantization, tensor parallelism\n\nThe `deep/VISION.md` covers:\n- **`smile.vision`** — `VisionModel`, `ImageDataset`, `EfficientNet.V2S/M/L()` pretrained models, ImageNet labels\n- **`smile.vision.transform`** — `Transform` interface, `ImageClassification` pipeline, resize/crop/toTensor helpers\n\n### `nlp/` — Natural Language Processing\n\u003e Text normalization, tokenization, POS tagging, stemming, relevance ranking\n\n| Document | Topics |\n|---|---|\n| [README](nlp/README.md) | Module overview |\n| [TOKENIZER.md](nlp/TOKENIZER.md) | Sentence splitter, word tokenizer, regex tokenizer |\n| [POS.md](nlp/POS.md) | Part-of-speech tagging (Brill tagger, HMM tagger) |\n| [STEM.md](nlp/STEM.md) | Porter, Lancaster, Lovins stemmers; lemmatization |\n| [COLLOCATION.md](nlp/COLLOCATION.md) | Bigram/trigram statistical tests, phrase extraction |\n| [RELEVANCE.md](nlp/RELEVANCE.md) | TF-IDF, BM25, keyword extraction |\n| [TAXONOMY.md](nlp/TAXONOMY.md) | WordNet integration, synsets, hypernyms |\n\n### `plot/` — Data Visualization\n\u003e Swing-based interactive plots and declarative Vega-Lite charts\n\n| Document | Topics |\n|---|---|\n| [README](plot/README.md) | Swing plotting API — scatter, line, bar, box, histogram, heatmap, surface, contour, wireframe |\n| [VEGA.md](plot/VEGA.md) | Declarative `smile.plot.vega` (Vega-Lite) — JSON spec generation, web/Jupyter rendering |\n\n### `serve/` — Inference Server\n\u003e Quarkus-based REST inference service with OpenAI-compatible API and SSE streaming\n\n| Document | Topics |\n|---|---|\n| [README](serve/README.md) | Building and running the server, `/chat/completions` endpoint, SSE streaming, configuration |\n\n### `studio/` — Interactive Shell \u0026 Desktop IDE\n\u003e An agentic IDE for data science using Python or SMILE\n\n| Document                      | Topics |\n|-------------------------------|---|\n| [README.md](studio/README.md) | Desktop Studio UX                                                    |\n| [CLI](studio/CLI.md)    | CLI entry points (`smile`, `smile shell`, `smile scala`, `smile serve`) |\n\n### `scala/` — Scala API\n\u003e Idiomatic Scala shim — concise wrappers, symbolic operators, Scala collections integration\n\n| Document | Topics |\n|---|---|\n| [README](scala/README.md) | API overview, `smile.classification`, `smile.regression`, `smile.clustering`, `smile.plot` in Scala |\n\n### `kotlin/` — Kotlin API\n\u003e Idiomatic Kotlin shim — extension functions, named parameters, builder DSLs\n\n| Document | Topics |\n|---|---|\n| [README](kotlin/README.md) | API overview, extension functions, Kotlin-style builders |\n| [packages.md](kotlin/packages.md) | Full package-by-package listing of all Kotlin extension functions |\n\n### `json/` — JSON Library (Scala)\n\u003e Lightweight zero-dependency JSON library for Scala with a clean DSL\n\n| Document | Topics |\n|---|---|\n| [README](json/README.md) | Parsing, building, pattern matching, path navigation, serialization |\n\n### `spark/` — Apache Spark Integration\n\u003e Use SMILE models inside Spark ML pipelines\n\n| Document | Topics |\n|---|---|\n| [README](spark/README.md) | `SmileTransformer`, `SmileClassifier`, `SmileRegressor`; training and scoring in Spark DataFrames |\n\n---\n\n## Installation\n\n### Maven\n\n```xml\n\u003c!-- Core ML algorithms --\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.haifengl\u003c/groupId\u003e\n  \u003cartifactId\u003esmile-core\u003c/artifactId\u003e\n  \u003cversion\u003e7.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Deep learning + LLMs (requires LibTorch) --\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.haifengl\u003c/groupId\u003e\n  \u003cartifactId\u003esmile-deep\u003c/artifactId\u003e\n  \u003cversion\u003e7.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Natural language processing --\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.haifengl\u003c/groupId\u003e\n  \u003cartifactId\u003esmile-nlp\u003c/artifactId\u003e\n  \u003cversion\u003e7.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Data visualization --\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.haifengl\u003c/groupId\u003e\n  \u003cartifactId\u003esmile-plot\u003c/artifactId\u003e\n  \u003cversion\u003e7.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### SBT (Scala)\n\n```scala\nlibraryDependencies += \"com.github.haifengl\" %% \"smile-scala\" % \"7.0.0\"\n```\n\n### Gradle (Kotlin)\n\n```kotlin\ndependencies {\n    implementation(\"com.github.haifengl:smile-kotlin:7.0.0\")\n}\n```\n\n### Native Libraries (BLAS / LAPACK)\n\nSeveral algorithms (manifold learning, Gaussian Process, MLP, some clustering)\nrequire BLAS and LAPACK.\n\n**Linux (Ubuntu / Debian)**\n```shell\nsudo apt update\nsudo apt install libopenblas-dev libarpack2-dev\n```\n\n**macOS (Homebrew)**\n```shell\nbrew install arpack\n```\nDo **not** rely on `DYLD_LIBRARY_PATH`: macOS System Integrity Protection (SIP)\nstrips `DYLD_*` variables when the JVM is started through the `/usr/bin/java`\nstub, so dyld never sees them. SMILE reaches `libarpack` through the FFM\nbindings, whose `SymbolLookup.libraryLookup(\"arpack\")` calls `dlopen` on the bare\nname `libarpack.dylib`; this does **not** consult `java.library.path`, so\n`-Djava.library.path=...` and `LD_LIBRARY_PATH` have no effect either. SMILE\ntherefore preloads the library by absolute path through\n`smile.linalg.NativeLibrary`, which finds it under `/opt/homebrew/lib` or\n`/usr/local/lib` with no copy or symlink. To point it somewhere else, set the\n`arpack.native.path` system property or the `ARPACK_NATIVE_PATH` environment\nvariable.\n\n**Windows** — pre-built DLLs are included in the `bin/` directory of the\n[release package](https://github.com/haifengl/smile/releases).\nAdd that directory to `PATH`.\n\n**GPU (CUDA)** — make sure the LibTorch CUDA native libraries are on\nPATH (Windows) or LD_LIBRARY_PATH (Linux).\n\n---\n\n## Quick Start\n\n```java\nimport smile.classification.RandomForest;\nimport smile.data.formula.Formula;\nimport smile.io.Read;\n\n// Load data\nvar data = Read.csv(\"src/test/resources/iris.csv\");\n\n// Train a random forest\nvar forest = RandomForest.fit(Formula.lhs(\"species\"), data);\n\n// Predict\nint label = forest.predict(data.get(0));\nSystem.out.println(\"Predicted class: \" + label);\n```\n\nFor deep learning examples, see [deep/README.md](deep/README.md); for LLM and\ncomputer-vision examples, see [deep/LLM.md](deep/LLM.md) and\n[deep/VISION.md](deep/VISION.md).\nFor visualization examples, see [plot/README.md](plot/README.md).\n\n---\n\n## SMILE Studio\n\nSMILE Studio is an agentic IDE for data science using Python or [SMILE](https://www.aihalo.dev/) on JVM.\nSee [studio/README.md](studio/README.md) for full documentation.\n\nDownload a pre-packaged release from the\n[releases page](https://github.com/haifengl/smile/releases), then:\n\n```shell\npath/to/smile/bin/setup      # install required native dependencies\npath/to/smile/bin/smile      # launch SMILE Studio from your project directory\n```\n\nOther entry points:\n\n| Command         | Description                                    |\n|-----------------|------------------------------------------------|\n| `smile`         | Desktop agentic IDE                            |\n| `smile shell`   | Java REPL with all SMILE packages pre-imported |\n| `smile scala`   | Scala REPL                                     |\n| `smile train`   | Train a supervised learning model              |\n| `smile predict` | Predict on a file using a saved model          |\n| `smile serve`   | Start the LLM inference server                 |\n\nTo increase the JVM heap:\n```shell\npath/to/smile/bin/smile -J-Xmx30G\n```\n\n---\n\n## Model Serialization\n\nMost SMILE models implement `java.io.Serializable`.  You can serialize a\ntrained model to disk and load it in a production environment or inside a\nSpark job:\n\n```java\n// Save\ntry (var out = new ObjectOutputStream(new FileOutputStream(\"model.ser\"))) {\n    out.writeObject(forest);\n}\n\n// Load\ntry (var in = new ObjectInputStream(new FileInputStream(\"model.ser\"))) {\n    var loaded = (RandomForest) in.readObject();\n}\n```\n\n---\n\n## Visualization\n\nSMILE provides two visualization layers:\n\n- **`smile.plot.swing`** — Swing-based interactive 2D/3D plots.  See [plot/README.md](plot/README.md).\n- **`smile.plot.vega`** — Declarative Vega-Lite charts for browsers and Jupyter.  See [plot/VEGA.md](plot/VEGA.md).\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.haifengl\u003c/groupId\u003e\n  \u003cartifactId\u003esmile-plot\u003c/artifactId\u003e\n  \u003cversion\u003e7.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n---\n\n## License\n\nSMILE employs a modern multi-product licensing model designed to support\nfree academic and open-source collaboration while offering commercial licensing\nand enterprise support for proprietary and mission-critical deployments.\nFor details, see [LICENSE](https://github.com/haifengl/smile/blob/master/LICENSE).\nTo acquire a commercial license, contact **sales@aihalo.dev**.\n\n---\n\n## Issues \u0026 Discussions\n\n| Channel | Purpose |\n|---|---|\n| [GitHub Discussions](https://github.com/haifengl/smile/discussions) | Questions, ideas, show-and-tell |\n| [Stack Overflow `[smile]`](https://stackoverflow.com/questions/tagged/smile) | Technical Q\u0026A |\n| [Issue Tracker](https://github.com/haifengl/smile/issues/new) | Bug reports and feature requests |\n| [Online Docs](https://www.aihalo.dev/) | Tutorials and programming guides |\n| [Java API](https://www.aihalo.dev/api/java/index.html) · [Scala API](https://www.aihalo.dev/api/scala/index.html) · [Kotlin API](https://www.aihalo.dev/api/kotlin/index.html) · [Clojure API](https://www.aihalo.dev/api/clojure/index.html) | API Javadoc |\n\n---\n\n## Contributing\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) for build and test instructions.\n\n---\n\n## Maintainers\n\n- Haifeng Li ([@haifengl](https://github.com/haifengl))\n- Karl Li ([@kklioss](https://github.com/kklioss))\n\n---\n\n## Gallery\n\u003ctable class=\"center\" style=\"width:100%;\"\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"3\"\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/splom.png\"\u003e\u003cimg src=\"/website/src/images/splom.png\" alt=\"SPLOM\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eScatterplot Matrix\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/pca.png\"\u003e\u003cimg src=\"/website/src/images/pca.png\" alt=\"Scatter\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eScatter Plot\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/heart.png\"\u003e\u003cimg src=\"/website/src/images/heart.png\" alt=\"Heart\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eLine Plot\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/surface.png\"\u003e\u003cimg src=\"/website/src/images/surface.png\" alt=\"Surface\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eSurface Plot\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/bar.png\"\u003e\u003cimg src=\"/website/src/images/bar.png\" alt=\"Scatter\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eBar Plot\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/box.png\"\u003e\u003cimg src=\"/website/src/images/box.png\" alt=\"Box Plot\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eBox Plot\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/histogram2d.png\"\u003e\u003cimg src=\"/website/src/images/histogram2d.png\" alt=\"Histogram\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eHistogram Heatmap\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/rolling.png\"\u003e\u003cimg src=\"/website/src/images/rolling.png\" alt=\"Rolling\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eRolling Average\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/map.png\"\u003e\u003cimg src=\"/website/src/images/map.png\" alt=\"Map\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eGeo Map\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/umap.png\"\u003e\u003cimg src=\"/website/src/images/umap.png\" alt=\"UMAP\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eUMAP\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/text.png\"\u003e\u003cimg src=\"/website/src/images/text.png\" alt=\"Text\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eText Plot\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/contour.png\"\u003e\u003cimg src=\"/website/src/images/contour.png\" alt=\"Contour\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eHeatmap with Contour\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/hexmap.png\"\u003e\u003cimg src=\"/website/src/images/hexmap.png\" alt=\"Hexmap\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eHexmap\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/isomap.png\"\u003e\u003cimg src=\"/website/src/images/isomap.png\" alt=\"IsoMap\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eIsoMap\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/umap.png\"\u003e\u003cimg src=\"/website/src/images/lle.png\" alt=\"LLE\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eLLE\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/gallery/smile-demo-kpca.png\"\u003e\u003cimg src=\"/website/src/gallery/smile-demo-kpca-small.png\" alt=\"Kernel PCA\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eKernel PCA\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/gallery/smile-demo-ann.png\"\u003e\u003cimg src=\"/website/src/gallery/smile-demo-ann-small.png\" alt=\"Neural Network\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eNeural Network\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/gallery/smile-demo-svm.png\"\u003e\u003cimg src=\"/website/src/gallery/smile-demo-svm-small.png\" alt=\"SVM\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eSVM\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/gallery/smile-demo-agglomerative-clustering.png\"\u003e\u003cimg src=\"/website/src/gallery/smile-demo-agglomerative-clustering-small.png\" alt=\"Hierarchical Clustering\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eHierarchical Clustering\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/gallery/smile-demo-som.png\"\u003e\u003cimg src=\"/website/src/gallery/smile-demo-som-small.png\" alt=\"SOM\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eSOM\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/gallery/smile-demo-dbscan.png\"\u003e\u003cimg src=\"/website/src/gallery/smile-demo-dbscan-small.png\" alt=\"DBSCAN\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eDBSCAN\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/gallery/smile-demo-neural-gas.png\"\u003e\u003cimg src=\"/website/src/gallery/smile-demo-neural-gas-small.png\" alt=\"Neural Gas\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eNeural Gas\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/gallery/smile-demo-wavelet.png\"\u003e\u003cimg src=\"/website/src/gallery/smile-demo-wavelet-small.png\" alt=\"Wavelet\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eWavelet\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/gallery/smile-demo-mixture.png\"\u003e\u003cimg src=\"/website/src/gallery/smile-demo-mixture-small.png\" alt=\"Mixture\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eExponential Family Mixture\u003c/h3\u003e\u003c/figcaption\u003e\n    \u003c/figure\u003e\n    \u003c/td\u003e\n      \u003ctd\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/teapot.png\"\u003e\u003cimg src=\"/website/src/images/teapot.png\" alt=\"Teapot\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eTeapot Wireframe\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"3\"\u003e\n      \u003cfigure\u003e\n        \u003ca href=\"/website/src/images/grid-interpolation2d.png\"\u003e\u003cimg src=\"/website/src/images/grid-interpolation2d.png\" alt=\"Interpolation\"\u003e\u003c/a\u003e\n        \u003cfigcaption style=\"text-align: center;\"\u003e\u003ch3\u003eGrid Interpolation\u003c/h3\u003e\u003c/figcaption\u003e\n      \u003c/figure\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaifengl%2Fsmile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaifengl%2Fsmile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaifengl%2Fsmile/lists"}