Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
863e9f6
Documentation (#464)
KaisaridiSofia Oct 6, 2025
7e2e23d
improve examples (#465)
caglayantuna Oct 10, 2025
04e2026
update license (#467)
caglayantuna Oct 10, 2025
8282b21
add_joint_example (#466)
caglayantuna Oct 10, 2025
403effa
Fix gallery (#468)
caglayantuna Oct 30, 2025
30b53e1
Docs: Migrate to Furo theme and improve gallery layout
MendezSebastianP Nov 26, 2025
eba36bf
Adding code.view: it allows to watch the source code. Improve API ref…
MendezSebastianP Dec 1, 2025
680020d
Fix warnings, update examples and improve logging
MendezSebastianP Dec 4, 2025
7d19709
docs: improve examples and add Data/Dataset tutorial
MendezSebastianP Dec 5, 2025
acdaa87
first try to model.summary(), visible in examples gallery
MendezSebastianP Dec 8, 2025
720b0c4
Implement `model.summary()` for formatted model inspection
MendezSebastianP Dec 10, 2025
b8325c1
Key changes:
MendezSebastianP Dec 12, 2025
c42e13c
Patching the models tests: as we generate new info to use in summary(…
MendezSebastianP Dec 15, 2025
f754fe0
fixing favicon error display
MendezSebastianP Jan 5, 2026
c1c9ebb
removing sg_execution_times.rst
MendezSebastianP Jan 5, 2026
958e877
Merge remote-tracking branch 'upstream/v2.1' into v2
MendezSebastianP Jan 6, 2026
00fef01
Merge upstream/v2.1 into feat/UI
MendezSebastianP Feb 23, 2026
c9a42a7
solving poetry issue
MendezSebastianP Feb 23, 2026
949dfb2
Merge remote-tracking branch 'upstream/v2.1' into feat/UI
MendezSebastianP Feb 23, 2026
d6adb02
fixing warnings
MendezSebastianP Feb 23, 2026
1105eff
fixing readthedocs and test problem?
MendezSebastianP Feb 23, 2026
5685fe2
forgot to poetry lock
MendezSebastianP Feb 23, 2026
f81a1eb
fixing minor but various visual effects, revert theme: we went back t…
MendezSebastianP Feb 26, 2026
e830d16
fixing UI
MendezSebastianP Mar 2, 2026
fa8a354
refactor(models): extract summary and info logic to dedicated module
MendezSebastianP Mar 2, 2026
e01a01a
fixing bold titles and duration: removed from summary and we added mo…
MendezSebastianP Mar 2, 2026
e1758b4
showing properly the new methods in the examples
MendezSebastianP Mar 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ build:
- poetry config virtualenvs.create false
- . "$READTHEDOCS_VIRTUALENV_PATH/bin/activate" && poetry install --with docs
- pip freeze
post_install:
# RTD auto-upgrades sphinx (breaks myst-parser <9) and setuptools
# (82+ removes pkg_resources, breaking pybtex). Re-pin to safe versions.
- pip install "sphinx<9" "setuptools<82"

sphinx:
configuration: docs/conf.py
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ clean.doc:
@$(RM) -rf docs/auto_examples/
@$(RM) -rf docs/sg_execution_times.rst

.PHONY: doc-quick
doc-quick: install.doc
@$(SPHINX) -b html docs/ docs/_build/html

.PHONY: clean.py
clean.py:
@find . -name __pycache__ -exec $(RM) -r {} +
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,10 @@ pre-commit install
### Examples & Tutorials

The `examples` folder contains a starting point if you want to launch your first scripts and notebook with the Leaspy package.
<<<<<<< HEAD

=======
>>>>>>> upstream/v2.1

## Description
Leaspy is a software package for the statistical analysis of **longitudinal data**, particularly **medical** data that comes in a form of **repeated observations** of patients at different time-points.
Expand Down
Binary file removed browser/static/favicon.png
Binary file not shown.
244 changes: 242 additions & 2 deletions docs/_static/custom.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,246 @@
.wy-nav-content {
max-width: 96% !important;
/* =============================================================================
Leaspy custom styles for PyData Sphinx Theme
CSS variables: https://pydata-sphinx-theme.readthedocs.io/en/stable/user_guide/styling.html
============================================================================= */

/* --- Viewcode: pastel blue highlights (hll lines + target blocks) --- */
html[data-theme="light"] {
--pst-color-target: rgba(80, 150, 220, 0.18);
}
html[data-theme="dark"] {
--pst-color-target: rgba(80, 150, 220, 0.15);
}
html[data-theme="light"] .highlight .hll {
background-color: rgba(80, 150, 220, 0.18) !important;
}
html[data-theme="dark"] .highlight .hll {
background-color: rgba(80, 150, 220, 0.15) !important;
}

/* =============================================================================
Sphinx-Gallery
============================================================================= */

/* Hide download note, timing, and download footer */
.sphx-glr-download-link-note,
.sphx-glr-timing,
.sphx-glr-footer {
display: none !important;
}

/* Gallery card thumbnails: text only, no images */
.sphx-glr-thumbcontainer .xref.std.std-ref {
display: none;
}
.sphx-glr-thumbcontainer img {
display: none !important;
}
.sphx-glr-thumbcontainer {
min-height: auto !important;
height: auto !important;
}

/* Input code blocks: green left border + grey/white outline */
div.highlight-Python,
div.highlight-python3,
div.highlight-python {
border: 1px solid;
border-left: 4px solid var(--pst-color-success);
border-radius: 6px;
overflow: hidden;
}
html[data-theme="light"] div.highlight-Python,
html[data-theme="light"] div.highlight-python3,
html[data-theme="light"] div.highlight-python {
border-color: #c0c0c0;
border-left-color: var(--pst-color-success);
}
html[data-theme="dark"] div.highlight-Python,
html[data-theme="dark"] div.highlight-python3,
html[data-theme="dark"] div.highlight-python {
border-color: #555;
border-left-color: var(--pst-color-success);
}

/* Output blocks: grey/white outline, no green bar, tinted background */
.sphx-glr-script-out div.highlight-none {
border: 1px solid;
border-radius: 6px;
overflow: hidden;
}
html[data-theme="light"] .sphx-glr-script-out div.highlight-none {
border-color: #989898;
}
html[data-theme="dark"] .sphx-glr-script-out div.highlight-none {
border-color: #555;
}
html[data-theme="light"] .sphx-glr-script-out .highlight,
html[data-theme="light"] .sphx-glr-script-out pre {
background: #e1e1e1 !important;
}
html[data-theme="dark"] .sphx-glr-script-out .highlight,
html[data-theme="dark"] .sphx-glr-script-out pre {
background: #272626 !important;
}
.sphx-glr-script-out pre {
color: var(--pst-color-text-base) !important;
font-size: 0.875em;
line-height: 1.5;
}

/* =============================================================================
Misc
============================================================================= */

/* Logo: white background patch for transparency on dark bg */
img[src*="leaspy_logo.png"] {
background-color: white;
padding: 5px;
border-radius: 4px;
}

/* Pandas DataFrame styling */
table.dataframe {
border: none !important;
border-collapse: collapse;
border-spacing: 0;
margin-bottom: 1em;
width: auto;
overflow-x: auto;
display: block;
}
table.dataframe thead {
border-bottom: 1px solid var(--pst-color-border);
vertical-align: bottom;
}
table.dataframe tr,
table.dataframe th,
table.dataframe td {
text-align: right;
vertical-align: middle;
padding: 0.5em;
line-height: normal;
white-space: normal;
max-width: none;
border: none;
color: var(--pst-color-text-base);
}
table.dataframe th {
font-weight: bold;
background: var(--pst-color-surface);
}
table.dataframe tbody tr:nth-child(odd) {
background: var(--pst-color-surface);
}
table.dataframe tbody tr:hover {
background: var(--pst-color-surface);
opacity: 0.85;
}

/* =============================================================================
API Reference Styling
============================================================================= */

/* 1. Class block separation */
dl.py.class {
margin-bottom: 4rem !important;
padding-bottom: 2rem;
border-bottom: 2px solid var(--pst-color-border);
}

/* 2. Method / Function separation */
dl.py.method,
dl.py.function {
margin-bottom: 2rem !important;
padding-bottom: 1rem;
border-bottom: 1px solid var(--pst-color-border);
}
dl.py.class > dd > dl.py.method:last-child {
border-bottom: none;
margin-bottom: 0 !important;
padding-bottom: 0;
}

/* 3. Signature headers */
dl.py.class > dt {
background-color: var(--pst-color-surface);
padding: 0.8rem;
border-radius: 4px;
margin-top: 1.5rem;
font-weight: bold;
border-left: 5px solid var(--pst-color-primary);
display: block;
text-indent: 0 !important;
margin-left: 0 !important;
width: 100%;
box-sizing: border-box;
}
dl.py.function > dt,
dl.py.method > dt {
background-color: var(--pst-color-surface);
padding: 0.6rem;
border-radius: 4px;
margin-top: 1.0rem;
font-weight: bold;
border-left: 3px solid var(--pst-color-text-base);
display: block;
text-indent: 0 !important;
margin-left: 0 !important;
width: 100%;
box-sizing: border-box;
}

/* 4. Body indentation with vertical lines */
dl.py.class > dd {
margin-left: 0 !important;
padding-left: 1.5rem;
border-left: 4px solid var(--pst-color-primary);
}
dl.py.method > dd,
dl.py.function > dd {
margin-left: 0 !important;
padding-left: 1.5rem;
border-left: 2px solid var(--pst-color-text-base);
}

/* 5. Parameters / Returns / Attributes field lists */
dl.field-list > dt {
font-weight: bold;
color: var(--pst-color-text-base);
margin-top: 1.0rem;
margin-bottom: 0.5rem;
padding: 0;
border: none;
background: none;
}
dl.field-list > dd {
margin-left: 0 !important;
padding-left: 1.0rem;
}
dl.field-list > dd > dl > dt {
background-color: transparent !important;
padding: 0 !important;
margin-top: 0 !important;
margin-bottom: 0 !important;
font-weight: bold;
border: none !important;
color: var(--pst-color-text-base);
font-family: var(--pst-font-family-monospace);
line-height: 1.2;
}
dl.field-list > dd > dl > dt::before {
content: "•";
color: var(--pst-color-text-muted);
margin-right: 0.5rem;
font-weight: normal;
}
dl.field-list > dd > dl > dd {
margin-top: 0 !important;
margin-bottom: 0.1rem !important;
margin-left: 1.0rem !important;
}
dl.field-list > dd > dl > dd > p {
margin-top: 0 !important;
margin-bottom: 0 !important;
line-height: 1.3;
}
3 changes: 3 additions & 0 deletions docs/_static/custom.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,8 @@ document.addEventListener("DOMContentLoaded", function() {
// Change cursor to pointer
el.style.cursor = 'pointer';
}

// Remove the tooltip attribute to prevent the description from popping up
el.removeAttribute('tooltip');
});
});
Binary file added docs/_static/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 22 additions & 0 deletions docs/_templates/navbar-nav.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{# Navbar navigation links.
On toctree-rooted pages, generate_header_nav_html produces the links.
On orphan pages (e.g. viewcode _modules/), it returns empty — fall back to
a hardcoded list so navigation is always visible.
#}
<nav>
<ul class="bd-navbar-elements navbar-nav">
{% set nav_html = generate_header_nav_html(
n_links_before_dropdown=theme_header_links_before_dropdown,
dropdown_text=theme_header_dropdown_text
) %}
{{ nav_html }}
{% if not nav_html.strip() %}
<li class="nav-item"><a class="nav-link nav-internal" href="{{ pathto('install') }}">Installation</a></li>
<li class="nav-item"><a class="nav-link nav-internal" href="{{ pathto('auto_examples/index') }}">Examples gallery</a></li>
<li class="nav-item"><a class="nav-link nav-internal" href="{{ pathto('user_guide') }}">User guide</a></li>
<li class="nav-item"><a class="nav-link nav-internal" href="{{ pathto('references') }}">References</a></li>
<li class="nav-item"><a class="nav-link nav-internal" href="{{ pathto('changelog') }}">Changelog</a></li>
<li class="nav-item"><a class="nav-link nav-internal" href="{{ pathto('reference/api/index') }}">API Reference</a></li>
{% endif %}
</ul>
</nav>
Loading