builder.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "builder.h"
  2. #include "common.h"
  3. #include <library/cpp/codecs/static/static_codec_info.pb.h>
  4. #include <library/cpp/codecs/codecs.h>
  5. #include <util/generic/yexception.h>
  6. #include <util/string/subst.h>
  7. namespace NCodecs {
  8. TStaticCodecInfo BuildStaticCodec(const TVector<TString>& trainingData, const TCodecBuildInfo& info) {
  9. TStaticCodecInfo result;
  10. TCodecPtr codec = ICodec::GetInstance(info.CodecName);
  11. Y_ENSURE_EX(codec, TCodecException() << "empty codec is not allowed");
  12. codec->LearnX(trainingData.begin(), trainingData.end(), info.SampleSizeMultiplier);
  13. {
  14. TStringOutput sout{*result.MutableStoredCodec()};
  15. ICodec::Store(&sout, codec);
  16. }
  17. auto& debugInfo = *result.MutableDebugInfo();
  18. debugInfo.SetStoredCodecHash(DataSignature(result.GetStoredCodec()));
  19. debugInfo.SetCodecName(info.CodecName);
  20. debugInfo.SetSampleSizeMultiplier(info.SampleSizeMultiplier);
  21. debugInfo.SetTimestamp(info.Timestamp);
  22. debugInfo.SetRevisionInfo(info.RevisionInfo);
  23. debugInfo.SetTrainingSetComment(info.TrainingSetComment);
  24. debugInfo.SetTrainingSetResId(info.TrainingSetResId);
  25. return result;
  26. }
  27. TString GetStandardFileName(const TStaticCodecInfo& info) {
  28. TString cName = info.GetDebugInfo().GetCodecName();
  29. SubstGlobal(cName, ':', '.');
  30. return TStringBuilder() << cName << "." << info.GetDebugInfo().GetTimestamp() << ".codec_info";
  31. }
  32. }