Skip to main content

softjax

Soft differentiable drop-in replacements for non-differentiable JAX functions (abs, relu, sort, argmax, comparison, logical operators, etc.) with adjustable softening strength.

소스 정보

저장소
lamm-mit/scienceclaw
최근 소스 활동
2026년 3월 25일 06:46
감지된 SKILL.md 언어
영어
스타
250
포크
49

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
3 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
softjax
description
Soft differentiable drop-in replacements for non-differentiable JAX functions (abs, relu, sort, argmax, comparison, logical operators, etc.) with adjustable softening strength.
source_type
github
auth_required
false
repository_url
https://github.com/a-paulus/softjax
reference_url
https://arxiv.org/abs/2603.08824
## softjax Soft differentiable drop-in replacements for non-differentiable JAX functions (abs, relu, sort, argmax, comparison, logical operators, etc.) with adjustable softening strength. ### Code repository <https://github.com/a-paulus/softjax> **Use this as the implementation source:** clone the repo and follow its README for install, dependencies, and how to run code or experiments. The generated client prints JSON with a suggested ``git clone`` command. ### Paper (arXiv — explanation) <https://arxiv.org/abs/2603.08824> This is the **paper** reference. The client can optionally fetch live Atom metadata (title, abstract) for agents; it does **not** run training or upstream research code by itself. ### What “running” this client does The `*_client.py` script prints **JSON** that combines a **GitHub repository** (clone URL + suggested ``git clone``) with **optional paper context** from arXiv (live Atom metadata when **reference_url** is arXiv). Run the real code by cloning the repo and following its README — the skill is your agent-facing entrypoint, not a substitute for the repo’s install steps. To call a **REST API** instead, set ``BASE_URL`` in `scripts/softjax_client.py` or wrap the upstream CLI with ``subprocess`` after clone. ### How to run the method (from the source) Extracted for **operators and agents**. Confirm against the upstream repository or paper before relying on it in production. ## Prerequisites - Python 3.11 or higher - JAX library installed ## Installation ```bash pip install softjax ``` ## How to run SoftJAX is a library providing drop-in soft replacements for non-differentiable JAX functions. Use it in Python scripts by importing and calling soft operators: ```python import jax.numpy as jnp import softjax as sj # Example: soft ReLU x = jnp.array([-0.2, -1.0, 0.3, 1.0]) print(sj.relu(x)) # soft mode by default print(sj.relu(x, mode="hard")) # hard (non-differentiable) mode ``` ### Elementwise operators ```python sj.abs(x) sj.relu(x) sj.clip(x, min_val, max_val) sj.sign(x) sj.round(x) sj.heaviside(x) ``` ### Array-valued operators ```python sj.max(x, method="neuralsort", softness=0.1) sj.min(x) sj.sort(x, method="neuralsort", softness=0.1) # supports multiple methods sj.quantile(x, q=0.5) sj.median(x) sj.top_k(x, k=3) sj.rank(x, descending=False) ``` ### Operators returning indices ```python sj.argmax(x) # returns soft distribution over indices sj.argmin(x) sj.argsort(x) sj.top_k(x, k=3) # returns (values, soft_indices) ``` ### Comparison operators ```python sj.greater(x, y) sj.equal(x, y) sj.less(x, y) sj.isclose(x, y) ``` ### Logical operators ```python sj.logical_and(a, b) sj.logical_or(a, b) sj.logical_not(a) sj.logical_xor(a, b) sj.all(a) sj.any(a) ``` ### Selection operators ```python sj.where(condition, x, y) ``` ### Straight-through estimators (hard forward, soft backward) ```python sj.relu_st(x) sj.sort_st(x) sj.top_k_st(x, k=3) sj.greater_st(x, y) ``` ### Autograd-safe operators (stable gradients at boundaries) ```python sj.sqrt(x) sj.arcsin(x) sj.arccos(x) sj.log(x) # safe at 0 sj.div(a, b) # safe at division by zero sj.norm(x) # safe at zero vector ``` ## Configuration Key parameters available across operators: - **`mode`**: Control softening behavior ('hard', 'soft', 'smooth', 'c0', 'c1', 'c2') - **`softness`**: Adjust approximation strength (float, higher = closer to hard function) - **`method`**: For sort-like operators, choose algorithm ('softsort', 'neuralsort', 'fast_soft_sort', 'smooth_sort', 'ot', 'sorting_network') ### Example with parameters ```python # Soft sort with custom softness result = sj.sort(x, method="fast_soft_sort", softness=2.0, mode="c1") # Soft argmax returning distribution soft_argmax = sj.argmax(x, mode="soft") # Straight-through sort (hard forward, soft backward for gradient) result = sj.sort_st(x, method="neuralsort", softness=0.1) ``` See documentation at https://a-paulus.github.io/softjax/ for full API details. *The same text lives in* ``scripts/USAGE.md`` *for tools that prefer reading files under* ``scripts/``*.* ### Parameters --mode (str) [optional, default=soft] Softening mode: 'hard' (non-differentiable), 'soft' (default, smooth approximation), 'smooth', 'c0', 'c1', 'c2' for different continuity guarantees. --softness (float) [optional, default=None] Strength of softening; controls smoothness and boundedness of soft function. Adjustable per operator and method. --method (str) [optional, default=neuralsort] Algorithm for soft operators like sort: 'softsort', 'neuralsort', 'fast_soft_sort', 'smooth_sort', 'ot', 'sorting_network'. --k (int) [optional, default=None] Number of top elements for top_k operations. --q (float) [optional, default=None] Quantile parameter (0–1) for quantile and argquantile operations. --descending (bool) [optional, default=True] Sort order for rank operation: True for descending, False for ascending. ### Usage ```bash python3 scripts/softjax_client.py sj.sort(x, method='neuralsort', softness=0.1, mode='soft') ``` ### Example Output ```json array([-0.8792, -0.1641, 0.2767, 0.8738]) ```
GitHub에서 보기