Skip to content

Preserve complex magnitudes and current weights in the L1 dual proximal - #277

Open
antonsoo wants to merge 1 commit into
PyLops:devfrom
antonsoo:fix/l1-dual-magnitude
Open

antonsoo wants to merge 1 commit into
PyLops:devfrom
antonsoo:fix/l1-dual-magnitude

Conversation

@antonsoo

Copy link
Copy Markdown

L1.proxdual uses a real box projection for complex inputs. For example:

import numpy as np
from pyproximal import L1

print(L1(sigma=1).proxdual(np.array([2j, 3 + 4j]), 0.5))

Dev returns [0.+2.j, 1.+0.j]. The first value exceeds the dual magnitude bound, and the second loses its phase. The radial projection is [0.+1.j, 0.6+0.8j].

Project complex inputs onto magnitude disks, preserving phase. Refresh the real box bounds from the current weight as well: after a primal call advances a callable weight, the dual proximal currently keeps using its initial bounds. Zero weights and shifted inputs are handled without dividing by zero.

Added regressions for complex/weighted/shifted inputs, Moreau's identity, and callable weights, plus a documented complex example. In 48 native primal-dual runs on recorded audio (CPU/CUDA), all solutions now match an independent scalar shrinkage calculation within 6.7e-16; 16 were previously wrong. All 24 real-input controls remain byte-identical. This verifies the requested optimization problem, without making an audio-quality claim.

The full suite passes (286 tests), as do make lint, make typeannot, and a documentation build with gallery execution disabled, using the project's locked Python 3.11 dependencies. The example was also run directly.

AI assistance: OpenAI Codex was used to investigate, implement and validate this fix and draft this PR.

@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 complexity · 0 duplication

Metric Results
Complexity 0
Duplication 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant