Route project files through prj/<name>/ instead of flat at repo root

Repo root had ~35 groups of .prj/.dat files loose alongside the build
system and source, all sharing one flat namespace. Centralize the new
prj/<name>/ convention inside AStack::loadWeights/saveWeights/
loadTrainingBatch/saveTrainingBatch and StackCreator::fromFile/toFile
(via a new AStack::projectDir() helper) -- these already have access to
the project name, so callers (poet.cpp, the GUI) need no changes at all;
they keep passing the same base directory they always did.

Filenames inside each project folder are unchanged (e.g.
prj/mnist_2/mnist_2.prj, prj/mnist_2/mnist_2.Layer.0.w.dat) -- only the
directory moves. Added Matutils::ensureDir() (mkdir -p equivalent; no
std::filesystem in C++11) since ofstream won't create directories, used
wherever a project is saved for the first time.

File migration for existing projects is a separate commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016K8Gu7Qejd11JbdiHZqYAs
This commit is contained in:
2026-07-27 14:41:05 +02:00
co-authored by Claude Sonnet 5
parent 4cf5f15555
commit ca27e1e705
4 changed files with 48 additions and 10 deletions
+14 -5
View File
@@ -117,6 +117,11 @@ Layer* AStack::getLastLayer() const
return getLayer(numLayers()-1);
}
std::string AStack::projectDir(const std::string &dir) const
{
return dir + "/prj/" + m_name;
}
bool AStack::save(const std::string &dir)
{
return StackCreator::toFile(this, dir, m_name);
@@ -134,11 +139,12 @@ void AStack::weightsInit(double stddev)
bool AStack::loadWeights(const std::string &dir)
{
std::string pdir = projectDir(dir);
bool result = true;
Layer *pLayer = m_pLayers;
while(pLayer)
{
bool success = pLayer->weightsLoad(dir, m_name);
bool success = pLayer->weightsLoad(pdir, m_name);
if (!success)
{
pLayer->weightsInit(0.01, 0);
@@ -151,11 +157,13 @@ bool AStack::loadWeights(const std::string &dir)
bool AStack::saveWeights(const std::string &dir)
{
std::string pdir = projectDir(dir);
ensureDir(pdir);
bool result = true;
Layer *pLayer = m_pLayers;
while(pLayer)
{
bool success = pLayer->weightsSave(dir, m_name);
bool success = pLayer->weightsSave(pdir, m_name);
result &= success;
pLayer = pLayer->next;
}
@@ -169,8 +177,7 @@ arma::mat& AStack::trainingBatch()
size_t AStack::loadTrainingBatch(const std::string &dir, bool doNormalize)
{
std::string filename = dir + "/" + m_name + ".training.dat";
std::string path = dir + "/" + m_name + ".training.dat";
std::string filename = projectDir(dir) + "/" + m_name + ".training.dat";
bool success = m_trainingBatch.load(filename, arma::auto_detect);
if (success)
@@ -190,7 +197,9 @@ size_t AStack::loadTrainingBatch(const std::string &dir, bool doNormalize)
size_t AStack::saveTrainingBatch(const std::string &dir)
{
std::string filename = dir + "/" + m_name + ".training.dat";
std::string pdir = projectDir(dir);
ensureDir(pdir);
std::string filename = pdir + "/" + m_name + ".training.dat";
bool success = m_trainingBatch.save(filename, arma::arma_ascii);
if (success)