Skip to content

docs via ssh #751

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Mar 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
45 changes: 23 additions & 22 deletions .github/workflows/docs-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,18 +68,20 @@ jobs:
if: ${{ github.ref == 'refs/heads/main' }}
# any push to main goes to fastplotlib.org/ver/dev
run: echo "DOCS_VERSION_DIR=dev" >> "$GITHUB_ENV"

# upload docs via FTP
# upload docs via SCP
- name: Deploy docs
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
uses: appleboy/scp-action@v0.1.7
with:
server: ${{ secrets.DOCS_SERVER }}
host: ${{ secrets.DOCS_SERVER }}
username: ${{ secrets.DOCS_USERNAME }}
password: ${{ secrets.DOCS_PASSWORD }}
# built docs
local-dir: docs/build/html/
# output subdir based on the previous if statements
server-dir: ./ver/${{ env.DOCS_VERSION_DIR }}/
port: ${{ secrets.DOCS_PORT }}
key: ${{ secrets.DOCS_KEY }}
passphrase: ${{ secrets.DOCS_PASS }}
source: "docs/build/html/*"
# without strip_components it creates dirs docs/build/html within /ver on the server
strip_components: 3
target: /home/${{ secrets.DOCS_USERNAME }}/public_html/ver/${{ env.DOCS_VERSION_DIR }}/

# comment on PR to provide link to built docs
- name: Add PR link in comment
Expand All @@ -88,19 +90,18 @@ jobs:
with:
message: |
📚 Docs preview built and uploaded! https://www.fastplotlib.org/ver/${{ env.DOCS_VERSION_DIR }}

# also deploy to root if this is a new release
# i.e., fastplotlib.org/ points to docs for the latest release
- name: Deploy docs

# upload docs via SCP
- name: Deploy docs release
if: ${{ github.ref_type == 'tag' }}
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
uses: appleboy/scp-action@v0.1.7
with:
server: ${{ secrets.DOCS_SERVER }}
host: ${{ secrets.DOCS_SERVER }}
username: ${{ secrets.DOCS_USERNAME }}
password: ${{ secrets.DOCS_PASSWORD }}
log-level: verbose
timeout: 60000
local-dir: docs/build/html/
server-dir: ./ # deploy to the root dir
exclude: | # don't delete the /ver/ dir
**/ver/**
port: ${{ secrets.DOCS_PORT }}
key: ${{ secrets.DOCS_KEY }}
passphrase: ${{ secrets.DOCS_PASS }}
source: "docs/build/html/*"
# without strip_components it creates dirs docs/build/html within /ver on the server
strip_components: 3
target: /home/${{ secrets.DOCS_USERNAME }}/public_html/
114 changes: 6 additions & 108 deletions fastplotlib/graphics/_axes.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,108 +141,6 @@ def yz(self) -> Grid:
return self._yz


class Ruler(pygfx.Ruler):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.tick_text_mapper = None
self.font_size = 14

def _update_sub_objects(self, ticks, tick_auto_step):
"""Update the sub-objects to show the given ticks."""
assert isinstance(ticks, dict)

tick_size = 5
min_n_slots = 8 # todo: can be (much) higher when we use a single text object!

# Load config
start_pos = self._start_pos
end_pos = self._end_pos
start_value = self._start_value
end_value = self.end_value

# Derive some more variables
length = end_value - start_value
vec = end_pos - start_pos
if length:
vec /= length

# Get array to store positions
n_slots = self.points.geometry.positions.nitems
n_positions = len(ticks) + 2
if n_positions <= n_slots <= max(min_n_slots, 2 * n_positions):
# Re-use existing buffers
positions = self.points.geometry.positions.data
sizes = self.points.geometry.sizes.data
self.points.geometry.positions.update_range()
self.points.geometry.sizes.update_range()
else:
# Allocate new buffers
new_n_slots = max(min_n_slots, int(n_positions * 1.2))
positions = np.zeros((new_n_slots, 3), np.float32)
sizes = np.zeros((new_n_slots,), np.float32)
self.points.geometry.positions = pygfx.Buffer(positions)
self.points.geometry.sizes = pygfx.Buffer(sizes)
# Allocate text objects
while len(self._text_object_pool) < new_n_slots:
ob = pygfx.Text(
pygfx.TextGeometry("", screen_space=True, font_size=self.font_size),
pygfx.TextMaterial(aa=False),
)
self._text_object_pool.append(ob)
self._text_object_pool[new_n_slots:] = []
# Reset children
self.clear()
self.add(self._line, self._points, *self._text_object_pool)

def define_text(pos, text):
if self.tick_text_mapper is not None and text != "":
text = self.tick_text_mapper(text)

ob = self._text_object_pool[index]
ob.geometry.anchor = self._text_anchor
ob.geometry.anchor_offset = self._text_anchor_offset
ob.geometry.set_text(text)
ob.local.position = pos

# Apply start point
index = 0
positions[0] = start_pos
if self._ticks_at_end_points:
sizes[0] = tick_size
define_text(start_pos, f"{self._start_value:0.4g}")
else:
sizes[0] = 0
define_text(start_pos, f"")

# Collect ticks
index += 1
for value, text in ticks.items():
pos = start_pos + vec * (value - start_value)
positions[index] = pos
sizes[index] = tick_size
define_text(pos, text)
index += 1

# Handle end point, and nullify remaining slots
positions[index:] = end_pos
sizes[index:] = 0
for ob in self._text_object_pool[index:]:
ob.geometry.set_text("")

# Show last tick?
if self._ticks_at_end_points:
sizes[index] = tick_size
define_text(end_pos, f"{end_value:0.4g}")

# Hide the ticks close to the ends?
if self._ticks_at_end_points and ticks:
tick_values = list(ticks.keys())
if abs(tick_values[0] - start_value) < 0.5 * tick_auto_step:
self._text_object_pool[1].geometry.set_text("")
if abs(tick_values[-1] - end_value) < 0.5 * tick_auto_step:
self._text_object_pool[index - 1].geometry.set_text("")


class Axes:
def __init__(
self,
Expand Down Expand Up @@ -283,9 +181,9 @@ def __init__(
}

# create ruler for each dim
self._x = Ruler(**x_kwargs)
self._y = Ruler(**y_kwargs)
self._z = Ruler(**z_kwargs)
self._x = pygfx.Ruler(**x_kwargs)
self._y = pygfx.Ruler(**y_kwargs)
self._z = pygfx.Ruler(**z_kwargs)

self._offset = offset

Expand Down Expand Up @@ -400,17 +298,17 @@ def offset(self, value: np.ndarray):
self._offset = value

@property
def x(self) -> Ruler:
def x(self) -> pygfx.Ruler:
"""x axis ruler"""
return self._x

@property
def y(self) -> Ruler:
def y(self) -> pygfx.Ruler:
"""y axis ruler"""
return self._y

@property
def z(self) -> Ruler:
def z(self) -> pygfx.Ruler:
"""z axis ruler"""
return self._z

Expand Down
Loading
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy