-
Notifications
You must be signed in to change notification settings - Fork 16
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
Feature/skmeans #99
Feature/skmeans #99
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add the SKMeans client itself? I might be able to make some suggestions about duplication.
Also, removing the PCA stuff from this branch would be tidy, but not critical.
I'm removing James and Ted as reviewers for now for good old times nostalgia flavour |
Sorry added the client now. |
{ | ||
using namespace Eigen; | ||
MatrixXd points = _impl::asEigen<Matrix>(data).transpose(); | ||
MatrixXd embedding = (mMeans.matrix() * points).array() - alpha; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are we sure about baking in the encoding scheme from Coates and Ng here?
I guess the argument in favour is that it enables recreating their feature learning scheme with the fewest objects. The arguments against would be that it's not strictly part of skmeans, but was a separate step used by C&N specifically in the feature learning setting, and they do discuss alternatives.
Obviously having it here doesn't preclude using an alternative scheme, because alpha
can be set to 0. However, the other question is whether this encoder could be useful for other things if it were factored out, e.g. using NMF for feature learning?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The soft thresholding function is similar to neural network activation functions, so NNFuncs is where it would fit best, but I don't think these functions would deserve their own client, so in practice I would still see this as part of the SKMeans client. So it would not help with code duplication. An interesting idea (maybe for the future?) could be to have a feature learning client that could use different learning techniques and encodings. For the moment, maybe it can be introduced as an option for skmeans. We can also use an MLP as autoencoder for feature learning.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, let's roll with what we have and see how we get on. I like the idea of some future feature learning object that could make it easy to explore options and manage some of the complexity / fiddliness.
AudioIn, | ||
ControlOut, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be OfflineIn
OfflineOut
They are indeed almost identical. Looking through a diff I see three points of difference
(1) should go away in any case In the absence of those differences, getting rid of the duplication is trivial with a template, and still pretty easy even if (2) and (3) remain, pending a way of composing the parameter descriptors. |
I agree that the embedding could be decoupled, I think I had planned to do it, then probably forgot. However, following other cases such as MLP objects, this would be used in the client, so it would not spare the threshold parameter, I am not sure I would make separate objects for encodings. |
ok it seems we have not resolve the code conflicts here, so we'll work on this on the nightlies post beta5 (hopefully) going out tomorrow. |
MatrixXd points = _impl::asEigen<Matrix>(data).transpose(); | ||
MatrixXd embedding = (mMeans.matrix() * points).array() - alpha; | ||
embedding = (embedding.array() > 0).select(embedding, 0).transpose(); | ||
out = _impl::asFluid(embedding); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
out = _impl::asFluid(embedding); | |
out <<= _impl::asFluid(embedding); |
New copy assignment operator for FluidTensorView
src.row(0) = | ||
BufferAdaptor::ReadAccess(in.get()).samps(0, mAlgorithm.dims(), 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
src.row(0) = | |
BufferAdaptor::ReadAccess(in.get()).samps(0, mAlgorithm.dims(), 0); | |
src.row(0) <<= | |
BufferAdaptor::ReadAccess(in.get()).samps(0, mAlgorithm.dims(), 0); |
include/data/FluidJSON.hpp
Outdated
index rows = j.at("rows"); | ||
index cols = j.at("cols"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
index rows = j.at("rows"); | |
index cols = j.at("cols"); | |
index rows = j.at("rows").get<index>(); | |
index cols = j.at("cols").get<index>(); |
The implicit conversion in at()
is now not recommended by the JSON author, especially in from_json
https://nicedoc.io/nlohmann/json#implicit-conversions
point = | ||
BufferAdaptor::ReadAccess(data.get()).samps(0, mAlgorithm.dims(), 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
point = | |
BufferAdaptor::ReadAccess(data.get()).samps(0, mAlgorithm.dims(), 0); | |
point <<= | |
BufferAdaptor::ReadAccess(data.get()).samps(0, mAlgorithm.dims(), 0); |
point = BufferAdaptor::ReadAccess(get<kInputBuffer>().get()) | ||
.samps(0, dims, 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
point = BufferAdaptor::ReadAccess(get<kInputBuffer>().get()) | |
.samps(0, dims, 0); | |
point <<= BufferAdaptor::ReadAccess(get<kInputBuffer>().get()) | |
.samps(0, dims, 0); |
src.row(0) = | ||
BufferAdaptor::ReadAccess(in.get()).samps(0, mAlgorithm.dims(), 0); | ||
mAlgorithm.transform(src, dest, get<kThreshold>()); | ||
outBuf.allFrames()(Slice(0, 1), Slice(0, mAlgorithm.size())) = dest; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
outBuf.allFrames()(Slice(0, 1), Slice(0, mAlgorithm.size())) = dest; | |
outBuf.allFrames()(Slice(0, 1), Slice(0, mAlgorithm.size())) <<= dest; |
include/algorithms/public/KMeans.hpp
Outdated
@@ -118,7 +118,7 @@ class KMeans | |||
out = _impl::asFluid(D); | |||
} | |||
|
|||
private: | |||
protected: | |||
double distance(Eigen::ArrayXd v1, Eigen::ArrayXd v2) const |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
double distance(Eigen::ArrayXd v1, Eigen::ArrayXd v2) const | |
double distance(const Eigen::ArrayXd& v1, const Eigen::ArrayXd& v2) const |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've had a quick look over for anything new that might fight back when you revisit this. Hopefully GH's new batch suggestion thing has worked for this. Mostly it's making sure we catch the change in assignment operator for FluidTensorView
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As I was learning how it works, and trying to write the doc, we noticed a discrepancy of the interface between KMeans and SKMeans. Luckily we have a solution.
transform are not returning the angular distance to the cluster, but the encoded activation. That has for effect that it is not just distance and the reverse polarity (large is good) to the equivalent methods in KMeans. and it confuses poor little learners like me.
solution: we change the method names to encode in this case
I'm happy to do it, here and in SC and in all the doc in progress if @g-roma agrees that I touch the code.
This solution is also good because it allows 2 more things:
- we could add transform to SKMeans later that returns the angular distance like our KMeans (and I reckon the scikit learn implementation)
- we could add encode to classic KMeans to return the dot products
This is a very small change, I can action now and we are still in time for release in beta 7 on Tuesday.
I guess that since each algorithm does a different thing for transform I did not think you would expect these to the same or equievalent thing. In any case I am OK renaming transform to encode here. |
cool if you don't mind I'll do it now/Monday first thing, and merge to dev so we don't miss the deadline of Monday night for beta7 Tuesday. I need to do it everywhere in the doc in progress too. |
ok all interface changes done. if nobody yells within the next two hours, I'll merge it in. |
* Add pointwise inversion to PCA * batchsize was not capped down, leading to hilarious crashes (#63) * updating credits with the new team * Include SHAs for flucoma-core and current project in version string * Conform version string with SHAs to semantic versioning spec * add chroma feature to NoveltySlice * Toggle BLAS settings for compiling on APPLE (#67) * disable blas for compiling on macos * remove line according to O's suggestion * error in the client of (buf)noveltyslice since introducing chroma as feature * Enhance/versioning (#75) * Remove old header template * Add in TU template and declaration header * update CMake to new version scheme * Get SHA from top level source folder * ensure git is found * fix issue #23 - zeroing the output vector in the mTracker loop (#82) * fix issue #23 - zeroing the output vector in the mTracker loop * now really corrected thanks to @weefuzzy * Initial unit tests for `include/data` (#83) * initial FluidTensor tests * add assert death test to cmake * more assert death * fix compile tests * Working assertion tests, it seems * Add first FluidTensorView tests * tidy up cmake a bit * factor out EqualRange matcher to own header * Add FluidTensorSupport tests * rollback to Catch2 for compatability with approvaltests.cpp * add tests for FluidDataSet bubba's first approval test ✨ * test print for bigger range as well * tidy cmake * make building tests optional * remove spurious files from tracking * add workflow for CI * make workflow manually triggerable * correct workflow file extention * pleading and bargaining with github * getting event name right * FluidTensorSlice: fix terrible and aged typename mistake * workflow: try and cache whole build folder * wotkflow: unbreak yaml * workflow: disable fail-fast * Amend upper frequency limit of mel bands in NoveltySlice to 20kHz * [Enhance] FluCoMa-wide DataSets as a resource (#88) * treat wav files as binary * move audio files to resources folder * add datasets * add pre-trained neural networks * add flucoma corpus * move datasets to data * BufAudioTransport now has A-B based arguments * fix mistakenly fixed type signature in FluidSink * Tests for framing and overlap add bits * remove build folder caching as a bad job (failing forever once cache goes bad) * Test/sc ports/slicers (#91) * Working port of SC NoveltySlice tests * formatting and constifying * use generated path for test signal loading * update testsignals header and cmake * Add TestOnsetSegmention, update TestNoveltySeg for new resource loading * Add Onsets and update novelty in CMake * Add EnvelopeSeg tests and some missing headers * Add EnvelopeGate tests * Add TransientSlice tests * update location of audio files * add missing function to signals.cpp.in * Fix test signal for AmpSlice test * try and speed up test run * FluidSource test blackholed on MSVC It doesn't like GENERATE_REF nested in GENERATE. Nosir. * ignore all build folders for a quieter life * bump Eigen version (#93) * bump Eigen version * note new Eigen version in readme * add mammoth dataset * OnsetSlice and NoveltySlice clients: fix block size dependency (#96) Makes tracking of `frameOffset` stateful across calls to `process` so that odd hop sizes are handled correctly * Use `operator<<=` for copy to / from FluidTensorView * update all instances of FluidTensorView copying * Signals.cpp.in fix lingering copy assignment * Add conventional, shallow copy / move assignment to FluidTensorView * `SliceIterator::end()` fix (#97) * fix problem with 0-size slices and end() sentinels * adds basic test for slice ietrator fix * annotate datasets * add mfcc for fluid_corpus * update mfcc dataset * bump version to beta5 (#101) * Add pointwise inversion to PCA * Enhance `ParameterSet` (#103) * Meta: Add HO function to apply function only to select indicies of a tuple * ParameterSet: Easier application of functions by type with lambdas + discovering the count of params by type * BufStats: Weights should be an input buffer * [Fix] Make error language more consistent (#118) * replace incorrect use of label where identifier is intended * dont shorten identifier to id * rename DuplicateLabel to DuplicateIdentifier * Enhance/slicer detection curves (#114) * EnvelopeSegmentation: refactor into feature curve + detector * NoveltySegementation: refactor into feature curve + detector * OnsetSegmentation: refactor into feature curve + detector * Add OnsetFeatureClient * Add NoveltyFeatureClient * Add AmpFeatureClient * correct novelty and onset curves for nrt * fix longstanding assumption in NRT wrapper that client latency == window size * Update NoveltyFeatureClient to new analysisSettings method * remove old FIXME comment * fix cout call killing test on windows * Missing update change to OnsetFeatureClient::analysisSettings() * algorithms: NoveltyCurve -> NoveltyFeature * Novelty: Update algorihtm class name, and change 'feature' param to algorithm * Also update names in NovletySegmentation * BufOnsetFeature correct output buffer name * Novelty / OnsetFeature - cache descriptor values for when sigvs < hop * more information on failing test thx * Enhance/fewer warnings (#85) * excess semicolons * unused variables * type narrowing / signed-unsigned * integer conversions: new Eigen::Array alias for index rather than int * json: stop embedding nlohmann library and instead fetch at configure time (#105) * ParameterDescriptors: make more composable by adding insert function (#107) * FluidJSON: Avoid some implicit conversion on import that could confuse compiler * Deal with some warnings * EnvelopeSegmentation: pass correct params to Envelope * FluidTensorView deep copy gets distinct operator (#100) * Add pointwise inversion to PCA * Use `operator<<=` for copy to / from FluidTensorView * update all instances of FluidTensorView copying * Signals.cpp.in fix lingering copy assignment * Add conventional, shallow copy / move assignment to FluidTensorView * `SliceIterator::end()` fix (#97) * fix problem with 0-size slices and end() sentinels * adds basic test for slice ietrator fix * annotate datasets * add mfcc for fluid_corpus * update mfcc dataset * bump version to beta5 (#101) * [Release] 1.0.0-beta5 (#102) * batchsize was not capped down, leading to hilarious crashes (#63) * updating credits with the new team * Include SHAs for flucoma-core and current project in version string * Conform version string with SHAs to semantic versioning spec * add chroma feature to NoveltySlice * Toggle BLAS settings for compiling on APPLE (#67) * disable blas for compiling on macos * remove line according to O's suggestion * error in the client of (buf)noveltyslice since introducing chroma as feature * Enhance/versioning (#75) * Remove old header template * Add in TU template and declaration header * update CMake to new version scheme * Get SHA from top level source folder * ensure git is found * fix issue #23 - zeroing the output vector in the mTracker loop (#82) * fix issue #23 - zeroing the output vector in the mTracker loop * now really corrected thanks to @weefuzzy * Initial unit tests for `include/data` (#83) * initial FluidTensor tests * add assert death test to cmake * more assert death * fix compile tests * Working assertion tests, it seems * Add first FluidTensorView tests * tidy up cmake a bit * factor out EqualRange matcher to own header * Add FluidTensorSupport tests * rollback to Catch2 for compatability with approvaltests.cpp * add tests for FluidDataSet bubba's first approval test ✨ * test print for bigger range as well * tidy cmake * make building tests optional * remove spurious files from tracking * add workflow for CI * make workflow manually triggerable * correct workflow file extention * pleading and bargaining with github * getting event name right * FluidTensorSlice: fix terrible and aged typename mistake * workflow: try and cache whole build folder * wotkflow: unbreak yaml * workflow: disable fail-fast * Amend upper frequency limit of mel bands in NoveltySlice to 20kHz * [Enhance] FluCoMa-wide DataSets as a resource (#88) * treat wav files as binary * move audio files to resources folder * add datasets * add pre-trained neural networks * add flucoma corpus * move datasets to data * BufAudioTransport now has A-B based arguments * fix mistakenly fixed type signature in FluidSink * Tests for framing and overlap add bits * remove build folder caching as a bad job (failing forever once cache goes bad) * Test/sc ports/slicers (#91) * Working port of SC NoveltySlice tests * formatting and constifying * use generated path for test signal loading * update testsignals header and cmake * Add TestOnsetSegmention, update TestNoveltySeg for new resource loading * Add Onsets and update novelty in CMake * Add EnvelopeSeg tests and some missing headers * Add EnvelopeGate tests * Add TransientSlice tests * update location of audio files * add missing function to signals.cpp.in * Fix test signal for AmpSlice test * try and speed up test run * FluidSource test blackholed on MSVC It doesn't like GENERATE_REF nested in GENERATE. Nosir. * ignore all build folders for a quieter life * bump Eigen version (#93) * bump Eigen version * note new Eigen version in readme * add mammoth dataset * OnsetSlice and NoveltySlice clients: fix block size dependency (#96) Makes tracking of `frameOffset` stateful across calls to `process` so that odd hop sizes are handled correctly * `SliceIterator::end()` fix (#97) * fix problem with 0-size slices and end() sentinels * adds basic test for slice ietrator fix * annotate datasets * add mfcc for fluid_corpus * update mfcc dataset * bump version to beta5 (#101) Co-authored-by: tremblap <[email protected]> Co-authored-by: weefuzzy <[email protected]> Co-authored-by: g-roma <[email protected]> Co-authored-by: Ted Moore <[email protected]> * Add pointwise inversion to PCA * Enhance `ParameterSet` (#103) * Meta: Add HO function to apply function only to select indicies of a tuple * ParameterSet: Easier application of functions by type with lambdas + discovering the count of params by type * BufStats: Weights should be an input buffer * [Fix] Make error language more consistent (#118) * replace incorrect use of label where identifier is intended * dont shorten identifier to id * rename DuplicateLabel to DuplicateIdentifier * Enhance/slicer detection curves (#114) * EnvelopeSegmentation: refactor into feature curve + detector * NoveltySegementation: refactor into feature curve + detector * OnsetSegmentation: refactor into feature curve + detector * Add OnsetFeatureClient * Add NoveltyFeatureClient * Add AmpFeatureClient * correct novelty and onset curves for nrt * fix longstanding assumption in NRT wrapper that client latency == window size * Update NoveltyFeatureClient to new analysisSettings method * remove old FIXME comment * fix cout call killing test on windows * Missing update change to OnsetFeatureClient::analysisSettings() * algorithms: NoveltyCurve -> NoveltyFeature * Novelty: Update algorihtm class name, and change 'feature' param to algorithm * Also update names in NovletySegmentation * BufOnsetFeature correct output buffer name * Novelty / OnsetFeature - cache descriptor values for when sigvs < hop * more information on failing test thx * [Release] 1.0.0-beta6 (#126) * Add pointwise inversion to PCA * batchsize was not capped down, leading to hilarious crashes (#63) * updating credits with the new team * Include SHAs for flucoma-core and current project in version string * Conform version string with SHAs to semantic versioning spec * add chroma feature to NoveltySlice * Toggle BLAS settings for compiling on APPLE (#67) * disable blas for compiling on macos * remove line according to O's suggestion * error in the client of (buf)noveltyslice since introducing chroma as feature * Enhance/versioning (#75) * Remove old header template * Add in TU template and declaration header * update CMake to new version scheme * Get SHA from top level source folder * ensure git is found * fix issue #23 - zeroing the output vector in the mTracker loop (#82) * fix issue #23 - zeroing the output vector in the mTracker loop * now really corrected thanks to @weefuzzy * Initial unit tests for `include/data` (#83) * initial FluidTensor tests * add assert death test to cmake * more assert death * fix compile tests * Working assertion tests, it seems * Add first FluidTensorView tests * tidy up cmake a bit * factor out EqualRange matcher to own header * Add FluidTensorSupport tests * rollback to Catch2 for compatability with approvaltests.cpp * add tests for FluidDataSet bubba's first approval test ✨ * test print for bigger range as well * tidy cmake * make building tests optional * remove spurious files from tracking * add workflow for CI * make workflow manually triggerable * correct workflow file extention * pleading and bargaining with github * getting event name right * FluidTensorSlice: fix terrible and aged typename mistake * workflow: try and cache whole build folder * wotkflow: unbreak yaml * workflow: disable fail-fast * Amend upper frequency limit of mel bands in NoveltySlice to 20kHz * [Enhance] FluCoMa-wide DataSets as a resource (#88) * treat wav files as binary * move audio files to resources folder * add datasets * add pre-trained neural networks * add flucoma corpus * move datasets to data * BufAudioTransport now has A-B based arguments * fix mistakenly fixed type signature in FluidSink * Tests for framing and overlap add bits * remove build folder caching as a bad job (failing forever once cache goes bad) * Test/sc ports/slicers (#91) * Working port of SC NoveltySlice tests * formatting and constifying * use generated path for test signal loading * update testsignals header and cmake * Add TestOnsetSegmention, update TestNoveltySeg for new resource loading * Add Onsets and update novelty in CMake * Add EnvelopeSeg tests and some missing headers * Add EnvelopeGate tests * Add TransientSlice tests * update location of audio files * add missing function to signals.cpp.in * Fix test signal for AmpSlice test * try and speed up test run * FluidSource test blackholed on MSVC It doesn't like GENERATE_REF nested in GENERATE. Nosir. * ignore all build folders for a quieter life * bump Eigen version (#93) * bump Eigen version * note new Eigen version in readme * add mammoth dataset * OnsetSlice and NoveltySlice clients: fix block size dependency (#96) Makes tracking of `frameOffset` stateful across calls to `process` so that odd hop sizes are handled correctly * `SliceIterator::end()` fix (#97) * fix problem with 0-size slices and end() sentinels * adds basic test for slice ietrator fix * annotate datasets * add mfcc for fluid_corpus * update mfcc dataset * bump version to beta5 (#101) * Add pointwise inversion to PCA * Enhance `ParameterSet` (#103) * Meta: Add HO function to apply function only to select indicies of a tuple * ParameterSet: Easier application of functions by type with lambdas + discovering the count of params by type * BufStats: Weights should be an input buffer * [Fix] Make error language more consistent (#118) * replace incorrect use of label where identifier is intended * dont shorten identifier to id * rename DuplicateLabel to DuplicateIdentifier * Enhance/slicer detection curves (#114) * EnvelopeSegmentation: refactor into feature curve + detector * NoveltySegementation: refactor into feature curve + detector * OnsetSegmentation: refactor into feature curve + detector * Add OnsetFeatureClient * Add NoveltyFeatureClient * Add AmpFeatureClient * correct novelty and onset curves for nrt * fix longstanding assumption in NRT wrapper that client latency == window size * Update NoveltyFeatureClient to new analysisSettings method * remove old FIXME comment * fix cout call killing test on windows * Missing update change to OnsetFeatureClient::analysisSettings() * algorithms: NoveltyCurve -> NoveltyFeature * Novelty: Update algorihtm class name, and change 'feature' param to algorithm * Also update names in NovletySegmentation * BufOnsetFeature correct output buffer name * Novelty / OnsetFeature - cache descriptor values for when sigvs < hop * more information on failing test thx Co-authored-by: Owen Green <[email protected]> Co-authored-by: tremblap <[email protected]> Co-authored-by: g-roma <[email protected]> Co-authored-by: James Bradbury <[email protected]> Co-authored-by: Ted Moore <[email protected]> * Update FlucomaVersion.cmake * Enhance/fewer warnings (#85) * excess semicolons * unused variables * type narrowing / signed-unsigned * integer conversions: new Eigen::Array alias for index rather than int * json: stop embedding nlohmann library and instead fetch at configure time (#105) * ParameterDescriptors: make more composable by adding insert function (#107) * FluidJSON: Avoid some implicit conversion on import that could confuse compiler * Deal with some warnings * EnvelopeSegmentation: pass correct params to Envelope * update with new FluidTensorView copying ops * Use Windows 2019 in CI * Parallel tests seem unreliable on windows Co-authored-by: James Bradbury <[email protected]> Co-authored-by: tremblap <[email protected]> Co-authored-by: g-roma <[email protected]> Co-authored-by: Ted Moore <[email protected]> Co-authored-by: James Bradbury <[email protected]> * Enhance/const correct(er) dataobjects (#115) * Const correct arguments for data object messages; actually const object refs for RT usage * MLP const update * SharedClient const updates * workflow: Disable parallel test runner and turn up verbosity * remove std::cout access from segfaulting test (just in case) * NoveltySlice: ensure frame offset is reset when win / hop changes * correcting the long definition for novelty clients * NoveltySegmentation: Correct order of arguments in constructor * Assign2D: Make UNASSIGNED constexpr to solve strange linker error * Assign2D: still needs out-of-class declaration for UNASSIGNED to link reliably * corrected and augmented the credits/info of Data * flucoma_corpus_files: typo in the file names * Sound bank change (#135) * removed redundant files and added constanzo * new dataset to load in help files * saved norm * BufFlatten: Workaround PD-release builds problem with temporary buffer views * add pca whitening (#98) * add pca whitening * actually add pca whitening * PCA: add de-whitening to inverseTransformPoint * PCAClient: update call to inverseTransformPoint Co-authored-by: weefuzzy <[email protected]> * Enhance/optional message args (#106) * Add dependency for Sy Brand's `optional` backport * include optional in MessageSet add alias (in case we need to switch between `std::` and `tl::`) * try out optional arg in `KDTreeClient::kNearest` * compile-time enforce that optional args must follow mandatory ones * stop tl:optional doing its tests * PoC: Enhance/choices param (#108) * Add ChoiceT parameter type * Add `select` control to `BufStatsClient` to road test `ChoicesParam` * Choices params: Don't use a set because it breaks ordering * SpectralShape: Add select param * add dataset version of inverse PCA (#125) * add dataset version of inverse PCA * PCA: Add whitening to batch inverse transform * Enhance/max params (#132) * CMake: Centralise C++ version and set to 17 * Introduce long param type with a user-defined maximum + 'primary' params – e.g. max coeffs for MFCC) - decoupling Max/PD arguments from 'fixed' params – * MFCC: Proof of concept for new way of expressing runtime max for certain params * CMake: Missing C++ version adjustments * CMake: Another rogue C++ version flag * Try to get catch to build on OS 12 whilst targetting 10.8 * NMFClient: Add resynth mode to de-magic interface (#133) Also allow resynth from fixed bases + activations * All Scalers: Replace `invert` parameter with `inverseTransform` messages * Stop being too clever in LongRuntimeMaxParam (thought I'd already done this...) * Convert remaining `max<X>` parameters and `maxFFTsize` to new order of things * SpectralShape: Ensure output channel count responds to select param * MLPClassifier: Missing const in type alias * MLP clients: change 'hidden' to 'hiddenlayers'. fixes #143 to work around name clash with special attribute in Max * [Enhance] ChoicesParam for LoudnessClient and PitchClient (#141) * update loudness client to have a ChoicesParam * rename truepeak selection to peak * replace mMaxOutPutSize with fixed value of 2 * Add / fix select for Loudness and Pitch clients Harmonize SpectralShape code Adjust FluidBufLoudness hack in NRT wrapper * adds a patch to redo the included demo dataset (in pd) * MaxParams: toughen up * dealing with scaler range near 0 (#144) * makes a function that compares the range to 10*lambda - in line with SciKit Learn * aesthetic include order to be like the other 2 scalers * NRTWrapper: Fix for multichannel behaviour with @select * OnsetSliceClient: Reset frame offset when FFT params change, fixes #145 * CMake: Make version data globally available via properties * CMake: add the big ol list of core clients plus support code * Add new features to central CMake, plus small improvements and version bump * CMake: Turn down the volume for FetchContent * CMake: Get rid of old diagnostic messages * CMake: quote module path * CMake: Set module path correctly when there is parent project * CMake: Debug module path logic * CMake: Superstitous attempt to fix 403 errors when cloning eigen on CI * zap typo Maxiumm * fised typo Magnitdue * MaxParam: correct initialization order * RunningStats: change `size` to `history` * CMake: We need to be able to declare IO properties of clients up front * MLP* camel case hiddenLayers * NMFCrossClient: Prevent buffer overrun crashes by ensuring polyphony <= rank * Chroma: Fix Eigen variable aliasing causing UB * NMFMorph: avoid crash if OptimalTransport fails to segment spectrum * CMake: Enable PIC to make Linux CI happier. I hope * BufNNDSVD -> BufNMFSeed (#173) * change the client name - kept the algo name as it does what it says * algo name confounded with client name in the code * change parameter name in client to interpolation (#174) * Feature/skmeans (#99) * add pca whitening * actually add pca whitening * add spherical kmeans * actually add spherical kmeans * SKMeans fixes, change KMeans getDistances to transform * adding RT query class * <fit>transform<point> -> <fit>encode<point> Co-authored-by: tremblap <[email protected]> * ChoicesT: Correct for faulty use of `static` fixes #175 * `(S)KMeansClient`: Track `numClusters` and clear if it changes before fitting fixes #176 * KMeansClient: Work around over agressive optimisation * bump flucoma version
* Add pointwise inversion to PCA * batchsize was not capped down, leading to hilarious crashes (#63) * updating credits with the new team * Include SHAs for flucoma-core and current project in version string * Conform version string with SHAs to semantic versioning spec * add chroma feature to NoveltySlice * Toggle BLAS settings for compiling on APPLE (#67) * disable blas for compiling on macos * remove line according to O's suggestion * error in the client of (buf)noveltyslice since introducing chroma as feature * Enhance/versioning (#75) * Remove old header template * Add in TU template and declaration header * update CMake to new version scheme * Get SHA from top level source folder * ensure git is found * fix issue #23 - zeroing the output vector in the mTracker loop (#82) * fix issue #23 - zeroing the output vector in the mTracker loop * now really corrected thanks to @weefuzzy * Initial unit tests for `include/data` (#83) * initial FluidTensor tests * add assert death test to cmake * more assert death * fix compile tests * Working assertion tests, it seems * Add first FluidTensorView tests * tidy up cmake a bit * factor out EqualRange matcher to own header * Add FluidTensorSupport tests * rollback to Catch2 for compatability with approvaltests.cpp * add tests for FluidDataSet bubba's first approval test ✨ * test print for bigger range as well * tidy cmake * make building tests optional * remove spurious files from tracking * add workflow for CI * make workflow manually triggerable * correct workflow file extention * pleading and bargaining with github * getting event name right * FluidTensorSlice: fix terrible and aged typename mistake * workflow: try and cache whole build folder * wotkflow: unbreak yaml * workflow: disable fail-fast * Amend upper frequency limit of mel bands in NoveltySlice to 20kHz * [Enhance] FluCoMa-wide DataSets as a resource (#88) * treat wav files as binary * move audio files to resources folder * add datasets * add pre-trained neural networks * add flucoma corpus * move datasets to data * BufAudioTransport now has A-B based arguments * fix mistakenly fixed type signature in FluidSink * Tests for framing and overlap add bits * remove build folder caching as a bad job (failing forever once cache goes bad) * Test/sc ports/slicers (#91) * Working port of SC NoveltySlice tests * formatting and constifying * use generated path for test signal loading * update testsignals header and cmake * Add TestOnsetSegmention, update TestNoveltySeg for new resource loading * Add Onsets and update novelty in CMake * Add EnvelopeSeg tests and some missing headers * Add EnvelopeGate tests * Add TransientSlice tests * update location of audio files * add missing function to signals.cpp.in * Fix test signal for AmpSlice test * try and speed up test run * FluidSource test blackholed on MSVC It doesn't like GENERATE_REF nested in GENERATE. Nosir. * ignore all build folders for a quieter life * bump Eigen version (#93) * bump Eigen version * note new Eigen version in readme * add mammoth dataset * OnsetSlice and NoveltySlice clients: fix block size dependency (#96) Makes tracking of `frameOffset` stateful across calls to `process` so that odd hop sizes are handled correctly * Use `operator<<=` for copy to / from FluidTensorView * update all instances of FluidTensorView copying * Signals.cpp.in fix lingering copy assignment * Add conventional, shallow copy / move assignment to FluidTensorView * `SliceIterator::end()` fix (#97) * fix problem with 0-size slices and end() sentinels * adds basic test for slice ietrator fix * annotate datasets * add mfcc for fluid_corpus * update mfcc dataset * bump version to beta5 (#101) * Add pointwise inversion to PCA * Enhance `ParameterSet` (#103) * Meta: Add HO function to apply function only to select indicies of a tuple * ParameterSet: Easier application of functions by type with lambdas + discovering the count of params by type * BufStats: Weights should be an input buffer * [Fix] Make error language more consistent (#118) * replace incorrect use of label where identifier is intended * dont shorten identifier to id * rename DuplicateLabel to DuplicateIdentifier * Enhance/slicer detection curves (#114) * EnvelopeSegmentation: refactor into feature curve + detector * NoveltySegementation: refactor into feature curve + detector * OnsetSegmentation: refactor into feature curve + detector * Add OnsetFeatureClient * Add NoveltyFeatureClient * Add AmpFeatureClient * correct novelty and onset curves for nrt * fix longstanding assumption in NRT wrapper that client latency == window size * Update NoveltyFeatureClient to new analysisSettings method * remove old FIXME comment * fix cout call killing test on windows * Missing update change to OnsetFeatureClient::analysisSettings() * algorithms: NoveltyCurve -> NoveltyFeature * Novelty: Update algorihtm class name, and change 'feature' param to algorithm * Also update names in NovletySegmentation * BufOnsetFeature correct output buffer name * Novelty / OnsetFeature - cache descriptor values for when sigvs < hop * more information on failing test thx * Enhance/fewer warnings (#85) * excess semicolons * unused variables * type narrowing / signed-unsigned * integer conversions: new Eigen::Array alias for index rather than int * json: stop embedding nlohmann library and instead fetch at configure time (#105) * ParameterDescriptors: make more composable by adding insert function (#107) * FluidJSON: Avoid some implicit conversion on import that could confuse compiler * Deal with some warnings * EnvelopeSegmentation: pass correct params to Envelope * FluidTensorView deep copy gets distinct operator (#100) * Add pointwise inversion to PCA * Use `operator<<=` for copy to / from FluidTensorView * update all instances of FluidTensorView copying * Signals.cpp.in fix lingering copy assignment * Add conventional, shallow copy / move assignment to FluidTensorView * `SliceIterator::end()` fix (#97) * fix problem with 0-size slices and end() sentinels * adds basic test for slice ietrator fix * annotate datasets * add mfcc for fluid_corpus * update mfcc dataset * bump version to beta5 (#101) * [Release] 1.0.0-beta5 (#102) * batchsize was not capped down, leading to hilarious crashes (#63) * updating credits with the new team * Include SHAs for flucoma-core and current project in version string * Conform version string with SHAs to semantic versioning spec * add chroma feature to NoveltySlice * Toggle BLAS settings for compiling on APPLE (#67) * disable blas for compiling on macos * remove line according to O's suggestion * error in the client of (buf)noveltyslice since introducing chroma as feature * Enhance/versioning (#75) * Remove old header template * Add in TU template and declaration header * update CMake to new version scheme * Get SHA from top level source folder * ensure git is found * fix issue #23 - zeroing the output vector in the mTracker loop (#82) * fix issue #23 - zeroing the output vector in the mTracker loop * now really corrected thanks to @weefuzzy * Initial unit tests for `include/data` (#83) * initial FluidTensor tests * add assert death test to cmake * more assert death * fix compile tests * Working assertion tests, it seems * Add first FluidTensorView tests * tidy up cmake a bit * factor out EqualRange matcher to own header * Add FluidTensorSupport tests * rollback to Catch2 for compatability with approvaltests.cpp * add tests for FluidDataSet bubba's first approval test ✨ * test print for bigger range as well * tidy cmake * make building tests optional * remove spurious files from tracking * add workflow for CI * make workflow manually triggerable * correct workflow file extention * pleading and bargaining with github * getting event name right * FluidTensorSlice: fix terrible and aged typename mistake * workflow: try and cache whole build folder * wotkflow: unbreak yaml * workflow: disable fail-fast * Amend upper frequency limit of mel bands in NoveltySlice to 20kHz * [Enhance] FluCoMa-wide DataSets as a resource (#88) * treat wav files as binary * move audio files to resources folder * add datasets * add pre-trained neural networks * add flucoma corpus * move datasets to data * BufAudioTransport now has A-B based arguments * fix mistakenly fixed type signature in FluidSink * Tests for framing and overlap add bits * remove build folder caching as a bad job (failing forever once cache goes bad) * Test/sc ports/slicers (#91) * Working port of SC NoveltySlice tests * formatting and constifying * use generated path for test signal loading * update testsignals header and cmake * Add TestOnsetSegmention, update TestNoveltySeg for new resource loading * Add Onsets and update novelty in CMake * Add EnvelopeSeg tests and some missing headers * Add EnvelopeGate tests * Add TransientSlice tests * update location of audio files * add missing function to signals.cpp.in * Fix test signal for AmpSlice test * try and speed up test run * FluidSource test blackholed on MSVC It doesn't like GENERATE_REF nested in GENERATE. Nosir. * ignore all build folders for a quieter life * bump Eigen version (#93) * bump Eigen version * note new Eigen version in readme * add mammoth dataset * OnsetSlice and NoveltySlice clients: fix block size dependency (#96) Makes tracking of `frameOffset` stateful across calls to `process` so that odd hop sizes are handled correctly * `SliceIterator::end()` fix (#97) * fix problem with 0-size slices and end() sentinels * adds basic test for slice ietrator fix * annotate datasets * add mfcc for fluid_corpus * update mfcc dataset * bump version to beta5 (#101) Co-authored-by: tremblap <[email protected]> Co-authored-by: weefuzzy <[email protected]> Co-authored-by: g-roma <[email protected]> Co-authored-by: Ted Moore <[email protected]> * Add pointwise inversion to PCA * Enhance `ParameterSet` (#103) * Meta: Add HO function to apply function only to select indicies of a tuple * ParameterSet: Easier application of functions by type with lambdas + discovering the count of params by type * BufStats: Weights should be an input buffer * [Fix] Make error language more consistent (#118) * replace incorrect use of label where identifier is intended * dont shorten identifier to id * rename DuplicateLabel to DuplicateIdentifier * Enhance/slicer detection curves (#114) * EnvelopeSegmentation: refactor into feature curve + detector * NoveltySegementation: refactor into feature curve + detector * OnsetSegmentation: refactor into feature curve + detector * Add OnsetFeatureClient * Add NoveltyFeatureClient * Add AmpFeatureClient * correct novelty and onset curves for nrt * fix longstanding assumption in NRT wrapper that client latency == window size * Update NoveltyFeatureClient to new analysisSettings method * remove old FIXME comment * fix cout call killing test on windows * Missing update change to OnsetFeatureClient::analysisSettings() * algorithms: NoveltyCurve -> NoveltyFeature * Novelty: Update algorihtm class name, and change 'feature' param to algorithm * Also update names in NovletySegmentation * BufOnsetFeature correct output buffer name * Novelty / OnsetFeature - cache descriptor values for when sigvs < hop * more information on failing test thx * [Release] 1.0.0-beta6 (#126) * Add pointwise inversion to PCA * batchsize was not capped down, leading to hilarious crashes (#63) * updating credits with the new team * Include SHAs for flucoma-core and current project in version string * Conform version string with SHAs to semantic versioning spec * add chroma feature to NoveltySlice * Toggle BLAS settings for compiling on APPLE (#67) * disable blas for compiling on macos * remove line according to O's suggestion * error in the client of (buf)noveltyslice since introducing chroma as feature * Enhance/versioning (#75) * Remove old header template * Add in TU template and declaration header * update CMake to new version scheme * Get SHA from top level source folder * ensure git is found * fix issue #23 - zeroing the output vector in the mTracker loop (#82) * fix issue #23 - zeroing the output vector in the mTracker loop * now really corrected thanks to @weefuzzy * Initial unit tests for `include/data` (#83) * initial FluidTensor tests * add assert death test to cmake * more assert death * fix compile tests * Working assertion tests, it seems * Add first FluidTensorView tests * tidy up cmake a bit * factor out EqualRange matcher to own header * Add FluidTensorSupport tests * rollback to Catch2 for compatability with approvaltests.cpp * add tests for FluidDataSet bubba's first approval test ✨ * test print for bigger range as well * tidy cmake * make building tests optional * remove spurious files from tracking * add workflow for CI * make workflow manually triggerable * correct workflow file extention * pleading and bargaining with github * getting event name right * FluidTensorSlice: fix terrible and aged typename mistake * workflow: try and cache whole build folder * wotkflow: unbreak yaml * workflow: disable fail-fast * Amend upper frequency limit of mel bands in NoveltySlice to 20kHz * [Enhance] FluCoMa-wide DataSets as a resource (#88) * treat wav files as binary * move audio files to resources folder * add datasets * add pre-trained neural networks * add flucoma corpus * move datasets to data * BufAudioTransport now has A-B based arguments * fix mistakenly fixed type signature in FluidSink * Tests for framing and overlap add bits * remove build folder caching as a bad job (failing forever once cache goes bad) * Test/sc ports/slicers (#91) * Working port of SC NoveltySlice tests * formatting and constifying * use generated path for test signal loading * update testsignals header and cmake * Add TestOnsetSegmention, update TestNoveltySeg for new resource loading * Add Onsets and update novelty in CMake * Add EnvelopeSeg tests and some missing headers * Add EnvelopeGate tests * Add TransientSlice tests * update location of audio files * add missing function to signals.cpp.in * Fix test signal for AmpSlice test * try and speed up test run * FluidSource test blackholed on MSVC It doesn't like GENERATE_REF nested in GENERATE. Nosir. * ignore all build folders for a quieter life * bump Eigen version (#93) * bump Eigen version * note new Eigen version in readme * add mammoth dataset * OnsetSlice and NoveltySlice clients: fix block size dependency (#96) Makes tracking of `frameOffset` stateful across calls to `process` so that odd hop sizes are handled correctly * `SliceIterator::end()` fix (#97) * fix problem with 0-size slices and end() sentinels * adds basic test for slice ietrator fix * annotate datasets * add mfcc for fluid_corpus * update mfcc dataset * bump version to beta5 (#101) * Add pointwise inversion to PCA * Enhance `ParameterSet` (#103) * Meta: Add HO function to apply function only to select indicies of a tuple * ParameterSet: Easier application of functions by type with lambdas + discovering the count of params by type * BufStats: Weights should be an input buffer * [Fix] Make error language more consistent (#118) * replace incorrect use of label where identifier is intended * dont shorten identifier to id * rename DuplicateLabel to DuplicateIdentifier * Enhance/slicer detection curves (#114) * EnvelopeSegmentation: refactor into feature curve + detector * NoveltySegementation: refactor into feature curve + detector * OnsetSegmentation: refactor into feature curve + detector * Add OnsetFeatureClient * Add NoveltyFeatureClient * Add AmpFeatureClient * correct novelty and onset curves for nrt * fix longstanding assumption in NRT wrapper that client latency == window size * Update NoveltyFeatureClient to new analysisSettings method * remove old FIXME comment * fix cout call killing test on windows * Missing update change to OnsetFeatureClient::analysisSettings() * algorithms: NoveltyCurve -> NoveltyFeature * Novelty: Update algorihtm class name, and change 'feature' param to algorithm * Also update names in NovletySegmentation * BufOnsetFeature correct output buffer name * Novelty / OnsetFeature - cache descriptor values for when sigvs < hop * more information on failing test thx Co-authored-by: Owen Green <[email protected]> Co-authored-by: tremblap <[email protected]> Co-authored-by: g-roma <[email protected]> Co-authored-by: James Bradbury <[email protected]> Co-authored-by: Ted Moore <[email protected]> * Update FlucomaVersion.cmake * Enhance/fewer warnings (#85) * excess semicolons * unused variables * type narrowing / signed-unsigned * integer conversions: new Eigen::Array alias for index rather than int * json: stop embedding nlohmann library and instead fetch at configure time (#105) * ParameterDescriptors: make more composable by adding insert function (#107) * FluidJSON: Avoid some implicit conversion on import that could confuse compiler * Deal with some warnings * EnvelopeSegmentation: pass correct params to Envelope * update with new FluidTensorView copying ops * Use Windows 2019 in CI * Parallel tests seem unreliable on windows Co-authored-by: James Bradbury <[email protected]> Co-authored-by: tremblap <[email protected]> Co-authored-by: g-roma <[email protected]> Co-authored-by: Ted Moore <[email protected]> Co-authored-by: James Bradbury <[email protected]> * Enhance/const correct(er) dataobjects (#115) * Const correct arguments for data object messages; actually const object refs for RT usage * MLP const update * SharedClient const updates * workflow: Disable parallel test runner and turn up verbosity * remove std::cout access from segfaulting test (just in case) * NoveltySlice: ensure frame offset is reset when win / hop changes * correcting the long definition for novelty clients * NoveltySegmentation: Correct order of arguments in constructor * Assign2D: Make UNASSIGNED constexpr to solve strange linker error * Assign2D: still needs out-of-class declaration for UNASSIGNED to link reliably * corrected and augmented the credits/info of Data * flucoma_corpus_files: typo in the file names * Sound bank change (#135) * removed redundant files and added constanzo * new dataset to load in help files * saved norm * BufFlatten: Workaround PD-release builds problem with temporary buffer views * add pca whitening (#98) * add pca whitening * actually add pca whitening * PCA: add de-whitening to inverseTransformPoint * PCAClient: update call to inverseTransformPoint Co-authored-by: weefuzzy <[email protected]> * Enhance/optional message args (#106) * Add dependency for Sy Brand's `optional` backport * include optional in MessageSet add alias (in case we need to switch between `std::` and `tl::`) * try out optional arg in `KDTreeClient::kNearest` * compile-time enforce that optional args must follow mandatory ones * stop tl:optional doing its tests * PoC: Enhance/choices param (#108) * Add ChoiceT parameter type * Add `select` control to `BufStatsClient` to road test `ChoicesParam` * Choices params: Don't use a set because it breaks ordering * SpectralShape: Add select param * add dataset version of inverse PCA (#125) * add dataset version of inverse PCA * PCA: Add whitening to batch inverse transform * Enhance/max params (#132) * CMake: Centralise C++ version and set to 17 * Introduce long param type with a user-defined maximum + 'primary' params – e.g. max coeffs for MFCC) - decoupling Max/PD arguments from 'fixed' params – * MFCC: Proof of concept for new way of expressing runtime max for certain params * CMake: Missing C++ version adjustments * CMake: Another rogue C++ version flag * Try to get catch to build on OS 12 whilst targetting 10.8 * NMFClient: Add resynth mode to de-magic interface (#133) Also allow resynth from fixed bases + activations * All Scalers: Replace `invert` parameter with `inverseTransform` messages * Stop being too clever in LongRuntimeMaxParam (thought I'd already done this...) * Convert remaining `max<X>` parameters and `maxFFTsize` to new order of things * SpectralShape: Ensure output channel count responds to select param * MLPClassifier: Missing const in type alias * MLP clients: change 'hidden' to 'hiddenlayers'. fixes #143 to work around name clash with special attribute in Max * [Enhance] ChoicesParam for LoudnessClient and PitchClient (#141) * update loudness client to have a ChoicesParam * rename truepeak selection to peak * replace mMaxOutPutSize with fixed value of 2 * Add / fix select for Loudness and Pitch clients Harmonize SpectralShape code Adjust FluidBufLoudness hack in NRT wrapper * adds a patch to redo the included demo dataset (in pd) * MaxParams: toughen up * dealing with scaler range near 0 (#144) * makes a function that compares the range to 10*lambda - in line with SciKit Learn * aesthetic include order to be like the other 2 scalers * NRTWrapper: Fix for multichannel behaviour with @select * OnsetSliceClient: Reset frame offset when FFT params change, fixes #145 * CMake: Make version data globally available via properties * CMake: add the big ol list of core clients plus support code * Add new features to central CMake, plus small improvements and version bump * CMake: Turn down the volume for FetchContent * CMake: Get rid of old diagnostic messages * CMake: quote module path * CMake: Set module path correctly when there is parent project * CMake: Debug module path logic * CMake: Superstitous attempt to fix 403 errors when cloning eigen on CI * zap typo Maxiumm * fised typo Magnitdue * MaxParam: correct initialization order * RunningStats: change `size` to `history` * CMake: We need to be able to declare IO properties of clients up front * MLP* camel case hiddenLayers * NMFCrossClient: Prevent buffer overrun crashes by ensuring polyphony <= rank * Chroma: Fix Eigen variable aliasing causing UB * NMFMorph: avoid crash if OptimalTransport fails to segment spectrum * CMake: Enable PIC to make Linux CI happier. I hope * BufNNDSVD -> BufNMFSeed (#173) * change the client name - kept the algo name as it does what it says * algo name confounded with client name in the code * change parameter name in client to interpolation (#174) * Feature/skmeans (#99) * add pca whitening * actually add pca whitening * add spherical kmeans * actually add spherical kmeans * SKMeans fixes, change KMeans getDistances to transform * adding RT query class * <fit>transform<point> -> <fit>encode<point> Co-authored-by: tremblap <[email protected]> * ChoicesT: Correct for faulty use of `static` fixes #175 * `(S)KMeansClient`: Track `numClusters` and clear if it changes before fitting fixes #176 * KMeansClient: Work around over agressive optimisation * bump flucoma version * make capitalisation consistent * SKMeans: Apply same fix as 1e668d5 * update version to 1.0.0
This PR adds the spherical kmeans algorithm. Along with PR #98 it would enable feature learning using the algorithm by Coates and Ng. The client duplicates a lot of code from KMeans. I am not sure about how to best avoid this using the current client infrastructure, so I wonder if it can be improved in the future. Another alternative could be having both algorithms available from the same client, but I think this would lead to confusion, since the model learnt wth one algorithm is not applicable to the other.