From 15d6163c9749f1090376fdb6ac18cfeb9ca46f18 Mon Sep 17 00:00:00 2001 From: Ryan Levy Date: Thu, 25 Apr 2024 15:29:45 -0400 Subject: [PATCH] Initial zeroing out operator --- src/ITensorNumericalAnalysis.jl | 3 ++- src/elementary_operators.jl | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/ITensorNumericalAnalysis.jl b/src/ITensorNumericalAnalysis.jl index 850bc81..e6dd1eb 100644 --- a/src/ITensorNumericalAnalysis.jl +++ b/src/ITensorNumericalAnalysis.jl @@ -44,7 +44,8 @@ export const_itensornetwork, fourth_derivative_operator, identity_operator, delta_x, - delta_xyz + delta_xyz, + zero_point_op export const_itn, poly_itn, cosh_itn, sinh_itn, tanh_itn, exp_itn, sin_itn, cos_itn, rand_itn export calculate_fx, calculate_fxyz diff --git a/src/elementary_operators.jl b/src/elementary_operators.jl index aac4d37..2aa4f18 100644 --- a/src/elementary_operators.jl +++ b/src/elementary_operators.jl @@ -191,6 +191,27 @@ function identity_operator(s::IndsNetworkMap; kwargs...) return ITensorNetwork(Op("I"), operator_inds) end +" Create an operator which is 0 for points in xs " +function zero_point_op(s::IndsNetworkMap, xs::Vector, dimension::Int; truncate_kwargs...) + ttn_op = OpSum() + # build I- ∑_p ∏(bit string p) + for p in xs + ind_to_ind_value_map = calculate_ind_values(s, p, dimension) + string_site = [] + for v in dimension_vertices(s, dimension) + op = ind_to_ind_value_map[only(s[v])] == 1 ? "Dup" : "Ddn" + push!(string_site, (op, v)) + end + add!(ttn_op, -1.0, (string_site...)...) + end + add!(ttn_op, 1.0, "I", first(dimension_vertices(s, dimension))) + return ttn(ttn_op, indsnetwork(s); algorithm="svd", truncate_kwargs...) +end + +function zero_point_op(s::IndsNetworkMap, x::Number, dimension::Int; truncate_kwargs...) + return zero_point_op(s, [x], dimension; truncate_kwargs...) +end + function operator(fx::ITensorNetworkFunction) fx = copy(fx) operator = itensornetwork(fx)