Workshop - 0.75.1
π Highlights
- Patch release with a minor bug fix
π Fixes
- Fixed a minor issue to improve overall stability and reliability.
Product updates and releases
Content type normalization
SDK enhancements
Platform maintenance
PauliTerm and PauliSum to speed up operations involving pauli strings.
PauliTerm represents a Pauli string . They can be scaled, multiplied in and out of place with eachother, and can check if they commute.PauliSum represents a sum of PauliTerms. The sum can be truncated by the weight of the strings or by the norm of their coefficient. Explicit commutators between a single Pauli string or a sum of them as a PauliSum can be computed. The sums can also be conjugated by Pauli rotations where and Q is a Pauli string.convert_to_paulisum and convert_to_operatorsum functions.Diagram exports
Runtime updates
Theme-preserving PDF exports
print-theme=preserve on rendered figure, Quill, and CeTZ code blocks to keep the same appearance seen in the preview.Example:
```cetz {print-theme=preserve}
...
Colored callout blocks
Supported colors:
Example:
:::color{color="yellow"}
This content appears in a yellow highlighted block.
- Lists work
- **Formatting** works
- `inline code` works
:::
:::color{color="pink"}
Use pink for standout notes or examples.
:::
Platform readiness
Kai reliability
File history
Version-aware jobs
Historical file versions
Job file version pinning
Execution file tracking
Manual job scheduling
Personal agent onboarding
Markdown preview
View maximization
Single-use agents (limited access)
Markdown PDF export
Expanded Kai testing capabilities
Language Server integration
AI-assisted development
Inline test execution
Kai conversation history
EigsOptions, EigsStatus and the shared EigsBase binding.EigsOptions as a first-class Aleph type.get_options() and get_status() accessors through a shared EigsBase binding.krylov_dimension = 0 as "use the solver default" while still rejecting negative values.operator_function(...) now defaults to an implicit Krylov dimension based on the input operator dimension when no explicit krylov_dimension is provided.to_throw_message expectations so they correctly match messages from Aleph-thrown exceptions such as RuntimeError.to_throw_message expectations now report the actual thrown message.test_section declarations.EigsStatus.status now returns a readable string such as "successful" instead of the previous enum-style helper surface.EigsBase type.EigsBase now exposes grouped EigsOptions and EigsStatus objects instead of many per-field getters and setters.EigsStatus.status.EigsBase<...> field-style accessors, migrate to get_options() and get_status() and inspect the returned EigsOptions and EigsStatus objects.Runtime update
Platform readiness
Performance
UI updates
Performance & reliability
Markdown Preview
UI polish
View restoration
Kai test framework support
Runtime upgrade
π Tutorials for the new Aleph test framework are coming soon, along with upcoming Kai integration and support.
parameters() accessor, you can now ask for common payload kinds explicitly, which makes scripts clearer and gives documentation and LSP more useful return types.var angles = RotEuler(0.1, 0.2, 0.3, 0).parameters(as_list)var dense = operator_dense(matrix([[0, 1], [1, 0]], as_real), [0]).parameters(as_matrix | as_real)var word = pauli_string("XYZ", [0, 2, 4]).parameters(as_string)operator_function's options now include mode, which can be set to 0 (default) or 1 for Hermitian operators. 0 is usually more efficient, because multi-threaded, but 1 is more robust.
Added typed Aleph bindings for polynomial and ChebyshevSeries objects:
RealPolynomial and ComplexPolynomialRealChebyshevSeries and ComplexChebyshevSeriesAdded typed Aleph bindings for operator-valued polynomial and ChebyshevSeries constructions:
RealOperatorPolynomial and ComplexOperatorPolynomialRealOperatorChebyshevSeries and ComplexOperatorChebyshevSeriesPolynomial and ChebyshevSeries bindings now expose setter-style editing APIs:
set_coefficients(...) for both polynomials and ChebyshevSeries objectsset_interval(...) for ChebyshevSeries objectsPolynomial bindings now expose scalar division and unary plus consistently in Aleph.
Added typed parameter inspection for symbolic spin-half operators in Aleph.
You can still use parameters() for a generic dynamic result, but you can now request specific payload forms when you know what kind of operator you have:
parameters(as_list) for parameter lists such as rotation angles or permutation dataparameters(as_matrix | as_real) and parameters(as_matrix | as_complex) for dense operator payloadsparameters(as_sparsematrix | as_real) and parameters(as_sparsematrix | as_complex) for sparse operator payloadsparameters(as_string) for Pauli stringsQuadratic operators
TransferSum represents the sum .PairingSum represents the sum .QuadraticSum represents the sum .get_bdg_matrix and get_bdg_shift to extract the Bogoliubov-De Gennes matrix and constant energy shift respectively.New fermionic operators
CreateCreate(i,j) operator which represents the operator .DestroyDestroy(i,j) operator which represents the operator .if headers.throw(...), retain their source locations and stack frames.operator_function which would throw when the right-hand-side vector was an eigenstate of the input operator.test, test_section, hooks, parameterized cases, options, expectations, test discovery, and structured test results. This is the foundation for first-class Aleph testing; Workshop integration and full user documentation are still in progress.Polynomial([ ... ]) should now be written as RealPolynomial([ ... ]) or ComplexPolynomial([ ... ])ChebyshevSeries(...) should now be written as RealChebyshevSeries(...) or ComplexChebyshevSeries(...)RealOperatorChebyshevSeries(...) instead of the previous generic form.get_degree() -> degree()get_coeffs() -> get_coefficients()compose(...) instead of overloading evaluate(...)Qbit and Fbit's insert(position, value) method now accepts any integral value instead of just 0 and 1. integers are converted to bool internally, so 0 is treated as false and any non-zero value is treated as true.SpinHalfOperator. The specific operator kind is now visible via the payload returned by parameters().get_degree() or get_coeffs() to use degree() and get_coefficients().evaluate(...), switch those call sites to compose(...).Visual diff previews
Kai Aleph snippet execution
Larger shell panels
Kai UI refresh
Kai reliability
Documentation integration
Operational improvements
Kai context management
File system reliability
Copy message actions
Kai session restoration
Kai welcome experience
Kai UI polish
: could accidentally become hidden.Kai output awareness
βFix it with Kai...β
Automatic file editing (optional)
Diff status tracking
Kai diff validation
Improved external link behavior
Kai workspace memory
ArXiv paper search and reading
Kai system prompt optimization
Automatic Aleph code formatting
Python SDK enhancements
AlephLanguageServerClient now supports:
Smarter model selection
Improved reliability
Kai provider migration
SDK updates
Existing Kai conversations are now read-only
Aleph Language Server URL migration
Figure API: additional precision and data samplingsimplify_paulis function to be more performant and memory conscious. Now the input operator is modified in-place. Performs merging and pruning if desired..figure payload sizes.
Figure.sampling(...) controls.auto export warns when large series are sampled or when no automatic sampling strategy is available.sampling from plotting option docs to avoid confusion with figure-level sampling.SpinHalf) to Linear tensor networks, matrix product operator (MPO) and matrix product state (MPS).
SpinHalf operators can be converted to MPO with mpo(operator,length,[as_(complex|real)])SpinHalf operator can be multiplied into a MPO, operator >> mpoSpinHalf operator can be multiplied with MPS, inplace with operator >> mps and out of place with new_mps = operator*mps.CNOT operator so that the first argument is correctly the control qubit and the second is the target qubit (previously the second argument incorrectly acted as the control).XYZ and Floquet to align their phase signs with the implementation.type_name() and is_type() results for derived types stored through a base type.my_array[index] and map["key"] stay attached.mps and mpo factory functions have been renamed:
make_random_mps β random_mpsmake_random_mpo β random_mpoXX, YY, ZZ, CNOT, SWAP, UnitaryXYZ, Floquet, DualUnitary, etc.) no longer accept lists for site indices. Explicit scalar indices must be passed instead (e.g., XX(0, 1) instead of XX([0, 1])). This guarantees consistent behavior across all operators and prevents silent errors from unintended array inputs. Note that you may still use lists with the call method as follows: XX.call([0, 1]).Model, Term (term) has been changed to Interaction (interaction for the factory), as in model.add(interaction("J", [Z, Z], "nn")).Model, measure has been changed to add_observable, as in model.add_observable("name", interaction("coefficient", [Z, Z], "neighbourhood")).simplify_paulis the operation is now done in-place on the pauli product rather than returning an ComplexOperatorSum. The return type is the phase of the pauli product in the case where the input is an OperatorProduct whereas for any other type the output is set to 1.0.bessel_j, bessel_y, bessel_i, and bessel_k for computing Bessel functions of the first kind, second kind, modified Bessel functions of the first kind, and modified Bessel functions of the second kind, respectively.PairHopSum(tensor) represents a Hermitian sum of pair hopping terms: . It differs from CoulombSum in that the pair hopping terms do not include spin indices (which introduces an additional constraint).adjointed() member function to quantum Operators to dynamically compute the Hermitian conjugate.Operators support .is_hermitian(), .is_unitary(), and .is_real() dynamic introspection properties.PhaseShift(angle, i): Single-qubit phase gate operator.Model can now be initialized from .lattice_model files by passing the path to the file to the model constructor (e.g. model("path/to/model.lattice_model")).Model class now has a method to inspect labels that need to be registered model.unregistered_labels().set_coefficient method can now also take an aleph function that takes a coordinate and returns a complex number.PairRotation where sparse vectors were not correctly multiplied, causing incorrect results.CoefficientFunction, Model::set_coefficient now expects a complex number instead of a real number.UI responsiveness
Platform readiness
.aleph file into an Aleph editor to automatically insert an include statement..h5 / .hdf5) to insert an HDF5File(...) reference.π‘ Have ideas for other shortcuts or workflows? Weβd love to hear them β feel free to share your suggestions on our Discord!
LSP connectivity
Platform readiness
Kai workspace awareness
AST export (Python SDK)
Add language server support for formatting Aleph code files (beta).
Added logarithmic binning accumulators to statistics support. These can be used to estimate auto correlation times and can be constructor by calling accumulator("logarithmic"). Includes
parameters base and initial_depth to set the bin size of each level of the logarithmic accumulation and the initial depth of the levels.
MPS and MPO arithmetic operations now support integer, real and complex scalar types.
mps *= scalar and mps /= scalar, mpo *= scalar and mpo /= scalar.scalar * mps, scalar * mpo, mps * scalar and mpo* scalar.mps / scalar and mpo / scalar.+=, -=, *=, /=.Integrated aliased discrete distribution into Aleph which offers O(1) sampling speed as opposed to O(N) from a standard discrete distribution.
Can be built using random_distribution("aliased_discrete", ["probabilities" : [...]]).
Universal operator identity and zero factories: Identity() and Zero().
More fermionic operator transformations have been added:
anticommuted : anticommutes two fermionic operators and returns while respecting the canonical commutation relations of . Supported for Create, Destroy, and Number operators.site_canonicalized : orders a a fermionic operator into site canonical order with .canonicalize : orders a site-canonical product into complete canonical order .Added a size() method to OperatorProducts to enable easier for looping over terms.
Aleph now uses the Xoshiro256 algorithm as the default random number generator as opposed to Mersenne Twister. Xoshiro offers generally superior performance in terms of both time and space requirements.ID and FermiId in favor of the unified Identity() operator factory. Use Identity() for universal identity operators across all operator types.AlephLanguageServerClient to the Python SDK.sse_order to determine the order from a given SSE configuration.fermionic_site_reorder(operator): Reorders creation and annihilation operators by site while tracking phase changes from anticommutation relations.converted_to_create_destroy(operator): Converts named fermionic operators to their creation/annihilation form. Handles multi-site interactions like density-density (), hopping (), and pair operators ().simplified_create_destroy(operator): Simplifies operator products by reordering and removing invalid terms (e.g., and ).fused_into_number(operator): Fuses creation-annihilation pairs into number operators ().reduced_number_power(operator): Reduces powers of number operators to at most 1 ( for fermionic systems).Release description not available.
"finishReason" error for certain prompts.Editable figures
Format Document action
Alt/Opt + Shift + FEnhanced Markdown navigation
File renaming UX
Markdown editing upgrades
NumberNumber(i, j): Two-site density-density interaction .TransferNumber(i, j, k): interaction.HopNumber(i, j, k): interaction.NumberSum(sites): Total occupancy on a set of sites .NearestNumberSum(sites): Nearest-neighbor density interaction .NextNearestNumberSum(sites): Next-nearest-neighbor density interaction .PairTransfer(i, j, k, l): Directed pair transfer operator .PairHop(i, j, k, l): Pair hopping operator .PhaseHop(angle, i, j): Complex phase-hop operator .NumberPhase(angle, i): Site-specific phase operator .NumberNumberPhase(angle, i, j): Two-site phase operator .ModeRotation(angle, i, j): Givens rotation operator .PairRotation(angle, i, j): Bogoliubov rotation operator .NumberPotential(coefficients [, sites]): Efficient representation of weighted density sums .CoulombSum(tensor): General Coulomb interaction on interleaved spin-orbitals.FourBody, DoubleExcitation, NumberN, NumberNumberNN, NumberNumberNNN) for backward compatibility.get_arg(name, type[, default]), enabling typed inputs to be provided when launching executions or scheduling jobs.sse_specific_heat(order).complex("2 + 1i") and "2 + 1i".complex() now work.${ab.first}), avoiding invalid and overlapping semantic tokens in editors.2.0 * X(0) + 3.0i * Y(1) is now a valid expression.0. This affects conversions like real("abc") and integer("abc"). Loss-of-precision conversions still behave as before, e.g. integer("5.3") -> 5.Transient error handling
Platform readiness
Figure.visual_map(...) options in the Plotting module.visual_map when none specified when a figure has a heatmap..compress to control the growth for MPS..compress to control the growth for MPS..open_boundary() to open the boundary condition, .periodic_boundary() for periodic boundary condition..set_boundary_like(mps | mpo) to set the boundary condition like another TN.string(...) call could mark the start of a literal as a function.${...} interpolation spans.runtimeId is now optional when creating executions and jobsAPI & SDK enhancements
Simplified execution & job creation
runtimeId is now optional when creating executions or jobs.runtimeId unless a specific runtime version is required.Reload Tab
Clickable stack traces
Figure raw editing enhancements
Improved dragβnβdrop
Expanded context menus
Execution signal display
HDF5File support in Data Files to allow reading and updating platform-stored files, in addition to writing new files.HDF5File now supports reading/writing HDF5 files up to version 2.0 and includes compression options.HDF5File supports many Aleph types, including lists, arrays, and tensors.TextFile for reading/writing files as strings.operator_function API has changed to support both Hermitian and non-Hermitian operators; it now accepts an option map similar to that of iterative_eigensolver. See the New Features section for details.HDF5File types and functions have been substantially updated and may break code written prior to this release; this binding is expected to be stable moving forward.Scrollable Job Details
Figure rendering in Markdown (JSON)
Docusaurus-style admonitions
Light theme export for figures
matrix_element(bra,operator,ket) to compute the matrix element of an operator.expval(operator,ket) to compute the expected value of the operator.accumulator("no_binning")
and accumulator("binning"). The bin size can be set via accumulator("binning" ["bin_size" : 1024 ]).FourBody symbolic fermionic operator: . An operator can be created via
FourBody(i,j,k,l) where i,j,k,l are the sites where the operator acts.DoubleExcitation fermionic operator: . An operator can be created via
DoubleExcitation(i,j,k,l) where i,j,k,l are the sites where the operator acts.array and matrix factories now accept array and matrix objects together with a type tag. For example: array(my_matrix, as_complex) will create a complex array from my_matrix even if it is of real type.mps.compress(tol) to compress a MPS to specified error tolerance.operator_function now supports both Hermitian and non-Hermitian matrices and operators. The appropriate Krylov method (Lanczos or Arnoldi) is automatically selected based on the input. The API can be summarized as:
operator_function(H, dim, fun(real){real}, ["is_real":true]) for real-valued functions and Hermitian operators. Note that the ["is_real":true] option is required to indicate that the function is real-valued.operator_function(H, dim, fun(complex){complex}) for other Hermitian operators.operator_function(H, dim, fun(complex, integer){complex}) for non-Hermitian operators. The integer argument stands for the order of the derivative of the function, which is required for non-Hermitian operators.Hmat instead of an operator H and a dimension dim.["krylov_dimension": 32].PhaseHop(angle,i,j) factory function has been added to create fermionic hopping operators with an associated phase factor: .Adds internal support for handling sparse matrix operations with free fermion objects.
Real arrays and matrices are not implicitly convertible to complex arrays and matrices anymore. An explicit conversion is now required using as_complex.
Cmake presets to help manage compilation with IDE/VScode.
VScode devcontainer mount the user's .ssh for syncing with gitlab.
$HOME/.sshoperator_function API has changed to support both Hermitian and non-Hermitian operators; it now accepts an option map similar to that of iterative_eigensolver. See the New Features section for details.Figure math rendering
Figure layout tuning
matrix_element(bra,operator,ket) to compute the matrix element of an operator.expval(operator,ket) to compute the expected value of the operator.accumulator("no_binning")
and accumulator("binning"). The bin size can be set via accumulator("binning" ["bin_size" : 1024 ]).FourBody symbolic fermionic operator: . An operator can be created via
FourBody(i,j,k,l) where i,j,k,l are the sites where the operator acts.Job scheduling
Run now
Unified job refresh
Improved job metadata
Clear agent separation
Smarter file creation from Markdown
Accurate cloud agent system info
Better cloud job error reporting
matrix_element(bra,operator,ket) to compute the matrix element of an operator.expval(operator,ket) to compute the expected value of the operator.accumulator("no_binning")
and accumulator("binning"). The bin size can be set via accumulator("binning" ["bin_size" : 1024 ]).`
New Welcome screen
Figure editing (limited preview)
File context menu actions
Security hardening
Stability improvements
Separate agent selection flows
Agent-aware UI
Smarter agent menus
Tooltip & UI polish
Interactive (Shared) agent
Cloud agent tooltip
As we close out 2025, this release focuses on polish, usability, and smoother day-to-day workflows. Thanks for building with Kothar β and see you in 2026 π
Markdown word wrap (default)
Enhanced Markdown preview
.figure outputs directly inside Markdown previews.Diff syntax support
π End of 2025 note
Thanks for being part of the Kothar journey this year. This final Workshop release of 2025 focuses on polish, stability, and better everyday ergonomics β setting the stage for an even more powerful 2026.
Shorter AI chat summaries
Chat summaries are now more concise and focused, making conversations easier to scan and review.
Stricter unified diff generation
π
Happy holidays from the Kothar team!
Whether youβre writing code or running jobs β we hope this release makes your end-of-year workflows smoother.
Execution metrics visualization
Automatic Aleph editor context in Kai
Figure support in Workshop
AI Assistant naming
AI model selection (internal users only)
Internal users can now choose which AI model to use when starting a chat.
Markdown support in the editor
Enhanced Markdown capabilities
Reasoning tokens in AI Chats
AI Chats now surface reasoning tokens when available, improving transparency during model interactions.
oblique, rectangular and honeycomb geometries which were throwing errors for incorrectly defining the basis vectors.async now runs on a shared worker pool, and await_all, parallel_map, plus sleep round out the toolkit for structured concurrency.Model class has been revamped. Now as opposed to adding general functions via add_term(XX, neighbourhood)
we have add(term([X, X], neighbourhood)). The add method is also more general,
allowing for add(neighbourhood_rule(...)) and add(coefficient(...)).Model's add_observable method has been replaced with measure which takes a name and a term, (e.g.my_model.measure("name", Term(...)).Term and Coefficient have been introduced as helper types when defining model, with associated factories term and coefficient.NumberNumber which is a fused version of Number * Number, Number(List) a fused sum of number operators, NumberNumberNN a fused sum of NumberNumber operators for nearest-neighbours, and NumberNumberNNN a fused sum of NumberNumber operators for next nearest neighbours.await_all(futures) waits for each Future in a list, consuming the inputs and returning the resolved values in submission order.parallel_map(values, mapper) applies the mapper concurrently across the shared async pool, keeping results aligned with the original list.sleep(seconds) pauses execution for a positive duration, throwing if a negative value is supplied.eigensolver factory that picks the appropriate eigenvalue solver based on the properties of the input matrices, solves the eigenvalue problem and returns an object representing the solution. It currently supports standard and generalized eigenvalue problems for dense matrices (real, complex, Hermitian or not). The returned object has methods eigenvalues and eigenvectors to retrieve the eponymous quantities.svd factory that computes the SVD decomposition of any dense matrix. It supports two algorithms: Jacobi and BDC. The default is Jacobi, which is more accurate for small and medium sized matrices, while BDC is faster for large matrices. The returned object has methods singular_values, matrix_u, and matrix_v to retrieve the eponymous quantities.cholesky factory that computes the Cholesky decomposition of symmetric (Hermitian) matrices. It supports two algorithms: standard (LLT) and robust (LDLT). The default is standard, which requires the matrix to be positive definite. The robust algorithm (LDLT) can handle positive or negative semidefinite matrices. The returned object has methods matrix_l and matrix_u to retrieve the factors.lu factory that computes the LU decomposition of any dense matrix. It supports two pivoting strategies: partial and full. The default is partial pivoting. The returned object has methods matrix_l, matrix_u, and matrix_p (and matrix_q for full pivoting) to retrieve the factors.qr factory that computes the QR decomposition of any dense matrix. It supports three pivoting strategies: none, partial (column pivoting), and full. The default is no pivoting. The returned object has methods matrix_q, matrix_r, and matrix_p (if pivoting is used) to retrieve the factors.fft and ifft functionsmpo(model) function to convert lattice models to finite MPO representations. This enables direct MPO construction from a Model definitions for use in DMRG and tensor network algorithms.observables_to_mpo(model) function to convert observables defined in a Model to MPO form, returning a map of observable names to their MPO representations.resize, insert, insert_at, replicate, replicated, extend and extended now clone inserted elements to match existing push_back, assignment, and constructor behavior.List::push_back in the API reference.make_random_mps and make_random_mpo, they were wrongly classified as functions and the first argument was missing from the documentations.BoundaryCondition types.resize, insert, insert_at, replicate, replicated, extend or extended mutating the original values will behave differently.Job management enhancements
Job context menu
A new context menu in the jobs list provides quick access to common job actions.
AI Chat streaming & cancellation support
The Workshop AI Chat now supports real-time streaming responses and graceful cancellation, matching the updated AI API.
Enhanced AI Chat behavior
Improved interaction flow, responsiveness, and handling of intermediate states during AI generation.
Improved job duration display
Job durations are now normalized for longer-running jobs, making timelines easier to read and compare.
Streaming AI responses
AI-generated content can now be streamed as it is produced, enabling more responsive user experiences.
Client + server tool support
The AI API now supports client-side tools in addition to server-side tools, unlocking more flexible AI workflows.
Job metadata API
New endpoints allow updating job names and notes
Backend feature flags
Feature flag support added in the platform (in addition to the Workshop) to progressively enable or disable features without redeploying.
AI API aligned with OpenAIβs canonical format
The AI Chats API now uses a messages/roles structure consistent with the OpenAI API, simplifying integrations and future compatibility.
Improved editor context handling
Editor context is now explicitly passed and correctly processed by the model.
Usage tracking per conversation
AsyncDisposable callbacks).β οΈ This will break the existing AI Chat feature in production until the Workshop is updated.
NumberNumber which is a fused version of Number * Number.boundary_condition variable.boundary_condition.open, boundary_condition.periodic etc... as opposed to the old syntax, open_bc, periodic_bc etc...β Internal / Technical Changes
>>> [1,2] //-> Interval(lower=1.000000, upper=2.000000).fit function no longer accepts two-element lists as interval specifications. Users must now explicitly use the interval factory to define intervals.
chebyshev_series_delta(10, [a, b]), use chebyshev_series_delta(10, interval(a, b)).A clearer and more capable AI experience behind the scenes, with improved model flexibility and stronger Aleph code support.
Model class which can be used to represent arbitrary lattice Hamiltonians and construct associated observables.chebyshev_series_delta and operator_chebyshev_series can be used together with iterative_eigensolver to compute interior eigenvalues and eigenvectors of operators. This is particularly useful for large-scale problems where traditional matrix representations are infeasible.matrix factory (which returns the matrix representation of an operator) now supports the as_sparsematrix type tag as an optional argument. This allows users to directly obtain a sparse matrix representation of an operator. Note that the type tag can be combined with other type tags such as as_real to specify the desired scalar type of the resulting sparse matrix (i.e. as_real | as_sparsematrix).Model class can be used to represent a Hamiltonian and observables in terms of lattice coordinates.operator_sum that takes an instance of Model and returns either a complex (default) or real OperatorSum depending on the type specifier (as_complex or as_real)chebyshev_series_delta function creates a Chebyshev series that approximate the delta function over a specified interval. This is useful for spectral filtering and other applications requiring delta function approximations.operator_chebyshev_series factory has been added to create operators based on Chebyshev series. This allows for efficient representation and manipulation of operators using Chebyshev polynomial expansions.count methods to Fbit that help in counting the number of occupied sites on subsets and linear cuts of the system.as_sparsematrix flag. One can also convert arrays and dense matrices directly to sparse matrices with the matrix factory. One can also create sparse matrices is by initializing them with the zeros, identity, uninitialized factory. Yet another way is to use insert which accepts three arguments: an array of row indices, an array of column indices, and an array of values. Lastly, one can of course use [] to extract elements or assign to them.set_tensor_threads(thread_number) can be invoked to control the thread count for tensor operations.extended for lists, an out-of-place extension of a list by an input list.as_real variants for TimerDuration conversion methods: hours, microseconds, milliseconds, minutes, seconds to retrieve more precise values when needed.OperatorSum and scalars with mixed coefficient types, enabling operations; real * ComplexOperatorSum and complex * RealOperatorSum.time, benchmark_for and benchmark_for are now marked standalone, bringing the documentation to the Module Functions section.eval method has been renamed to evaluate for improved clarity and consistency.evaluate method returns objects of the same type as the input argument. For example, if the input is a list, the output will also be a list.transpose, flatten, and squeeze.random_tensor, filled_tensor, zero_tensor, delta_tensor, uninitialized_tensor..conjugate().transpose(tensor, permutation): permutes tensor dimensions with validation.flatten(tensor): reshapes tensor into a order 1 tensor.squeeze(tensor): removes all dimensions of size 1 from a tensor.tensor + scalar, scalar + tensor, tensor - scalar, scalar - tensor for element-wise arithmetic.random_real_tensor β random_tensor, filled_complex_tensor β filled_tensor, etc...
as_real or as_complex (e.g., random_tensor([2, 3], as_complex)).as_real for real-valued tensors.βοΈ Internal / Technical Changes
random function can be used to generate random numbers on the fly.random_distribution factory can produce user specified distributions.random_generator allows users to seed their own random number generators.set_random and random_like can now take a Distribution specified by the user.std::exception escaping AST evaluation.EvalError..conjugate() and conjugated() methods for complex conjugation. Leave the tensors unchanged in the real case.π Highlights
This release focuses on UI polish and usability. Tree navigation is now more reliable in tight layouts, visual consistency is improved when renaming items, and several cross-platform rendering quirksβespecially on Linuxβhave been addressed.
βΈ»
π Improvements
βΈ»
π Fixes
βοΈ Internal / Technical Changes
βοΈ Internal / Technical Changes
π§© Fix
Commented include statements in Aleph scripts are no longer parsed as dependencies by the Agent. Example:
// include "dependency.aleph"
Previously, this line could incorrectly trigger dependency resolution and fail the execution. It is now correctly ignored.
π§ Impact
This fix prevents incorrect dependency lookups and ensures consistent execution graphs when using commented or disabled includes.
Weβve added a simple, built-in way for anyone to report bugs β right from inside the app.
β¨ New
π Improvements